@phenixrts/sdk 2023.2.9-beta.80 → 2023.2.11-beta.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/channels/debug/channels.js +208 -208
  2. package/channels/debug/package.json +1 -1
  3. package/channels/debug.private/channels.js +7 -2
  4. package/channels/debug.private/package.json +1 -1
  5. package/channels/es5.debug.private/channels.js +7 -2
  6. package/channels/es5.debug.private/package.json +1 -1
  7. package/channels/min/channels.js +1 -1
  8. package/channels/min/channels.js.map +1 -1
  9. package/channels/min/package.json +1 -1
  10. package/channels/min.private/channels.js +1 -1
  11. package/channels/min.private/channels.js.map +1 -1
  12. package/channels/min.private/package.json +1 -1
  13. package/channels/package.json +1 -1
  14. package/full/debug/full.js +208 -208
  15. package/full/debug/package.json +1 -1
  16. package/full/debug.private/full.js +7 -2
  17. package/full/debug.private/package.json +1 -1
  18. package/full/min/full.js +1 -1
  19. package/full/min/full.js.map +1 -1
  20. package/full/min/package.json +1 -1
  21. package/full/min.private/full.js +1 -1
  22. package/full/min.private/full.js.map +1 -1
  23. package/full/min.private/package.json +1 -1
  24. package/full/package.json +1 -1
  25. package/package.json +1 -1
  26. package/publish/debug/package.json +1 -1
  27. package/publish/debug/publish.js +2 -2
  28. package/publish/debug.private/package.json +1 -1
  29. package/publish/debug.private/publish.js +2 -2
  30. package/publish/min/package.json +1 -1
  31. package/publish/min/publish.js +1 -1
  32. package/publish/min/publish.js.map +1 -1
  33. package/publish/min.private/package.json +1 -1
  34. package/publish/min.private/publish.js +1 -1
  35. package/publish/min.private/publish.js.map +1 -1
  36. package/publish/package.json +1 -1
  37. package/types/{types/sdk/streaming/LiveStreaming.d.ts → sdk/streaming/ChunkedStreaming.d.ts} +4 -4
  38. package/types/{types/sdk → sdk}/streaming/HlsPlayer.d.ts +3 -3
  39. package/types/{types/sdk → sdk}/streaming/ShakaPlayer.d.ts +4 -4
  40. package/types/{types/sdk → sdk}/streaming/StreamTypes.d.ts +3 -3
  41. package/types/{types/sdk → sdk}/streaming/WebPlayer.d.ts +4 -4
  42. package/types/encoded-stream-transformation.d.ts +0 -14
  43. /package/types/{types/dom → dom}/ApplicationActivityMonitor.d.ts +0 -0
  44. /package/types/{types/dom → dom}/BrowserDetector.d.ts +0 -0
  45. /package/types/{types/dom → dom}/ConfigurationParameterReader.d.ts +0 -0
  46. /package/types/{types/dom → dom}/GarbageCollectorManager.d.ts +0 -0
  47. /package/types/{types/dom → dom}/IConfigurationParamaterReader.d.ts +0 -0
  48. /package/types/{types/dom → dom}/NetworkMonitor.d.ts +0 -0
  49. /package/types/{types/dom → dom}/PlainConfigurationParameterReader.d.ts +0 -0
  50. /package/types/{types/dom → dom}/StreamSetupListener.d.ts +0 -0
  51. /package/types/{types/edgeAuth → edgeAuth}/EdgeAuth.d.ts +0 -0
  52. /package/types/{types/edgeAuth → edgeAuth}/EdgeAuthParser.d.ts +0 -0
  53. /package/types/{types/edgeAuth → edgeAuth}/EdgeAuthToken.d.ts +0 -0
  54. /package/types/{types/edgeAuth → edgeAuth}/EdgeToken.d.ts +0 -0
  55. /package/types/{types/edgeAuth → edgeAuth}/EncodedEdgeToken.d.ts +0 -0
  56. /package/types/{types/environment → environment}/BuildFeatures.d.ts +0 -0
  57. /package/types/{types/environment → environment}/FeatureEnablement.d.ts +0 -0
  58. /package/types/{types/environment → environment}/Parameters.d.ts +0 -0
  59. /package/types/{types/lang → lang}/Disposable.d.ts +0 -0
  60. /package/types/{types/lang → lang}/DisposableList.d.ts +0 -0
  61. /package/types/{types/lang → lang}/IComparable.d.ts +0 -0
  62. /package/types/{types/lang → lang}/IDisposable.d.ts +0 -0
  63. /package/types/{types/lang → lang}/Strings.d.ts +0 -0
  64. /package/types/{types/lang → lang}/assertUnreachable.d.ts +0 -0
  65. /package/types/{types/logger → logger}/Appenders.d.ts +0 -0
  66. /package/types/{types/logger → logger}/ConsoleAppender.d.ts +0 -0
  67. /package/types/{types/logger → logger}/IAppender.d.ts +0 -0
  68. /package/types/{types/logger → logger}/Logger.d.ts +0 -0
  69. /package/types/{types/logger → logger}/LoggerDefaults.d.ts +0 -0
  70. /package/types/{types/logger → logger}/LoggerFactory.d.ts +0 -0
  71. /package/types/{types/logger → logger}/LoggerInterface.d.ts +0 -0
  72. /package/types/{types/logger → logger}/LoggingLevelMapping.d.ts +0 -0
  73. /package/types/{types/logger → logger}/LoggingThreshold.d.ts +0 -0
  74. /package/types/{types/metrics → metrics}/MetricType.d.ts +0 -0
  75. /package/types/{types/metrics → metrics}/MetricsConfiguration.d.ts +0 -0
  76. /package/types/{types/metrics → metrics}/MetricsFactory.d.ts +0 -0
  77. /package/types/{types/metrics → metrics}/MetricsService.d.ts +0 -0
  78. /package/types/{types/metrics → metrics}/MetricsType.d.ts +0 -0
  79. /package/types/{types/metrics → metrics}/TelemetricLevelMapping.d.ts +0 -0
  80. /package/types/{types/metrics → metrics}/TelemetryDefault.d.ts +0 -0
  81. /package/types/{types/promise → promise}/Promise.d.ts +0 -0
  82. /package/types/{types/promise → promise}/PromiseHandler.d.ts +0 -0
  83. /package/types/{types/rtc → rtc}/IPeerConnection.d.ts +0 -0
  84. /package/types/{types/rtc → rtc}/IPeerConnectionFactory.d.ts +0 -0
  85. /package/types/{types/rtc → rtc}/PeerConnectionService.d.ts +0 -0
  86. /package/types/{types/rtc → rtc}/RtcConfigurationManager.d.ts +0 -0
  87. /package/types/{types/rtc → rtc}/RtcConnectionMonitor.d.ts +0 -0
  88. /package/types/{types/rtc → rtc}/RtcPublishMonitor.d.ts +0 -0
  89. /package/types/{types/rtc → rtc}/SdpParser.d.ts +0 -0
  90. /package/types/{types/rtc → rtc}/VanillaPeerConnection.d.ts +0 -0
  91. /package/types/{types/rtc → rtc}/VanillaPeerConnectionFactory.d.ts +0 -0
  92. /package/types/{types/rx → rx}/ReadOnlySubject.d.ts +0 -0
  93. /package/types/{types/rx → rx}/Subject.d.ts +0 -0
  94. /package/types/{types/sdk → sdk}/Environment.d.ts +0 -0
  95. /package/types/{types/sdk → sdk}/SDK.d.ts +0 -0
  96. /package/types/{types/sdk → sdk}/TelemetryUrl.d.ts +0 -0
  97. /package/types/{types/sdk → sdk}/api/AddIceCandidates.d.ts +0 -0
  98. /package/types/{types/sdk → sdk}/api/DestroyStream.d.ts +0 -0
  99. /package/types/{types/sdk → sdk}/api/Publish.d.ts +0 -0
  100. /package/types/{types/sdk → sdk}/api/SetRemoteDescription.d.ts +0 -0
  101. /package/types/{types/sdk → sdk}/api/SetTemporaryMaximalBitrate.d.ts +0 -0
  102. /package/types/{types/sdk → sdk}/api/Subscribe.d.ts +0 -0
  103. /package/types/{types/sdk → sdk}/channels/Channel.d.ts +0 -0
  104. /package/types/{types/sdk → sdk}/channels/ChannelState.d.ts +0 -0
  105. /package/types/{types/sdk → sdk}/channels/Channels.d.ts +0 -0
  106. /package/types/{types/sdk → sdk}/channels/index.d.ts +0 -0
  107. /package/types/{types/sdk → sdk}/context/ChannelContext.d.ts +0 -0
  108. /package/types/{types/sdk → sdk}/context/PeerConnectionContext.d.ts +0 -0
  109. /package/types/{types/sdk → sdk}/context/StateContext.d.ts +0 -0
  110. /package/types/{types/sdk → sdk}/context/TokenContext.d.ts +0 -0
  111. /package/types/{types/sdk → sdk}/defaults.d.ts +0 -0
  112. /package/types/{types/sdk → sdk}/discovery/BitrateModeMapping.d.ts +0 -0
  113. /package/types/{types/sdk → sdk}/discovery/BitrateStateMapping.d.ts +0 -0
  114. /package/types/{types/sdk → sdk}/discovery/Discovery.d.ts +0 -0
  115. /package/types/{types/sdk → sdk}/discovery/DiscoveryService.d.ts +0 -0
  116. /package/types/{types/sdk → sdk}/discovery/DiscoveryUri.d.ts +0 -0
  117. /package/types/{types/sdk → sdk}/discovery/EndPoint.d.ts +0 -0
  118. /package/types/{types/sdk → sdk}/full/index.d.ts +0 -0
  119. /package/types/{types/sdk → sdk}/groups/index.d.ts +0 -0
  120. /package/types/{types/sdk → sdk}/messaging/index.d.ts +0 -0
  121. /package/types/{types/sdk → sdk}/publish/Publisher.d.ts +0 -0
  122. /package/types/{types/sdk → sdk}/publish/PublisherContext.d.ts +0 -0
  123. /package/types/{types/sdk → sdk}/publish/PublisherState.d.ts +0 -0
  124. /package/types/{types/sdk → sdk}/publish/Publishers.d.ts +0 -0
  125. /package/types/{types/sdk → sdk}/publish/RealTimePublisher.d.ts +0 -0
  126. /package/types/{types/sdk → sdk}/publish/index.d.ts +0 -0
  127. /package/types/{types/sdk → sdk}/streaming/ChunkedStream.d.ts +0 -0
  128. /package/types/{types/sdk → sdk}/streaming/IHlsPlayer.d.ts +0 -0
  129. /package/types/{types/sdk → sdk}/streaming/IStream.d.ts +0 -0
  130. /package/types/{types/sdk → sdk}/streaming/InsertableStreams.d.ts +0 -0
  131. /package/types/{types/sdk → sdk}/streaming/NetworkStates.d.ts +0 -0
  132. /package/types/{types/sdk → sdk}/streaming/RealTimeStream.d.ts +0 -0
  133. /package/types/{types/sdk → sdk}/streaming/RealTimeStreamFactory.d.ts +0 -0
  134. /package/types/{types/sdk → sdk}/streaming/StreamFactory.d.ts +0 -0
  135. /package/types/{types/sdk → sdk}/version/VersionManager.d.ts +0 -0
  136. /package/types/{types/telemetry → telemetry}/TelemetryApender.d.ts +0 -0
  137. /package/types/{types/telemetry → telemetry}/TelemetryConfiguration.d.ts +0 -0
  138. /package/types/{types/telemetry → telemetry}/TelemetryService.d.ts +0 -0
  139. /package/types/{types/time → time}/Duration.d.ts +0 -0
  140. /package/types/{types/time → time}/ExponentialBackoff.d.ts +0 -0
  141. /package/types/{types/units → units}/Units.d.ts +0 -0
  142. /package/types/{types/video → video}/Dimension.d.ts +0 -0
  143. /package/types/{types/video → video}/SessionTelemetry.d.ts +0 -0
  144. /package/types/{types/video → video}/VideoTelemetry.d.ts +0 -0
@@ -8001,7 +8001,7 @@ var EndPoint = /*#__PURE__*/function () {
8001
8001
  /* harmony import */ var _lang_DisposableList__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../lang/DisposableList */ "./src/lang/DisposableList.ts");
8002
8002
  /* harmony import */ var _logger_LoggerFactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../logger/LoggerFactory */ "./src/logger/LoggerFactory.ts");
8003
8003
  /* harmony import */ var _channels__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../channels */ "./src/sdk/channels/index.ts");
8004
- /* harmony import */ var _LiveStreaming__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./LiveStreaming */ "./src/sdk/streaming/LiveStreaming.ts");
8004
+ /* harmony import */ var _ChunkedStreaming__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ChunkedStreaming */ "./src/sdk/streaming/ChunkedStreaming.ts");
8005
8005
 
8006
8006
 
8007
8007
 
@@ -8056,11 +8056,11 @@ var ChunkedStream = /*#__PURE__*/function () {
8056
8056
  originStartTime: Date.now() - lag + _this._channelContext.endPoint.value.roundTripTime / 2,
8057
8057
  lag: lag
8058
8058
  };
8059
- return _LiveStreaming__WEBPACK_IMPORTED_MODULE_8__.LiveStreaming.start(_this._channelContext.videoElement.value, _this._channelContext.streamId, offerSdp, options).then(function (player) {
8059
+ return _ChunkedStreaming__WEBPACK_IMPORTED_MODULE_8__.ChunkedStreaming.start(_this._channelContext.videoElement.value, _this._channelContext.streamId, offerSdp, options).then(function (player) {
8060
8060
  _this.monitor(player);
8061
8061
  return player;
8062
8062
  }).catch(function (e) {
8063
- _this._logger.error('LiveStreaming failed', e);
8063
+ _this._logger.error('ChunkedStreaming failed', e);
8064
8064
  _this._channelContext.loading.value = false;
8065
8065
  _this._channelContext.playing.value = false;
8066
8066
  _this._channelContext.state.value = _channels__WEBPACK_IMPORTED_MODULE_7__.ChannelState.Stopped;
@@ -8073,7 +8073,7 @@ var ChunkedStream = /*#__PURE__*/function () {
8073
8073
  var _this2 = this;
8074
8074
  this._monitorDisposables.dispose();
8075
8075
  var timeout = window.setTimeout(function () {
8076
- var newStreamStatistics = _LiveStreaming__WEBPACK_IMPORTED_MODULE_8__.LiveStreaming.getStats();
8076
+ var newStreamStatistics = _ChunkedStreaming__WEBPACK_IMPORTED_MODULE_8__.ChunkedStreaming.getStats();
8077
8077
  if (_this2._streamStatistics && _this2._streamStatistics.currentTime >= newStreamStatistics.currentTime && _this2._streamStatistics.dataBuffered >= newStreamStatistics.dataBuffered) {
8078
8078
  _this2._monitorFailureCount++;
8079
8079
  if (_this2._monitorFailureCount > 6) {
@@ -8114,6 +8114,194 @@ var ChunkedStream = /*#__PURE__*/function () {
8114
8114
  }();
8115
8115
 
8116
8116
 
8117
+ /***/ }),
8118
+
8119
+ /***/ "./src/sdk/streaming/ChunkedStreaming.ts":
8120
+ /*!***********************************************!*
8121
+ !*** ./src/sdk/streaming/ChunkedStreaming.ts ***!
8122
+ \***********************************************/
8123
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
8124
+
8125
+ "use strict";
8126
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
8127
+ /* harmony export */ "ChunkedStreaming": () => /* binding */ ChunkedStreaming
8128
+ /* harmony export */ });
8129
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/asyncToGenerator.js */ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js");
8130
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__);
8131
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/classCallCheck.js */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");
8132
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1__);
8133
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/createClass.js */ "./node_modules/@babel/runtime/helpers/createClass.js");
8134
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2__);
8135
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/defineProperty.js */ "./node_modules/@babel/runtime/helpers/defineProperty.js");
8136
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3__);
8137
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./node_modules/@babel/runtime/regenerator/index.js */ "./node_modules/@babel/runtime/regenerator/index.js");
8138
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4__);
8139
+ /* harmony import */ var _environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../environment/FeatureEnablement */ "./src/environment/FeatureEnablement.ts");
8140
+ /* harmony import */ var _WebPlayer__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./WebPlayer */ "./src/sdk/streaming/WebPlayer.ts");
8141
+ /* harmony import */ var _SDK__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../SDK */ "./src/sdk/SDK.ts");
8142
+ /* harmony import */ var _ShakaPlayer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ShakaPlayer */ "./src/sdk/streaming/ShakaPlayer.ts");
8143
+ /* harmony import */ var _HlsPlayer__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./HlsPlayer */ "./src/sdk/streaming/HlsPlayer.ts");
8144
+ /* provided dependency */ var Promise = __webpack_require__(/*! ./src/promise/Promise */ "./src/promise/Promise.ts")["default"];
8145
+
8146
+
8147
+
8148
+
8149
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8150
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8151
+
8152
+ /**
8153
+ * Copyright 2023 Phenix Real Time Solutions, Inc. Confidential and Proprietary. All Rights Reserved.
8154
+ */
8155
+
8156
+
8157
+
8158
+
8159
+
8160
+ var ChunkedStreaming = /*#__PURE__*/function () {
8161
+ function ChunkedStreaming() {
8162
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default()(this, ChunkedStreaming);
8163
+ }
8164
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2___default()(ChunkedStreaming, null, [{
8165
+ key: "hlsPlayer",
8166
+ get: function get() {
8167
+ return this._hlsPlayer;
8168
+ }
8169
+ }, {
8170
+ key: "phenixWebPlayer",
8171
+ get: function get() {
8172
+ return this._phenixWebPlayer;
8173
+ }
8174
+ }, {
8175
+ key: "shaka",
8176
+ get: function get() {
8177
+ return this._shaka;
8178
+ }
8179
+ }, {
8180
+ key: "start",
8181
+ value: function () {
8182
+ var _start = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(videoElement, streamId, offerSdp, options) {
8183
+ var _this = this;
8184
+ return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
8185
+ while (1) switch (_context.prev = _context.next) {
8186
+ case 0:
8187
+ this._options = options;
8188
+ if (!(this._hlsPlayer || this._shaka || this._phenixWebPlayer)) {
8189
+ _context.next = 3;
8190
+ break;
8191
+ }
8192
+ return _context.abrupt("return", this.loaded(videoElement, streamId, offerSdp));
8193
+ case 3:
8194
+ if (!(!_SDK__WEBPACK_IMPORTED_MODULE_7__.default.webPlayerLoader && !_SDK__WEBPACK_IMPORTED_MODULE_7__.default.shakaPlayerLoader && !_SDK__WEBPACK_IMPORTED_MODULE_7__.default.hlsJsLoader)) {
8195
+ _context.next = 5;
8196
+ break;
8197
+ }
8198
+ throw new Error('No player is provided');
8199
+ case 5:
8200
+ if (!(!_SDK__WEBPACK_IMPORTED_MODULE_7__.default.webPlayerLoader && !_SDK__WEBPACK_IMPORTED_MODULE_7__.default.shakaPlayerLoader && !_SDK__WEBPACK_IMPORTED_MODULE_7__.default.hlsJsLoader)) {
8201
+ _context.next = 7;
8202
+ break;
8203
+ }
8204
+ throw new Error('Unsupported-feature, add stream player');
8205
+ case 7:
8206
+ return _context.abrupt("return", new Promise(function (resolve) {
8207
+ if (_SDK__WEBPACK_IMPORTED_MODULE_7__.default.hlsJsLoader) {
8208
+ _this._pending = true;
8209
+ _SDK__WEBPACK_IMPORTED_MODULE_7__.default.hlsJsLoader(function (player) {
8210
+ _this._hlsPlayer = player;
8211
+ if (_this._pending) {
8212
+ _this._pending = false;
8213
+ resolve(_this.loaded(videoElement, streamId, offerSdp));
8214
+ }
8215
+ });
8216
+ }
8217
+ if (_SDK__WEBPACK_IMPORTED_MODULE_7__.default.webPlayerLoader) {
8218
+ _this._pending = true;
8219
+ _SDK__WEBPACK_IMPORTED_MODULE_7__.default.webPlayerLoader(function (player) {
8220
+ _this._phenixWebPlayer = player;
8221
+ if (_this._pending) {
8222
+ _this._pending = false;
8223
+ resolve(_this.loaded(videoElement, streamId, offerSdp));
8224
+ }
8225
+ });
8226
+ }
8227
+ if (_SDK__WEBPACK_IMPORTED_MODULE_7__.default.shakaPlayerLoader) {
8228
+ _this._pending = true;
8229
+ _SDK__WEBPACK_IMPORTED_MODULE_7__.default.shakaPlayerLoader(function (player) {
8230
+ _this._shaka = player;
8231
+ if (_this._pending) {
8232
+ _this._pending = false;
8233
+ resolve(_this.loaded(videoElement, streamId, offerSdp));
8234
+ }
8235
+ });
8236
+ }
8237
+ }));
8238
+ case 8:
8239
+ case "end":
8240
+ return _context.stop();
8241
+ }
8242
+ }, _callee, this);
8243
+ }));
8244
+ function start(_x, _x2, _x3, _x4) {
8245
+ return _start.apply(this, arguments);
8246
+ }
8247
+ return start;
8248
+ }()
8249
+ }, {
8250
+ key: "getStats",
8251
+ value: function getStats() {
8252
+ if (this._player) {
8253
+ return this._player.getStats();
8254
+ }
8255
+ return null;
8256
+ }
8257
+ }, {
8258
+ key: "play",
8259
+ value: function play(Player, videoElement, streamId, offerSdp, options) {
8260
+ var dashManifestUrlMatch = offerSdp.match(/a=x-playlist:([^\n]*[.]mpd\??[^\s]*)/m);
8261
+ var hlsManifestUrlMatch = offerSdp.match(/a=x-playlist:([^\n]*[.]m3u8\??[^\s]*)/m);
8262
+ var manifestUrl = dashManifestUrlMatch && dashManifestUrlMatch[1] ? dashManifestUrlMatch[1] : '';
8263
+ var playlistUrl = hlsManifestUrlMatch && hlsManifestUrlMatch[1] ? hlsManifestUrlMatch[1] : '';
8264
+ if (_environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_5__.default.shouldUseNativeHls || this._hlsPlayer && this._hlsPlayer.isSupported()) {
8265
+ this._player = new Player(videoElement, 'hls', streamId, playlistUrl, options);
8266
+ this._player.start();
8267
+ return this._player;
8268
+ }
8269
+ this._player = new Player(videoElement, 'dash', streamId, manifestUrl, options);
8270
+ this._player.start();
8271
+ return this._player;
8272
+ }
8273
+ }, {
8274
+ key: "loaded",
8275
+ value: function loaded(videoElement, streamId, offerSdp) {
8276
+ if (!this._shaka && !this._phenixWebPlayer && !this._hlsPlayer) {
8277
+ return;
8278
+ }
8279
+ if (this._hlsPlayer) {
8280
+ return this.play(_HlsPlayer__WEBPACK_IMPORTED_MODULE_9__.default, videoElement, streamId, offerSdp, _objectSpread(_objectSpread({}, this._options), {}, {
8281
+ preferNative: _environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_5__.default.shouldUseNativeHls
8282
+ }));
8283
+ }
8284
+ if (this._phenixWebPlayer) {
8285
+ return this.play(_WebPlayer__WEBPACK_IMPORTED_MODULE_6__.default, videoElement, streamId, offerSdp, _objectSpread(_objectSpread({}, this._options), {}, {
8286
+ preferNative: _environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_5__.default.shouldUseNativeHls
8287
+ }));
8288
+ }
8289
+ if (this._shaka) {
8290
+ return this.play(_ShakaPlayer__WEBPACK_IMPORTED_MODULE_8__.default, videoElement, streamId, offerSdp, _objectSpread(_objectSpread({}, this._options), {}, {
8291
+ preferNative: _environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_5__.default.shouldUseNativeHls
8292
+ }));
8293
+ }
8294
+ }
8295
+ }]);
8296
+ return ChunkedStreaming;
8297
+ }();
8298
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(ChunkedStreaming, "_pending", false);
8299
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(ChunkedStreaming, "_hlsPlayer", void 0);
8300
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(ChunkedStreaming, "_phenixWebPlayer", void 0);
8301
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(ChunkedStreaming, "_shaka", void 0);
8302
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(ChunkedStreaming, "_options", void 0);
8303
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(ChunkedStreaming, "_player", void 0);
8304
+
8117
8305
  /***/ }),
8118
8306
 
8119
8307
  /***/ "./src/sdk/streaming/HlsPlayer.ts":
@@ -8132,7 +8320,7 @@ var ChunkedStream = /*#__PURE__*/function () {
8132
8320
  /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1__);
8133
8321
  /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/defineProperty.js */ "./node_modules/@babel/runtime/helpers/defineProperty.js");
8134
8322
  /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2__);
8135
- /* harmony import */ var _LiveStreaming__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./LiveStreaming */ "./src/sdk/streaming/LiveStreaming.ts");
8323
+ /* harmony import */ var _ChunkedStreaming__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ChunkedStreaming */ "./src/sdk/streaming/ChunkedStreaming.ts");
8136
8324
  /* harmony import */ var _NetworkStates__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./NetworkStates */ "./src/sdk/streaming/NetworkStates.ts");
8137
8325
 
8138
8326
 
@@ -8160,9 +8348,9 @@ var HlsPlayer = /*#__PURE__*/function () {
8160
8348
  _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1___default()(HlsPlayer, [{
8161
8349
  key: "start",
8162
8350
  value: function start() {
8163
- if (_LiveStreaming__WEBPACK_IMPORTED_MODULE_3__.LiveStreaming.hlsPlayer) {
8164
- if (_LiveStreaming__WEBPACK_IMPORTED_MODULE_3__.LiveStreaming.hlsPlayer.isSupported()) {
8165
- this._player = new _LiveStreaming__WEBPACK_IMPORTED_MODULE_3__.LiveStreaming.hlsPlayer({
8351
+ if (_ChunkedStreaming__WEBPACK_IMPORTED_MODULE_3__.ChunkedStreaming.hlsPlayer) {
8352
+ if (_ChunkedStreaming__WEBPACK_IMPORTED_MODULE_3__.ChunkedStreaming.hlsPlayer.isSupported()) {
8353
+ this._player = new _ChunkedStreaming__WEBPACK_IMPORTED_MODULE_3__.ChunkedStreaming.hlsPlayer({
8166
8354
  enableWorker: true,
8167
8355
  maxBufferLength: 1,
8168
8356
  liveBackBufferLength: 0,
@@ -8181,7 +8369,7 @@ var HlsPlayer = /*#__PURE__*/function () {
8181
8369
  }, {
8182
8370
  key: "isSupported",
8183
8371
  value: function isSupported() {
8184
- return _LiveStreaming__WEBPACK_IMPORTED_MODULE_3__.LiveStreaming.hlsPlayer && _LiveStreaming__WEBPACK_IMPORTED_MODULE_3__.LiveStreaming.hlsPlayer.isSupported();
8372
+ return _ChunkedStreaming__WEBPACK_IMPORTED_MODULE_3__.ChunkedStreaming.hlsPlayer && _ChunkedStreaming__WEBPACK_IMPORTED_MODULE_3__.ChunkedStreaming.hlsPlayer.isSupported();
8185
8373
  }
8186
8374
  }, {
8187
8375
  key: "getStats",
@@ -8346,194 +8534,6 @@ var InsertableStreams = /*#__PURE__*/function () {
8346
8534
  }();
8347
8535
 
8348
8536
 
8349
- /***/ }),
8350
-
8351
- /***/ "./src/sdk/streaming/LiveStreaming.ts":
8352
- /*!********************************************!*
8353
- !*** ./src/sdk/streaming/LiveStreaming.ts ***!
8354
- \********************************************/
8355
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
8356
-
8357
- "use strict";
8358
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
8359
- /* harmony export */ "LiveStreaming": () => /* binding */ LiveStreaming
8360
- /* harmony export */ });
8361
- /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/asyncToGenerator.js */ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js");
8362
- /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__);
8363
- /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/classCallCheck.js */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");
8364
- /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1__);
8365
- /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/createClass.js */ "./node_modules/@babel/runtime/helpers/createClass.js");
8366
- /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2__);
8367
- /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/defineProperty.js */ "./node_modules/@babel/runtime/helpers/defineProperty.js");
8368
- /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3__);
8369
- /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./node_modules/@babel/runtime/regenerator/index.js */ "./node_modules/@babel/runtime/regenerator/index.js");
8370
- /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4__);
8371
- /* harmony import */ var _environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../environment/FeatureEnablement */ "./src/environment/FeatureEnablement.ts");
8372
- /* harmony import */ var _WebPlayer__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./WebPlayer */ "./src/sdk/streaming/WebPlayer.ts");
8373
- /* harmony import */ var _SDK__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../SDK */ "./src/sdk/SDK.ts");
8374
- /* harmony import */ var _ShakaPlayer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ShakaPlayer */ "./src/sdk/streaming/ShakaPlayer.ts");
8375
- /* harmony import */ var _HlsPlayer__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./HlsPlayer */ "./src/sdk/streaming/HlsPlayer.ts");
8376
- /* provided dependency */ var Promise = __webpack_require__(/*! ./src/promise/Promise */ "./src/promise/Promise.ts")["default"];
8377
-
8378
-
8379
-
8380
-
8381
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8382
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8383
-
8384
- /**
8385
- * Copyright 2023 Phenix Real Time Solutions, Inc. Confidential and Proprietary. All Rights Reserved.
8386
- */
8387
-
8388
-
8389
-
8390
-
8391
-
8392
- var LiveStreaming = /*#__PURE__*/function () {
8393
- function LiveStreaming() {
8394
- _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default()(this, LiveStreaming);
8395
- }
8396
- _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2___default()(LiveStreaming, null, [{
8397
- key: "hlsPlayer",
8398
- get: function get() {
8399
- return this._hlsPlayer;
8400
- }
8401
- }, {
8402
- key: "phenixWebPlayer",
8403
- get: function get() {
8404
- return this._phenixWebPlayer;
8405
- }
8406
- }, {
8407
- key: "shaka",
8408
- get: function get() {
8409
- return this._shaka;
8410
- }
8411
- }, {
8412
- key: "start",
8413
- value: function () {
8414
- var _start = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(videoElement, streamId, offerSdp, options) {
8415
- var _this = this;
8416
- return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
8417
- while (1) switch (_context.prev = _context.next) {
8418
- case 0:
8419
- this._options = options;
8420
- if (!(this._hlsPlayer || this._shaka || this._phenixWebPlayer)) {
8421
- _context.next = 3;
8422
- break;
8423
- }
8424
- return _context.abrupt("return", this.loaded(videoElement, streamId, offerSdp));
8425
- case 3:
8426
- if (!(!_SDK__WEBPACK_IMPORTED_MODULE_7__.default.webPlayerLoader && !_SDK__WEBPACK_IMPORTED_MODULE_7__.default.shakaPlayerLoader && !_SDK__WEBPACK_IMPORTED_MODULE_7__.default.hlsJsLoader)) {
8427
- _context.next = 5;
8428
- break;
8429
- }
8430
- throw new Error('No player is provided');
8431
- case 5:
8432
- if (!(!_SDK__WEBPACK_IMPORTED_MODULE_7__.default.webPlayerLoader && !_SDK__WEBPACK_IMPORTED_MODULE_7__.default.shakaPlayerLoader && !_SDK__WEBPACK_IMPORTED_MODULE_7__.default.hlsJsLoader)) {
8433
- _context.next = 7;
8434
- break;
8435
- }
8436
- throw new Error('Unsupported-feature, add stream player');
8437
- case 7:
8438
- return _context.abrupt("return", new Promise(function (resolve) {
8439
- if (_SDK__WEBPACK_IMPORTED_MODULE_7__.default.hlsJsLoader) {
8440
- _this._pending = true;
8441
- _SDK__WEBPACK_IMPORTED_MODULE_7__.default.hlsJsLoader(function (player) {
8442
- _this._hlsPlayer = player;
8443
- if (_this._pending) {
8444
- _this._pending = false;
8445
- resolve(_this.loaded(videoElement, streamId, offerSdp));
8446
- }
8447
- });
8448
- }
8449
- if (_SDK__WEBPACK_IMPORTED_MODULE_7__.default.webPlayerLoader) {
8450
- _this._pending = true;
8451
- _SDK__WEBPACK_IMPORTED_MODULE_7__.default.webPlayerLoader(function (player) {
8452
- _this._phenixWebPlayer = player;
8453
- if (_this._pending) {
8454
- _this._pending = false;
8455
- resolve(_this.loaded(videoElement, streamId, offerSdp));
8456
- }
8457
- });
8458
- }
8459
- if (_SDK__WEBPACK_IMPORTED_MODULE_7__.default.shakaPlayerLoader) {
8460
- _this._pending = true;
8461
- _SDK__WEBPACK_IMPORTED_MODULE_7__.default.shakaPlayerLoader(function (player) {
8462
- _this._shaka = player;
8463
- if (_this._pending) {
8464
- _this._pending = false;
8465
- resolve(_this.loaded(videoElement, streamId, offerSdp));
8466
- }
8467
- });
8468
- }
8469
- }));
8470
- case 8:
8471
- case "end":
8472
- return _context.stop();
8473
- }
8474
- }, _callee, this);
8475
- }));
8476
- function start(_x, _x2, _x3, _x4) {
8477
- return _start.apply(this, arguments);
8478
- }
8479
- return start;
8480
- }()
8481
- }, {
8482
- key: "getStats",
8483
- value: function getStats() {
8484
- if (this._player) {
8485
- return this._player.getStats();
8486
- }
8487
- return null;
8488
- }
8489
- }, {
8490
- key: "play",
8491
- value: function play(Player, videoElement, streamId, offerSdp, options) {
8492
- var dashManifestUrlMatch = offerSdp.match(/a=x-playlist:([^\n]*[.]mpd\??[^\s]*)/m);
8493
- var hlsManifestUrlMatch = offerSdp.match(/a=x-playlist:([^\n]*[.]m3u8\??[^\s]*)/m);
8494
- var manifestUrl = dashManifestUrlMatch && dashManifestUrlMatch[1] ? dashManifestUrlMatch[1] : '';
8495
- var playlistUrl = hlsManifestUrlMatch && hlsManifestUrlMatch[1] ? hlsManifestUrlMatch[1] : '';
8496
- if (_environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_5__.default.shouldUseNativeHls || this._hlsPlayer && this._hlsPlayer.isSupported()) {
8497
- this._player = new Player(videoElement, 'hls', streamId, playlistUrl, options);
8498
- this._player.start();
8499
- return this._player;
8500
- }
8501
- this._player = new Player(videoElement, 'dash', streamId, manifestUrl, options);
8502
- this._player.start();
8503
- return this._player;
8504
- }
8505
- }, {
8506
- key: "loaded",
8507
- value: function loaded(videoElement, streamId, offerSdp) {
8508
- if (!this._shaka && !this._phenixWebPlayer && !this._hlsPlayer) {
8509
- return;
8510
- }
8511
- if (this._hlsPlayer) {
8512
- return this.play(_HlsPlayer__WEBPACK_IMPORTED_MODULE_9__.default, videoElement, streamId, offerSdp, _objectSpread(_objectSpread({}, this._options), {}, {
8513
- preferNative: _environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_5__.default.shouldUseNativeHls
8514
- }));
8515
- }
8516
- if (this._phenixWebPlayer) {
8517
- return this.play(_WebPlayer__WEBPACK_IMPORTED_MODULE_6__.default, videoElement, streamId, offerSdp, _objectSpread(_objectSpread({}, this._options), {}, {
8518
- preferNative: _environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_5__.default.shouldUseNativeHls
8519
- }));
8520
- }
8521
- if (this._shaka) {
8522
- return this.play(_ShakaPlayer__WEBPACK_IMPORTED_MODULE_8__.default, videoElement, streamId, offerSdp, _objectSpread(_objectSpread({}, this._options), {}, {
8523
- preferNative: _environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_5__.default.shouldUseNativeHls
8524
- }));
8525
- }
8526
- }
8527
- }]);
8528
- return LiveStreaming;
8529
- }();
8530
- _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(LiveStreaming, "_pending", false);
8531
- _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(LiveStreaming, "_hlsPlayer", void 0);
8532
- _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(LiveStreaming, "_phenixWebPlayer", void 0);
8533
- _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(LiveStreaming, "_shaka", void 0);
8534
- _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(LiveStreaming, "_options", void 0);
8535
- _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(LiveStreaming, "_player", void 0);
8536
-
8537
8537
  /***/ }),
8538
8538
 
8539
8539
  /***/ "./src/sdk/streaming/NetworkStates.ts":
@@ -9038,7 +9038,7 @@ var RealTimeStream = /*#__PURE__*/function () {
9038
9038
  /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/defineProperty.js */ "./node_modules/@babel/runtime/helpers/defineProperty.js");
9039
9039
  /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2__);
9040
9040
  /* harmony import */ var _logger_LoggerFactory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../logger/LoggerFactory */ "./src/logger/LoggerFactory.ts");
9041
- /* harmony import */ var _LiveStreaming__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./LiveStreaming */ "./src/sdk/streaming/LiveStreaming.ts");
9041
+ /* harmony import */ var _ChunkedStreaming__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ChunkedStreaming */ "./src/sdk/streaming/ChunkedStreaming.ts");
9042
9042
  /* harmony import */ var _NetworkStates__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./NetworkStates */ "./src/sdk/streaming/NetworkStates.ts");
9043
9043
 
9044
9044
 
@@ -9071,7 +9071,7 @@ var ShakaPlayer = /*#__PURE__*/function () {
9071
9071
  _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1___default()(ShakaPlayer, [{
9072
9072
  key: "start",
9073
9073
  value: function start() {
9074
- if (_LiveStreaming__WEBPACK_IMPORTED_MODULE_4__.LiveStreaming.shaka) {
9074
+ if (_ChunkedStreaming__WEBPACK_IMPORTED_MODULE_4__.ChunkedStreaming.shaka) {
9075
9075
  var playerOptions = {
9076
9076
  abr: {
9077
9077
  defaultBandwidthEstimate: 2000000
@@ -9092,7 +9092,7 @@ var ShakaPlayer = /*#__PURE__*/function () {
9092
9092
  }
9093
9093
  }
9094
9094
  };
9095
- this._player = new _LiveStreaming__WEBPACK_IMPORTED_MODULE_4__.LiveStreaming.shaka.Player(this._videoElement);
9095
+ this._player = new _ChunkedStreaming__WEBPACK_IMPORTED_MODULE_4__.ChunkedStreaming.shaka.Player(this._videoElement);
9096
9096
  this.loadPlayer(playerOptions);
9097
9097
  return;
9098
9098
  }
@@ -9211,7 +9211,7 @@ var StreamFactory = /*#__PURE__*/function () {
9211
9211
  channelContext.state.value = _channels_ChannelState__WEBPACK_IMPORTED_MODULE_7__.default.UnsupportedFeature;
9212
9212
  return;
9213
9213
  }
9214
- if (tokenCapabilities.includes('streaming')) {
9214
+ if (tokenCapabilities.includes('streaming') || tokenCapabilities.includes('on-demand')) {
9215
9215
  return new _ChunkedStream__WEBPACK_IMPORTED_MODULE_4__.default(channelContext, handleStreamFailure);
9216
9216
  }
9217
9217
  return new _RealTimeStream__WEBPACK_IMPORTED_MODULE_5__.default(channelContext, peerConnectionContext, handleStreamFailure);
@@ -9252,7 +9252,7 @@ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpe
9252
9252
  /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/defineProperty.js */ "./node_modules/@babel/runtime/helpers/defineProperty.js");
9253
9253
  /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2__);
9254
9254
  /* harmony import */ var _logger_LoggerFactory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../logger/LoggerFactory */ "./src/logger/LoggerFactory.ts");
9255
- /* harmony import */ var _LiveStreaming__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./LiveStreaming */ "./src/sdk/streaming/LiveStreaming.ts");
9255
+ /* harmony import */ var _ChunkedStreaming__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ChunkedStreaming */ "./src/sdk/streaming/ChunkedStreaming.ts");
9256
9256
  /* harmony import */ var _NetworkStates__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./NetworkStates */ "./src/sdk/streaming/NetworkStates.ts");
9257
9257
 
9258
9258
 
@@ -9289,14 +9289,14 @@ var WebPlayer = /*#__PURE__*/function () {
9289
9289
  key: "start",
9290
9290
  value: function start() {
9291
9291
  var _this = this;
9292
- if (_LiveStreaming__WEBPACK_IMPORTED_MODULE_4__.LiveStreaming.phenixWebPlayer) {
9292
+ if (_ChunkedStreaming__WEBPACK_IMPORTED_MODULE_4__.ChunkedStreaming.phenixWebPlayer) {
9293
9293
  var playerOptions = _objectSpread(_objectSpread({}, this._options), {}, {
9294
9294
  bandwidthToStartAt: bandwidthToStartAt
9295
9295
  });
9296
- this._player = new _LiveStreaming__WEBPACK_IMPORTED_MODULE_4__.LiveStreaming.phenixWebPlayer.WebPlayer(this._logger, this._videoElement, playerOptions);
9296
+ this._player = new _ChunkedStreaming__WEBPACK_IMPORTED_MODULE_4__.ChunkedStreaming.phenixWebPlayer.WebPlayer(this._logger, this._videoElement, playerOptions);
9297
9297
  this._player.start(this._manifestURI);
9298
9298
  this._player.addEventListener('error', function (errorObject) {
9299
- if (_this.canReload() && errorObject && (errorObject.code === 3 || errorObject.severity === _LiveStreaming__WEBPACK_IMPORTED_MODULE_4__.LiveStreaming.phenixWebPlayer.errors.severity.RECOVERABLE)) {
9299
+ if (_this.canReload() && errorObject && (errorObject.code === 3 || errorObject.severity === _ChunkedStreaming__WEBPACK_IMPORTED_MODULE_4__.ChunkedStreaming.phenixWebPlayer.errors.severity.RECOVERABLE)) {
9300
9300
  _this._logger.warn('Reloading unhealthy stream after error event [%j]', errorObject);
9301
9301
  _this.reloadIfAble();
9302
9302
  }
@@ -9308,7 +9308,7 @@ var WebPlayer = /*#__PURE__*/function () {
9308
9308
  }, {
9309
9309
  key: "isSupported",
9310
9310
  value: function isSupported() {
9311
- return _LiveStreaming__WEBPACK_IMPORTED_MODULE_4__.LiveStreaming.phenixWebPlayer && _LiveStreaming__WEBPACK_IMPORTED_MODULE_4__.LiveStreaming.phenixWebPlayer.isSupported;
9311
+ return _ChunkedStreaming__WEBPACK_IMPORTED_MODULE_4__.ChunkedStreaming.phenixWebPlayer && _ChunkedStreaming__WEBPACK_IMPORTED_MODULE_4__.ChunkedStreaming.phenixWebPlayer.isSupported;
9312
9312
  }
9313
9313
  }, {
9314
9314
  key: "getStats",
@@ -9417,7 +9417,7 @@ var VersionManager = /*#__PURE__*/function () {
9417
9417
  key: "sdkVersion",
9418
9418
  get: function get() {
9419
9419
  try {
9420
- return "2023-07-13T03:19:55.272Z (2023.2.9-beta.80)";
9420
+ return "2023-07-14T15:25:58.075Z (2023.2.11-beta.82)";
9421
9421
  } catch (e) {
9422
9422
  return this._defaultVersion;
9423
9423
  }
@@ -10346,4 +10346,4 @@ var VideoTelemetry = /*#__PURE__*/function () {
10346
10346
  /******/ })()
10347
10347
  ;
10348
10348
  });
10349
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vTmV0d29ya01vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZVRva2VuLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvUGFyYW1ldGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGVMaXN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL1N0cmluZ3MudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9BcHBlbmRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Db25zb2xlQXBwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ1RocmVzaG9sZC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1NkcFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1JlYWRPbmx5U3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvU3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvU0RLLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvVGVsZW1ldHJ5VXJsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0YXRlQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvVG9rZW5Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0NodW5rZWRTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvSGxzUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0luc2VydGFibGVTdHJlYW1zLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0xpdmVTdHJlYW1pbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTmV0d29ya1N0YXRlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9SZWFsVGltZVN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TaGFrYVBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1dlYlBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9EaW1lbnNpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbImRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0IiwiQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJEaXNwb3NhYmxlTGlzdCIsIkRhdGUiLCJub3ciLCJfaXNGb3JlZ3JvdW5kIiwiU3ViamVjdCIsIl9yZWFkT25seUlzRm9yZWdyb3VuZCIsIlJlYWRPbmx5U3ViamVjdCIsImRldGVjdFRhYkZvY3VzQ2hhbmdlIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwiZ2V0IiwidmFsdWUiLCJnZXRUaW1lU2luY2VMYXN0Q2hhbmdlIiwiX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZSIsImRpc3Bvc2UiLCJfZGlzcG9zYWJsZXMiLCJfdGhpcyIsImhpZGRlbiIsInZpc2liaWxpdHlDaGFuZ2UiLCJkb2N1bWVudCIsIl90eXBlb2YiLCJtc0hpZGRlbiIsIndlYmtpdEhpZGRlbiIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJpc0ZvcmVncm91bmQiLCJzZXRGb2N1c1N0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFkZCIsIkRpc3Bvc2FibGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuRm9yRG9jdW1lbnRGb2N1cyIsImNhbGwiLCJfdGhpczIiLCJfZG9jdW1lbnRGb2N1c0ludGVydmFsIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJoYXNGb2N1cyIsImNsZWFySW50ZXJ2YWwiLCJCcm93c2VyRGV0ZWN0b3IiLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiX2Jyb3dzZXJOYW1lIiwiX2Jyb3dzZXJNYWpvclZlcnNpb24iLCJfaXNDaHJvbWU2OSIsIl9pc0Nocm9tZTcwIiwiX2lzQ2hyb21lNzEiLCJfaXNDaHJvbWU3MiIsIl9pc0Nocm9tZTc0IiwiX2lzQ2hyb21lNzUiLCJfaXNDaHJvbWU3NiIsIl9pc0Nocm9tZTc3IiwiaXNNb2JpbGUiLCJfbmF2aWdhdG9yIiwidGVzdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibWF0Y2giLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFIiwicGFyc2VCcm93c2VyTmFtZSIsImJyb3dzZXJOYW1lTGlzdCIsInNwbGl0IiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiYnJvd3NlclZlcnNpb25MaXN0IiwiZnVsbFZlcnNpb24iLCJOdW1iZXIiLCJtc2llIiwiaW5kZXhPZiIsImNvbmNhdCIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwidHJpZGVudCIsInZlcnNpb24iLCJpbmNsdWRlcyIsIkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJnZXRTdHJpbmdWYWx1ZSIsIm5hbWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlIiwicmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZSIsImRlZmF1bHRTdHJpbmdWYWx1ZSIsImdldEJvb2xlYW5WYWx1ZSIsInZhbHVlRnJvbVVyaSIsImRlZmF1bHRCb29sZWFuVmFsdWUiLCJUZWxlbWV0cnlMZXZlbE1hcHBpbmciLCJUZWxlbWV0cnlEZWZhdWx0IiwiTG9nZ2luZ0xldmVsTWFwcGluZyIsIkxvZ2dlckRlZmF1bHRzIiwibWV0YVZhbHVlIiwicXVlcnlTZWxlY3RvciIsImdldEF0dHJpYnV0ZSIsInZhbHVlVVJJUGFyYW1ldGVyTmFtZSIsIlVSTFNlYXJjaFBhcmFtcyIsImxvY2F0aW9uIiwic2VhcmNoIiwidW5kZWZpbmVkIiwiR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIiLCJFcnJvciIsImZvcmNlR2FyYmFnZUNvbGxlY3Rpb24iLCJGZWF0dXJlRW5hYmxlbWVudCIsImZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24iLCJxdWV1ZU1pY3JvdGFzayIsIm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbiIsInNldFRpbWVvdXQiLCJpbWciLCJjcmVhdGVFbGVtZW50Iiwic3JjIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiQmxvYiIsIkFycmF5QnVmZmVyIiwib25lcnJvciIsInJldm9rZU9iamVjdFVSTCIsIk5ldHdvcmtNb25pdG9yIiwiaXNTdXBwb3J0ZWQiLCJzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMiLCJ1cGRhdGVTdGF0aXN0aWNzIiwiX2lzU3VwcG9ydGVkIiwiX3J0dCIsIl9lZmZlY3RpdmVUeXBlIiwiX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJkb3dubGluayIsImRvd25saW5rTWF4IiwiZ2V0RWZmZWN0aXZlVHlwZSIsImVmZmVjdGl2ZVR5cGUiLCJ0eXBlIiwiZ2V0Um91bmRUcmlwVGltZSIsInJ0dCIsImxpc3RlbmVyIiwiU3RyZWFtU2V0dXBMaXN0ZW5lciIsInBhZ2VMb2FkVGltZSIsIkxvZ2dlckZhY3RvcnkiLCJTREsiLCJfc3RhcnRUaW1lIiwiX3BhZ2VMb2FkVGltZSIsInN1Y2Nlc3MiLCJzdHJlYW1JZCIsInJlY29yZFN0cmVhbU1ldHJpYyIsIk1ldHJpY3NUeXBlIiwiZmFpbCIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsIk1ldHJpY1R5cGUiLCJnZXROYW1lIiwibWV0cmljc1NlcnZpY2UiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwiRHVyYXRpb25zIiwidG9Jc29TdHJpbmciLCJlZGdlQXV0aFRva2VuUHJlZml4IiwiRWRnZUF1dGhQYXJzZXIiLCJwYXJzZVRva2VuIiwidG9rZW4iLCJpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCIsImVycm9yIiwiRWRnZVRva2VuIiwiZGVjb2RlZFRva2VuIiwiYXRvYiIsInN1YnN0ciIsImxlbmd0aCIsImVkZ2VUb2tlbiIsIkpTT04iLCJwYXJzZSIsImUiLCJzdGFydHNXaXRoIiwiX2VkZ2VUb2tlbiR0b2tlbiIsIl9lZGdlVG9rZW4kdG9rZW4yIiwiX2FwcGxpY2F0aW9uSWQiLCJhcHBsaWNhdGlvbklkIiwiX3Rva2VuIiwidXJpIiwiY2FwYWJpbGl0aWVzIiwiQnVpbGRGZWF0dXJlcyIsIl9zZW5kTG9jYWxDYW5kaWRhdGVzIiwiX3NlbmRMb2dzIiwiX3NlbmRNZXRyaWNzIiwiX2xvZ1RvQ29uc29sZSIsImFwcGx5RmVhdHVyZXMiLCJmZWF0dXJlcyIsIl9fRkVBVFVSRVNfXyIsInNlbmRMb2NhbENhbmRpZGF0ZXMiLCJzZW5kTG9ncyIsInNlbmRNZXRyaWNzIiwibG9nVG9Db25zb2xlIiwiX2RvY3VtZW50IiwiTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciIsIk1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IiLCJfUlRDUnRwUmVjZWl2ZXIiLCJfUlRDUnRwUmVjZWl2ZXIkcHJvdG8iLCJSVENSdHBSZWNlaXZlciIsInByb3RvdHlwZSIsImNyZWF0ZUVuY29kZWRTdHJlYW1zIiwiUGFyYW1ldGVycyIsIl9kaXNjb3ZlcnlQYXJhbWV0ZXJzIiwiYXBwbHlQYXJhbWV0ZXJzIiwicGFyYW1ldGVycyIsIl9fUEFSQU1FVEVSU19fIiwiZGlzY292ZXJ5IiwiaW50ZW50aW9ucyIsImRpc3Bvc2FibGUiLCJfZGlzcG9zZWQiLCJfZGlzcG9zYWJsZSIsIl9saXN0IiwiZm9yRWFjaCIsInRvU3RyaW5nIiwiU3RyaW5ncyIsInJhbmRvbSIsInJhbmRvbTEzQ2hhcmFjdGVycyIsIk1hdGgiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwiTG9nZ2VyIiwiYXBwZW5kZXJzIiwiX2NhdGVnb3J5IiwidHJhY2UiLCJUcmFjZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsImRlYnVnIiwiRGVidWciLCJfbGVuMiIsIl9rZXkyIiwiSW5mbyIsIl9sZW4zIiwiX2tleTMiLCJ3YXJuIiwiV2FybiIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiZmF0YWwiLCJGYXRhbCIsIl9sZW42IiwiX2tleTYiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJnZXRMb2dnZXIiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlIiwibG9nZ2luZ0xldmVsIiwiY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIlRlbGVtZXRyeUxldmVsIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwic2V0IiwidXJsIiwibWV0cmljc1VybCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc0ZhY3RvcnkiLCJnZXRNZXRyaWNzU2VydmljZSIsIm1ldHJpY3NTZXJ2aWNlcyIsIl9tZXRyaWNzU2VydmljZXMiLCJtZXRyaWNzQ29uZmlndXJhdGlvbiIsIlRlbGVtZXRyeVVybCIsIkVudmlyb25tZW50IiwiTWV0cmljc1NlcnZpY2UiLCJzZXRUZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwicmVxdWVzdFNpemVMaW1pdCIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwibWV0cmljIiwicHJldmlvdXNWYWx1ZSIsInJlc291cmNlIiwia2luZCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwiX2RvbWFpbiIsIlZlcnNpb25NYW5hZ2VyIiwiaWdub3JlZCIsInNlbmRNZXRyaWNzSWZBYmxlIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiX2NhbGxlZSIsIm1ldHJpY3NNZXNzYWdlcyIsImZvcm1EYXRhIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiRm9ybURhdGEiLCJhcHBlbmQiLCJyZWNvcmRzIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiYWJydXB0Iiwic2VudCIsInN0b3AiLCJfeCIsImFwcGx5IiwiX3NlbmRNZXRyaWNzSWZBYmxlIiwiX2NhbGxlZTIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJfaXNTZW5kaW5nIiwic2xpY2UiLCJ0aGVuIiwicmVzcG9uc2UiLCJjYXRjaCIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlIiwiY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbFR5cGUiLCJQcm9taXNlIiwiY2FsbGJhY2siLCJUeXBlRXJyb3IiLCJfc3RhdGUiLCJfaGFuZGxlZCIsIl92YWx1ZSIsIl9kZWZlcnJlZHMiLCJkb1Jlc29sdmUiLCJkb25lIiwicHJvbWlzZVJlc29sdmUiLCJyZWFzb24iLCJwcm9taXNlUmVqZWN0IiwibmV3VmFsdWUiLCJwcm9taXNlIiwiZmluYWxlIiwiX2ltbWVkaWF0ZSIsIl91bmhhbmRsZWRSZWplY3Rpb24iLCJpIiwibGVuIiwiaGFuZGxlIiwiZGVmZXJyZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyZXN1bHQiLCJhbGwiLCJhcnIiLCJyZXNvbHZlIiwicmVqZWN0IiwiaXNBcnJheSIsInJlbWFpbmluZyIsIm1hbmFnZVJlc3BvbnNlIiwiY29uc3RydWN0b3IiLCJfIiwicmFjZSIsIlByb21pc2VIYW5kbGVyIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhY2hlZCIsImRpcmVjdGlvbiIsInBlZXJDb25uZWN0aW9uIiwiY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhbGxlZTMiLCJlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJjb25maWd1cmF0aW9uIiwiX2FyZ3MzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJfcmVmIiwic3VwcG9ydHNBZGRUcmFuc2NlaXZlciIsInZpZGVvVHJhbnNjZWl2ZXIiLCJhdWRpb1RyYW5zY2VpdmVyIiwib3B0aW9ucyIsImFkZFRyYW5zY2VpdmVyIiwidDAiLCJ0MSIsInQyIiwiY3JlYXRlT2ZmZXIiLCJ0MyIsImxvY2FsT2ZmZXIiLCJvZmZlclRvUmVjZWl2ZUF1ZGlvIiwib2ZmZXJUb1JlY2VpdmVWaWRlbyIsInQ0IiwidDUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIiLCJ0cnVuY2F0ZUljZVNlcnZlcnMiLCJpY2VTZXJ2ZXJzIiwidXJscyIsInVzZXJuYW1lIiwiY3JlZGVudGlhbCIsInVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQiLCJSdGNDb25uZWN0aW9uTW9uaXRvciIsIm1lZGlhU3RyZWFtIiwiZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl9wZWVyQ29ubmVjdGlvbiIsIl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3RyYWNrc1RvTW9uaXRvciIsImdldFRyYWNrcyIsIm1hcCIsInRyYWNrIiwicGFyc2VkU0RQIiwiU2RwUGFyc2VyIiwiY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIiwic2RwIiwiX2VzdGltYXRlZEF1ZGlvQ29kZWMiLCJhdWRpb0NvZGVjIiwiX2VzdGltYXRlZFZpZGVvQ29kZWMiLCJ2aWRlb0NvZGVjIiwidXBkYXRlU3RhdGlzdGljIiwiX3J0Y1N0YXRpc3RpYyIsIl9pc01vbml0b3JSdW5uaW5nIiwiX3VwZGF0ZVRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJfdXBkYXRlU3RhdGlzdGljIiwiX2lnbm9yZWQiLCJnZXRLaW5kRm9yU2FmYXJpMTEiLCJ1cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJpZCIsImdldFN0YXRzIiwic3RhdHMiLCJydGNTdGF0aXN0aWNzIiwicm91bmRUcmlwVGltZSIsImxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCIsInJlcG9ydCIsImN1cnJlbnRSb3VuZFRyaXBUaW1lIiwibWVkaWFUeXBlIiwiY29kZWMiLCJjb2RlY0lkIiwibWltZVR5cGUiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYyIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MyIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjQiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY1IiwiYnl0ZXMiLCJieXRlc1JlY2VpdmVkIiwicHJldmlvdXNCeXRlc1JlY2VpdmVkIiwiYnl0ZXNEZWx0YSIsInRpbWVEZWx0YSIsImJpdHJhdGUiLCJmbG9vciIsInNzcmMiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwidmlkZW8iLCJmcmFtZXNEZWNvZGVkIiwiZnBzIiwicm91bmQiLCJfdXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiZ2V0U3RhdHNMZWdhY3kiLCJuYW1lcyIsInN0YXQiLCJfc2RwIiwic2RwU3BsaXRCeUxpbmVzIiwic2RwU3BsaXRCeVRyYWNrcyIsIl9hdWRpb0NvZGVjIiwiYXBwbHlDb2RlYyIsIl92aWRlb0NvZGVjIiwiX2lzQXVkaW9UcmFja0VuYWJsZWQiLCJpc1RyYWNrQnlUeXBlRW5hYmxlZCIsIl9pc1ZpZGVvVHJhY2tFbmFibGVkIiwic2RwU2VjdGlvbkZvclR5cGUiLCJmaW5kIiwic2RwVHJhY2siLCJ1c2VkQ29kZWNMaW5lIiwic2RwTGluZSIsInVzZWRDb2RlYyIsImNvZGVjTmFtZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbiIsIndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIiwiUlRDUGVlckNvbm5lY3Rpb24iLCJjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiIsImNvbm5lY3Rpb25TdGF0ZSIsImljZUNvbm5lY3Rpb25TdGF0ZSIsImdldENvbmZpZ3VyYXRpb24iLCJzZXRDb25maWd1cmF0aW9uIiwiX2NyZWF0ZU9mZmVyIiwiX2NyZWF0ZUFuc3dlciIsImNyZWF0ZUFuc3dlciIsIl94MiIsIl9zZXRMb2NhbERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiX3gzIiwiX3NldFJlbW90ZURlc2NyaXB0aW9uIiwiX2NhbGxlZTQiLCJfZGVzY3JpcHRpb24kc2RwIiwiaGFzQ3J5cHRvIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0Iiwic2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfeDQiLCJnZXRTZW5kZXJzIiwic2VsZWN0b3IiLCJfdGhpczMiLCJhZGRTdHJlYW0iLCJfdGhpczQiLCJhZGRUcmFjayIsIm9udHJhY2siLCJoYW5kbGVyIiwib25pY2VjYW5kaWRhdGUiLCJvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsIm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwiY2xvc2UiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJzdWJqZWN0IiwiX3N1YmplY3QiLCJzdWJzY3JpYmUiLCJEaXNwb3NhYmxlTGlzdGVuZXIiLCJfRGlzcG9zYWJsZSIsIl9pbmhlcml0cyIsIl9zdXBlciIsIl9jcmVhdGVTdXBlciIsImxpc3RlbmVycyIsImlkeCIsIl9saXN0ZW5lcnMiLCJjaGFuZ2VkIiwiY29tcGFyYWJsZSIsImVxdWFscyIsImdldEVudmlyb25tZW50RnJvbVVybCIsImJhc2VVUkwiLCJvcmlnaW4iLCJfY2xpZW50U2Vzc2lvbklkIiwiX2xvYWRlZFRpbWVzdGFtcCIsIl9yZWFkT25seUluaXRpYWxpemVkIiwiX3JlYWRPbmx5RGlzY292ZXJ5VXJpIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSIsIl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsIl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0IiwiX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyIsIl93ZWJQbGF5ZXJMb2FkZXIiLCJfc2hha2FQbGF5ZXJMb2FkZXIiLCJfaGxzSnNMb2FkZXIiLCJfbWV0cmljc1NlcnZpY2UiLCJfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfdGVsZW1ldHJ5VXJsIiwiX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJyZXRyaWVzQW1vdW50IiwiX3RlbGVtZXRyeUxldmVsIiwiYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwidGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImNsaWVudFNlc3Npb25JZCIsImlnbm9yZWRFbnZpcm9ubWVudCIsImlnbm9yZWREaXNjb3ZlcnlVcmkiLCJ0ZWxlbWV0cnlVcmwiLCJ0ZWxlbWV0cnlBcHBlbmRlciIsImlnbm9yZWRUZW5hbmN5IiwiYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbiIsIkRpc2NvdmVyeVVyaSIsImlnbm9yZWRUZWxlbWV0cnlMZXZlbCIsImFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJkaXNjb3ZlcnlVcmkiLCJnZXRUZWxlbWV0cnlVcmwiLCJjaGFubmVsVG9rZW4iLCJ1cmlWYWx1ZSIsImJhc2VVUklWYWx1ZSIsImluaXQiLCJfaW5pdGlhbGl6ZWQiLCJwZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjb25zb2xlTG9nZ2luZ0xldmVsIiwiY29uc29sZUFwcGVuZGVyIiwiYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwid2ViUGxheWVyTG9hZGVyIiwic2hha2FQbGF5ZXJMb2FkZXIiLCJobHNKc0xvYWRlciIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0IiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24iLCJmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIkNoYW5uZWwiLCJ2aWRlb0VsZW1lbnQiLCJjaGFubmVsQ29udGV4dE9wdGlvbnMiLCJ0YXJnZXRMYWciLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiZW5jb2RlZFZpZGVvU3RyZWFtU2luayIsImVuY29kZWRBdWRpb1N0cmVhbVNpbmsiLCJoYXNJbnNlcnRhYmxlU3RyZWFtcyIsIl90b2tlbkNvbnRleHQiLCJUb2tlbkNvbnRleHQiLCJfY2hhbm5lbENvbnRleHQiLCJDaGFubmVsQ29udGV4dCIsIl9wZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJQZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJfc3RhdGVDb250ZXh0IiwiU3RhdGVDb250ZXh0IiwiX2V4cG9uZW50aWFsQmFja29mZiIsIkV4cG9uZW50aWFsQmFja29mZiIsIl9jaGFubmVsU3RhcnRUaW1lIiwiX3JlYWRPbmx5VmlkZW9FbGVtZW50IiwiX3JlYWRPbmx5VG9rZW4iLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiIsIl9yZWFkT25seVN0YXRlIiwic3RhdGUiLCJfcmVhZE9ubHlBdXRvTXV0ZWQiLCJhdXRvTXV0ZWQiLCJfcmVhZE9ubHlBdXRvUGF1c2VkIiwiYXV0b1BhdXNlZCIsIl9yZWFkT25seVRva2VuRXhwaXJpbmciLCJ0b2tlbkV4cGlyaW5nIiwiX3JlYWRPbmx5QXV0aG9yaXplZCIsImF1dGhvcml6ZWQiLCJfcmVhZE9ubHlPbmxpbmUiLCJvbmxpbmUiLCJfcmVhZE9ubHlMb2FkaW5nIiwibG9hZGluZyIsIl9yZWFkT25seVBsYXlpbmciLCJwbGF5aW5nIiwiX3JlYWRPbmx5U3RhbmRieSIsInN0YW5kYnkiLCJfcmVhZE9ubHlTdG9wcGVkIiwic3RvcHBlZCIsIl9yZWFkT25seVRhcmdldExhZyIsIl9yZWFkT25seUxhZyIsImxhZyIsIl9yZWFkT25seUJpdHJhdGVMaW1pdCIsImJpdHJhdGVMaW1pdCIsIl9yZWFkT25seVJlc29sdXRpb24iLCJyZXNvbHV0aW9uIiwiX3JlYWRPbmx5RmFpbHVyZUNvdW50IiwiZmFpbHVyZUNvdW50IiwiX3JlYWRPbmx5RW5kUG9pbnQiLCJlbmRQb2ludCIsIl9yZWFkT25seVN0cmVhbSIsInN0cmVhbSIsIl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MiLCJfcmVhZE9ubHlNZWRpYVN0cmVhbSIsIl9zZXNzaW9uVGVsZW1ldHJ5IiwiU2Vzc2lvblRlbGVtZXRyeSIsImNoYW5uZWxEaXNwb3NhYmxlcyIsIl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIiLCJoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCIsInJlbmRlcmVyRGlzcG9zYWJsZXMiLCJ2aWRlb1RlbGVtZXRyeSIsImRhdGFzZXQiLCJWaWRlb1RlbGVtZXRyeSIsInNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUiLCJzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmciLCJDaGFubmVsU3RhdGUiLCJyZXN0YXJ0QWZ0ZXJTdG9wIiwiY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0Iiwib25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzIiwiZWxhcHNlZEluTWlsbGlzZWNvbmRzIiwiY2hhbm5lbEluaXRpYWxpemF0aW9uIiwiZ2V0VGltZSIsImxpbWl0Qml0cmF0ZSIsImRlc3Ryb3lTdHJlYW1PblVubW91bnQiLCJzdGFydCIsInBhdXNlIiwic3JjT2JqZWN0Iiwid2lkdGgiLCJ2aWRlb1dpZHRoIiwiaGVpZ2h0IiwidmlkZW9IZWlnaHQiLCJEaW1lbnNpb24iLCJkaXNwb3NhYmxlcyIsInNldEJpdHJhdGVMaW1pdCIsImNsZWFyQml0cmF0ZUxpbWl0IiwiYml0cmF0ZUluQml0c1BlclNlY29uZCIsInN0YXR1cyIsInVwZGF0ZVRhcmdldExhZyIsIl9zdG9wIiwiaXNTdGFydGluZyIsInByb2Nlc3NTdG9wIiwiY2xlYW5VcFJlc291cmNlcyIsIl9yZXN1bWUiLCJwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsInJlc3VtZSIsIm11dGUiLCJtdXRlZCIsInVubXV0ZSIsIl9kaXNwb3NlIiwiaXNEaXNwb3NlZCIsImdldFVyaSIsIl9zdGFydCIsInByb2Nlc3NTdGFydCIsIl9wcm9jZXNzU3RhcnQiLCJfY2FsbGVlNSIsIl90aGlzNSIsImxpc3Rlbk9uU3RyZWFtU2V0dXAiLCJfSW5zZXJ0YWJsZVN0cmVhbXMkdmEiLCJ2YWxpZCIsInZhbGlkYXRpb25SZXN1bHQiLCJfSW5zZXJ0YWJsZVN0cmVhbXMkdmEyIiwiX3ZhbGlkIiwiX3ZhbGlkYXRpb25SZXN1bHQiLCJfSW5zZXJ0YWJsZVN0cmVhbXMkdmEzIiwiX3ZhbGlkMiIsIl92YWxpZGF0aW9uUmVzdWx0MiIsImhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrIiwiaGFzRW5jb2RlZFN0cmVhbVNpbmsiLCJoYXNTdHJlYW1UcmFuc2Zvcm1zT3JTaW5rIiwiaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrIiwic3RyZWFtUGxheWVyIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiSW5zZXJ0YWJsZVN0cmVhbXMiLCJEaXNjb3ZlcnkiLCJoYW5kbGVTdHJlYW1GYWlsdXJlIiwiU3RyZWFtRmFjdG9yeSIsImZpbmFsbHkiLCJ0aW1lb3V0SWQiLCJnZXRSZXRyeUludGVydmFsIiwiX3Jlc3RhcnRBZnRlclN0b3AiLCJfY2FsbGVlNiIsIl9jYWxsZWU2JCIsIl9jb250ZXh0NiIsIl9wbGF5IiwiX2NhbGxlZTciLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJwbGF5IiwiZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCIsIl9oYW5kbGVTdHJlYW1GYWlsdXJlIiwiX2NhbGxlZTgiLCJfY2FsbGVlOCQiLCJfY29udGV4dDgiLCJfdGhpczYiLCJkZXN0cm95U3RyZWFtIiwiX3JlZjIiLCJwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwiX3BsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50IiwiX2NhbGxlZTkiLCJfdGhpczciLCJwbGF5UHJvbWlzZSIsIl9jYWxsZWU5JCIsIl9jb250ZXh0OSIsImhhc0F1ZGlvVHJhY2siLCJmaWx0ZXIiLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiIsIkNoYW5uZWxzIiwiY3JlYXRlQ2hhbm5lbCIsImNoYW5uZWxPcHRpb25zIiwiZGVmYXVsdFRhcmdldExhZyIsIl9vcHRpb25zJHRhcmdldExhZyIsImFwcGx5U3RhdHVzIiwiYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50IiwibWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwiZGVmYXVsdERpc2NvdmVyeVVyaSIsIkJpdHJhdGVNb2RlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlIiwiYml0cmF0ZU1vZGUiLCJCaXRyYXRlU3RhdGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZSIsImJpdHJhdGVTdGF0ZSIsImRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwiLCJfcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwicHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkiLCJfZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsImRpc2NvdmVyeVNlcnZpY2UiLCJjYWNoZWRWYWx1ZSIsIl9jYWNoZSIsIkRpc2NvdmVyeVNlcnZpY2UiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsImNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50IiwiZGVmYXVsdFRpbWVvdXQiLCJfdXJpIiwiX2Rpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwidGltZW91dCIsImFzU3RyaW5nIiwiZW5kUG9pbnRzIiwib2siLCJ0ZXh0IiwiRW5kUG9pbnQiLCJkaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsImZhaWxlZFJlcXVlc3RzIiwicHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQiLCJfYXJnczIiLCJwaW5nIiwidGltZSIsIl9kaXNjb3ZlcnlVcmkiLCJidWlsZERpc2NvdmVyeVVybCIsInNka1ZlcnNpb24iLCJhcGlWZXJzaW9uIiwiX3RpbWVvdXQiLCJfcm91bmRUcmlwVGltZSIsIl9waW5nIiwiZmluaXNoZWQiLCJidWlsZFBpbmdVcmwiLCJfc3Vic2NyaWJlIiwibG9jYWxTZXNzaW9uRGVzY3JpcHRpb24iLCJjbGllbnRWZXJzaW9uIiwiYm9keVdpdGhPZmZlciIsImJvZHlXaXRob3V0T2ZmZXIiLCJodHRwUmVzcG9uc2UiLCJzdWJzY3JpYmVSZXNwb25zZSIsImJ1aWxkVXJsIiwiYmVhcmVyVG9rZW4iLCJodHRwUm91bmRUcmlwVGltZSIsInNlc3Npb25EZXNjcmlwdGlvbiIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbiIsIm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwiX3B1Ymxpc2giLCJtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwicHVibGlzaCIsIl94NSIsIl94NiIsIl94NyIsInNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJzaGFyZWRTZWNyZXQiLCJtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJfeDgiLCJfeDkiLCJfbGltaXRCaXRyYXRlIiwibWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3gxNCIsIl9hZGRJY2VDYW5kaWRhdGVzIiwiY2FuZGlkYXRlcyIsImRpc2NvdmVyeUNvbXBsZXRlZCIsImFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9hcmdzNiIsIm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJhZGRJY2VDYW5kaWRhdGVzIiwiX3gxNSIsIl94MTYiLCJfeDE3IiwiX2Rlc3Ryb3lTdHJlYW0iLCJkZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX3gxOCIsIl94MTkiLCJfZGVzdHJveVN0cmVhbU9uVW5tb3VudCIsInNlbmRCZWFjb24iLCJfeDIwIiwiX3gyMSIsInBhdGgiLCJwYXRoQXNBcnJheSIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsImpzb24iLCJydGNDb25maWd1cmF0aW9uIiwiY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MjIiLCJfeDIzIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCIsInB1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCQiLCJfY29udGV4dDEwIiwiX3gyNCIsIl94MjUiLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVRyYW5zcG9ydFBvbGljeSIsInJ0Y3BNdXhQb2xpY3kiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl9jYWxsZWUxMSIsIl9jYWxsZWUxMSQiLCJfY29udGV4dDExIiwiX3gyNiIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfY2FsbGVlMTIiLCJfY2FsbGVlMTIkIiwiX2NvbnRleHQxMiIsIl94MjciLCJfY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTMiLCJfeDI4IiwiQ2h1bmtlZFN0cmVhbSIsImNoYW5uZWxDb250ZXh0Iiwib2ZmZXJTZHAiLCJvcmlnaW5TdGFydFRpbWUiLCJMaXZlU3RyZWFtaW5nIiwicGxheWVyIiwibW9uaXRvciIsIl9tb25pdG9yRGlzcG9zYWJsZXMiLCJuZXdTdHJlYW1TdGF0aXN0aWNzIiwiX3N0cmVhbVN0YXRpc3RpY3MiLCJjdXJyZW50VGltZSIsImRhdGFCdWZmZXJlZCIsIl9tb25pdG9yRmFpbHVyZUNvdW50IiwicGF1c2VkIiwiSGxzUGxheWVyIiwibWFuaWZlc3RVUkkiLCJfdmlkZW9FbGVtZW50IiwiX2tpbmQiLCJfc3RyZWFtSWQiLCJfbWFuaWZlc3RVUkkiLCJlbmNvZGVVUkkiLCJyZXBsYWNlIiwiX29wdGlvbnMiLCJfcGxheWVyIiwiZW5hYmxlV29ya2VyIiwibWF4QnVmZmVyTGVuZ3RoIiwibGl2ZUJhY2tCdWZmZXJMZW5ndGgiLCJsaXZlU3luY0R1cmF0aW9uIiwibGl2ZUR1cmF0aW9uSW5maW5pdHkiLCJsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uIiwiSW5maW5pdHkiLCJoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2QiLCJsb2FkU291cmNlIiwiYXR0YWNoTWVkaWEiLCJjYW5QbGF5VHlwZSIsIm5ldHdvcmtTdGF0ZSIsIk5ldHdvcmtTdGF0ZXMiLCJOZXR3b3JrTm9Tb3VyY2UiLCJzdGF0aXN0aWNzIiwibWVkaWEiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImJ1ZmZlcmVkIiwiZW5kIiwic3RyZWFtQ29udHJvbGxlciIsInRydWVDdXJyZW50VGltZSIsIm1heCIsImRlc3Ryb3kiLCJzZXR1cEVuY29kZWRTdHJlYW1TaW5rIiwic3RyZWFtU2luayIsInJlY2VpdmVyIiwidHJhbnNmb3JtZXIiLCJUcmFuc2Zvcm1TdHJlYW0iLCJ0cmFuc2Zvcm0iLCJmcmFtZSIsInJlY2VpdmVyU3RyZWFtcyIsInNvdXJjZSIsInJlYWRhYmxlIiwic2luayIsIndyaXRhYmxlIiwicGlwZVRocm91Z2giLCJwaXBlVG8iLCJ2YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rIiwibW9kZSIsInNldHVwTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSIsInZpZGVvVHJhY2siLCJnZXRWaWRlb1RyYWNrcyIsInByb2Nlc3NvciIsImdlbmVyYXRvciIsInRyYW5zZm9ybWVkU3RyZWFtIiwiTWVkaWFTdHJlYW0iLCJnZXRBdWRpb1RyYWNrcyIsImF1ZGlvVHJhY2siLCJ2YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJfaGxzUGxheWVyIiwiX3BoZW5peFdlYlBsYXllciIsIl9zaGFrYSIsImxvYWRlZCIsIl9wZW5kaW5nIiwiUGxheWVyIiwiZGFzaE1hbmlmZXN0VXJsTWF0Y2giLCJobHNNYW5pZmVzdFVybE1hdGNoIiwibWFuaWZlc3RVcmwiLCJwbGF5bGlzdFVybCIsIl9vYmplY3RTcHJlYWQiLCJwcmVmZXJOYXRpdmUiLCJzaG91bGRVc2VOYXRpdmVIbHMiLCJXZWJQbGF5ZXIiLCJTaGFrYVBsYXllciIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwiZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCIsIlJlYWxUaW1lU3RyZWFtIiwicGVlckNvbm5lY3Rpb25Db250ZXh0IiwiX3JlZjMiLCJfc2xpY2VkVG9BcnJheSIsIl9yZWYzJCIsInN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiIsInN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiIsIl9yZWY0IiwiYXBwbHlSdGNDb25maWd1cmF0aW9uIiwic3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQiLCJjYW5jZWxEaXNjb3ZlcnkiLCJjYW5kaWRhdGUiLCJfcmVmNSIsInJldHJ5Q2FsbGJhY2siLCJvbkxpbmUiLCJyZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIm1lZGlhU3RyZWFtUHJvbWlzZSIsInN0cmVhbXMiLCJ0cmFja0xpc3RlbmVyIiwiYW5zd2VyIiwiX3JlZjYiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwicnRjU3RhdGlzdGljIiwicnRjVmlkZW9TdGF0aXN0aWMiLCJydGNBdWRpb1N0YXRpc3RpYyIsImF1ZGlvIiwiYXVkaW9UcmFja0ZhaWxlZCIsInZpZGVvVHJhY2tGYWlsZWQiLCJfYXBwbHlSdGNDb25maWd1cmF0aW9uIiwib3B0aW9uYWxQZWVyQ29ubmVjdGlvbiIsIm5ld1J0Y0NvbmZpZ3VyYXRpb24iLCJfcGVlckNvbm5lY3Rpb24kY3VycmUiLCJpc0NsaWVudE9mZmVyRmxvdyIsImljZVJlc3RhcnQiLCJvZmZlciIsInBsYXllck9wdGlvbnMiLCJhYnIiLCJkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGUiLCJtYW5pZmVzdCIsInJldHJ5UGFyYW1ldGVycyIsInN0cmVhbWluZyIsInJlYnVmZmVyaW5nR29hbCIsImJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJCZWhpbmQiLCJtYXhBdHRlbXB0cyIsImJhY2tvZmZGYWN0b3IiLCJsb2FkUGxheWVyIiwiZXN0aW1hdGVkQmFuZHdpZHRoIiwicGxheVRpbWUiLCJ1bmxvYWQiLCJwbGF5ZXJDb25maWciLCJjb25maWd1cmUiLCJsb2FkIiwiY29kZSIsImNyZWF0ZSIsInRva2VuQ2FwYWJpbGl0aWVzIiwiYmFuZHdpZHRoVG9TdGFydEF0IiwibWluVGltZUJlZm9yZU5leHRSZWxvYWQiLCJlcnJvck9iamVjdCIsImNhblJlbG9hZCIsInNldmVyaXR5IiwicmVsb2FkSWZBYmxlIiwiaXNOYXRpdmUiLCJkZWxpdmVyeVR5cGUiLCJoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZCIsIl9sYXN0UmVsb2FkVGltZSIsInJlbG9hZCIsIl9fQlVJTERfVkVSU0lPTl9fIiwiX2RlZmF1bHRWZXJzaW9uIiwiX3RlbGVtZXRyeVNlcnZpY2UiLCJUZWxlbWV0cnlTZXJ2aWNlIiwibG9nUmVjb3JkIiwiX2xvZ3MiLCJzZW5kTG9nc0lmQWJsZSIsImxvZ01lc3NhZ2VzIiwiX3NlbmRMb2dzSWZBYmxlIiwibnVtYmVyT2ZMb2dzVG9TZW5kIiwic2l6ZU9mTG9nc1RvU2VuZCIsImdldExvZ1NpemUiLCJzdW0iLCJkdXJhdGlvbiIsIl9kdXJhdGlvbiIsImlzTmVnYXRpdmUiLCJhYnMiLCJvZmZzZXQiLCJtaWxsaXNlY29uZHMiLCJzZWNvbmRzIiwibWludXRlcyIsImhvdXJzIiwicGFydHMiLCJTdHJpbmciLCJwYWRTdGFydCIsInRhcmdldExlbmd0aCIsInBhZFN0cmluZyIsInJlcGVhdCIsImRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyIsInJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmYiLCJwb3ciLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCIsIm1pbiIsIm90aGVyIiwiX25ldHdvcmtNb25pdG9yIiwicmVjb3JkRm9yZWdyb3VuZENoYW5nZSIsInJlY29yZE5ldHdvcmtSVFRVcGRhdGUiLCJyZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSIsImRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwicmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlIiwidGltZVNpbmNlTGFzdENoYW5nZSIsIm5ld1JUVCIsIm9sZFJ0dCIsIl9sYXN0TmV0d29ya1N0YXRpc3RpY3MiLCJuZXdOZXR3b3JrVHlwZSIsIm9sZE5ldHdvcmtUeXBlIiwibmV3Q2FwYWNpdHkiLCJvbGRDYXBhY2l0eSIsImZsb2F0IiwiY2hhbm5lbFN0YXJ0VGltZSIsIl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUiLCJfbGlzdGVuVG9GaXJzdFRpbWUiLCJjYWxsVGltZVRvRmlyc3RGcmFtZSIsIl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciIsIl9saXN0ZW5Gb3JTdGFsbCIsIm9uU3RhbGwiLCJfbGlzdGVuRm9yQ29udGludWF0aW9uIiwiZXZlbnQiLCJvbkNvbnRpbnVhdGlvbiIsIl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIiLCJwdXNoVGltZVRvRmlyc3RGcmFtZSIsInB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3RpbWVUb0ZpcnN0RnJhbWUiLCJkdXJhdGlvblNpbmNlUGFnZUxvYWQiLCJfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl92aWRlb1N0YWxsZWQiLCJidWZmZXJMZW5ndGgiLCJoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCIsIl9sYXN0UHJvZ3Jlc3MiLCJ0aW1lU2luY2VTdG9wIiwibmV3UmVzb2x1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QUEzcEMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXFzQix5QkFBeUJ5ZCxhQUFxQixFQUFRO01BQ3BELElBQUksQ0FBQy9rQixlQUFlLENBQUN0YyxJQUFJLENBQUM7UUFDeEJQLFVBQVUsRUFBRUYsMkVBQTZCO1FBQ3pDVSxPQUFPLEVBQUUsQ0FBQ3BKLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNxSSxhQUFhLElBQUksSUFBSTtRQUNqRDVILEtBQUssRUFBRTtVQUFDaU4sTUFBTSxFQUFFNjhCO1FBQWEsQ0FBQztRQUM5QngxQixhQUFhLEVBQUUsSUFBSSxDQUFDeTFCLGdCQUFnQixHQUFHO1VBQUM5OEIsTUFBTSxFQUFFLElBQUksQ0FBQzg4QjtRQUFnQixDQUFDLEdBQUcza0MsU0FBUztRQUNsRjBDLFFBQVEsRUFBRSxJQUFJLENBQUNrMEI7TUFDakIsQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDK04sZ0JBQWdCLEdBQUdELGFBQWE7SUFDdkM7RUFBQztFQUFBLE9BQUEvZCxjQUFBO0FBQUE7Ozs7Ozs7VUMxTUg7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7O1dDckJBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxnQ0FBZ0MsWUFBWTtXQUM1QztXQUNBLEU7Ozs7O1dDUEE7V0FDQTtXQUNBO1dBQ0E7V0FDQSx3Q0FBd0MseUNBQXlDO1dBQ2pGO1dBQ0E7V0FDQSxFOzs7OztXQ1BBLHNGOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHNEQUFzRCxrQkFBa0I7V0FDeEU7V0FDQSwrQ0FBK0MsY0FBYztXQUM3RCxFOzs7O1VDTkE7VUFDQTtVQUNBO1VBQ0EiLCJmaWxlIjoiY2hhbm5lbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mLmpzXCIpO1xuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIHZhciBfaSA9IG51bGwgPT0gYXJyID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSBfaSkge1xuICAgIHZhciBfcyxcbiAgICAgIF9lLFxuICAgICAgX3gsXG4gICAgICBfcixcbiAgICAgIF9hcnIgPSBbXSxcbiAgICAgIF9uID0gITAsXG4gICAgICBfZCA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoX3ggPSAoX2kgPSBfaS5jYWxsKGFycikpLm5leHQsIDAgPT09IGkpIHtcbiAgICAgICAgaWYgKE9iamVjdChfaSkgIT09IF9pKSByZXR1cm47XG4gICAgICAgIF9uID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoX24gPSAoX3MgPSBfeC5jYWxsKF9pKSkuZG9uZSkgJiYgKF9hcnIucHVzaChfcy52YWx1ZSksIF9hcnIubGVuZ3RoICE9PSBpKTsgX24gPSAhMCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfZCA9ICEwLCBfZSA9IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFfbiAmJiBudWxsICE9IF9pW1wicmV0dXJuXCJdICYmIChfciA9IF9pW1wicmV0dXJuXCJdKCksIE9iamVjdChfcikgIT09IF9yKSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9hcnI7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheUxpbWl0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlUmVzdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVNwcmVhZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgPSByZXF1aXJlKFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIik7XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7IC8qISByZWdlbmVyYXRvci1ydW50aW1lIC0tIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLiAtLSBsaWNlbnNlIChNSVQpOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL0xJQ0VOU0UgKi9cbiAgbW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lID0gZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgICByZXR1cm4gZXhwb3J0cztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICB2YXIgZXhwb3J0cyA9IHt9LFxuICAgIE9wID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eSxcbiAgICBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBmdW5jdGlvbiAob2JqLCBrZXksIGRlc2MpIHtcbiAgICAgIG9ialtrZXldID0gZGVzYy52YWx1ZTtcbiAgICB9LFxuICAgICRTeW1ib2wgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCA/IFN5bWJvbCA6IHt9LFxuICAgIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIixcbiAgICBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCIsXG4gICAgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgd3JpdGFibGU6ICEwXG4gICAgfSksIG9ialtrZXldO1xuICB9XG4gIHRyeSB7XG4gICAgZGVmaW5lKHt9LCBcIlwiKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldID0gdmFsdWU7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3IsXG4gICAgICBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSksXG4gICAgICBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eShnZW5lcmF0b3IsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KVxuICAgIH0pLCBnZW5lcmF0b3I7XG4gIH1cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogZm4uY2FsbChvYmosIGFyZylcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRocm93XCIsXG4gICAgICAgIGFyZzogZXJyXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBleHBvcnRzLndyYXAgPSB3cmFwO1xuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIGRlZmluZShJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiYgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkgJiYgKEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUpO1xuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPSBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICBkZWZpbmUocHJvdG90eXBlLCBtZXRob2QsIGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvciwgUHJvbWlzZUltcGwpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSByZWNvcmQudHlwZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZyxcbiAgICAgICAgICB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmIFwib2JqZWN0XCIgPT0gX3R5cGVvZih2YWx1ZSkgJiYgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSA/IFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KSA6IFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHVud3JhcHBlZCkge1xuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZCwgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgIH1cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUobWV0aG9kLCBhcmcpIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlSW1wbChmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9IHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoXCJleGVjdXRpbmdcIiA9PT0gc3RhdGUpIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICBpZiAoXCJjb21wbGV0ZWRcIiA9PT0gc3RhdGUpIHtcbiAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gbWV0aG9kKSB0aHJvdyBhcmc7XG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnRleHQubWV0aG9kID0gbWV0aG9kLCBjb250ZXh0LmFyZyA9IGFyZzs7KSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwibmV4dFwiID09PSBjb250ZXh0Lm1ldGhvZCkgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO2Vsc2UgaWYgKFwidGhyb3dcIiA9PT0gY29udGV4dC5tZXRob2QpIHtcbiAgICAgICAgICBpZiAoXCJzdXNwZW5kZWRTdGFydFwiID09PSBzdGF0ZSkgdGhyb3cgc3RhdGUgPSBcImNvbXBsZXRlZFwiLCBjb250ZXh0LmFyZztcbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcbiAgICAgICAgfSBlbHNlIFwicmV0dXJuXCIgPT09IGNvbnRleHQubWV0aG9kICYmIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgc3RhdGUgPSBcImV4ZWN1dGluZ1wiO1xuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChcIm5vcm1hbFwiID09PSByZWNvcmQudHlwZSkge1xuICAgICAgICAgIGlmIChzdGF0ZSA9IGNvbnRleHQuZG9uZSA/IFwiY29tcGxldGVkXCIgOiBcInN1c3BlbmRlZFlpZWxkXCIsIHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSAmJiAoc3RhdGUgPSBcImNvbXBsZXRlZFwiLCBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kTmFtZSA9IGNvbnRleHQubWV0aG9kLFxuICAgICAgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbbWV0aG9kTmFtZV07XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gbWV0aG9kKSByZXR1cm4gY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIFwidGhyb3dcIiA9PT0gbWV0aG9kTmFtZSAmJiBkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXSAmJiAoY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiLCBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZCwgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCksIFwidGhyb3dcIiA9PT0gY29udGV4dC5tZXRob2QpIHx8IFwicmV0dXJuXCIgIT09IG1ldGhvZE5hbWUgJiYgKGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICdcIiArIG1ldGhvZE5hbWUgKyBcIicgbWV0aG9kXCIpKSwgQ29udGludWVTZW50aW5lbDtcbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuICAgIGlmIChcInRocm93XCIgPT09IHJlY29yZC50eXBlKSByZXR1cm4gY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZywgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWw7XG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuICAgIHJldHVybiBpbmZvID8gaW5mby5kb25lID8gKGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlLCBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jLCBcInJldHVyblwiICE9PSBjb250ZXh0Lm1ldGhvZCAmJiAoY29udGV4dC5tZXRob2QgPSBcIm5leHRcIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQpLCBjb250ZXh0LmRlbGVnYXRlID0gbnVsbCwgQ29udGludWVTZW50aW5lbCkgOiBpbmZvIDogKGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSwgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWwpO1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0ge1xuICAgICAgdHJ5TG9jOiBsb2NzWzBdXG4gICAgfTtcbiAgICAxIGluIGxvY3MgJiYgKGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXSksIDIgaW4gbG9jcyAmJiAoZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl0sIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXSksIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiLCBkZWxldGUgcmVjb3JkLmFyZywgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3tcbiAgICAgIHRyeUxvYzogXCJyb290XCJcbiAgICB9XSwgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpLCB0aGlzLnJlc2V0KCEwKTtcbiAgfVxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgaXRlcmFibGUubmV4dCkgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsXG4gICAgICAgICAgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICBmb3IgKDsgKytpIDwgaXRlcmFibGUubGVuZ3RoOykgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkgcmV0dXJuIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHVuZGVmaW5lZCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuZXh0OiBkb25lUmVzdWx0XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgZG9uZTogITBcbiAgICB9O1xuICB9XG4gIHJldHVybiBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lUHJvcGVydHkoR3AsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBkZWZpbmVQcm9wZXJ0eShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gZGVmaW5lKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBnZW5GdW4gJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWN0b3IgJiYgKGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSk7XG4gIH0sIGV4cG9ydHMubWFyayA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcbiAgICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpIDogKGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKGdlbkZ1biwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCksIGdlbkZ1bjtcbiAgfSwgZXhwb3J0cy5hd3JhcCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogYXJnXG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBhc3luY0l0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBleHBvcnRzLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBleHBvcnRzLmFzeW5jID0gZnVuY3Rpb24gKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0LCBQcm9taXNlSW1wbCkge1xuICAgIHZvaWQgMCA9PT0gUHJvbWlzZUltcGwgJiYgKFByb21pc2VJbXBsID0gUHJvbWlzZSk7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSwgUHJvbWlzZUltcGwpO1xuICAgIHJldHVybiBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbikgPyBpdGVyIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICB9KTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKSwgZGVmaW5lKEdwLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JcIiksIGRlZmluZShHcCwgaXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGRlZmluZShHcCwgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH0pLCBleHBvcnRzLmtleXMgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgdmFyIG9iamVjdCA9IE9iamVjdCh2YWwpLFxuICAgICAga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIGtleXMucHVzaChrZXkpO1xuICAgIHJldHVybiBrZXlzLnJldmVyc2UoKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyBrZXlzLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSByZXR1cm4gbmV4dC52YWx1ZSA9IGtleSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgfTtcbiAgfSwgZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXMsIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChza2lwVGVtcFJlc2V0KSB7XG4gICAgICBpZiAodGhpcy5wcmV2ID0gMCwgdGhpcy5uZXh0ID0gMCwgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZCwgdGhpcy5kb25lID0gITEsIHRoaXMuZGVsZWdhdGUgPSBudWxsLCB0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLmFyZyA9IHVuZGVmaW5lZCwgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSksICFza2lwVGVtcFJlc2V0KSBmb3IgKHZhciBuYW1lIGluIHRoaXMpIFwidFwiID09PSBuYW1lLmNoYXJBdCgwKSAmJiBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJiAhaXNOYU4oK25hbWUuc2xpY2UoMSkpICYmICh0aGlzW25hbWVdID0gdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB0aGlzLmRvbmUgPSAhMDtcbiAgICAgIHZhciByb290UmVjb3JkID0gdGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSByb290UmVjb3JkLnR5cGUpIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbiBkaXNwYXRjaEV4Y2VwdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPSBcInRocm93XCIsIHJlY29yZC5hcmcgPSBleGNlcHRpb24sIGNvbnRleHQubmV4dCA9IGxvYywgY2F1Z2h0ICYmIChjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiLCBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZCksICEhY2F1Z2h0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV0sXG4gICAgICAgICAgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgaWYgKFwicm9vdFwiID09PSBlbnRyeS50cnlMb2MpIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIiksXG4gICAgICAgICAgICBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNGaW5hbGx5KSB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmaW5hbGx5RW50cnkgJiYgKFwiYnJlYWtcIiA9PT0gdHlwZSB8fCBcImNvbnRpbnVlXCIgPT09IHR5cGUpICYmIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYyAmJiAoZmluYWxseUVudHJ5ID0gbnVsbCk7XG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJldHVybiByZWNvcmQudHlwZSA9IHR5cGUsIHJlY29yZC5hcmcgPSBhcmcsIGZpbmFsbHlFbnRyeSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYywgQ29udGludWVTZW50aW5lbCkgOiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcbiAgICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUpIHRocm93IHJlY29yZC5hcmc7XG4gICAgICByZXR1cm4gXCJicmVha1wiID09PSByZWNvcmQudHlwZSB8fCBcImNvbnRpbnVlXCIgPT09IHJlY29yZC50eXBlID8gdGhpcy5uZXh0ID0gcmVjb3JkLmFyZyA6IFwicmV0dXJuXCIgPT09IHJlY29yZC50eXBlID8gKHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHJlY29yZC50eXBlICYmIGFmdGVyTG9jICYmICh0aGlzLm5leHQgPSBhZnRlckxvYyksIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcbiAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaChmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHJldHVybiB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKSwgcmVzZXRUcnlFbnRyeShlbnRyeSksIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdW5kZWZpbmVkKSwgQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH0sIGV4cG9ydHM7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlXaXRoSG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXlMaW1pdCA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCIpO1xuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NsaWNlZFRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVNwcmVhZCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCIpO1xuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b0NvbnN1bWFibGVBcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkge1xuICBpZiAoX3R5cGVvZihpbnB1dCkgIT09IFwib2JqZWN0XCIgfHwgaW5wdXQgPT09IG51bGwpIHJldHVybiBpbnB1dDtcbiAgdmFyIHByaW0gPSBpbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAocHJpbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKF90eXBlb2YocmVzKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHJlcztcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b1ByaW1pdGl2ZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoXCIuL3RvUHJpbWl0aXZlLmpzXCIpO1xuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b1Byb3BlcnR5S2V5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yob2JqKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIi8vIFRPRE8oQmFiZWwgOCk6IFJlbW92ZSB0aGlzIGZpbGUuXG5cbnZhciBydW50aW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lXCIpKCk7XG5tb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG5cbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vcGFja2FnZXMvcnVudGltZS9ydW50aW1lLmpzI0w3MzY9XG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5jb25zdCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCA9IDMwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5SXNGb3JlZ3JvdW5kOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzRm9yZWdyb3VuZDogU3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSBfdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBwcml2YXRlIF9kb2N1bWVudEZvY3VzSW50ZXJ2YWw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9pc0ZvcmVncm91bmQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZCA9IG5ldyBSZWFkT25seVN1YmplY3QodGhpcy5faXNGb3JlZ3JvdW5kKTtcbiAgICB0aGlzLmRldGVjdFRhYkZvY3VzQ2hhbmdlKCk7XG4gIH1cblxuICBnZXQgaXNGb3JlZ3JvdW5kKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kO1xuICB9XG5cbiAgZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5fdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGRldGVjdFRhYkZvY3VzQ2hhbmdlKCk6IHZvaWQge1xuICAgIGxldCBoaWRkZW47XG4gICAgbGV0IHZpc2liaWxpdHlDaGFuZ2U7XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIER1ZSB0byB0eXBlc2NyaXB0IG5vdCBoYXZpbmcgYSBkZWZpbml0aW9uIGZvciAnbXNIaWRkZW4nIG9yICd3ZWJraXRIaWRkZW4nIHR5cGVzXG4gICAgLy8gUmVxdWlyZWQgdG8gQHRzLWlnbm9yZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQubXNIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnbXNIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICdtc3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LndlYmtpdEhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICd3ZWJraXRIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd3ZWJraXR2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC5oaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7IC8vIE9wZXJhIDEyLjEwIGFuZCBGaXJlZm94IDE4IGFuZCBsYXRlciBzdXBwb3J0XG4gICAgICBoaWRkZW4gPSAnaGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAndmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG5cbiAgICBjb25zdCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gIWRvY3VtZW50W2hpZGRlbl07XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudFtoaWRkZW5dICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG5cbiAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpc3RlbkZvckRvY3VtZW50Rm9jdXMuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvckRvY3VtZW50Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9IGRvY3VtZW50Lmhhc0ZvY3VzKCk7XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH0sIGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gbnVsbDtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzRm9yZWdyb3VuZCA9PT0gaXNGb3JlZ3JvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kLnZhbHVlID0gaXNGb3JlZ3JvdW5kO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCcm93c2VyRGV0ZWN0b3Ige1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXggPSAvKE1TSUV8KD8hR2Vja28uKylGaXJlZm94fCg/IUFwcGxlV2ViS2l0LitDaHJvbWUuKylTYWZhcml8KD8hQXBwbGVXZWJLaXQuKylDaHJvbWV8QXBwbGVXZWJLaXQoPyEuK0Nocm9tZXwuK1NhZmFyaSl8R2Vja28oPyEuK0ZpcmVmb3gpKSg/OiB8XFwvKShbXFxkLmFwcmVdKykvZztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWUgPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck1ham9yVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU2OSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNjkuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcwID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzEgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzIuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzUgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzYuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc3ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ny4nKTtcblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck5hbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU2OSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTY5O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc2O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgaXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICgvQW5kcm9pZHxpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8T3BlcmEgTWluaS9pKS50ZXN0KG5hdmlnYXRvcj8udXNlckFnZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUFuZFZlcnNpb24gPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgpO1xuXG4gICAgaWYgKGJyb3dzZXJOYW1lQW5kVmVyc2lvbiAmJiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF0pIHtcbiAgICAgIHJldHVybiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAoIWJyb3dzZXJOYW1lTGlzdCB8fCAhYnJvd3Nlck5hbWVMaXN0WzBdKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJyb3dzZXJOYW1lTGlzdFswXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpOiBudW1iZXIge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJWZXJzaW9uTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAoIWJyb3dzZXJWZXJzaW9uTGlzdCB8fCAhYnJvd3NlclZlcnNpb25MaXN0WzFdKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsVmVyc2lvbiA9IGJyb3dzZXJWZXJzaW9uTGlzdFsxXTtcblxuICAgIGlmICghZnVsbFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXIoZnVsbFZlcnNpb24uc3BsaXQoJy4nKVswXSkgfHwgMDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgbXNpZSA9IHVzZXJBZ2VudC5pbmRleE9mKCdNU0lFICcpO1xuXG4gICAgaWYgKG1zaWUgPiAwKSB7XG4gICAgICAvLyBJRSAxMCBvciBvbGRlciA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcbiAgICAgIHJldHVybiBgSUUvJHtwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKG1zaWUgKyA1LCB1c2VyQWdlbnQuaW5kZXhPZignLicsIG1zaWUpKSwgMTApfWA7XG4gICAgfVxuXG4gICAgY29uc3QgdHJpZGVudCA9IHVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50LycpO1xuXG4gICAgaWYgKHRyaWRlbnQgPiAwKSB7XG4gICAgICAvLyBJRSAxMSA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB1c2VyQWdlbnQuaW5kZXhPZigncnY6Jyk7XG5cbiAgICAgIHJldHVybiBgSUUvJHtwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKHZlcnNpb24gKyAzLCB1c2VyQWdlbnQuaW5kZXhPZignLicsIHZlcnNpb24pKSwgMTApfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIge1xuICBnZXRTdHJpbmdWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSkgfHxcbiAgICAgIHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShgJHtuYW1lfS11cmktcGFyYW1ldGVyLW5hbWVgKSB8fFxuICAgICAgdGhpcy5kZWZhdWx0U3RyaW5nVmFsdWVbbmFtZV07XG4gIH1cblxuICBnZXRCb29sZWFuVmFsdWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gJ3RydWUnIHx8IHZhbHVlID09PSAnMScgfHwgdmFsdWUgPT09ICdPbic7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVGcm9tVXJpID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKGAke25hbWV9LXVyaS1wYXJhbWV0ZXItbmFtZWApO1xuXG4gICAgaWYgKHZhbHVlRnJvbVVyaSkge1xuICAgICAgcmV0dXJuIHZhbHVlRnJvbVVyaSA9PT0gJ3RydWUnIHx8IHZhbHVlRnJvbVVyaSA9PT0gJzEnIHx8IHZhbHVlRnJvbVVyaSA9PT0gJ09uJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0Qm9vbGVhblZhbHVlW25hbWVdID09PSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdFN0cmluZ1ZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZ30ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LW1ldHJpY3MtbGV2ZWwnOiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpLFxuICAgICAgJ3BoZW5peC1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jb25zb2xlLWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC10ZWxlbWV0cnktbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY2hhbm5lbC10b2tlbic6ICcnLFxuICAgICAgJ3BoZW5peC11cmknOiAnJyxcbiAgICAgICdwaGVuaXgtYmFzZS11cmknOiAnJ1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Qm9vbGVhblZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IGJvb2xlYW4gfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1za2lwLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1tb2JpbGUtZGV2aWNlcyc6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YVZhbHVlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbWV0YVtuYW1lPScke25hbWV9J11gKTtcblxuICAgIGlmICghbWV0YVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBtZXRhVmFsdWUuZ2V0QXR0cmlidXRlKCd2YWx1ZScpO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlVVJJUGFyYW1ldGVyTmFtZSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKTtcblxuICAgIGlmICghdmFsdWVVUklQYXJhbWV0ZXJOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLnNlYXJjaCkuZ2V0KHZhbHVlVVJJUGFyYW1ldGVyTmFtZSkgfHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIge1xuICBzdGF0aWMgZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkKSB7XG4gICAgICB0aGlzLmZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBmb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1F1ZXVlTWljcm90YXNrU3VwcG9ydGVkKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBvdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuXG4gICAgaW1nLnNyYyA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtuZXcgQXJyYXlCdWZmZXIoMTBlKzcpXSkpOyAvLyAxMDBNYiBvciBsZXNzIG9yIG1vcmUgZGVwZW5kaW5nIG9uIGFzIHlvdSB3aXNoIHRvIGZvcmNlL2ludm9rZSBHQyBjeWNsZSBydW5cbiAgICBpbWcub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5zcmMpO1xuXG4gICAgICBpbWcgPSBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV0d29ya01vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1N1cHBvcnRlZCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcnR0OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lZmZlY3RpdmVUeXBlOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpO1xuICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuICB9XG5cbiAgZ2V0IGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldCBydHQoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcnR0O1xuICB9XG5cbiAgZ2V0IGVmZmVjdGl2ZVR5cGUoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fZWZmZWN0aXZlVHlwZTtcbiAgfVxuXG4gIGdldCBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5kb3dubGluayB8fCBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5kb3dubGlua01heDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWZmZWN0aXZlVHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuICdVbmtub3duJztcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZWZmZWN0aXZlVHlwZSB8fCBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS50eXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSb3VuZFRyaXBUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJ0dDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGxpc3RlbmVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gICAgfTtcblxuICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0aXN0aWNzKCk6IHZvaWQge1xuICAgIHRoaXMuX3J0dC52YWx1ZSA9IHRoaXMuZ2V0Um91bmRUcmlwVGltZSgpO1xuICAgIHRoaXMuX2VmZmVjdGl2ZVR5cGUudmFsdWUgPSB0aGlzLmdldEVmZmVjdGl2ZVR5cGUoKTtcbiAgICB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS52YWx1ZSA9IHRoaXMuZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcblxuZXhwb3J0IGNsYXNzIFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtU2V0dXBMaXN0ZW5lcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldHJpY3NTZXJ2aWNlID0gU0RLLm1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX21ldHJpY1N1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdWNjZXNzKHN0cmVhbUlkKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQsIHN0cmVhbUlkKTtcbiAgfVxuXG4gIGZhaWwoKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRTdHJlYW1NZXRyaWMobWV0cmljVHlwZTogTWV0cmljc1R5cGUsIHN0cmVhbUlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21ldHJpY1N1Ym1pdHRlZCkge1xuICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNTdWJtaXR0ZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXR1cFRpbWUgPSBub3cgLSB0aGlzLl9zdGFydFRpbWU7XG4gICAgY29uc3QgbWV0cmljTmFtZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpY1R5cGUpLmdldE5hbWUoKTtcblxuICAgIHRoaXMubWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHNldHVwVGltZX0sXG4gICAgICBzdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFN0cmVhbSBtZXRyaWMgWyVzXSBpbiBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgbmV3IER1cmF0aW9ucyhzZXR1cFRpbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEVkZ2VUb2tlbiBmcm9tICcuL0VkZ2VUb2tlbic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4vRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmNvbnN0IGVkZ2VBdXRoVG9rZW5QcmVmaXggPSAnRElHRVNUOic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VBdXRoUGFyc2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFZGdlQXV0aFBhcnNlcicpO1xuXG4gIHN0YXRpYyBwYXJzZVRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogRWRnZVRva2VuIHtcbiAgICBpZiAoIXRoaXMuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdUb2tlbiBpcyBub3QgdmFsaWQgWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGF0b2IodG9rZW4uc3Vic3RyKGVkZ2VBdXRoVG9rZW5QcmVmaXgubGVuZ3RoKSk7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBKU09OLnBhcnNlKGRlY29kZWRUb2tlbik7XG5cbiAgICAgIGVkZ2VUb2tlbi50b2tlbiA9IEpTT04ucGFyc2UoZWRnZVRva2VuLnRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4oZWRnZVRva2VuKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcGFyc2UgdG9rZW4gdmFsdWUnLCBlKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4uc3RhcnRzV2l0aChlZGdlQXV0aFRva2VuUHJlZml4KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW50ZXJmYWNlIElUb2tlbiB7XG4gIHVyaTogVVJMIHwgbnVsbDtcbiAgY2FwYWJpbGl0aWVzOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElFZGdlVG9rZW4ge1xuICBhcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHRva2VuOiBJVG9rZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VUb2tlbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW46IElUb2tlbjtcblxuICBjb25zdHJ1Y3RvcihlZGdlVG9rZW46IElFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbklkID0gZWRnZVRva2VuPy5hcHBsaWNhdGlvbklkIHx8ICcnO1xuICAgIHRoaXMuX3Rva2VuID0ge1xuICAgICAgdXJpOiBlZGdlVG9rZW4/LnRva2VuPy51cmkgPyBuZXcgVVJMKGVkZ2VUb2tlbi50b2tlbi51cmkpIDogbnVsbCxcbiAgICAgIGNhcGFiaWxpdGllczogZWRnZVRva2VuPy50b2tlbj8uY2FwYWJpbGl0aWVzIHx8IFtdXG4gICAgfTtcbiAgfVxuXG4gIGdldCB1cmkoKTogVVJMIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLnVyaTtcbiAgfVxuXG4gIGdldCBjYXBhYmlsaXRpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi5jYXBhYmlsaXRpZXM7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbklkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5kZWNsYXJlIGNvbnN0IF9fRkVBVFVSRVNfXzoge1xuICBzZW5kTG9jYWxDYW5kaWRhdGVzOiBib29sZWFuO1xuICBzZW5kTG9nczogTG9nZ2luZ0xldmVsVHlwZTtcbiAgc2VuZE1ldHJpY3M6IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nVG9Db25zb2xlOiBMb2dnaW5nTGV2ZWxUeXBlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRGZWF0dXJlcyB7XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBib29sZWFuO1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZExvZ3M6IExvZ2dpbmdMZXZlbFR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTWV0cmljczogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nVG9Db25zb2xlOiBMb2dnaW5nTGV2ZWxUeXBlO1xuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvZ3MoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2dzO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTWV0cmljcygpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTWV0cmljcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nVG9Db25zb2xlKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9sb2dUb0NvbnNvbGU7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGZWF0dXJlcygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmVhdHVyZXMgPSBfX0ZFQVRVUkVTX187XG5cbiAgICAgIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXMgPSAnc2VuZExvY2FsQ2FuZGlkYXRlcycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTG9jYWxDYW5kaWRhdGVzIDogdHJ1ZTtcbiAgICAgIHRoaXMuX3NlbmRMb2dzID0gJ3NlbmRMb2dzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRMb2dzIDogJ0FsbCc7XG4gICAgICB0aGlzLl9zZW5kTWV0cmljcyA9ICdzZW5kTWV0cmljcycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTWV0cmljcyA6ICdBbGwnO1xuICAgICAgdGhpcy5fbG9nVG9Db25zb2xlID0gJ2xvZ1RvQ29uc29sZScgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5sb2dUb0NvbnNvbGUgOiAnQWxsJztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3NlbmRMb2dzID0gJ0FsbCc7XG4gICAgICB0aGlzLl9zZW5kTWV0cmljcyA9ICdBbGwnO1xuICAgICAgdGhpcy5fbG9nVG9Db25zb2xlID0gJ0FsbCc7XG4gICAgfVxuICB9XG59XG5cbkJ1aWxkRmVhdHVyZXMuYXBwbHlGZWF0dXJlcygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmVhdHVyZUVuYWJsZW1lbnQge1xuICBzdGF0aWMgZ2V0IGNsaWVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2xpZW50IG9mZmVyIHdvcmtmbG93IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IGluIHRoZSBmb2xsb3dpbmcgYnJvd3NlcnNcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzQgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc1IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NiB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFkZFRyYW5jZWl2ZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDaHJvbWUgNjksIDcwLCA3MSwgNzIgZXhwb3NlcyBgYWRkVHJhbmNlaXZlcmAgYnV0IGl0IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzEgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBnZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY2O1xuICB9XG5cbiAgc3RhdGljIGdldCBnZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG9uVHJhY2tEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2MyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaG91bGRVc2VOYXRpdmVIbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaScgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhbXN1bmdCcm93c2VyJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNQcmVjYWNoaW5nRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lICE9PSAnSUUnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0ZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb25TdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgdHlwZW9mIGRvY3VtZW50Py5jcmVhdGVFbGVtZW50ID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1F1ZXVlTWljcm90YXNrU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uID49IDcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA+PSA2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc01vYmlsZSgpO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0luc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgdHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IgPT09ICd1bmRlZmluZWQnKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBSVENSdHBSZWNlaXZlcj8ucHJvdG90eXBlPy5jcmVhdGVFbmNvZGVkU3RyZWFtcyAhPT0gJ3VuZGVmaW5lZCc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19QQVJBTUVURVJTX186IHtcbiAgZGlzY292ZXJ5OiBJRGlzY292ZXJ5UGFyYW1ldGVyO1xufTtcblxuaW50ZXJmYWNlIElEaXNjb3ZlcnlQYXJhbWV0ZXJ7XG4gIGludGVudGlvbnM6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyYW1ldGVycyB7XG4gIHByaXZhdGUgc3RhdGljIF9kaXNjb3ZlcnlQYXJhbWV0ZXJzOiBJRGlzY292ZXJ5UGFyYW1ldGVyIDtcblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVBhcmFtZXRlcnMoKTogSURpc2NvdmVyeVBhcmFtZXRlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnM7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlQYXJhbWV0ZXJzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gX19QQVJBTUVURVJTX187XG5cbiAgICAgIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnMgPSAnZGlzY292ZXJ5JyBpbiBwYXJhbWV0ZXJzID8gcGFyYW1ldGVycy5kaXNjb3ZlcnkgOiB7aW50ZW50aW9uczogJyd9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnMgPSB7aW50ZW50aW9uczogJyd9O1xuICAgIH1cbiAgfVxufVxuXG5QYXJhbWV0ZXJzLmFwcGx5UGFyYW1ldGVycygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4vSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNwb3NhYmxlIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIF9kaXNwb3NlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGlzcG9zYWJsZTogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihkaXNwb3NhYmxlOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5fZGlzcG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlID0gZGlzcG9zYWJsZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3Bvc2FibGUuY2FsbCh0aGlzKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4vSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNwb3NhYmxlTGlzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3Q6IElEaXNwb3NhYmxlW10gPSBbXTtcblxuICBhZGQoZGlzcG9zYWJsZTogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LnB1c2goZGlzcG9zYWJsZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QuZm9yRWFjaChkaXNwb3NhYmxlID0+IGRpc3Bvc2FibGUuZGlzcG9zZSgpKTtcbiAgICB0aGlzLl9saXN0Lmxlbmd0aCA9IDA7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRGlzcG9zYWJsZUxpc3RbZGlzcG9zYWJsZXM9JHt0aGlzLl9saXN0Lmxlbmd0aH1dYDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5ncyB7XG4gIHN0YXRpYyByYW5kb20obGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhbmRvbTEzQ2hhcmFjdGVycyA9ICgpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygyLCAxNSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxvb3BzOiBudW1iZXIgPSBNYXRoLmNlaWwobGVuZ3RoIC8gMTMpO1xuXG4gICAgcmV0dXJuIG5ldyBBcnJheShsb29wcykuZmlsbChyYW5kb20xM0NoYXJhY3RlcnMpLnJlZHVjZSgoc3RyaW5nLCBmdW5jKSA9PiB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgZnVuYygpO1xuICAgIH0sICcnKS5zdWJzdHJpbmcoMCwgbGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmdzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFVucmVhY2hhYmxlKHg6IG5ldmVyKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgWyR7eH1dLiBUaGlzIHNob3VsZCBuZXZlciBiZSByZWFjaGVkYCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2VydFVucmVhY2hhYmxlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwZW5kZXJzIHtcbiAgcHJpdmF0ZSBfYXBwZW5kZXJzOiBBcnJheTxJQXBwZW5kZXI+ID0gW107XG5cbiAgZ2V0IHZhbHVlKCk6IEFycmF5PElBcHBlbmRlcj4ge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBhZGQoYXBwZW5kZXI6IElBcHBlbmRlcik6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycy5wdXNoKGFwcGVuZGVyKTtcbiAgfVxuXG4gIHJlbW92ZShhcHBlbmRlcik6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IHRoaXMuX2FwcGVuZGVycy5yZWR1Y2UoKGl0ZW1zLCBpdGVtKSA9PiB7XG4gICAgICBpZiAoIShpdGVtID09PSBhcHBlbmRlcikpIHtcbiAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH0sIFtdIGFzIEFycmF5PElBcHBlbmRlcj4pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uc29sZUFwcGVuZGVyIGltcGxlbWVudHMgSUFwcGVuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWw7XG5cbiAgbG9nKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChsb2dMZXZlbCA8IHRoaXMuX3RocmVzaG9sZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gYCR7ZGF0ZS50b0lTT1N0cmluZygpfSBbJHtjYXRlZ29yeX1dIFske0xvZ2dpbmdMZXZlbFtsb2dMZXZlbF19XSAke21lc3NhZ2V9YDtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICBjb25zb2xlLmxvZyhmdWxsTWVzc2FnZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGZ1bGxNZXNzYWdlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuXG5leHBvcnQgZW51bSBMb2dnaW5nTGV2ZWwge1xuICBBbGwgPSAtMSxcbiAgVHJhY2UgPSAxMCxcbiAgRGVidWcgPSAyMCxcbiAgSW5mbyA9IDMwLFxuICBXYXJuID0gNDAsXG4gIEVycm9yID0gNTAsXG4gIEZhdGFsID0gNjAsXG4gIE9mZiA9IDEwMCxcbn1cblxuZXhwb3J0IHR5cGUgTG9nZ2luZ0xldmVsVHlwZSA9ICdPZmYnIHwgJ1RyYWNlJyB8ICdEZWJ1ZycgfCAnSW5mbycgfCAnV2FybicgfCAnRXJyb3InIHwgJ0ZhdGFsJyB8ICdBbGwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jYXRlZ29yeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBlbmRlcnM6IEFwcGVuZGVycztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkO1xuXG4gIGdldCBjYXRlZ29yeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jYXRlZ29yeTtcbiAgfVxuXG4gIGdldCBhcHBlbmRlcnMoKTogQXBwZW5kZXJzIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nVGhyZXNob2xkIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgdHJhY2UoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLlRyYWNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLlRyYWNlLCBhcmdzKTtcbiAgfVxuXG4gIGRlYnVnKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5EZWJ1Zykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5EZWJ1ZywgYXJncyk7XG4gIH1cblxuICBpbmZvKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5JbmZvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkluZm8sIGFyZ3MpO1xuICB9XG5cbiAgd2FybiguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5XYXJuLCBhcmdzKTtcbiAgfVxuXG4gIGVycm9yKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5FcnJvciwgYXJncyk7XG4gIH1cblxuICBmYXRhbCguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRmF0YWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRmF0YWwsIGFyZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2cobGV2ZWw6IG51bWJlciwgYXJnczogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzKTtcblxuICAgIHRoaXMuX2FwcGVuZGVycy52YWx1ZS5mb3JFYWNoKChhcHBlbmRlcjogSUFwcGVuZGVyKSA9PiB7XG4gICAgICBhcHBlbmRlci5sb2cobGV2ZWwsIG1lc3NhZ2UsIHRoaXMuY2F0ZWdvcnksIGRhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3M6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSBhcmdzWzBdO1xuICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAocmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mICYmIGFyZ3MubGVuZ3RoID4gMSAmJiBpbmRleCA+PSAwKSB7XG4gICAgICBpbmRleCA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZignJScsIGluZGV4KTtcblxuICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICBjb25zdCB0eXBlID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxLCBpbmRleCArIDIpO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgJyUnOlxuICAgICAgICAgICAgLy8gRXNjYXBlZCAnJSUnIHR1cm5zIGludG8gJyUnXG4gICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxKTtcbiAgICAgICAgICAgIGluZGV4Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAnJWQnIG9yICclcycgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2onOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAlaicgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMuc3RyaW5naWZ5KGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMSkge1xuICAgICAgYXJncyA9IGFyZ3MucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICsgMSA9PT0gYXJyYXkubGVuZ3RoICYmIGN1cnJlbnRWYWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgJ1xcbicgKyB0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZS5zdGFjayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyBgWyR7dGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUpfV1gO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaW5naWZ5KGFyZzogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBjYWNoZSA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgYXJnIGluc3RhbmNlb2YgRXJyb3IgPyB0aGlzLnRvU3RyaW5nKGFyZykgOiBhcmcsXG4gICAgICAgIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChjYWNoZS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICc8cmVjdXJzaXZlPic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhY2hlLnB1c2godmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgMlxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJ1tvYmplY3QgaW52YWxpZCBKU09OLnN0cmluZ2lmeV0nO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUFyZ3VtZW50KGFyZ3VtZW50OiBhbnksIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmc6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHRoaXMudG9TdHJpbmcoYXJndW1lbnQpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAyKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9TdHJpbmcoZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGRhdGEgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IHRvU3RyaW5nU3RyID0gJyc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9ICdbb2JqZWN0IGludmFsaWQgdG9TdHJpbmcoKV0nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvU3RyaW5nU3RyO1xuICB9XG5cbiAgY29uc3RydWN0b3IoY2F0ZWdvcnk6IHN0cmluZywgYXBwZW5kZXJzOiBBcHBlbmRlcnMsIHRocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCkge1xuICAgIHRoaXMuX2NhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gYXBwZW5kZXJzO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckRlZmF1bHRzIHtcbiAgc3RhdGljIGdldCBkZWZhdWx0TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRMb2dzXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsW0J1aWxkRmVhdHVyZXMubG9nVG9Db25zb2xlXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyLCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4vQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQge0lDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyfSBmcm9tICcuLi9kb20vSUNvbmZpZ3VyYXRpb25QYXJhbWF0ZXJSZWFkZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJGYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcnM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IElMb2dnZXJ9ID0ge307XG4gIHByaXZhdGUgc3RhdGljIF9hcHBlbmRlcnM6IEFwcGVuZGVycyA9IG5ldyBBcHBlbmRlcnMoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCA9IG5ldyBMb2dnaW5nVGhyZXNob2xkKCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uID0gbmV3IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTtcblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0TG9nZ2VyKGNhdGVnb3J5OiBzdHJpbmcpOiBJTG9nZ2VyIHtcbiAgICBpZiAodHlwZW9mIGNhdGVnb3J5ICE9PSAnc3RyaW5nJykge1xuICAgICAgY2F0ZWdvcnkgPSAnU0RLJztcbiAgICB9XG5cbiAgICBjb25zdCBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XTtcblxuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgIHJldHVybiBsb2dnZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldID0gbmV3IExvZ2dlcihjYXRlZ29yeSwgdGhpcy5fYXBwZW5kZXJzLCB0aGlzLl90aHJlc2hvbGQpO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dpbmdMZXZlbCgpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgnY29uc29sZScsIExvZ2dlckZhY3RvcnkuYXBwbHlDb25zb2xlTG9nZ2VyLmJpbmQodGhpcykpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgndGVsZW1ldHJ5JywgTG9nZ2VyRmFjdG9yeS5hcHBseVRlbGVtZXRyeUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5TG9nZ2luZ0xldmVsKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWxvZ2dpbmctbGV2ZWwnKTtcblxuICAgIGlmIChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKSB7XG4gICAgICB0aGlzLl90aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwobmFtZTogc3RyaW5nLCBhcHBseUFwcGVuZGVyOiAobGV2ZWw6IExvZ2dpbmdMZXZlbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZShgcGhlbml4LSR7bmFtZX0tbG9nZ2luZy1sZXZlbGApO1xuXG4gICAgaWYgKHBhcmFtZXRlclZhbHVlID09PSAnT2ZmJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFwcGx5QXBwZW5kZXIoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUNvbnNvbGVMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlUZWxlbWV0cnlMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gbGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5Mb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShsb2dnaW5nTGV2ZWw6IExvZ2dpbmdMZXZlbCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsKSB7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5PZmY6XG4gICAgICAgIHJldHVybiAnT2ZmJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLlRyYWNlOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkRlYnVnOlxuICAgICAgICByZXR1cm4gJ0RlYnVnJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkluZm86XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuV2FybjpcbiAgICAgICAgcmV0dXJuICdXYXJuJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkVycm9yOlxuICAgICAgICByZXR1cm4gJ0Vycm9yJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkZhdGFsOlxuICAgICAgICByZXR1cm4gJ0ZhdGFsJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkFsbDpcbiAgICAgICAgcmV0dXJuICdBbGwnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChsb2dnaW5nTGV2ZWxUeXBlOiBMb2dnaW5nTGV2ZWxUeXBlKTogTG9nZ2luZ0xldmVsIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnVHJhY2UnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLlRyYWNlO1xuICAgICAgY2FzZSAnRGVidWcnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkRlYnVnO1xuICAgICAgY2FzZSAnSW5mbyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgICAgIGNhc2UgJ1dhcm4nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLldhcm47XG4gICAgICBjYXNlICdFcnJvcic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRXJyb3I7XG4gICAgICBjYXNlICdGYXRhbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRmF0YWw7XG4gICAgICBjYXNlICdBbGwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ1RocmVzaG9sZCB7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbDtcblxuICBnZXQgdmFsdWUoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0VGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljVHlwZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3M6IE1ldHJpY3NUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKG1ldHJpY3M6IE1ldHJpY3NUeXBlKSB7XG4gICAgdGhpcy5fbWV0cmljcyA9IG1ldHJpY3M7XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE1ldHJpY3NUeXBlW3RoaXMuX21ldHJpY3NdO1xuICB9XG5cbiAgZ2V0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGhpcy5fbWV0cmljcykge1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5DaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TdGFsbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5CdWZmZXJpbmc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9tZXRyaWNzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4vVGVsZW1ldHJ5RGVmYXVsdCc7XG5cbmV4cG9ydCBlbnVtIFRlbGVtZXRyeUxldmVsIHtcbiAgT2ZmID0gMTAwLFxuICBFc3NlbnRpYWwgPSAxMCxcbiAgQWxsID0gLTFcbn1cblxuZXhwb3J0IHR5cGUgVGVsZW1ldHJ5TGV2ZWxUeXBlID0gJ09mZicgfCAnRXNzZW50aWFsJyB8ICdBbGwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gIHByaXZhdGUgX3VybCA9ICdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeS9tZXRyaWNzJztcbiAgcHJpdmF0ZSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCA9IFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsO1xuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IG1ldHJpY3NVcmwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICBtZXRyaWNzVXJsLnBhdGhuYW1lID0gbWV0cmljc1VybC5wYXRobmFtZSArICcvbWV0cmljcyc7XG5cbiAgICB0aGlzLl91cmwgPSBtZXRyaWNzVXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0IHRocmVzaG9sZCh0aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4uL3Nkay9UZWxlbWV0cnlVcmwnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4uL3Nkay9FbnZpcm9ubWVudCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4vVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NGYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlczoge1tjYXRlZ29yeTogc3RyaW5nXTogTWV0cmljc1NlcnZpY2V9ID0ge307XG5cbiAgc3RhdGljIGdldE1ldHJpY3NTZXJ2aWNlKHVybDogc3RyaW5nKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1cicpO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMpIHtcbiAgICAgIHJldHVybiBtZXRyaWNzU2VydmljZXM7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBuZXcgTWV0cmljc0NvbmZpZ3VyYXRpb24oKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IEVudmlyb25tZW50LmdldEVudmlyb25tZW50RnJvbVVybCh1cmwpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKFNESy50ZWxlbWV0cnlMZXZlbCk7XG5cbiAgICByZXR1cm4gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdID0gbmV3IE1ldHJpY3NTZXJ2aWNlKG1ldHJpY3NDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHN0YXRpYyBzZXRUZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBPYmplY3QudmFsdWVzKE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXMpO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcyAmJiBtZXRyaWNzU2VydmljZXMubGVuZ3RoKSB7XG4gICAgICBtZXRyaWNzU2VydmljZXMuZm9yRWFjaChtZXRyaWNzU2VydmljZSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICAgICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gdGVsZW1ldHJ5TGV2ZWw7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9nZ2VyRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuL01ldHJpY1R5cGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5jb25zdCByZXF1ZXN0U2l6ZUxpbWl0ID0gMTAyNDtcblxuaW50ZXJmYWNlIElWYWx1ZSB7XG4gIHN0cmluZz86IHN0cmluZztcbiAgdWludDY0PzogbnVtYmVyO1xuICBmbG9hdD86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElNZXRyaWNSZWNvcmQge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgbWV0cmljOiBzdHJpbmc7XG4gIHZhbHVlOiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU6IElWYWx1ZTtcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpYyB7XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZTtcbiAgdmFsdWU/OiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU/OiBJVmFsdWU7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIF9tZXRyaWNzOiBBcnJheTxJTWV0cmljUmVjb3JkPiA9IFtdO1xuICBwcml2YXRlIF9pc1NlbmRpbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgX2RvbWFpbiA9IGxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gIGNvbnN0cnVjdG9yKG1ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uID0gbWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIH1cblxuICBnZXQgbWV0cmljc0NvbmZpZ3VyYXRpb24oKTogTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobWV0cmljOiBJTWV0cmljKTogdm9pZCB7XG4gICAgY29uc3Qge3N0cmVhbUlkLCB2YWx1ZSwgcHJldmlvdXNWYWx1ZSwgcnVudGltZSwgcmVzb3VyY2UsIGtpbmR9ID0gbWV0cmljO1xuICAgIGNvbnN0IG1ldHJpY1R5cGUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWMubWV0cmljVHlwZSk7XG5cbiAgICBpZiAodGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID4gbWV0cmljVHlwZS5nZXRUZWxlbWV0cnlMZXZlbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpYzogbWV0cmljVHlwZS5nZXROYW1lKCksXG4gICAgICB2YWx1ZSxcbiAgICAgIHByZXZpb3VzVmFsdWUsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIHJ1bnRpbWUsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGtpbmRcbiAgICB9O1xuXG4gICAgdGhpcy5fbWV0cmljcy5wdXNoKG1ldHJpY1JlY29yZCk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXM6IEFycmF5PElNZXRyaWNSZWNvcmQ+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBtZXRyaWNzTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZmV0Y2godGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX21ldHJpY3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IG1ldHJpY3NNZXNzYWdlcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UoMCwgcmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICB0aGlzLl9tZXRyaWNzID0gdGhpcy5fbWV0cmljcy5zbGljZShyZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIE1ldHJpY3NUeXBlIHtcbiAgVGltZVRvRmlyc3RGcmFtZSxcbiAgQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgU3RhbGxlZCxcbiAgQnVmZmVyaW5nLFxuICBTZXR1cENvbXBsZXRlZCxcbiAgU2V0dXBGYWlsZWQsXG4gIFJvdW5kVHJpcFRpbWUsXG4gIERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LFxuICBOZXR3b3JrVHlwZSxcbiAgUmVzb2x1dGlvbkNoYW5nZWQsXG4gIEFwcGxpY2F0aW9uRm9yZWdyb3VuZCxcbiAgQXBwbGljYXRpb25CYWNrZ3JvdW5kXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1ldHJpY3NUeXBlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbCkge1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5PZmY6XG4gICAgICAgIHJldHVybiAnT2ZmJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsOlxuICAgICAgICByZXR1cm4gJ0Vzc2VudGlhbCc7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkFsbDpcbiAgICAgICAgcmV0dXJuICdBbGwnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbFR5cGU6IFRlbGVtZXRyeUxldmVsVHlwZSk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLk9mZjtcbiAgICAgIGNhc2UgJ0Vzc2VudGlhbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlICdBbGwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGVsZW1ldHJ5TGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeURlZmF1bHQge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsW0J1aWxkRmVhdHVyZXMuc2VuZE1ldHJpY3NdO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZUhhbmRsZXIgZnJvbSAnLi9Qcm9taXNlSGFuZGxlcic7XG5cbmNsYXNzIFByb21pc2Uge1xuICBfc3RhdGU6IG51bWJlcjtcbiAgX2hhbmRsZWQ6IGJvb2xlYW47XG4gIF92YWx1ZTogUHJvbWlzZTtcbiAgX2RlZmVycmVkczogQXJyYXk8UHJvbWlzZUhhbmRsZXI+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1pZ25vcmVcbiAgdGhlbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoY2FsbGJhY2spIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb21pc2VzIG11c3QgYmUgY29uc3RydWN0ZWQgdmlhIG5ldycpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ25vdCBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGUgPSAwO1xuICAgIHRoaXMuX2hhbmRsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBbXTtcblxuICAgIHRoaXMuZG9SZXNvbHZlKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGRvUmVzb2x2ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNhbGxiYWNrKFxuICAgICAgICB2YWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlamVjdChyZWFzb24pO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVzb2x2ZShuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzIGFzIFByb21pc2U7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUHJvbWlzZSBSZXNvbHV0aW9uIFByb2NlZHVyZTogaHR0cHM6Ly9naXRodWIuY29tL1Byb21pc2VzLWFwbHVzL1Byb21pc2VzLXNwZWMjdGhlLVByb21pc2UtcmVzb2x1dGlvbi1wcm9jZWR1cmVcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gcHJvbWlzZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBIFByb21pc2UgY2Fubm90IGJlIHJlc29sdmVkIHdpdGggaXQgc2VsZi4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1ZhbHVlICYmICh0eXBlb2YgbmV3VmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgY29uc3QgdGhlbiA9IG5ld1ZhbHVlLnRoZW47XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgIHByb21pc2UuX3N0YXRlID0gMztcbiAgICAgICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgIHByb21pc2UuZmluYWxlKCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBwcm9taXNlLmRvUmVzb2x2ZShmdW5jdGlvbigpOiB2b2lkIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgIHRoZW4uYXBwbHkobmV3VmFsdWUsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHJvbWlzZS5fc3RhdGUgPSAxO1xuICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIHByb21pc2UuZmluYWxlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZWplY3QobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0ZSA9IDI7XG4gICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLmZpbmFsZSgpO1xuICB9XG5cbiAgZmluYWxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gMiAmJiB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2hhbmRsZWQpIHtcbiAgICAgICAgICBQcm9taXNlLl91bmhhbmRsZWRSZWplY3Rpb24odGhpcy5fdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5fZGVmZXJyZWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0aGlzLmhhbmRsZSh0aGlzLl9kZWZlcnJlZHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX2RlZmVycmVkcyA9IG51bGw7XG4gIH1cblxuICBoYW5kbGUoZGVmZXJyZWQ6IFByb21pc2VIYW5kbGVyKTogdm9pZCB7XG4gICAgbGV0IHByb21pc2UgPSB0aGlzIGFzIFByb21pc2U7XG5cbiAgICB3aGlsZSAocHJvbWlzZS5fc3RhdGUgPT09IDMpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLl92YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDApIHtcbiAgICAgIHByb21pc2UuX2RlZmVycmVkcy5wdXNoKGRlZmVycmVkKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByb21pc2UuX2hhbmRsZWQgPSB0cnVlO1xuICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IHByb21pc2UuX3N0YXRlID09PSAxID8gZGVmZXJyZWQub25GdWxmaWxsZWQgOiBkZWZlcnJlZC5vblJlamVjdGVkO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAxKSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlc3VsdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2socHJvbWlzZS5fdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHJlc3VsdCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYWxsKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLmFsbCBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyKTtcblxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKFtdKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlbWFpbmluZyA9IGFyZ3MubGVuZ3RoO1xuICAgICAgY29uc3QgbWFuYWdlUmVzcG9uc2UgPSAoaSwgdmFsdWUpOiB2b2lkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgY29uc3QgdGhlbiA9IHZhbHVlLnRoZW47XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB0aGVuLmNhbGwoXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWUgPT4gbWFuYWdlUmVzcG9uc2UoaSwgdmFsdWUpLFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhcmdzW2ldID0gdmFsdWU7XG5cbiAgICAgICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYW5hZ2VSZXNwb25zZShpLCBhcmdzW2ldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyByZXNvbHZlKHZhbHVlKTogUHJvbWlzZSB7XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IFByb21pc2UpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiByZXNvbHZlKHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmVqZWN0KHZhbHVlKTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHJlamVjdCh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJhY2UoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UucmFjZSBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShhcnJbaV0pLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBfaW1tZWRpYXRlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKTtcbiAgfVxuXG4gIHN0YXRpYyBfdW5oYW5kbGVkUmVqZWN0aW9uKGVycm9yKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1Bvc3NpYmxlIFVuaGFuZGxlZCBQcm9taXNlIFJlamVjdGlvbjonLCBlcnJvcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgIH1cbiAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZVsnY2F0Y2gnXSA9IGZ1bmN0aW9uKG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ3RoZW4nXSA9IGZ1bmN0aW9uKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcigoKSA9PiBudWxsKTtcblxuICB0aGlzLmhhbmRsZShuZXcgUHJvbWlzZUhhbmRsZXIob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpKTtcblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10gPSBmdW5jdGlvbihjYWxsYmFjazogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIHZhbHVlID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiB2YWx1ZSksXG4gICAgcmVhc29uID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiBjb25zdHJ1Y3Rvci5yZWplY3QocmVhc29uKSlcbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb21pc2U7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZSBmcm9tICcuL1Byb21pc2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9taXNlSGFuZGxlciB7XG4gIG9uRnVsZmlsbGVkOiBGdW5jdGlvbjtcbiAgb25SZWplY3RlZDogRnVuY3Rpb247XG4gIHByb21pc2U6IFByb21pc2U7XG5cbiAgY29uc3RydWN0b3Iob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpIHtcbiAgICB0aGlzLm9uRnVsZmlsbGVkID0gdHlwZW9mIG9uRnVsZmlsbGVkID09PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiBudWxsO1xuICAgIHRoaXMub25SZWplY3RlZCA9IHR5cGVvZiBvblJlamVjdGVkID09PSAnZnVuY3Rpb24nID8gb25SZWplY3RlZCA6IG51bGw7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHtcbiAgYXVkaW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICB2aWRlb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIGxvY2FsT2ZmZXI6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSgpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlZDoge1xuICAgIGRpcmVjdGlvbj86IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uO1xuICAgIHBlZXJDb25uZWN0aW9uOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD47XG4gIH07XG5cbiAgc3RhdGljIGdldCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fcGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUHJlY2FjaGluZ0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UucHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwcmUtY2FjaGUgcGVlciBjb25uZWN0aW9uIG9mZmVyJywgZSkpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKTogUHJvbWlzZTx7IHBlZXJDb25uZWN0aW9uOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB8IHZvaWQ+OyBkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIH0+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSB7XG4gICAgICBkaXJlY3Rpb246ICdyZWN2b25seScsXG4gICAgICBwZWVyQ29ubmVjdGlvbjogUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoZGlyZWN0aW9uOiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiA9ICdyZWN2b25seScsIGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9IGZhbHNlKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+IHtcbiAgICBpZiAoUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgJiYgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQuZGlyZWN0aW9uID09PSBkaXJlY3Rpb24gJiYgIWVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcykge1xuICAgICAgY29uc3QgdmFsdWUgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5wZWVyQ29ubmVjdGlvbjtcblxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IHtlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXN9O1xuXG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fcGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pXG4gICAgICAudGhlbihhc3luYyBwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0FkZFRyYW5zY2VpdmVyO1xuICAgICAgICBsZXQgdmlkZW9UcmFuc2NlaXZlciwgYXVkaW9UcmFuc2NlaXZlcjtcblxuICAgICAgICBpZiAoc3VwcG9ydHNBZGRUcmFuc2NlaXZlcikge1xuICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcignYXVkaW8nLCB7ZGlyZWN0aW9ufSk7XG4gICAgICAgICAgdmlkZW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCd2aWRlbycsIHtkaXJlY3Rpb259KTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyLFxuICAgICAgICAgICAgdmlkZW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICAgIGxvY2FsT2ZmZXI6IGF3YWl0IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHVuZGVmaW5lZClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGRpcmVjdGlvbiA9PT0gJ3JlY3Zvbmx5JyA/IHtcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgIG9mZmVyVG9SZWNlaXZlVmlkZW86IHRydWVcbiAgICAgICAgfSA6IHt9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgIGxvY2FsT2ZmZXI6IGF3YWl0IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cblBlZXJDb25uZWN0aW9uU2VydmljZS5pbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25maWd1cmF0aW9uTWFuYWdlciB7XG4gIHN0YXRpYyB0cnVuY2F0ZUljZVNlcnZlcnMoY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdXJsczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDI7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgdXJsID0gY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdO1xuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICB1cmxzLnB1c2goY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICB1cmxzOiB1cmxzLFxuICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcblxuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU2RwUGFyc2VyIGZyb20gJy4vU2RwUGFyc2VyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGludGVyZmFjZSBJUnRjTW9uaXRvclN0YXRpc3RpYyB7XG4gIFtraW5kOiBzdHJpbmddOiBJUnRjU3RhdGlzdGljO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydCB7XG4gIHJlc3VsdDogKCkgPT4gSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW0gZXh0ZW5kcyBSVENTdGF0c1JlcG9ydCB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZXM6ICgpID0+IHN0cmluZ1tdO1xuICBzdGF0OiAobmFtZSkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNTdGF0aXN0aWMge1xuICBzc3JjPzogc3RyaW5nO1xuICBtZWRpYVR5cGU/OiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBieXRlc1JlY2VpdmVkPzogbnVtYmVyO1xuICBmcmFtZXNEZWNvZGVkPzogbnVtYmVyO1xuICBwYWNrZXRzTG9zdD86IG51bWJlcjtcbiAgcGFja2V0c1JlY2VpdmVkPzogbnVtYmVyO1xuICBjb2RlYz86IHN0cmluZztcbiAgZnBzPzogbnVtYmVyO1xuICByb3VuZFRyaXBUaW1lPzogbnVtYmVyO1xuICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbmNvbnN0IHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25uZWN0aW9uTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRWaWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZEF1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRjU3RhdGlzdGljOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RyYWNrc1RvTW9uaXRvcjogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IHBlZXJDb25uZWN0aW9uO1xuICAgIHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUgPSBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgIHRoaXMuX3RyYWNrc1RvTW9uaXRvciA9IG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLm1hcCh0cmFjayA9PiB0cmFjay5raW5kKSB8fCBbXTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5nZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCkge1xuICAgICAgICBjb25zdCBwYXJzZWRTRFAgPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRTRFAuYXVkaW9Db2RlYztcbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFNEUC52aWRlb0NvZGVjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWMoKTogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9ydGNTdGF0aXN0aWM7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXBkYXRlVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLnVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIDExIGRvZXNudCBoYXZlIGtpbmQgb3IgbWVkaWFUeXBlIHNvIHdlIG5lZWQgdG8gdGFrZSBpdCBmcm9tIHRoZSBpbmJvdW5kLXJ0cCBvYmplY3QgaWRcbiAgICBjb25zdCBnZXRLaW5kRm9yU2FmYXJpMTEgPSAoaXRlbSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKG51bGwpXG4gICAgICAudGhlbihzdGF0cyA9PiB7XG4gICAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG5cbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgICAgICAgIGxldCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICBzdGF0cy5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lKSB7XG4gICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUgKiAxMDAwO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2luYm91bmQtcnRwJykge1xuICAgICAgICAgICAgICBjb25zdCBraW5kID0gcmVwb3J0LmtpbmQgfHwgcmVwb3J0Lm1lZGlhVHlwZSB8fCBnZXRLaW5kRm9yU2FmYXJpMTEocmVwb3J0KTtcbiAgICAgICAgICAgICAgbGV0IGNvZGVjID0gJyc7XG5cbiAgICAgICAgICAgICAgc3RhdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gcmVwb3J0LmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX3RyYWNrc1RvTW9uaXRvci5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gcmVwb3J0LmJ5dGVzUmVjZWl2ZWQgfHwgMDtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0J5dGVzUmVjZWl2ZWQgPSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8uYnl0ZXNSZWNlaXZlZCA/PyAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzRGVsdGEgPSBieXRlcyAtIHByZXZpb3VzQnl0ZXNSZWNlaXZlZDtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lRGVsdGEgPSByZXBvcnQudGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LnRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICBjb25zdCBiaXRyYXRlID0gYnl0ZXNEZWx0YSAmJiB0aW1lRGVsdGEgPyBNYXRoLmZsb29yKDggKiBieXRlc0RlbHRhIC9cbiAgICAgICAgICAgICAgICAgIHRpbWVEZWx0YSAqIDEwMDApIDogMDtcblxuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0gPSB7XG4gICAgICAgICAgICAgICAgICBzc3JjOiByZXBvcnQuc3NyYyxcbiAgICAgICAgICAgICAgICAgIG1lZGlhVHlwZToga2luZCxcbiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogcmVwb3J0LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgIGJpdHJhdGUsXG4gICAgICAgICAgICAgICAgICBieXRlc1JlY2VpdmVkOiByZXBvcnQuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNMb3N0OiByZXBvcnQucGFja2V0c0xvc3QsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzUmVjZWl2ZWQ6IHJlcG9ydC5wYWNrZXRzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBjb2RlYzogY29kZWMgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShraW5kKSxcbiAgICAgICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5mcmFtZXNEZWNvZGVkO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBmcHMgPSAocmVwb3J0LmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAgICAgICAocnRjU3RhdGlzdGljc1traW5kXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAgICAgICAgIDEwMDA7XG5cbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZwcyddID0gZnBzID8gTWF0aC5yb3VuZChmcHMgKiAxMDApIC8gMTAwIDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWNMZWdhY3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzTGVnYWN5KCkudGhlbihzdGF0cyA9PiB7XG4gICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuXG4gICAgICBzdGF0cy5yZXN1bHQoKS5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgIHJlcG9ydC5uYW1lcygpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdnb29nUlRUJykge1xuICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5zdGF0KG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnc3NyYycpIHtcbiAgICAgICAgICBjb25zdCBtZWRpYVR5cGUgPSByZXBvcnQuc3RhdCgnbWVkaWFUeXBlJykudG9TdHJpbmcoKTtcblxuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXSA9IHt0aW1lc3RhbXA6IERhdGUubm93KCl9O1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnc3NyYyddID0gcmVwb3J0LnN0YXQoJ3NzcmMnKS50b1N0cmluZygpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnbWVkaWFUeXBlJ10gPSBtZWRpYVR5cGU7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydieXRlc1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgnYnl0ZXNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncGFja2V0c0xvc3QnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzTG9zdCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncGFja2V0c1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgncGFja2V0c1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydjb2RlYyddID0gcmVwb3J0LnN0YXQoJ2dvb2dDb2RlY05hbWUnKS50b1N0cmluZygpIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUobWVkaWFUeXBlKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3JvdW5kVHJpcFRpbWUnXSA9IHJvdW5kVHJpcFRpbWU7XG5cbiAgICAgICAgICBpZiAobWVkaWFUeXBlID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LnN0YXQoJ2ZyYW1lc0RlY29kZWQnKTtcbiAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnZnBzJ10gPSAocnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdLmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAocnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgIDEwMDAgfHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZWNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWM7XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2RwUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2RwOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0F1ZGlvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1ZpZGVvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNkcDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2RwID0gc2RwO1xuXG4gICAgY29uc3Qgc2RwU3BsaXRCeUxpbmVzID0gdGhpcy5fc2RwLnNwbGl0KC8oXFxyXFxufFxccnxcXG4pLyk7XG4gICAgY29uc3Qgc2RwU3BsaXRCeVRyYWNrcyA9IHRoaXMuX3NkcC5zcGxpdCgnbT0nKTtcblxuICAgIHRoaXMuX2F1ZGlvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ2F1ZGlvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl92aWRlb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCd2aWRlbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ2F1ZGlvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gICAgdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ3ZpZGVvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gIH1cblxuICBnZXQgYXVkaW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hdWRpb0NvZGVjO1xuICB9XG5cbiAgZ2V0IHZpZGVvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmlkZW9Db2RlYztcbiAgfVxuXG4gIGdldCBpc0F1ZGlvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgZ2V0IGlzVmlkZW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzVHJhY2tCeVR5cGVFbmFibGVkKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeVRyYWNrczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBzZHBTZWN0aW9uRm9yVHlwZSA9IHNkcFNwbGl0QnlUcmFja3MuZmluZChzZHBUcmFjayA9PiBzZHBUcmFjay5zdGFydHNXaXRoKHR5cGUpKTtcblxuICAgIGlmICghc2RwU2VjdGlvbkZvclR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXNkcFNlY3Rpb25Gb3JUeXBlLmluY2x1ZGVzKGBhPWluYWN0aXZlYCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q29kZWModHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5TGluZXM6IHN0cmluZyBbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgdXNlZENvZGVjTGluZSA9IHNkcFNwbGl0QnlMaW5lcy5maW5kKHNkcExpbmUgPT4gc2RwTGluZS5pbmNsdWRlcyhgYT1ydHBtYXA6JHtzZHBTcGxpdEJ5TGluZXMuZmluZChpID0+IGkuaW5jbHVkZXMoYG09JHt0eXBlfWApKS5zcGxpdCgnICcpWzNdfWApKTtcbiAgICBjb25zdCB1c2VkQ29kZWMgPSB1c2VkQ29kZWNMaW5lLnNwbGl0KCcgJylbMV07XG4gICAgY29uc3QgY29kZWNOYW1lID0gdXNlZENvZGVjLnNwbGl0KCcvJylbMF07XG5cbiAgICByZXR1cm4gY29kZWNOYW1lO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uLCB7UGVlckNvbm5lY3Rpb25FdmVudHN9IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IHtJTGVnYWN5UlRDU3RhdHNSZXBvcnR9IGZyb20gJy4vUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb24gaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignVmFuaWxsYVBlZXJDb25uZWN0aW9uJyk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBSVENQZWVyQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC53ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIGNsYXNzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGdldCBuYXRpdmUoKTogUlRDUGVlckNvbm5lY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgY3VycmVudExvY2FsRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGNvbm5lY3Rpb25TdGF0ZSgpOiBSVENQZWVyQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IGljZUNvbm5lY3Rpb25TdGF0ZSgpOiBSVENJY2VDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFGZWF0dXJlRW5hYmxlbWVudC5hZGRUcmFuY2VpdmVyRGlzYWJsZWQgJiYgdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT2ZmZXIob3B0aW9ucz86IFJUQ09mZmVyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlT2ZmZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQW5zd2VyKG9wdGlvbnM/OiBSVENBbnN3ZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVBbnN3ZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBzZXRMb2NhbERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhhc0NyeXB0byA9IGRlc2NyaXB0aW9uLnNkcD8ubWF0Y2goL2E9Y3J5cHRvOi9pKTtcblxuICAgIGlmIChoYXNDcnlwdG8pIHtcbiAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdTRFAgYT1jcnlwdG8gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGdldFNlbmRlcnMoKTogUlRDUnRwU2VuZGVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTZW5kZXJzKCk7XG4gIH1cblxuICBnZXRTdGF0cyhzZWxlY3Rvcj86IE1lZGlhU3RyZWFtVHJhY2sgfCBudWxsKTogUHJvbWlzZTxSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhzZWxlY3Rvcik7XG4gIH1cblxuICBnZXRTdGF0c0xlZ2FjeSgpOiBQcm9taXNlPElMZWdhY3lSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIC8vIElnbm9yZWQgZHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBsZWdhY3kgJ2dldFN0YXRzJyBtZXRob2QgdHlwZSBkZWZpbml0aW9uXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgJ2dldFN0YXRzJyBtZXRob2QgZm9yXG4gICAgICAvLyBDaHJvbWVAPD0gNjYgZGV0YWlsZWQgaGVyZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjI3ODE2XG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRUcmFuc2NlaXZlcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCk6IFJUQ1J0cFRyYW5zY2VpdmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIobmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRTdHJlYW0obWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogdm9pZCB7XG4gICAgbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFjayh0cmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb25maWd1cmF0aW9uKCk6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBzZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc2V0IG9udHJhY2soaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2sgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9udHJhY2soKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2s7XG4gIH1cblxuICBzZXQgb25pY2VjYW5kaWRhdGUoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNhbmRpZGF0ZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGU7XG4gIH1cblxuICBzZXQgb25jb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBzZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb247IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb24nO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSB7XG4gIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gbmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuL1N1YmplY3QnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkT25seVN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJqZWN0OiBTdWJqZWN0PFQ+O1xuXG4gIGNvbnN0cnVjdG9yKHN1YmplY3Q6IFN1YmplY3Q8VD4pIHtcbiAgICB0aGlzLl9zdWJqZWN0ID0gc3ViamVjdDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5jbGFzcyBEaXNwb3NhYmxlTGlzdGVuZXI8VD4gZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgY29uc3RydWN0b3IobGlzdGVuZXJzOiBBcnJheTxUPiwgbGlzdGVuZXI6IFQpIHtcbiAgICBzdXBlcigoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogQXJyYXk8KFQpID0+IHZvaWQ+O1xuICBwcml2YXRlIF92YWx1ZTogVDtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IFQpIHtcbiAgICBsZXQgY2hhbmdlZCA9IHRoaXMuX3ZhbHVlICE9PSB2YWx1ZTtcblxuICAgIGlmIChjaGFuZ2VkICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBjb21wYXJhYmxlID0gdmFsdWUgYXMgdW5rbm93biBhcyBJQ29tcGFyYWJsZTxUPjtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wYXJhYmxlLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjaGFuZ2VkID0gIWNvbXBhcmFibGUuZXF1YWxzKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgbGlzdGVuZXIodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgbGlzdGVuZXIodGhpcy5fdmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlTGlzdGVuZXI8KFQpID0+IHZvaWQ+KHRoaXMuX2xpc3RlbmVycywgbGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVudmlyb25tZW50IHtcbiAgc3RhdGljIGdldEVudmlyb25tZW50RnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICAgIHJldHVybiBiYXNlVVJMLm9yaWdpbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgU3RyaW5ncyBmcm9tICcuLi9sYW5nL1N0cmluZ3MnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi4vbG9nZ2VyL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5pbXBvcnQge0lDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyfSBmcm9tICcuLi9kb20vSUNvbmZpZ3VyYXRpb25QYXJhbWF0ZXJSZWFkZXInO1xuaW1wb3J0IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIGZyb20gJy4uL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuLi9ydGMvSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9FbnZpcm9ubWVudCc7XG5pbXBvcnQge0hsc1BsYXllclR5cGUsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9zdHJlYW1pbmcvU3RyZWFtVHlwZXMnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcblxuY29uc3QgcGFnZUxvYWRUaW1lID0gd2luZG93WydfX3BoZW5peFBhZ2VMb2FkVGltZSddIHx8IHdpbmRvd1snX19wYWdlTG9hZFRpbWUnXSB8fCBEYXRlLm5vdygpO1xuXG5pbnRlcmZhY2UgSUluaXRPcHRpb25zIHtcbiAgZGlzY292ZXJ5VXJpPzogc3RyaW5nO1xuICBwZWVyQ29ubmVjdGlvbkZhY3Rvcnk/OiBJUGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB0ZWxlbWV0cnlMZXZlbD86IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgY29uc29sZUxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbFR5cGU7XG4gIGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0/OiBib29sZWFuO1xuICBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZT86IGJvb2xlYW47XG4gIHdlYlBsYXllckxvYWRlcj86IChwbGF5ZXI6IFdlYlBsYXllclR5cGUpID0+IHZvaWQ7XG4gIHNoYWthUGxheWVyTG9hZGVyPzogKHBsYXllcjogU2hha2FUeXBlKSA9PiB2b2lkO1xuICBobHNKc0xvYWRlcj86IChwbGF5ZXI6IEhsc1BsYXllclR5cGUpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyB7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfd2ViUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc0pzTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Vudmlyb25tZW50OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeVVybDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSA4O1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5TGV2ZWw6IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+ID0gbmV3IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+KFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdChCdWlsZEZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdGVuYW5jeTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9jbGllbnRTZXNzaW9uSWQ6IHN0cmluZyA9IFN0cmluZ3MucmFuZG9tKDMyKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvYWRlZFRpbWVzdGFtcDogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU0RLJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pbml0aWFsaXplZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5SW5pdGlhbGl6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4oU0RLLl9pbml0aWFsaXplZCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seURpc2NvdmVyeVVyaTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4oRGlzY292ZXJ5VXJpLnVyaSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5KTtcblxuICBzdGF0aWMgZ2V0IHBhZ2VMb2FkVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogU3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbmFuY3koKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY2xpZW50U2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNESy5fY2xpZW50U2Vzc2lvbklkO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2FkZWRUaW1lc3RhbXAoKTogRGF0ZSB7XG4gICAgcmV0dXJuIFNESy5fbG9hZGVkVGltZXN0YW1wO1xuICB9XG5cbiAgc3RhdGljIGdldCBpbml0aWFsaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5SW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVVyaSgpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlEaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJQbGF5ZXJMb2FkZXIoKTogKFdlYlBsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93ZWJQbGF5ZXJMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthUGxheWVyTG9hZGVyKCk6IChTaGFrYVR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYVBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaGxzSnNMb2FkZXIoKTogKEhsc1BsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9obHNKc0xvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWV0cmljc1NlcnZpY2UoKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIHJldHVybiBTREsuX21ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlVcmwoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVsZW1ldHJ5VXJsO1xuICB9XG5cbiAgc3RhdGljIGdldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM7XG4gIH1cblxuICBzdGF0aWMgc2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMocmV0cmllc0Ftb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IHJldHJpZXNBbW91bnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKHRoaXMuX2xvZ2dlci50aHJlc2hvbGQudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJEZXRlY3RvcigpOiBCcm93c2VyRGV0ZWN0b3Ige1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3I7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBMb2dnZXJGYWN0b3J5LnRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgVVJMIHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyICYmIHRlbmFuY3kpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgdGVuYW5jeSB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKERpc2NvdmVyeVVyaS51cmkudmFsdWUpO1xuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBTREsuX21ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbWV0cmljcy1sZXZlbCcpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbChUZWxlbWV0cnlMZXZlbFt2YWx1ZV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWRUZWxlbWV0cnlMZXZlbCA9IFNESy5fdGVsZW1ldHJ5TGV2ZWwuc3Vic2NyaWJlKHRlbGVtZXRyeUxldmVsID0+IHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmV0cnkgb24gZmFpbHVyZSBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlTa2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXNGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LXNraXAtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLW1vYmlsZS1kZXZpY2VzJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1NraXAgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIG1vYmlsZSBkZXZpY2VzIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKGNoYW5uZWxUb2tlbik7XG5cbiAgICAgIFNESy5fdGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5O1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LXVyaScpO1xuXG4gICAgaWYgKHVyaVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpVmFsdWU7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVVSSVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWJhc2UtdXJpJyk7XG5cbiAgICBpZiAoYmFzZVVSSVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gYCR7YmFzZVVSSVZhbHVlfS9wY2FzdC9lbmRQb2ludHNgO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtYmFzZS11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGluaXQob3B0aW9ucz86IElJbml0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbmV3IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpc2NvdmVyeVVyaSkge1xuICAgICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gb3B0aW9ucy5kaXNjb3ZlcnlVcmk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeSkge1xuICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlID0gb3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRlbGVtZXRyeUxldmVsICYmIFRlbGVtZXRyeUxldmVsW29wdGlvbnMudGVsZW1ldHJ5TGV2ZWxdKSB7XG4gICAgICAgIFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5sb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci50aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmxvZ2dpbmdMZXZlbCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICYmXG4gICAgICAgIExvZ2dpbmdMZXZlbFtvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIGNvbnN0IGNvbnNvbGVBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIENvbnNvbGVBcHBlbmRlcik7XG5cbiAgICAgICAgaWYgKGNvbnNvbGVBcHBlbmRlcikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKGNvbnNvbGVBcHBlbmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICE9PSAnT2ZmJykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3dlYlBsYXllckxvYWRlciA9IG9wdGlvbnMud2ViUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9zaGFrYVBsYXllckxvYWRlciA9IG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX2hsc0pzTG9hZGVyID0gb3B0aW9ucy5obHNKc0xvYWRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5kaXNwb3NlKCk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gIFNESy5kaXNwb3NlKCk7XG59KTtcblxuU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuaW5pdCgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlVcmwge1xuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYmFzZVVSTC5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgICBzd2l0Y2ggKGJhc2VVUkwucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnd3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHA6JztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3c3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHBzOic7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAyIHx8XG4gICAgICAgICAgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMyAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAyXS5sZW5ndGggPD0gMiAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5sZW5ndGggPD0gMylcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50cy51bnNoaWZ0KCd0ZWxlbWV0cnknKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnc3RnLScpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctc3RnJykgfHwgc2VnbWVudHNbMF0uaW5jbHVkZXMoJy1zdGctJykgfHwgc2VnbWVudHNbMF0gPT09ICdzdGcnKSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeS1zdGcnO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdsb2NhbCcpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctbG9jYWwnKSkge1xuICAgICAgICAvLyBMZWF2ZSBVUkwgdW5jaGFuZ2VkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnknO1xuICAgICAgfVxuXG4gICAgICBiYXNlVVJMLmhvc3RuYW1lID0gc2VnbWVudHMuam9pbignLicpO1xuXG4gICAgICByZXR1cm4gYCR7YmFzZVVSTC5vcmlnaW59L3RlbGVtZXRyeWA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0cmF0ZVN0YXRlVHlwZSA9ICdLZWVwJyB8ICdSZXNldCc7XG5leHBvcnQgdHlwZSBCaXRyYXRlTW9kZVR5cGUgPSAnTm9ybWFsJyB8ICdGb3JjZScgfCAnUmVzZXQnO1xuXG5leHBvcnQgZW51bSBCaXRyYXRlU3RhdGUge1xuICBLZWVwLFxuICBSZXNldFxufVxuXG5leHBvcnQgZW51bSBCaXRyYXRlTW9kZSB7XG4gIE5vcm1hbCxcbiAgRm9yY2UsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlIHtcbiAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IG51bWJlcjtcbiAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVUeXBlO1xuICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVUeXBlO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi8uLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCBUb2tlbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9Ub2tlbkNvbnRleHQnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0LCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtLCBJRW5jb2RlZFN0cmVhbVNpbmssIENoYW5uZWxDb250ZXh0T3B0aW9uc30gZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IEluc2VydGFibGVTdHJlYW1zIGZyb20gJy4uL3N0cmVhbWluZy9JbnNlcnRhYmxlU3RyZWFtcyc7XG5cbmNvbnN0IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiA9ICdjbGllbnQ6dGVybWluYXRpb24nO1xuY29uc3QgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMgPSAzMDAwO1xuY29uc3Qgc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMTUwMDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT47XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbCBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NoYW5uZWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW5Db250ZXh0OiBUb2tlbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlQ29udGV4dDogU3RhdGVDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVZpZGVvRWxlbWVudDogUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuOiBSZWFkT25seVN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb246IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YXRlOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvTXV0ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvUGF1c2VkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW5FeHBpcmluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dGhvcml6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlPbmxpbmU6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMb2FkaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGxheWluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YW5kYnk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdG9wcGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VGFyZ2V0TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlCaXRyYXRlTGltaXQ6IFJlYWRPbmx5U3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSZXNvbHV0aW9uOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlGYWlsdXJlQ291bnQ6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUVuZFBvaW50OiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJ0Y1N0YXRpc3RpY3M6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TWVkaWFTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT47XG5cbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uVGVsZW1ldHJ5OiBTZXNzaW9uVGVsZW1ldHJ5O1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXI6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgb3B0aW9ucz86IENoYW5uZWxPcHRpb25zKSB7XG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbENvbnRleHRPcHRpb25zOiBDaGFubmVsQ29udGV4dE9wdGlvbnMgPSB7XG4gICAgICB0YXJnZXRMYWc6IG9wdGlvbnM/LnRhcmdldExhZyxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBvcHRpb25zPy5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rLFxuICAgICAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogb3B0aW9ucz8uZW5jb2RlZEF1ZGlvU3RyZWFtU2luayxcbiAgICAgIGhhc0luc2VydGFibGVTdHJlYW1zOiBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKVxuICAgIH07XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQgPSBuZXcgVG9rZW5Db250ZXh0KHRva2VuKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IG5ldyBDaGFubmVsQ29udGV4dChjaGFubmVsQ29udGV4dE9wdGlvbnMpO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IG5ldyBQZWVyQ29ubmVjdGlvbkNvbnRleHQoKTtcbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQgPSBuZXcgU3RhdGVDb250ZXh0KCk7XG4gICAgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmID0gbmV3IEV4cG9uZW50aWFsQmFja29mZigpO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3JlYWRPbmx5VmlkZW9FbGVtZW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxIVE1MVmlkZW9FbGVtZW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuKTtcbiAgICB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGF0ZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5T25saW5lID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUpO1xuICAgIHRoaXMuX3JlYWRPbmx5TG9hZGluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlQbGF5aW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YW5kYnkgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RvcHBlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUxhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdCk7XG4gICAgdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlFbmRQb2ludCA9IG5ldyBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50KTtcbiAgICB0aGlzLl9yZWFkT25seVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtKTtcbiAgICB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzKTtcbiAgICB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuICAgIHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkgPSBuZXcgU2Vzc2lvblRlbGVtZXRyeShTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5KTtcbiAgICB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIgPSB0aGlzLmhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkLmJpbmQodGhpcyk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnN1YnNjcmliZSh2aWRlb0VsZW1lbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS5zdWJzY3JpYmUoc3RyZWFtID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy52aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkgPSBuZXcgVmlkZW9UZWxlbWV0cnkodGhpcy5zdHJlYW1JZCwgU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodGhpcy52aWRlb0VsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh0aGlzLnZpZGVvRWxlbWVudCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5TdG9wcGVkKSB7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5yZXN0YXJ0QWZ0ZXJTdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIH0sIGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi5zdWJzY3JpYmUocmVzb2x1dGlvbiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSkge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5Lm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhyZXNvbHV0aW9uLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC5zdWJzY3JpYmUoYml0cmF0ZUxpbWl0ID0+IHtcbiAgICAgICAgaWYgKGJpdHJhdGVMaW1pdCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgYml0cmF0ZUxpbWl0LFxuICAgICAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgICAgICBCaXRyYXRlTW9kZS5Ob3JtYWxcbiAgICAgICAgICApXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZGVzdHJveVN0cmVhbU9uVW5tb3VudCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW1PblVubW91bnQodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCAnY2xpZW50OnRlcm1pbmF0aW9uLW9uLXdpbmRvdy11bmxvYWQnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHZpZGVvRWxlbWVudCgpOiBIVE1MVmlkZW9FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuICB9XG5cbiAgc2V0IHZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSA9IHZpZGVvRWxlbWVudDtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLnJlc29sdXRpb24udmFsdWUud2lkdGggIT09IHZpZGVvRWxlbWVudC52aWRlb1dpZHRoIHx8IHRoaXMucmVzb2x1dGlvbi52YWx1ZS5oZWlnaHQgIT09IHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gbmV3IERpbWVuc2lvbih2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCwgdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IERpbWVuc2lvbi5lbXB0eTtcbiAgICB9XG4gIH1cblxuICBnZXQgdG9rZW4oKTogRW5jb2RlZEVkZ2VUb2tlbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSA9IHRva2VuO1xuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSk7XG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3kgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSA9IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2luc2VydGFibGUtc3RyZWFtcycpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHBlZXJDb25uZWN0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhdGU7XG4gIH1cblxuICBnZXQgYXV0b011dGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkO1xuICB9XG5cbiAgZ2V0IGF1dG9QYXVzZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkO1xuICB9XG5cbiAgZ2V0IHRva2VuRXhwaXJpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nO1xuICB9XG5cbiAgZ2V0IGF1dGhvcml6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkO1xuICB9XG5cbiAgZ2V0IG9ubGluZSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU9ubGluZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TG9hZGluZztcbiAgfVxuXG4gIGdldCBwbGF5aW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGxheWluZztcbiAgfVxuXG4gIGdldCBzdGFuZGJ5KCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhbmRieTtcbiAgfVxuXG4gIGdldCBzdG9wcGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RvcHBlZDtcbiAgfVxuXG4gIGdldCB0YXJnZXRMYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnO1xuICB9XG5cbiAgZ2V0IGxhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMYWc7XG4gIH1cblxuICBnZXQgYml0cmF0ZUxpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHJlc29sdXRpb24oKTogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJlc29sdXRpb247XG4gIH1cblxuICBnZXQgZmFpbHVyZUNvdW50KCk6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQ7XG4gIH1cblxuICBnZXQgZW5kUG9pbnQoKTogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQ7XG4gIH1cblxuICBnZXQgc3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RyZWFtO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkO1xuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpY3MoKTogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcztcbiAgfVxuXG4gIGdldCBtZWRpYVN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHNldEJpdHJhdGVMaW1pdChiaXRyYXRlTGltaXQ6IEJpdHNQZXJTZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSBiaXRyYXRlTGltaXQ7XG4gIH1cblxuICBjbGVhckJpdHJhdGVMaW1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kID0gMDtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgQml0cmF0ZU1vZGUuUmVzZXRcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVUYXJnZXRMYWcobGFnOiBNaWxsaXNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZy52YWx1ZSA9IGxhZztcbiAgfVxuXG4gIGFzeW5jIHN0b3AocmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy5zdWJzY3JpYmUoaXNTdGFydGluZyA9PiB7XG4gICAgICAgIGlmICghaXNTdGFydGluZykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0b3AocmVhc29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKHJlYXNvbik7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICB9XG5cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBtdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdW5tdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9wKCdjbGllbnQ6Y2hhbm5lbC1kaXNwb3NlJykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXJpKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogVVJMIHtcbiAgICBjb25zdCB1cmwgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS51cmk7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZGlzY292ZXIgVVJJIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHN0YXJ0Jyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzU3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuOiBFbmNvZGVkRWRnZVRva2VuID0gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGhQYXJzZXIuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gSW5zZXJ0YWJsZVN0cmVhbXMudmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gSW5zZXJ0YWJsZVN0cmVhbXMudmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luaygndmlkZW8nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IEluc2VydGFibGVTdHJlYW1zLnZhbGlkYXRlRW5jb2RlZFN0cmVhbVNpbmsoJ2F1ZGlvJywgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICBjb25zdCBoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjayA9IHR5cGVvZiB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID09PSAnZnVuY3Rpb24nO1xuXG4gICAgICBpZiAoaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2sgJiYgIUZlYXR1cmVFbmFibGVtZW50LmlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdpbnNlcnRhYmxlLXN0cmVhbXMgZW5hYmxlZCwgYnV0IGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYSBTdHJlYW0gVHJhY2sgQVBJJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFzRW5jb2RlZFN0cmVhbVNpbmsgPSB0eXBlb2YgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJztcblxuICAgICAgaWYgKGhhc0VuY29kZWRTdHJlYW1TaW5rICYmICFGZWF0dXJlRW5hYmxlbWVudC5pc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ2luc2VydGFibGUtc3RyZWFtcyBlbmFibGVkLCBidXQgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcycpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjayAmJiBoYXNFbmNvZGVkU3RyZWFtU2luaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ2luc2VydGFibGUtc3RyZWFtcyBlbmFibGVkLCBidXQgZm91bmQgbXVsdGlwbGUgdHlwZXMgKE1lZGlhIFN0cmVhbSBUcmFjayBhbmQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKSBvZiBDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gY2FsbGJhY2sgZnVuY3Rpb25zJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCEoaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2sgfHwgaGFzRW5jb2RlZFN0cmVhbVNpbmspKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignaW5zZXJ0YWJsZS1zdHJlYW1zIGVuYWJsZWQsIGJ1dCBtaXNzaW5nIENyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbicpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhhc1N0cmVhbVRyYW5zZm9ybXNPclNpbmsgPSB0eXBlb2YgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJztcblxuICAgICAgaWYgKGhhc1N0cmVhbVRyYW5zZm9ybXNPclNpbmspIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKGBDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gY2FsbGJhY2sgZnVuY3Rpb24gZm91bmQsIGJ1dCBmZWF0dXJlIGlzIG5vdCBlbmFibGVkIHZpYSBpbnNlcnRhYmxlLXN0cmVhbXMgY2FwYWJpbGl0eWApO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6c3RhcnQnKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0VXJpKHRva2VuKTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gQ2hhbm5lbFN0YXRlLkVycm9yIHx8IHN0YXRlID09PSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZykge1xuICAgICAgICAgIERpc2NvdmVyeS5jbGVhckNhY2hlZENsb3Nlc3RFbmRwb2ludCh1cmkpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2s6ICgpID0+IFByb21pc2U8dm9pZD4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgICAgLy8gTmVlZCB0byBzZXQgaXNTdGFydGluZyB0byBmYWxzZSBhbmQgY2FsbCBoYW5kbGVTdHJlYW1GYWlsdXJlIGlmIHN0cmVhbSBtb25pdG9ycyBmb3VuZCBhbiBpc3N1ZVxuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0cmVhbVBsYXllciA9IFN0cmVhbUZhY3RvcnkuY3JlYXRlKHRva2VuLCB0aGlzLl9jaGFubmVsQ29udGV4dCwgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2spO1xuXG4gICAgaWYgKCFzdHJlYW1QbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtUGxheWVyLnN0YXJ0KFxuICAgICAgdXJpLFxuICAgICAgdG9rZW4sXG4gICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLFxuICAgICAgdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudC5iaW5kKHRoaXMpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLmZhaWwoKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUrKztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpjbGVhbnVwLWFmdGVyLWZhaWxlZC1zZXR1cCcpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IGNoYW5uZWwnLCBlKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZyB8fCAhU0RLLmF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgdGhpcy5nZXRSZXRyeUludGVydmFsKCkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN0YXJ0QWZ0ZXJTdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zdGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwbGF5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFtZWRpYVN0cmVhbSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJldHJ5SW50ZXJ2YWwoKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgICAgcmV0dXJuIHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgICAgLy8gRmlyc3QgYW5kIHNlY29uZCBhdHRlbXB0IGZhc3QsIGFmdGVyIHRoYXQgZXhwb25lbnRpYWwgd2l0aCBiYWNrb2ZmIGludGVydmFsXG4gICAgICAgIHJldHVybiB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU3RyZWFtRmFpbHVyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JldHJ5IHN0YXJ0IHdpdGggaW5pdGlhbCBzdGF0ZSBbJXNdIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSwgQ2hhbm5lbFN0YXRlW3RoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHVuYXV0aG9yaXplZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyByZXN0cmljdGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwbGF5aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGF1c2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIGludm9rZSBwbGF5KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gY29uZmlndXJhdGlvbiBlcnJvciwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbiA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZTtcblxuICAgIGlmIChwZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUuZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgcmVhc29uKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEZXN0cm95ZWQgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbScsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQgJiYgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNFbmNvZGVkU3RyZWFtU2luayA9IHR5cGVvZiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKCFoYXNFbmNvZGVkU3RyZWFtU2luaykge1xuICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuICAgIH1cblxuICAgIGNvbnN0IHBsYXlQcm9taXNlID0gdmlkZW9FbGVtZW50LnBsYXkoKTtcblxuICAgIGlmIChwbGF5UHJvbWlzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwbGF5UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgY29uc3QgaGFzQXVkaW9UcmFjayA9ICEhbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKHRyYWNrID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYWNrLmtpbmQgPT09ICdhdWRpbyc7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmID0gIVNESy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcblxuICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIHx8IHZpZGVvRWxlbWVudC5tdXRlZCB8fCAhaGFzQXVkaW9UcmFjaykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGF1c2VkIHZpZGVvIGFmdGVyIHBsYXkgZmFpbGVkLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQXVkaW9UcmFjaykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSBtdXRlZCB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZpZGVvRWxlbWVudC5wbGF5KClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBsYXllZCB2aWRlbyBhZnRlciBhdXRvIG11dGluZy4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkIHRvIHVubXV0ZS4nLCB0aGlzLnN0cmVhbUlkKTtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gQ2hhbm5lbFN0YXRlIHtcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nLFxuICBQYXVzZWQsXG4gIFBsYXlpbmcsXG4gIFJlY292ZXJpbmcsXG4gIFJlY29ubmVjdGluZyxcbiAgU3RhbmRCeSxcbiAgU3RvcHBlZCxcbiAgVW5hdXRob3JpemVkLFxuICBHZW9SZXN0cmljdGVkLFxuICBHZW9CbG9ja2VkLFxuICBVbnN1cHBvcnRlZEZlYXR1cmUsXG4gIENvbmZpZ3VyYXRpb25FcnJvcixcbiAgRXJyb3Jcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbFN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQ2hhbm5lbCwge0NoYW5uZWxPcHRpb25zfSBmcm9tICcuL0NoYW5uZWwnO1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm0sIElFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IHtNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG50eXBlIENyZWF0ZUNoYW5uZWxPcHRpb25zID0ge1xuICB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuO1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT47XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbHMge1xuICBzdGF0aWMgY3JlYXRlQ2hhbm5lbChvcHRpb25zOiBDcmVhdGVDaGFubmVsT3B0aW9ucyk6IENoYW5uZWwge1xuICAgIGlmICghU0RLLmluaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5uZWxPcHRpb25zOiBDaGFubmVsT3B0aW9ucyA9IHtcbiAgICAgIHRhcmdldExhZzogb3B0aW9ucy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRWaWRlb1N0cmVhbVNpbmssXG4gICAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBDaGFubmVsKG9wdGlvbnMudmlkZW9FbGVtZW50LCBvcHRpb25zLnRva2VuLCBjaGFubmVsT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbHMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtLCBTdWJzY3JpYmVTdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFQgPSBBdWRpb0RhdGEgfCBWaWRlb0ZyYW1lPiB7XG4gIChjaHVuazogVCwgY29udHJvbGxlcjogVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI8VD4pOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVuY29kZWRTdHJlYW1TaW5rPFQgPSBSVENFbmNvZGVkQXVkaW9GcmFtZSB8IFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB7XG4gIChjaHVuazogVCk6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPjtcbn1cblxuZXhwb3J0IHR5cGUgQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBudW1iZXI7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPjtcbiAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgc3RhdGU6IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgYXV0b011dGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRvUGF1c2VkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHBsYXlpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRhcmdldExhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGxhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGJpdHJhdGVMaW1pdDogU3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcmVzb2x1dGlvbjogU3ViamVjdDxEaW1lbnNpb24+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQ+O1xuICBzdHJlYW06IFN1YmplY3Q8SVN0cmVhbT47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPjtcbiAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENoYW5uZWxDb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucmVuZGVyZXJEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbEluaXRpYWxpemF0aW9uID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IG5ldyBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RhdGUgPSBuZXcgU3ViamVjdDxDaGFubmVsU3RhdGU+KENoYW5uZWxTdGF0ZS5TdGFydGluZyk7XG4gICAgdGhpcy5hdXRvTXV0ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRvUGF1c2VkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucGxheWluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMudGFyZ2V0TGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KG9wdGlvbnM/LnRhcmdldExhZyA/PyBkZWZhdWx0VGFyZ2V0TGFnKTtcbiAgICB0aGlzLmxhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPigwKTtcbiAgICB0aGlzLmJpdHJhdGVMaW1pdCA9IG5ldyBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+KDApO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG5ldyBTdWJqZWN0PERpbWVuc2lvbj4oRGltZW5zaW9uLmVtcHR5KTtcbiAgICB0aGlzLmZhaWx1cmVDb3VudCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgdGhpcy5lbmRQb2ludCA9IG5ldyBTdWJqZWN0PEVuZFBvaW50PihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPihudWxsKTtcbiAgICB0aGlzLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPSBvcHRpb25zPy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrO1xuICAgIHRoaXMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9IG9wdGlvbnM/LmVuY29kZWRWaWRlb1N0cmVhbVNpbms7XG4gICAgdGhpcy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID0gb3B0aW9ucz8uZW5jb2RlZEF1ZGlvU3RyZWFtU2luaztcbiAgICB0aGlzLmhhc0luc2VydGFibGVTdHJlYW1zID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oISFvcHRpb25zPy5oYXNJbnNlcnRhYmxlU3RyZWFtcyk7XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghc3RyZWFtKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW0uc3RyZWFtSWQ7XG4gIH1cblxuICBhcHBseVN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IHZvaWQge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgdGhpcy5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUrKztcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQudmFsdWUgJiYgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgfVxuICB9XG5cbiAgbWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhbmRCeTtcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkO1xuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uQ29udGV4dCB7XG4gIG1lZGlhU3RyZWFtOiBTdWJqZWN0PE1lZGlhU3RyZWFtPjtcbiAgcGVlckNvbm5lY3Rpb246IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubWVkaWFTdHJlYW0gPSBuZXcgU3ViamVjdDxNZWRpYVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvbiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRlQ29udGV4dCB7XG4gIGlzU3RhcnRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGlzRGlzcG9zZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pc1N0YXJ0aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuaXNEaXNwb3NlZCA9IGZhbHNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuQ29udGV4dCB7XG4gIHRva2VuOiBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+O1xuICB0b2tlbkV4cGlyaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKSB7XG4gICAgdGhpcy50b2tlbiA9IG5ldyBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+KHRva2VuKTtcbiAgICB0aGlzLnRva2VuRXhwaXJpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdERpc2NvdmVyeVVyaSA9ICdodHRwczovL3BjYXN0LnBoZW5peHJ0cy5jb20vcGNhc3QvZW5kUG9pbnRzJztcblxuZXhwb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVNb2RlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZU1vZGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSk6IEJpdHJhdGVNb2RlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlTW9kZSkge1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Ob3JtYWw6XG4gICAgICAgIHJldHVybiAnTm9ybWFsJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuRm9yY2U6XG4gICAgICAgIHJldHVybiAnRm9yY2UnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlTW9kZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVTdGF0ZSwgQml0cmF0ZVN0YXRlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZVN0YXRlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlKTogQml0cmF0ZVN0YXRlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlU3RhdGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLktlZXA6XG4gICAgICAgIHJldHVybiAnS2VlcCc7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlU3RhdGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IERpc2NvdmVyeVNlcnZpY2UgZnJvbSAnLi9EaXNjb3ZlcnlTZXJ2aWNlJztcblxuY29uc3QgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCA9IDYwMDAwO1xuXG5pbnRlcmZhY2UgSVBlclVSSUVuZHBvaW50IHsgW3g6IHN0cmluZ106IFByb21pc2U8RW5kUG9pbnQ+IH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBJUGVyVVJJRW5kcG9pbnQgPSB7fTtcblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaTogVVJMKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSkge1xuICAgICAgcmV0dXJuIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlTZXJ2aWNlID0gbmV3IERpc2NvdmVyeVNlcnZpY2UodXJpKTtcbiAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9IGRpc2NvdmVyeVNlcnZpY2UuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQoKTtcbiAgICBjb25zdCBpZ25vcmVkID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID09PSBjYWNoZWRWYWx1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgICAgIH1cbiAgICAgIH0sIGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwpO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FjaGVkVmFsdWU7XG4gIH1cblxuICBzdGF0aWMgY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQodXJpOiBVUkwpOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuXG5jb25zdCBkZWZhdWx0VGltZW91dCA9IDIwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0Rpc2NvdmVyeScpO1xuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX3VyaTogVVJMO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogVVJMKSB7XG4gICAgaWYgKCF1cmkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHVyaScpO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UodXJpLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKHVyaTogVVJMLCB0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPEVuZFBvaW50W10+IHtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHRpbWVvdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlzY292ZXJ5IHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5ib2R5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgd2l0aCBubyBkYXRhIFske3VybH1dYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNTdHJpbmcgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXNTdHJpbmcuc3BsaXQoJywnKTtcblxuICAgIHJldHVybiBlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IG5ldyBFbmRQb2ludChlbmRQb2ludCwgdGltZW91dCkpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQodGltZW91dDogbnVtYmVyID0gZGVmYXVsdFRpbWVvdXQpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gRGlzY292ZXJ5VXJpLmJ1aWxkRGlzY292ZXJ5VXJsKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXdhaXQgdGhpcy5kaXNjb3Zlck5lYXJieUVuZFBvaW50cyhuZXcgVVJMKHVybCksIHRpbWVvdXQpO1xuICAgIGxldCBmYWlsZWRSZXF1ZXN0cyA9IDA7XG4gICAgY29uc3QgcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoZmFpbGVkUmVxdWVzdHMgPj0gZW5kUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICByZWplY3QoYERpc2NvdmVyeSBvZiBbJHtlbmRQb2ludHMubGVuZ3RofV0gZW5kcG9pbnRzIGZyb20gWyR7dXJsfV0gZmFpbGVkLCBwcmV2ZW50aW5nIGl0IGZyb20gY29tcGxldGluZ2ApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGVuZFBvaW50ID0gYXdhaXQgUHJvbWlzZS5yYWNlKGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gZW5kUG9pbnRcbiAgICAgIC5waW5nKClcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBwaW5nIGVuZCBwb2ludCBbJXNdJywgZW5kUG9pbnQsIGUpO1xuXG4gICAgICAgIGZhaWxlZFJlcXVlc3RzKys7XG5cbiAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4odGltZSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyZWQgZW5kIHBvaW50IFslc10gd2l0aCB0aW1lIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpLCB0aW1lKTtcbiAgICAgICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgICAgICBydW50aW1lOiAobm93IC0gU0RLLnBhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lIHx8IDB9LFxuICAgICAgICAgIHJlc291cmNlOiBlbmRQb2ludC50b1N0cmluZygpLFxuICAgICAgICAgIGtpbmQ6ICdwaW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQ7XG4gICAgICB9KSkpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX0gZnJvbSAnLi4vZGVmYXVsdHMnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5VXJpIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Rpc2NvdmVyeVVyaTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPihkZWZhdWx0RGlzY292ZXJ5VXJpKTtcblxuICBzdGF0aWMgZ2V0IHVyaSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnlVcmkuX2Rpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZERpc2NvdmVyeVVybCh1cmk6IFVSTCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh1cmkudG9TdHJpbmcoKSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG4gICAgY29uc3QgaW50ZW50aW9ucyA9IFBhcmFtZXRlcnMuZGlzY292ZXJ5UGFyYW1ldGVycy5pbnRlbnRpb25zO1xuXG4gICAgdXJsLnNlYXJjaCA9IGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFtbJ3ZlcnNpb24nLCBzZGtWZXJzaW9uXSwgWydpbnRlbnRpb25zJywgaW50ZW50aW9uc10sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lID09PSAnLycpIHtcbiAgICAgIHVybC5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5VXJpIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5pbXBvcnQge1xuICBJU3Vic2NyaWJlUmVzcG9uc2UsXG4gIElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdFxufSBmcm9tICcuLi9hcGkvU3Vic2NyaWJlJztcbmltcG9ydCB7SVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCwgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9TZXRSZW1vdGVEZXNjcmlwdGlvbic7XG5pbXBvcnQge0lEZXN0cm95U3RyZWFtUmVxdWVzdCwgSURlc3Ryb3lTdHJlYW1SZXNwb25zZX0gZnJvbSAnLi4vYXBpL0Rlc3Ryb3lTdHJlYW0nO1xuaW1wb3J0IHtJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QsIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9BZGRJY2VDYW5kaWRhdGVzJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBQYXJhbWV0ZXJzIGZyb20gJy4uLy4uL2Vudmlyb25tZW50L1BhcmFtZXRlcnMnO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlLCBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgQml0cmF0ZU1vZGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZU1vZGVNYXBwaW5nJztcbmltcG9ydCBCaXRyYXRlU3RhdGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZVN0YXRlTWFwcGluZyc7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQge1xuICBJUHVibGlzaFJlc3BvbnNlLFxuICBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QsXG4gIElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCxcbiAgUHVibGlzaFN0YXR1c1xufSBmcm9tICcuLi9hcGkvUHVibGlzaCc7XG5cbmNvbnN0IGFwaVZlcnNpb24gPSA3O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpYmVTdGF0dXMgPSAnb2snIHwgJ25vLXN0cmVhbScgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFJlbW92ZVRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgRGVzdHJveVN0cmVhbVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW0ge1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpYmVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge1xuICBzdGF0dXM6IFB1Ymxpc2hTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufTtcblxuaW50ZXJmYWNlIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXM7XG4gIHNlc3Npb25EZXNjcmlwdGlvbj86IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmludGVyZmFjZSBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cztcbiAgb3B0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cztcbn1cblxuaW50ZXJmYWNlIElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRQb2ludCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFbmRQb2ludCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cmk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF9yb3VuZFRyaXBUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodXJpOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcikge1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICB0aGlzLl90aW1lb3V0ID0gdGltZW91dDtcblxuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmQgcG9pbnQgcmVxdWlyZXMgYSB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBFbmRQb2ludFt1cmk9JHt0aGlzLl91cml9XWA7XG4gIH1cblxuICBhc3luYyBwaW5nKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFBpbmdVcmwoKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYFBpbmcgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aGlzLl90aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdzdWJzY3JpYmUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgU3Vic2NyaWJlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc3Vic2NyaWJlIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHB1Ymxpc2gobmFtZTogc3RyaW5nLCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJUHVibGlzaFJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAncHVibGlzaCddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIGFwaVZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRob3V0T2ZmZXIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIG5ldyBFcnJvcihgUHVibGlzaCB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogUHVibGlzaFN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBwdWJsaXNoIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbTogSVN0cmVhbSwgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc2NyaXB0aW9uJywgJ3JlbW90ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZTogc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgIHNkcDogc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBuZXcgRXJyb3IoYFNldCByZW1vdGUgZGVzY3JpcHRpb24gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBsaW1pdEJpdHJhdGUoXG4gICAgc3RyZWFtOiBJU3RyZWFtLFxuICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyLFxuICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IEJpdHNQZXJTZWNvbmQsXG4gICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUsXG4gICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlLFxuICApOiBQcm9taXNlPElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnYml0cmF0ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZU1hcHBpbmcuY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGUpLFxuICAgICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZSlcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIG5ldyBFcnJvcihgU2V0IGxpbWl0IGJpdHJhdGUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IHNldCBsaW1pdCBiaXRyYXRlIHJlc3BvbnNlIFslc10gaW4gWyVzXSBtcycsIHN0YXR1cywgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4ge3N0YXR1c307XG4gIH1cblxuICBhc3luYyBhZGRJY2VDYW5kaWRhdGVzKHN0cmVhbTogSVN0cmVhbSwgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10sIGRpc2NvdmVyeUNvbXBsZXRlZDogYm9vbGVhbiwgb3B0aW9uczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2ljZScsICdjYW5kaWRhdGVzJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgY2FuZGlkYXRlcyxcbiAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBuZXcgRXJyb3IoYEFkZCBpY2UgY2FuZGlkYXRlcyB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGFkZCBJQ0UgY2FuZGlkYXRlcyByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW0oc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgRGVsZXRlIHN0cmVhbSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHN0cmVhbScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBkZXN0cm95IHN0cmVhbSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBkZXN0cm95U3RyZWFtUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW1PblVubW91bnQoc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghbmF2aWdhdG9yPy5zZW5kQmVhY29uKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5kZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVhc29uKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgbmF2aWdhdG9yLnNlbmRCZWFjb24odXJsLCBmb3JtRGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVXJsKHBhdGg6IHN0cmluZ1tdKTogVVJMIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgcGF0aEFzQXJyYXkgPSB1cmkucGF0aG5hbWUuc3BsaXQoJy8nKTtcblxuICAgIHBhdGhBc0FycmF5Lmxlbmd0aCA9IHBhdGhBc0FycmF5Lmxlbmd0aCAtIDE7XG5cbiAgICB1cmkucGF0aG5hbWUgPSBwYXRoQXNBcnJheS5jb25jYXQoLi4ucGF0aCkuam9pbignLycpO1xuXG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQaW5nVXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVyaS5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd0eXBlJywgJ2h0dHAnXSwgWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnaW50ZW50aW9ucycsIGludGVudGlvbnNdLCBbJ18nLCBgJHtEYXRlLm5vdygpfWBdXSkudG9TdHJpbmcoKX1gO1xuXG4gICAgcmV0dXJuIHVyaS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFB1Ymxpc2hTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTdWJzY3JpYmVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IERlc3Ryb3lTdHJlYW1TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU3Vic2NyaWJlUmVzcG9uc2U7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2U6IElTdWJzY3JpYmVSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLmxhZyA9IGRhdGEubGFnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElQdWJsaXNoUmVzcG9uc2U7XG4gICAgY29uc3QgcHVibGlzaFJlc3BvbnNlOiBJUHVibGlzaFJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHB1Ymxpc2hSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwdWJsaXNoUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IHtpY2VTZXJ2ZXJzOiBbXX07XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9IGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycykge1xuICAgICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgICB1cmxzOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJscyxcbiAgICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kgPSBjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kgPSBjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3k7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ0Y0NvbmZpZ3VyYXRpb247XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlOiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24gPSBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlOiBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEub3B0aW9ucykge1xuICAgICAgICBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2Uub3B0aW9ucyA9IGRhdGEub3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSURlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtOiBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2hhbm5lbFN0YXRlfSBmcm9tICcuLi9jaGFubmVscyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENodW5rZWRTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NodW5rZWRTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb25pdG9yRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfc3RyZWFtU3RhdGlzdGljczogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIHByaXZhdGUgX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcyk7XG4gIH1cblxuICBzdGFydCh1cmk6IFVSTCwgdG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZCB8IElEaXNwb3NhYmxlPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSlcbiAgICAgIC50aGVuKGVuZFBvaW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIG51bGwsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZmVyU2RwID0gY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHA7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgb3JpZ2luU3RhcnRUaW1lOiBEYXRlLm5vdygpIC0gbGFnICsgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDIsXG4gICAgICAgICAgbGFnXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIExpdmVTdHJlYW1pbmcuc3RhcnQodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgb2ZmZXJTZHAsIG9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4ocGxheWVyID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGxheWVyO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdMaXZlU3RyZWFtaW5nIGZhaWxlZCcsIGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb25pdG9yKHBsYXllcjogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0cmVhbVN0YXRpc3RpY3MgPSBMaXZlU3RyZWFtaW5nLmdldFN0YXRzKCk7XG5cbiAgICAgIGlmICh0aGlzLl9zdHJlYW1TdGF0aXN0aWNzICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQrKztcblxuICAgICAgICBpZiAodGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA+IDYpIHtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICBwbGF5ZXIuZGlzcG9zZSgpO1xuICAgICAgICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcyA9IG5ld1N0cmVhbVN0YXRpc3RpY3M7XG4gICAgICB0aGlzLm1vbml0b3IocGxheWVyKTtcbiAgICB9LCAxMDAwKTtcblxuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtJSGxzUGxheWVyVHlwZX0gZnJvbSAnLi9JSGxzUGxheWVyJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGxzUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElIbHNQbGF5ZXJUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKExpdmVTdHJlYW1pbmcuaGxzUGxheWVyKSB7XG4gICAgICBpZiAoTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIoe1xuICAgICAgICAgIGVuYWJsZVdvcmtlcjogdHJ1ZSxcbiAgICAgICAgICBtYXhCdWZmZXJMZW5ndGg6IDEsXG4gICAgICAgICAgbGl2ZUJhY2tCdWZmZXJMZW5ndGg6IDAsXG4gICAgICAgICAgbGl2ZVN5bmNEdXJhdGlvbjogNyxcbiAgICAgICAgICBsaXZlRHVyYXRpb25JbmZpbml0eTogdHJ1ZSxcbiAgICAgICAgICBsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uOiBJbmZpbml0eSxcbiAgICAgICAgICBoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2Q6IDFcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5sb2FkU291cmNlKHRoaXMuX21hbmlmZXN0VVJJKTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmF0dGFjaE1lZGlhKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5jYW5QbGF5VHlwZSgnYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwnKSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQuc3JjID0gdGhpcy5fbWFuaWZlc3RVUkk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIExpdmVTdHJlYW1pbmcuaGxzUGxheWVyICYmIExpdmVTdHJlYW1pbmcuaGxzUGxheWVyLmlzU3VwcG9ydGVkKCk7XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICB3aWR0aDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldFdpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0SGVpZ2h0LFxuICAgICAgY3VycmVudFRpbWU6IHRoaXMuX3BsYXllci5tZWRpYS5jdXJyZW50VGltZSxcbiAgICAgIGxhZzogMC4wLFxuICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlLFxuICAgICAgZGF0YUJ1ZmZlcmVkOiAwLjBcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnSURMRScpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRVJST1InIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRU5ERUQnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ0xPQURJTkcnKSB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnV0FJVElORycpKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ10gfHwgMDtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgKGN1cnJlbnRUaW1lICsgKHRoaXMuX29wdGlvbnMubGFnIC8gMTAwMCkpIC0gdHJ1ZUN1cnJlbnRUaW1lKTtcblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyICYmIHRoaXMuX3BsYXllci5kZXN0cm95KSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm0sIElFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluc2VydGFibGVTdHJlYW1zIHtcbiAgc3RhdGljIHNldHVwRW5jb2RlZFN0cmVhbVNpbmsoc3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rLCB0cmFjazogTWVkaWFTdHJlYW1UcmFjaywgcmVjZWl2ZXI6IFJUQ1J0cFJlY2VpdmVyKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGZyYW1lID0+IHN0cmVhbVNpbmsoZnJhbWUpfSk7XG4gICAgY29uc3QgcmVjZWl2ZXJTdHJlYW1zID0gcmVjZWl2ZXIuY3JlYXRlRW5jb2RlZFN0cmVhbXMoKTtcbiAgICBjb25zdCBzb3VyY2UgPSByZWNlaXZlclN0cmVhbXMucmVhZGFibGU7XG4gICAgY29uc3Qgc2luayA9IHJlY2VpdmVyU3RyZWFtcy53cml0YWJsZTtcblxuICAgIHNvdXJjZVxuICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgLnBpcGVUbyhzaW5rKTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rKG1vZGU6ICdhdWRpbycgfCAndmlkZW8nLCBpdGVtOiBJRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBFbmNvZGVkIFN0cmVhbSBTaW5rIGZ1bmN0aW9uIHR5cGUuIEZvdW5kIFske3R5cGVvZiBpdGVtfV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpdGVtLmxlbmd0aCAhPT0gMSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IEVuY29kZWQgU3RyZWFtIFNpbmsgZnVuY3Rpb24gcGFyYW1ldGVyIGxlbmd0aC4gRXhwZWN0ZWQgMS4gRm91bmQgWyR7aXRlbS5sZW5ndGh9XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgdmFsaWRhdGlvblJlc3VsdDogJ29rJ1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgc2V0dXBNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKHRyYW5zZm9ybTogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+LCBzdHJlYW06IE1lZGlhU3RyZWFtKSB7XG4gICAgY29uc3QgdmlkZW9UcmFjayA9IHN0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdO1xuXG4gICAgaWYgKHZpZGVvVHJhY2spIHtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtfSk7XG4gICAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3Nvcih7dHJhY2s6IHZpZGVvVHJhY2t9KTtcbiAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yKHtraW5kOiAndmlkZW8nfSk7XG4gICAgICBjb25zdCBzb3VyY2UgPSBwcm9jZXNzb3IucmVhZGFibGU7XG4gICAgICBjb25zdCBzaW5rID0gZ2VuZXJhdG9yLndyaXRhYmxlO1xuXG4gICAgICBzb3VyY2VcbiAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZFN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuXG4gICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgc3RyZWFtLmdldEF1ZGlvVHJhY2tzKCkuZm9yRWFjaChhdWRpb1RyYWNrID0+IHtcbiAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2soYXVkaW9UcmFjayk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkU3RyZWFtO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKGl0ZW06IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPikge1xuICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCB2aWRlbyBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGZ1bmN0aW9uIHR5cGUuIEZvdW5kIFske3R5cGVvZiBpdGVtfV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpdGVtLmxlbmd0aCAhPT0gMikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCB2aWRlbyBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGZ1bmN0aW9uIHBhcmFtZXRlciBsZW5ndGguIEV4cGVjdGVkIDEuIEZvdW5kIFske2l0ZW0ubGVuZ3RofV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6ICdvaydcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnNlcnRhYmxlU3RyZWFtcyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgV2ViUGxheWVyIGZyb20gJy4vV2ViUGxheWVyJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBTaGFrYVBsYXllciBmcm9tICcuL1NoYWthUGxheWVyJztcbmltcG9ydCBIbHNQbGF5ZXIgZnJvbSAnLi9IbHNQbGF5ZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3MsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBMaXZlU3RyZWFtaW5nIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BlbmRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc1BsYXllcjogSGxzUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BoZW5peFdlYlBsYXllcjogV2ViUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthOiBTaGFrYVR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBzdGF0aWMgX3BsYXllcjogU2hha2FQbGF5ZXIgfCBXZWJQbGF5ZXIgfCBIbHNQbGF5ZXI7XG5cbiAgc3RhdGljIGdldCBobHNQbGF5ZXIoKTogSGxzUGxheWVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc1BsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGhlbml4V2ViUGxheWVyKCk6IFdlYlBsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9waGVuaXhXZWJQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthKCk6IFNoYWthVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHN0YXJ0KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZywgb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnMpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyIHx8IHRoaXMuX3NoYWthIHx8IHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBsYXllciBpcyBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICghU0RLLndlYlBsYXllckxvYWRlciAmJiAhU0RLLnNoYWthUGxheWVyTG9hZGVyICYmICFTREsuaGxzSnNMb2FkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQtZmVhdHVyZSwgYWRkIHN0cmVhbSBwbGF5ZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsuaGxzSnNMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9obHNQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy53ZWJQbGF5ZXJMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9waGVuaXhXZWJQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLnNoYWthUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fc2hha2EgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllci5nZXRTdGF0cygpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGxheShQbGF5ZXI6IHR5cGVvZiBXZWJQbGF5ZXIgfCB0eXBlb2YgU2hha2FQbGF5ZXIgfCB0eXBlb2YgSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKTogSURpc3Bvc2FibGUge1xuICAgIGNvbnN0IGRhc2hNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW1wZFxcPz9bXlxcc10qKS9tKTtcbiAgICBjb25zdCBobHNNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW0zdThcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgbWFuaWZlc3RVcmwgPSBkYXNoTWFuaWZlc3RVcmxNYXRjaCAmJiBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA/IGRhc2hNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG4gICAgY29uc3QgcGxheWxpc3RVcmwgPSBobHNNYW5pZmVzdFVybE1hdGNoICYmIGhsc01hbmlmZXN0VXJsTWF0Y2hbMV0gPyBobHNNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG5cbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzIHx8ICh0aGlzLl9obHNQbGF5ZXIgJiYgdGhpcy5faGxzUGxheWVyLmlzU3VwcG9ydGVkKCkpKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2hscycsIHN0cmVhbUlkLCBwbGF5bGlzdFVybCwgb3B0aW9ucyk7XG5cbiAgICAgIHRoaXMuX3BsYXllci5zdGFydCgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG5ldyBQbGF5ZXIodmlkZW9FbGVtZW50LCAnZGFzaCcsIHN0cmVhbUlkLCBtYW5pZmVzdFVybCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgIHJldHVybiB0aGlzLl9wbGF5ZXI7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBsb2FkZWQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nKTogSURpc3Bvc2FibGUge1xuICAgIGlmICghdGhpcy5fc2hha2EgJiYgIXRoaXMuX3BoZW5peFdlYlBsYXllciAmJiAhdGhpcy5faGxzUGxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShIbHNQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGhlbml4V2ViUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KFdlYlBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaGFrYSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShTaGFrYVBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZW51bSBOZXR3b3JrU3RhdGVzIHtcbiAgTmV0d29ya0VtcHR5LFxuICBOZXR3b3JrSWRsZSxcbiAgTmV0d29ya0xvYWRpbmcsXG4gIE5ldHdvcmtOb1NvdXJjZVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciBmcm9tICcuLi8uLi9kb20vR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXInO1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IHtTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBSdGNDb25uZWN0aW9uTW9uaXRvciBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi8uLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgZnJvbSAnLi4vLi4vcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyJztcbmltcG9ydCBQZWVyQ29ubmVjdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQnO1xuaW1wb3J0IEluc2VydGFibGVTdHJlYW1zIGZyb20gJy4vSW5zZXJ0YWJsZVN0cmVhbXMnO1xuXG5jb25zdCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCA9IDEwMDtcbmNvbnN0IGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQgPSAzMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhbFRpbWVTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1JlYWxUaW1lU3RyZWFtJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgY29uc3RydWN0b3IoY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gY2hhbm5lbENvbnRleHQ7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gcGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICAgIHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUgPSBoYW5kbGVTdHJlYW1GYWlsdXJlO1xuICB9XG5cbiAgc3RhcnQodXJpLCB0b2tlbiwgbGlzdGVuT25TdHJlYW1TZXR1cCwgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgPSB0eXBlb2YgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoJ3JlY3Zvbmx5JywgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKVxuICAgICAgICAudGhlbigoe2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvY2FsT2ZmZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvblxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgXSlcbiAgICAgIC50aGVuKChbZW5kUG9pbnQsIHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn1dKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0xvY2FsIG9mZmVyOlxcbicgKyBsb2NhbE9mZmVyLnNkcCk7XG5cbiAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBpZiAoU0RLLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgJiYgIShGZWF0dXJlRW5hYmxlbWVudC5pc01vYmlsZSAmJiBTREsuc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKSkge1xuICAgICAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICBsb2NhbE9mZmVyID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIGxvY2FsT2ZmZXIsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgcnRjQ29uZmlndXJhdGlvbiwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlSdGNDb25maWd1cmF0aW9uKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSwgcnRjQ29uZmlndXJhdGlvbilcbiAgICAgICAgICAudGhlbihwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgICAgICBsZXQgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQ7XG4gICAgICAgICAgICBsZXQgY2FuY2VsRGlzY292ZXJ5ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZGlzY292ZXJ5Q29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIVNESy5zZW5kTG9jYWxDYW5kaWRhdGVzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGUuY2FuZGlkYXRlICYmIGUuY2FuZGlkYXRlLmNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChlLmNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlzY292ZXJ5Q29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRDYW5kaWRhdGVzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5hZGRJY2VDYW5kaWRhdGVzKHN0cmVhbSwgY2FuZGlkYXRlcywgZGlzY292ZXJ5Q29tcGxldGVkKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoe3N0YXR1cywgb3B0aW9uc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVzKCdjYW5jZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBBZGRlZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdIGFuZCBvcHRpb25zIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2Ugc3RvcCBub3JtYWxseSB0aGUgcGVlciBjb25uZWN0aW9uIGlzIHVucmVnaXN0ZXJlZCBmaXJzdC5cbiAgICAgICAgICAgICAgICAvLyBUaHVzIGFueXRpbWUgd2Ugc2VlIGEgY2xvc2VkIHBlZXIgY29ubmVjdGlvbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpdCBpcyBhbiBlcnJvci5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgJ1slc10gRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlIGFmdGVyIHBlZXIgY29ubmVjdGlvbiBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHN3aXRjaCAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2hlY2tpbmcnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICduZXcnOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZGlzY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICAgICAgICAgICAgaWYgKG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCB0cnlpbmcgdG8gcmVjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAnY2xvc2VkJzpcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgcmV0cnlpbmcgdG8gY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuXG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub250cmFjayA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgc3RyZWFtID0gZS5zdHJlYW1zWzBdO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoZS50cmFjay5raW5kID09PSAndmlkZW8nICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgSW5zZXJ0YWJsZVN0cmVhbXMuc2V0dXBFbmNvZGVkU3RyZWFtU2luayh0aGlzLl9jaGFubmVsQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rLCBlLnRyYWNrLCBlLnJlY2VpdmVyKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS50cmFjay5raW5kID09PSAnYXVkaW8nICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgSW5zZXJ0YWJsZVN0cmVhbXMuc2V0dXBFbmNvZGVkU3RyZWFtU2luayh0aGlzLl9jaGFubmVsQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rLCBlLnRyYWNrLCBlLnJlY2VpdmVyKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBJbnNlcnRhYmxlU3RyZWFtcy5zZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaywgc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3IgPSBuZXcgUnRjQ29ubmVjdGlvbk1vbml0b3IocGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gNCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gVmlkZW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgodmlkZW9UcmFja0ZhaWxlZCB8fCBhdWRpb1RyYWNrRmFpbGVkKSAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmICghU0RLLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICBjb25zdCBpc0NsaWVudE9mZmVyRmxvdyA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uPy50eXBlID09PSAnb2ZmZXInO1xuXG4gICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIWlzQ2xpZW50T2ZmZXJGbG93XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVjb25uZWN0aW5nIHBlZXIgY29ubmVjdGlvbiBieSByZXN0YXJ0aW5nIElDRScpO1xuXG4gICAgICBjb25zdCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihjdXJyZW50TG9jYWxEZXNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG50eXBlIFNoYWthT3B0aW9ucyA9IHtcbiAgYWJyOiB7XG4gICAgZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiBudW1iZXI7XG4gIH07XG4gIG1hbmlmZXN0OiB7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgc3RyZWFtaW5nOiB7XG4gICAgcmVidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyaW5nR29hbDogbnVtYmVyO1xuICAgIGJ1ZmZlckJlaGluZDogbnVtYmVyO1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgICAgbWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgICAgIGJhY2tvZmZGYWN0b3I6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJU2hha2Ege1xuICBjb25maWd1cmU6IChvOiBTaGFrYU9wdGlvbnMpID0+IHZvaWQ7XG4gIGxvYWQ6ICh1cmk6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgZ2V0U3RhdHM6ICgpID0+IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzO1xuICBkZXN0cm95OiAoKSA9PiB2b2lkO1xuICB1bmxvYWQ6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYWthUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NoYWthUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJU2hha2E7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoTGl2ZVN0cmVhbWluZy5zaGFrYSkge1xuICAgICAgY29uc3QgcGxheWVyT3B0aW9uczogU2hha2FPcHRpb25zID0ge1xuICAgICAgICBhYnI6IHtkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGU6IDIwMDAwMDB9LFxuICAgICAgICBtYW5pZmVzdDoge3JldHJ5UGFyYW1ldGVyczoge3RpbWVvdXQ6IDEwMDAwfX0sXG4gICAgICAgIHN0cmVhbWluZzoge1xuICAgICAgICAgIHJlYnVmZmVyaW5nR29hbDogMixcbiAgICAgICAgICBidWZmZXJpbmdHb2FsOiAxMCxcbiAgICAgICAgICBidWZmZXJCZWhpbmQ6IDMwLFxuICAgICAgICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgICAgICBtYXhBdHRlbXB0czogMTAsXG4gICAgICAgICAgICBiYWNrb2ZmRmFjdG9yOiAxLjFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBMaXZlU3RyZWFtaW5nLnNoYWthLlBsYXllcih0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgdGhpcy5sb2FkUGxheWVyKHBsYXllck9wdGlvbnMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgICAgbGFnOiAwLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICAuLi50aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKSxcbiAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgbGFnOiAwXG4gICAgfTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXSB8fCAwO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcbiAgICBjb25zdCBsYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICAgIHN0YXRpc3RpY3MubGFnID0gbGFnO1xuXG4gICAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MucGxheVRpbWUgPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIudW5sb2FkKCk7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGxvYWRQbGF5ZXIocGxheWVyQ29uZmlnOiBTaGFrYU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuY29uZmlndXJlKHBsYXllckNvbmZpZyk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGxheWVyLmxvYWQodGhpcy5fbWFuaWZlc3RVUkkpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gREFTSCBsaXZlIHN0cmVhbSBoYXMgYmVlbiBsb2FkZWQnLCB0aGlzLl9zdHJlYW1JZCk7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQucGxheSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQucGxheSgpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEVycm9yIHdoaWxlIGxvYWRpbmcgREFTSCBsaXZlIHN0cmVhbSBbJXNdJywgdGhpcy5fc3RyZWFtSWQsIGUuY29kZSwgZSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQgQ2h1bmtlZFN0cmVhbSBmcm9tICcuL0NodW5rZWRTdHJlYW0nO1xuaW1wb3J0IFJlYWxUaW1lU3RyZWFtIGZyb20gJy4vUmVhbFRpbWVTdHJlYW0nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtaW5nJyk7XG5cbiAgc3RhdGljIGNyZWF0ZSh0b2tlbjogc3RyaW5nLCBjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogSVN0cmVhbSB7XG4gICAgY29uc3QgdG9rZW5DYXBhYmlsaXRpZXMgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS5jYXBhYmlsaXRpZXM7XG5cbiAgICBpZiAodG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3J0bXAnKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdTREsgZG9lcyBub3Qgc3VwcG9ydCBSVE1QIHBsYXliYWNrLicpO1xuICAgICAgY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRva2VuQ2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdzdHJlYW1pbmcnKSkge1xuICAgICAgcmV0dXJuIG5ldyBDaHVua2VkU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlYWxUaW1lU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJlYW1GYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ30gZnJvbSAnLi9MaXZlU3RyZWFtaW5nJztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ09wdGlvbnMsIExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuY29uc3QgYmFuZHdpZHRoVG9TdGFydEF0ID0gMzAwMDAwMDsgLy8gQ29ycmVzcG9uZHMgdG8gNzIwcCBpbiBtb3N0IHNldHVwc1xuY29uc3QgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgPSAxNTAwMDtcblxudHlwZSBFdmVudExpc3RlbmVyRm9yV2ViUGxheWVyID0gKGV2dDogV2ViUGxheWVyRXZlbnQpID0+IHZvaWQ7XG50eXBlIFdlYlBsYXllckV2ZW50ID0ge1xuICBjb2RlOiBudW1iZXI7XG4gIHNldmVyaXR5OiBudW1iZXI7XG4gIGVycm9yOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElXZWJQbGF5ZXIge1xuICBzdGFydDogKHVybDogc3RyaW5nKSA9PiB2b2lkO1xuICBhZGRFdmVudExpc3RlbmVyKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIpOiB2b2lkO1xuICBkaXNwb3NlKCk6IHZvaWQ7XG4gIGVycm9yczoge1xuICAgIHNldmVyaXR5OiB7XG4gICAgICBSRUNPVkVSQUJMRTogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignV2ViUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJV2ViUGxheWVyO1xuICBwcml2YXRlIF9sYXN0UmVsb2FkVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKExpdmVTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zID0ge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBiYW5kd2lkdGhUb1N0YXJ0QXRcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5XZWJQbGF5ZXIodGhpcy5fbG9nZ2VyLCB0aGlzLl92aWRlb0VsZW1lbnQsIHBsYXllck9wdGlvbnMpO1xuICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KHRoaXMuX21hbmlmZXN0VVJJKTtcblxuICAgICAgdGhpcy5fcGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JPYmplY3QgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5SZWxvYWQoKSAmJiBlcnJvck9iamVjdCAmJiAoZXJyb3JPYmplY3QuY29kZSA9PT0gMyB8fCBlcnJvck9iamVjdC5zZXZlcml0eSA9PT0gTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuZXJyb3JzLnNldmVyaXR5LlJFQ09WRVJBQkxFKSkge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSBhZnRlciBlcnJvciBldmVudCBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgICAgIHRoaXMucmVsb2FkSWZBYmxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZWxvYWQgd2l0aCBlcnJvciBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIgJiYgTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuaXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlLFxuICAgICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0gdGhpcy5fcGxheWVyLmdldFN0YXRzKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lIHx8IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXTtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5pc05hdGl2ZSAmJiBzdGF0aXN0aWNzLmRlbGl2ZXJ5VHlwZSA9PT0gJ0hscycpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSAtIHN0YXRpc3RpY3MubGFnO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5jdXJyZW50VGltZSkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5pc05hdGl2ZSkge1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5SZWxvYWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQgPSAhdGhpcy5fbGFzdFJlbG9hZFRpbWUgfHwgRGF0ZS5ub3coKSAtIHRoaXMuX2xhc3RSZWxvYWRUaW1lID4gbWluVGltZUJlZm9yZU5leHRSZWxvYWQ7XG5cbiAgICByZXR1cm4gdGhpcy5fdmlkZW9FbGVtZW50ICYmIHRoaXMuX3BsYXllciAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoICE9PSAwICYmIGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWRJZkFibGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbG9hZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gdGhhdCB3YXMgYWN0aXZlIGZvciBhdCBsZWFzdCBbJXNdIHNlY29uZHMnLCB0aGlzLl9zdHJlYW1JZCwgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgLyAxMDAwKTtcblxuICAgIHRoaXMuX2xhc3RSZWxvYWRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX0JVSUxEX1ZFUlNJT05fXzogc3RyaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJzaW9uTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIF9kZWZhdWx0VmVyc2lvbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICBzdGF0aWMgZ2V0IHNka1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF9fQlVJTERfVkVSU0lPTl9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmVyc2lvbjtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlTZXJ2aWNlIGZyb20gJy4vVGVsZW1ldHJ5U2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4uL2xvZ2dlci9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkO1xuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UgPSBuZXcgVGVsZW1ldHJ5U2VydmljZSh0ZWxlbWV0cnlDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlLnB1c2gobG9nTGV2ZWwsIG1lc3NhZ2UsIGNhdGVnb3J5LCBkYXRlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGVsZW1ldHJ5VXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgdGVsZW1ldHJ5VXJsLnBhdGhuYW1lID0gdGVsZW1ldHJ5VXJsLnBhdGhuYW1lICsgJy9sb2dzJztcblxuICAgIHRoaXMuX3VybCA9IHRlbGVtZXRyeVVybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgcHJpdmF0ZSBfbG9nczogQXJyYXk8SUxvZ0l0ZW0+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIHRpbWVzdGFtcDogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluXG4gICAgfTtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgdGhpcy5fbG9ncy5wdXNoKGxvZ1JlY29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvZ3MudW5zaGlmdChsb2dSZWNvcmQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzKGxvZ01lc3NhZ2VzOiBBcnJheTxJTG9nSXRlbT4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IGxvZ01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2xvZ3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG51bWJlck9mTG9nc1RvU2VuZCA9IDA7XG4gICAgbGV0IHNpemVPZkxvZ3NUb1NlbmQgPSAwO1xuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGdldExvZ1NpemUgPSAobG9nOiBJTG9nSXRlbSk6IG51bWJlciA9PiBPYmplY3QudmFsdWVzKGxvZylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0gPyBpdGVtLmxlbmd0aCA6IDApLCAwKTtcblxuICAgIHdoaWxlICh0aGlzLl9sb2dzLmxlbmd0aCA+IG51bWJlck9mTG9nc1RvU2VuZCAmJiBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyBzaXplT2ZMb2dzVG9TZW5kIDwgcmVxdWVzdFNpemVMaW1pdCkge1xuICAgICAgc2l6ZU9mTG9nc1RvU2VuZCArPSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQrKztcbiAgICB9XG5cbiAgICBpZiAoIW51bWJlck9mTG9nc1RvU2VuZCkge1xuICAgICAgdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2UgPSB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZS5zdWJzdHJpbmcoMCxcbiAgICAgICAgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgKHJlcXVlc3RTaXplTGltaXQgLSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkpKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCA9IDE7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nTWVzc2FnZXMgPSB0aGlzLl9sb2dzLnNsaWNlKDAsIG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICB0aGlzLl9sb2dzID0gdGhpcy5fbG9ncy5zbGljZShudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZExvZ3MobG9nTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdXJhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGR1cmF0aW9uID0gMCkge1xuICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG4gIH1cblxuICB0b0lzb1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuICdQMFMnO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB0aGlzLl9kdXJhdGlvbiA8IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpc05lZ2F0aXZlID8gTWF0aC5hYnModGhpcy5fZHVyYXRpb24pIDogdGhpcy5fZHVyYXRpb247XG4gICAgbGV0IG9mZnNldCA9IE1hdGguZmxvb3IoZHVyYXRpb24pO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG9mZnNldCAlIDEwMDA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDEwMDApO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IGhvdXJzID0gb2Zmc2V0ICUgMjQ7XG4gICAgY29uc3QgcGFydHMgPSBbJ1BUJ107XG5cbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLScpO1xuICAgIH1cblxuICAgIGlmIChob3Vycykge1xuICAgICAgcGFydHMucHVzaChob3VycyArICdIJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIHBhcnRzLnB1c2gobWludXRlcyArICdNJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgfHwgbWlsbGlzZWNvbmRzKSB7XG4gICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzZWNvbmRzKSk7XG5cbiAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcGFydHMucHVzaCgnLicgKyB0aGlzLnBhZFN0YXJ0KG1pbGxpc2Vjb25kcy50b1N0cmluZygpLCAzLCAnMCcpKTtcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnUycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIHBhZFN0YXJ0KGl0ZW06IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBTdHJpbmcoKHR5cGVvZiBwYWRTdHJpbmcgIT09ICd1bmRlZmluZWQnID8gcGFkU3RyaW5nIDogJyAnKSk7XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGl0ZW0ubGVuZ3RoO1xuXG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIGl0ZW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAyMDAwO1xuY29uc3QgZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAxO1xuY29uc3QgZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAzMDAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9uZW50aWFsQmFja29mZiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRcbiAgKSB7XG4gICAgdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gIH1cblxuICBnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KGZhaWx1cmVDb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMgPSB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIC8gMTAwMDtcbiAgICBjb25zdCByYW5kb21pemF0aW9uID0gMC41ICsgKDAuNSAqIE1hdGgucmFuZG9tKCkpOyAvLyBbMC41LCAxKVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZiA9IE1hdGgucG93KGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcywgZmFpbHVyZUNvdW50IC0gMik7IC8vICBbMS80IDEvMiAxIDIgNCA4IC4uLi5dXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gPSBNYXRoLmZsb29yKGV4cG9uZW50aWFsQmFja29mZikgKiByYW5kb21pemF0aW9uO1xuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCA9IE1hdGguY2VpbChNYXRoLm1heChleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiAqIDEwMDAsIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpKTtcblxuICAgIHJldHVybiBNYXRoLm1pbihleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQsIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpbWVuc2lvbiBpbXBsZW1lbnRzIElDb21wYXJhYmxlPERpbWVuc2lvbj4ge1xuICByZWFkb25seSB3aWR0aDogbnVtYmVyO1xuICByZWFkb25seSBoZWlnaHQ6IG51bWJlcjtcblxuICBzdGF0aWMgZ2V0IGVtcHR5KCk6IERpbWVuc2lvbiB7XG4gICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oMCwgMCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIGVxdWFscyhvdGhlcjogRGltZW5zaW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyICYmIHRoaXMud2lkdGggPT09IG90aGVyLndpZHRoICYmIHRoaXMuaGVpZ2h0ID09PSBvdGhlci5oZWlnaHQ7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLndpZHRofXgke3RoaXMuaGVpZ2h0fWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7U3RyZWFtU2V0dXBMaXN0ZW5lcn0gZnJvbSAnLi4vZG9tL1N0cmVhbVNldHVwTGlzdGVuZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBOZXR3b3JrTW9uaXRvciBmcm9tICcuLi9kb20vTmV0d29ya01vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmludGVyZmFjZSBJTmV0d29ya1N0YXRpc3RpY3Mge1xuICBydHQ/OiBudW1iZXI7XG4gIGVmZmVjdGl2ZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXNzaW9uVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2Vzc2lvblRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gU0RLLmFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrTW9uaXRvcjogTmV0d29ya01vbml0b3IgPSBuZXcgTmV0d29ya01vbml0b3IoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9sYXN0TmV0d29ya1N0YXRpc3RpY3M6IElOZXR3b3JrU3RhdGlzdGljcyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yKTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuXG4gICAgaWYgKCF0aGlzLl9uZXR3b3JrTW9uaXRvci5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5pc0ZvcmVncm91bmQuc3Vic2NyaWJlKGlzRm9yZWdyb3VuZCA9PiB7XG4gICAgICB0aGlzLnJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLnJ0dC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrUlRUVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmVmZmVjdGl2ZVR5cGUuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gIH1cblxuICBsaXN0ZW5PblN0cmVhbVNldHVwKCk6IFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICAgIHJldHVybiBuZXcgU3RyZWFtU2V0dXBMaXN0ZW5lcih0aGlzLl9wYWdlTG9hZFRpbWUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB0aW1lU2luY2VMYXN0Q2hhbmdlID0gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBpc0ZvcmVncm91bmQgPyBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQgOiBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlTGFzdENoYW5nZX1cbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ0FwcGxpY2F0aW9uIGhhcyBnb25lIGludG8gdGhlIFslc10gYWZ0ZXIgWyVzXSBtcycsXG4gICAgICBpc0ZvcmVncm91bmQgPyAnZm9yZWdyb3VuZCcgOiAnYmFja2dyb3VuZCcsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZUxhc3RDaGFuZ2UpLnRvSXNvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1JUVFVwZGF0ZShuZXdSVFQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkUnR0ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dDtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQgPSBuZXdSVFQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogbmV3UlRUfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZFJ0dCA/IHt1aW50NjQ6IG9sZFJ0dH0gOiB1bmRlZmluZWQsXG4gICAgICByZXNvdXJjZTogJ25hdmlnYXRvcidcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBSVFQgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld1JUVCxcbiAgICAgIG9sZFJ0dFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKG5ld05ldHdvcmtUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZE5ldHdvcmtUeXBlID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGU7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZSA9IG5ld05ldHdvcmtUeXBlO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdOZXR3b3JrVHlwZX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGROZXR3b3JrVHlwZSA/IHtzdHJpbmc6IG9sZE5ldHdvcmtUeXBlfSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGVmZmVjdGl2ZSB0eXBlIGhhcyBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3TmV0d29ya1R5cGUsXG4gICAgICBvbGROZXR3b3JrVHlwZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZShuZXdDYXBhY2l0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRDYXBhY2l0eSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSA9IG5ld0NhcGFjaXR5O1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7ZmxvYXQ6IG5ld0NhcGFjaXR5fSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZENhcGFjaXR5ID8ge2Zsb2F0OiBvbGRDYXBhY2l0eX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBkb3dubGluayB0aHJvdWdocHV0IGNhcGFjaXR5IGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdDYXBhY2l0eSxcbiAgICAgIG9sZENhcGFjaXR5XG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaWRlb1RlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF9saXN0ZW5Ub0ZpcnN0VGltZTogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yU3RhbGw6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvckNvbnRpbnVhdGlvbjogKGV2ZW50KSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvU3RhbGxlZDogbnVtYmVyO1xuICBwcml2YXRlIF9sYXN0UHJvZ3Jlc3M6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9SZXNvbHV0aW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyOiBEaXNwb3NhYmxlO1xuICBwcml2YXRlIF9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXI6IERpc3Bvc2FibGU7XG5cbiAgY29uc3RydWN0b3Ioc3RyZWFtSWQ6IHN0cmluZywgcGFnZUxvYWRUaW1lOiBudW1iZXIsIGNoYW5uZWxTdGFydFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSA9IGNoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSA9ICgpOiB2b2lkID0+IHRoaXMuY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB9KTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIpO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdGVuRm9yU3RhbGwgPSAoKTogdm9pZCA9PiB0aGlzLm9uU3RhbGwoKTtcblxuICAgIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbiA9IChldmVudCk6IHZvaWQgPT4gdGhpcy5vbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcblxuICAgIHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZHVyYXRpb25TaW5jZVBhZ2VMb2FkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHJldHVybiBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTtcbiAgICB0aGlzLnB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lci5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fdGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBGaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIENoYW5uZWwgY3JlYXRpb24gdG8gZmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TdGFsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmlkZW9TdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5TdGFsbGVkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHN0YWxsZWQnLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk6IHZvaWQge1xuICAgIGlmICghdmlkZW8uYnVmZmVyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXJMZW5ndGggPSB2aWRlby5idWZmZXJlZC5sZW5ndGg7XG4gICAgY29uc3QgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQgPSBldmVudC50eXBlID09PSAncGxheWluZydcbiAgICB8fCBidWZmZXJMZW5ndGggPiAwID8gKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcydcbiAgICAgIHx8IGV2ZW50LnR5cGUgPT09ICd0aW1ldXBkYXRlJylcbiAgICAgICYmIHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKSA9PT0gdGhpcy5fbGFzdFByb2dyZXNzIDogdHJ1ZTtcblxuICAgIGlmICghdGhpcy5fdmlkZW9TdGFsbGVkIHx8IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcycpIHtcbiAgICAgIHRoaXMuX2xhc3RQcm9ncmVzcyA9IHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lU2luY2VTdG9wID0gRGF0ZS5ub3coKSAtIHRoaXMuX3ZpZGVvU3RhbGxlZDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQnVmZmVyaW5nLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VTdG9wfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgcmVjb3ZlcmVkIGZyb20gc3RhbGwgYWZ0ZXIgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VTdG9wKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBudWxsO1xuICB9XG5cbiAgb25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKG5ld1Jlc29sdXRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld1Jlc29sdXRpb259LFxuICAgICAgcHJldmlvdXNWYWx1ZTogdGhpcy5fdmlkZW9SZXNvbHV0aW9uID8ge3N0cmluZzogdGhpcy5fdmlkZW9SZXNvbHV0aW9ufSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9SZXNvbHV0aW9uID0gbmV3UmVzb2x1dGlvbjtcbiAgfVxufSIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdGlmKF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0pIHtcblx0XHRyZXR1cm4gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gbW9kdWxlWydkZWZhdWx0J10gOlxuXHRcdCgpID0+IG1vZHVsZTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLy8gbW9kdWxlIGV4cG9ydHMgbXVzdCBiZSByZXR1cm5lZCBmcm9tIHJ1bnRpbWUgc28gZW50cnkgaW5saW5pbmcgaXMgZGlzYWJsZWRcbi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xucmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9
10349
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vTmV0d29ya01vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZVRva2VuLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvUGFyYW1ldGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGVMaXN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL1N0cmluZ3MudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9BcHBlbmRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Db25zb2xlQXBwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ1RocmVzaG9sZC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1NkcFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1JlYWRPbmx5U3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvU3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvU0RLLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvVGVsZW1ldHJ5VXJsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0YXRlQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvVG9rZW5Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0NodW5rZWRTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvQ2h1bmtlZFN0cmVhbWluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9IbHNQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvSW5zZXJ0YWJsZVN0cmVhbXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTmV0d29ya1N0YXRlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9SZWFsVGltZVN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TaGFrYVBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1dlYlBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9EaW1lbnNpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbImRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0IiwiQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJEaXNwb3NhYmxlTGlzdCIsIkRhdGUiLCJub3ciLCJfaXNGb3JlZ3JvdW5kIiwiU3ViamVjdCIsIl9yZWFkT25seUlzRm9yZWdyb3VuZCIsIlJlYWRPbmx5U3ViamVjdCIsImRldGVjdFRhYkZvY3VzQ2hhbmdlIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwiZ2V0IiwidmFsdWUiLCJnZXRUaW1lU2luY2VMYXN0Q2hhbmdlIiwiX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZSIsImRpc3Bvc2UiLCJfZGlzcG9zYWJsZXMiLCJfdGhpcyIsImhpZGRlbiIsInZpc2liaWxpdHlDaGFuZ2UiLCJkb2N1bWVudCIsIl90eXBlb2YiLCJtc0hpZGRlbiIsIndlYmtpdEhpZGRlbiIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJpc0ZvcmVncm91bmQiLCJzZXRGb2N1c1N0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFkZCIsIkRpc3Bvc2FibGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuRm9yRG9jdW1lbnRGb2N1cyIsImNhbGwiLCJfdGhpczIiLCJfZG9jdW1lbnRGb2N1c0ludGVydmFsIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJoYXNGb2N1cyIsImNsZWFySW50ZXJ2YWwiLCJCcm93c2VyRGV0ZWN0b3IiLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiX2Jyb3dzZXJOYW1lIiwiX2Jyb3dzZXJNYWpvclZlcnNpb24iLCJfaXNDaHJvbWU2OSIsIl9pc0Nocm9tZTcwIiwiX2lzQ2hyb21lNzEiLCJfaXNDaHJvbWU3MiIsIl9pc0Nocm9tZTc0IiwiX2lzQ2hyb21lNzUiLCJfaXNDaHJvbWU3NiIsIl9pc0Nocm9tZTc3IiwiaXNNb2JpbGUiLCJfbmF2aWdhdG9yIiwidGVzdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibWF0Y2giLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFIiwicGFyc2VCcm93c2VyTmFtZSIsImJyb3dzZXJOYW1lTGlzdCIsInNwbGl0IiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiYnJvd3NlclZlcnNpb25MaXN0IiwiZnVsbFZlcnNpb24iLCJOdW1iZXIiLCJtc2llIiwiaW5kZXhPZiIsImNvbmNhdCIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwidHJpZGVudCIsInZlcnNpb24iLCJpbmNsdWRlcyIsIkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJnZXRTdHJpbmdWYWx1ZSIsIm5hbWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlIiwicmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZSIsImRlZmF1bHRTdHJpbmdWYWx1ZSIsImdldEJvb2xlYW5WYWx1ZSIsInZhbHVlRnJvbVVyaSIsImRlZmF1bHRCb29sZWFuVmFsdWUiLCJUZWxlbWV0cnlMZXZlbE1hcHBpbmciLCJUZWxlbWV0cnlEZWZhdWx0IiwiTG9nZ2luZ0xldmVsTWFwcGluZyIsIkxvZ2dlckRlZmF1bHRzIiwibWV0YVZhbHVlIiwicXVlcnlTZWxlY3RvciIsImdldEF0dHJpYnV0ZSIsInZhbHVlVVJJUGFyYW1ldGVyTmFtZSIsIlVSTFNlYXJjaFBhcmFtcyIsImxvY2F0aW9uIiwic2VhcmNoIiwidW5kZWZpbmVkIiwiR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIiLCJFcnJvciIsImZvcmNlR2FyYmFnZUNvbGxlY3Rpb24iLCJGZWF0dXJlRW5hYmxlbWVudCIsImZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24iLCJxdWV1ZU1pY3JvdGFzayIsIm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbiIsInNldFRpbWVvdXQiLCJpbWciLCJjcmVhdGVFbGVtZW50Iiwic3JjIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiQmxvYiIsIkFycmF5QnVmZmVyIiwib25lcnJvciIsInJldm9rZU9iamVjdFVSTCIsIk5ldHdvcmtNb25pdG9yIiwiaXNTdXBwb3J0ZWQiLCJzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMiLCJ1cGRhdGVTdGF0aXN0aWNzIiwiX2lzU3VwcG9ydGVkIiwiX3J0dCIsIl9lZmZlY3RpdmVUeXBlIiwiX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJkb3dubGluayIsImRvd25saW5rTWF4IiwiZ2V0RWZmZWN0aXZlVHlwZSIsImVmZmVjdGl2ZVR5cGUiLCJ0eXBlIiwiZ2V0Um91bmRUcmlwVGltZSIsInJ0dCIsImxpc3RlbmVyIiwiU3RyZWFtU2V0dXBMaXN0ZW5lciIsInBhZ2VMb2FkVGltZSIsIkxvZ2dlckZhY3RvcnkiLCJTREsiLCJfc3RhcnRUaW1lIiwiX3BhZ2VMb2FkVGltZSIsInN1Y2Nlc3MiLCJzdHJlYW1JZCIsInJlY29yZFN0cmVhbU1ldHJpYyIsIk1ldHJpY3NUeXBlIiwiZmFpbCIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsIk1ldHJpY1R5cGUiLCJnZXROYW1lIiwibWV0cmljc1NlcnZpY2UiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwiRHVyYXRpb25zIiwidG9Jc29TdHJpbmciLCJlZGdlQXV0aFRva2VuUHJlZml4IiwiRWRnZUF1dGhQYXJzZXIiLCJwYXJzZVRva2VuIiwidG9rZW4iLCJpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCIsImVycm9yIiwiRWRnZVRva2VuIiwiZGVjb2RlZFRva2VuIiwiYXRvYiIsInN1YnN0ciIsImxlbmd0aCIsImVkZ2VUb2tlbiIsIkpTT04iLCJwYXJzZSIsImUiLCJzdGFydHNXaXRoIiwiX2VkZ2VUb2tlbiR0b2tlbiIsIl9lZGdlVG9rZW4kdG9rZW4yIiwiX2FwcGxpY2F0aW9uSWQiLCJhcHBsaWNhdGlvbklkIiwiX3Rva2VuIiwidXJpIiwiY2FwYWJpbGl0aWVzIiwiQnVpbGRGZWF0dXJlcyIsIl9zZW5kTG9jYWxDYW5kaWRhdGVzIiwiX3NlbmRMb2dzIiwiX3NlbmRNZXRyaWNzIiwiX2xvZ1RvQ29uc29sZSIsImFwcGx5RmVhdHVyZXMiLCJmZWF0dXJlcyIsIl9fRkVBVFVSRVNfXyIsInNlbmRMb2NhbENhbmRpZGF0ZXMiLCJzZW5kTG9ncyIsInNlbmRNZXRyaWNzIiwibG9nVG9Db25zb2xlIiwiX2RvY3VtZW50IiwiTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciIsIk1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IiLCJfUlRDUnRwUmVjZWl2ZXIiLCJfUlRDUnRwUmVjZWl2ZXIkcHJvdG8iLCJSVENSdHBSZWNlaXZlciIsInByb3RvdHlwZSIsImNyZWF0ZUVuY29kZWRTdHJlYW1zIiwiUGFyYW1ldGVycyIsIl9kaXNjb3ZlcnlQYXJhbWV0ZXJzIiwiYXBwbHlQYXJhbWV0ZXJzIiwicGFyYW1ldGVycyIsIl9fUEFSQU1FVEVSU19fIiwiZGlzY292ZXJ5IiwiaW50ZW50aW9ucyIsImRpc3Bvc2FibGUiLCJfZGlzcG9zZWQiLCJfZGlzcG9zYWJsZSIsIl9saXN0IiwiZm9yRWFjaCIsInRvU3RyaW5nIiwiU3RyaW5ncyIsInJhbmRvbSIsInJhbmRvbTEzQ2hhcmFjdGVycyIsIk1hdGgiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwiTG9nZ2VyIiwiYXBwZW5kZXJzIiwiX2NhdGVnb3J5IiwidHJhY2UiLCJUcmFjZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsImRlYnVnIiwiRGVidWciLCJfbGVuMiIsIl9rZXkyIiwiSW5mbyIsIl9sZW4zIiwiX2tleTMiLCJ3YXJuIiwiV2FybiIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiZmF0YWwiLCJGYXRhbCIsIl9sZW42IiwiX2tleTYiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJnZXRMb2dnZXIiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlIiwibG9nZ2luZ0xldmVsIiwiY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIlRlbGVtZXRyeUxldmVsIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwic2V0IiwidXJsIiwibWV0cmljc1VybCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc0ZhY3RvcnkiLCJnZXRNZXRyaWNzU2VydmljZSIsIm1ldHJpY3NTZXJ2aWNlcyIsIl9tZXRyaWNzU2VydmljZXMiLCJtZXRyaWNzQ29uZmlndXJhdGlvbiIsIlRlbGVtZXRyeVVybCIsIkVudmlyb25tZW50IiwiTWV0cmljc1NlcnZpY2UiLCJzZXRUZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwicmVxdWVzdFNpemVMaW1pdCIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwibWV0cmljIiwicHJldmlvdXNWYWx1ZSIsInJlc291cmNlIiwia2luZCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwiX2RvbWFpbiIsIlZlcnNpb25NYW5hZ2VyIiwiaWdub3JlZCIsInNlbmRNZXRyaWNzSWZBYmxlIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiX2NhbGxlZSIsIm1ldHJpY3NNZXNzYWdlcyIsImZvcm1EYXRhIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiRm9ybURhdGEiLCJhcHBlbmQiLCJyZWNvcmRzIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiYWJydXB0Iiwic2VudCIsInN0b3AiLCJfeCIsImFwcGx5IiwiX3NlbmRNZXRyaWNzSWZBYmxlIiwiX2NhbGxlZTIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJfaXNTZW5kaW5nIiwic2xpY2UiLCJ0aGVuIiwicmVzcG9uc2UiLCJjYXRjaCIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlIiwiY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbFR5cGUiLCJQcm9taXNlIiwiY2FsbGJhY2siLCJUeXBlRXJyb3IiLCJfc3RhdGUiLCJfaGFuZGxlZCIsIl92YWx1ZSIsIl9kZWZlcnJlZHMiLCJkb1Jlc29sdmUiLCJkb25lIiwicHJvbWlzZVJlc29sdmUiLCJyZWFzb24iLCJwcm9taXNlUmVqZWN0IiwibmV3VmFsdWUiLCJwcm9taXNlIiwiZmluYWxlIiwiX2ltbWVkaWF0ZSIsIl91bmhhbmRsZWRSZWplY3Rpb24iLCJpIiwibGVuIiwiaGFuZGxlIiwiZGVmZXJyZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyZXN1bHQiLCJhbGwiLCJhcnIiLCJyZXNvbHZlIiwicmVqZWN0IiwiaXNBcnJheSIsInJlbWFpbmluZyIsIm1hbmFnZVJlc3BvbnNlIiwiY29uc3RydWN0b3IiLCJfIiwicmFjZSIsIlByb21pc2VIYW5kbGVyIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhY2hlZCIsImRpcmVjdGlvbiIsInBlZXJDb25uZWN0aW9uIiwiY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhbGxlZTMiLCJlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJjb25maWd1cmF0aW9uIiwiX2FyZ3MzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJfcmVmIiwic3VwcG9ydHNBZGRUcmFuc2NlaXZlciIsInZpZGVvVHJhbnNjZWl2ZXIiLCJhdWRpb1RyYW5zY2VpdmVyIiwib3B0aW9ucyIsImFkZFRyYW5zY2VpdmVyIiwidDAiLCJ0MSIsInQyIiwiY3JlYXRlT2ZmZXIiLCJ0MyIsImxvY2FsT2ZmZXIiLCJvZmZlclRvUmVjZWl2ZUF1ZGlvIiwib2ZmZXJUb1JlY2VpdmVWaWRlbyIsInQ0IiwidDUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIiLCJ0cnVuY2F0ZUljZVNlcnZlcnMiLCJpY2VTZXJ2ZXJzIiwidXJscyIsInVzZXJuYW1lIiwiY3JlZGVudGlhbCIsInVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQiLCJSdGNDb25uZWN0aW9uTW9uaXRvciIsIm1lZGlhU3RyZWFtIiwiZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl9wZWVyQ29ubmVjdGlvbiIsIl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3RyYWNrc1RvTW9uaXRvciIsImdldFRyYWNrcyIsIm1hcCIsInRyYWNrIiwicGFyc2VkU0RQIiwiU2RwUGFyc2VyIiwiY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIiwic2RwIiwiX2VzdGltYXRlZEF1ZGlvQ29kZWMiLCJhdWRpb0NvZGVjIiwiX2VzdGltYXRlZFZpZGVvQ29kZWMiLCJ2aWRlb0NvZGVjIiwidXBkYXRlU3RhdGlzdGljIiwiX3J0Y1N0YXRpc3RpYyIsIl9pc01vbml0b3JSdW5uaW5nIiwiX3VwZGF0ZVRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJfdXBkYXRlU3RhdGlzdGljIiwiX2lnbm9yZWQiLCJnZXRLaW5kRm9yU2FmYXJpMTEiLCJ1cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJpZCIsImdldFN0YXRzIiwic3RhdHMiLCJydGNTdGF0aXN0aWNzIiwicm91bmRUcmlwVGltZSIsImxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCIsInJlcG9ydCIsImN1cnJlbnRSb3VuZFRyaXBUaW1lIiwibWVkaWFUeXBlIiwiY29kZWMiLCJjb2RlY0lkIiwibWltZVR5cGUiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYyIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MyIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjQiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY1IiwiYnl0ZXMiLCJieXRlc1JlY2VpdmVkIiwicHJldmlvdXNCeXRlc1JlY2VpdmVkIiwiYnl0ZXNEZWx0YSIsInRpbWVEZWx0YSIsImJpdHJhdGUiLCJmbG9vciIsInNzcmMiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwidmlkZW8iLCJmcmFtZXNEZWNvZGVkIiwiZnBzIiwicm91bmQiLCJfdXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiZ2V0U3RhdHNMZWdhY3kiLCJuYW1lcyIsInN0YXQiLCJfc2RwIiwic2RwU3BsaXRCeUxpbmVzIiwic2RwU3BsaXRCeVRyYWNrcyIsIl9hdWRpb0NvZGVjIiwiYXBwbHlDb2RlYyIsIl92aWRlb0NvZGVjIiwiX2lzQXVkaW9UcmFja0VuYWJsZWQiLCJpc1RyYWNrQnlUeXBlRW5hYmxlZCIsIl9pc1ZpZGVvVHJhY2tFbmFibGVkIiwic2RwU2VjdGlvbkZvclR5cGUiLCJmaW5kIiwic2RwVHJhY2siLCJ1c2VkQ29kZWNMaW5lIiwic2RwTGluZSIsInVzZWRDb2RlYyIsImNvZGVjTmFtZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbiIsIndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIiwiUlRDUGVlckNvbm5lY3Rpb24iLCJjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiIsImNvbm5lY3Rpb25TdGF0ZSIsImljZUNvbm5lY3Rpb25TdGF0ZSIsImdldENvbmZpZ3VyYXRpb24iLCJzZXRDb25maWd1cmF0aW9uIiwiX2NyZWF0ZU9mZmVyIiwiX2NyZWF0ZUFuc3dlciIsImNyZWF0ZUFuc3dlciIsIl94MiIsIl9zZXRMb2NhbERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiX3gzIiwiX3NldFJlbW90ZURlc2NyaXB0aW9uIiwiX2NhbGxlZTQiLCJfZGVzY3JpcHRpb24kc2RwIiwiaGFzQ3J5cHRvIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0Iiwic2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfeDQiLCJnZXRTZW5kZXJzIiwic2VsZWN0b3IiLCJfdGhpczMiLCJhZGRTdHJlYW0iLCJfdGhpczQiLCJhZGRUcmFjayIsIm9udHJhY2siLCJoYW5kbGVyIiwib25pY2VjYW5kaWRhdGUiLCJvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsIm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwiY2xvc2UiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJzdWJqZWN0IiwiX3N1YmplY3QiLCJzdWJzY3JpYmUiLCJEaXNwb3NhYmxlTGlzdGVuZXIiLCJfRGlzcG9zYWJsZSIsIl9pbmhlcml0cyIsIl9zdXBlciIsIl9jcmVhdGVTdXBlciIsImxpc3RlbmVycyIsImlkeCIsIl9saXN0ZW5lcnMiLCJjaGFuZ2VkIiwiY29tcGFyYWJsZSIsImVxdWFscyIsImdldEVudmlyb25tZW50RnJvbVVybCIsImJhc2VVUkwiLCJvcmlnaW4iLCJfY2xpZW50U2Vzc2lvbklkIiwiX2xvYWRlZFRpbWVzdGFtcCIsIl9yZWFkT25seUluaXRpYWxpemVkIiwiX3JlYWRPbmx5RGlzY292ZXJ5VXJpIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSIsIl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsIl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0IiwiX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyIsIl93ZWJQbGF5ZXJMb2FkZXIiLCJfc2hha2FQbGF5ZXJMb2FkZXIiLCJfaGxzSnNMb2FkZXIiLCJfbWV0cmljc1NlcnZpY2UiLCJfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfdGVsZW1ldHJ5VXJsIiwiX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJyZXRyaWVzQW1vdW50IiwiX3RlbGVtZXRyeUxldmVsIiwiYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwidGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImNsaWVudFNlc3Npb25JZCIsImlnbm9yZWRFbnZpcm9ubWVudCIsImlnbm9yZWREaXNjb3ZlcnlVcmkiLCJ0ZWxlbWV0cnlVcmwiLCJ0ZWxlbWV0cnlBcHBlbmRlciIsImlnbm9yZWRUZW5hbmN5IiwiYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbiIsIkRpc2NvdmVyeVVyaSIsImlnbm9yZWRUZWxlbWV0cnlMZXZlbCIsImFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJkaXNjb3ZlcnlVcmkiLCJnZXRUZWxlbWV0cnlVcmwiLCJjaGFubmVsVG9rZW4iLCJ1cmlWYWx1ZSIsImJhc2VVUklWYWx1ZSIsImluaXQiLCJfaW5pdGlhbGl6ZWQiLCJwZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjb25zb2xlTG9nZ2luZ0xldmVsIiwiY29uc29sZUFwcGVuZGVyIiwiYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwid2ViUGxheWVyTG9hZGVyIiwic2hha2FQbGF5ZXJMb2FkZXIiLCJobHNKc0xvYWRlciIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0IiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24iLCJmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIkNoYW5uZWwiLCJ2aWRlb0VsZW1lbnQiLCJjaGFubmVsQ29udGV4dE9wdGlvbnMiLCJ0YXJnZXRMYWciLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiZW5jb2RlZFZpZGVvU3RyZWFtU2luayIsImVuY29kZWRBdWRpb1N0cmVhbVNpbmsiLCJoYXNJbnNlcnRhYmxlU3RyZWFtcyIsIl90b2tlbkNvbnRleHQiLCJUb2tlbkNvbnRleHQiLCJfY2hhbm5lbENvbnRleHQiLCJDaGFubmVsQ29udGV4dCIsIl9wZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJQZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJfc3RhdGVDb250ZXh0IiwiU3RhdGVDb250ZXh0IiwiX2V4cG9uZW50aWFsQmFja29mZiIsIkV4cG9uZW50aWFsQmFja29mZiIsIl9jaGFubmVsU3RhcnRUaW1lIiwiX3JlYWRPbmx5VmlkZW9FbGVtZW50IiwiX3JlYWRPbmx5VG9rZW4iLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiIsIl9yZWFkT25seVN0YXRlIiwic3RhdGUiLCJfcmVhZE9ubHlBdXRvTXV0ZWQiLCJhdXRvTXV0ZWQiLCJfcmVhZE9ubHlBdXRvUGF1c2VkIiwiYXV0b1BhdXNlZCIsIl9yZWFkT25seVRva2VuRXhwaXJpbmciLCJ0b2tlbkV4cGlyaW5nIiwiX3JlYWRPbmx5QXV0aG9yaXplZCIsImF1dGhvcml6ZWQiLCJfcmVhZE9ubHlPbmxpbmUiLCJvbmxpbmUiLCJfcmVhZE9ubHlMb2FkaW5nIiwibG9hZGluZyIsIl9yZWFkT25seVBsYXlpbmciLCJwbGF5aW5nIiwiX3JlYWRPbmx5U3RhbmRieSIsInN0YW5kYnkiLCJfcmVhZE9ubHlTdG9wcGVkIiwic3RvcHBlZCIsIl9yZWFkT25seVRhcmdldExhZyIsIl9yZWFkT25seUxhZyIsImxhZyIsIl9yZWFkT25seUJpdHJhdGVMaW1pdCIsImJpdHJhdGVMaW1pdCIsIl9yZWFkT25seVJlc29sdXRpb24iLCJyZXNvbHV0aW9uIiwiX3JlYWRPbmx5RmFpbHVyZUNvdW50IiwiZmFpbHVyZUNvdW50IiwiX3JlYWRPbmx5RW5kUG9pbnQiLCJlbmRQb2ludCIsIl9yZWFkT25seVN0cmVhbSIsInN0cmVhbSIsIl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MiLCJfcmVhZE9ubHlNZWRpYVN0cmVhbSIsIl9zZXNzaW9uVGVsZW1ldHJ5IiwiU2Vzc2lvblRlbGVtZXRyeSIsImNoYW5uZWxEaXNwb3NhYmxlcyIsIl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIiLCJoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCIsInJlbmRlcmVyRGlzcG9zYWJsZXMiLCJ2aWRlb1RlbGVtZXRyeSIsImRhdGFzZXQiLCJWaWRlb1RlbGVtZXRyeSIsInNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUiLCJzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmciLCJDaGFubmVsU3RhdGUiLCJyZXN0YXJ0QWZ0ZXJTdG9wIiwiY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0Iiwib25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzIiwiZWxhcHNlZEluTWlsbGlzZWNvbmRzIiwiY2hhbm5lbEluaXRpYWxpemF0aW9uIiwiZ2V0VGltZSIsImxpbWl0Qml0cmF0ZSIsImRlc3Ryb3lTdHJlYW1PblVubW91bnQiLCJzdGFydCIsInBhdXNlIiwic3JjT2JqZWN0Iiwid2lkdGgiLCJ2aWRlb1dpZHRoIiwiaGVpZ2h0IiwidmlkZW9IZWlnaHQiLCJEaW1lbnNpb24iLCJkaXNwb3NhYmxlcyIsInNldEJpdHJhdGVMaW1pdCIsImNsZWFyQml0cmF0ZUxpbWl0IiwiYml0cmF0ZUluQml0c1BlclNlY29uZCIsInN0YXR1cyIsInVwZGF0ZVRhcmdldExhZyIsIl9zdG9wIiwiaXNTdGFydGluZyIsInByb2Nlc3NTdG9wIiwiY2xlYW5VcFJlc291cmNlcyIsIl9yZXN1bWUiLCJwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsInJlc3VtZSIsIm11dGUiLCJtdXRlZCIsInVubXV0ZSIsIl9kaXNwb3NlIiwiaXNEaXNwb3NlZCIsImdldFVyaSIsIl9zdGFydCIsInByb2Nlc3NTdGFydCIsIl9wcm9jZXNzU3RhcnQiLCJfY2FsbGVlNSIsIl90aGlzNSIsImxpc3Rlbk9uU3RyZWFtU2V0dXAiLCJfSW5zZXJ0YWJsZVN0cmVhbXMkdmEiLCJ2YWxpZCIsInZhbGlkYXRpb25SZXN1bHQiLCJfSW5zZXJ0YWJsZVN0cmVhbXMkdmEyIiwiX3ZhbGlkIiwiX3ZhbGlkYXRpb25SZXN1bHQiLCJfSW5zZXJ0YWJsZVN0cmVhbXMkdmEzIiwiX3ZhbGlkMiIsIl92YWxpZGF0aW9uUmVzdWx0MiIsImhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrIiwiaGFzRW5jb2RlZFN0cmVhbVNpbmsiLCJoYXNTdHJlYW1UcmFuc2Zvcm1zT3JTaW5rIiwiaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrIiwic3RyZWFtUGxheWVyIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiSW5zZXJ0YWJsZVN0cmVhbXMiLCJEaXNjb3ZlcnkiLCJoYW5kbGVTdHJlYW1GYWlsdXJlIiwiU3RyZWFtRmFjdG9yeSIsImZpbmFsbHkiLCJ0aW1lb3V0SWQiLCJnZXRSZXRyeUludGVydmFsIiwiX3Jlc3RhcnRBZnRlclN0b3AiLCJfY2FsbGVlNiIsIl9jYWxsZWU2JCIsIl9jb250ZXh0NiIsIl9wbGF5IiwiX2NhbGxlZTciLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJwbGF5IiwiZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCIsIl9oYW5kbGVTdHJlYW1GYWlsdXJlIiwiX2NhbGxlZTgiLCJfY2FsbGVlOCQiLCJfY29udGV4dDgiLCJfdGhpczYiLCJkZXN0cm95U3RyZWFtIiwiX3JlZjIiLCJwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwiX3BsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50IiwiX2NhbGxlZTkiLCJfdGhpczciLCJwbGF5UHJvbWlzZSIsIl9jYWxsZWU5JCIsIl9jb250ZXh0OSIsImhhc0F1ZGlvVHJhY2siLCJmaWx0ZXIiLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiIsIkNoYW5uZWxzIiwiY3JlYXRlQ2hhbm5lbCIsImNoYW5uZWxPcHRpb25zIiwiZGVmYXVsdFRhcmdldExhZyIsIl9vcHRpb25zJHRhcmdldExhZyIsImFwcGx5U3RhdHVzIiwiYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50IiwibWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwiZGVmYXVsdERpc2NvdmVyeVVyaSIsIkJpdHJhdGVNb2RlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlIiwiYml0cmF0ZU1vZGUiLCJCaXRyYXRlU3RhdGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZSIsImJpdHJhdGVTdGF0ZSIsImRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwiLCJfcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwicHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkiLCJfZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsImRpc2NvdmVyeVNlcnZpY2UiLCJjYWNoZWRWYWx1ZSIsIl9jYWNoZSIsIkRpc2NvdmVyeVNlcnZpY2UiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsImNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50IiwiZGVmYXVsdFRpbWVvdXQiLCJfdXJpIiwiX2Rpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwidGltZW91dCIsImFzU3RyaW5nIiwiZW5kUG9pbnRzIiwib2siLCJ0ZXh0IiwiRW5kUG9pbnQiLCJkaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsImZhaWxlZFJlcXVlc3RzIiwicHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQiLCJfYXJnczIiLCJwaW5nIiwidGltZSIsIl9kaXNjb3ZlcnlVcmkiLCJidWlsZERpc2NvdmVyeVVybCIsInNka1ZlcnNpb24iLCJhcGlWZXJzaW9uIiwiX3RpbWVvdXQiLCJfcm91bmRUcmlwVGltZSIsIl9waW5nIiwiZmluaXNoZWQiLCJidWlsZFBpbmdVcmwiLCJfc3Vic2NyaWJlIiwibG9jYWxTZXNzaW9uRGVzY3JpcHRpb24iLCJjbGllbnRWZXJzaW9uIiwiYm9keVdpdGhPZmZlciIsImJvZHlXaXRob3V0T2ZmZXIiLCJodHRwUmVzcG9uc2UiLCJzdWJzY3JpYmVSZXNwb25zZSIsImJ1aWxkVXJsIiwiYmVhcmVyVG9rZW4iLCJodHRwUm91bmRUcmlwVGltZSIsInNlc3Npb25EZXNjcmlwdGlvbiIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbiIsIm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwiX3B1Ymxpc2giLCJtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwicHVibGlzaCIsIl94NSIsIl94NiIsIl94NyIsInNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJzaGFyZWRTZWNyZXQiLCJtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJfeDgiLCJfeDkiLCJfbGltaXRCaXRyYXRlIiwibWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3gxNCIsIl9hZGRJY2VDYW5kaWRhdGVzIiwiY2FuZGlkYXRlcyIsImRpc2NvdmVyeUNvbXBsZXRlZCIsImFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9hcmdzNiIsIm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJhZGRJY2VDYW5kaWRhdGVzIiwiX3gxNSIsIl94MTYiLCJfeDE3IiwiX2Rlc3Ryb3lTdHJlYW0iLCJkZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX3gxOCIsIl94MTkiLCJfZGVzdHJveVN0cmVhbU9uVW5tb3VudCIsInNlbmRCZWFjb24iLCJfeDIwIiwiX3gyMSIsInBhdGgiLCJwYXRoQXNBcnJheSIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsImpzb24iLCJydGNDb25maWd1cmF0aW9uIiwiY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MjIiLCJfeDIzIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCIsInB1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCQiLCJfY29udGV4dDEwIiwiX3gyNCIsIl94MjUiLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVRyYW5zcG9ydFBvbGljeSIsInJ0Y3BNdXhQb2xpY3kiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl9jYWxsZWUxMSIsIl9jYWxsZWUxMSQiLCJfY29udGV4dDExIiwiX3gyNiIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfY2FsbGVlMTIiLCJfY2FsbGVlMTIkIiwiX2NvbnRleHQxMiIsIl94MjciLCJfY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTMiLCJfeDI4IiwiQ2h1bmtlZFN0cmVhbSIsImNoYW5uZWxDb250ZXh0Iiwib2ZmZXJTZHAiLCJvcmlnaW5TdGFydFRpbWUiLCJDaHVua2VkU3RyZWFtaW5nIiwicGxheWVyIiwibW9uaXRvciIsIl9tb25pdG9yRGlzcG9zYWJsZXMiLCJuZXdTdHJlYW1TdGF0aXN0aWNzIiwiX3N0cmVhbVN0YXRpc3RpY3MiLCJjdXJyZW50VGltZSIsImRhdGFCdWZmZXJlZCIsIl9tb25pdG9yRmFpbHVyZUNvdW50IiwicGF1c2VkIiwiX2hsc1BsYXllciIsIl9waGVuaXhXZWJQbGF5ZXIiLCJfc2hha2EiLCJfb3B0aW9ucyIsImxvYWRlZCIsIl9wZW5kaW5nIiwiX3BsYXllciIsIlBsYXllciIsImRhc2hNYW5pZmVzdFVybE1hdGNoIiwiaGxzTWFuaWZlc3RVcmxNYXRjaCIsIm1hbmlmZXN0VXJsIiwicGxheWxpc3RVcmwiLCJIbHNQbGF5ZXIiLCJfb2JqZWN0U3ByZWFkIiwicHJlZmVyTmF0aXZlIiwic2hvdWxkVXNlTmF0aXZlSGxzIiwiV2ViUGxheWVyIiwiU2hha2FQbGF5ZXIiLCJtYW5pZmVzdFVSSSIsIl92aWRlb0VsZW1lbnQiLCJfa2luZCIsIl9zdHJlYW1JZCIsIl9tYW5pZmVzdFVSSSIsImVuY29kZVVSSSIsInJlcGxhY2UiLCJlbmFibGVXb3JrZXIiLCJtYXhCdWZmZXJMZW5ndGgiLCJsaXZlQmFja0J1ZmZlckxlbmd0aCIsImxpdmVTeW5jRHVyYXRpb24iLCJsaXZlRHVyYXRpb25JbmZpbml0eSIsImxpdmVNYXhMYXRlbmN5RHVyYXRpb24iLCJJbmZpbml0eSIsImhpZ2hCdWZmZXJXYXRjaGRvZ1BlcmlvZCIsImxvYWRTb3VyY2UiLCJhdHRhY2hNZWRpYSIsImNhblBsYXlUeXBlIiwibmV0d29ya1N0YXRlIiwiTmV0d29ya1N0YXRlcyIsIk5ldHdvcmtOb1NvdXJjZSIsInN0YXRpc3RpY3MiLCJtZWRpYSIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiYnVmZmVyZWQiLCJlbmQiLCJzdHJlYW1Db250cm9sbGVyIiwidHJ1ZUN1cnJlbnRUaW1lIiwibWF4IiwiZGVzdHJveSIsInNldHVwRW5jb2RlZFN0cmVhbVNpbmsiLCJzdHJlYW1TaW5rIiwicmVjZWl2ZXIiLCJ0cmFuc2Zvcm1lciIsIlRyYW5zZm9ybVN0cmVhbSIsInRyYW5zZm9ybSIsImZyYW1lIiwicmVjZWl2ZXJTdHJlYW1zIiwic291cmNlIiwicmVhZGFibGUiLCJzaW5rIiwid3JpdGFibGUiLCJwaXBlVGhyb3VnaCIsInBpcGVUbyIsInZhbGlkYXRlRW5jb2RlZFN0cmVhbVNpbmsiLCJtb2RlIiwic2V0dXBNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtIiwidmlkZW9UcmFjayIsImdldFZpZGVvVHJhY2tzIiwicHJvY2Vzc29yIiwiZ2VuZXJhdG9yIiwidHJhbnNmb3JtZWRTdHJlYW0iLCJNZWRpYVN0cmVhbSIsImdldEF1ZGlvVHJhY2tzIiwiYXVkaW9UcmFjayIsInZhbGlkYXRlTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwiZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCIsIlJlYWxUaW1lU3RyZWFtIiwicGVlckNvbm5lY3Rpb25Db250ZXh0IiwiX3JlZjMiLCJfc2xpY2VkVG9BcnJheSIsIl9yZWYzJCIsInN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiIsInN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiIsIl9yZWY0IiwiYXBwbHlSdGNDb25maWd1cmF0aW9uIiwic3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQiLCJjYW5jZWxEaXNjb3ZlcnkiLCJjYW5kaWRhdGUiLCJfcmVmNSIsInJldHJ5Q2FsbGJhY2siLCJvbkxpbmUiLCJyZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIm1lZGlhU3RyZWFtUHJvbWlzZSIsInN0cmVhbXMiLCJ0cmFja0xpc3RlbmVyIiwiYW5zd2VyIiwiX3JlZjYiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwicnRjU3RhdGlzdGljIiwicnRjVmlkZW9TdGF0aXN0aWMiLCJydGNBdWRpb1N0YXRpc3RpYyIsImF1ZGlvIiwiYXVkaW9UcmFja0ZhaWxlZCIsInZpZGVvVHJhY2tGYWlsZWQiLCJfYXBwbHlSdGNDb25maWd1cmF0aW9uIiwib3B0aW9uYWxQZWVyQ29ubmVjdGlvbiIsIm5ld1J0Y0NvbmZpZ3VyYXRpb24iLCJfcGVlckNvbm5lY3Rpb24kY3VycmUiLCJpc0NsaWVudE9mZmVyRmxvdyIsImljZVJlc3RhcnQiLCJvZmZlciIsInBsYXllck9wdGlvbnMiLCJhYnIiLCJkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGUiLCJtYW5pZmVzdCIsInJldHJ5UGFyYW1ldGVycyIsInN0cmVhbWluZyIsInJlYnVmZmVyaW5nR29hbCIsImJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJCZWhpbmQiLCJtYXhBdHRlbXB0cyIsImJhY2tvZmZGYWN0b3IiLCJsb2FkUGxheWVyIiwiZXN0aW1hdGVkQmFuZHdpZHRoIiwicGxheVRpbWUiLCJ1bmxvYWQiLCJwbGF5ZXJDb25maWciLCJjb25maWd1cmUiLCJsb2FkIiwiY29kZSIsImNyZWF0ZSIsInRva2VuQ2FwYWJpbGl0aWVzIiwiYmFuZHdpZHRoVG9TdGFydEF0IiwibWluVGltZUJlZm9yZU5leHRSZWxvYWQiLCJlcnJvck9iamVjdCIsImNhblJlbG9hZCIsInNldmVyaXR5IiwicmVsb2FkSWZBYmxlIiwiaXNOYXRpdmUiLCJkZWxpdmVyeVR5cGUiLCJoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZCIsIl9sYXN0UmVsb2FkVGltZSIsInJlbG9hZCIsIl9fQlVJTERfVkVSU0lPTl9fIiwiX2RlZmF1bHRWZXJzaW9uIiwiX3RlbGVtZXRyeVNlcnZpY2UiLCJUZWxlbWV0cnlTZXJ2aWNlIiwibG9nUmVjb3JkIiwiX2xvZ3MiLCJzZW5kTG9nc0lmQWJsZSIsImxvZ01lc3NhZ2VzIiwiX3NlbmRMb2dzSWZBYmxlIiwibnVtYmVyT2ZMb2dzVG9TZW5kIiwic2l6ZU9mTG9nc1RvU2VuZCIsImdldExvZ1NpemUiLCJzdW0iLCJkdXJhdGlvbiIsIl9kdXJhdGlvbiIsImlzTmVnYXRpdmUiLCJhYnMiLCJvZmZzZXQiLCJtaWxsaXNlY29uZHMiLCJzZWNvbmRzIiwibWludXRlcyIsImhvdXJzIiwicGFydHMiLCJTdHJpbmciLCJwYWRTdGFydCIsInRhcmdldExlbmd0aCIsInBhZFN0cmluZyIsInJlcGVhdCIsImRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyIsInJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmYiLCJwb3ciLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCIsIm1pbiIsIm90aGVyIiwiX25ldHdvcmtNb25pdG9yIiwicmVjb3JkRm9yZWdyb3VuZENoYW5nZSIsInJlY29yZE5ldHdvcmtSVFRVcGRhdGUiLCJyZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSIsImRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwicmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlIiwidGltZVNpbmNlTGFzdENoYW5nZSIsIm5ld1JUVCIsIm9sZFJ0dCIsIl9sYXN0TmV0d29ya1N0YXRpc3RpY3MiLCJuZXdOZXR3b3JrVHlwZSIsIm9sZE5ldHdvcmtUeXBlIiwibmV3Q2FwYWNpdHkiLCJvbGRDYXBhY2l0eSIsImZsb2F0IiwiY2hhbm5lbFN0YXJ0VGltZSIsIl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUiLCJfbGlzdGVuVG9GaXJzdFRpbWUiLCJjYWxsVGltZVRvRmlyc3RGcmFtZSIsIl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciIsIl9saXN0ZW5Gb3JTdGFsbCIsIm9uU3RhbGwiLCJfbGlzdGVuRm9yQ29udGludWF0aW9uIiwiZXZlbnQiLCJvbkNvbnRpbnVhdGlvbiIsIl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIiLCJwdXNoVGltZVRvRmlyc3RGcmFtZSIsInB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3RpbWVUb0ZpcnN0RnJhbWUiLCJkdXJhdGlvblNpbmNlUGFnZUxvYWQiLCJfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl92aWRlb1N0YWxsZWQiLCJidWZmZXJMZW5ndGgiLCJoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCIsIl9sYXN0UHJvZ3Jlc3MiLCJ0aW1lU2luY2VTdG9wIiwibmV3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Q29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mLmpzXCIpO1xuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIHZhciBfaSA9IG51bGwgPT0gYXJyID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSBfaSkge1xuICAgIHZhciBfcyxcbiAgICAgIF9lLFxuICAgICAgX3gsXG4gICAgICBfcixcbiAgICAgIF9hcnIgPSBbXSxcbiAgICAgIF9uID0gITAsXG4gICAgICBfZCA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoX3ggPSAoX2kgPSBfaS5jYWxsKGFycikpLm5leHQsIDAgPT09IGkpIHtcbiAgICAgICAgaWYgKE9iamVjdChfaSkgIT09IF9pKSByZXR1cm47XG4gICAgICAgIF9uID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoX24gPSAoX3MgPSBfeC5jYWxsKF9pKSkuZG9uZSkgJiYgKF9hcnIucHVzaChfcy52YWx1ZSksIF9hcnIubGVuZ3RoICE9PSBpKTsgX24gPSAhMCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfZCA9ICEwLCBfZSA9IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFfbiAmJiBudWxsICE9IF9pW1wicmV0dXJuXCJdICYmIChfciA9IF9pW1wicmV0dXJuXCJdKCksIE9iamVjdChfcikgIT09IF9yKSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9hcnI7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheUxpbWl0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlUmVzdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVNwcmVhZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgPSByZXF1aXJlKFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIik7XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7IC8qISByZWdlbmVyYXRvci1ydW50aW1lIC0tIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLiAtLSBsaWNlbnNlIChNSVQpOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL0xJQ0VOU0UgKi9cbiAgbW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lID0gZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgICByZXR1cm4gZXhwb3J0cztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICB2YXIgZXhwb3J0cyA9IHt9LFxuICAgIE9wID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eSxcbiAgICBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBmdW5jdGlvbiAob2JqLCBrZXksIGRlc2MpIHtcbiAgICAgIG9ialtrZXldID0gZGVzYy52YWx1ZTtcbiAgICB9LFxuICAgICRTeW1ib2wgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCA/IFN5bWJvbCA6IHt9LFxuICAgIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIixcbiAgICBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCIsXG4gICAgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgd3JpdGFibGU6ICEwXG4gICAgfSksIG9ialtrZXldO1xuICB9XG4gIHRyeSB7XG4gICAgZGVmaW5lKHt9LCBcIlwiKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldID0gdmFsdWU7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3IsXG4gICAgICBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSksXG4gICAgICBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eShnZW5lcmF0b3IsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KVxuICAgIH0pLCBnZW5lcmF0b3I7XG4gIH1cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogZm4uY2FsbChvYmosIGFyZylcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRocm93XCIsXG4gICAgICAgIGFyZzogZXJyXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBleHBvcnRzLndyYXAgPSB3cmFwO1xuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIGRlZmluZShJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiYgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkgJiYgKEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUpO1xuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPSBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICBkZWZpbmUocHJvdG90eXBlLCBtZXRob2QsIGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvciwgUHJvbWlzZUltcGwpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSByZWNvcmQudHlwZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZyxcbiAgICAgICAgICB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmIFwib2JqZWN0XCIgPT0gX3R5cGVvZih2YWx1ZSkgJiYgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSA/IFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KSA6IFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHVud3JhcHBlZCkge1xuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZCwgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgIH1cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUobWV0aG9kLCBhcmcpIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlSW1wbChmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9IHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoXCJleGVjdXRpbmdcIiA9PT0gc3RhdGUpIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICBpZiAoXCJjb21wbGV0ZWRcIiA9PT0gc3RhdGUpIHtcbiAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gbWV0aG9kKSB0aHJvdyBhcmc7XG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnRleHQubWV0aG9kID0gbWV0aG9kLCBjb250ZXh0LmFyZyA9IGFyZzs7KSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwibmV4dFwiID09PSBjb250ZXh0Lm1ldGhvZCkgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO2Vsc2UgaWYgKFwidGhyb3dcIiA9PT0gY29udGV4dC5tZXRob2QpIHtcbiAgICAgICAgICBpZiAoXCJzdXNwZW5kZWRTdGFydFwiID09PSBzdGF0ZSkgdGhyb3cgc3RhdGUgPSBcImNvbXBsZXRlZFwiLCBjb250ZXh0LmFyZztcbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcbiAgICAgICAgfSBlbHNlIFwicmV0dXJuXCIgPT09IGNvbnRleHQubWV0aG9kICYmIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgc3RhdGUgPSBcImV4ZWN1dGluZ1wiO1xuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChcIm5vcm1hbFwiID09PSByZWNvcmQudHlwZSkge1xuICAgICAgICAgIGlmIChzdGF0ZSA9IGNvbnRleHQuZG9uZSA/IFwiY29tcGxldGVkXCIgOiBcInN1c3BlbmRlZFlpZWxkXCIsIHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSAmJiAoc3RhdGUgPSBcImNvbXBsZXRlZFwiLCBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kTmFtZSA9IGNvbnRleHQubWV0aG9kLFxuICAgICAgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbbWV0aG9kTmFtZV07XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gbWV0aG9kKSByZXR1cm4gY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIFwidGhyb3dcIiA9PT0gbWV0aG9kTmFtZSAmJiBkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXSAmJiAoY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiLCBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZCwgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCksIFwidGhyb3dcIiA9PT0gY29udGV4dC5tZXRob2QpIHx8IFwicmV0dXJuXCIgIT09IG1ldGhvZE5hbWUgJiYgKGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICdcIiArIG1ldGhvZE5hbWUgKyBcIicgbWV0aG9kXCIpKSwgQ29udGludWVTZW50aW5lbDtcbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuICAgIGlmIChcInRocm93XCIgPT09IHJlY29yZC50eXBlKSByZXR1cm4gY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZywgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWw7XG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuICAgIHJldHVybiBpbmZvID8gaW5mby5kb25lID8gKGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlLCBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jLCBcInJldHVyblwiICE9PSBjb250ZXh0Lm1ldGhvZCAmJiAoY29udGV4dC5tZXRob2QgPSBcIm5leHRcIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQpLCBjb250ZXh0LmRlbGVnYXRlID0gbnVsbCwgQ29udGludWVTZW50aW5lbCkgOiBpbmZvIDogKGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSwgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWwpO1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0ge1xuICAgICAgdHJ5TG9jOiBsb2NzWzBdXG4gICAgfTtcbiAgICAxIGluIGxvY3MgJiYgKGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXSksIDIgaW4gbG9jcyAmJiAoZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl0sIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXSksIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiLCBkZWxldGUgcmVjb3JkLmFyZywgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3tcbiAgICAgIHRyeUxvYzogXCJyb290XCJcbiAgICB9XSwgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpLCB0aGlzLnJlc2V0KCEwKTtcbiAgfVxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgaXRlcmFibGUubmV4dCkgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsXG4gICAgICAgICAgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICBmb3IgKDsgKytpIDwgaXRlcmFibGUubGVuZ3RoOykgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkgcmV0dXJuIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHVuZGVmaW5lZCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuZXh0OiBkb25lUmVzdWx0XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgZG9uZTogITBcbiAgICB9O1xuICB9XG4gIHJldHVybiBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lUHJvcGVydHkoR3AsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBkZWZpbmVQcm9wZXJ0eShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gZGVmaW5lKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBnZW5GdW4gJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWN0b3IgJiYgKGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSk7XG4gIH0sIGV4cG9ydHMubWFyayA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcbiAgICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpIDogKGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKGdlbkZ1biwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCksIGdlbkZ1bjtcbiAgfSwgZXhwb3J0cy5hd3JhcCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogYXJnXG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBhc3luY0l0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBleHBvcnRzLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBleHBvcnRzLmFzeW5jID0gZnVuY3Rpb24gKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0LCBQcm9taXNlSW1wbCkge1xuICAgIHZvaWQgMCA9PT0gUHJvbWlzZUltcGwgJiYgKFByb21pc2VJbXBsID0gUHJvbWlzZSk7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSwgUHJvbWlzZUltcGwpO1xuICAgIHJldHVybiBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbikgPyBpdGVyIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICB9KTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKSwgZGVmaW5lKEdwLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JcIiksIGRlZmluZShHcCwgaXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGRlZmluZShHcCwgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH0pLCBleHBvcnRzLmtleXMgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgdmFyIG9iamVjdCA9IE9iamVjdCh2YWwpLFxuICAgICAga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIGtleXMucHVzaChrZXkpO1xuICAgIHJldHVybiBrZXlzLnJldmVyc2UoKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyBrZXlzLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSByZXR1cm4gbmV4dC52YWx1ZSA9IGtleSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgfTtcbiAgfSwgZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXMsIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChza2lwVGVtcFJlc2V0KSB7XG4gICAgICBpZiAodGhpcy5wcmV2ID0gMCwgdGhpcy5uZXh0ID0gMCwgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZCwgdGhpcy5kb25lID0gITEsIHRoaXMuZGVsZWdhdGUgPSBudWxsLCB0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLmFyZyA9IHVuZGVmaW5lZCwgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSksICFza2lwVGVtcFJlc2V0KSBmb3IgKHZhciBuYW1lIGluIHRoaXMpIFwidFwiID09PSBuYW1lLmNoYXJBdCgwKSAmJiBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJiAhaXNOYU4oK25hbWUuc2xpY2UoMSkpICYmICh0aGlzW25hbWVdID0gdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB0aGlzLmRvbmUgPSAhMDtcbiAgICAgIHZhciByb290UmVjb3JkID0gdGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSByb290UmVjb3JkLnR5cGUpIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbiBkaXNwYXRjaEV4Y2VwdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPSBcInRocm93XCIsIHJlY29yZC5hcmcgPSBleGNlcHRpb24sIGNvbnRleHQubmV4dCA9IGxvYywgY2F1Z2h0ICYmIChjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiLCBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZCksICEhY2F1Z2h0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV0sXG4gICAgICAgICAgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgaWYgKFwicm9vdFwiID09PSBlbnRyeS50cnlMb2MpIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIiksXG4gICAgICAgICAgICBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNGaW5hbGx5KSB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmaW5hbGx5RW50cnkgJiYgKFwiYnJlYWtcIiA9PT0gdHlwZSB8fCBcImNvbnRpbnVlXCIgPT09IHR5cGUpICYmIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYyAmJiAoZmluYWxseUVudHJ5ID0gbnVsbCk7XG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJldHVybiByZWNvcmQudHlwZSA9IHR5cGUsIHJlY29yZC5hcmcgPSBhcmcsIGZpbmFsbHlFbnRyeSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYywgQ29udGludWVTZW50aW5lbCkgOiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcbiAgICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUpIHRocm93IHJlY29yZC5hcmc7XG4gICAgICByZXR1cm4gXCJicmVha1wiID09PSByZWNvcmQudHlwZSB8fCBcImNvbnRpbnVlXCIgPT09IHJlY29yZC50eXBlID8gdGhpcy5uZXh0ID0gcmVjb3JkLmFyZyA6IFwicmV0dXJuXCIgPT09IHJlY29yZC50eXBlID8gKHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHJlY29yZC50eXBlICYmIGFmdGVyTG9jICYmICh0aGlzLm5leHQgPSBhZnRlckxvYyksIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcbiAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaChmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHJldHVybiB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKSwgcmVzZXRUcnlFbnRyeShlbnRyeSksIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdW5kZWZpbmVkKSwgQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH0sIGV4cG9ydHM7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlXaXRoSG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXlMaW1pdCA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCIpO1xuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NsaWNlZFRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVNwcmVhZCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCIpO1xuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b0NvbnN1bWFibGVBcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkge1xuICBpZiAoX3R5cGVvZihpbnB1dCkgIT09IFwib2JqZWN0XCIgfHwgaW5wdXQgPT09IG51bGwpIHJldHVybiBpbnB1dDtcbiAgdmFyIHByaW0gPSBpbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAocHJpbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKF90eXBlb2YocmVzKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHJlcztcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b1ByaW1pdGl2ZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoXCIuL3RvUHJpbWl0aXZlLmpzXCIpO1xuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b1Byb3BlcnR5S2V5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yob2JqKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIi8vIFRPRE8oQmFiZWwgOCk6IFJlbW92ZSB0aGlzIGZpbGUuXG5cbnZhciBydW50aW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lXCIpKCk7XG5tb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG5cbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vcGFja2FnZXMvcnVudGltZS9ydW50aW1lLmpzI0w3MzY9XG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5jb25zdCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCA9IDMwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5SXNGb3JlZ3JvdW5kOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzRm9yZWdyb3VuZDogU3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSBfdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBwcml2YXRlIF9kb2N1bWVudEZvY3VzSW50ZXJ2YWw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9pc0ZvcmVncm91bmQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZCA9IG5ldyBSZWFkT25seVN1YmplY3QodGhpcy5faXNGb3JlZ3JvdW5kKTtcbiAgICB0aGlzLmRldGVjdFRhYkZvY3VzQ2hhbmdlKCk7XG4gIH1cblxuICBnZXQgaXNGb3JlZ3JvdW5kKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kO1xuICB9XG5cbiAgZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5fdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGRldGVjdFRhYkZvY3VzQ2hhbmdlKCk6IHZvaWQge1xuICAgIGxldCBoaWRkZW47XG4gICAgbGV0IHZpc2liaWxpdHlDaGFuZ2U7XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIER1ZSB0byB0eXBlc2NyaXB0IG5vdCBoYXZpbmcgYSBkZWZpbml0aW9uIGZvciAnbXNIaWRkZW4nIG9yICd3ZWJraXRIaWRkZW4nIHR5cGVzXG4gICAgLy8gUmVxdWlyZWQgdG8gQHRzLWlnbm9yZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQubXNIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnbXNIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICdtc3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LndlYmtpdEhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICd3ZWJraXRIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd3ZWJraXR2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC5oaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7IC8vIE9wZXJhIDEyLjEwIGFuZCBGaXJlZm94IDE4IGFuZCBsYXRlciBzdXBwb3J0XG4gICAgICBoaWRkZW4gPSAnaGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAndmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG5cbiAgICBjb25zdCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gIWRvY3VtZW50W2hpZGRlbl07XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudFtoaWRkZW5dICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG5cbiAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpc3RlbkZvckRvY3VtZW50Rm9jdXMuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvckRvY3VtZW50Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9IGRvY3VtZW50Lmhhc0ZvY3VzKCk7XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH0sIGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gbnVsbDtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzRm9yZWdyb3VuZCA9PT0gaXNGb3JlZ3JvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kLnZhbHVlID0gaXNGb3JlZ3JvdW5kO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCcm93c2VyRGV0ZWN0b3Ige1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXggPSAvKE1TSUV8KD8hR2Vja28uKylGaXJlZm94fCg/IUFwcGxlV2ViS2l0LitDaHJvbWUuKylTYWZhcml8KD8hQXBwbGVXZWJLaXQuKylDaHJvbWV8QXBwbGVXZWJLaXQoPyEuK0Nocm9tZXwuK1NhZmFyaSl8R2Vja28oPyEuK0ZpcmVmb3gpKSg/OiB8XFwvKShbXFxkLmFwcmVdKykvZztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWUgPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck1ham9yVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU2OSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNjkuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcwID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzEgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzIuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzUgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzYuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc3ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ny4nKTtcblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck5hbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU2OSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTY5O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc2O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgaXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICgvQW5kcm9pZHxpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8T3BlcmEgTWluaS9pKS50ZXN0KG5hdmlnYXRvcj8udXNlckFnZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUFuZFZlcnNpb24gPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgpO1xuXG4gICAgaWYgKGJyb3dzZXJOYW1lQW5kVmVyc2lvbiAmJiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF0pIHtcbiAgICAgIHJldHVybiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAoIWJyb3dzZXJOYW1lTGlzdCB8fCAhYnJvd3Nlck5hbWVMaXN0WzBdKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJyb3dzZXJOYW1lTGlzdFswXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpOiBudW1iZXIge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJWZXJzaW9uTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAoIWJyb3dzZXJWZXJzaW9uTGlzdCB8fCAhYnJvd3NlclZlcnNpb25MaXN0WzFdKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsVmVyc2lvbiA9IGJyb3dzZXJWZXJzaW9uTGlzdFsxXTtcblxuICAgIGlmICghZnVsbFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXIoZnVsbFZlcnNpb24uc3BsaXQoJy4nKVswXSkgfHwgMDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgbXNpZSA9IHVzZXJBZ2VudC5pbmRleE9mKCdNU0lFICcpO1xuXG4gICAgaWYgKG1zaWUgPiAwKSB7XG4gICAgICAvLyBJRSAxMCBvciBvbGRlciA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcbiAgICAgIHJldHVybiBgSUUvJHtwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKG1zaWUgKyA1LCB1c2VyQWdlbnQuaW5kZXhPZignLicsIG1zaWUpKSwgMTApfWA7XG4gICAgfVxuXG4gICAgY29uc3QgdHJpZGVudCA9IHVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50LycpO1xuXG4gICAgaWYgKHRyaWRlbnQgPiAwKSB7XG4gICAgICAvLyBJRSAxMSA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB1c2VyQWdlbnQuaW5kZXhPZigncnY6Jyk7XG5cbiAgICAgIHJldHVybiBgSUUvJHtwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKHZlcnNpb24gKyAzLCB1c2VyQWdlbnQuaW5kZXhPZignLicsIHZlcnNpb24pKSwgMTApfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIge1xuICBnZXRTdHJpbmdWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSkgfHxcbiAgICAgIHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShgJHtuYW1lfS11cmktcGFyYW1ldGVyLW5hbWVgKSB8fFxuICAgICAgdGhpcy5kZWZhdWx0U3RyaW5nVmFsdWVbbmFtZV07XG4gIH1cblxuICBnZXRCb29sZWFuVmFsdWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gJ3RydWUnIHx8IHZhbHVlID09PSAnMScgfHwgdmFsdWUgPT09ICdPbic7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVGcm9tVXJpID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKGAke25hbWV9LXVyaS1wYXJhbWV0ZXItbmFtZWApO1xuXG4gICAgaWYgKHZhbHVlRnJvbVVyaSkge1xuICAgICAgcmV0dXJuIHZhbHVlRnJvbVVyaSA9PT0gJ3RydWUnIHx8IHZhbHVlRnJvbVVyaSA9PT0gJzEnIHx8IHZhbHVlRnJvbVVyaSA9PT0gJ09uJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0Qm9vbGVhblZhbHVlW25hbWVdID09PSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdFN0cmluZ1ZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZ30ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LW1ldHJpY3MtbGV2ZWwnOiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpLFxuICAgICAgJ3BoZW5peC1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jb25zb2xlLWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC10ZWxlbWV0cnktbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY2hhbm5lbC10b2tlbic6ICcnLFxuICAgICAgJ3BoZW5peC11cmknOiAnJyxcbiAgICAgICdwaGVuaXgtYmFzZS11cmknOiAnJ1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Qm9vbGVhblZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IGJvb2xlYW4gfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1za2lwLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1tb2JpbGUtZGV2aWNlcyc6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YVZhbHVlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbWV0YVtuYW1lPScke25hbWV9J11gKTtcblxuICAgIGlmICghbWV0YVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBtZXRhVmFsdWUuZ2V0QXR0cmlidXRlKCd2YWx1ZScpO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlVVJJUGFyYW1ldGVyTmFtZSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKTtcblxuICAgIGlmICghdmFsdWVVUklQYXJhbWV0ZXJOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLnNlYXJjaCkuZ2V0KHZhbHVlVVJJUGFyYW1ldGVyTmFtZSkgfHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIge1xuICBzdGF0aWMgZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkKSB7XG4gICAgICB0aGlzLmZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBmb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1F1ZXVlTWljcm90YXNrU3VwcG9ydGVkKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBvdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuXG4gICAgaW1nLnNyYyA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtuZXcgQXJyYXlCdWZmZXIoMTBlKzcpXSkpOyAvLyAxMDBNYiBvciBsZXNzIG9yIG1vcmUgZGVwZW5kaW5nIG9uIGFzIHlvdSB3aXNoIHRvIGZvcmNlL2ludm9rZSBHQyBjeWNsZSBydW5cbiAgICBpbWcub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5zcmMpO1xuXG4gICAgICBpbWcgPSBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV0d29ya01vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1N1cHBvcnRlZCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcnR0OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lZmZlY3RpdmVUeXBlOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpO1xuICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuICB9XG5cbiAgZ2V0IGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldCBydHQoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcnR0O1xuICB9XG5cbiAgZ2V0IGVmZmVjdGl2ZVR5cGUoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fZWZmZWN0aXZlVHlwZTtcbiAgfVxuXG4gIGdldCBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5kb3dubGluayB8fCBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5kb3dubGlua01heDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWZmZWN0aXZlVHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuICdVbmtub3duJztcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZWZmZWN0aXZlVHlwZSB8fCBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS50eXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSb3VuZFRyaXBUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJ0dDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGxpc3RlbmVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gICAgfTtcblxuICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0aXN0aWNzKCk6IHZvaWQge1xuICAgIHRoaXMuX3J0dC52YWx1ZSA9IHRoaXMuZ2V0Um91bmRUcmlwVGltZSgpO1xuICAgIHRoaXMuX2VmZmVjdGl2ZVR5cGUudmFsdWUgPSB0aGlzLmdldEVmZmVjdGl2ZVR5cGUoKTtcbiAgICB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS52YWx1ZSA9IHRoaXMuZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcblxuZXhwb3J0IGNsYXNzIFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtU2V0dXBMaXN0ZW5lcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldHJpY3NTZXJ2aWNlID0gU0RLLm1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX21ldHJpY1N1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdWNjZXNzKHN0cmVhbUlkKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQsIHN0cmVhbUlkKTtcbiAgfVxuXG4gIGZhaWwoKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRTdHJlYW1NZXRyaWMobWV0cmljVHlwZTogTWV0cmljc1R5cGUsIHN0cmVhbUlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21ldHJpY1N1Ym1pdHRlZCkge1xuICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNTdWJtaXR0ZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXR1cFRpbWUgPSBub3cgLSB0aGlzLl9zdGFydFRpbWU7XG4gICAgY29uc3QgbWV0cmljTmFtZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpY1R5cGUpLmdldE5hbWUoKTtcblxuICAgIHRoaXMubWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHNldHVwVGltZX0sXG4gICAgICBzdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFN0cmVhbSBtZXRyaWMgWyVzXSBpbiBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgbmV3IER1cmF0aW9ucyhzZXR1cFRpbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEVkZ2VUb2tlbiBmcm9tICcuL0VkZ2VUb2tlbic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4vRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmNvbnN0IGVkZ2VBdXRoVG9rZW5QcmVmaXggPSAnRElHRVNUOic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VBdXRoUGFyc2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFZGdlQXV0aFBhcnNlcicpO1xuXG4gIHN0YXRpYyBwYXJzZVRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogRWRnZVRva2VuIHtcbiAgICBpZiAoIXRoaXMuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdUb2tlbiBpcyBub3QgdmFsaWQgWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGF0b2IodG9rZW4uc3Vic3RyKGVkZ2VBdXRoVG9rZW5QcmVmaXgubGVuZ3RoKSk7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBKU09OLnBhcnNlKGRlY29kZWRUb2tlbik7XG5cbiAgICAgIGVkZ2VUb2tlbi50b2tlbiA9IEpTT04ucGFyc2UoZWRnZVRva2VuLnRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4oZWRnZVRva2VuKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcGFyc2UgdG9rZW4gdmFsdWUnLCBlKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4uc3RhcnRzV2l0aChlZGdlQXV0aFRva2VuUHJlZml4KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW50ZXJmYWNlIElUb2tlbiB7XG4gIHVyaTogVVJMIHwgbnVsbDtcbiAgY2FwYWJpbGl0aWVzOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElFZGdlVG9rZW4ge1xuICBhcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHRva2VuOiBJVG9rZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VUb2tlbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW46IElUb2tlbjtcblxuICBjb25zdHJ1Y3RvcihlZGdlVG9rZW46IElFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbklkID0gZWRnZVRva2VuPy5hcHBsaWNhdGlvbklkIHx8ICcnO1xuICAgIHRoaXMuX3Rva2VuID0ge1xuICAgICAgdXJpOiBlZGdlVG9rZW4/LnRva2VuPy51cmkgPyBuZXcgVVJMKGVkZ2VUb2tlbi50b2tlbi51cmkpIDogbnVsbCxcbiAgICAgIGNhcGFiaWxpdGllczogZWRnZVRva2VuPy50b2tlbj8uY2FwYWJpbGl0aWVzIHx8IFtdXG4gICAgfTtcbiAgfVxuXG4gIGdldCB1cmkoKTogVVJMIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLnVyaTtcbiAgfVxuXG4gIGdldCBjYXBhYmlsaXRpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi5jYXBhYmlsaXRpZXM7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbklkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5kZWNsYXJlIGNvbnN0IF9fRkVBVFVSRVNfXzoge1xuICBzZW5kTG9jYWxDYW5kaWRhdGVzOiBib29sZWFuO1xuICBzZW5kTG9nczogTG9nZ2luZ0xldmVsVHlwZTtcbiAgc2VuZE1ldHJpY3M6IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nVG9Db25zb2xlOiBMb2dnaW5nTGV2ZWxUeXBlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRGZWF0dXJlcyB7XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBib29sZWFuO1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZExvZ3M6IExvZ2dpbmdMZXZlbFR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTWV0cmljczogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nVG9Db25zb2xlOiBMb2dnaW5nTGV2ZWxUeXBlO1xuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvZ3MoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2dzO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTWV0cmljcygpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTWV0cmljcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nVG9Db25zb2xlKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9sb2dUb0NvbnNvbGU7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGZWF0dXJlcygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmVhdHVyZXMgPSBfX0ZFQVRVUkVTX187XG5cbiAgICAgIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXMgPSAnc2VuZExvY2FsQ2FuZGlkYXRlcycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTG9jYWxDYW5kaWRhdGVzIDogdHJ1ZTtcbiAgICAgIHRoaXMuX3NlbmRMb2dzID0gJ3NlbmRMb2dzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRMb2dzIDogJ0FsbCc7XG4gICAgICB0aGlzLl9zZW5kTWV0cmljcyA9ICdzZW5kTWV0cmljcycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTWV0cmljcyA6ICdBbGwnO1xuICAgICAgdGhpcy5fbG9nVG9Db25zb2xlID0gJ2xvZ1RvQ29uc29sZScgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5sb2dUb0NvbnNvbGUgOiAnQWxsJztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3NlbmRMb2dzID0gJ0FsbCc7XG4gICAgICB0aGlzLl9zZW5kTWV0cmljcyA9ICdBbGwnO1xuICAgICAgdGhpcy5fbG9nVG9Db25zb2xlID0gJ0FsbCc7XG4gICAgfVxuICB9XG59XG5cbkJ1aWxkRmVhdHVyZXMuYXBwbHlGZWF0dXJlcygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmVhdHVyZUVuYWJsZW1lbnQge1xuICBzdGF0aWMgZ2V0IGNsaWVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2xpZW50IG9mZmVyIHdvcmtmbG93IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IGluIHRoZSBmb2xsb3dpbmcgYnJvd3NlcnNcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzQgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc1IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NiB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFkZFRyYW5jZWl2ZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDaHJvbWUgNjksIDcwLCA3MSwgNzIgZXhwb3NlcyBgYWRkVHJhbmNlaXZlcmAgYnV0IGl0IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzEgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBnZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY2O1xuICB9XG5cbiAgc3RhdGljIGdldCBnZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG9uVHJhY2tEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2MyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaG91bGRVc2VOYXRpdmVIbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaScgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhbXN1bmdCcm93c2VyJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNQcmVjYWNoaW5nRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lICE9PSAnSUUnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0ZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb25TdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgdHlwZW9mIGRvY3VtZW50Py5jcmVhdGVFbGVtZW50ID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1F1ZXVlTWljcm90YXNrU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uID49IDcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA+PSA2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc01vYmlsZSgpO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0luc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgdHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IgPT09ICd1bmRlZmluZWQnKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBSVENSdHBSZWNlaXZlcj8ucHJvdG90eXBlPy5jcmVhdGVFbmNvZGVkU3RyZWFtcyAhPT0gJ3VuZGVmaW5lZCc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19QQVJBTUVURVJTX186IHtcbiAgZGlzY292ZXJ5OiBJRGlzY292ZXJ5UGFyYW1ldGVyO1xufTtcblxuaW50ZXJmYWNlIElEaXNjb3ZlcnlQYXJhbWV0ZXJ7XG4gIGludGVudGlvbnM6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyYW1ldGVycyB7XG4gIHByaXZhdGUgc3RhdGljIF9kaXNjb3ZlcnlQYXJhbWV0ZXJzOiBJRGlzY292ZXJ5UGFyYW1ldGVyIDtcblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVBhcmFtZXRlcnMoKTogSURpc2NvdmVyeVBhcmFtZXRlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnM7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlQYXJhbWV0ZXJzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gX19QQVJBTUVURVJTX187XG5cbiAgICAgIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnMgPSAnZGlzY292ZXJ5JyBpbiBwYXJhbWV0ZXJzID8gcGFyYW1ldGVycy5kaXNjb3ZlcnkgOiB7aW50ZW50aW9uczogJyd9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnMgPSB7aW50ZW50aW9uczogJyd9O1xuICAgIH1cbiAgfVxufVxuXG5QYXJhbWV0ZXJzLmFwcGx5UGFyYW1ldGVycygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4vSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNwb3NhYmxlIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIF9kaXNwb3NlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGlzcG9zYWJsZTogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihkaXNwb3NhYmxlOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5fZGlzcG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlID0gZGlzcG9zYWJsZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3Bvc2FibGUuY2FsbCh0aGlzKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4vSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNwb3NhYmxlTGlzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3Q6IElEaXNwb3NhYmxlW10gPSBbXTtcblxuICBhZGQoZGlzcG9zYWJsZTogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LnB1c2goZGlzcG9zYWJsZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QuZm9yRWFjaChkaXNwb3NhYmxlID0+IGRpc3Bvc2FibGUuZGlzcG9zZSgpKTtcbiAgICB0aGlzLl9saXN0Lmxlbmd0aCA9IDA7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRGlzcG9zYWJsZUxpc3RbZGlzcG9zYWJsZXM9JHt0aGlzLl9saXN0Lmxlbmd0aH1dYDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5ncyB7XG4gIHN0YXRpYyByYW5kb20obGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhbmRvbTEzQ2hhcmFjdGVycyA9ICgpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygyLCAxNSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxvb3BzOiBudW1iZXIgPSBNYXRoLmNlaWwobGVuZ3RoIC8gMTMpO1xuXG4gICAgcmV0dXJuIG5ldyBBcnJheShsb29wcykuZmlsbChyYW5kb20xM0NoYXJhY3RlcnMpLnJlZHVjZSgoc3RyaW5nLCBmdW5jKSA9PiB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgZnVuYygpO1xuICAgIH0sICcnKS5zdWJzdHJpbmcoMCwgbGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmdzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFVucmVhY2hhYmxlKHg6IG5ldmVyKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgWyR7eH1dLiBUaGlzIHNob3VsZCBuZXZlciBiZSByZWFjaGVkYCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2VydFVucmVhY2hhYmxlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwZW5kZXJzIHtcbiAgcHJpdmF0ZSBfYXBwZW5kZXJzOiBBcnJheTxJQXBwZW5kZXI+ID0gW107XG5cbiAgZ2V0IHZhbHVlKCk6IEFycmF5PElBcHBlbmRlcj4ge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBhZGQoYXBwZW5kZXI6IElBcHBlbmRlcik6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycy5wdXNoKGFwcGVuZGVyKTtcbiAgfVxuXG4gIHJlbW92ZShhcHBlbmRlcik6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IHRoaXMuX2FwcGVuZGVycy5yZWR1Y2UoKGl0ZW1zLCBpdGVtKSA9PiB7XG4gICAgICBpZiAoIShpdGVtID09PSBhcHBlbmRlcikpIHtcbiAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH0sIFtdIGFzIEFycmF5PElBcHBlbmRlcj4pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uc29sZUFwcGVuZGVyIGltcGxlbWVudHMgSUFwcGVuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWw7XG5cbiAgbG9nKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChsb2dMZXZlbCA8IHRoaXMuX3RocmVzaG9sZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gYCR7ZGF0ZS50b0lTT1N0cmluZygpfSBbJHtjYXRlZ29yeX1dIFske0xvZ2dpbmdMZXZlbFtsb2dMZXZlbF19XSAke21lc3NhZ2V9YDtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICBjb25zb2xlLmxvZyhmdWxsTWVzc2FnZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGZ1bGxNZXNzYWdlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuXG5leHBvcnQgZW51bSBMb2dnaW5nTGV2ZWwge1xuICBBbGwgPSAtMSxcbiAgVHJhY2UgPSAxMCxcbiAgRGVidWcgPSAyMCxcbiAgSW5mbyA9IDMwLFxuICBXYXJuID0gNDAsXG4gIEVycm9yID0gNTAsXG4gIEZhdGFsID0gNjAsXG4gIE9mZiA9IDEwMCxcbn1cblxuZXhwb3J0IHR5cGUgTG9nZ2luZ0xldmVsVHlwZSA9ICdPZmYnIHwgJ1RyYWNlJyB8ICdEZWJ1ZycgfCAnSW5mbycgfCAnV2FybicgfCAnRXJyb3InIHwgJ0ZhdGFsJyB8ICdBbGwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jYXRlZ29yeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBlbmRlcnM6IEFwcGVuZGVycztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkO1xuXG4gIGdldCBjYXRlZ29yeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jYXRlZ29yeTtcbiAgfVxuXG4gIGdldCBhcHBlbmRlcnMoKTogQXBwZW5kZXJzIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nVGhyZXNob2xkIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgdHJhY2UoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLlRyYWNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLlRyYWNlLCBhcmdzKTtcbiAgfVxuXG4gIGRlYnVnKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5EZWJ1Zykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5EZWJ1ZywgYXJncyk7XG4gIH1cblxuICBpbmZvKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5JbmZvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkluZm8sIGFyZ3MpO1xuICB9XG5cbiAgd2FybiguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5XYXJuLCBhcmdzKTtcbiAgfVxuXG4gIGVycm9yKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5FcnJvciwgYXJncyk7XG4gIH1cblxuICBmYXRhbCguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRmF0YWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRmF0YWwsIGFyZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2cobGV2ZWw6IG51bWJlciwgYXJnczogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzKTtcblxuICAgIHRoaXMuX2FwcGVuZGVycy52YWx1ZS5mb3JFYWNoKChhcHBlbmRlcjogSUFwcGVuZGVyKSA9PiB7XG4gICAgICBhcHBlbmRlci5sb2cobGV2ZWwsIG1lc3NhZ2UsIHRoaXMuY2F0ZWdvcnksIGRhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3M6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSBhcmdzWzBdO1xuICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAocmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mICYmIGFyZ3MubGVuZ3RoID4gMSAmJiBpbmRleCA+PSAwKSB7XG4gICAgICBpbmRleCA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZignJScsIGluZGV4KTtcblxuICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICBjb25zdCB0eXBlID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxLCBpbmRleCArIDIpO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgJyUnOlxuICAgICAgICAgICAgLy8gRXNjYXBlZCAnJSUnIHR1cm5zIGludG8gJyUnXG4gICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxKTtcbiAgICAgICAgICAgIGluZGV4Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAnJWQnIG9yICclcycgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2onOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAlaicgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMuc3RyaW5naWZ5KGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMSkge1xuICAgICAgYXJncyA9IGFyZ3MucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICsgMSA9PT0gYXJyYXkubGVuZ3RoICYmIGN1cnJlbnRWYWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgJ1xcbicgKyB0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZS5zdGFjayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyBgWyR7dGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUpfV1gO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaW5naWZ5KGFyZzogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBjYWNoZSA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgYXJnIGluc3RhbmNlb2YgRXJyb3IgPyB0aGlzLnRvU3RyaW5nKGFyZykgOiBhcmcsXG4gICAgICAgIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChjYWNoZS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICc8cmVjdXJzaXZlPic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhY2hlLnB1c2godmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgMlxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJ1tvYmplY3QgaW52YWxpZCBKU09OLnN0cmluZ2lmeV0nO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUFyZ3VtZW50KGFyZ3VtZW50OiBhbnksIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmc6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHRoaXMudG9TdHJpbmcoYXJndW1lbnQpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAyKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9TdHJpbmcoZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGRhdGEgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IHRvU3RyaW5nU3RyID0gJyc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9ICdbb2JqZWN0IGludmFsaWQgdG9TdHJpbmcoKV0nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvU3RyaW5nU3RyO1xuICB9XG5cbiAgY29uc3RydWN0b3IoY2F0ZWdvcnk6IHN0cmluZywgYXBwZW5kZXJzOiBBcHBlbmRlcnMsIHRocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCkge1xuICAgIHRoaXMuX2NhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gYXBwZW5kZXJzO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckRlZmF1bHRzIHtcbiAgc3RhdGljIGdldCBkZWZhdWx0TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRMb2dzXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsW0J1aWxkRmVhdHVyZXMubG9nVG9Db25zb2xlXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyLCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4vQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQge0lDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyfSBmcm9tICcuLi9kb20vSUNvbmZpZ3VyYXRpb25QYXJhbWF0ZXJSZWFkZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJGYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcnM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IElMb2dnZXJ9ID0ge307XG4gIHByaXZhdGUgc3RhdGljIF9hcHBlbmRlcnM6IEFwcGVuZGVycyA9IG5ldyBBcHBlbmRlcnMoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCA9IG5ldyBMb2dnaW5nVGhyZXNob2xkKCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uID0gbmV3IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTtcblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0TG9nZ2VyKGNhdGVnb3J5OiBzdHJpbmcpOiBJTG9nZ2VyIHtcbiAgICBpZiAodHlwZW9mIGNhdGVnb3J5ICE9PSAnc3RyaW5nJykge1xuICAgICAgY2F0ZWdvcnkgPSAnU0RLJztcbiAgICB9XG5cbiAgICBjb25zdCBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XTtcblxuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgIHJldHVybiBsb2dnZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldID0gbmV3IExvZ2dlcihjYXRlZ29yeSwgdGhpcy5fYXBwZW5kZXJzLCB0aGlzLl90aHJlc2hvbGQpO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dpbmdMZXZlbCgpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgnY29uc29sZScsIExvZ2dlckZhY3RvcnkuYXBwbHlDb25zb2xlTG9nZ2VyLmJpbmQodGhpcykpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgndGVsZW1ldHJ5JywgTG9nZ2VyRmFjdG9yeS5hcHBseVRlbGVtZXRyeUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5TG9nZ2luZ0xldmVsKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWxvZ2dpbmctbGV2ZWwnKTtcblxuICAgIGlmIChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKSB7XG4gICAgICB0aGlzLl90aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwobmFtZTogc3RyaW5nLCBhcHBseUFwcGVuZGVyOiAobGV2ZWw6IExvZ2dpbmdMZXZlbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZShgcGhlbml4LSR7bmFtZX0tbG9nZ2luZy1sZXZlbGApO1xuXG4gICAgaWYgKHBhcmFtZXRlclZhbHVlID09PSAnT2ZmJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFwcGx5QXBwZW5kZXIoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUNvbnNvbGVMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlUZWxlbWV0cnlMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gbGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5Mb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShsb2dnaW5nTGV2ZWw6IExvZ2dpbmdMZXZlbCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsKSB7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5PZmY6XG4gICAgICAgIHJldHVybiAnT2ZmJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLlRyYWNlOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkRlYnVnOlxuICAgICAgICByZXR1cm4gJ0RlYnVnJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkluZm86XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuV2FybjpcbiAgICAgICAgcmV0dXJuICdXYXJuJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkVycm9yOlxuICAgICAgICByZXR1cm4gJ0Vycm9yJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkZhdGFsOlxuICAgICAgICByZXR1cm4gJ0ZhdGFsJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkFsbDpcbiAgICAgICAgcmV0dXJuICdBbGwnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChsb2dnaW5nTGV2ZWxUeXBlOiBMb2dnaW5nTGV2ZWxUeXBlKTogTG9nZ2luZ0xldmVsIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnVHJhY2UnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLlRyYWNlO1xuICAgICAgY2FzZSAnRGVidWcnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkRlYnVnO1xuICAgICAgY2FzZSAnSW5mbyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgICAgIGNhc2UgJ1dhcm4nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLldhcm47XG4gICAgICBjYXNlICdFcnJvcic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRXJyb3I7XG4gICAgICBjYXNlICdGYXRhbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRmF0YWw7XG4gICAgICBjYXNlICdBbGwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ1RocmVzaG9sZCB7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbDtcblxuICBnZXQgdmFsdWUoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0VGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljVHlwZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3M6IE1ldHJpY3NUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKG1ldHJpY3M6IE1ldHJpY3NUeXBlKSB7XG4gICAgdGhpcy5fbWV0cmljcyA9IG1ldHJpY3M7XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE1ldHJpY3NUeXBlW3RoaXMuX21ldHJpY3NdO1xuICB9XG5cbiAgZ2V0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGhpcy5fbWV0cmljcykge1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5DaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TdGFsbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5CdWZmZXJpbmc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9tZXRyaWNzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4vVGVsZW1ldHJ5RGVmYXVsdCc7XG5cbmV4cG9ydCBlbnVtIFRlbGVtZXRyeUxldmVsIHtcbiAgT2ZmID0gMTAwLFxuICBFc3NlbnRpYWwgPSAxMCxcbiAgQWxsID0gLTFcbn1cblxuZXhwb3J0IHR5cGUgVGVsZW1ldHJ5TGV2ZWxUeXBlID0gJ09mZicgfCAnRXNzZW50aWFsJyB8ICdBbGwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gIHByaXZhdGUgX3VybCA9ICdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeS9tZXRyaWNzJztcbiAgcHJpdmF0ZSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCA9IFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsO1xuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IG1ldHJpY3NVcmwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICBtZXRyaWNzVXJsLnBhdGhuYW1lID0gbWV0cmljc1VybC5wYXRobmFtZSArICcvbWV0cmljcyc7XG5cbiAgICB0aGlzLl91cmwgPSBtZXRyaWNzVXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0IHRocmVzaG9sZCh0aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4uL3Nkay9UZWxlbWV0cnlVcmwnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4uL3Nkay9FbnZpcm9ubWVudCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4vVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NGYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlczoge1tjYXRlZ29yeTogc3RyaW5nXTogTWV0cmljc1NlcnZpY2V9ID0ge307XG5cbiAgc3RhdGljIGdldE1ldHJpY3NTZXJ2aWNlKHVybDogc3RyaW5nKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1cicpO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMpIHtcbiAgICAgIHJldHVybiBtZXRyaWNzU2VydmljZXM7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBuZXcgTWV0cmljc0NvbmZpZ3VyYXRpb24oKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IEVudmlyb25tZW50LmdldEVudmlyb25tZW50RnJvbVVybCh1cmwpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKFNESy50ZWxlbWV0cnlMZXZlbCk7XG5cbiAgICByZXR1cm4gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdID0gbmV3IE1ldHJpY3NTZXJ2aWNlKG1ldHJpY3NDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHN0YXRpYyBzZXRUZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBPYmplY3QudmFsdWVzKE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXMpO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcyAmJiBtZXRyaWNzU2VydmljZXMubGVuZ3RoKSB7XG4gICAgICBtZXRyaWNzU2VydmljZXMuZm9yRWFjaChtZXRyaWNzU2VydmljZSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICAgICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gdGVsZW1ldHJ5TGV2ZWw7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9nZ2VyRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuL01ldHJpY1R5cGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5jb25zdCByZXF1ZXN0U2l6ZUxpbWl0ID0gMTAyNDtcblxuaW50ZXJmYWNlIElWYWx1ZSB7XG4gIHN0cmluZz86IHN0cmluZztcbiAgdWludDY0PzogbnVtYmVyO1xuICBmbG9hdD86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElNZXRyaWNSZWNvcmQge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgbWV0cmljOiBzdHJpbmc7XG4gIHZhbHVlOiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU6IElWYWx1ZTtcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpYyB7XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZTtcbiAgdmFsdWU/OiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU/OiBJVmFsdWU7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIF9tZXRyaWNzOiBBcnJheTxJTWV0cmljUmVjb3JkPiA9IFtdO1xuICBwcml2YXRlIF9pc1NlbmRpbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgX2RvbWFpbiA9IGxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gIGNvbnN0cnVjdG9yKG1ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uID0gbWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIH1cblxuICBnZXQgbWV0cmljc0NvbmZpZ3VyYXRpb24oKTogTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobWV0cmljOiBJTWV0cmljKTogdm9pZCB7XG4gICAgY29uc3Qge3N0cmVhbUlkLCB2YWx1ZSwgcHJldmlvdXNWYWx1ZSwgcnVudGltZSwgcmVzb3VyY2UsIGtpbmR9ID0gbWV0cmljO1xuICAgIGNvbnN0IG1ldHJpY1R5cGUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWMubWV0cmljVHlwZSk7XG5cbiAgICBpZiAodGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID4gbWV0cmljVHlwZS5nZXRUZWxlbWV0cnlMZXZlbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpYzogbWV0cmljVHlwZS5nZXROYW1lKCksXG4gICAgICB2YWx1ZSxcbiAgICAgIHByZXZpb3VzVmFsdWUsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIHJ1bnRpbWUsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGtpbmRcbiAgICB9O1xuXG4gICAgdGhpcy5fbWV0cmljcy5wdXNoKG1ldHJpY1JlY29yZCk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXM6IEFycmF5PElNZXRyaWNSZWNvcmQ+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBtZXRyaWNzTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZmV0Y2godGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX21ldHJpY3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IG1ldHJpY3NNZXNzYWdlcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UoMCwgcmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICB0aGlzLl9tZXRyaWNzID0gdGhpcy5fbWV0cmljcy5zbGljZShyZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIE1ldHJpY3NUeXBlIHtcbiAgVGltZVRvRmlyc3RGcmFtZSxcbiAgQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgU3RhbGxlZCxcbiAgQnVmZmVyaW5nLFxuICBTZXR1cENvbXBsZXRlZCxcbiAgU2V0dXBGYWlsZWQsXG4gIFJvdW5kVHJpcFRpbWUsXG4gIERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LFxuICBOZXR3b3JrVHlwZSxcbiAgUmVzb2x1dGlvbkNoYW5nZWQsXG4gIEFwcGxpY2F0aW9uRm9yZWdyb3VuZCxcbiAgQXBwbGljYXRpb25CYWNrZ3JvdW5kXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1ldHJpY3NUeXBlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbCkge1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5PZmY6XG4gICAgICAgIHJldHVybiAnT2ZmJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsOlxuICAgICAgICByZXR1cm4gJ0Vzc2VudGlhbCc7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkFsbDpcbiAgICAgICAgcmV0dXJuICdBbGwnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbFR5cGU6IFRlbGVtZXRyeUxldmVsVHlwZSk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLk9mZjtcbiAgICAgIGNhc2UgJ0Vzc2VudGlhbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlICdBbGwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGVsZW1ldHJ5TGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeURlZmF1bHQge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsW0J1aWxkRmVhdHVyZXMuc2VuZE1ldHJpY3NdO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZUhhbmRsZXIgZnJvbSAnLi9Qcm9taXNlSGFuZGxlcic7XG5cbmNsYXNzIFByb21pc2Uge1xuICBfc3RhdGU6IG51bWJlcjtcbiAgX2hhbmRsZWQ6IGJvb2xlYW47XG4gIF92YWx1ZTogUHJvbWlzZTtcbiAgX2RlZmVycmVkczogQXJyYXk8UHJvbWlzZUhhbmRsZXI+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1pZ25vcmVcbiAgdGhlbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoY2FsbGJhY2spIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb21pc2VzIG11c3QgYmUgY29uc3RydWN0ZWQgdmlhIG5ldycpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ25vdCBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGUgPSAwO1xuICAgIHRoaXMuX2hhbmRsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBbXTtcblxuICAgIHRoaXMuZG9SZXNvbHZlKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGRvUmVzb2x2ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNhbGxiYWNrKFxuICAgICAgICB2YWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlamVjdChyZWFzb24pO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVzb2x2ZShuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzIGFzIFByb21pc2U7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUHJvbWlzZSBSZXNvbHV0aW9uIFByb2NlZHVyZTogaHR0cHM6Ly9naXRodWIuY29tL1Byb21pc2VzLWFwbHVzL1Byb21pc2VzLXNwZWMjdGhlLVByb21pc2UtcmVzb2x1dGlvbi1wcm9jZWR1cmVcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gcHJvbWlzZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBIFByb21pc2UgY2Fubm90IGJlIHJlc29sdmVkIHdpdGggaXQgc2VsZi4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1ZhbHVlICYmICh0eXBlb2YgbmV3VmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgY29uc3QgdGhlbiA9IG5ld1ZhbHVlLnRoZW47XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgIHByb21pc2UuX3N0YXRlID0gMztcbiAgICAgICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgIHByb21pc2UuZmluYWxlKCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBwcm9taXNlLmRvUmVzb2x2ZShmdW5jdGlvbigpOiB2b2lkIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgIHRoZW4uYXBwbHkobmV3VmFsdWUsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHJvbWlzZS5fc3RhdGUgPSAxO1xuICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIHByb21pc2UuZmluYWxlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZWplY3QobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0ZSA9IDI7XG4gICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLmZpbmFsZSgpO1xuICB9XG5cbiAgZmluYWxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gMiAmJiB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2hhbmRsZWQpIHtcbiAgICAgICAgICBQcm9taXNlLl91bmhhbmRsZWRSZWplY3Rpb24odGhpcy5fdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5fZGVmZXJyZWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0aGlzLmhhbmRsZSh0aGlzLl9kZWZlcnJlZHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX2RlZmVycmVkcyA9IG51bGw7XG4gIH1cblxuICBoYW5kbGUoZGVmZXJyZWQ6IFByb21pc2VIYW5kbGVyKTogdm9pZCB7XG4gICAgbGV0IHByb21pc2UgPSB0aGlzIGFzIFByb21pc2U7XG5cbiAgICB3aGlsZSAocHJvbWlzZS5fc3RhdGUgPT09IDMpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLl92YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDApIHtcbiAgICAgIHByb21pc2UuX2RlZmVycmVkcy5wdXNoKGRlZmVycmVkKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByb21pc2UuX2hhbmRsZWQgPSB0cnVlO1xuICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IHByb21pc2UuX3N0YXRlID09PSAxID8gZGVmZXJyZWQub25GdWxmaWxsZWQgOiBkZWZlcnJlZC5vblJlamVjdGVkO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAxKSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlc3VsdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2socHJvbWlzZS5fdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHJlc3VsdCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYWxsKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLmFsbCBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyKTtcblxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKFtdKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlbWFpbmluZyA9IGFyZ3MubGVuZ3RoO1xuICAgICAgY29uc3QgbWFuYWdlUmVzcG9uc2UgPSAoaSwgdmFsdWUpOiB2b2lkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgY29uc3QgdGhlbiA9IHZhbHVlLnRoZW47XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB0aGVuLmNhbGwoXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWUgPT4gbWFuYWdlUmVzcG9uc2UoaSwgdmFsdWUpLFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhcmdzW2ldID0gdmFsdWU7XG5cbiAgICAgICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYW5hZ2VSZXNwb25zZShpLCBhcmdzW2ldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyByZXNvbHZlKHZhbHVlKTogUHJvbWlzZSB7XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IFByb21pc2UpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiByZXNvbHZlKHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmVqZWN0KHZhbHVlKTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHJlamVjdCh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJhY2UoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UucmFjZSBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShhcnJbaV0pLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBfaW1tZWRpYXRlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKTtcbiAgfVxuXG4gIHN0YXRpYyBfdW5oYW5kbGVkUmVqZWN0aW9uKGVycm9yKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1Bvc3NpYmxlIFVuaGFuZGxlZCBQcm9taXNlIFJlamVjdGlvbjonLCBlcnJvcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgIH1cbiAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZVsnY2F0Y2gnXSA9IGZ1bmN0aW9uKG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ3RoZW4nXSA9IGZ1bmN0aW9uKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcigoKSA9PiBudWxsKTtcblxuICB0aGlzLmhhbmRsZShuZXcgUHJvbWlzZUhhbmRsZXIob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpKTtcblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10gPSBmdW5jdGlvbihjYWxsYmFjazogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIHZhbHVlID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiB2YWx1ZSksXG4gICAgcmVhc29uID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiBjb25zdHJ1Y3Rvci5yZWplY3QocmVhc29uKSlcbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb21pc2U7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZSBmcm9tICcuL1Byb21pc2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9taXNlSGFuZGxlciB7XG4gIG9uRnVsZmlsbGVkOiBGdW5jdGlvbjtcbiAgb25SZWplY3RlZDogRnVuY3Rpb247XG4gIHByb21pc2U6IFByb21pc2U7XG5cbiAgY29uc3RydWN0b3Iob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpIHtcbiAgICB0aGlzLm9uRnVsZmlsbGVkID0gdHlwZW9mIG9uRnVsZmlsbGVkID09PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiBudWxsO1xuICAgIHRoaXMub25SZWplY3RlZCA9IHR5cGVvZiBvblJlamVjdGVkID09PSAnZnVuY3Rpb24nID8gb25SZWplY3RlZCA6IG51bGw7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHtcbiAgYXVkaW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICB2aWRlb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIGxvY2FsT2ZmZXI6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSgpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlZDoge1xuICAgIGRpcmVjdGlvbj86IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uO1xuICAgIHBlZXJDb25uZWN0aW9uOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD47XG4gIH07XG5cbiAgc3RhdGljIGdldCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fcGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUHJlY2FjaGluZ0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UucHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwcmUtY2FjaGUgcGVlciBjb25uZWN0aW9uIG9mZmVyJywgZSkpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKTogUHJvbWlzZTx7IHBlZXJDb25uZWN0aW9uOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB8IHZvaWQ+OyBkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIH0+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSB7XG4gICAgICBkaXJlY3Rpb246ICdyZWN2b25seScsXG4gICAgICBwZWVyQ29ubmVjdGlvbjogUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoZGlyZWN0aW9uOiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiA9ICdyZWN2b25seScsIGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9IGZhbHNlKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+IHtcbiAgICBpZiAoUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgJiYgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQuZGlyZWN0aW9uID09PSBkaXJlY3Rpb24gJiYgIWVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcykge1xuICAgICAgY29uc3QgdmFsdWUgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5wZWVyQ29ubmVjdGlvbjtcblxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IHtlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXN9O1xuXG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fcGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pXG4gICAgICAudGhlbihhc3luYyBwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0FkZFRyYW5zY2VpdmVyO1xuICAgICAgICBsZXQgdmlkZW9UcmFuc2NlaXZlciwgYXVkaW9UcmFuc2NlaXZlcjtcblxuICAgICAgICBpZiAoc3VwcG9ydHNBZGRUcmFuc2NlaXZlcikge1xuICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcignYXVkaW8nLCB7ZGlyZWN0aW9ufSk7XG4gICAgICAgICAgdmlkZW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCd2aWRlbycsIHtkaXJlY3Rpb259KTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyLFxuICAgICAgICAgICAgdmlkZW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICAgIGxvY2FsT2ZmZXI6IGF3YWl0IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHVuZGVmaW5lZClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGRpcmVjdGlvbiA9PT0gJ3JlY3Zvbmx5JyA/IHtcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgIG9mZmVyVG9SZWNlaXZlVmlkZW86IHRydWVcbiAgICAgICAgfSA6IHt9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgIGxvY2FsT2ZmZXI6IGF3YWl0IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cblBlZXJDb25uZWN0aW9uU2VydmljZS5pbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25maWd1cmF0aW9uTWFuYWdlciB7XG4gIHN0YXRpYyB0cnVuY2F0ZUljZVNlcnZlcnMoY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdXJsczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDI7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgdXJsID0gY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdO1xuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICB1cmxzLnB1c2goY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICB1cmxzOiB1cmxzLFxuICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcblxuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU2RwUGFyc2VyIGZyb20gJy4vU2RwUGFyc2VyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGludGVyZmFjZSBJUnRjTW9uaXRvclN0YXRpc3RpYyB7XG4gIFtraW5kOiBzdHJpbmddOiBJUnRjU3RhdGlzdGljO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydCB7XG4gIHJlc3VsdDogKCkgPT4gSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW0gZXh0ZW5kcyBSVENTdGF0c1JlcG9ydCB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZXM6ICgpID0+IHN0cmluZ1tdO1xuICBzdGF0OiAobmFtZSkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNTdGF0aXN0aWMge1xuICBzc3JjPzogc3RyaW5nO1xuICBtZWRpYVR5cGU/OiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBieXRlc1JlY2VpdmVkPzogbnVtYmVyO1xuICBmcmFtZXNEZWNvZGVkPzogbnVtYmVyO1xuICBwYWNrZXRzTG9zdD86IG51bWJlcjtcbiAgcGFja2V0c1JlY2VpdmVkPzogbnVtYmVyO1xuICBjb2RlYz86IHN0cmluZztcbiAgZnBzPzogbnVtYmVyO1xuICByb3VuZFRyaXBUaW1lPzogbnVtYmVyO1xuICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbmNvbnN0IHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25uZWN0aW9uTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRWaWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZEF1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRjU3RhdGlzdGljOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RyYWNrc1RvTW9uaXRvcjogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IHBlZXJDb25uZWN0aW9uO1xuICAgIHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUgPSBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgIHRoaXMuX3RyYWNrc1RvTW9uaXRvciA9IG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLm1hcCh0cmFjayA9PiB0cmFjay5raW5kKSB8fCBbXTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5nZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCkge1xuICAgICAgICBjb25zdCBwYXJzZWRTRFAgPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRTRFAuYXVkaW9Db2RlYztcbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFNEUC52aWRlb0NvZGVjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWMoKTogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9ydGNTdGF0aXN0aWM7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXBkYXRlVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLnVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIDExIGRvZXNudCBoYXZlIGtpbmQgb3IgbWVkaWFUeXBlIHNvIHdlIG5lZWQgdG8gdGFrZSBpdCBmcm9tIHRoZSBpbmJvdW5kLXJ0cCBvYmplY3QgaWRcbiAgICBjb25zdCBnZXRLaW5kRm9yU2FmYXJpMTEgPSAoaXRlbSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKG51bGwpXG4gICAgICAudGhlbihzdGF0cyA9PiB7XG4gICAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG5cbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgICAgICAgIGxldCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICBzdGF0cy5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lKSB7XG4gICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUgKiAxMDAwO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2luYm91bmQtcnRwJykge1xuICAgICAgICAgICAgICBjb25zdCBraW5kID0gcmVwb3J0LmtpbmQgfHwgcmVwb3J0Lm1lZGlhVHlwZSB8fCBnZXRLaW5kRm9yU2FmYXJpMTEocmVwb3J0KTtcbiAgICAgICAgICAgICAgbGV0IGNvZGVjID0gJyc7XG5cbiAgICAgICAgICAgICAgc3RhdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gcmVwb3J0LmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX3RyYWNrc1RvTW9uaXRvci5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gcmVwb3J0LmJ5dGVzUmVjZWl2ZWQgfHwgMDtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0J5dGVzUmVjZWl2ZWQgPSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8uYnl0ZXNSZWNlaXZlZCA/PyAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzRGVsdGEgPSBieXRlcyAtIHByZXZpb3VzQnl0ZXNSZWNlaXZlZDtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lRGVsdGEgPSByZXBvcnQudGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LnRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICBjb25zdCBiaXRyYXRlID0gYnl0ZXNEZWx0YSAmJiB0aW1lRGVsdGEgPyBNYXRoLmZsb29yKDggKiBieXRlc0RlbHRhIC9cbiAgICAgICAgICAgICAgICAgIHRpbWVEZWx0YSAqIDEwMDApIDogMDtcblxuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0gPSB7XG4gICAgICAgICAgICAgICAgICBzc3JjOiByZXBvcnQuc3NyYyxcbiAgICAgICAgICAgICAgICAgIG1lZGlhVHlwZToga2luZCxcbiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogcmVwb3J0LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgIGJpdHJhdGUsXG4gICAgICAgICAgICAgICAgICBieXRlc1JlY2VpdmVkOiByZXBvcnQuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNMb3N0OiByZXBvcnQucGFja2V0c0xvc3QsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzUmVjZWl2ZWQ6IHJlcG9ydC5wYWNrZXRzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBjb2RlYzogY29kZWMgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShraW5kKSxcbiAgICAgICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5mcmFtZXNEZWNvZGVkO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBmcHMgPSAocmVwb3J0LmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAgICAgICAocnRjU3RhdGlzdGljc1traW5kXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAgICAgICAgIDEwMDA7XG5cbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZwcyddID0gZnBzID8gTWF0aC5yb3VuZChmcHMgKiAxMDApIC8gMTAwIDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWNMZWdhY3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzTGVnYWN5KCkudGhlbihzdGF0cyA9PiB7XG4gICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuXG4gICAgICBzdGF0cy5yZXN1bHQoKS5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgIHJlcG9ydC5uYW1lcygpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdnb29nUlRUJykge1xuICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5zdGF0KG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnc3NyYycpIHtcbiAgICAgICAgICBjb25zdCBtZWRpYVR5cGUgPSByZXBvcnQuc3RhdCgnbWVkaWFUeXBlJykudG9TdHJpbmcoKTtcblxuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXSA9IHt0aW1lc3RhbXA6IERhdGUubm93KCl9O1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnc3NyYyddID0gcmVwb3J0LnN0YXQoJ3NzcmMnKS50b1N0cmluZygpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnbWVkaWFUeXBlJ10gPSBtZWRpYVR5cGU7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydieXRlc1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgnYnl0ZXNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncGFja2V0c0xvc3QnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzTG9zdCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncGFja2V0c1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgncGFja2V0c1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydjb2RlYyddID0gcmVwb3J0LnN0YXQoJ2dvb2dDb2RlY05hbWUnKS50b1N0cmluZygpIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUobWVkaWFUeXBlKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3JvdW5kVHJpcFRpbWUnXSA9IHJvdW5kVHJpcFRpbWU7XG5cbiAgICAgICAgICBpZiAobWVkaWFUeXBlID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LnN0YXQoJ2ZyYW1lc0RlY29kZWQnKTtcbiAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnZnBzJ10gPSAocnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdLmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAocnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgIDEwMDAgfHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZWNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWM7XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2RwUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2RwOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0F1ZGlvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1ZpZGVvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNkcDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2RwID0gc2RwO1xuXG4gICAgY29uc3Qgc2RwU3BsaXRCeUxpbmVzID0gdGhpcy5fc2RwLnNwbGl0KC8oXFxyXFxufFxccnxcXG4pLyk7XG4gICAgY29uc3Qgc2RwU3BsaXRCeVRyYWNrcyA9IHRoaXMuX3NkcC5zcGxpdCgnbT0nKTtcblxuICAgIHRoaXMuX2F1ZGlvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ2F1ZGlvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl92aWRlb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCd2aWRlbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ2F1ZGlvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gICAgdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ3ZpZGVvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gIH1cblxuICBnZXQgYXVkaW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hdWRpb0NvZGVjO1xuICB9XG5cbiAgZ2V0IHZpZGVvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmlkZW9Db2RlYztcbiAgfVxuXG4gIGdldCBpc0F1ZGlvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgZ2V0IGlzVmlkZW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzVHJhY2tCeVR5cGVFbmFibGVkKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeVRyYWNrczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBzZHBTZWN0aW9uRm9yVHlwZSA9IHNkcFNwbGl0QnlUcmFja3MuZmluZChzZHBUcmFjayA9PiBzZHBUcmFjay5zdGFydHNXaXRoKHR5cGUpKTtcblxuICAgIGlmICghc2RwU2VjdGlvbkZvclR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXNkcFNlY3Rpb25Gb3JUeXBlLmluY2x1ZGVzKGBhPWluYWN0aXZlYCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q29kZWModHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5TGluZXM6IHN0cmluZyBbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgdXNlZENvZGVjTGluZSA9IHNkcFNwbGl0QnlMaW5lcy5maW5kKHNkcExpbmUgPT4gc2RwTGluZS5pbmNsdWRlcyhgYT1ydHBtYXA6JHtzZHBTcGxpdEJ5TGluZXMuZmluZChpID0+IGkuaW5jbHVkZXMoYG09JHt0eXBlfWApKS5zcGxpdCgnICcpWzNdfWApKTtcbiAgICBjb25zdCB1c2VkQ29kZWMgPSB1c2VkQ29kZWNMaW5lLnNwbGl0KCcgJylbMV07XG4gICAgY29uc3QgY29kZWNOYW1lID0gdXNlZENvZGVjLnNwbGl0KCcvJylbMF07XG5cbiAgICByZXR1cm4gY29kZWNOYW1lO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uLCB7UGVlckNvbm5lY3Rpb25FdmVudHN9IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IHtJTGVnYWN5UlRDU3RhdHNSZXBvcnR9IGZyb20gJy4vUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb24gaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignVmFuaWxsYVBlZXJDb25uZWN0aW9uJyk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBSVENQZWVyQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC53ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIGNsYXNzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGdldCBuYXRpdmUoKTogUlRDUGVlckNvbm5lY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgY3VycmVudExvY2FsRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGNvbm5lY3Rpb25TdGF0ZSgpOiBSVENQZWVyQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IGljZUNvbm5lY3Rpb25TdGF0ZSgpOiBSVENJY2VDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFGZWF0dXJlRW5hYmxlbWVudC5hZGRUcmFuY2VpdmVyRGlzYWJsZWQgJiYgdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT2ZmZXIob3B0aW9ucz86IFJUQ09mZmVyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlT2ZmZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQW5zd2VyKG9wdGlvbnM/OiBSVENBbnN3ZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVBbnN3ZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBzZXRMb2NhbERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhhc0NyeXB0byA9IGRlc2NyaXB0aW9uLnNkcD8ubWF0Y2goL2E9Y3J5cHRvOi9pKTtcblxuICAgIGlmIChoYXNDcnlwdG8pIHtcbiAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdTRFAgYT1jcnlwdG8gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGdldFNlbmRlcnMoKTogUlRDUnRwU2VuZGVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTZW5kZXJzKCk7XG4gIH1cblxuICBnZXRTdGF0cyhzZWxlY3Rvcj86IE1lZGlhU3RyZWFtVHJhY2sgfCBudWxsKTogUHJvbWlzZTxSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhzZWxlY3Rvcik7XG4gIH1cblxuICBnZXRTdGF0c0xlZ2FjeSgpOiBQcm9taXNlPElMZWdhY3lSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIC8vIElnbm9yZWQgZHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBsZWdhY3kgJ2dldFN0YXRzJyBtZXRob2QgdHlwZSBkZWZpbml0aW9uXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgJ2dldFN0YXRzJyBtZXRob2QgZm9yXG4gICAgICAvLyBDaHJvbWVAPD0gNjYgZGV0YWlsZWQgaGVyZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjI3ODE2XG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRUcmFuc2NlaXZlcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCk6IFJUQ1J0cFRyYW5zY2VpdmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIobmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRTdHJlYW0obWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogdm9pZCB7XG4gICAgbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFjayh0cmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb25maWd1cmF0aW9uKCk6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBzZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc2V0IG9udHJhY2soaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2sgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9udHJhY2soKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2s7XG4gIH1cblxuICBzZXQgb25pY2VjYW5kaWRhdGUoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNhbmRpZGF0ZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGU7XG4gIH1cblxuICBzZXQgb25jb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBzZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb247IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb24nO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSB7XG4gIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gbmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuL1N1YmplY3QnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkT25seVN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJqZWN0OiBTdWJqZWN0PFQ+O1xuXG4gIGNvbnN0cnVjdG9yKHN1YmplY3Q6IFN1YmplY3Q8VD4pIHtcbiAgICB0aGlzLl9zdWJqZWN0ID0gc3ViamVjdDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5jbGFzcyBEaXNwb3NhYmxlTGlzdGVuZXI8VD4gZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgY29uc3RydWN0b3IobGlzdGVuZXJzOiBBcnJheTxUPiwgbGlzdGVuZXI6IFQpIHtcbiAgICBzdXBlcigoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogQXJyYXk8KFQpID0+IHZvaWQ+O1xuICBwcml2YXRlIF92YWx1ZTogVDtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IFQpIHtcbiAgICBsZXQgY2hhbmdlZCA9IHRoaXMuX3ZhbHVlICE9PSB2YWx1ZTtcblxuICAgIGlmIChjaGFuZ2VkICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBjb21wYXJhYmxlID0gdmFsdWUgYXMgdW5rbm93biBhcyBJQ29tcGFyYWJsZTxUPjtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wYXJhYmxlLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjaGFuZ2VkID0gIWNvbXBhcmFibGUuZXF1YWxzKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgbGlzdGVuZXIodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgbGlzdGVuZXIodGhpcy5fdmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlTGlzdGVuZXI8KFQpID0+IHZvaWQ+KHRoaXMuX2xpc3RlbmVycywgbGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVudmlyb25tZW50IHtcbiAgc3RhdGljIGdldEVudmlyb25tZW50RnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICAgIHJldHVybiBiYXNlVVJMLm9yaWdpbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgU3RyaW5ncyBmcm9tICcuLi9sYW5nL1N0cmluZ3MnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi4vbG9nZ2VyL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5pbXBvcnQge0lDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyfSBmcm9tICcuLi9kb20vSUNvbmZpZ3VyYXRpb25QYXJhbWF0ZXJSZWFkZXInO1xuaW1wb3J0IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIGZyb20gJy4uL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuLi9ydGMvSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9FbnZpcm9ubWVudCc7XG5pbXBvcnQge0hsc1BsYXllclR5cGUsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9zdHJlYW1pbmcvU3RyZWFtVHlwZXMnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcblxuY29uc3QgcGFnZUxvYWRUaW1lID0gd2luZG93WydfX3BoZW5peFBhZ2VMb2FkVGltZSddIHx8IHdpbmRvd1snX19wYWdlTG9hZFRpbWUnXSB8fCBEYXRlLm5vdygpO1xuXG5pbnRlcmZhY2UgSUluaXRPcHRpb25zIHtcbiAgZGlzY292ZXJ5VXJpPzogc3RyaW5nO1xuICBwZWVyQ29ubmVjdGlvbkZhY3Rvcnk/OiBJUGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB0ZWxlbWV0cnlMZXZlbD86IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgY29uc29sZUxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbFR5cGU7XG4gIGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0/OiBib29sZWFuO1xuICBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZT86IGJvb2xlYW47XG4gIHdlYlBsYXllckxvYWRlcj86IChwbGF5ZXI6IFdlYlBsYXllclR5cGUpID0+IHZvaWQ7XG4gIHNoYWthUGxheWVyTG9hZGVyPzogKHBsYXllcjogU2hha2FUeXBlKSA9PiB2b2lkO1xuICBobHNKc0xvYWRlcj86IChwbGF5ZXI6IEhsc1BsYXllclR5cGUpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyB7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfd2ViUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc0pzTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Vudmlyb25tZW50OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeVVybDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSA4O1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5TGV2ZWw6IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+ID0gbmV3IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+KFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdChCdWlsZEZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdGVuYW5jeTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9jbGllbnRTZXNzaW9uSWQ6IHN0cmluZyA9IFN0cmluZ3MucmFuZG9tKDMyKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvYWRlZFRpbWVzdGFtcDogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU0RLJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pbml0aWFsaXplZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5SW5pdGlhbGl6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4oU0RLLl9pbml0aWFsaXplZCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seURpc2NvdmVyeVVyaTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4oRGlzY292ZXJ5VXJpLnVyaSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5KTtcblxuICBzdGF0aWMgZ2V0IHBhZ2VMb2FkVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogU3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbmFuY3koKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY2xpZW50U2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNESy5fY2xpZW50U2Vzc2lvbklkO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2FkZWRUaW1lc3RhbXAoKTogRGF0ZSB7XG4gICAgcmV0dXJuIFNESy5fbG9hZGVkVGltZXN0YW1wO1xuICB9XG5cbiAgc3RhdGljIGdldCBpbml0aWFsaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5SW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVVyaSgpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlEaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJQbGF5ZXJMb2FkZXIoKTogKFdlYlBsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93ZWJQbGF5ZXJMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthUGxheWVyTG9hZGVyKCk6IChTaGFrYVR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYVBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaGxzSnNMb2FkZXIoKTogKEhsc1BsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9obHNKc0xvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWV0cmljc1NlcnZpY2UoKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIHJldHVybiBTREsuX21ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlVcmwoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVsZW1ldHJ5VXJsO1xuICB9XG5cbiAgc3RhdGljIGdldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM7XG4gIH1cblxuICBzdGF0aWMgc2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMocmV0cmllc0Ftb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IHJldHJpZXNBbW91bnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKHRoaXMuX2xvZ2dlci50aHJlc2hvbGQudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJEZXRlY3RvcigpOiBCcm93c2VyRGV0ZWN0b3Ige1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3I7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBMb2dnZXJGYWN0b3J5LnRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgVVJMIHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyICYmIHRlbmFuY3kpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgdGVuYW5jeSB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKERpc2NvdmVyeVVyaS51cmkudmFsdWUpO1xuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBTREsuX21ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbWV0cmljcy1sZXZlbCcpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbChUZWxlbWV0cnlMZXZlbFt2YWx1ZV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWRUZWxlbWV0cnlMZXZlbCA9IFNESy5fdGVsZW1ldHJ5TGV2ZWwuc3Vic2NyaWJlKHRlbGVtZXRyeUxldmVsID0+IHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmV0cnkgb24gZmFpbHVyZSBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlTa2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXNGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LXNraXAtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLW1vYmlsZS1kZXZpY2VzJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1NraXAgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIG1vYmlsZSBkZXZpY2VzIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKGNoYW5uZWxUb2tlbik7XG5cbiAgICAgIFNESy5fdGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5O1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LXVyaScpO1xuXG4gICAgaWYgKHVyaVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpVmFsdWU7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVVSSVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWJhc2UtdXJpJyk7XG5cbiAgICBpZiAoYmFzZVVSSVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gYCR7YmFzZVVSSVZhbHVlfS9wY2FzdC9lbmRQb2ludHNgO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtYmFzZS11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGluaXQob3B0aW9ucz86IElJbml0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbmV3IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpc2NvdmVyeVVyaSkge1xuICAgICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gb3B0aW9ucy5kaXNjb3ZlcnlVcmk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeSkge1xuICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlID0gb3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRlbGVtZXRyeUxldmVsICYmIFRlbGVtZXRyeUxldmVsW29wdGlvbnMudGVsZW1ldHJ5TGV2ZWxdKSB7XG4gICAgICAgIFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5sb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci50aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmxvZ2dpbmdMZXZlbCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICYmXG4gICAgICAgIExvZ2dpbmdMZXZlbFtvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIGNvbnN0IGNvbnNvbGVBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIENvbnNvbGVBcHBlbmRlcik7XG5cbiAgICAgICAgaWYgKGNvbnNvbGVBcHBlbmRlcikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKGNvbnNvbGVBcHBlbmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICE9PSAnT2ZmJykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3dlYlBsYXllckxvYWRlciA9IG9wdGlvbnMud2ViUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9zaGFrYVBsYXllckxvYWRlciA9IG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX2hsc0pzTG9hZGVyID0gb3B0aW9ucy5obHNKc0xvYWRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5kaXNwb3NlKCk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gIFNESy5kaXNwb3NlKCk7XG59KTtcblxuU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuaW5pdCgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlVcmwge1xuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYmFzZVVSTC5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgICBzd2l0Y2ggKGJhc2VVUkwucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnd3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHA6JztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3c3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHBzOic7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAyIHx8XG4gICAgICAgICAgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMyAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAyXS5sZW5ndGggPD0gMiAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5sZW5ndGggPD0gMylcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50cy51bnNoaWZ0KCd0ZWxlbWV0cnknKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnc3RnLScpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctc3RnJykgfHwgc2VnbWVudHNbMF0uaW5jbHVkZXMoJy1zdGctJykgfHwgc2VnbWVudHNbMF0gPT09ICdzdGcnKSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeS1zdGcnO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdsb2NhbCcpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctbG9jYWwnKSkge1xuICAgICAgICAvLyBMZWF2ZSBVUkwgdW5jaGFuZ2VkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnknO1xuICAgICAgfVxuXG4gICAgICBiYXNlVVJMLmhvc3RuYW1lID0gc2VnbWVudHMuam9pbignLicpO1xuXG4gICAgICByZXR1cm4gYCR7YmFzZVVSTC5vcmlnaW59L3RlbGVtZXRyeWA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0cmF0ZVN0YXRlVHlwZSA9ICdLZWVwJyB8ICdSZXNldCc7XG5leHBvcnQgdHlwZSBCaXRyYXRlTW9kZVR5cGUgPSAnTm9ybWFsJyB8ICdGb3JjZScgfCAnUmVzZXQnO1xuXG5leHBvcnQgZW51bSBCaXRyYXRlU3RhdGUge1xuICBLZWVwLFxuICBSZXNldFxufVxuXG5leHBvcnQgZW51bSBCaXRyYXRlTW9kZSB7XG4gIE5vcm1hbCxcbiAgRm9yY2UsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlIHtcbiAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IG51bWJlcjtcbiAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVUeXBlO1xuICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVUeXBlO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi8uLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCBUb2tlbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9Ub2tlbkNvbnRleHQnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0LCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtLCBJRW5jb2RlZFN0cmVhbVNpbmssIENoYW5uZWxDb250ZXh0T3B0aW9uc30gZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IEluc2VydGFibGVTdHJlYW1zIGZyb20gJy4uL3N0cmVhbWluZy9JbnNlcnRhYmxlU3RyZWFtcyc7XG5cbmNvbnN0IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiA9ICdjbGllbnQ6dGVybWluYXRpb24nO1xuY29uc3QgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMgPSAzMDAwO1xuY29uc3Qgc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMTUwMDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT47XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbCBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NoYW5uZWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW5Db250ZXh0OiBUb2tlbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlQ29udGV4dDogU3RhdGVDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVZpZGVvRWxlbWVudDogUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuOiBSZWFkT25seVN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb246IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YXRlOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvTXV0ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvUGF1c2VkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW5FeHBpcmluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dGhvcml6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlPbmxpbmU6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMb2FkaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGxheWluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YW5kYnk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdG9wcGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VGFyZ2V0TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlCaXRyYXRlTGltaXQ6IFJlYWRPbmx5U3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSZXNvbHV0aW9uOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlGYWlsdXJlQ291bnQ6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUVuZFBvaW50OiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJ0Y1N0YXRpc3RpY3M6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TWVkaWFTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT47XG5cbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uVGVsZW1ldHJ5OiBTZXNzaW9uVGVsZW1ldHJ5O1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXI6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgb3B0aW9ucz86IENoYW5uZWxPcHRpb25zKSB7XG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbENvbnRleHRPcHRpb25zOiBDaGFubmVsQ29udGV4dE9wdGlvbnMgPSB7XG4gICAgICB0YXJnZXRMYWc6IG9wdGlvbnM/LnRhcmdldExhZyxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBvcHRpb25zPy5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rLFxuICAgICAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogb3B0aW9ucz8uZW5jb2RlZEF1ZGlvU3RyZWFtU2luayxcbiAgICAgIGhhc0luc2VydGFibGVTdHJlYW1zOiBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKVxuICAgIH07XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQgPSBuZXcgVG9rZW5Db250ZXh0KHRva2VuKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IG5ldyBDaGFubmVsQ29udGV4dChjaGFubmVsQ29udGV4dE9wdGlvbnMpO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IG5ldyBQZWVyQ29ubmVjdGlvbkNvbnRleHQoKTtcbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQgPSBuZXcgU3RhdGVDb250ZXh0KCk7XG4gICAgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmID0gbmV3IEV4cG9uZW50aWFsQmFja29mZigpO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3JlYWRPbmx5VmlkZW9FbGVtZW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxIVE1MVmlkZW9FbGVtZW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuKTtcbiAgICB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGF0ZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5T25saW5lID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUpO1xuICAgIHRoaXMuX3JlYWRPbmx5TG9hZGluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlQbGF5aW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YW5kYnkgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RvcHBlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUxhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdCk7XG4gICAgdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlFbmRQb2ludCA9IG5ldyBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50KTtcbiAgICB0aGlzLl9yZWFkT25seVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtKTtcbiAgICB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzKTtcbiAgICB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuICAgIHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkgPSBuZXcgU2Vzc2lvblRlbGVtZXRyeShTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5KTtcbiAgICB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIgPSB0aGlzLmhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkLmJpbmQodGhpcyk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnN1YnNjcmliZSh2aWRlb0VsZW1lbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS5zdWJzY3JpYmUoc3RyZWFtID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy52aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkgPSBuZXcgVmlkZW9UZWxlbWV0cnkodGhpcy5zdHJlYW1JZCwgU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodGhpcy52aWRlb0VsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh0aGlzLnZpZGVvRWxlbWVudCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5TdG9wcGVkKSB7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5yZXN0YXJ0QWZ0ZXJTdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIH0sIGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi5zdWJzY3JpYmUocmVzb2x1dGlvbiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSkge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5Lm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhyZXNvbHV0aW9uLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC5zdWJzY3JpYmUoYml0cmF0ZUxpbWl0ID0+IHtcbiAgICAgICAgaWYgKGJpdHJhdGVMaW1pdCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgYml0cmF0ZUxpbWl0LFxuICAgICAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgICAgICBCaXRyYXRlTW9kZS5Ob3JtYWxcbiAgICAgICAgICApXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZGVzdHJveVN0cmVhbU9uVW5tb3VudCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW1PblVubW91bnQodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCAnY2xpZW50OnRlcm1pbmF0aW9uLW9uLXdpbmRvdy11bmxvYWQnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHZpZGVvRWxlbWVudCgpOiBIVE1MVmlkZW9FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuICB9XG5cbiAgc2V0IHZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSA9IHZpZGVvRWxlbWVudDtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLnJlc29sdXRpb24udmFsdWUud2lkdGggIT09IHZpZGVvRWxlbWVudC52aWRlb1dpZHRoIHx8IHRoaXMucmVzb2x1dGlvbi52YWx1ZS5oZWlnaHQgIT09IHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gbmV3IERpbWVuc2lvbih2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCwgdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IERpbWVuc2lvbi5lbXB0eTtcbiAgICB9XG4gIH1cblxuICBnZXQgdG9rZW4oKTogRW5jb2RlZEVkZ2VUb2tlbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSA9IHRva2VuO1xuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSk7XG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3kgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSA9IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2luc2VydGFibGUtc3RyZWFtcycpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHBlZXJDb25uZWN0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhdGU7XG4gIH1cblxuICBnZXQgYXV0b011dGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkO1xuICB9XG5cbiAgZ2V0IGF1dG9QYXVzZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkO1xuICB9XG5cbiAgZ2V0IHRva2VuRXhwaXJpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nO1xuICB9XG5cbiAgZ2V0IGF1dGhvcml6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkO1xuICB9XG5cbiAgZ2V0IG9ubGluZSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU9ubGluZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TG9hZGluZztcbiAgfVxuXG4gIGdldCBwbGF5aW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGxheWluZztcbiAgfVxuXG4gIGdldCBzdGFuZGJ5KCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhbmRieTtcbiAgfVxuXG4gIGdldCBzdG9wcGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RvcHBlZDtcbiAgfVxuXG4gIGdldCB0YXJnZXRMYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnO1xuICB9XG5cbiAgZ2V0IGxhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMYWc7XG4gIH1cblxuICBnZXQgYml0cmF0ZUxpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHJlc29sdXRpb24oKTogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJlc29sdXRpb247XG4gIH1cblxuICBnZXQgZmFpbHVyZUNvdW50KCk6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQ7XG4gIH1cblxuICBnZXQgZW5kUG9pbnQoKTogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQ7XG4gIH1cblxuICBnZXQgc3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RyZWFtO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkO1xuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpY3MoKTogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcztcbiAgfVxuXG4gIGdldCBtZWRpYVN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHNldEJpdHJhdGVMaW1pdChiaXRyYXRlTGltaXQ6IEJpdHNQZXJTZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSBiaXRyYXRlTGltaXQ7XG4gIH1cblxuICBjbGVhckJpdHJhdGVMaW1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kID0gMDtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgQml0cmF0ZU1vZGUuUmVzZXRcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVUYXJnZXRMYWcobGFnOiBNaWxsaXNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZy52YWx1ZSA9IGxhZztcbiAgfVxuXG4gIGFzeW5jIHN0b3AocmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy5zdWJzY3JpYmUoaXNTdGFydGluZyA9PiB7XG4gICAgICAgIGlmICghaXNTdGFydGluZykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0b3AocmVhc29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKHJlYXNvbik7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICB9XG5cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBtdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdW5tdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9wKCdjbGllbnQ6Y2hhbm5lbC1kaXNwb3NlJykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXJpKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogVVJMIHtcbiAgICBjb25zdCB1cmwgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS51cmk7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZGlzY292ZXIgVVJJIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHN0YXJ0Jyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzU3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuOiBFbmNvZGVkRWRnZVRva2VuID0gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGhQYXJzZXIuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gSW5zZXJ0YWJsZVN0cmVhbXMudmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gSW5zZXJ0YWJsZVN0cmVhbXMudmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luaygndmlkZW8nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IEluc2VydGFibGVTdHJlYW1zLnZhbGlkYXRlRW5jb2RlZFN0cmVhbVNpbmsoJ2F1ZGlvJywgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICBjb25zdCBoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjayA9IHR5cGVvZiB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID09PSAnZnVuY3Rpb24nO1xuXG4gICAgICBpZiAoaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2sgJiYgIUZlYXR1cmVFbmFibGVtZW50LmlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdpbnNlcnRhYmxlLXN0cmVhbXMgZW5hYmxlZCwgYnV0IGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYSBTdHJlYW0gVHJhY2sgQVBJJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFzRW5jb2RlZFN0cmVhbVNpbmsgPSB0eXBlb2YgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJztcblxuICAgICAgaWYgKGhhc0VuY29kZWRTdHJlYW1TaW5rICYmICFGZWF0dXJlRW5hYmxlbWVudC5pc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ2luc2VydGFibGUtc3RyZWFtcyBlbmFibGVkLCBidXQgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcycpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjayAmJiBoYXNFbmNvZGVkU3RyZWFtU2luaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ2luc2VydGFibGUtc3RyZWFtcyBlbmFibGVkLCBidXQgZm91bmQgbXVsdGlwbGUgdHlwZXMgKE1lZGlhIFN0cmVhbSBUcmFjayBhbmQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKSBvZiBDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gY2FsbGJhY2sgZnVuY3Rpb25zJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCEoaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2sgfHwgaGFzRW5jb2RlZFN0cmVhbVNpbmspKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignaW5zZXJ0YWJsZS1zdHJlYW1zIGVuYWJsZWQsIGJ1dCBtaXNzaW5nIENyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbicpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhhc1N0cmVhbVRyYW5zZm9ybXNPclNpbmsgPSB0eXBlb2YgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJztcblxuICAgICAgaWYgKGhhc1N0cmVhbVRyYW5zZm9ybXNPclNpbmspIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKGBDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gY2FsbGJhY2sgZnVuY3Rpb24gZm91bmQsIGJ1dCBmZWF0dXJlIGlzIG5vdCBlbmFibGVkIHZpYSBpbnNlcnRhYmxlLXN0cmVhbXMgY2FwYWJpbGl0eWApO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6c3RhcnQnKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0VXJpKHRva2VuKTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gQ2hhbm5lbFN0YXRlLkVycm9yIHx8IHN0YXRlID09PSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZykge1xuICAgICAgICAgIERpc2NvdmVyeS5jbGVhckNhY2hlZENsb3Nlc3RFbmRwb2ludCh1cmkpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2s6ICgpID0+IFByb21pc2U8dm9pZD4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgICAgLy8gTmVlZCB0byBzZXQgaXNTdGFydGluZyB0byBmYWxzZSBhbmQgY2FsbCBoYW5kbGVTdHJlYW1GYWlsdXJlIGlmIHN0cmVhbSBtb25pdG9ycyBmb3VuZCBhbiBpc3N1ZVxuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0cmVhbVBsYXllciA9IFN0cmVhbUZhY3RvcnkuY3JlYXRlKHRva2VuLCB0aGlzLl9jaGFubmVsQ29udGV4dCwgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2spO1xuXG4gICAgaWYgKCFzdHJlYW1QbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtUGxheWVyLnN0YXJ0KFxuICAgICAgdXJpLFxuICAgICAgdG9rZW4sXG4gICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLFxuICAgICAgdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudC5iaW5kKHRoaXMpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLmZhaWwoKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUrKztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpjbGVhbnVwLWFmdGVyLWZhaWxlZC1zZXR1cCcpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IGNoYW5uZWwnLCBlKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZyB8fCAhU0RLLmF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgdGhpcy5nZXRSZXRyeUludGVydmFsKCkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN0YXJ0QWZ0ZXJTdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zdGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwbGF5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFtZWRpYVN0cmVhbSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJldHJ5SW50ZXJ2YWwoKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgICAgcmV0dXJuIHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgICAgLy8gRmlyc3QgYW5kIHNlY29uZCBhdHRlbXB0IGZhc3QsIGFmdGVyIHRoYXQgZXhwb25lbnRpYWwgd2l0aCBiYWNrb2ZmIGludGVydmFsXG4gICAgICAgIHJldHVybiB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU3RyZWFtRmFpbHVyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JldHJ5IHN0YXJ0IHdpdGggaW5pdGlhbCBzdGF0ZSBbJXNdIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSwgQ2hhbm5lbFN0YXRlW3RoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHVuYXV0aG9yaXplZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyByZXN0cmljdGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwbGF5aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGF1c2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIGludm9rZSBwbGF5KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gY29uZmlndXJhdGlvbiBlcnJvciwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbiA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZTtcblxuICAgIGlmIChwZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUuZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgcmVhc29uKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEZXN0cm95ZWQgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbScsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQgJiYgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNFbmNvZGVkU3RyZWFtU2luayA9IHR5cGVvZiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKCFoYXNFbmNvZGVkU3RyZWFtU2luaykge1xuICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuICAgIH1cblxuICAgIGNvbnN0IHBsYXlQcm9taXNlID0gdmlkZW9FbGVtZW50LnBsYXkoKTtcblxuICAgIGlmIChwbGF5UHJvbWlzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwbGF5UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgY29uc3QgaGFzQXVkaW9UcmFjayA9ICEhbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKHRyYWNrID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYWNrLmtpbmQgPT09ICdhdWRpbyc7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmID0gIVNESy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcblxuICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIHx8IHZpZGVvRWxlbWVudC5tdXRlZCB8fCAhaGFzQXVkaW9UcmFjaykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGF1c2VkIHZpZGVvIGFmdGVyIHBsYXkgZmFpbGVkLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQXVkaW9UcmFjaykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSBtdXRlZCB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZpZGVvRWxlbWVudC5wbGF5KClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBsYXllZCB2aWRlbyBhZnRlciBhdXRvIG11dGluZy4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkIHRvIHVubXV0ZS4nLCB0aGlzLnN0cmVhbUlkKTtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gQ2hhbm5lbFN0YXRlIHtcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nLFxuICBQYXVzZWQsXG4gIFBsYXlpbmcsXG4gIFJlY292ZXJpbmcsXG4gIFJlY29ubmVjdGluZyxcbiAgU3RhbmRCeSxcbiAgU3RvcHBlZCxcbiAgVW5hdXRob3JpemVkLFxuICBHZW9SZXN0cmljdGVkLFxuICBHZW9CbG9ja2VkLFxuICBVbnN1cHBvcnRlZEZlYXR1cmUsXG4gIENvbmZpZ3VyYXRpb25FcnJvcixcbiAgRXJyb3Jcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbFN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQ2hhbm5lbCwge0NoYW5uZWxPcHRpb25zfSBmcm9tICcuL0NoYW5uZWwnO1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm0sIElFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IHtNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG50eXBlIENyZWF0ZUNoYW5uZWxPcHRpb25zID0ge1xuICB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuO1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT47XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbHMge1xuICBzdGF0aWMgY3JlYXRlQ2hhbm5lbChvcHRpb25zOiBDcmVhdGVDaGFubmVsT3B0aW9ucyk6IENoYW5uZWwge1xuICAgIGlmICghU0RLLmluaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5uZWxPcHRpb25zOiBDaGFubmVsT3B0aW9ucyA9IHtcbiAgICAgIHRhcmdldExhZzogb3B0aW9ucy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRWaWRlb1N0cmVhbVNpbmssXG4gICAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBDaGFubmVsKG9wdGlvbnMudmlkZW9FbGVtZW50LCBvcHRpb25zLnRva2VuLCBjaGFubmVsT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbHMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtLCBTdWJzY3JpYmVTdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFQgPSBBdWRpb0RhdGEgfCBWaWRlb0ZyYW1lPiB7XG4gIChjaHVuazogVCwgY29udHJvbGxlcjogVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI8VD4pOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVuY29kZWRTdHJlYW1TaW5rPFQgPSBSVENFbmNvZGVkQXVkaW9GcmFtZSB8IFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB7XG4gIChjaHVuazogVCk6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPjtcbn1cblxuZXhwb3J0IHR5cGUgQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBudW1iZXI7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPjtcbiAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgc3RhdGU6IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgYXV0b011dGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRvUGF1c2VkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHBsYXlpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRhcmdldExhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGxhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGJpdHJhdGVMaW1pdDogU3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcmVzb2x1dGlvbjogU3ViamVjdDxEaW1lbnNpb24+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQ+O1xuICBzdHJlYW06IFN1YmplY3Q8SVN0cmVhbT47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPjtcbiAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENoYW5uZWxDb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucmVuZGVyZXJEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbEluaXRpYWxpemF0aW9uID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IG5ldyBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RhdGUgPSBuZXcgU3ViamVjdDxDaGFubmVsU3RhdGU+KENoYW5uZWxTdGF0ZS5TdGFydGluZyk7XG4gICAgdGhpcy5hdXRvTXV0ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRvUGF1c2VkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucGxheWluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMudGFyZ2V0TGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KG9wdGlvbnM/LnRhcmdldExhZyA/PyBkZWZhdWx0VGFyZ2V0TGFnKTtcbiAgICB0aGlzLmxhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPigwKTtcbiAgICB0aGlzLmJpdHJhdGVMaW1pdCA9IG5ldyBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+KDApO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG5ldyBTdWJqZWN0PERpbWVuc2lvbj4oRGltZW5zaW9uLmVtcHR5KTtcbiAgICB0aGlzLmZhaWx1cmVDb3VudCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgdGhpcy5lbmRQb2ludCA9IG5ldyBTdWJqZWN0PEVuZFBvaW50PihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPihudWxsKTtcbiAgICB0aGlzLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPSBvcHRpb25zPy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrO1xuICAgIHRoaXMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9IG9wdGlvbnM/LmVuY29kZWRWaWRlb1N0cmVhbVNpbms7XG4gICAgdGhpcy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID0gb3B0aW9ucz8uZW5jb2RlZEF1ZGlvU3RyZWFtU2luaztcbiAgICB0aGlzLmhhc0luc2VydGFibGVTdHJlYW1zID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oISFvcHRpb25zPy5oYXNJbnNlcnRhYmxlU3RyZWFtcyk7XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghc3RyZWFtKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW0uc3RyZWFtSWQ7XG4gIH1cblxuICBhcHBseVN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IHZvaWQge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgdGhpcy5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUrKztcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQudmFsdWUgJiYgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgfVxuICB9XG5cbiAgbWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhbmRCeTtcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkO1xuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uQ29udGV4dCB7XG4gIG1lZGlhU3RyZWFtOiBTdWJqZWN0PE1lZGlhU3RyZWFtPjtcbiAgcGVlckNvbm5lY3Rpb246IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubWVkaWFTdHJlYW0gPSBuZXcgU3ViamVjdDxNZWRpYVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvbiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRlQ29udGV4dCB7XG4gIGlzU3RhcnRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGlzRGlzcG9zZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pc1N0YXJ0aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuaXNEaXNwb3NlZCA9IGZhbHNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuQ29udGV4dCB7XG4gIHRva2VuOiBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+O1xuICB0b2tlbkV4cGlyaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKSB7XG4gICAgdGhpcy50b2tlbiA9IG5ldyBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+KHRva2VuKTtcbiAgICB0aGlzLnRva2VuRXhwaXJpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdERpc2NvdmVyeVVyaSA9ICdodHRwczovL3BjYXN0LnBoZW5peHJ0cy5jb20vcGNhc3QvZW5kUG9pbnRzJztcblxuZXhwb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVNb2RlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZU1vZGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSk6IEJpdHJhdGVNb2RlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlTW9kZSkge1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Ob3JtYWw6XG4gICAgICAgIHJldHVybiAnTm9ybWFsJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuRm9yY2U6XG4gICAgICAgIHJldHVybiAnRm9yY2UnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlTW9kZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVTdGF0ZSwgQml0cmF0ZVN0YXRlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZVN0YXRlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlKTogQml0cmF0ZVN0YXRlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlU3RhdGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLktlZXA6XG4gICAgICAgIHJldHVybiAnS2VlcCc7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlU3RhdGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IERpc2NvdmVyeVNlcnZpY2UgZnJvbSAnLi9EaXNjb3ZlcnlTZXJ2aWNlJztcblxuY29uc3QgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCA9IDYwMDAwO1xuXG5pbnRlcmZhY2UgSVBlclVSSUVuZHBvaW50IHsgW3g6IHN0cmluZ106IFByb21pc2U8RW5kUG9pbnQ+IH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBJUGVyVVJJRW5kcG9pbnQgPSB7fTtcblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaTogVVJMKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSkge1xuICAgICAgcmV0dXJuIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlTZXJ2aWNlID0gbmV3IERpc2NvdmVyeVNlcnZpY2UodXJpKTtcbiAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9IGRpc2NvdmVyeVNlcnZpY2UuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQoKTtcbiAgICBjb25zdCBpZ25vcmVkID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID09PSBjYWNoZWRWYWx1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgICAgIH1cbiAgICAgIH0sIGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwpO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FjaGVkVmFsdWU7XG4gIH1cblxuICBzdGF0aWMgY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQodXJpOiBVUkwpOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuXG5jb25zdCBkZWZhdWx0VGltZW91dCA9IDIwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0Rpc2NvdmVyeScpO1xuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX3VyaTogVVJMO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogVVJMKSB7XG4gICAgaWYgKCF1cmkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHVyaScpO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UodXJpLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKHVyaTogVVJMLCB0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPEVuZFBvaW50W10+IHtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHRpbWVvdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlzY292ZXJ5IHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5ib2R5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgd2l0aCBubyBkYXRhIFske3VybH1dYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNTdHJpbmcgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXNTdHJpbmcuc3BsaXQoJywnKTtcblxuICAgIHJldHVybiBlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IG5ldyBFbmRQb2ludChlbmRQb2ludCwgdGltZW91dCkpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQodGltZW91dDogbnVtYmVyID0gZGVmYXVsdFRpbWVvdXQpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gRGlzY292ZXJ5VXJpLmJ1aWxkRGlzY292ZXJ5VXJsKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXdhaXQgdGhpcy5kaXNjb3Zlck5lYXJieUVuZFBvaW50cyhuZXcgVVJMKHVybCksIHRpbWVvdXQpO1xuICAgIGxldCBmYWlsZWRSZXF1ZXN0cyA9IDA7XG4gICAgY29uc3QgcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoZmFpbGVkUmVxdWVzdHMgPj0gZW5kUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICByZWplY3QoYERpc2NvdmVyeSBvZiBbJHtlbmRQb2ludHMubGVuZ3RofV0gZW5kcG9pbnRzIGZyb20gWyR7dXJsfV0gZmFpbGVkLCBwcmV2ZW50aW5nIGl0IGZyb20gY29tcGxldGluZ2ApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGVuZFBvaW50ID0gYXdhaXQgUHJvbWlzZS5yYWNlKGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gZW5kUG9pbnRcbiAgICAgIC5waW5nKClcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBwaW5nIGVuZCBwb2ludCBbJXNdJywgZW5kUG9pbnQsIGUpO1xuXG4gICAgICAgIGZhaWxlZFJlcXVlc3RzKys7XG5cbiAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4odGltZSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyZWQgZW5kIHBvaW50IFslc10gd2l0aCB0aW1lIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpLCB0aW1lKTtcbiAgICAgICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgICAgICBydW50aW1lOiAobm93IC0gU0RLLnBhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lIHx8IDB9LFxuICAgICAgICAgIHJlc291cmNlOiBlbmRQb2ludC50b1N0cmluZygpLFxuICAgICAgICAgIGtpbmQ6ICdwaW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQ7XG4gICAgICB9KSkpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX0gZnJvbSAnLi4vZGVmYXVsdHMnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5VXJpIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Rpc2NvdmVyeVVyaTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPihkZWZhdWx0RGlzY292ZXJ5VXJpKTtcblxuICBzdGF0aWMgZ2V0IHVyaSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnlVcmkuX2Rpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZERpc2NvdmVyeVVybCh1cmk6IFVSTCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh1cmkudG9TdHJpbmcoKSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG4gICAgY29uc3QgaW50ZW50aW9ucyA9IFBhcmFtZXRlcnMuZGlzY292ZXJ5UGFyYW1ldGVycy5pbnRlbnRpb25zO1xuXG4gICAgdXJsLnNlYXJjaCA9IGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFtbJ3ZlcnNpb24nLCBzZGtWZXJzaW9uXSwgWydpbnRlbnRpb25zJywgaW50ZW50aW9uc10sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lID09PSAnLycpIHtcbiAgICAgIHVybC5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5VXJpIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5pbXBvcnQge1xuICBJU3Vic2NyaWJlUmVzcG9uc2UsXG4gIElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdFxufSBmcm9tICcuLi9hcGkvU3Vic2NyaWJlJztcbmltcG9ydCB7SVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCwgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9TZXRSZW1vdGVEZXNjcmlwdGlvbic7XG5pbXBvcnQge0lEZXN0cm95U3RyZWFtUmVxdWVzdCwgSURlc3Ryb3lTdHJlYW1SZXNwb25zZX0gZnJvbSAnLi4vYXBpL0Rlc3Ryb3lTdHJlYW0nO1xuaW1wb3J0IHtJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QsIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9BZGRJY2VDYW5kaWRhdGVzJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBQYXJhbWV0ZXJzIGZyb20gJy4uLy4uL2Vudmlyb25tZW50L1BhcmFtZXRlcnMnO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlLCBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgQml0cmF0ZU1vZGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZU1vZGVNYXBwaW5nJztcbmltcG9ydCBCaXRyYXRlU3RhdGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZVN0YXRlTWFwcGluZyc7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQge1xuICBJUHVibGlzaFJlc3BvbnNlLFxuICBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QsXG4gIElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCxcbiAgUHVibGlzaFN0YXR1c1xufSBmcm9tICcuLi9hcGkvUHVibGlzaCc7XG5cbmNvbnN0IGFwaVZlcnNpb24gPSA3O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpYmVTdGF0dXMgPSAnb2snIHwgJ25vLXN0cmVhbScgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFJlbW92ZVRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgRGVzdHJveVN0cmVhbVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW0ge1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpYmVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge1xuICBzdGF0dXM6IFB1Ymxpc2hTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufTtcblxuaW50ZXJmYWNlIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXM7XG4gIHNlc3Npb25EZXNjcmlwdGlvbj86IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmludGVyZmFjZSBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cztcbiAgb3B0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cztcbn1cblxuaW50ZXJmYWNlIElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRQb2ludCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFbmRQb2ludCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cmk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF9yb3VuZFRyaXBUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodXJpOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcikge1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICB0aGlzLl90aW1lb3V0ID0gdGltZW91dDtcblxuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmQgcG9pbnQgcmVxdWlyZXMgYSB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBFbmRQb2ludFt1cmk9JHt0aGlzLl91cml9XWA7XG4gIH1cblxuICBhc3luYyBwaW5nKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFBpbmdVcmwoKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYFBpbmcgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aGlzLl90aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdzdWJzY3JpYmUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgU3Vic2NyaWJlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc3Vic2NyaWJlIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHB1Ymxpc2gobmFtZTogc3RyaW5nLCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJUHVibGlzaFJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAncHVibGlzaCddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIGFwaVZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRob3V0T2ZmZXIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIG5ldyBFcnJvcihgUHVibGlzaCB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogUHVibGlzaFN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBwdWJsaXNoIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbTogSVN0cmVhbSwgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc2NyaXB0aW9uJywgJ3JlbW90ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZTogc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgIHNkcDogc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBuZXcgRXJyb3IoYFNldCByZW1vdGUgZGVzY3JpcHRpb24gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBsaW1pdEJpdHJhdGUoXG4gICAgc3RyZWFtOiBJU3RyZWFtLFxuICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyLFxuICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IEJpdHNQZXJTZWNvbmQsXG4gICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUsXG4gICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlLFxuICApOiBQcm9taXNlPElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnYml0cmF0ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZU1hcHBpbmcuY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGUpLFxuICAgICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZSlcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIG5ldyBFcnJvcihgU2V0IGxpbWl0IGJpdHJhdGUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IHNldCBsaW1pdCBiaXRyYXRlIHJlc3BvbnNlIFslc10gaW4gWyVzXSBtcycsIHN0YXR1cywgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4ge3N0YXR1c307XG4gIH1cblxuICBhc3luYyBhZGRJY2VDYW5kaWRhdGVzKHN0cmVhbTogSVN0cmVhbSwgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10sIGRpc2NvdmVyeUNvbXBsZXRlZDogYm9vbGVhbiwgb3B0aW9uczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2ljZScsICdjYW5kaWRhdGVzJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgY2FuZGlkYXRlcyxcbiAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBuZXcgRXJyb3IoYEFkZCBpY2UgY2FuZGlkYXRlcyB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGFkZCBJQ0UgY2FuZGlkYXRlcyByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW0oc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgRGVsZXRlIHN0cmVhbSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHN0cmVhbScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBkZXN0cm95IHN0cmVhbSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBkZXN0cm95U3RyZWFtUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW1PblVubW91bnQoc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghbmF2aWdhdG9yPy5zZW5kQmVhY29uKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5kZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVhc29uKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgbmF2aWdhdG9yLnNlbmRCZWFjb24odXJsLCBmb3JtRGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVXJsKHBhdGg6IHN0cmluZ1tdKTogVVJMIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgcGF0aEFzQXJyYXkgPSB1cmkucGF0aG5hbWUuc3BsaXQoJy8nKTtcblxuICAgIHBhdGhBc0FycmF5Lmxlbmd0aCA9IHBhdGhBc0FycmF5Lmxlbmd0aCAtIDE7XG5cbiAgICB1cmkucGF0aG5hbWUgPSBwYXRoQXNBcnJheS5jb25jYXQoLi4ucGF0aCkuam9pbignLycpO1xuXG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQaW5nVXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVyaS5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd0eXBlJywgJ2h0dHAnXSwgWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnaW50ZW50aW9ucycsIGludGVudGlvbnNdLCBbJ18nLCBgJHtEYXRlLm5vdygpfWBdXSkudG9TdHJpbmcoKX1gO1xuXG4gICAgcmV0dXJuIHVyaS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFB1Ymxpc2hTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTdWJzY3JpYmVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IERlc3Ryb3lTdHJlYW1TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU3Vic2NyaWJlUmVzcG9uc2U7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2U6IElTdWJzY3JpYmVSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLmxhZyA9IGRhdGEubGFnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElQdWJsaXNoUmVzcG9uc2U7XG4gICAgY29uc3QgcHVibGlzaFJlc3BvbnNlOiBJUHVibGlzaFJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHB1Ymxpc2hSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwdWJsaXNoUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IHtpY2VTZXJ2ZXJzOiBbXX07XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9IGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycykge1xuICAgICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgICB1cmxzOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJscyxcbiAgICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kgPSBjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kgPSBjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3k7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ0Y0NvbmZpZ3VyYXRpb247XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlOiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24gPSBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlOiBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEub3B0aW9ucykge1xuICAgICAgICBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2Uub3B0aW9ucyA9IGRhdGEub3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSURlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtOiBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2hhbm5lbFN0YXRlfSBmcm9tICcuLi9jaGFubmVscyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENodW5rZWRTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NodW5rZWRTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb25pdG9yRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfc3RyZWFtU3RhdGlzdGljczogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIHByaXZhdGUgX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcyk7XG4gIH1cblxuICBzdGFydCh1cmk6IFVSTCwgdG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZCB8IElEaXNwb3NhYmxlPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSlcbiAgICAgIC50aGVuKGVuZFBvaW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIG51bGwsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZmVyU2RwID0gY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHA7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgb3JpZ2luU3RhcnRUaW1lOiBEYXRlLm5vdygpIC0gbGFnICsgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDIsXG4gICAgICAgICAgbGFnXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIENodW5rZWRTdHJlYW1pbmcuc3RhcnQodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgb2ZmZXJTZHAsIG9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4ocGxheWVyID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGxheWVyO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDaHVua2VkU3RyZWFtaW5nIGZhaWxlZCcsIGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb25pdG9yKHBsYXllcjogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0cmVhbVN0YXRpc3RpY3MgPSBDaHVua2VkU3RyZWFtaW5nLmdldFN0YXRzKCk7XG5cbiAgICAgIGlmICh0aGlzLl9zdHJlYW1TdGF0aXN0aWNzICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQrKztcblxuICAgICAgICBpZiAodGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA+IDYpIHtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICBwbGF5ZXIuZGlzcG9zZSgpO1xuICAgICAgICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcyA9IG5ld1N0cmVhbVN0YXRpc3RpY3M7XG4gICAgICB0aGlzLm1vbml0b3IocGxheWVyKTtcbiAgICB9LCAxMDAwKTtcblxuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBXZWJQbGF5ZXIgZnJvbSAnLi9XZWJQbGF5ZXInO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IFNoYWthUGxheWVyIGZyb20gJy4vU2hha2FQbGF5ZXInO1xuaW1wb3J0IEhsc1BsYXllciBmcm9tICcuL0hsc1BsYXllcic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQge0hsc1BsYXllclR5cGUsIENodW5rZWRTdHJlYW1pbmdPcHRpb25zLCBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcywgU2hha2FUeXBlLCBXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcblxuZXhwb3J0IGNsYXNzIENodW5rZWRTdHJlYW1pbmcge1xuICBwcml2YXRlIHN0YXRpYyBfcGVuZGluZyA9IGZhbHNlO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzUGxheWVyOiBIbHNQbGF5ZXJUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfcGhlbml4V2ViUGxheWVyOiBXZWJQbGF5ZXJUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2E6IFNoYWthVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX29wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIHN0YXRpYyBfcGxheWVyOiBTaGFrYVBsYXllciB8IFdlYlBsYXllciB8IEhsc1BsYXllcjtcblxuICBzdGF0aWMgZ2V0IGhsc1BsYXllcigpOiBIbHNQbGF5ZXJUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5faGxzUGxheWVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBwaGVuaXhXZWJQbGF5ZXIoKTogV2ViUGxheWVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BoZW5peFdlYlBsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2EoKTogU2hha2FUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2hha2E7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgc3RhcnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucyk6IFByb21pc2U8SURpc3Bvc2FibGU+IHtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcblxuICAgIGlmICh0aGlzLl9obHNQbGF5ZXIgfHwgdGhpcy5fc2hha2EgfHwgdGhpcy5fcGhlbml4V2ViUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkZWQodmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHApO1xuICAgIH1cblxuICAgIGlmICghU0RLLndlYlBsYXllckxvYWRlciAmJiAhU0RLLnNoYWthUGxheWVyTG9hZGVyICYmICFTREsuaGxzSnNMb2FkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcGxheWVyIGlzIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFTREsud2ViUGxheWVyTG9hZGVyICYmICFTREsuc2hha2FQbGF5ZXJMb2FkZXIgJiYgIVNESy5obHNKc0xvYWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZC1mZWF0dXJlLCBhZGQgc3RyZWFtIHBsYXllcicpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGlmIChTREsuaGxzSnNMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy5obHNKc0xvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX2hsc1BsYXllciA9IHBsYXllcjtcblxuICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5sb2FkZWQodmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoU0RLLndlYlBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLndlYlBsYXllckxvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX3BoZW5peFdlYlBsYXllciA9IHBsYXllcjtcblxuICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5sb2FkZWQodmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoU0RLLnNoYWthUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsuc2hha2FQbGF5ZXJMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9zaGFrYSA9IHBsYXllcjtcblxuICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5sb2FkZWQodmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGxheWVyLmdldFN0YXRzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwbGF5KFBsYXllcjogdHlwZW9mIFdlYlBsYXllciB8IHR5cGVvZiBTaGFrYVBsYXllciB8IHR5cGVvZiBIbHNQbGF5ZXIsIHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpOiBJRGlzcG9zYWJsZSB7XG4gICAgY29uc3QgZGFzaE1hbmlmZXN0VXJsTWF0Y2ggPSBvZmZlclNkcC5tYXRjaCgvYT14LXBsYXlsaXN0OihbXlxcbl0qWy5dbXBkXFw/P1teXFxzXSopL20pO1xuICAgIGNvbnN0IGhsc01hbmlmZXN0VXJsTWF0Y2ggPSBvZmZlclNkcC5tYXRjaCgvYT14LXBsYXlsaXN0OihbXlxcbl0qWy5dbTN1OFxcPz9bXlxcc10qKS9tKTtcbiAgICBjb25zdCBtYW5pZmVzdFVybCA9IGRhc2hNYW5pZmVzdFVybE1hdGNoICYmIGRhc2hNYW5pZmVzdFVybE1hdGNoWzFdID8gZGFzaE1hbmlmZXN0VXJsTWF0Y2hbMV0gOiAnJztcbiAgICBjb25zdCBwbGF5bGlzdFVybCA9IGhsc01hbmlmZXN0VXJsTWF0Y2ggJiYgaGxzTWFuaWZlc3RVcmxNYXRjaFsxXSA/IGhsc01hbmlmZXN0VXJsTWF0Y2hbMV0gOiAnJztcblxuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHMgfHwgKHRoaXMuX2hsc1BsYXllciAmJiB0aGlzLl9obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKSkpIHtcbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBQbGF5ZXIodmlkZW9FbGVtZW50LCAnaGxzJywgc3RyZWFtSWQsIHBsYXlsaXN0VXJsLCBvcHRpb25zKTtcblxuICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KCk7XG5cbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXI7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbmV3IFBsYXllcih2aWRlb0VsZW1lbnQsICdkYXNoJywgc3RyZWFtSWQsIG1hbmlmZXN0VXJsLCBvcHRpb25zKTtcblxuICAgIHRoaXMuX3BsYXllci5zdGFydCgpO1xuXG4gICAgcmV0dXJuIHRoaXMuX3BsYXllcjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGxvYWRlZCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcpOiBJRGlzcG9zYWJsZSB7XG4gICAgaWYgKCF0aGlzLl9zaGFrYSAmJiAhdGhpcy5fcGhlbml4V2ViUGxheWVyICYmICF0aGlzLl9obHNQbGF5ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KEhsc1BsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoV2ViUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3NoYWthKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KFNoYWthUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdPcHRpb25zLCBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge0lIbHNQbGF5ZXJUeXBlfSBmcm9tICcuL0lIbHNQbGF5ZXInO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIbHNQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSUhsc1BsYXllclR5cGU7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIpIHtcbiAgICAgIGlmIChDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllcih7XG4gICAgICAgICAgZW5hYmxlV29ya2VyOiB0cnVlLFxuICAgICAgICAgIG1heEJ1ZmZlckxlbmd0aDogMSxcbiAgICAgICAgICBsaXZlQmFja0J1ZmZlckxlbmd0aDogMCxcbiAgICAgICAgICBsaXZlU3luY0R1cmF0aW9uOiA3LFxuICAgICAgICAgIGxpdmVEdXJhdGlvbkluZmluaXR5OiB0cnVlLFxuICAgICAgICAgIGxpdmVNYXhMYXRlbmN5RHVyYXRpb246IEluZmluaXR5LFxuICAgICAgICAgIGhpZ2hCdWZmZXJXYXRjaGRvZ1BlcmlvZDogMVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmxvYWRTb3VyY2UodGhpcy5fbWFuaWZlc3RVUkkpO1xuICAgICAgICB0aGlzLl9wbGF5ZXIuYXR0YWNoTWVkaWEodGhpcy5fdmlkZW9FbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmNhblBsYXlUeXBlKCdhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCcpKSB7XG4gICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5zcmMgPSB0aGlzLl9tYW5pZmVzdFVSSTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIgJiYgQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKTtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAuMCxcbiAgICAgICAgbGFnOiAwLjAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHtcbiAgICAgIHdpZHRoOiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0V2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuX3BsYXllci5tZWRpYS5vZmZzZXRIZWlnaHQsXG4gICAgICBjdXJyZW50VGltZTogdGhpcy5fcGxheWVyLm1lZGlhLmN1cnJlbnRUaW1lLFxuICAgICAgbGFnOiAwLjAsXG4gICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGUsXG4gICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdJRExFJykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdFUlJPUicgfHwgdGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdFTkRFRCcpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnTE9BRElORycpIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlLmluY2x1ZGVzKCdXQUlUSU5HJykpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXSB8fCAwO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcblxuICAgIHN0YXRpc3RpY3MubGFnID0gTWF0aC5tYXgoMC4wLCAoY3VycmVudFRpbWUgKyAodGhpcy5fb3B0aW9ucy5sYWcgLyAxMDAwKSkgLSB0cnVlQ3VycmVudFRpbWUpO1xuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIgJiYgdGhpcy5fcGxheWVyLmRlc3Ryb3kpIHtcbiAgICAgIHRoaXMuX3BsYXllci5kZXN0cm95KCk7XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybSwgSUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5zZXJ0YWJsZVN0cmVhbXMge1xuICBzdGF0aWMgc2V0dXBFbmNvZGVkU3RyZWFtU2luayhzdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbmssIHRyYWNrOiBNZWRpYVN0cmVhbVRyYWNrLCByZWNlaXZlcjogUlRDUnRwUmVjZWl2ZXIpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogZnJhbWUgPT4gc3RyZWFtU2luayhmcmFtZSl9KTtcbiAgICBjb25zdCByZWNlaXZlclN0cmVhbXMgPSByZWNlaXZlci5jcmVhdGVFbmNvZGVkU3RyZWFtcygpO1xuICAgIGNvbnN0IHNvdXJjZSA9IHJlY2VpdmVyU3RyZWFtcy5yZWFkYWJsZTtcbiAgICBjb25zdCBzaW5rID0gcmVjZWl2ZXJTdHJlYW1zLndyaXRhYmxlO1xuXG4gICAgc291cmNlXG4gICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAucGlwZVRvKHNpbmspO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlRW5jb2RlZFN0cmVhbVNpbmsobW9kZTogJ2F1ZGlvJyB8ICd2aWRlbycsIGl0ZW06IElFbmNvZGVkU3RyZWFtU2luaykge1xuICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IEVuY29kZWQgU3RyZWFtIFNpbmsgZnVuY3Rpb24gdHlwZS4gRm91bmQgWyR7dHlwZW9mIGl0ZW19XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoICE9PSAxKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gRW5jb2RlZCBTdHJlYW0gU2luayBmdW5jdGlvbiBwYXJhbWV0ZXIgbGVuZ3RoLiBFeHBlY3RlZCAxLiBGb3VuZCBbJHtpdGVtLmxlbmd0aH1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICB2YWxpZGF0aW9uUmVzdWx0OiAnb2snXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBzZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0odHJhbnNmb3JtOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4sIHN0cmVhbTogTWVkaWFTdHJlYW0pIHtcbiAgICBjb25zdCB2aWRlb1RyYWNrID0gc3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF07XG5cbiAgICBpZiAodmlkZW9UcmFjaykge1xuICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm19KTtcbiAgICAgIGNvbnN0IHByb2Nlc3NvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yKHt0cmFjazogdmlkZW9UcmFja30pO1xuICAgICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3Ioe2tpbmQ6ICd2aWRlbyd9KTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHByb2Nlc3Nvci5yZWFkYWJsZTtcbiAgICAgIGNvbnN0IHNpbmsgPSBnZW5lcmF0b3Iud3JpdGFibGU7XG5cbiAgICAgIHNvdXJjZVxuICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG5cbiAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKGdlbmVyYXRvcik7XG4gICAgICBzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKS5mb3JFYWNoKGF1ZGlvVHJhY2sgPT4ge1xuICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhhdWRpb1RyYWNrKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdHJhbnNmb3JtZWRTdHJlYW07XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0oaXRlbTogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+KSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkIHZpZGVvIE1lZGlhIFN0cmVhbSBUcmFjayB0cmFuc2Zvcm0gZnVuY3Rpb24gdHlwZS4gRm91bmQgWyR7dHlwZW9mIGl0ZW19XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoICE9PSAyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkIHZpZGVvIE1lZGlhIFN0cmVhbSBUcmFjayB0cmFuc2Zvcm0gZnVuY3Rpb24gcGFyYW1ldGVyIGxlbmd0aC4gRXhwZWN0ZWQgMS4gRm91bmQgWyR7aXRlbS5sZW5ndGh9XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgdmFsaWRhdGlvblJlc3VsdDogJ29rJ1xuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0luc2VydGFibGVTdHJlYW1zIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZW51bSBOZXR3b3JrU3RhdGVzIHtcbiAgTmV0d29ya0VtcHR5LFxuICBOZXR3b3JrSWRsZSxcbiAgTmV0d29ya0xvYWRpbmcsXG4gIE5ldHdvcmtOb1NvdXJjZVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciBmcm9tICcuLi8uLi9kb20vR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXInO1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IHtTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBSdGNDb25uZWN0aW9uTW9uaXRvciBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi8uLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgZnJvbSAnLi4vLi4vcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyJztcbmltcG9ydCBQZWVyQ29ubmVjdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQnO1xuaW1wb3J0IEluc2VydGFibGVTdHJlYW1zIGZyb20gJy4vSW5zZXJ0YWJsZVN0cmVhbXMnO1xuXG5jb25zdCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCA9IDEwMDtcbmNvbnN0IGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQgPSAzMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhbFRpbWVTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1JlYWxUaW1lU3RyZWFtJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgY29uc3RydWN0b3IoY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gY2hhbm5lbENvbnRleHQ7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gcGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICAgIHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUgPSBoYW5kbGVTdHJlYW1GYWlsdXJlO1xuICB9XG5cbiAgc3RhcnQodXJpLCB0b2tlbiwgbGlzdGVuT25TdHJlYW1TZXR1cCwgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgPSB0eXBlb2YgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoJ3JlY3Zvbmx5JywgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKVxuICAgICAgICAudGhlbigoe2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvY2FsT2ZmZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvblxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgXSlcbiAgICAgIC50aGVuKChbZW5kUG9pbnQsIHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn1dKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0xvY2FsIG9mZmVyOlxcbicgKyBsb2NhbE9mZmVyLnNkcCk7XG5cbiAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBpZiAoU0RLLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgJiYgIShGZWF0dXJlRW5hYmxlbWVudC5pc01vYmlsZSAmJiBTREsuc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKSkge1xuICAgICAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICBsb2NhbE9mZmVyID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIGxvY2FsT2ZmZXIsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgcnRjQ29uZmlndXJhdGlvbiwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlSdGNDb25maWd1cmF0aW9uKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSwgcnRjQ29uZmlndXJhdGlvbilcbiAgICAgICAgICAudGhlbihwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgICAgICBsZXQgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQ7XG4gICAgICAgICAgICBsZXQgY2FuY2VsRGlzY292ZXJ5ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZGlzY292ZXJ5Q29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIVNESy5zZW5kTG9jYWxDYW5kaWRhdGVzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGUuY2FuZGlkYXRlICYmIGUuY2FuZGlkYXRlLmNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChlLmNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlzY292ZXJ5Q29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRDYW5kaWRhdGVzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5hZGRJY2VDYW5kaWRhdGVzKHN0cmVhbSwgY2FuZGlkYXRlcywgZGlzY292ZXJ5Q29tcGxldGVkKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoe3N0YXR1cywgb3B0aW9uc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVzKCdjYW5jZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBBZGRlZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdIGFuZCBvcHRpb25zIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2Ugc3RvcCBub3JtYWxseSB0aGUgcGVlciBjb25uZWN0aW9uIGlzIHVucmVnaXN0ZXJlZCBmaXJzdC5cbiAgICAgICAgICAgICAgICAvLyBUaHVzIGFueXRpbWUgd2Ugc2VlIGEgY2xvc2VkIHBlZXIgY29ubmVjdGlvbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpdCBpcyBhbiBlcnJvci5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgJ1slc10gRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlIGFmdGVyIHBlZXIgY29ubmVjdGlvbiBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHN3aXRjaCAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2hlY2tpbmcnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICduZXcnOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZGlzY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICAgICAgICAgICAgaWYgKG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCB0cnlpbmcgdG8gcmVjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAnY2xvc2VkJzpcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgcmV0cnlpbmcgdG8gY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuXG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub250cmFjayA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgc3RyZWFtID0gZS5zdHJlYW1zWzBdO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoZS50cmFjay5raW5kID09PSAndmlkZW8nICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgSW5zZXJ0YWJsZVN0cmVhbXMuc2V0dXBFbmNvZGVkU3RyZWFtU2luayh0aGlzLl9jaGFubmVsQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rLCBlLnRyYWNrLCBlLnJlY2VpdmVyKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS50cmFjay5raW5kID09PSAnYXVkaW8nICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgSW5zZXJ0YWJsZVN0cmVhbXMuc2V0dXBFbmNvZGVkU3RyZWFtU2luayh0aGlzLl9jaGFubmVsQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rLCBlLnRyYWNrLCBlLnJlY2VpdmVyKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBJbnNlcnRhYmxlU3RyZWFtcy5zZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaywgc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3IgPSBuZXcgUnRjQ29ubmVjdGlvbk1vbml0b3IocGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gNCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gVmlkZW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgodmlkZW9UcmFja0ZhaWxlZCB8fCBhdWRpb1RyYWNrRmFpbGVkKSAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmICghU0RLLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICBjb25zdCBpc0NsaWVudE9mZmVyRmxvdyA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uPy50eXBlID09PSAnb2ZmZXInO1xuXG4gICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIWlzQ2xpZW50T2ZmZXJGbG93XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVjb25uZWN0aW5nIHBlZXIgY29ubmVjdGlvbiBieSByZXN0YXJ0aW5nIElDRScpO1xuXG4gICAgICBjb25zdCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihjdXJyZW50TG9jYWxEZXNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG50eXBlIFNoYWthT3B0aW9ucyA9IHtcbiAgYWJyOiB7XG4gICAgZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiBudW1iZXI7XG4gIH07XG4gIG1hbmlmZXN0OiB7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgc3RyZWFtaW5nOiB7XG4gICAgcmVidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyaW5nR29hbDogbnVtYmVyO1xuICAgIGJ1ZmZlckJlaGluZDogbnVtYmVyO1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgICAgbWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgICAgIGJhY2tvZmZGYWN0b3I6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJU2hha2Ege1xuICBjb25maWd1cmU6IChvOiBTaGFrYU9wdGlvbnMpID0+IHZvaWQ7XG4gIGxvYWQ6ICh1cmk6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgZ2V0U3RhdHM6ICgpID0+IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzO1xuICBkZXN0cm95OiAoKSA9PiB2b2lkO1xuICB1bmxvYWQ6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYWthUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NoYWthUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJU2hha2E7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5zaGFrYSkge1xuICAgICAgY29uc3QgcGxheWVyT3B0aW9uczogU2hha2FPcHRpb25zID0ge1xuICAgICAgICBhYnI6IHtkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGU6IDIwMDAwMDB9LFxuICAgICAgICBtYW5pZmVzdDoge3JldHJ5UGFyYW1ldGVyczoge3RpbWVvdXQ6IDEwMDAwfX0sXG4gICAgICAgIHN0cmVhbWluZzoge1xuICAgICAgICAgIHJlYnVmZmVyaW5nR29hbDogMixcbiAgICAgICAgICBidWZmZXJpbmdHb2FsOiAxMCxcbiAgICAgICAgICBidWZmZXJCZWhpbmQ6IDMwLFxuICAgICAgICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgICAgICBtYXhBdHRlbXB0czogMTAsXG4gICAgICAgICAgICBiYWNrb2ZmRmFjdG9yOiAxLjFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBDaHVua2VkU3RyZWFtaW5nLnNoYWthLlBsYXllcih0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgdGhpcy5sb2FkUGxheWVyKHBsYXllck9wdGlvbnMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgICAgbGFnOiAwLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICAuLi50aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKSxcbiAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgbGFnOiAwXG4gICAgfTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXSB8fCAwO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcbiAgICBjb25zdCBsYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICAgIHN0YXRpc3RpY3MubGFnID0gbGFnO1xuXG4gICAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MucGxheVRpbWUgPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIudW5sb2FkKCk7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGxvYWRQbGF5ZXIocGxheWVyQ29uZmlnOiBTaGFrYU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuY29uZmlndXJlKHBsYXllckNvbmZpZyk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGxheWVyLmxvYWQodGhpcy5fbWFuaWZlc3RVUkkpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gREFTSCBsaXZlIHN0cmVhbSBoYXMgYmVlbiBsb2FkZWQnLCB0aGlzLl9zdHJlYW1JZCk7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQucGxheSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQucGxheSgpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEVycm9yIHdoaWxlIGxvYWRpbmcgREFTSCBsaXZlIHN0cmVhbSBbJXNdJywgdGhpcy5fc3RyZWFtSWQsIGUuY29kZSwgZSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQgQ2h1bmtlZFN0cmVhbSBmcm9tICcuL0NodW5rZWRTdHJlYW0nO1xuaW1wb3J0IFJlYWxUaW1lU3RyZWFtIGZyb20gJy4vUmVhbFRpbWVTdHJlYW0nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtaW5nJyk7XG5cbiAgc3RhdGljIGNyZWF0ZSh0b2tlbjogc3RyaW5nLCBjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogSVN0cmVhbSB7XG4gICAgY29uc3QgdG9rZW5DYXBhYmlsaXRpZXMgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS5jYXBhYmlsaXRpZXM7XG5cbiAgICBpZiAodG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3J0bXAnKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdTREsgZG9lcyBub3Qgc3VwcG9ydCBSVE1QIHBsYXliYWNrLicpO1xuICAgICAgY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRva2VuQ2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdzdHJlYW1pbmcnKSB8fCB0b2tlbkNhcGFiaWxpdGllcy5pbmNsdWRlcygnb24tZGVtYW5kJykpIHtcbiAgICAgIHJldHVybiBuZXcgQ2h1bmtlZFN0cmVhbShjaGFubmVsQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZWFsVGltZVN0cmVhbShjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyZWFtRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdPcHRpb25zLCBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbmNvbnN0IGJhbmR3aWR0aFRvU3RhcnRBdCA9IDMwMDAwMDA7IC8vIENvcnJlc3BvbmRzIHRvIDcyMHAgaW4gbW9zdCBzZXR1cHNcbmNvbnN0IG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkID0gMTUwMDA7XG5cbnR5cGUgRXZlbnRMaXN0ZW5lckZvcldlYlBsYXllciA9IChldnQ6IFdlYlBsYXllckV2ZW50KSA9PiB2b2lkO1xudHlwZSBXZWJQbGF5ZXJFdmVudCA9IHtcbiAgY29kZTogbnVtYmVyO1xuICBzZXZlcml0eTogbnVtYmVyO1xuICBlcnJvcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJV2ViUGxheWVyIHtcbiAgc3RhcnQ6ICh1cmw6IHN0cmluZykgPT4gdm9pZDtcbiAgYWRkRXZlbnRMaXN0ZW5lcihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyRm9yV2ViUGxheWVyKTogdm9pZDtcbiAgZGlzcG9zZSgpOiB2b2lkO1xuICBlcnJvcnM6IHtcbiAgICBzZXZlcml0eToge1xuICAgICAgUkVDT1ZFUkFCTEU6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1dlYlBsYXllcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSVdlYlBsYXllcjtcbiAgcHJpdmF0ZSBfbGFzdFJlbG9hZFRpbWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllcikge1xuICAgICAgY29uc3QgcGxheWVyT3B0aW9ucyA9IHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgYmFuZHdpZHRoVG9TdGFydEF0XG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuV2ViUGxheWVyKHRoaXMuX2xvZ2dlciwgdGhpcy5fdmlkZW9FbGVtZW50LCBwbGF5ZXJPcHRpb25zKTtcbiAgICAgIHRoaXMuX3BsYXllci5zdGFydCh0aGlzLl9tYW5pZmVzdFVSSSk7XG5cbiAgICAgIHRoaXMuX3BsYXllci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9yT2JqZWN0ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2FuUmVsb2FkKCkgJiYgZXJyb3JPYmplY3QgJiYgKGVycm9yT2JqZWN0LmNvZGUgPT09IDMgfHwgZXJyb3JPYmplY3Quc2V2ZXJpdHkgPT09IENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLmVycm9ycy5zZXZlcml0eS5SRUNPVkVSQUJMRSkpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gYWZ0ZXIgZXJyb3IgZXZlbnQgWyVqXScsIGVycm9yT2JqZWN0KTtcbiAgICAgICAgICB0aGlzLnJlbG9hZElmQWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcmVsb2FkIHdpdGggZXJyb3IgWyVqXScsIGVycm9yT2JqZWN0KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyICYmIENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLmlzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMC4wLFxuICAgICAgICBsYWc6IDAuMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZSxcbiAgICAgICAgZGF0YUJ1ZmZlcmVkOiAwLjBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHRoaXMuX3BsYXllci5nZXRTdGF0cygpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gc3RhdGlzdGljcy5jdXJyZW50VGltZSB8fCB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ107XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuaXNOYXRpdmUgJiYgc3RhdGlzdGljcy5kZWxpdmVyeVR5cGUgPT09ICdIbHMnKSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgLSBzdGF0aXN0aWNzLmxhZztcbiAgICB9XG5cbiAgICBpZiAoIXN0YXRpc3RpY3MuY3VycmVudFRpbWUpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICB9XG5cbiAgICBpZiAoIXN0YXRpc3RpY3MuaXNOYXRpdmUpIHtcbiAgICAgIHN0YXRpc3RpY3MubGFnID0gTWF0aC5tYXgoMC4wLCB0cnVlQ3VycmVudFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5wbGF5VGltZSA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci5kaXNwb3NlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgY2FuUmVsb2FkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkID0gIXRoaXMuX2xhc3RSZWxvYWRUaW1lIHx8IERhdGUubm93KCkgLSB0aGlzLl9sYXN0UmVsb2FkVGltZSA+IG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkO1xuXG4gICAgcmV0dXJuIHRoaXMuX3ZpZGVvRWxlbWVudCAmJiB0aGlzLl9wbGF5ZXIgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCAhPT0gMCAmJiBoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkSWZBYmxlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5SZWxvYWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIFJlbG9hZGluZyB1bmhlYWx0aHkgc3RyZWFtIHRoYXQgd2FzIGFjdGl2ZSBmb3IgYXQgbGVhc3QgWyVzXSBzZWNvbmRzJywgdGhpcy5fc3RyZWFtSWQsIG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIC8gMTAwMCk7XG5cbiAgICB0aGlzLl9sYXN0UmVsb2FkVGltZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19CVUlMRF9WRVJTSU9OX186IHN0cmluZztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVyc2lvbk1hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBfZGVmYXVsdFZlcnNpb24gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgc3RhdGljIGdldCBzZGtWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBfX0JVSUxEX1ZFUlNJT05fXztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZlcnNpb247XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5U2VydmljZSBmcm9tICcuL1RlbGVtZXRyeVNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuLi9sb2dnZXIvSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5QXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZWxlbWV0cnlTZXJ2aWNlOiBUZWxlbWV0cnlTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeTtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZDtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZDtcbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlID0gbmV3IFRlbGVtZXRyeVNlcnZpY2UodGVsZW1ldHJ5Q29uZmlndXJhdGlvbik7XG4gIH1cblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZS5wdXNoKGxvZ0xldmVsLCBtZXNzYWdlLCBjYXRlZ29yeSwgZGF0ZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L2xvZ3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHRlbGVtZXRyeVVybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIHRlbGVtZXRyeVVybC5wYXRobmFtZSA9IHRlbGVtZXRyeVVybC5wYXRobmFtZSArICcvbG9ncyc7XG5cbiAgICB0aGlzLl91cmwgPSB0ZWxlbWV0cnlVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0IHRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4vVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSA4MTkyO1xuXG5pbnRlcmZhY2UgSUxvZ0l0ZW0ge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBsZXZlbDogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuXG4gIHByaXZhdGUgX2xvZ3M6IEFycmF5PElMb2dJdGVtPiA9IFtdO1xuICBwcml2YXRlIF9pc1NlbmRpbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgX2RvbWFpbiA9IGxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCB0aW1lc3RhbXA6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBsb2dSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcC50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgbGV2ZWw6IExvZ2dpbmdMZXZlbFtsb2dMZXZlbF0sXG4gICAgICBjYXRlZ29yeSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpblxuICAgIH07XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHRoaXMuX2xvZ3MucHVzaChsb2dSZWNvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2dzLnVuc2hpZnQobG9nUmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9ncyhsb2dNZXNzYWdlczogQXJyYXk8SUxvZ0l0ZW0+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBsb2dNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9nc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9sb2dzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBudW1iZXJPZkxvZ3NUb1NlbmQgPSAwO1xuICAgIGxldCBzaXplT2ZMb2dzVG9TZW5kID0gMDtcblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBnZXRMb2dTaXplID0gKGxvZzogSUxvZ0l0ZW0pOiBudW1iZXIgPT4gT2JqZWN0LnZhbHVlcyhsb2cpXG4gICAgICAucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIChpdGVtID8gaXRlbS5sZW5ndGggOiAwKSwgMCk7XG5cbiAgICB3aGlsZSAodGhpcy5fbG9ncy5sZW5ndGggPiBudW1iZXJPZkxvZ3NUb1NlbmQgJiYgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgc2l6ZU9mTG9nc1RvU2VuZCA8IHJlcXVlc3RTaXplTGltaXQpIHtcbiAgICAgIHNpemVPZkxvZ3NUb1NlbmQgKz0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kKys7XG4gICAgfVxuXG4gICAgaWYgKCFudW1iZXJPZkxvZ3NUb1NlbmQpIHtcbiAgICAgIHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlID0gdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsXG4gICAgICAgIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIChyZXF1ZXN0U2l6ZUxpbWl0IC0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pKSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQgPSAxO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ01lc3NhZ2VzID0gdGhpcy5fbG9ncy5zbGljZSgwLCBudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgdGhpcy5fbG9ncyA9IHRoaXMuX2xvZ3Muc2xpY2UobnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRMb2dzKGxvZ01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHVyYXRpb25zIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZHVyYXRpb246IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihkdXJhdGlvbiA9IDApIHtcbiAgICB0aGlzLl9kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICB9XG5cbiAgdG9Jc29TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fZHVyYXRpb24gPT09IDApIHtcbiAgICAgIHJldHVybiAnUDBTJztcbiAgICB9XG5cbiAgICBjb25zdCBpc05lZ2F0aXZlID0gdGhpcy5fZHVyYXRpb24gPCAwO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gaXNOZWdhdGl2ZSA/IE1hdGguYWJzKHRoaXMuX2R1cmF0aW9uKSA6IHRoaXMuX2R1cmF0aW9uO1xuICAgIGxldCBvZmZzZXQgPSBNYXRoLmZsb29yKGR1cmF0aW9uKTtcbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBvZmZzZXQgJSAxMDAwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyAxMDAwKTtcblxuICAgIGNvbnN0IHNlY29uZHMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgbWludXRlcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBob3VycyA9IG9mZnNldCAlIDI0O1xuICAgIGNvbnN0IHBhcnRzID0gWydQVCddO1xuXG4gICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy0nKTtcbiAgICB9XG5cbiAgICBpZiAoaG91cnMpIHtcbiAgICAgIHBhcnRzLnB1c2goaG91cnMgKyAnSCcpO1xuICAgIH1cblxuICAgIGlmIChtaW51dGVzKSB7XG4gICAgICBwYXJ0cy5wdXNoKG1pbnV0ZXMgKyAnTScpO1xuICAgIH1cblxuICAgIGlmIChzZWNvbmRzIHx8IG1pbGxpc2Vjb25kcykge1xuICAgICAgcGFydHMucHVzaChTdHJpbmcoc2Vjb25kcykpO1xuXG4gICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgIHBhcnRzLnB1c2goJy4nICsgdGhpcy5wYWRTdGFydChtaWxsaXNlY29uZHMudG9TdHJpbmcoKSwgMywgJzAnKSk7XG4gICAgICB9XG5cbiAgICAgIHBhcnRzLnB1c2goJ1MnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydHMuam9pbignJyk7XG4gIH1cblxuICBwYWRTdGFydChpdGVtOiBzdHJpbmcsIHRhcmdldExlbmd0aDogbnVtYmVyLCBwYWRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoID4+IDA7XG4gICAgcGFkU3RyaW5nID0gU3RyaW5nKCh0eXBlb2YgcGFkU3RyaW5nICE9PSAndW5kZWZpbmVkJyA/IHBhZFN0cmluZyA6ICcgJykpO1xuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoID4gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggLSBpdGVtLmxlbmd0aDtcblxuICAgIGlmICh0YXJnZXRMZW5ndGggPiBwYWRTdHJpbmcubGVuZ3RoKSB7XG4gICAgICBwYWRTdHJpbmcgKz0gcGFkU3RyaW5nLnJlcGVhdCh0YXJnZXRMZW5ndGggLyBwYWRTdHJpbmcubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFkU3RyaW5nLnNsaWNlKDAsIHRhcmdldExlbmd0aCkgKyBpdGVtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMjAwMDtcbmNvbnN0IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMTtcbmNvbnN0IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMzAwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBvbmVudGlhbEJhY2tvZmYge1xuICBwcml2YXRlIHJlYWRvbmx5IF9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kXG4gICkge1xuICAgIHRoaXMuX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICB9XG5cbiAgZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudChmYWlsdXJlQ291bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYmFja29mZkludGVydmFsSW5TZWNvbmRzID0gdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCAvIDEwMDA7XG4gICAgY29uc3QgcmFuZG9taXphdGlvbiA9IDAuNSArICgwLjUgKiBNYXRoLnJhbmRvbSgpKTsgLy8gWzAuNSwgMSlcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmYgPSBNYXRoLnBvdyhiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMsIGZhaWx1cmVDb3VudCAtIDIpOyAvLyAgWzEvNCAxLzIgMSAyIDQgOCAuLi4uXVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uID0gTWF0aC5mbG9vcihleHBvbmVudGlhbEJhY2tvZmYpICogcmFuZG9taXphdGlvbjtcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQgPSBNYXRoLmNlaWwoTWF0aC5tYXgoZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gKiAxMDAwLCB0aGlzLl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKSk7XG5cbiAgICByZXR1cm4gTWF0aC5taW4oZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kLCB0aGlzLl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaW1lbnNpb24gaW1wbGVtZW50cyBJQ29tcGFyYWJsZTxEaW1lbnNpb24+IHtcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXI7XG5cbiAgc3RhdGljIGdldCBlbXB0eSgpOiBEaW1lbnNpb24ge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9uKDAsIDApO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IERpbWVuc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLndpZHRoID09PSBvdGhlci53aWR0aCAmJiB0aGlzLmhlaWdodCA9PT0gb3RoZXIuaGVpZ2h0O1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aH14JHt0aGlzLmhlaWdodH1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1N0cmVhbVNldHVwTGlzdGVuZXJ9IGZyb20gJy4uL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTmV0d29ya01vbml0b3IgZnJvbSAnLi4vZG9tL05ldHdvcmtNb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSU5ldHdvcmtTdGF0aXN0aWNzIHtcbiAgcnR0PzogbnVtYmVyO1xuICBlZmZlY3RpdmVUeXBlPzogc3RyaW5nO1xuICBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvblRlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1Nlc3Npb25UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IFNESy5hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29ya01vbml0b3I6IE5ldHdvcmtNb25pdG9yID0gbmV3IE5ldHdvcmtNb25pdG9yKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfbGFzdE5ldHdvcmtTdGF0aXN0aWNzOiBJTmV0d29ya1N0YXRpc3RpY3MgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvcik7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcblxuICAgIGlmICghdGhpcy5fbmV0d29ya01vbml0b3IuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuaXNGb3JlZ3JvdW5kLnN1YnNjcmliZShpc0ZvcmVncm91bmQgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5ydHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1JUVFVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5lZmZlY3RpdmVUeXBlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICB9XG5cbiAgbGlzdGVuT25TdHJlYW1TZXR1cCgpOiBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbVNldHVwTGlzdGVuZXIodGhpcy5fcGFnZUxvYWRUaW1lKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdENoYW5nZSA9IHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogaXNGb3JlZ3JvdW5kID8gTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kIDogTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZUxhc3RDaGFuZ2V9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdBcHBsaWNhdGlvbiBoYXMgZ29uZSBpbnRvIHRoZSBbJXNdIGFmdGVyIFslc10gbXMnLFxuICAgICAgaXNGb3JlZ3JvdW5kID8gJ2ZvcmVncm91bmQnIDogJ2JhY2tncm91bmQnLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VMYXN0Q2hhbmdlKS50b0lzb1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtSVFRVcGRhdGUobmV3UlRUOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZFJ0dCA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQ7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0ID0gbmV3UlRUO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IG5ld1JUVH0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRSdHQgPyB7dWludDY0OiBvbGRSdHR9IDogdW5kZWZpbmVkLFxuICAgICAgcmVzb3VyY2U6ICduYXZpZ2F0b3InXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgUlRUIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdSVFQsXG4gICAgICBvbGRSdHRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZShuZXdOZXR3b3JrVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGROZXR3b3JrVHlwZSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlO1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGUgPSBuZXdOZXR3b3JrVHlwZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuTmV0d29ya1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3TmV0d29ya1R5cGV9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkTmV0d29ya1R5cGUgPyB7c3RyaW5nOiBvbGROZXR3b3JrVHlwZX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBlZmZlY3RpdmUgdHlwZSBoYXMgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld05ldHdvcmtUeXBlLFxuICAgICAgb2xkTmV0d29ya1R5cGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUobmV3Q2FwYWNpdHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkQ2FwYWNpdHkgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkgPSBuZXdDYXBhY2l0eTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge2Zsb2F0OiBuZXdDYXBhY2l0eX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRDYXBhY2l0eSA/IHtmbG9hdDogb2xkQ2FwYWNpdHl9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZG93bmxpbmsgdGhyb3VnaHB1dCBjYXBhY2l0eSBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3Q2FwYWNpdHksXG4gICAgICBvbGRDYXBhY2l0eVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlkZW9UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfbGlzdGVuVG9GaXJzdFRpbWU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvclN0YWxsOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JDb250aW51YXRpb246IChldmVudCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1N0YWxsZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbGFzdFByb2dyZXNzOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvUmVzb2x1dGlvbjogc3RyaW5nO1xuICBwcml2YXRlIF9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcjogRGlzcG9zYWJsZTtcbiAgcHJpdmF0ZSBfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyOiBEaXNwb3NhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUlkOiBzdHJpbmcsIHBhZ2VMb2FkVGltZTogbnVtYmVyLCBjaGFubmVsU3RhcnRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBjaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUgPSAoKTogdm9pZCA9PiB0aGlzLmNhbGxUaW1lVG9GaXJzdEZyYW1lKCk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbkZvclN0YWxsID0gKCk6IHZvaWQgPT4gdGhpcy5vblN0YWxsKCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24gPSAoZXZlbnQpOiB2b2lkID0+IHRoaXMub25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG5cbiAgICB0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcik7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGR1cmF0aW9uU2luY2VQYWdlTG9hZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGxUaW1lVG9GaXJzdEZyYW1lKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG4gICAgdGhpcy5wdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl90aW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gRmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl90aW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX2NoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBDaGFubmVsIGNyZWF0aW9uIHRvIGZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uU3RhbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZpZGVvU3RhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuU3RhbGxlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyBzdGFsbGVkJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pOiB2b2lkIHtcbiAgICBpZiAoIXZpZGVvLmJ1ZmZlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdmlkZW8uYnVmZmVyZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ3BsYXlpbmcnXG4gICAgfHwgYnVmZmVyTGVuZ3RoID4gMCA/IChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnXG4gICAgICB8fCBldmVudC50eXBlID09PSAndGltZXVwZGF0ZScpXG4gICAgICAmJiB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSkgPT09IHRoaXMuX2xhc3RQcm9ncmVzcyA6IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX3ZpZGVvU3RhbGxlZCB8fCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlU3RvcCA9IERhdGUubm93KCkgLSB0aGlzLl92aWRlb1N0YWxsZWQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkJ1ZmZlcmluZyxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlU3RvcH0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHJlY292ZXJlZCBmcm9tIHN0YWxsIGFmdGVyIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlU3RvcCkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhuZXdSZXNvbHV0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdSZXNvbHV0aW9ufSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA/IHtzdHJpbmc6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbn0gOiB1bmRlZmluZWQsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA9IG5ld1Jlc29sdXRpb247XG4gIH1cbn0iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHRpZihfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdKSB7XG5cdFx0cmV0dXJuIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0uZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IG1vZHVsZVsnZGVmYXVsdCddIDpcblx0XHQoKSA9PiBtb2R1bGU7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIG1vZHVsZSBleHBvcnRzIG11c3QgYmUgcmV0dXJuZWQgZnJvbSBydW50aW1lIHNvIGVudHJ5IGlubGluaW5nIGlzIGRpc2FibGVkXG4vLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbnJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvc2RrL2NoYW5uZWxzL2luZGV4LnRzXCIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==