@phenixrts/sdk 2022.0.2 → 2022.0.5

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 (50) hide show
  1. package/dist/debug/channels.js +277 -135
  2. package/dist/debug/full.js +277 -135
  3. package/dist/debug/groups.js +1 -1
  4. package/dist/debug/messaging.js +1 -1
  5. package/dist/debug/publish.js +1 -1
  6. package/dist/debug.private/channels.js +277 -135
  7. package/dist/debug.private/full.js +277 -135
  8. package/dist/debug.private/groups.js +1 -1
  9. package/dist/debug.private/messaging.js +1 -1
  10. package/dist/debug.private/publish.js +1 -1
  11. package/dist/es5.debug.private/channels.js +276 -135
  12. package/dist/es5.debug.private/full.js +276 -135
  13. package/dist/es5.debug.private/groups.js +1 -1
  14. package/dist/es5.debug.private/messaging.js +1 -1
  15. package/dist/es5.debug.private/publish.js +1 -1
  16. package/dist/legacy.debug/channels.js +277 -135
  17. package/dist/legacy.debug/full.js +277 -135
  18. package/dist/legacy.debug/groups.js +1 -1
  19. package/dist/legacy.debug/messaging.js +1 -1
  20. package/dist/legacy.debug/publish.js +1 -1
  21. package/dist/legacy.debug.private/channels.js +276 -135
  22. package/dist/legacy.debug.private/full.js +276 -135
  23. package/dist/legacy.debug.private/groups.js +1 -1
  24. package/dist/legacy.debug.private/messaging.js +1 -1
  25. package/dist/legacy.debug.private/publish.js +1 -1
  26. package/dist/legacy.min/channels.js +1 -1
  27. package/dist/legacy.min/channels.js.map +1 -1
  28. package/dist/legacy.min/full.js +1 -1
  29. package/dist/legacy.min/full.js.map +1 -1
  30. package/dist/legacy.min/groups.js +1 -1
  31. package/dist/legacy.min/messaging.js +1 -1
  32. package/dist/legacy.min/publish.js +1 -1
  33. package/dist/min/channels.js +1 -1
  34. package/dist/min/channels.js.map +1 -1
  35. package/dist/min/full.js +1 -1
  36. package/dist/min/full.js.map +1 -1
  37. package/dist/min/groups.js +1 -1
  38. package/dist/min/messaging.js +1 -1
  39. package/dist/min/publish.js +1 -1
  40. package/dist/min.private/channels.js +1 -1
  41. package/dist/min.private/channels.js.map +1 -1
  42. package/dist/min.private/full.js +1 -1
  43. package/dist/min.private/full.js.map +1 -1
  44. package/dist/min.private/groups.js +1 -1
  45. package/dist/min.private/messaging.js +1 -1
  46. package/dist/min.private/publish.js +1 -1
  47. package/dist/types/rtc/RtcConnectionMonitor.d.ts +1 -0
  48. package/dist/types/sdk/channels/Channel.d.ts +4 -2
  49. package/dist/types/sdk/channels/ChannelContext.d.ts +1 -0
  50. package/package.json +1 -1
@@ -3375,36 +3375,61 @@ var RtcConnectionMonitor = /*#__PURE__*/function () {
3375
3375
 
3376
3376
  if (stats) {
3377
3377
  var roundTripTime = _this._estimatedRoundTripTime;
3378
- stats.forEach(function (i) {
3379
- if (i.type === 'candidate-pair' && i.currentRoundTripTime) {
3380
- roundTripTime = i.currentRoundTripTime * 1000;
3378
+ var lastPacketReceivedTimestamp;
3379
+ stats.forEach(function (report) {
3380
+ if (report.type === 'candidate-pair' && report.currentRoundTripTime) {
3381
+ roundTripTime = report.currentRoundTripTime * 1000;
3382
+
3383
+ if (rtcStats['audio']) {
3384
+ rtcStats['audio'].roundTripTime = roundTripTime;
3385
+ }
3386
+
3387
+ if (rtcStats['video']) {
3388
+ rtcStats['video'].roundTripTime = roundTripTime;
3389
+ }
3381
3390
  }
3382
3391
 
3383
- if (i.type === 'inbound-rtp') {
3384
- var _kind = i.kind || i.mediaType || getKindForSafari11(i);
3392
+ if (report.type === 'candidate-pair' && report.lastPacketReceivedTimestamp) {
3393
+ lastPacketReceivedTimestamp = report.lastPacketReceivedTimestamp;
3394
+
3395
+ if (rtcStats['audio']) {
3396
+ rtcStats['audio'].lastPacketReceivedTimestamp = lastPacketReceivedTimestamp;
3397
+ }
3398
+
3399
+ if (rtcStats['video']) {
3400
+ rtcStats['video'].lastPacketReceivedTimestamp = lastPacketReceivedTimestamp;
3401
+ }
3402
+ }
3403
+
3404
+ if (report.type === 'inbound-rtp') {
3405
+ var _kind = report.kind || report.mediaType || getKindForSafari11(report);
3385
3406
 
3386
3407
  var codec = '';
3387
3408
  stats.forEach(function (item) {
3388
- if (item.id === i.codecId) {
3409
+ if (item.id === report.codecId) {
3389
3410
  codec = item.mimeType;
3390
3411
  }
3391
3412
  });
3392
3413
 
3393
3414
  if (_kind && _this._tracksToMonitor.includes(_kind)) {
3394
3415
  rtcStats[_kind] = {
3395
- ssrc: i.ssrc,
3416
+ ssrc: report.ssrc,
3396
3417
  mediaType: _kind,
3397
- timestamp: i.timestamp,
3398
- bytesReceived: i.bytesReceived,
3399
- packetsLost: i.packetsLost,
3400
- packetsReceived: i.packetsReceived,
3418
+ timestamp: report.timestamp,
3419
+ bytesReceived: report.bytesReceived,
3420
+ packetsLost: report.packetsLost,
3421
+ packetsReceived: report.packetsReceived,
3401
3422
  codec: codec || _this.getCodecByType(_kind),
3402
3423
  roundTripTime: roundTripTime
3403
3424
  };
3404
3425
 
3426
+ if (report.lastPacketReceivedTimestamp || lastPacketReceivedTimestamp) {
3427
+ rtcStats[_kind].lastPacketReceivedTimestamp = report.lastPacketReceivedTimestamp || lastPacketReceivedTimestamp;
3428
+ }
3429
+
3405
3430
  if (_kind === 'video' && _this._rtcStatistic.value && _this._rtcStatistic.value.video) {
3406
- rtcStats[_kind].framesDecoded = i.framesDecoded;
3407
- rtcStats[_kind]['fps'] = (i.framesDecoded - _this._rtcStatistic.value.video.framesDecoded) / (rtcStats[_kind].timestamp - _this._rtcStatistic.value.video.timestamp) * 1000 || 0;
3431
+ rtcStats[_kind]['framesDecoded'] = report.framesDecoded;
3432
+ rtcStats[_kind]['fps'] = (report.framesDecoded - _this._rtcStatistic.value.video.framesDecoded) / (rtcStats[_kind].timestamp - _this._rtcStatistic.value.video.timestamp) * 1000 || 0;
3408
3433
  }
3409
3434
  }
3410
3435
  }
@@ -4768,6 +4793,7 @@ var BitrateMode;
4768
4793
  /* harmony import */ var _streaming_StreamFactory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../streaming/StreamFactory */ "./src/sdk/streaming/StreamFactory.ts");
4769
4794
  /* harmony import */ var _discovery_DiscoveryUri__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../discovery/DiscoveryUri */ "./src/sdk/discovery/DiscoveryUri.ts");
4770
4795
  /* harmony import */ var _metrics_MetricsFactory__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../metrics/MetricsFactory */ "./src/metrics/MetricsFactory.ts");
4796
+ /* provided dependency */ var Promise = __webpack_require__(/*! ./src/promise/Promise */ "./src/promise/Promise.ts")["default"];
4771
4797
 
4772
4798
 
4773
4799
 
@@ -5019,7 +5045,48 @@ var Channel = /*#__PURE__*/function () {
5019
5045
  }
5020
5046
  }, {
5021
5047
  key: "stop",
5022
- value: function stop(reason) {
5048
+ value: function () {
5049
+ var _stop = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee(reason) {
5050
+ var _this3 = this;
5051
+
5052
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee$(_context) {
5053
+ while (1) {
5054
+ switch (_context.prev = _context.next) {
5055
+ case 0:
5056
+ return _context.abrupt("return", new Promise(function (resolve) {
5057
+ if (!_this3._context.isStarting.value) {
5058
+ _this3.processStop(reason);
5059
+
5060
+ resolve();
5061
+ return;
5062
+ }
5063
+
5064
+ _this3._context.rendererDisposables.add(_this3._context.isStarting.subscribe(function (isStarting) {
5065
+ if (!isStarting) {
5066
+ _this3.processStop(reason);
5067
+
5068
+ resolve();
5069
+ }
5070
+ }));
5071
+ }));
5072
+
5073
+ case 1:
5074
+ case "end":
5075
+ return _context.stop();
5076
+ }
5077
+ }
5078
+ }, _callee);
5079
+ }));
5080
+
5081
+ function stop(_x) {
5082
+ return _stop.apply(this, arguments);
5083
+ }
5084
+
5085
+ return stop;
5086
+ }()
5087
+ }, {
5088
+ key: "processStop",
5089
+ value: function processStop(reason) {
5023
5090
  if (this._context.videoElement.value) {
5024
5091
  this._context.videoElement.value.pause();
5025
5092
 
@@ -5034,25 +5101,25 @@ var Channel = /*#__PURE__*/function () {
5034
5101
  }, {
5035
5102
  key: "resume",
5036
5103
  value: function () {
5037
- var _resume = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee() {
5038
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee$(_context) {
5104
+ var _resume = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee2() {
5105
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee2$(_context2) {
5039
5106
  while (1) {
5040
- switch (_context.prev = _context.next) {
5107
+ switch (_context2.prev = _context2.next) {
5041
5108
  case 0:
5042
5109
  if (!this._context.mediaStream.value) {
5043
- _context.next = 3;
5110
+ _context2.next = 3;
5044
5111
  break;
5045
5112
  }
5046
5113
 
5047
5114
  this._context.autoPaused.value = false;
5048
- return _context.abrupt("return", this.playMediaStreamInVideoElement(this._context.mediaStream.value));
5115
+ return _context2.abrupt("return", this.playMediaStreamInVideoElement(this._context.mediaStream.value));
5049
5116
 
5050
5117
  case 3:
5051
5118
  case "end":
5052
- return _context.stop();
5119
+ return _context2.stop();
5053
5120
  }
5054
5121
  }
5055
- }, _callee, this);
5122
+ }, _callee2, this);
5056
5123
  }));
5057
5124
 
5058
5125
  function resume() {
@@ -5082,13 +5149,34 @@ var Channel = /*#__PURE__*/function () {
5082
5149
  }
5083
5150
  }, {
5084
5151
  key: "dispose",
5085
- value: function dispose() {
5086
- this.stop('client:channel-dispose');
5152
+ value: function () {
5153
+ var _dispose = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee3() {
5154
+ var _this4 = this;
5087
5155
 
5088
- this._context.channelDisposables.dispose();
5156
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee3$(_context3) {
5157
+ while (1) {
5158
+ switch (_context3.prev = _context3.next) {
5159
+ case 0:
5160
+ return _context3.abrupt("return", this.stop('client:channel-dispose').then(function () {
5161
+ _this4._context.channelDisposables.dispose();
5089
5162
 
5090
- this._context.isDisposed = true;
5091
- }
5163
+ _this4._context.isDisposed = true;
5164
+ }));
5165
+
5166
+ case 1:
5167
+ case "end":
5168
+ return _context3.stop();
5169
+ }
5170
+ }
5171
+ }, _callee3, this);
5172
+ }));
5173
+
5174
+ function dispose() {
5175
+ return _dispose.apply(this, arguments);
5176
+ }
5177
+
5178
+ return dispose;
5179
+ }()
5092
5180
  }, {
5093
5181
  key: "getUri",
5094
5182
  value: function getUri(token) {
@@ -5106,27 +5194,66 @@ var Channel = /*#__PURE__*/function () {
5106
5194
  }, {
5107
5195
  key: "start",
5108
5196
  value: function () {
5109
- var _start = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee2() {
5110
- var _this3 = this;
5197
+ var _start = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee4() {
5198
+ var _this5 = this;
5111
5199
 
5112
- var token, listenOnStreamSetup, uri, streamPlayer;
5113
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee2$(_context2) {
5200
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee4$(_context4) {
5114
5201
  while (1) {
5115
- switch (_context2.prev = _context2.next) {
5202
+ switch (_context4.prev = _context4.next) {
5116
5203
  case 0:
5117
5204
  if (!this._context.isDisposed) {
5118
- _context2.next = 2;
5205
+ _context4.next = 2;
5119
5206
  break;
5120
5207
  }
5121
5208
 
5122
5209
  throw new Error('Channel was already disposed');
5123
5210
 
5124
5211
  case 2:
5212
+ if (!this._context.isStarting.value) {
5213
+ _context4.next = 5;
5214
+ break;
5215
+ }
5216
+
5217
+ this._logger.info('Channel is already starting, skipping start');
5218
+
5219
+ return _context4.abrupt("return");
5220
+
5221
+ case 5:
5222
+ this._context.isStarting.value = true;
5223
+ return _context4.abrupt("return", this.processStart().finally(function () {
5224
+ _this5._context.isStarting.value = false;
5225
+ }));
5226
+
5227
+ case 7:
5228
+ case "end":
5229
+ return _context4.stop();
5230
+ }
5231
+ }
5232
+ }, _callee4, this);
5233
+ }));
5234
+
5235
+ function start() {
5236
+ return _start.apply(this, arguments);
5237
+ }
5238
+
5239
+ return start;
5240
+ }()
5241
+ }, {
5242
+ key: "processStart",
5243
+ value: function () {
5244
+ var _processStart = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee5() {
5245
+ var _this6 = this;
5246
+
5247
+ var token, listenOnStreamSetup, uri, handleStreamFailureCallback, streamPlayer;
5248
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee5$(_context5) {
5249
+ while (1) {
5250
+ switch (_context5.prev = _context5.next) {
5251
+ case 0:
5125
5252
  token = this._context.token.value;
5126
5253
  listenOnStreamSetup = this._context.sessionTelemetry.listenOnStreamSetup();
5127
5254
 
5128
5255
  if (_edgeAuth_EdgeAuth__WEBPACK_IMPORTED_MODULE_12__.default.isValidToken(token)) {
5129
- _context2.next = 9;
5256
+ _context5.next = 7;
5130
5257
  break;
5131
5258
  }
5132
5259
 
@@ -5134,78 +5261,85 @@ var Channel = /*#__PURE__*/function () {
5134
5261
 
5135
5262
  this._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Unauthorized;
5136
5263
  this._context.authorized.value = false;
5137
- return _context2.abrupt("return");
5264
+ return _context5.abrupt("return");
5138
5265
 
5139
- case 9:
5266
+ case 7:
5140
5267
  this.cleanUpResources('client:start');
5141
5268
  this._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Starting;
5142
5269
  this._context.loading.value = true;
5143
5270
  uri = this.getUri(token);
5144
- streamPlayer = _streaming_StreamFactory__WEBPACK_IMPORTED_MODULE_17__.default.create(token, this._context, this.handleStreamFailure.bind(this));
5271
+
5272
+ handleStreamFailureCallback = function handleStreamFailureCallback() {
5273
+ return new Promise(function (resolve) {
5274
+ // Need to set isStarting to false and call handleStreamFailure if stream monitors found an issue
5275
+ _this6._context.isStarting.value = false;
5276
+ return resolve(_this6.handleStreamFailure());
5277
+ });
5278
+ };
5279
+
5280
+ streamPlayer = _streaming_StreamFactory__WEBPACK_IMPORTED_MODULE_17__.default.create(token, this._context, handleStreamFailureCallback);
5145
5281
 
5146
5282
  if (streamPlayer) {
5147
- _context2.next = 16;
5283
+ _context5.next = 15;
5148
5284
  break;
5149
5285
  }
5150
5286
 
5151
- return _context2.abrupt("return");
5287
+ return _context5.abrupt("return");
5152
5288
 
5153
- case 16:
5154
- return _context2.abrupt("return", streamPlayer.start(uri, token, listenOnStreamSetup, this.playMediaStreamInVideoElement.bind(this)).then(function () {
5155
- _this3._context.loading.value = false;
5156
- }).then(function () {
5157
- _this3._context.loading.value = false;
5289
+ case 15:
5290
+ return _context5.abrupt("return", streamPlayer.start(uri, token, listenOnStreamSetup, this.playMediaStreamInVideoElement.bind(this)).then(function () {
5291
+ _this6._context.loading.value = false;
5158
5292
  }).catch(function (e) {
5159
5293
  listenOnStreamSetup.fail();
5160
- _this3._context.failureCount.value++;
5161
- _this3._context.online.value = false;
5294
+ _this6._context.failureCount.value++;
5295
+ _this6._context.online.value = false;
5162
5296
 
5163
- _this3.cleanUpResources('client:cleanup-after-failed-setup');
5297
+ _this6.cleanUpResources('client:cleanup-after-failed-setup');
5164
5298
 
5165
- _this3._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Error;
5299
+ _this6._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Error;
5166
5300
 
5167
- _this3._logger.error('Failed to discover end point, marking as offline', e);
5301
+ _this6._logger.error('Failed to start channel', e);
5168
5302
  }).finally(function () {
5169
- if (_this3._context.state.value === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing || !_SDK__WEBPACK_IMPORTED_MODULE_8__.default.automaticRetryOnFailure) {
5303
+ if (_this6._context.state.value === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing || !_SDK__WEBPACK_IMPORTED_MODULE_8__.default.automaticRetryOnFailure) {
5170
5304
  return;
5171
5305
  }
5172
5306
 
5173
5307
  var timeoutId = setTimeout(function () {
5174
- var ignored = _this3.handleStreamFailure().catch(function (e) {
5175
- _this3._logger.error('Failed handling stream failure', e);
5308
+ var ignored = _this6.handleStreamFailure().catch(function (e) {
5309
+ _this6._logger.error('Failed handling stream failure', e);
5176
5310
  });
5177
- }, _this3.getRetryInterval());
5311
+ }, _this6.getRetryInterval());
5178
5312
 
5179
- _this3._context.disposables.add(new _lang_Disposable__WEBPACK_IMPORTED_MODULE_11__.default(function () {
5313
+ _this6._context.disposables.add(new _lang_Disposable__WEBPACK_IMPORTED_MODULE_11__.default(function () {
5180
5314
  clearTimeout(timeoutId);
5181
5315
  }));
5182
5316
  }));
5183
5317
 
5184
- case 17:
5318
+ case 16:
5185
5319
  case "end":
5186
- return _context2.stop();
5320
+ return _context5.stop();
5187
5321
  }
5188
5322
  }
5189
- }, _callee2, this);
5323
+ }, _callee5, this);
5190
5324
  }));
5191
5325
 
5192
- function start() {
5193
- return _start.apply(this, arguments);
5326
+ function processStart() {
5327
+ return _processStart.apply(this, arguments);
5194
5328
  }
5195
5329
 
5196
- return start;
5330
+ return processStart;
5197
5331
  }()
5198
5332
  }, {
5199
5333
  key: "restartAfterStop",
5200
5334
  value: function () {
5201
- var _restartAfterStop = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee3() {
5335
+ var _restartAfterStop = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee6() {
5202
5336
  var ignored;
5203
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee3$(_context3) {
5337
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee6$(_context6) {
5204
5338
  while (1) {
5205
- switch (_context3.prev = _context3.next) {
5339
+ switch (_context6.prev = _context6.next) {
5206
5340
  case 0:
5207
5341
  if (!this._context.isDisposed) {
5208
- _context3.next = 2;
5342
+ _context6.next = 2;
5209
5343
  break;
5210
5344
  }
5211
5345
 
@@ -5213,11 +5347,11 @@ var Channel = /*#__PURE__*/function () {
5213
5347
 
5214
5348
  case 2:
5215
5349
  if (!this._context.mediaStream.value) {
5216
- _context3.next = 4;
5350
+ _context6.next = 4;
5217
5351
  break;
5218
5352
  }
5219
5353
 
5220
- return _context3.abrupt("return", this.playMediaStreamInVideoElement(this._context.mediaStream.value));
5354
+ return _context6.abrupt("return", this.playMediaStreamInVideoElement(this._context.mediaStream.value));
5221
5355
 
5222
5356
  case 4:
5223
5357
  if (this._context.token.value) {
@@ -5226,10 +5360,10 @@ var Channel = /*#__PURE__*/function () {
5226
5360
 
5227
5361
  case 5:
5228
5362
  case "end":
5229
- return _context3.stop();
5363
+ return _context6.stop();
5230
5364
  }
5231
5365
  }
5232
- }, _callee3, this);
5366
+ }, _callee6, this);
5233
5367
  }));
5234
5368
 
5235
5369
  function restartAfterStop() {
@@ -5241,30 +5375,30 @@ var Channel = /*#__PURE__*/function () {
5241
5375
  }, {
5242
5376
  key: "play",
5243
5377
  value: function () {
5244
- var _play = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee4() {
5378
+ var _play = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee7() {
5245
5379
  var mediaStream;
5246
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee4$(_context4) {
5380
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee7$(_context7) {
5247
5381
  while (1) {
5248
- switch (_context4.prev = _context4.next) {
5382
+ switch (_context7.prev = _context7.next) {
5249
5383
  case 0:
5250
5384
  mediaStream = this._context.mediaStream.value;
5251
5385
 
5252
5386
  if (mediaStream) {
5253
- _context4.next = 3;
5387
+ _context7.next = 3;
5254
5388
  break;
5255
5389
  }
5256
5390
 
5257
- return _context4.abrupt("return", this.start());
5391
+ return _context7.abrupt("return", this.start());
5258
5392
 
5259
5393
  case 3:
5260
- return _context4.abrupt("return", this.playMediaStreamInVideoElement(mediaStream));
5394
+ return _context7.abrupt("return", this.playMediaStreamInVideoElement(mediaStream));
5261
5395
 
5262
5396
  case 4:
5263
5397
  case "end":
5264
- return _context4.stop();
5398
+ return _context7.stop();
5265
5399
  }
5266
5400
  }
5267
- }, _callee4, this);
5401
+ }, _callee7, this);
5268
5402
  }));
5269
5403
 
5270
5404
  function play() {
@@ -5302,72 +5436,72 @@ var Channel = /*#__PURE__*/function () {
5302
5436
  }, {
5303
5437
  key: "handleStreamFailure",
5304
5438
  value: function () {
5305
- var _handleStreamFailure = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee5() {
5306
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee5$(_context5) {
5439
+ var _handleStreamFailure = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee8() {
5440
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee8$(_context8) {
5307
5441
  while (1) {
5308
- switch (_context5.prev = _context5.next) {
5442
+ switch (_context8.prev = _context8.next) {
5309
5443
  case 0:
5310
- _context5.t0 = this._context.state.value;
5311
- _context5.next = _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Error ? 3 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Reconnecting ? 3 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.StandBy ? 3 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Offline ? 3 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Recovering ? 3 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Unauthorized ? 5 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.GeoRestricted ? 7 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.GeoBlocked ? 9 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Stopped ? 11 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing ? 13 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Paused ? 15 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Starting ? 17 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.UnsupportedFeature ? 19 : 21;
5444
+ _context8.t0 = this._context.state.value;
5445
+ _context8.next = _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Error ? 3 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Reconnecting ? 3 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.StandBy ? 3 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Offline ? 3 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Recovering ? 3 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Unauthorized ? 5 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.GeoRestricted ? 7 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.GeoBlocked ? 9 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Stopped ? 11 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing ? 13 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Paused ? 15 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Starting ? 17 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.UnsupportedFeature ? 19 : 21;
5312
5446
  break;
5313
5447
 
5314
5448
  case 3:
5315
5449
  this._logger.info('Retry start with initial state [%s] [%s]', this._context.state.value, _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default[this._context.state.value]);
5316
5450
 
5317
- return _context5.abrupt("break", 22);
5451
+ return _context8.abrupt("break", 22);
5318
5452
 
5319
5453
  case 5:
5320
5454
  this._logger.info('Channel is unauthorized, skipping retry of start. Please provide a new token and invoke start()');
5321
5455
 
5322
- return _context5.abrupt("return");
5456
+ return _context8.abrupt("return");
5323
5457
 
5324
5458
  case 7:
5325
5459
  this._logger.info('Channel is geo restricted, skipping retry of start. Please provide a new token and invoke start()');
5326
5460
 
5327
- return _context5.abrupt("return");
5461
+ return _context8.abrupt("return");
5328
5462
 
5329
5463
  case 9:
5330
5464
  this._logger.info('Channel is geo blocked, skipping retry of start. Please provide a new token and invoke start()');
5331
5465
 
5332
- return _context5.abrupt("return");
5466
+ return _context8.abrupt("return");
5333
5467
 
5334
5468
  case 11:
5335
5469
  this._logger.info('Channel is stopped, skipping retry of start.');
5336
5470
 
5337
- return _context5.abrupt("return");
5471
+ return _context8.abrupt("return");
5338
5472
 
5339
5473
  case 13:
5340
5474
  this._logger.info('Channel is playing, skipping retry of start');
5341
5475
 
5342
- return _context5.abrupt("return");
5476
+ return _context8.abrupt("return");
5343
5477
 
5344
5478
  case 15:
5345
5479
  this._logger.info('Channel is paused, skipping retry of start. Please invoke play()');
5346
5480
 
5347
- return _context5.abrupt("return");
5481
+ return _context8.abrupt("return");
5348
5482
 
5349
5483
  case 17:
5350
5484
  this._logger.info('Channel is already starting, skipping retry of start');
5351
5485
 
5352
- return _context5.abrupt("return");
5486
+ return _context8.abrupt("return");
5353
5487
 
5354
5488
  case 19:
5355
5489
  this._logger.info('Channel is stopped due to unsupported feature, skipping retry of start.');
5356
5490
 
5357
- return _context5.abrupt("return");
5491
+ return _context8.abrupt("return");
5358
5492
 
5359
5493
  case 21:
5360
5494
  (0,_lang_assertUnreachable__WEBPACK_IMPORTED_MODULE_10__.default)(this._context.state.value);
5361
5495
 
5362
5496
  case 22:
5363
- return _context5.abrupt("return", this.start());
5497
+ return _context8.abrupt("return", this.start());
5364
5498
 
5365
5499
  case 23:
5366
5500
  case "end":
5367
- return _context5.stop();
5501
+ return _context8.stop();
5368
5502
  }
5369
5503
  }
5370
- }, _callee5, this);
5504
+ }, _callee8, this);
5371
5505
  }));
5372
5506
 
5373
5507
  function handleStreamFailure() {
@@ -5379,7 +5513,7 @@ var Channel = /*#__PURE__*/function () {
5379
5513
  }, {
5380
5514
  key: "cleanUpResources",
5381
5515
  value: function cleanUpResources() {
5382
- var _this4 = this;
5516
+ var _this7 = this;
5383
5517
 
5384
5518
  var reason = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultStreamTerminationReason;
5385
5519
 
@@ -5411,14 +5545,14 @@ var Channel = /*#__PURE__*/function () {
5411
5545
  var status = _ref2.status;
5412
5546
 
5413
5547
  if (status !== 'ok') {
5414
- _this4._logger.warn('[%s] Failed to destroy stream with reason [%s]', _this4.streamId, status);
5548
+ _this7._logger.warn('[%s] Failed to destroy stream with reason [%s]', _this7.streamId, status);
5415
5549
 
5416
5550
  return;
5417
5551
  }
5418
5552
 
5419
- _this4._logger.info('[%s] Destroyed stream with reason [%s]', _this4.streamId, status);
5553
+ _this7._logger.info('[%s] Destroyed stream with reason [%s]', _this7.streamId, status);
5420
5554
  }).catch(function (e) {
5421
- _this4._logger.error('[%s] Failed to destroy stream', _this4.streamId, e);
5555
+ _this7._logger.error('[%s] Failed to destroy stream', _this7.streamId, e);
5422
5556
  });
5423
5557
  }
5424
5558
 
@@ -5429,22 +5563,23 @@ var Channel = /*#__PURE__*/function () {
5429
5563
 
5430
5564
  this._context.stream.value = null;
5431
5565
  this._context.endPoint.value = null;
5566
+ this._context.peerConnectionReconnectAttempts = 0;
5432
5567
  }
5433
5568
  }, {
5434
5569
  key: "playMediaStreamInVideoElement",
5435
5570
  value: function () {
5436
- var _playMediaStreamInVideoElement = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee6(mediaStream) {
5437
- var _this5 = this;
5571
+ var _playMediaStreamInVideoElement = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee9(mediaStream) {
5572
+ var _this8 = this;
5438
5573
 
5439
5574
  var videoElement, playPromise;
5440
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee6$(_context6) {
5575
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee9$(_context9) {
5441
5576
  while (1) {
5442
- switch (_context6.prev = _context6.next) {
5577
+ switch (_context9.prev = _context9.next) {
5443
5578
  case 0:
5444
5579
  videoElement = this._context.videoElement.value;
5445
5580
 
5446
5581
  if (videoElement) {
5447
- _context6.next = 8;
5582
+ _context9.next = 8;
5448
5583
  break;
5449
5584
  }
5450
5585
 
@@ -5453,14 +5588,14 @@ var Channel = /*#__PURE__*/function () {
5453
5588
  this._context.loading.value = false;
5454
5589
  this._context.playing.value = false;
5455
5590
  this._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Stopped;
5456
- return _context6.abrupt("return");
5591
+ return _context9.abrupt("return");
5457
5592
 
5458
5593
  case 8:
5459
5594
  videoElement.srcObject = mediaStream;
5460
5595
  playPromise = videoElement.play();
5461
5596
 
5462
5597
  if (!(playPromise === undefined)) {
5463
- _context6.next = 17;
5598
+ _context9.next = 17;
5464
5599
  break;
5465
5600
  }
5466
5601
 
@@ -5469,15 +5604,15 @@ var Channel = /*#__PURE__*/function () {
5469
5604
  this._context.loading.value = false;
5470
5605
  this._context.playing.value = true;
5471
5606
  this._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5472
- return _context6.abrupt("return");
5607
+ return _context9.abrupt("return");
5473
5608
 
5474
5609
  case 17:
5475
- return _context6.abrupt("return", playPromise.then(function () {
5476
- _this5._context.autoMuted.value = false;
5477
- _this5._context.autoPaused.value = false;
5478
- _this5._context.loading.value = false;
5479
- _this5._context.playing.value = true;
5480
- _this5._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5610
+ return _context9.abrupt("return", playPromise.then(function () {
5611
+ _this8._context.autoMuted.value = false;
5612
+ _this8._context.autoPaused.value = false;
5613
+ _this8._context.loading.value = false;
5614
+ _this8._context.playing.value = true;
5615
+ _this8._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5481
5616
  }).catch(function (e) {
5482
5617
  var hasAudioTrack = !!mediaStream.getTracks().filter(function (track) {
5483
5618
  return track.kind === 'audio';
@@ -5485,61 +5620,61 @@ var Channel = /*#__PURE__*/function () {
5485
5620
  var automaticallyMuteVideoOnPlayFailureOff = !_SDK__WEBPACK_IMPORTED_MODULE_8__.default.automaticallyMuteVideoOnPlayFailure;
5486
5621
 
5487
5622
  if (automaticallyMuteVideoOnPlayFailureOff || videoElement.muted || !hasAudioTrack) {
5488
- _this5._context.autoMuted.value = false;
5489
- _this5._context.autoPaused.value = true;
5490
- _this5._context.loading.value = false;
5491
- _this5._context.playing.value = false;
5492
- _this5._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Paused;
5623
+ _this8._context.autoMuted.value = false;
5624
+ _this8._context.autoPaused.value = true;
5625
+ _this8._context.loading.value = false;
5626
+ _this8._context.playing.value = false;
5627
+ _this8._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Paused;
5493
5628
 
5494
5629
  if (automaticallyMuteVideoOnPlayFailureOff) {
5495
- _this5._logger.info('[%s] Paused video after play failed. Manual user action required.', _this5.streamId, e);
5630
+ _this8._logger.info('[%s] Paused video after play failed. Manual user action required.', _this8.streamId, e);
5496
5631
 
5497
5632
  videoElement.srcObject = null;
5498
5633
  return;
5499
5634
  }
5500
5635
 
5501
5636
  if (hasAudioTrack) {
5502
- _this5._logger.info('[%s] Failed to play video. Manual user action required.', _this5.streamId, e);
5637
+ _this8._logger.info('[%s] Failed to play video. Manual user action required.', _this8.streamId, e);
5503
5638
 
5504
5639
  return;
5505
5640
  }
5506
5641
 
5507
- _this5._logger.info('[%s] Failed to play muted video. Manual user action required.', _this5.streamId, e);
5642
+ _this8._logger.info('[%s] Failed to play muted video. Manual user action required.', _this8.streamId, e);
5508
5643
 
5509
5644
  return;
5510
5645
  }
5511
5646
 
5512
5647
  videoElement.muted = true;
5513
5648
  return videoElement.play().then(function () {
5514
- _this5._logger.info('[%s] Played video after auto muting. Manual user action required to unmute.', _this5.streamId);
5649
+ _this8._logger.info('[%s] Played video after auto muting. Manual user action required to unmute.', _this8.streamId);
5515
5650
 
5516
- _this5._context.autoMuted.value = true;
5517
- _this5._context.autoPaused.value = false;
5518
- _this5._context.loading.value = false;
5519
- _this5._context.playing.value = true;
5520
- _this5._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5651
+ _this8._context.autoMuted.value = true;
5652
+ _this8._context.autoPaused.value = false;
5653
+ _this8._context.loading.value = false;
5654
+ _this8._context.playing.value = true;
5655
+ _this8._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5521
5656
  }).catch(function (e) {
5522
5657
  videoElement.muted = false;
5523
5658
 
5524
- _this5._logger.info('[%s] Failed to play video. Manual user action required.', _this5.streamId, e);
5659
+ _this8._logger.info('[%s] Failed to play video. Manual user action required.', _this8.streamId, e);
5525
5660
 
5526
- _this5._context.autoMuted.value = false;
5527
- _this5._context.autoPaused.value = true;
5528
- _this5._context.loading.value = false;
5529
- _this5._context.playing.value = false;
5530
- _this5._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5661
+ _this8._context.autoMuted.value = false;
5662
+ _this8._context.autoPaused.value = true;
5663
+ _this8._context.loading.value = false;
5664
+ _this8._context.playing.value = false;
5665
+ _this8._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Paused;
5531
5666
  });
5532
5667
  }));
5533
5668
 
5534
5669
  case 18:
5535
5670
  case "end":
5536
- return _context6.stop();
5671
+ return _context9.stop();
5537
5672
  }
5538
5673
  }
5539
- }, _callee6, this);
5674
+ }, _callee9, this);
5540
5675
  }));
5541
5676
 
5542
- function playMediaStreamInVideoElement(_x) {
5677
+ function playMediaStreamInVideoElement(_x2) {
5543
5678
  return _playMediaStreamInVideoElement.apply(this, arguments);
5544
5679
  }
5545
5680
 
@@ -5812,6 +5947,8 @@ var ChannelContext = /*#__PURE__*/function () {
5812
5947
 
5813
5948
  _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(this, "isDisposed", void 0);
5814
5949
 
5950
+ _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(this, "isStarting", void 0);
5951
+
5815
5952
  _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(this, "videoTelemetry", void 0);
5816
5953
 
5817
5954
  _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(this, "sessionTelemetry", void 0);
@@ -5823,6 +5960,7 @@ var ChannelContext = /*#__PURE__*/function () {
5823
5960
  _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(this, "clearFailureCountTimeout", void 0);
5824
5961
 
5825
5962
  this.isDisposed = false;
5963
+ this.isStarting = new _rx_Subject__WEBPACK_IMPORTED_MODULE_3__.default(false);
5826
5964
  this.disposables = new _lang_DisposableList__WEBPACK_IMPORTED_MODULE_8__.default();
5827
5965
  this.channelDisposables = new _lang_DisposableList__WEBPACK_IMPORTED_MODULE_8__.default();
5828
5966
  this.rendererDisposables = new _lang_DisposableList__WEBPACK_IMPORTED_MODULE_8__.default();
@@ -8605,6 +8743,10 @@ var RealTimeStream = /*#__PURE__*/function () {
8605
8743
  var discoveryCompleted = false;
8606
8744
  var candidates = [];
8607
8745
 
8746
+ if (!_this._channelContext.peerConnection.value) {
8747
+ _this._channelContext.peerConnection.value = peerConnection;
8748
+ }
8749
+
8608
8750
  peerConnection.onicecandidate = function (e) {
8609
8751
  if (_this._channelContext.stream.value !== stream) {
8610
8752
  return;
@@ -9489,7 +9631,7 @@ var VersionManager = /*#__PURE__*/function () {
9489
9631
  key: "sdkVersion",
9490
9632
  get: function get() {
9491
9633
  try {
9492
- return "2022-01-10T19:09:12.604Z (2022.0.2)";
9634
+ return "2022-05-05T18:02:55.793Z (2022.0.5)";
9493
9635
  } catch (e) {
9494
9636
  return this._defaultVersion;
9495
9637
  }
@@ -11263,4 +11405,4 @@ try {
11263
11405
  /******/ })()
11264
11406
  ;
11265
11407
  });
11266
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vUHJpdmFjeU1vZGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZUxpc3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvU3RyaW5ncy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9hc3NlcnRVbnJlYWNoYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0FwcGVuZGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0NvbnNvbGVBcHBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckRlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nVGhyZXNob2xkLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZUhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1NkcFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1JlYWRPbmx5U3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvU3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvU0RLLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvVGVsZW1ldHJ5VXJsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbFN0YXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVNb2RlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlU3RhdGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9FbmRQb2ludC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2VkZ2VBdXRoL0VkZ2VBdXRoLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Z1bGwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvQ2h1bmtlZFN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9IbHNQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTGl2ZVN0cmVhbWluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9OZXR3b3JrU3RhdGVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1JlYWxUaW1lU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1NoYWthUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvV2ViUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9EdXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vRGltZW5zaW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9TZXNzaW9uVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9WaWRlb1RlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbImRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0IiwiQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJEaXNwb3NhYmxlTGlzdCIsIkRhdGUiLCJub3ciLCJfaXNGb3JlZ3JvdW5kIiwiU3ViamVjdCIsIl9yZWFkT25seUlzRm9yZWdyb3VuZCIsIlJlYWRPbmx5U3ViamVjdCIsImRldGVjdFRhYkZvY3VzQ2hhbmdlIiwiX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZSIsIl9kaXNwb3NhYmxlcyIsImRpc3Bvc2UiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Q2hhbmdlIiwiZG9jdW1lbnQiLCJtc0hpZGRlbiIsIndlYmtpdEhpZGRlbiIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJpc0ZvcmVncm91bmQiLCJzZXRGb2N1c1N0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFkZCIsIkRpc3Bvc2FibGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuRm9yRG9jdW1lbnRGb2N1cyIsImNhbGwiLCJfZG9jdW1lbnRGb2N1c0ludGVydmFsIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJoYXNGb2N1cyIsImNsZWFySW50ZXJ2YWwiLCJ2YWx1ZSIsIkJyb3dzZXJEZXRlY3RvciIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIm1hdGNoIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSIsIl9icm93c2VyTmFtZUFuZFZlcnNpb24iLCJicm93c2VyTmFtZUxpc3QiLCJzcGxpdCIsImJyb3dzZXJWZXJzaW9uTGlzdCIsImZ1bGxWZXJzaW9uIiwiTnVtYmVyIiwibXNpZSIsImluZGV4T2YiLCJwYXJzZUludCIsInN1YnN0cmluZyIsInRyaWRlbnQiLCJ2ZXJzaW9uIiwiX2Jyb3dzZXJOYW1lIiwiX2Jyb3dzZXJNYWpvclZlcnNpb24iLCJfaXNDaHJvbWU2OSIsIl9pc0Nocm9tZTcwIiwiX2lzQ2hyb21lNzEiLCJfaXNDaHJvbWU3MiIsIl9pc0Nocm9tZTc0IiwiX2lzQ2hyb21lNzUiLCJfaXNDaHJvbWU3NiIsIl9pc0Nocm9tZTc3IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24iLCJwYXJzZUJyb3dzZXJOYW1lIiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiaW5jbHVkZXMiLCJDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwibmFtZSIsInJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlIiwiZGVmYXVsdFN0cmluZ1ZhbHVlIiwidmFsdWVGcm9tVXJpIiwiZGVmYXVsdEJvb2xlYW5WYWx1ZSIsIm1ldGFWYWx1ZSIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRBdHRyaWJ1dGUiLCJ2YWx1ZVVSSVBhcmFtZXRlck5hbWUiLCJVUkxTZWFyY2hQYXJhbXMiLCJsb2NhdGlvbiIsInNlYXJjaCIsImdldCIsInVuZGVmaW5lZCIsIlRlbGVtZXRyeUxldmVsTWFwcGluZyIsIlRlbGVtZXRyeURlZmF1bHQiLCJMb2dnaW5nTGV2ZWxNYXBwaW5nIiwiTG9nZ2VyRGVmYXVsdHMiLCJOZXR3b3JrTW9uaXRvciIsImlzU3VwcG9ydGVkIiwic2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzIiwidXBkYXRlU3RhdGlzdGljcyIsImRvd25saW5rIiwiZG93bmxpbmtNYXgiLCJlZmZlY3RpdmVUeXBlIiwidHlwZSIsInJ0dCIsImxpc3RlbmVyIiwiX3J0dCIsImdldFJvdW5kVHJpcFRpbWUiLCJfZWZmZWN0aXZlVHlwZSIsImdldEVmZmVjdGl2ZVR5cGUiLCJfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsIl9pc1N1cHBvcnRlZCIsIlByaXZhY3lNb2RlIiwiX2lzUHJpdmF0ZSIsIl9fUFJJVkFDWV9NT0RFX18iLCJlIiwiYXBwbHlJc1ByaXZhdGUiLCJTdHJlYW1TZXR1cExpc3RlbmVyIiwicGFnZUxvYWRUaW1lIiwiTG9nZ2VyRmFjdG9yeSIsIlNESyIsIl9zdGFydFRpbWUiLCJfcGFnZUxvYWRUaW1lIiwic3RyZWFtSWQiLCJyZWNvcmRTdHJlYW1NZXRyaWMiLCJNZXRyaWNzVHlwZSIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsIk1ldHJpY1R5cGUiLCJnZXROYW1lIiwibWV0cmljc1NlcnZpY2UiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwiRHVyYXRpb25zIiwidG9Jc29TdHJpbmciLCJkaXNwb3NhYmxlIiwiX2Rpc3Bvc2VkIiwiX2Rpc3Bvc2FibGUiLCJfbGlzdCIsImZvckVhY2giLCJsZW5ndGgiLCJTdHJpbmdzIiwicmFuZG9tMTNDaGFyYWN0ZXJzIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwibG9vcHMiLCJjZWlsIiwiQXJyYXkiLCJmaWxsIiwicmVkdWNlIiwic3RyaW5nIiwiZnVuYyIsIkVycm9yIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiYXBwZW5kZXIiLCJfYXBwZW5kZXJzIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwibG9nTGV2ZWwiLCJtZXNzYWdlIiwiY2F0ZWdvcnkiLCJkYXRlIiwiX3RocmVzaG9sZCIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwibG9nIiwiZXJyb3IiLCJ0aHJlc2hvbGQiLCJMb2dnZXIiLCJUcmFjZSIsImFyZ3MiLCJEZWJ1ZyIsIkluZm8iLCJXYXJuIiwiRmF0YWwiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIkpTT04iLCJrZXkiLCJPYmplY3QiLCJhcmd1bWVudCIsImRhdGEiLCJ0b1N0cmluZ1N0ciIsIl9jYXRlZ29yeSIsImFwcGVuZGVycyIsImxvZ2dlciIsIl9sb2dnZXJzIiwiYXBwbHlMb2dnaW5nTGV2ZWwiLCJhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsIiwiYXBwbHlDb25zb2xlTG9nZ2VyIiwiYmluZCIsImFwcGx5VGVsZW1ldHJ5TG9nZ2VyIiwicGFyYW1ldGVyVmFsdWUiLCJfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsImdldFN0cmluZ1ZhbHVlIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIl90ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiVGVsZW1ldHJ5QXBwZW5kZXIiLCJMb2dnaW5nVGhyZXNob2xkIiwiVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJsb2dnaW5nTGV2ZWwiLCJsb2dnaW5nTGV2ZWxUeXBlIiwibWV0cmljcyIsIl9tZXRyaWNzIiwiVGVsZW1ldHJ5TGV2ZWwiLCJNZXRyaWNzQ29uZmlndXJhdGlvbiIsIl91cmwiLCJ1cmwiLCJtZXRyaWNzVXJsIiwiVVJMIiwicGF0aG5hbWUiLCJfZW52aXJvbm1lbnQiLCJlbnZpcm9ubWVudCIsIl90ZW5hbmN5IiwidGVuYW5jeSIsIl9zZXNzaW9uSWQiLCJzZXNzaW9uSWQiLCJNZXRyaWNzRmFjdG9yeSIsIm1ldHJpY3NTZXJ2aWNlcyIsIl9tZXRyaWNzU2VydmljZXMiLCJtZXRyaWNzQ29uZmlndXJhdGlvbiIsIlRlbGVtZXRyeVVybCIsIkVudmlyb25tZW50IiwiTWV0cmljc1NlcnZpY2UiLCJ0ZWxlbWV0cnlMZXZlbCIsInZhbHVlcyIsInJlcXVlc3RTaXplTGltaXQiLCJob3N0bmFtZSIsIl9tZXRyaWNzQ29uZmlndXJhdGlvbiIsIm1ldHJpYyIsInByZXZpb3VzVmFsdWUiLCJyZXNvdXJjZSIsImtpbmQiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwiX2RvbWFpbiIsIlZlcnNpb25NYW5hZ2VyIiwiaWdub3JlZCIsInNlbmRNZXRyaWNzSWZBYmxlIiwibWV0cmljc01lc3NhZ2VzIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImFwcGVuZCIsInJlY29yZHMiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJfaXNTZW5kaW5nIiwic2xpY2UiLCJzZW5kTWV0cmljcyIsInRoZW4iLCJyZXNwb25zZSIsImNhdGNoIiwidGVsZW1ldHJ5TGV2ZWxUeXBlIiwiUHJvbWlzZSIsImNhbGxiYWNrIiwiVHlwZUVycm9yIiwiX3N0YXRlIiwiX2hhbmRsZWQiLCJfdmFsdWUiLCJfZGVmZXJyZWRzIiwiZG9SZXNvbHZlIiwiZG9uZSIsInByb21pc2VSZXNvbHZlIiwicmVhc29uIiwicHJvbWlzZVJlamVjdCIsIm5ld1ZhbHVlIiwicHJvbWlzZSIsImZpbmFsZSIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2ltbWVkaWF0ZSIsIl91bmhhbmRsZWRSZWplY3Rpb24iLCJpIiwibGVuIiwiaGFuZGxlIiwiZGVmZXJyZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyZXN1bHQiLCJhcnIiLCJyZXNvbHZlIiwicmVqZWN0IiwiaXNBcnJheSIsInByb3RvdHlwZSIsInJlbWFpbmluZyIsIm1hbmFnZVJlc3BvbnNlIiwiY29uc3RydWN0b3IiLCJfIiwic2V0VGltZW91dCIsIndhcm4iLCJQcm9taXNlSGFuZGxlciIsIlBlZXJDb25uZWN0aW9uU2VydmljZSIsIkZlYXR1cmVFbmFibGVtZW50IiwicHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhY2hlZCIsImNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJwZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjcmVhdGVQZWVyQ29ubmVjdGlvbiIsInBlZXJDb25uZWN0aW9uIiwic3VwcG9ydHNBZGRUcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJhZGRUcmFuc2NlaXZlciIsImRpcmVjdGlvbiIsInZpZGVvVHJhbnNjZWl2ZXIiLCJjcmVhdGVPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwibG9jYWxPZmZlciIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJ1cGRhdGVTdGF0aXN0aWNUaW1lT3V0IiwiUnRjQ29ubmVjdGlvbk1vbml0b3IiLCJtZWRpYVN0cmVhbSIsImVzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfcGVlckNvbm5lY3Rpb24iLCJfZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl90cmFja3NUb01vbml0b3IiLCJnZXRUcmFja3MiLCJtYXAiLCJ0cmFjayIsInBhcnNlZFNEUCIsIlNkcFBhcnNlciIsImN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiIsInNkcCIsIl9lc3RpbWF0ZWRBdWRpb0NvZGVjIiwiYXVkaW9Db2RlYyIsIl9lc3RpbWF0ZWRWaWRlb0NvZGVjIiwidmlkZW9Db2RlYyIsInVwZGF0ZVN0YXRpc3RpYyIsIl9pc01vbml0b3JSdW5uaW5nIiwiX3VwZGF0ZVRpbWVPdXQiLCJjbGVhclRpbWVvdXQiLCJ1cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJnZXRLaW5kRm9yU2FmYXJpMTEiLCJpZCIsImdldFN0YXRzIiwic3RhdHMiLCJydGNTdGF0cyIsInJvdW5kVHJpcFRpbWUiLCJjdXJyZW50Um91bmRUcmlwVGltZSIsIm1lZGlhVHlwZSIsImNvZGVjIiwiY29kZWNJZCIsIm1pbWVUeXBlIiwic3NyYyIsImJ5dGVzUmVjZWl2ZWQiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwiX3J0Y1N0YXRpc3RpYyIsInZpZGVvIiwiZnJhbWVzRGVjb2RlZCIsImdldFN0YXRzTGVnYWN5IiwicmVwb3J0IiwibmFtZXMiLCJzdGF0IiwiX3NkcCIsIl9hdWRpb0NvZGVjIiwiYXBwbHlDb2RlYyIsIl92aWRlb0NvZGVjIiwic3BsaXRTZHAiLCJ1c2VkQ29kZWNMaW5lIiwiZmluZCIsInVzZWRDb2RlYyIsImNvZGVjTmFtZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbiIsImNvbmZpZ3VyYXRpb24iLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiIsIlJUQ1BlZXJDb25uZWN0aW9uIiwib3B0aW9ucyIsImNyZWF0ZUFuc3dlciIsImRlc2NyaXB0aW9uIiwic2V0TG9jYWxEZXNjcmlwdGlvbiIsIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiIsImhhc0NyeXB0byIsInNldFJlbW90ZURlc2NyaXB0aW9uIiwic2VsZWN0b3IiLCJnZXRDb25maWd1cmF0aW9uIiwic2V0Q29uZmlndXJhdGlvbiIsImNsb3NlIiwiY3VycmVudExvY2FsRGVzY3JpcHRpb24iLCJpY2VDb25uZWN0aW9uU3RhdGUiLCJoYW5kbGVyIiwib250cmFjayIsIm9uaWNlY2FuZGlkYXRlIiwib25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5Iiwic3ViamVjdCIsIl9zdWJqZWN0Iiwic3Vic2NyaWJlIiwiRGlzcG9zYWJsZUxpc3RlbmVyIiwibGlzdGVuZXJzIiwiaWR4IiwiX2xpc3RlbmVycyIsImNoYW5nZWQiLCJjb21wYXJhYmxlIiwiZXF1YWxzIiwiYmFzZVVSTCIsIm9yaWdpbiIsInRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjbGllbnRTZXNzaW9uSWQiLCJpZ25vcmVkRW52aXJvbm1lbnQiLCJpZ25vcmVkRGlzY292ZXJ5VXJpIiwidGVsZW1ldHJ5VXJsIiwidGVsZW1ldHJ5QXBwZW5kZXIiLCJyZW1vdmUiLCJpZ25vcmVkVGVuYW5jeSIsIl9tZXRyaWNzU2VydmljZSIsIkRpc2NvdmVyeVVyaSIsImlnbm9yZWRUZWxlbWV0cnlMZXZlbCIsIl90ZWxlbWV0cnlMZXZlbCIsIl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUiLCJnZXRCb29sZWFuVmFsdWUiLCJfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwiZGlzY292ZXJ5VXJpIiwiZ2V0VGVsZW1ldHJ5VXJsIiwiY2hhbm5lbFRva2VuIiwicGFyc2VkVG9rZW4iLCJFZGdlQXV0aCIsInVyaVZhbHVlIiwiYmFzZVVSSVZhbHVlIiwiX2luaXRpYWxpemVkIiwiX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImNvbnNvbGVMb2dnaW5nTGV2ZWwiLCJjb25zb2xlQXBwZW5kZXIiLCJhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIndlYlBsYXllckxvYWRlciIsIl93ZWJQbGF5ZXJMb2FkZXIiLCJzaGFrYVBsYXllckxvYWRlciIsIl9zaGFrYVBsYXllckxvYWRlciIsImhsc0pzTG9hZGVyIiwiX2hsc0pzTG9hZGVyIiwiX3NlbmRMb2NhbENhbmRpZGF0ZXMiLCJfY2xpZW50U2Vzc2lvbklkIiwiX2xvYWRlZFRpbWVzdGFtcCIsIl9yZWFkT25seUluaXRpYWxpemVkIiwiX3JlYWRPbmx5RGlzY292ZXJ5VXJpIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiX3RlbGVtZXRyeVVybCIsIl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwicmV0cmllc0Ftb3VudCIsImFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbiIsImFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiaW5pdCIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0Iiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwiam9pbiIsIkJpdHJhdGVTdGF0ZSIsIkJpdHJhdGVNb2RlIiwiZGVmYXVsdFRhcmdldExhZyIsImRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiIsImJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwiZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMiLCJtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIkNoYW5uZWwiLCJ2aWRlb0VsZW1lbnQiLCJ0b2tlbiIsInRhcmdldExhZyIsIl9jb250ZXh0IiwiQ2hhbm5lbENvbnRleHQiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVZpZGVvRWxlbWVudCIsIl9yZWFkT25seVRva2VuIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwicnRjU3RhdGlzdGljcyIsIl9yZWFkT25seU1lZGlhU3RyZWFtIiwic2Vzc2lvblRlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJjaGFubmVsRGlzcG9zYWJsZXMiLCJfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyIiwiaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQiLCJyZW5kZXJlckRpc3Bvc2FibGVzIiwidmlkZW9UZWxlbWV0cnkiLCJkYXRhc2V0IiwiVmlkZW9UZWxlbWV0cnkiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiQ2hhbm5lbFN0YXRlIiwicmVzdGFydEFmdGVyU3RvcCIsImNsZWFyRmFpbHVyZUNvdW50VGltZW91dCIsIm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyIsImVsYXBzZWRJbk1pbGxpc2Vjb25kcyIsImNoYW5uZWxJbml0aWFsaXphdGlvbiIsImdldFRpbWUiLCJsaW1pdEJpdHJhdGUiLCJzdGFydCIsIndpZHRoIiwidmlkZW9XaWR0aCIsImhlaWdodCIsInZpZGVvSGVpZ2h0IiwiRGltZW5zaW9uIiwiYml0cmF0ZUluQml0c1BlclNlY29uZCIsInN0YXR1cyIsInBhdXNlIiwic3JjT2JqZWN0IiwiY2xlYW5VcFJlc291cmNlcyIsInBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50IiwibXV0ZWQiLCJzdG9wIiwiaXNEaXNwb3NlZCIsImxpc3Rlbk9uU3RyZWFtU2V0dXAiLCJ1cmkiLCJnZXRVcmkiLCJzdHJlYW1QbGF5ZXIiLCJTdHJlYW1GYWN0b3J5IiwiaGFuZGxlU3RyZWFtRmFpbHVyZSIsImZhaWwiLCJmaW5hbGx5IiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsImRpc3Bvc2FibGVzIiwibWluIiwicG93IiwibWF4IiwiZGVzdHJveVN0cmVhbSIsInBsYXlQcm9taXNlIiwicGxheSIsImhhc0F1ZGlvVHJhY2siLCJmaWx0ZXIiLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiIsInBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJDaGFubmVscyIsImRlZmF1bHREaXNjb3ZlcnlVcmkiLCJCaXRyYXRlTW9kZU1hcHBpbmciLCJiaXRyYXRlTW9kZSIsIkJpdHJhdGVTdGF0ZU1hcHBpbmciLCJiaXRyYXRlU3RhdGUiLCJkaXNjb3ZlcnlDYWNoZUludGVydmFsIiwiRGlzY292ZXJ5IiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsIl9jYWNoZSIsImRpc2NvdmVyeVNlcnZpY2UiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiY2FjaGVkVmFsdWUiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsInByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiZGVmYXVsdFRpbWVvdXQiLCJfdXJpIiwidGltZW91dCIsInJhY2UiLCJvayIsInRleHQiLCJhc1N0cmluZyIsImVuZFBvaW50cyIsIkVuZFBvaW50IiwiZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJuZXZlclJlc29sdmUiLCJwaW5nIiwidGltZSIsInNka1ZlcnNpb24iLCJfZGlzY292ZXJ5VXJpIiwiYXBpVmVyc2lvbiIsIl90aW1lb3V0IiwiYnVpbGRQaW5nVXJsIiwiZmluaXNoZWQiLCJfcm91bmRUcmlwVGltZSIsImxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uIiwiYXBwbGljYXRpb25JZCIsImJ1aWxkVXJsIiwiY2xpZW50VmVyc2lvbiIsImJvZHlXaXRoT2ZmZXIiLCJlZGdlQXV0aFRva2VuIiwic2Vzc2lvbkRlc2NyaXB0aW9uIiwiY29udmVydFJUQ1NkcFR5cGVUb1NkcFR5cGUiLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbiIsImJvZHlXaXRob3V0T2ZmZXIiLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uIiwiaHR0cFJlc3BvbnNlIiwibWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJzdWJzY3JpYmVSZXNwb25zZSIsImRlYnVnIiwic2hhcmVkU2VjcmV0IiwibWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIiwiY2FuZGlkYXRlcyIsImRpc2NvdmVyeUNvbXBsZXRlZCIsIm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiZGVzdHJveVN0cmVhbVJlc3BvbnNlIiwicGF0aCIsInBhdGhBc0FycmF5IiwiY29uY2F0IiwianNvbiIsInJ0Y0NvbmZpZ3VyYXRpb24iLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVNlcnZlcnMiLCJ1cmxzIiwidXNlcm5hbWUiLCJjcmVkZW50aWFsIiwiaWNlVHJhbnNwb3J0UG9saWN5IiwicGVlcklkZW50aXR5IiwicnRjcE11eFBvbGljeSIsImNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwicnRjU2Vzc2lvbkRlc2NyaXB0aW9uIiwiZWRnZUF1dGhUb2tlblByZWZpeCIsImlzVmFsaWRUb2tlbiIsImVuY29kZWRFZGdlQXV0aFRva2VuIiwiYXRvYiIsInN1YnN0ciIsInBhcnNlIiwiQ2h1bmtlZFN0cmVhbSIsImNoYW5uZWxDb250ZXh0IiwiX2NoYW5uZWxDb250ZXh0IiwiX2hhbmRsZVN0cmVhbUZhaWx1cmUiLCJhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQiLCJtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJhcHBseVN0YXR1cyIsIm9mZmVyU2RwIiwib3JpZ2luU3RhcnRUaW1lIiwiTGl2ZVN0cmVhbWluZyIsInBsYXllciIsIm1vbml0b3IiLCJfbW9uaXRvckRpc3Bvc2FibGVzIiwibmV3U3RyZWFtU3RhdGlzdGljcyIsIl9zdHJlYW1TdGF0aXN0aWNzIiwiY3VycmVudFRpbWUiLCJkYXRhQnVmZmVyZWQiLCJfbW9uaXRvckZhaWx1cmVDb3VudCIsInBhdXNlZCIsIkhsc1BsYXllciIsIm1hbmlmZXN0VVJJIiwiX3ZpZGVvRWxlbWVudCIsIl9raW5kIiwiX3N0cmVhbUlkIiwiX21hbmlmZXN0VVJJIiwiZW5jb2RlVVJJIiwicmVwbGFjZSIsIl9vcHRpb25zIiwiX3BsYXllciIsImVuYWJsZVdvcmtlciIsIm1heEJ1ZmZlckxlbmd0aCIsImxpdmVCYWNrQnVmZmVyTGVuZ3RoIiwibGl2ZVN5bmNEdXJhdGlvbiIsImxpdmVEdXJhdGlvbkluZmluaXR5IiwibGl2ZU1heExhdGVuY3lEdXJhdGlvbiIsIkluZmluaXR5IiwiaGlnaEJ1ZmZlcldhdGNoZG9nUGVyaW9kIiwibG9hZFNvdXJjZSIsImF0dGFjaE1lZGlhIiwiY2FuUGxheVR5cGUiLCJzcmMiLCJuZXR3b3JrU3RhdGUiLCJOZXR3b3JrU3RhdGVzIiwiTmV0d29ya05vU291cmNlIiwic3RhdGlzdGljcyIsIm1lZGlhIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJidWZmZXJlZCIsImVuZCIsInN0cmVhbUNvbnRyb2xsZXIiLCJ0cnVlQ3VycmVudFRpbWUiLCJkZXN0cm95IiwiX2hsc1BsYXllciIsIl9zaGFrYSIsIl9waGVuaXhXZWJQbGF5ZXIiLCJsb2FkZWQiLCJfcGVuZGluZyIsIlBsYXllciIsImRhc2hNYW5pZmVzdFVybE1hdGNoIiwiaGxzTWFuaWZlc3RVcmxNYXRjaCIsIm1hbmlmZXN0VXJsIiwicGxheWxpc3RVcmwiLCJwcmVmZXJOYXRpdmUiLCJzaG91bGRVc2VOYXRpdmVIbHMiLCJXZWJQbGF5ZXIiLCJTaGFrYVBsYXllciIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwiZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCIsIlJlYWxUaW1lU3RyZWFtIiwiYWxsIiwic3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIiwic3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIiwiYXBwbHlSdGNDb25maWd1cmF0aW9uIiwic3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQiLCJjYW5jZWxEaXNjb3ZlcnkiLCJjYW5kaWRhdGUiLCJhZGRJY2VDYW5kaWRhdGVzIiwicmV0cnlDYWxsYmFjayIsIm9uTGluZSIsInJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwibWVkaWFTdHJlYW1Qcm9taXNlIiwic3RyZWFtcyIsInRyYWNrTGlzdGVuZXIiLCJhbnN3ZXIiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsInN1Y2Nlc3MiLCJydGNDb25uZWN0aW9uTW9uaXRvciIsInJ0Y1N0YXRpc3RpYyIsInJ0Y1ZpZGVvU3RhdGlzdGljIiwicnRjQXVkaW9TdGF0aXN0aWMiLCJhdWRpbyIsImF1ZGlvVHJhY2tGYWlsZWQiLCJ2aWRlb1RyYWNrRmFpbGVkIiwib3B0aW9uYWxQZWVyQ29ubmVjdGlvbiIsInRydW5jYXRlSWNlU2VydmVycyIsIm5ld1J0Y0NvbmZpZ3VyYXRpb24iLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJwbGF5ZXJPcHRpb25zIiwiYWJyIiwiZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlIiwibWFuaWZlc3QiLCJyZXRyeVBhcmFtZXRlcnMiLCJzdHJlYW1pbmciLCJyZWJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJpbmdHb2FsIiwiYnVmZmVyQmVoaW5kIiwibWF4QXR0ZW1wdHMiLCJiYWNrb2ZmRmFjdG9yIiwibG9hZFBsYXllciIsImVzdGltYXRlZEJhbmR3aWR0aCIsInBsYXlUaW1lIiwidW5sb2FkIiwicGxheWVyQ29uZmlnIiwiY29uZmlndXJlIiwibG9hZCIsImNvZGUiLCJpc1J0bXAiLCJjYXBhYmlsaXRpZXMiLCJpc1N0cmVhbWluZyIsImJhbmR3aWR0aFRvU3RhcnRBdCIsIm1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIiwiZXJyb3JPYmplY3QiLCJjYW5SZWxvYWQiLCJzZXZlcml0eSIsInJlbG9hZElmQWJsZSIsImlzTmF0aXZlIiwiZGVsaXZlcnlUeXBlIiwiaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQiLCJfbGFzdFJlbG9hZFRpbWUiLCJyZWxvYWQiLCJfX1NES1ZFUlNJT05fXyIsIl9kZWZhdWx0VmVyc2lvbiIsIl90ZWxlbWV0cnlTZXJ2aWNlIiwiVGVsZW1ldHJ5U2VydmljZSIsImxvZ1JlY29yZCIsIl9sb2dzIiwic2VuZExvZ3NJZkFibGUiLCJsb2dNZXNzYWdlcyIsIm51bWJlck9mTG9nc1RvU2VuZCIsInNpemVPZkxvZ3NUb1NlbmQiLCJnZXRMb2dTaXplIiwic3VtIiwic2VuZExvZ3MiLCJkdXJhdGlvbiIsIl9kdXJhdGlvbiIsImlzTmVnYXRpdmUiLCJhYnMiLCJvZmZzZXQiLCJmbG9vciIsIm1pbGxpc2Vjb25kcyIsInNlY29uZHMiLCJtaW51dGVzIiwiaG91cnMiLCJwYXJ0cyIsIlN0cmluZyIsInBhZFN0YXJ0IiwidGFyZ2V0TGVuZ3RoIiwicGFkU3RyaW5nIiwicmVwZWF0Iiwib3RoZXIiLCJfbmV0d29ya01vbml0b3IiLCJyZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlIiwicmVjb3JkTmV0d29ya1JUVFVwZGF0ZSIsInJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlIiwiZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJyZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUiLCJ0aW1lU2luY2VMYXN0Q2hhbmdlIiwiZ2V0VGltZVNpbmNlTGFzdENoYW5nZSIsIm5ld1JUVCIsIm9sZFJ0dCIsIl9sYXN0TmV0d29ya1N0YXRpc3RpY3MiLCJuZXdOZXR3b3JrVHlwZSIsIm9sZE5ldHdvcmtUeXBlIiwibmV3Q2FwYWNpdHkiLCJvbGRDYXBhY2l0eSIsImZsb2F0IiwiY2hhbm5lbFN0YXJ0VGltZSIsIl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUiLCJfbGlzdGVuVG9GaXJzdFRpbWUiLCJjYWxsVGltZVRvRmlyc3RGcmFtZSIsIl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciIsIl9saXN0ZW5Gb3JTdGFsbCIsIm9uU3RhbGwiLCJfbGlzdGVuRm9yQ29udGludWF0aW9uIiwiZXZlbnQiLCJvbkNvbnRpbnVhdGlvbiIsIl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIiLCJwdXNoVGltZVRvRmlyc3RGcmFtZSIsInB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3RpbWVUb0ZpcnN0RnJhbWUiLCJkdXJhdGlvblNpbmNlUGFnZUxvYWQiLCJfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl92aWRlb1N0YWxsZWQiLCJidWZmZXJMZW5ndGgiLCJoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCIsIl9sYXN0UHJvZ3Jlc3MiLCJ0aW1lU2luY2VTdG9wIiwibmV3UmVzb2x1dGlvbiIsIl92aWRlb1Jlc29sdXRpb24iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPOzs7Ozs7Ozs7QUNWQTtBQUNBOztBQUVBLHdDQUF3QyxTQUFTO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQzs7Ozs7Ozs7OztBQ1ZBO0FBQ0E7QUFDQTs7QUFFQSxpQzs7Ozs7Ozs7OztBQ0pBLHVCQUF1QixtQkFBTyxDQUFDLHFGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBOztBQUVBLG9DOzs7Ozs7Ozs7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3Qzs7Ozs7Ozs7Ozs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCxJQUFJLE9BQU87QUFDWDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxtQzs7Ozs7Ozs7OztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDOzs7Ozs7Ozs7O0FDTkE7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOEI7Ozs7Ozs7Ozs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQzs7Ozs7Ozs7OztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQzs7Ozs7Ozs7OztBQ1BBLHFCQUFxQixtQkFBTyxD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QUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0EsOENBQThDLE9BQU87O0FBRXJEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLGtCQUFrQjtBQUNuRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxLQUEwQixvQkFBb0IsQ0FBRTtBQUNsRDs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7VUN4dEJBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7OztXQ3JCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsZ0NBQWdDLFlBQVk7V0FDNUM7V0FDQSxFOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0Esd0NBQXdDLHlDQUF5QztXQUNqRjtXQUNBO1dBQ0EsRTs7Ozs7V0NQQSxzRjs7Ozs7V0NBQTtXQUNBO1dBQ0E7V0FDQSxzREFBc0Qsa0JBQWtCO1dBQ3hFO1dBQ0EsK0NBQStDLGNBQWM7V0FDN0QsRTs7OztVQ05BO1VBQ0E7VUFDQTtVQUNBIiwiZmlsZSI6ImZ1bGwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5OyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXM7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5XCIpO1xuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aG91dEhvbGVzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZDsiLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cblxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvcjsiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjazsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZUNsYXNzOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eTsiLCJmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2Y7IiwidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2ZcIik7XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXk7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkpIHJldHVybjtcbiAgdmFyIF9hcnIgPSBbXTtcbiAgdmFyIF9uID0gdHJ1ZTtcbiAgdmFyIF9kID0gZmFsc2U7XG4gIHZhciBfZSA9IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9kID0gdHJ1ZTtcbiAgICBfZSA9IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfYXJyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXlMaW1pdDsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVJlc3Q7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQ7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2ZcIik7XG5cbnZhciBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgPSByZXF1aXJlKFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIik7XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm47IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2Y7IiwidmFyIGFycmF5V2l0aEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRoSG9sZXNcIik7XG5cbnZhciBpdGVyYWJsZVRvQXJyYXlMaW1pdCA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0XCIpO1xuXG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheVwiKTtcblxudmFyIG5vbkl0ZXJhYmxlUmVzdCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlUmVzdFwiKTtcblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfc2xpY2VkVG9BcnJheTsiLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlc1wiKTtcblxudmFyIGl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheVwiKTtcblxudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlcIik7XG5cbnZhciBub25JdGVyYWJsZVNwcmVhZCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlU3ByZWFkXCIpO1xuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXk7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheVwiKTtcblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXk7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZVwiKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5jb25zdCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCA9IDMwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5SXNGb3JlZ3JvdW5kOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzRm9yZWdyb3VuZDogU3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSBfdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBwcml2YXRlIF9kb2N1bWVudEZvY3VzSW50ZXJ2YWw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9pc0ZvcmVncm91bmQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZCA9IG5ldyBSZWFkT25seVN1YmplY3QodGhpcy5faXNGb3JlZ3JvdW5kKTtcbiAgICB0aGlzLmRldGVjdFRhYkZvY3VzQ2hhbmdlKCk7XG4gIH1cblxuICBnZXQgaXNGb3JlZ3JvdW5kKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kO1xuICB9XG5cbiAgZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5fdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGRldGVjdFRhYkZvY3VzQ2hhbmdlKCk6IHZvaWQge1xuICAgIGxldCBoaWRkZW47XG4gICAgbGV0IHZpc2liaWxpdHlDaGFuZ2U7XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElnbm9yZWQgYXMgdHlwZXNjcmlwdCBkb2VzIG5vdCBoYXZlIGxlZ2FjeSBnZXRTdGF0cyB0eXBlc1xuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtaWdub3JlICovXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQubXNIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnbXNIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICdtc3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LndlYmtpdEhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICd3ZWJraXRIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd3ZWJraXR2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC5oaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7IC8vIE9wZXJhIDEyLjEwIGFuZCBGaXJlZm94IDE4IGFuZCBsYXRlciBzdXBwb3J0XG4gICAgICBoaWRkZW4gPSAnaGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAndmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgKi9cblxuICAgIGNvbnN0IGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSAhZG9jdW1lbnRbaGlkZGVuXTtcblxuICAgICAgdGhpcy5zZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk7XG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50W2hpZGRlbl0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcblxuICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGlzdGVuRm9yRG9jdW1lbnRGb2N1cy5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRm9yRG9jdW1lbnRGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gZG9jdW1lbnQuaGFzRm9jdXMoKTtcblxuICAgICAgdGhpcy5zZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSwgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwgPSBudWxsO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXNGb3JlZ3JvdW5kID09PSBpc0ZvcmVncm91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0ZvcmVncm91bmQudmFsdWUgPSBpc0ZvcmVncm91bmQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJEZXRlY3RvciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCA9IC8oTVNJRXwoPyFHZWNrby4rKUZpcmVmb3h8KD8hQXBwbGVXZWJLaXQuK0Nocm9tZS4rKVNhZmFyaXwoPyFBcHBsZVdlYktpdC4rKUNocm9tZXxBcHBsZVdlYktpdCg/IS4rQ2hyb21lfC4rU2FmYXJpKXxHZWNrbyg/IS4rRmlyZWZveCkpKD86IHxcXC8pKFtcXGQuYXByZV0rKS9nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZSA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTWFqb3JWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTY5ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS82OS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzAgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcwLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzEuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcyID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Mi4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzQgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc0LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzUuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc2ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ni4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzcgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc3LicpO1xuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9icm93c2VyTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck1ham9yVmVyc2lvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9icm93c2VyTWFqb3JWZXJzaW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTY5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNjk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcxO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc1O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc2KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUFuZFZlcnNpb24gPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgpO1xuXG4gICAgaWYgKGJyb3dzZXJOYW1lQW5kVmVyc2lvbiAmJiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF0pIHtcbiAgICAgIHJldHVybiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAoIWJyb3dzZXJOYW1lTGlzdCB8fCAhYnJvd3Nlck5hbWVMaXN0WzBdKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJyb3dzZXJOYW1lTGlzdFswXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpOiBudW1iZXIge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJWZXJzaW9uTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAoIWJyb3dzZXJWZXJzaW9uTGlzdCB8fCAhYnJvd3NlclZlcnNpb25MaXN0WzFdKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsVmVyc2lvbiA9IGJyb3dzZXJWZXJzaW9uTGlzdFsxXTtcblxuICAgIGlmICghZnVsbFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXIoZnVsbFZlcnNpb24uc3BsaXQoJy4nKVswXSkgfHwgMDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgbXNpZSA9IHVzZXJBZ2VudC5pbmRleE9mKCdNU0lFICcpO1xuXG4gICAgaWYgKG1zaWUgPiAwKSB7XG4gICAgICAvLyBJRSAxMCBvciBvbGRlciA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcbiAgICAgIHJldHVybiBgSUUvJHtwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKG1zaWUgKyA1LCB1c2VyQWdlbnQuaW5kZXhPZignLicsIG1zaWUpKSwgMTApfWA7XG4gICAgfVxuXG4gICAgY29uc3QgdHJpZGVudCA9IHVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50LycpO1xuXG4gICAgaWYgKHRyaWRlbnQgPiAwKSB7XG4gICAgICAvLyBJRSAxMSA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB1c2VyQWdlbnQuaW5kZXhPZigncnY6Jyk7XG5cbiAgICAgIHJldHVybiBgSUUvJHtwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKHZlcnNpb24gKyAzLCB1c2VyQWdlbnQuaW5kZXhPZignLicsIHZlcnNpb24pKSwgMTApfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIge1xuICBnZXRTdHJpbmdWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSkgfHxcbiAgICAgIHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShgJHtuYW1lfS11cmktcGFyYW1ldGVyLW5hbWVgKSB8fFxuICAgICAgdGhpcy5kZWZhdWx0U3RyaW5nVmFsdWVbbmFtZV07XG4gIH1cblxuICBnZXRCb29sZWFuVmFsdWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gJ3RydWUnIHx8IHZhbHVlID09PSAnMScgfHwgdmFsdWUgPT09ICdPbic7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVGcm9tVXJpID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKGAke25hbWV9LXVyaS1wYXJhbWV0ZXItbmFtZWApO1xuXG4gICAgaWYgKHZhbHVlRnJvbVVyaSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJyB8fCB2YWx1ZSA9PT0gJ09uJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0Qm9vbGVhblZhbHVlW25hbWVdID09PSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdFN0cmluZ1ZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZ30ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LW1ldHJpY3MtbGV2ZWwnOiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpLFxuICAgICAgJ3BoZW5peC1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jb25zb2xlLWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC10ZWxlbWV0cnktbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY2hhbm5lbC10b2tlbic6ICcnLFxuICAgICAgJ3BoZW5peC11cmknOiAnJyxcbiAgICAgICdwaGVuaXgtYmFzZS11cmknOiAnJ1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Qm9vbGVhblZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IGJvb2xlYW4gfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJzogdHJ1ZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhVmFsdWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBtZXRhW25hbWU9JyR7bmFtZX0nXWApO1xuXG4gICAgaWYgKCFtZXRhVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG1ldGFWYWx1ZS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWVVUklQYXJhbWV0ZXJOYW1lID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpO1xuXG4gICAgaWYgKCF2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uc2VhcmNoKS5nZXQodmFsdWVVUklQYXJhbWV0ZXJOYW1lKSB8fCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV0d29ya01vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1N1cHBvcnRlZCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcnR0OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lZmZlY3RpdmVUeXBlOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpO1xuICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuICB9XG5cbiAgZ2V0IGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldCBydHQoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcnR0O1xuICB9XG5cbiAgZ2V0IGVmZmVjdGl2ZVR5cGUoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fZWZmZWN0aXZlVHlwZTtcbiAgfVxuXG4gIGdldCBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5kb3dubGluayB8fCBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5kb3dubGlua01heDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWZmZWN0aXZlVHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuICdVbmtub3duJztcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZWZmZWN0aXZlVHlwZSB8fCBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS50eXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSb3VuZFRyaXBUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJ0dDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGxpc3RlbmVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gICAgfTtcblxuICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0aXN0aWNzKCk6IHZvaWQge1xuICAgIHRoaXMuX3J0dC52YWx1ZSA9IHRoaXMuZ2V0Um91bmRUcmlwVGltZSgpO1xuICAgIHRoaXMuX2VmZmVjdGl2ZVR5cGUudmFsdWUgPSB0aGlzLmdldEVmZmVjdGl2ZVR5cGUoKTtcbiAgICB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS52YWx1ZSA9IHRoaXMuZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX1BSSVZBQ1lfTU9ERV9fOiBib29sZWFuO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcml2YWN5TW9kZSB7XG4gIHByaXZhdGUgc3RhdGljIF9pc1ByaXZhdGU6IGJvb2xlYW47XG5cbiAgc3RhdGljIGdldCBpc1ByaXZhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUHJpdmF0ZTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUlzUHJpdmF0ZSgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5faXNQcml2YXRlID0gX19QUklWQUNZX01PREVfXztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9pc1ByaXZhdGUgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuUHJpdmFjeU1vZGUuYXBwbHlJc1ByaXZhdGUoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5cbmV4cG9ydCBjbGFzcyBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVNldHVwTGlzdGVuZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXRyaWNzU2VydmljZSA9IFNESy5tZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIF9tZXRyaWNTdWJtaXR0ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3VjY2VzcyhzdHJlYW1JZCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkLCBzdHJlYW1JZCk7XG4gIH1cblxuICBmYWlsKCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkU3RyZWFtTWV0cmljKG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLCBzdHJlYW1JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tZXRyaWNTdWJtaXR0ZWQpIHtcbiAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljU3VibWl0dGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0dXBUaW1lID0gbm93IC0gdGhpcy5fc3RhcnRUaW1lO1xuICAgIGNvbnN0IG1ldHJpY05hbWUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWNUeXBlKS5nZXROYW1lKCk7XG5cbiAgICB0aGlzLm1ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBzZXR1cFRpbWV9LFxuICAgICAgc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBTdHJlYW0gbWV0cmljIFslc10gaW4gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5ldyBEdXJhdGlvbnMoc2V0dXBUaW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4vSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNwb3NhYmxlIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIF9kaXNwb3NlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGlzcG9zYWJsZTogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihkaXNwb3NhYmxlOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5fZGlzcG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlID0gZGlzcG9zYWJsZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3Bvc2FibGUuY2FsbCh0aGlzKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4vSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNwb3NhYmxlTGlzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3Q6IElEaXNwb3NhYmxlW10gPSBbXTtcblxuICBhZGQoZGlzcG9zYWJsZTogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LnB1c2goZGlzcG9zYWJsZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QuZm9yRWFjaChkaXNwb3NhYmxlID0+IGRpc3Bvc2FibGUuZGlzcG9zZSgpKTtcbiAgICB0aGlzLl9saXN0Lmxlbmd0aCA9IDA7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRGlzcG9zYWJsZUxpc3RbZGlzcG9zYWJsZXM9JHt0aGlzLl9saXN0Lmxlbmd0aH1dYDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5ncyB7XG4gIHN0YXRpYyByYW5kb20obGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhbmRvbTEzQ2hhcmFjdGVycyA9ICgpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygyLCAxNSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxvb3BzOiBudW1iZXIgPSBNYXRoLmNlaWwobGVuZ3RoIC8gMTMpO1xuXG4gICAgcmV0dXJuIG5ldyBBcnJheShsb29wcykuZmlsbChyYW5kb20xM0NoYXJhY3RlcnMpLnJlZHVjZSgoc3RyaW5nLCBmdW5jKSA9PiB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgZnVuYygpO1xuICAgIH0sICcnKS5zdWJzdHJpbmcoMCwgbGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmdzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFVucmVhY2hhYmxlKHg6IG5ldmVyKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgWyR7eH1dLiBUaGlzIHNob3VsZCBuZXZlciBiZSByZWFjaGVkYCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2VydFVucmVhY2hhYmxlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwZW5kZXJzIHtcbiAgcHJpdmF0ZSBfYXBwZW5kZXJzOiBBcnJheTxJQXBwZW5kZXI+ID0gW107XG5cbiAgZ2V0IHZhbHVlKCk6IEFycmF5PElBcHBlbmRlcj4ge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBhZGQoYXBwZW5kZXI6IElBcHBlbmRlcik6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycy5wdXNoKGFwcGVuZGVyKTtcbiAgfVxuXG4gIHJlbW92ZShhcHBlbmRlcik6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IHRoaXMuX2FwcGVuZGVycy5yZWR1Y2UoKGl0ZW1zLCBpdGVtKSA9PiB7XG4gICAgICBpZiAoIShpdGVtID09PSBhcHBlbmRlcikpIHtcbiAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH0sIFtdIGFzIEFycmF5PElBcHBlbmRlcj4pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uc29sZUFwcGVuZGVyIGltcGxlbWVudHMgSUFwcGVuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWw7XG5cbiAgbG9nKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChsb2dMZXZlbCA8IHRoaXMuX3RocmVzaG9sZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gYCR7ZGF0ZS50b0lTT1N0cmluZygpfSBbJHtjYXRlZ29yeX1dIFske0xvZ2dpbmdMZXZlbFtsb2dMZXZlbF19XSAke21lc3NhZ2V9YDtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICBjb25zb2xlLmxvZyhmdWxsTWVzc2FnZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGZ1bGxNZXNzYWdlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuXG5leHBvcnQgZW51bSBMb2dnaW5nTGV2ZWwge1xuICBBbGwgPSAtMSxcbiAgVHJhY2UgPSAxMCxcbiAgRGVidWcgPSAyMCxcbiAgSW5mbyA9IDMwLFxuICBXYXJuID0gNDAsXG4gIEVycm9yID0gNTAsXG4gIEZhdGFsID0gNjAsXG4gIE9mZiA9IDEwMCxcbn1cblxuZXhwb3J0IHR5cGUgTG9nZ2luZ0xldmVsSW5wdXRUeXBlcyA9ICdPZmYnIHwgJ1RyYWNlJyB8ICdEZWJ1ZycgfCAnSW5mbycgfCAnV2FybicgfCAnRXJyb3InIHwgJ0ZhdGFsJyB8ICdBbGwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jYXRlZ29yeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBlbmRlcnM6IEFwcGVuZGVycztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkO1xuXG4gIGdldCBjYXRlZ29yeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jYXRlZ29yeTtcbiAgfVxuXG4gIGdldCBhcHBlbmRlcnMoKTogQXBwZW5kZXJzIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nVGhyZXNob2xkIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgdHJhY2UoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLlRyYWNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLlRyYWNlLCBhcmdzKTtcbiAgfVxuXG4gIGRlYnVnKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5EZWJ1Zykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5EZWJ1ZywgYXJncyk7XG4gIH1cblxuICBpbmZvKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5JbmZvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkluZm8sIGFyZ3MpO1xuICB9XG5cbiAgd2FybiguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5XYXJuLCBhcmdzKTtcbiAgfVxuXG4gIGVycm9yKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5FcnJvciwgYXJncyk7XG4gIH1cblxuICBmYXRhbCguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRmF0YWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRmF0YWwsIGFyZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2cobGV2ZWw6IG51bWJlciwgYXJnczogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzKTtcblxuICAgIHRoaXMuX2FwcGVuZGVycy52YWx1ZS5mb3JFYWNoKChhcHBlbmRlcjogSUFwcGVuZGVyKSA9PiB7XG4gICAgICBhcHBlbmRlci5sb2cobGV2ZWwsIG1lc3NhZ2UsIHRoaXMuY2F0ZWdvcnksIGRhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3M6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSBhcmdzWzBdO1xuICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAocmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mICYmIGFyZ3MubGVuZ3RoID4gMSAmJiBpbmRleCA+PSAwKSB7XG4gICAgICBpbmRleCA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZignJScsIGluZGV4KTtcblxuICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICBjb25zdCB0eXBlID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxLCBpbmRleCArIDIpO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgJyUnOlxuICAgICAgICAgICAgLy8gRXNjYXBlZCAnJSUnIHR1cm5zIGludG8gJyUnXG4gICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxKTtcbiAgICAgICAgICAgIGluZGV4Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAnJWQnIG9yICclcycgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2onOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAlaicgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMuc3RyaW5naWZ5KGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMSkge1xuICAgICAgYXJncyA9IGFyZ3MucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICsgMSA9PT0gYXJyYXkubGVuZ3RoICYmIGN1cnJlbnRWYWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgJ1xcbicgKyB0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZS5zdGFjayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyBgWyR7dGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUpfV1gO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaW5naWZ5KGFyZzogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBjYWNoZSA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgYXJnIGluc3RhbmNlb2YgRXJyb3IgPyB0aGlzLnRvU3RyaW5nKGFyZykgOiBhcmcsXG4gICAgICAgIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChjYWNoZS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICc8cmVjdXJzaXZlPic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhY2hlLnB1c2godmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgMlxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJ1tvYmplY3QgaW52YWxpZCBKU09OLnN0cmluZ2lmeV0nO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUFyZ3VtZW50KGFyZ3VtZW50OiBhbnksIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmc6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHRoaXMudG9TdHJpbmcoYXJndW1lbnQpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAyKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9TdHJpbmcoZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGRhdGEgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IHRvU3RyaW5nU3RyID0gJyc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9ICdbb2JqZWN0IGludmFsaWQgdG9TdHJpbmcoKV0nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvU3RyaW5nU3RyO1xuICB9XG5cbiAgY29uc3RydWN0b3IoY2F0ZWdvcnk6IHN0cmluZywgYXBwZW5kZXJzOiBBcHBlbmRlcnMsIHRocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCkge1xuICAgIHRoaXMuX2NhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gYXBwZW5kZXJzO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByaXZhY3lNb2RlIGZyb20gJy4uL2RvbS9Qcml2YWN5TW9kZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckRlZmF1bHRzIHtcbiAgc3RhdGljIGdldCBkZWZhdWx0TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIFByaXZhY3lNb2RlLmlzUHJpdmF0ZSA/IExvZ2dpbmdMZXZlbC5PZmYgOiBMb2dnaW5nTGV2ZWwuQWxsO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBQcml2YWN5TW9kZS5pc1ByaXZhdGUgPyBMb2dnaW5nTGV2ZWwuT2ZmIDogTG9nZ2luZ0xldmVsLkFsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyLCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4vQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQge0lDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyfSBmcm9tICcuLi9kb20vSUNvbmZpZ3VyYXRpb25QYXJhbWF0ZXJSZWFkZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJGYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcnM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IElMb2dnZXJ9ID0ge307XG4gIHByaXZhdGUgc3RhdGljIF9hcHBlbmRlcnM6IEFwcGVuZGVycyA9IG5ldyBBcHBlbmRlcnMoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCA9IG5ldyBMb2dnaW5nVGhyZXNob2xkKCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uID0gbmV3IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTtcblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0TG9nZ2VyKGNhdGVnb3J5OiBzdHJpbmcpOiBJTG9nZ2VyIHtcbiAgICBpZiAodHlwZW9mIGNhdGVnb3J5ICE9PSAnc3RyaW5nJykge1xuICAgICAgY2F0ZWdvcnkgPSAnU0RLJztcbiAgICB9XG5cbiAgICBjb25zdCBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XTtcblxuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgIHJldHVybiBsb2dnZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldID0gbmV3IExvZ2dlcihjYXRlZ29yeSwgdGhpcy5fYXBwZW5kZXJzLCB0aGlzLl90aHJlc2hvbGQpO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dpbmdMZXZlbCgpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgnY29uc29sZScsIExvZ2dlckZhY3RvcnkuYXBwbHlDb25zb2xlTG9nZ2VyLmJpbmQodGhpcykpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgndGVsZW1ldHJ5JywgTG9nZ2VyRmFjdG9yeS5hcHBseVRlbGVtZXRyeUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5TG9nZ2luZ0xldmVsKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWxvZ2dpbmctbGV2ZWwnKTtcblxuICAgIGlmIChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKSB7XG4gICAgICB0aGlzLl90aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwobmFtZTogc3RyaW5nLCBhcHBseUFwcGVuZGVyOiAobGV2ZWw6IExvZ2dpbmdMZXZlbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZShgcGhlbml4LSR7bmFtZX0tbG9nZ2luZy1sZXZlbGApO1xuXG4gICAgaWYgKHBhcmFtZXRlclZhbHVlID09PSAnT2ZmJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFwcGx5QXBwZW5kZXIoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUNvbnNvbGVMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlUZWxlbWV0cnlMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gbGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5Mb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxJbnB1dFR5cGVzfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShsb2dnaW5nTGV2ZWw6IExvZ2dpbmdMZXZlbCk6IExvZ2dpbmdMZXZlbElucHV0VHlwZXMge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsKSB7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5PZmY6XG4gICAgICAgIHJldHVybiAnT2ZmJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLlRyYWNlOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkRlYnVnOlxuICAgICAgICByZXR1cm4gJ0RlYnVnJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkluZm86XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuV2FybjpcbiAgICAgICAgcmV0dXJuICdXYXJuJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkVycm9yOlxuICAgICAgICByZXR1cm4gJ0Vycm9yJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkZhdGFsOlxuICAgICAgICByZXR1cm4gJ0ZhdGFsJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkFsbDpcbiAgICAgICAgcmV0dXJuICdBbGwnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChsb2dnaW5nTGV2ZWxUeXBlOiBMb2dnaW5nTGV2ZWxJbnB1dFR5cGVzKTogTG9nZ2luZ0xldmVsIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnVHJhY2UnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLlRyYWNlO1xuICAgICAgY2FzZSAnRGVidWcnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkRlYnVnO1xuICAgICAgY2FzZSAnSW5mbyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgICAgIGNhc2UgJ1dhcm4nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLldhcm47XG4gICAgICBjYXNlICdFcnJvcic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRXJyb3I7XG4gICAgICBjYXNlICdGYXRhbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRmF0YWw7XG4gICAgICBjYXNlICdBbGwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ1RocmVzaG9sZCB7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbDtcblxuICBnZXQgdmFsdWUoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0VGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljVHlwZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3M6IE1ldHJpY3NUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKG1ldHJpY3M6IE1ldHJpY3NUeXBlKSB7XG4gICAgdGhpcy5fbWV0cmljcyA9IG1ldHJpY3M7XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE1ldHJpY3NUeXBlW3RoaXMuX21ldHJpY3NdO1xuICB9XG5cbiAgZ2V0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGhpcy5fbWV0cmljcykge1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5DaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TdGFsbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5CdWZmZXJpbmc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9tZXRyaWNzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4vVGVsZW1ldHJ5RGVmYXVsdCc7XG5cbmV4cG9ydCBlbnVtIFRlbGVtZXRyeUxldmVsIHtcbiAgT2ZmID0gMTAwLFxuICBFc3NlbnRpYWwgPSAxMCxcbiAgQWxsID0gLTFcbn1cblxuZXhwb3J0IHR5cGUgVGVsZW1ldHJ5TGV2ZWxUeXBlID0gJ09mZicgfCAnRXNzZW50aWFsJyB8ICdBbGwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gIHByaXZhdGUgX3VybCA9ICdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeS9tZXRyaWNzJztcbiAgcHJpdmF0ZSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCA9IFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsO1xuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IG1ldHJpY3NVcmwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICBtZXRyaWNzVXJsLnBhdGhuYW1lID0gbWV0cmljc1VybC5wYXRobmFtZSArICcvbWV0cmljcyc7XG5cbiAgICB0aGlzLl91cmwgPSBtZXRyaWNzVXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0IHRocmVzaG9sZCh0aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4uL3Nkay9UZWxlbWV0cnlVcmwnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4uL3Nkay9FbnZpcm9ubWVudCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4vVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NGYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlczoge1tjYXRlZ29yeTogc3RyaW5nXTogTWV0cmljc1NlcnZpY2V9ID0ge307XG5cbiAgc3RhdGljIGdldE1ldHJpY3NTZXJ2aWNlKHVybDogc3RyaW5nKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1cicpO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMpIHtcbiAgICAgIHJldHVybiBtZXRyaWNzU2VydmljZXM7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBuZXcgTWV0cmljc0NvbmZpZ3VyYXRpb24oKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IEVudmlyb25tZW50LmdldEVudmlyb25tZW50RnJvbVVybCh1cmwpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKFNESy50ZWxlbWV0cnlMZXZlbCk7XG5cbiAgICByZXR1cm4gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdID0gbmV3IE1ldHJpY3NTZXJ2aWNlKG1ldHJpY3NDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHN0YXRpYyBzZXRUZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBPYmplY3QudmFsdWVzKE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXMpO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcyAmJiBtZXRyaWNzU2VydmljZXMubGVuZ3RoKSB7XG4gICAgICBtZXRyaWNzU2VydmljZXMuZm9yRWFjaChtZXRyaWNzU2VydmljZSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICAgICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gdGVsZW1ldHJ5TGV2ZWw7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9nZ2VyRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuL01ldHJpY1R5cGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5jb25zdCByZXF1ZXN0U2l6ZUxpbWl0ID0gMTAyNDtcblxuaW50ZXJmYWNlIElWYWx1ZSB7XG4gIHN0cmluZz86IHN0cmluZztcbiAgdWludDY0PzogbnVtYmVyO1xuICBmbG9hdD86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElNZXRyaWNSZWNvcmQge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgbWV0cmljOiBzdHJpbmc7XG4gIHZhbHVlOiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU6IElWYWx1ZTtcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpYyB7XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZTtcbiAgdmFsdWU/OiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU/OiBJVmFsdWU7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIF9tZXRyaWNzOiBBcnJheTxJTWV0cmljUmVjb3JkPiA9IFtdO1xuICBwcml2YXRlIF9pc1NlbmRpbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgX2RvbWFpbiA9IGxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gIGNvbnN0cnVjdG9yKG1ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uID0gbWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIH1cblxuICBnZXQgbWV0cmljc0NvbmZpZ3VyYXRpb24oKTogTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobWV0cmljOiBJTWV0cmljKTogdm9pZCB7XG4gICAgY29uc3Qge3N0cmVhbUlkLCB2YWx1ZSwgcHJldmlvdXNWYWx1ZSwgcnVudGltZSwgcmVzb3VyY2UsIGtpbmR9ID0gbWV0cmljO1xuICAgIGNvbnN0IG1ldHJpY1R5cGUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWMubWV0cmljVHlwZSk7XG5cbiAgICBpZiAodGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID4gbWV0cmljVHlwZS5nZXRUZWxlbWV0cnlMZXZlbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpYzogbWV0cmljVHlwZS5nZXROYW1lKCksXG4gICAgICB2YWx1ZSxcbiAgICAgIHByZXZpb3VzVmFsdWUsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIHJ1bnRpbWUsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGtpbmRcbiAgICB9O1xuXG4gICAgdGhpcy5fbWV0cmljcy5wdXNoKG1ldHJpY1JlY29yZCk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXM6IEFycmF5PElNZXRyaWNSZWNvcmQ+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBtZXRyaWNzTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZmV0Y2godGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX21ldHJpY3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IG1ldHJpY3NNZXNzYWdlcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UoMCwgcmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICB0aGlzLl9tZXRyaWNzID0gdGhpcy5fbWV0cmljcy5zbGljZShyZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIE1ldHJpY3NUeXBlIHtcbiAgVGltZVRvRmlyc3RGcmFtZSxcbiAgQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgU3RhbGxlZCxcbiAgQnVmZmVyaW5nLFxuICBTZXR1cENvbXBsZXRlZCxcbiAgU2V0dXBGYWlsZWQsXG4gIFJvdW5kVHJpcFRpbWUsXG4gIERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LFxuICBOZXR3b3JrVHlwZSxcbiAgUmVzb2x1dGlvbkNoYW5nZWQsXG4gIEFwcGxpY2F0aW9uRm9yZWdyb3VuZCxcbiAgQXBwbGljYXRpb25CYWNrZ3JvdW5kXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1ldHJpY3NUeXBlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbCkge1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5PZmY6XG4gICAgICAgIHJldHVybiAnT2ZmJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsOlxuICAgICAgICByZXR1cm4gJ0Vzc2VudGlhbCc7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkFsbDpcbiAgICAgICAgcmV0dXJuICdBbGwnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbFR5cGU6IFRlbGVtZXRyeUxldmVsVHlwZSk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLk9mZjtcbiAgICAgIGNhc2UgJ0Vzc2VudGlhbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlICdBbGwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGVsZW1ldHJ5TGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcml2YWN5TW9kZSBmcm9tICcuLi9kb20vUHJpdmFjeU1vZGUnO1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeURlZmF1bHQge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIFByaXZhY3lNb2RlLmlzUHJpdmF0ZSA/IFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbCA6IFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2VIYW5kbGVyIGZyb20gJy4vUHJvbWlzZUhhbmRsZXInO1xuXG5jbGFzcyBQcm9taXNlIHtcbiAgX3N0YXRlOiBudW1iZXI7XG4gIF9oYW5kbGVkOiBib29sZWFuO1xuICBfdmFsdWU6IFByb21pc2U7XG4gIF9kZWZlcnJlZHM6IEFycmF5PFByb21pc2VIYW5kbGVyPjtcbiAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgLy8gQHRzLWlnbm9yZVxuICB0aGVuKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZDtcbiAgLyogZXNsaW50LWVuYWJsZSovXG5cbiAgY29uc3RydWN0b3IoY2FsbGJhY2spIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb21pc2VzIG11c3QgYmUgY29uc3RydWN0ZWQgdmlhIG5ldycpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ25vdCBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGUgPSAwO1xuICAgIHRoaXMuX2hhbmRsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBbXTtcblxuICAgIHRoaXMuZG9SZXNvbHZlKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGRvUmVzb2x2ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNhbGxiYWNrKFxuICAgICAgICB2YWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlamVjdChyZWFzb24pO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVzb2x2ZShuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzIGFzIFByb21pc2U7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUHJvbWlzZSBSZXNvbHV0aW9uIFByb2NlZHVyZTogaHR0cHM6Ly9naXRodWIuY29tL1Byb21pc2VzLWFwbHVzL1Byb21pc2VzLXNwZWMjdGhlLVByb21pc2UtcmVzb2x1dGlvbi1wcm9jZWR1cmVcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gcHJvbWlzZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBIFByb21pc2UgY2Fubm90IGJlIHJlc29sdmVkIHdpdGggaXQgc2VsZi4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1ZhbHVlICYmICh0eXBlb2YgbmV3VmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgY29uc3QgdGhlbiA9IG5ld1ZhbHVlLnRoZW47XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgIHByb21pc2UuX3N0YXRlID0gMztcbiAgICAgICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgIHByb21pc2UuZmluYWxlKCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBwcm9taXNlLmRvUmVzb2x2ZShmdW5jdGlvbigpOiB2b2lkIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgIHRoZW4uYXBwbHkobmV3VmFsdWUsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHJvbWlzZS5fc3RhdGUgPSAxO1xuICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIHByb21pc2UuZmluYWxlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZWplY3QobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lke1xuICAgIHRoaXMuX3N0YXRlID0gMjtcbiAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuZmluYWxlKCk7XG4gIH1cblxuICBmaW5hbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAyICYmIHRoaXMuX2RlZmVycmVkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5faGFuZGxlZCkge1xuICAgICAgICAgIFByb21pc2UuX3VuaGFuZGxlZFJlamVjdGlvbih0aGlzLl92YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRoaXMuaGFuZGxlKHRoaXMuX2RlZmVycmVkc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVmZXJyZWRzID0gbnVsbDtcbiAgfVxuXG4gIGhhbmRsZShkZWZlcnJlZDogUHJvbWlzZUhhbmRsZXIpOiB2b2lkIHtcbiAgICBsZXQgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHdoaWxlIChwcm9taXNlLl9zdGF0ZSA9PT0gMykge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuX3ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMCkge1xuICAgICAgcHJvbWlzZS5fZGVmZXJyZWRzLnB1c2goZGVmZXJyZWQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvbWlzZS5faGFuZGxlZCA9IHRydWU7XG4gICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvbWlzZS5fc3RhdGUgPT09IDEgPyBkZWZlcnJlZC5vbkZ1bGZpbGxlZCA6IGRlZmVycmVkLm9uUmVqZWN0ZWQ7XG5cbiAgICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDEpIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhwcm9taXNlLl92YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhbGwoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoW10pO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVtYWluaW5nID0gYXJncy5sZW5ndGg7XG4gICAgICBjb25zdCBtYW5hZ2VSZXNwb25zZSA9IChpLCB2YWx1ZSk6IHZvaWQgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgICAgICBjb25zdCB0aGVuID0gdmFsdWUudGhlbjtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiBtYW5hZ2VSZXNwb25zZShpLCB2YWx1ZSksXG4gICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGFyZ3NbaV0gPSB2YWx1ZTtcblxuICAgICAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgcmVzb2x2ZShhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hbmFnZVJlc3BvbnNlKGksIGFyZ3NbaV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHJlc29sdmUodmFsdWUpOiBQcm9taXNlIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJlc29sdmUodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByZWplY3QodmFsdWUpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gcmVqZWN0KHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmFjZShhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5yYWNlIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGFycltpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIF9pbW1lZGlhdGUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICB9XG5cbiAgc3RhdGljIF91bmhhbmRsZWRSZWplY3Rpb24oZXJyb3IpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOicsIGVycm9yKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59XG5cblByb21pc2UucHJvdG90eXBlWydjYXRjaCddID0gZnVuY3Rpb24ob25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsndGhlbiddID0gZnVuY3Rpb24ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCgpID0+IG51bGwpO1xuXG4gIHRoaXMuaGFuZGxlKG5ldyBQcm9taXNlSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkpO1xuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXSA9IGZ1bmN0aW9uKGNhbGxiYWNrOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgdmFsdWUgPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IHZhbHVlKSxcbiAgICByZWFzb24gPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IGNvbnN0cnVjdG9yLnJlamVjdChyZWFzb24pKVxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvbWlzZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlIGZyb20gJy4vUHJvbWlzZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb21pc2VIYW5kbGVyIHtcbiAgb25GdWxmaWxsZWQ6IEZ1bmN0aW9uO1xuICBvblJlamVjdGVkOiBGdW5jdGlvbjtcbiAgcHJvbWlzZTogUHJvbWlzZTtcblxuICBjb25zdHJ1Y3RvcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IG51bGw7XG4gICAgdGhpcy5vblJlamVjdGVkID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicgPyBvblJlamVjdGVkIDogbnVsbDtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL3Nkay9mZWF0dXJlL0ZlYXR1cmVFbmFibGVtZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBJUGVlckNvbm5lY3Rpb25PZmZlckluaXQge1xuICBhdWRpb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHZpZGVvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgbG9jYWxPZmZlcjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlZDogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+O1xuXG4gIHN0YXRpYyBpbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1ByZWNhY2hpbmdFbmFibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IFBlZXJDb25uZWN0aW9uU2VydmljZS5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHJlLWNhY2hlIHBlZXIgY29ubmVjdGlvbiBvZmZlclwiJywgZSkpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgICB0aHJvdyBlO1xuICAgICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4ge1xuICAgIGlmIChQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZDtcblxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgcGVlckNvbm5lY3Rpb25GYWN0b3J5ID0gU0RLLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZTtcblxuICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlUGVlckNvbm5lY3Rpb24oKVxuICAgICAgLnRoZW4oYXN5bmMgcGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNBZGRUcmFuc2NlaXZlcjtcbiAgICAgICAgbGV0IHZpZGVvVHJhbnNjZWl2ZXIsIGF1ZGlvVHJhbnNjZWl2ZXI7XG5cbiAgICAgICAgaWYgKHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIpIHtcbiAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ2F1ZGlvJywge2RpcmVjdGlvbjogJ3JlY3Zvbmx5J30pO1xuICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcigndmlkZW8nLCB7ZGlyZWN0aW9uOiAncmVjdm9ubHknfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgdmlkZW9UcmFuc2NlaXZlcixcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIoc3VwcG9ydHNBZGRUcmFuc2NlaXZlciA/IHVuZGVmaW5lZCA6IHtcbiAgICAgICAgICAgIG9mZmVyVG9SZWNlaXZlQXVkaW86IHRydWUsXG4gICAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlZXJDb25uZWN0aW9uU2VydmljZSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vc2RrL2ZlYXR1cmUvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFNkcFBhcnNlciBmcm9tICcuL1NkcFBhcnNlcic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y01vbml0b3JTdGF0aXN0aWMge1xuICBba2luZDogc3RyaW5nXTogSVJ0Y1N0YXRpc3RpYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnQge1xuICByZXN1bHQ6ICgpID0+IElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtIGV4dGVuZHMgUlRDU3RhdHNSZXBvcnQge1xuICB0eXBlOiBzdHJpbmc7XG4gIG5hbWVzOiAoKSA9PiBzdHJpbmdbXTtcbiAgc3RhdDogKG5hbWUpID0+IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUnRjU3RhdGlzdGljIHtcbiAgc3NyYz86IHN0cmluZztcbiAgbWVkaWFUeXBlPzogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgYnl0ZXNSZWNlaXZlZD86IG51bWJlcjtcbiAgZnJhbWVzRGVjb2RlZD86IG51bWJlcjtcbiAgcGFja2V0c0xvc3Q/OiBudW1iZXI7XG4gIHBhY2tldHNSZWNlaXZlZD86IG51bWJlcjtcbiAgY29kZWM/OiBzdHJpbmc7XG4gIGZwcz86IG51bWJlcjtcbiAgcm91bmRUcmlwVGltZT86IG51bWJlcjtcbn1cblxuY29uc3QgdXBkYXRlU3RhdGlzdGljVGltZU91dCA9IDEwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkQXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydGNTdGF0aXN0aWM6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+ID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHt9KTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgcHJpdmF0ZSBfaXNNb25pdG9yUnVubmluZyA9IHRydWU7XG4gIHByaXZhdGUgX3VwZGF0ZVRpbWVPdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdHJhY2tzVG9Nb25pdG9yOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0sIGVzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gcGVlckNvbm5lY3Rpb247XG4gICAgdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZSA9IGVzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgdGhpcy5fdHJhY2tzVG9Nb25pdG9yID0gbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkubWFwKHRyYWNrID0+IHRyYWNrLmtpbmQpIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmdldEN1cnJlbnRPZmZlckRpc2FibGVkKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFNEUCA9IG5ldyBTZHBQYXJzZXIodGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYyA9IHBhcnNlZFNEUC5hdWRpb0NvZGVjO1xuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjID0gcGFyc2VkU0RQLnZpZGVvQ29kZWM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpYygpOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0Y1N0YXRpc3RpYztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNNb25pdG9yUnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cGRhdGVUaW1lT3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlVGltZU91dCk7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lT3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMudXBkYXRlU3RhdGlzdGljTGVnYWN5KCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTYWZhcmkgMTEgZG9lc250IGhhdmUga2luZCBvciBtZWRpYVR5cGUgc28gd2UgbmVlZCB0byB0YWtlIGl0IGZyb20gdGhlIGluYm91bmQtcnRwIG9iamVjdCBpZFxuICAgIGNvbnN0IGdldEtpbmRGb3JTYWZhcmkxMSA9IChpdGVtKTogc3RyaW5nID0+IGl0ZW0uaWQuaW5jbHVkZXMoJ0F1ZGlvJykgPyAnYXVkaW8nIDogaXRlbS5pZC5pbmNsdWRlcygnVmlkZW8nKSA/ICd2aWRlbycgOiAnJztcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMobnVsbClcbiAgICAgIC50aGVuKHN0YXRzID0+IHtcbiAgICAgICAgY29uc3QgcnRjU3RhdHM6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG5cbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuXG4gICAgICAgICAgc3RhdHMuZm9yRWFjaChpID0+IHtcbiAgICAgICAgICAgIGlmIChpLnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgaS5jdXJyZW50Um91bmRUcmlwVGltZSkge1xuICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gaS5jdXJyZW50Um91bmRUcmlwVGltZSAqIDEwMDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpLnR5cGUgPT09ICdpbmJvdW5kLXJ0cCcpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2luZCA9IGkua2luZCB8fCBpLm1lZGlhVHlwZSB8fCBnZXRLaW5kRm9yU2FmYXJpMTEoaSk7XG4gICAgICAgICAgICAgIGxldCBjb2RlYyA9ICcnO1xuXG4gICAgICAgICAgICAgIHN0YXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IGkuY29kZWNJZCkge1xuICAgICAgICAgICAgICAgICAgY29kZWMgPSBpdGVtLm1pbWVUeXBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKGtpbmQgJiYgdGhpcy5fdHJhY2tzVG9Nb25pdG9yLmluY2x1ZGVzKGtpbmQpKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdHNba2luZF0gPSB7XG4gICAgICAgICAgICAgICAgICBzc3JjOiBpLnNzcmMsXG4gICAgICAgICAgICAgICAgICBtZWRpYVR5cGU6IGtpbmQsXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IGkudGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICAgYnl0ZXNSZWNlaXZlZDogaS5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgcGFja2V0c0xvc3Q6IGkucGFja2V0c0xvc3QsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzUmVjZWl2ZWQ6IGkucGFja2V0c1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgY29kZWM6IGNvZGVjIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUoa2luZCksXG4gICAgICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRzW2tpbmRdLmZyYW1lc0RlY29kZWQgPSBpLmZyYW1lc0RlY29kZWQ7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0c1traW5kXVsnZnBzJ10gPSAoaS5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgICAgICAgKHJ0Y1N0YXRzW2tpbmRdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgICAgICAgICAgMTAwMCB8fCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdHM7XG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVUaW1lT3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZU91dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWNMZWdhY3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzTGVnYWN5KCkudGhlbihzdGF0cyA9PiB7XG4gICAgICBjb25zdCBydGNTdGF0czogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcbiAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgICAgc3RhdHMucmVzdWx0KCkuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICByZXBvcnQubmFtZXMoKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnZ29vZ1JUVCcpIHtcbiAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuc3RhdChuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ3NzcmMnKSB7XG4gICAgICAgICAgY29uc3QgbWVkaWFUeXBlID0gcmVwb3J0LnN0YXQoJ21lZGlhVHlwZScpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdID0ge3RpbWVzdGFtcDogRGF0ZS5ub3coKX07XG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsnc3NyYyddID0gcmVwb3J0LnN0YXQoJ3NzcmMnKS50b1N0cmluZygpO1xuICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV1bJ21lZGlhVHlwZSddID0gbWVkaWFUeXBlO1xuICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV1bJ2J5dGVzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdieXRlc1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsncGFja2V0c0xvc3QnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzTG9zdCcpO1xuICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV1bJ3BhY2tldHNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV1bJ2NvZGVjJ10gPSByZXBvcnQuc3RhdCgnZ29vZ0NvZGVjTmFtZScpLnRvU3RyaW5nKCkgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShtZWRpYVR5cGUpO1xuICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV1bJ3JvdW5kVHJpcFRpbWUnXSA9IHJvdW5kVHJpcFRpbWU7XG5cbiAgICAgICAgICBpZiAobWVkaWFUeXBlID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5zdGF0KCdmcmFtZXNEZWNvZGVkJyk7XG4gICAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydmcHMnXSA9IChydGNTdGF0c1ttZWRpYVR5cGVdLmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAocnRjU3RhdHNbbWVkaWFUeXBlXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAxMDAwIHx8IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRzO1xuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlVGltZU91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVPdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2RlY0J5VHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXVkaW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYztcbiAgICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWM7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZHBQYXJzZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZHA6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0NvZGVjOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2RwOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZHAgPSBzZHA7XG4gICAgdGhpcy5fYXVkaW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygnYXVkaW8nKTtcbiAgICB0aGlzLl92aWRlb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCd2aWRlbycpO1xuICB9XG5cbiAgZ2V0IGF1ZGlvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9Db2RlYztcbiAgfVxuXG4gIGdldCB2aWRlb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZGVvQ29kZWM7XG4gIH1cblxuICBhcHBseUNvZGVjKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3BsaXRTZHAgPSB0aGlzLl9zZHAuc3BsaXQoLyhcXHJcXG58XFxyfFxcbikvKTtcbiAgICBjb25zdCB1c2VkQ29kZWNMaW5lID0gc3BsaXRTZHAuZmluZChpdGVtID0+IGl0ZW0uaW5jbHVkZXMoYGE9cnRwbWFwOiR7c3BsaXRTZHAuZmluZChpID0+IGkuaW5jbHVkZXMoYG09JHt0eXBlfWApKS5zcGxpdCgnICcpWzNdfWApKTtcbiAgICBjb25zdCB1c2VkQ29kZWMgPSB1c2VkQ29kZWNMaW5lLnNwbGl0KCcgJylbMV07XG4gICAgY29uc3QgY29kZWNOYW1lID0gdXNlZENvZGVjLnNwbGl0KCcvJylbMF07XG5cbiAgICByZXR1cm4gY29kZWNOYW1lO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uLCB7UGVlckNvbm5lY3Rpb25FdmVudHN9IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vc2RrL2ZlYXR1cmUvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IHtJTGVnYWN5UlRDU3RhdHNSZXBvcnR9IGZyb20gJy4vUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb24gaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignVmFuaWxsYVBlZXJDb25uZWN0aW9uJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uOiBSVENQZWVyQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC53ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQpIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgUlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBnZXQgbmF0aXZlKCk6IFJUQ1BlZXJDb25uZWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgY3VycmVudExvY2FsRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGljZUNvbm5lY3Rpb25TdGF0ZSgpOiBSVENJY2VDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFGZWF0dXJlRW5hYmxlbWVudC5hZGRUcmFuY2VpdmVyRGlzYWJsZWQgJiYgdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT2ZmZXIob3B0aW9ucz86IFJUQ09mZmVyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyB0eXBlc2NyaXB0IGRvZXMgbm90IGhhdmUgbGVnYWN5IGdldFN0YXRzIHR5cGVzXG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWlnbm9yZSAqL1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSAqL1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFuc3dlcihvcHRpb25zPzogUlRDQW5zd2VyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyB0eXBlc2NyaXB0IGRvZXMgbm90IGhhdmUgbGVnYWN5IGdldFN0YXRzIHR5cGVzXG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWlnbm9yZSAqL1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgc2V0TG9jYWxEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBoYXNDcnlwdG8gPSBkZXNjcmlwdGlvbi5zZHAubWF0Y2goL2E9Y3J5cHRvOi9pKTtcblxuICAgIGlmIChoYXNDcnlwdG8pIHtcbiAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdTRFAgYT1jcnlwdG8gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGdldFN0YXRzKHNlbGVjdG9yPzogTWVkaWFTdHJlYW1UcmFjayB8IG51bGwpOiBQcm9taXNlPFJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHNlbGVjdG9yKTtcbiAgfVxuXG4gIGdldFN0YXRzTGVnYWN5KCk6IFByb21pc2U8SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgLy8gSWdub3JlZCBhcyB0eXBlc2NyaXB0IGRvZXMgbm90IGhhdmUgbGVnYWN5IGdldFN0YXRzIHR5cGVzXG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWlnbm9yZSAqL1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHJlc29sdmUpO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSAqL1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRUcmFuc2NlaXZlcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCk6IFJUQ1J0cFRyYW5zY2VpdmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIobmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBnZXRDb25maWd1cmF0aW9uKCk6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBzZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc2V0IG9udHJhY2soaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2sgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9udHJhY2soKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2s7XG4gIH1cblxuICBzZXQgb25pY2VjYW5kaWRhdGUoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNhbmRpZGF0ZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGU7XG4gIH1cblxuICBzZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmFuaWxsYVBlZXJDb25uZWN0aW9uOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGZyb20gJy4vVmFuaWxsYVBlZXJDb25uZWN0aW9uJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbkZhY3Rvcnkge1xuICBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi9TdWJqZWN0JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhZE9ubHlTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3ViamVjdDogU3ViamVjdDxUPjtcblxuICBjb25zdHJ1Y3RvcihzdWJqZWN0OiBTdWJqZWN0PFQ+KSB7XG4gICAgdGhpcy5fc3ViamVjdCA9IHN1YmplY3Q7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3QudmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6IChUKSA9PiB2b2lkKTogSURpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZShsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJQ29tcGFyYWJsZSBmcm9tICcuLi9sYW5nL0lDb21wYXJhYmxlJztcblxuY2xhc3MgRGlzcG9zYWJsZUxpc3RlbmVyPFQ+IGV4dGVuZHMgRGlzcG9zYWJsZSB7XG4gIGNvbnN0cnVjdG9yKGxpc3RlbmVyczogQXJyYXk8VD4sIGxpc3RlbmVyOiBUKSB7XG4gICAgc3VwZXIoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuXG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcnM6IEFycmF5PChUKSA9PiB2b2lkPjtcbiAgcHJpdmF0ZSBfdmFsdWU6IFQ7XG5cbiAgY29uc3RydWN0b3IodmFsdWU6IFQpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbXTtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBUKSB7XG4gICAgbGV0IGNoYW5nZWQgPSB0aGlzLl92YWx1ZSAhPT0gdmFsdWU7XG5cbiAgICBpZiAoY2hhbmdlZCAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgY29tcGFyYWJsZSA9IHZhbHVlIGFzIHVua25vd24gYXMgSUNvbXBhcmFibGU8VD47XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcGFyYWJsZS5lcXVhbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2hhbmdlZCA9ICFjb21wYXJhYmxlLmVxdWFscyh0aGlzLl92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgIHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IHtcbiAgICAgIGxpc3RlbmVyKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6IChUKSA9PiB2b2lkKTogSURpc3Bvc2FibGUge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcblxuICAgIGxpc3RlbmVyKHRoaXMuX3ZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgRGlzcG9zYWJsZUxpc3RlbmVyPChUKSA9PiB2b2lkPih0aGlzLl9saXN0ZW5lcnMsIGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIHN0YXRpYyBnZXRFbnZpcm9ubWVudEZyb21VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgICByZXR1cm4gYmFzZVVSTC5vcmlnaW47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IFN0cmluZ3MgZnJvbSAnLi4vbGFuZy9TdHJpbmdzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi4vcnRjL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi4vcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IEVkZ2VBdXRoIGZyb20gJy4vZWRnZUF1dGgvRWRnZUF1dGgnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxJbnB1dFR5cGVzfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi4vbG9nZ2VyL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgUHJpdmFjeU1vZGUgZnJvbSAnLi4vZG9tL1ByaXZhY3lNb2RlJztcbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5pbXBvcnQge0lDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyfSBmcm9tICcuLi9kb20vSUNvbmZpZ3VyYXRpb25QYXJhbWF0ZXJSZWFkZXInO1xuaW1wb3J0IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIGZyb20gJy4uL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcic7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4vVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL0Vudmlyb25tZW50JztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgU2hha2FUeXBlLCBXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL3N0cmVhbWluZy9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5jb25zdCBwYWdlTG9hZFRpbWUgPSB3aW5kb3dbJ19fcGhlbml4UGFnZUxvYWRUaW1lJ10gfHwgd2luZG93WydfX3BhZ2VMb2FkVGltZSddIHx8IERhdGUubm93KCk7XG5cbmludGVyZmFjZSBJSW5pdE9wdGlvbnMge1xuICBkaXNjb3ZlcnlVcmk/OiBzdHJpbmc7XG4gIHBlZXJDb25uZWN0aW9uRmFjdG9yeT86IElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIHRlbGVtZXRyeUxldmVsPzogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxJbnB1dFR5cGVzO1xuICBjb25zb2xlTG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsSW5wdXRUeXBlcztcbiAgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbT86IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlPzogYm9vbGVhbjtcbiAgd2ViUGxheWVyTG9hZGVyPzogKHBsYXllcjogV2ViUGxheWVyVHlwZSkgPT4gdm9pZDtcbiAgc2hha2FQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBTaGFrYVR5cGUpID0+IHZvaWQ7XG4gIGhsc0pzTG9hZGVyPzogKHBsYXllcjogSGxzUGxheWVyVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF93ZWJQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2FQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzSnNMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHN0YXRpYyBfZW52aXJvbm1lbnQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5VXJsOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeScpO1xuICBwcml2YXRlIHN0YXRpYyBfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDg7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlMZXZlbDogU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4gPSBuZXcgU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4oVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoIVByaXZhY3lNb2RlLmlzUHJpdmF0ZSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90ZW5hbmN5OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2NsaWVudFNlc3Npb25JZDogc3RyaW5nID0gU3RyaW5ncy5yYW5kb20oMzIpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9hZGVkVGltZXN0YW1wOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTREsnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2luaXRpYWxpemVkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcGVlckNvbm5lY3Rpb25GYWN0b3J5OiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4obmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkoKSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seUluaXRpYWxpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KFNESy5faW5pdGlhbGl6ZWQpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlEaXNjb3ZlcnlVcmk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KERpc2NvdmVyeVVyaS51cmkpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4oU0RLLl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkpO1xuXG4gIHN0YXRpYyBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVuYW5jeSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc3RhdGljIGdldCBjbGllbnRTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU0RLLl9jbGllbnRTZXNzaW9uSWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvYWRlZFRpbWVzdGFtcCgpOiBEYXRlIHtcbiAgICByZXR1cm4gU0RLLl9sb2FkZWRUaW1lc3RhbXA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGluaXRpYWxpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlJbml0aWFsaXplZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5VXJpKCk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seURpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2ViUGxheWVyTG9hZGVyKCk6IChXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2ViUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYVBsYXllckxvYWRlcigpOiAoU2hha2FUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGhsc0pzTG9hZGVyKCk6IChIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5faGxzSnNMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1ldHJpY3NTZXJ2aWNlKCk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICByZXR1cm4gU0RLLl9tZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5VXJsKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbGVtZXRyeVVybDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzO1xuICB9XG5cbiAgc3RhdGljIHNldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKHJldHJpZXNBbW91bnQ6IG51bWJlcikge1xuICAgIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSByZXRyaWVzQW1vdW50O1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsSW5wdXRUeXBlcyB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSh0aGlzLl9sb2dnZXIudGhyZXNob2xkLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyRGV0ZWN0b3IoKTogQnJvd3NlckRldGVjdG9yIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gTG9nZ2VyRmFjdG9yeS50ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuXG4gICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyKSB7XG4gICAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUodGVsZW1ldHJ5QXBwZW5kZXIpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnVGVsZW1ldHJ5IFVSTCB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlciAmJiB0ZW5hbmN5KSB7XG4gICAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUodGVsZW1ldHJ5QXBwZW5kZXIpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnVGVsZW1ldHJ5IHRlbmFuY3kgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIFNESy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShEaXNjb3ZlcnlVcmkudXJpLnZhbHVlKTtcbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uID0gU0RLLl9tZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuICAgIH0pO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LW1ldHJpY3MtbGV2ZWwnKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwoVGVsZW1ldHJ5TGV2ZWxbdmFsdWVdKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkVGVsZW1ldHJ5TGV2ZWwgPSBTREsuX3RlbGVtZXRyeUxldmVsLnN1YnNjcmliZSh0ZWxlbWV0cnlMZXZlbCA9PiB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZScpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJldHJ5IG9uIGZhaWx1cmUgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIFNESy5kaXNjb3ZlcnlVcmkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy50ZWxlbWV0cnlVcmwudmFsdWUgPSBTREsuZ2V0VGVsZW1ldHJ5VXJsKHZhbHVlKTtcbiAgICAgIFNESy5fZW52aXJvbm1lbnQudmFsdWUgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodmFsdWUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2hhbm5lbFRva2VuID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWNoYW5uZWwtdG9rZW4nKTtcblxuICAgIGlmIChjaGFubmVsVG9rZW4pIHtcbiAgICAgIGNvbnN0IHBhcnNlZFRva2VuID0gRWRnZUF1dGgucGFyc2VUb2tlbihjaGFubmVsVG9rZW4pO1xuXG4gICAgICBTREsuX3RlbmFuY3kudmFsdWUgPSBFZGdlQXV0aC5nZXRUZW5hbmN5KHBhcnNlZFRva2VuKTtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSAoRWRnZUF1dGguZ2V0VXJpKHBhcnNlZFRva2VuKSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cmlWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC11cmknKTtcblxuICAgIGlmICh1cmlWYWx1ZSkge1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IHVyaVZhbHVlO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtdXJpXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGFnIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2VVUklWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1iYXNlLXVyaScpO1xuXG4gICAgaWYgKGJhc2VVUklWYWx1ZSkge1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGAke2Jhc2VVUklWYWx1ZX0vcGNhc3QvZW5kUG9pbnRzYDtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LWJhc2UtdXJpXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGFnIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpbml0KG9wdGlvbnM/OiBJSW5pdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG5ldyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXNjb3ZlcnlVcmkpIHtcbiAgICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IG9wdGlvbnMuZGlzY292ZXJ5VXJpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpIHtcbiAgICAgICAgU0RLLl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUgPSBvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwgJiYgVGVsZW1ldHJ5TGV2ZWxbb3B0aW9ucy50ZWxlbWV0cnlMZXZlbF0pIHtcbiAgICAgICAgU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChvcHRpb25zLnRlbGVtZXRyeUxldmVsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubG9nZ2luZ0xldmVsICYmIExvZ2dpbmdMZXZlbFtvcHRpb25zLmxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLnRocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMubG9nZ2luZ0xldmVsKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgJiZcbiAgICAgICAgTG9nZ2luZ0xldmVsW29wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgY29uc3QgY29uc29sZUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgQ29uc29sZUFwcGVuZGVyKTtcblxuICAgICAgICBpZiAoY29uc29sZUFwcGVuZGVyKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUoY29uc29sZUFwcGVuZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgIT09ICdPZmYnKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fd2ViUGxheWVyTG9hZGVyID0gb3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyID0gb3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuaGxzSnNMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5faGxzSnNMb2FkZXIgPSBvcHRpb25zLmhsc0pzTG9hZGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG51bGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsICgpID0+IHtcbiAgU0RLLmRpc3Bvc2UoKTtcbn0pO1xuXG5TREsuYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseU1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5pbml0KCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVVybCB7XG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IFVSTCh1cmwpO1xuICAgICAgY29uc3Qgc2VnbWVudHMgPSBiYXNlVVJMLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG5cbiAgICAgIHN3aXRjaCAoYmFzZVVSTC5wcm90b2NvbCkge1xuICAgICAgICBjYXNlICd3czonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cDonO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dzczonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cHM6JztcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDIgfHxcbiAgICAgICAgICAoc2VnbWVudHMubGVuZ3RoID09PSAzICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDJdLmxlbmd0aCA8PSAyICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdLmxlbmd0aCA8PSAzKVxuICAgICAgKSB7XG4gICAgICAgIHNlZ21lbnRzLnVuc2hpZnQoJ3RlbGVtZXRyeScpO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdzdGctJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1zdGcnKSB8fCBzZWdtZW50c1swXS5pbmNsdWRlcygnLXN0Zy0nKSB8fCBzZWdtZW50c1swXSA9PT0gJ3N0ZycpIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5LXN0Zyc7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ2xvY2FsJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1sb2NhbCcpKSB7XG4gICAgICAgIC8vIExlYXZlIFVSTCB1bmNoYW5nZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeSc7XG4gICAgICB9XG5cbiAgICAgIGJhc2VVUkwuaG9zdG5hbWUgPSBzZWdtZW50cy5qb2luKCcuJyk7XG5cbiAgICAgIHJldHVybiBgJHtiYXNlVVJMLm9yaWdpbn0vdGVsZW1ldHJ5YDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgdHlwZSBCaXRyYXRlU3RhdGVUeXBlID0gJ0tlZXAnIHwgJ1Jlc2V0JztcbmV4cG9ydCB0eXBlIEJpdHJhdGVNb2RlVHlwZSA9ICdOb3JtYWwnIHwgJ0ZvcmNlJyB8ICdSZXNldCc7XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVTdGF0ZSB7XG4gIEtlZXAsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVNb2RlIHtcbiAgTm9ybWFsLFxuICBGb3JjZSxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUge1xuICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgYml0cmF0ZUluQml0c1BlclNlY29uZDogbnVtYmVyO1xuICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZVR5cGU7XG4gIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZVR5cGU7XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBFZGdlQXV0aCBmcm9tICcuLi9lZGdlQXV0aC9FZGdlQXV0aCc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCBTZXNzaW9uVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcblxuaW1wb3J0IHtFZGdlVG9rZW59IGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VUb2tlbic7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgU3RyZWFtRmFjdG9yeSBmcm9tICcuLi9zdHJlYW1pbmcvU3RyZWFtRmFjdG9yeSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5jb25zdCBkZWZhdWx0VGFyZ2V0TGFnID0gMDtcbmNvbnN0IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiA9ICdjbGllbnQ6dGVybWluYXRpb24nO1xuY29uc3QgYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZHMgPSAyMDAwO1xuY29uc3QgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMgPSAzMDAwO1xuY29uc3QgbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZHMgPSAzMDAwMDA7XG5jb25zdCBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMgPSAxNTAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbCBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NoYW5uZWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlWaWRlb0VsZW1lbnQ6IFJlYWRPbmx5U3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbjogUmVhZE9ubHlTdWJqZWN0PEVkZ2VUb2tlbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb246IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YXRlOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvTXV0ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvUGF1c2VkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW5FeHBpcmluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dGhvcml6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlPbmxpbmU6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMb2FkaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGxheWluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YW5kYnk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdG9wcGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VGFyZ2V0TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlCaXRyYXRlTGltaXQ6IFJlYWRPbmx5U3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSZXNvbHV0aW9uOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlGYWlsdXJlQ291bnQ6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUVuZFBvaW50OiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJ0Y1N0YXRpc3RpY3M6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TWVkaWFTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT47XG5cbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXI6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCB0b2tlbjogc3RyaW5nLCB0YXJnZXRMYWc6IG51bWJlciA9IGRlZmF1bHRUYXJnZXRMYWcpIHtcbiAgICB0aGlzLl9jb250ZXh0ID0gbmV3IENoYW5uZWxDb250ZXh0KHRva2VuLCB0YXJnZXRMYWcpO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3JlYWRPbmx5VmlkZW9FbGVtZW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxIVE1MVmlkZW9FbGVtZW50Pih0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPih0aGlzLl9jb250ZXh0LnRva2VuKTtcbiAgICB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KHRoaXMuX2NvbnRleHQucGVlckNvbm5lY3Rpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhdGUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4odGhpcy5fY29udGV4dC5zdGF0ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQuYXV0b011dGVkKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dG9QYXVzZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LnRva2VuRXhwaXJpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC5hdXRob3JpemVkKTtcbiAgICB0aGlzLl9yZWFkT25seU9ubGluZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC5vbmxpbmUpO1xuICAgIHRoaXMuX3JlYWRPbmx5TG9hZGluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC5sb2FkaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVBsYXlpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQucGxheWluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGFuZGJ5ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LnN0YW5kYnkpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RvcHBlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC5zdG9wcGVkKTtcbiAgICB0aGlzLl9yZWFkT25seVRhcmdldExhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jb250ZXh0LnRhcmdldExhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY29udGV4dC5sYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NvbnRleHQuYml0cmF0ZUxpbWl0KTtcbiAgICB0aGlzLl9yZWFkT25seVJlc29sdXRpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4odGhpcy5fY29udGV4dC5yZXNvbHV0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jb250ZXh0LmZhaWx1cmVDb3VudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlFbmRQb2ludCA9IG5ldyBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+KHRoaXMuX2NvbnRleHQuZW5kUG9pbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPih0aGlzLl9jb250ZXh0LnN0cmVhbSk7XG4gICAgdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4odGhpcy5fY29udGV4dC5ydGNTdGF0aXN0aWNzKTtcbiAgICB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4odGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbSk7XG5cbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odGhpcy5fY29udGV4dC50b2tlbi52YWx1ZSk7XG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKEVkZ2VBdXRoLmdldFVyaShwYXJzZWRUb2tlbikgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gRWRnZUF1dGguZ2V0VGVuYW5jeShwYXJzZWRUb2tlbikgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG4gICAgdGhpcy5fY29udGV4dC5zZXNzaW9uVGVsZW1ldHJ5ID0gbmV3IFNlc3Npb25UZWxlbWV0cnkoU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgIHRoaXMuX2NvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9jb250ZXh0LnNlc3Npb25UZWxlbWV0cnkpO1xuICAgIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlciA9IHRoaXMuaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcblxuICAgIHRoaXMuX2NvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnN1YnNjcmliZSh2aWRlb0VsZW1lbnQgPT4ge1xuICAgICAgICB0aGlzLl9jb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9jb250ZXh0LnN0cmVhbS5zdWJzY3JpYmUoc3RyZWFtID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY29udGV4dC52aWRlb1RlbGVtZXRyeSkge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dC52aWRlb1RlbGVtZXRyeS5kaXNwb3NlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMudmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9UZWxlbWV0cnkgPSBuZXcgVmlkZW9UZWxlbWV0cnkodGhpcy5zdHJlYW1JZCwgU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9UZWxlbWV0cnkuc2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSh0aGlzLnZpZGVvRWxlbWVudCk7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodGhpcy52aWRlb0VsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5TdG9wcGVkKSB7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5yZXN0YXJ0QWZ0ZXJTdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuICAgICAgICBpZiAodGhpcy5fY29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZSAhPT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIH0sIGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jb250ZXh0LnJlc29sdXRpb24uc3Vic2NyaWJlKHJlc29sdXRpb24gPT4ge1xuICAgICAgICBpZiAodGhpcy5fY29udGV4dC52aWRlb1RlbGVtZXRyeSkge1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9UZWxlbWV0cnkub25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKHJlc29sdXRpb24udG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jb250ZXh0LmJpdHJhdGVMaW1pdC5zdWJzY3JpYmUoYml0cmF0ZUxpbWl0ID0+IHtcbiAgICAgICAgaWYgKGJpdHJhdGVMaW1pdCAmJiB0aGlzLl9jb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGJpdHJhdGVMaW1pdCxcbiAgICAgICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICAgICAgQml0cmF0ZU1vZGUuTm9ybWFsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCB2aWRlb0VsZW1lbnQoKTogSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuICB9XG5cbiAgc2V0IHZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcblxuICAgICAgaWYgKHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlID0gdmlkZW9FbGVtZW50O1xuXG4gICAgaWYgKHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLnJlc29sdXRpb24udmFsdWUud2lkdGggIT09IHZpZGVvRWxlbWVudC52aWRlb1dpZHRoIHx8IHRoaXMucmVzb2x1dGlvbi52YWx1ZS5oZWlnaHQgIT09IHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCkge1xuICAgICAgICB0aGlzLl9jb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBuZXcgRGltZW5zaW9uKHZpZGVvRWxlbWVudC52aWRlb1dpZHRoLCB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBEaW1lbnNpb24uZW1wdHk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRva2VuKCk6IEVkZ2VUb2tlbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHQudG9rZW4udmFsdWU7XG4gIH1cblxuICBzZXQgdG9rZW4odG9rZW46IEVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2NvbnRleHQuZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fY29udGV4dC50b2tlbi52YWx1ZSA9IHRva2VuO1xuICAgIHRoaXMuX2NvbnRleHQudG9rZW5FeHBpcmluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKHRoaXMuX2NvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChFZGdlQXV0aC5nZXRVcmkocGFyc2VkVG9rZW4pIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IEVkZ2VBdXRoLmdldFRlbmFuY3kocGFyc2VkVG9rZW4pIHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgcGVlckNvbm5lY3Rpb24oKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGF0ZTtcbiAgfVxuXG4gIGdldCBhdXRvTXV0ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQ7XG4gIH1cblxuICBnZXQgYXV0b1BhdXNlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9QYXVzZWQ7XG4gIH1cblxuICBnZXQgdG9rZW5FeHBpcmluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmc7XG4gIH1cblxuICBnZXQgYXV0aG9yaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQ7XG4gIH1cblxuICBnZXQgb25saW5lKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5T25saW5lO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMb2FkaW5nO1xuICB9XG5cbiAgZ2V0IHBsYXlpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQbGF5aW5nO1xuICB9XG5cbiAgZ2V0IHN0YW5kYnkoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGFuZGJ5O1xuICB9XG5cbiAgZ2V0IHN0b3BwZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdG9wcGVkO1xuICB9XG5cbiAgZ2V0IHRhcmdldExhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWc7XG4gIH1cblxuICBnZXQgbGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxhZztcbiAgfVxuXG4gIGdldCBiaXRyYXRlTGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlCaXRyYXRlTGltaXQudmFsdWU7XG4gIH1cblxuICBnZXQgcmVzb2x1dGlvbigpOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbjtcbiAgfVxuXG4gIGdldCBmYWlsdXJlQ291bnQoKTogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudDtcbiAgfVxuXG4gIGdldCBlbmRQb2ludCgpOiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlFbmRQb2ludDtcbiAgfVxuXG4gIGdldCBzdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdHJlYW07XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dC5zdHJlYW1JZDtcbiAgfVxuXG4gIGdldCBydGNTdGF0cygpOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzO1xuICB9XG5cbiAgZ2V0IG1lZGlhU3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc2V0Qml0cmF0ZUxpbWl0KGJpdHJhdGVMaW1pdDogQml0c1BlclNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gYml0cmF0ZUxpbWl0O1xuICB9XG5cbiAgY2xlYXJCaXRyYXRlTGltaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlICYmIHRoaXMuX2NvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kID0gMDtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgdGhpcy5fY29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgIEJpdHJhdGVNb2RlLlJlc2V0XG4gICAgICApXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVUYXJnZXRMYWcobGFnOiBNaWxsaXNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NvbnRleHQudGFyZ2V0TGFnLnZhbHVlID0gbGFnO1xuICB9XG5cbiAgc3RvcChyZWFzb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcyhyZWFzb24pO1xuXG4gICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICB9XG5cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdW5tdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wKCdjbGllbnQ6Y2hhbm5lbC1kaXNwb3NlJyk7XG4gICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2NvbnRleHQuaXNEaXNwb3NlZCA9IHRydWU7XG4gIH1cblxuICBnZXRVcmkodG9rZW4pOiBVUkwge1xuICAgIGNvbnN0IHBhcnNlZFRva2VuID0gRWRnZUF1dGgucGFyc2VUb2tlbih0b2tlbik7XG4gICAgY29uc3QgdXJsID0gRWRnZUF1dGguZ2V0VXJpKHBhcnNlZFRva2VuKTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBkaXNjb3ZlciBVUkkgWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fY29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuX2NvbnRleHQudG9rZW4udmFsdWU7XG4gICAgY29uc3QgbGlzdGVuT25TdHJlYW1TZXR1cCA9IHRoaXMuX2NvbnRleHQuc2Vzc2lvblRlbGVtZXRyeS5saXN0ZW5PblN0cmVhbVNldHVwKCk7XG5cbiAgICBpZiAoIUVkZ2VBdXRoLmlzVmFsaWRUb2tlbih0b2tlbikpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG4gICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6c3RhcnQnKTtcbiAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICBjb25zdCB1cmkgPSB0aGlzLmdldFVyaSh0b2tlbik7XG4gICAgY29uc3Qgc3RyZWFtUGxheWVyID0gU3RyZWFtRmFjdG9yeS5jcmVhdGUodG9rZW4sIHRoaXMuX2NvbnRleHQsIHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZS5iaW5kKHRoaXMpKTtcblxuICAgIGlmICghc3RyZWFtUGxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbVBsYXllci5zdGFydChcbiAgICAgIHVyaSxcbiAgICAgIHRva2VuLFxuICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cCxcbiAgICAgIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQuYmluZCh0aGlzKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKys7XG5cbiAgICAgICAgdGhpcy5fY29udGV4dC5vbmxpbmUudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpjbGVhbnVwLWFmdGVyLWZhaWxlZC1zZXR1cCcpO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGlzY292ZXIgZW5kIHBvaW50LCBtYXJraW5nIGFzIG9mZmxpbmUnLCBlKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZyB8fCAhU0RLLmF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgdGhpcy5nZXRSZXRyeUludGVydmFsKCkpO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3RhcnRBZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2NvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zdGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwbGF5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gdGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghbWVkaWFTdHJlYW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXRyeUludGVydmFsKCk6IG51bWJlciB7XG4gICAgc3dpdGNoICh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgICAgcmV0dXJuIHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgLy8gRmlyc3QgYW5kIHNlY29uZCBhdHRlbXB0IGZhc3QsIGFmdGVyIHRoYXQgZXhwb25lbnRpYWwgd2l0aCBiYWNrb2ZmIGludGVydmFsXG4gICAgICAgIHJldHVybiBNYXRoLm1pbihtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcywgTWF0aC5wb3coYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZHMsIE1hdGgubWF4KDAsIHRoaXMuX2NvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlIC0gMSkpKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU3RyZWFtRmFpbHVyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmV0cnkgc3RhcnQgd2l0aCBpbml0aWFsIHN0YXRlIFslc10gWyVzXScsIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUsIENoYW5uZWxTdGF0ZVt0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHVuYXV0aG9yaXplZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyByZXN0cmljdGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwbGF5aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGF1c2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIGludm9rZSBwbGF5KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9jb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fY29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZTtcblxuICAgIGlmIChwZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fY29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IG51bGw7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKTtcbiAgICAgIHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5zdG9wcGVkLnZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLl9jb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlLCByZWFzb24pXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERlc3Ryb3llZCBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudCAmJiB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9jb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBtZWRpYVN0cmVhbTtcblxuICAgIGNvbnN0IHBsYXlQcm9taXNlID0gdmlkZW9FbGVtZW50LnBsYXkoKTtcblxuICAgIGlmIChwbGF5UHJvbWlzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gcGxheVByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICBjb25zdCBoYXNBdWRpb1RyYWNrID0gISFtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5maWx0ZXIodHJhY2sgPT4ge1xuICAgICAgICByZXR1cm4gdHJhY2sua2luZCA9PT0gJ2F1ZGlvJztcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgPSAhU0RLLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuXG4gICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgfHwgdmlkZW9FbGVtZW50Lm11dGVkIHx8ICFoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGF1c2VkIHZpZGVvIGFmdGVyIHBsYXkgZmFpbGVkLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQXVkaW9UcmFjaykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSBtdXRlZCB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZpZGVvRWxlbWVudC5wbGF5KClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBsYXllZCB2aWRlbyBhZnRlciBhdXRvIG11dGluZy4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkIHRvIHVubXV0ZS4nLCB0aGlzLnN0cmVhbUlkKTtcblxuICAgICAgICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEVuZFBvaW50LCB7SVN0cmVhbSwgU3Vic2NyaWJlU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCBTZXNzaW9uVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7RWRnZVRva2VufSBmcm9tICcuLi9lZGdlQXV0aC9FZGdlVG9rZW4nO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsQ29udGV4dCB7XG4gIGNoYW5uZWxJbml0aWFsaXphdGlvbjogRGF0ZTtcbiAgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICBjaGFubmVsRGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICByZW5kZXJlckRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgdmlkZW9FbGVtZW50OiBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICB0b2tlbjogU3ViamVjdDxFZGdlVG9rZW4+O1xuICBwZWVyQ29ubmVjdGlvbjogU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBtZWRpYVN0cmVhbTogU3ViamVjdDxNZWRpYVN0cmVhbT47XG4gIHN0YXRlOiBTdWJqZWN0PENoYW5uZWxTdGF0ZT47XG4gIGF1dG9NdXRlZDogU3ViamVjdDxib29sZWFuPjtcbiAgYXV0b1BhdXNlZDogU3ViamVjdDxib29sZWFuPjtcbiAgdG9rZW5FeHBpcmluZzogU3ViamVjdDxib29sZWFuPjtcbiAgYXV0aG9yaXplZDogU3ViamVjdDxib29sZWFuPjtcbiAgb25saW5lOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBsb2FkaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwbGF5aW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdGFuZGJ5OiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdG9wcGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICB0YXJnZXRMYWc6IFN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBsYWc6IFN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBiaXRyYXRlTGltaXQ6IFN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHJlc29sdXRpb246IFN1YmplY3Q8RGltZW5zaW9uPjtcbiAgZmFpbHVyZUNvdW50OiBTdWJqZWN0PG51bWJlcj47XG4gIGVuZFBvaW50OiBTdWJqZWN0PEVuZFBvaW50PjtcbiAgc3RyZWFtOiBTdWJqZWN0PElTdHJlYW0+O1xuICBydGNTdGF0aXN0aWNzOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPjtcblxuICBwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXI7XG4gIGlzRGlzcG9zZWQ6IGJvb2xlYW47XG4gIHZpZGVvVGVsZW1ldHJ5OiBWaWRlb1RlbGVtZXRyeTtcbiAgc2Vzc2lvblRlbGVtZXRyeTogU2Vzc2lvblRlbGVtZXRyeTtcbiAgcnRjQXVkaW9TdGF0aXN0aWM6IElSdGNTdGF0aXN0aWM7XG4gIHJ0Y1ZpZGVvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih0b2tlbjogc3RyaW5nLCB0YXJnZXRMYWc6IG51bWJlcikge1xuICAgIHRoaXMuaXNEaXNwb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucmVuZGVyZXJEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbEluaXRpYWxpemF0aW9uID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IG5ldyBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KG51bGwpO1xuICAgIHRoaXMudG9rZW4gPSBuZXcgU3ViamVjdDxFZGdlVG9rZW4+KHRva2VuKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPihudWxsKTtcbiAgICB0aGlzLm1lZGlhU3RyZWFtID0gbmV3IFN1YmplY3Q8TWVkaWFTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMuc3RhdGUgPSBuZXcgU3ViamVjdDxDaGFubmVsU3RhdGU+KENoYW5uZWxTdGF0ZS5TdGFydGluZyk7XG4gICAgdGhpcy5hdXRvTXV0ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRvUGF1c2VkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMudG9rZW5FeHBpcmluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dGhvcml6ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLm9ubGluZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMubG9hZGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnBsYXlpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdGFuZGJ5ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RvcHBlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnRhcmdldExhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPih0YXJnZXRMYWcpO1xuICAgIHRoaXMubGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KDApO1xuICAgIHRoaXMuYml0cmF0ZUxpbWl0ID0gbmV3IFN1YmplY3Q8Qml0c1BlclNlY29uZD4oMCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gbmV3IFN1YmplY3Q8RGltZW5zaW9uPihEaW1lbnNpb24uZW1wdHkpO1xuICAgIHRoaXMuZmFpbHVyZUNvdW50ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICB0aGlzLmVuZFBvaW50ID0gbmV3IFN1YmplY3Q8RW5kUG9pbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RyZWFtID0gbmV3IFN1YmplY3Q8SVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5ydGNTdGF0aXN0aWNzID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KG51bGwpO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghc3RyZWFtKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW0uc3RyZWFtSWQ7XG4gIH1cblxuICBhcHBseVN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IHZvaWQge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgdGhpcy5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUrKztcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQudmFsdWUgJiYgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgfVxuICB9XG5cbiAgbWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhbmRCeTtcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkO1xuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIENoYW5uZWxTdGF0ZSB7XG4gIE9mZmxpbmUgPSAxLFxuICBTdGFydGluZyxcbiAgUGF1c2VkLFxuICBQbGF5aW5nLFxuICBSZWNvdmVyaW5nLFxuICBSZWNvbm5lY3RpbmcsXG4gIFN0YW5kQnksXG4gIFN0b3BwZWQsXG4gIFVuYXV0aG9yaXplZCxcbiAgR2VvUmVzdHJpY3RlZCxcbiAgR2VvQmxvY2tlZCxcbiAgRXJyb3IsXG4gIFVuc3VwcG9ydGVkRmVhdHVyZVxufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsU3RhdGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBDaGFubmVsIGZyb20gJy4vQ2hhbm5lbCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0VkZ2VUb2tlbn0gZnJvbSAnLi4vZWRnZUF1dGgvRWRnZVRva2VuJztcbmltcG9ydCB7TWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxudHlwZSBDcmVhdGVDaGFubmVsT3B0aW9ucyA9IHtcbiAgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICB0b2tlbjogRWRnZVRva2VuO1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbHMge1xuICBzdGF0aWMgY3JlYXRlQ2hhbm5lbChvcHRpb25zOiBDcmVhdGVDaGFubmVsT3B0aW9ucyk6IENoYW5uZWwge1xuICAgIGlmICghU0RLLmluaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQ2hhbm5lbChvcHRpb25zLnZpZGVvRWxlbWVudCwgb3B0aW9ucy50b2tlbiwgb3B0aW9ucy50YXJnZXRMYWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWxzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgQ2hhbm5lbHMgZnJvbSAnLi9DaGFubmVscyc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcblxuZXhwb3J0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZVxufTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdERpc2NvdmVyeVVyaSA9ICdodHRwczovL3BjYXN0LnBoZW5peHJ0cy5jb20vcGNhc3QvZW5kUG9pbnRzJztcblxuZXhwb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVNb2RlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZU1vZGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSk6IEJpdHJhdGVNb2RlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlTW9kZSkge1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Ob3JtYWw6XG4gICAgICAgIHJldHVybiAnTm9ybWFsJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuRm9yY2U6XG4gICAgICAgIHJldHVybiAnRm9yY2UnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlTW9kZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVTdGF0ZSwgQml0cmF0ZVN0YXRlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZVN0YXRlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlKTogQml0cmF0ZVN0YXRlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlU3RhdGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLktlZXA6XG4gICAgICAgIHJldHVybiAnS2VlcCc7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlU3RhdGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IERpc2NvdmVyeVNlcnZpY2UgZnJvbSAnLi9EaXNjb3ZlcnlTZXJ2aWNlJztcblxuY29uc3QgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCA9IDYwMDAwO1xuXG5pbnRlcmZhY2UgSVBlclVSSUVuZHBvaW50IHsgW3g6IHN0cmluZ106IFByb21pc2U8RW5kUG9pbnQ+IH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBJUGVyVVJJRW5kcG9pbnQgPSB7fTtcblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaTogVVJMKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSkge1xuICAgICAgcmV0dXJuIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlTZXJ2aWNlID0gbmV3IERpc2NvdmVyeVNlcnZpY2UodXJpKTtcbiAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9IGRpc2NvdmVyeVNlcnZpY2UuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQoKTtcblxuICAgIERpc2NvdmVyeS5fY2FjaGVbdXJsXS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9PT0gY2FjaGVkVmFsdWUpIHtcbiAgICAgICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgICAgICB9XG4gICAgICB9LCBkaXNjb3ZlcnlDYWNoZUludGVydmFsKTtcbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG5cbiAgICAgIHRocm93IGU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FjaGVkVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5jb25zdCBpZ25vcmVkID0gRGlzY292ZXJ5LnByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5KCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5cbmNvbnN0IGRlZmF1bHRUaW1lb3V0ID0gMjAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVNlcnZpY2Uge1xuICBwcml2YXRlIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRGlzY292ZXJ5Jyk7XG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfdXJpOiBVUkw7XG5cbiAgY29uc3RydWN0b3IodXJpOiBVUkwpIHtcbiAgICBpZiAoIXVyaSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgcmVxdWlyZXMgdXJpJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZSh1cmkudG9TdHJpbmcoKSk7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJOZWFyYnlFbmRQb2ludHModXJpOiBVUkwsIHRpbWVvdXQ6IG51bWJlcik6IFByb21pc2U8RW5kUG9pbnRbXT4ge1xuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgcmVxdWlyZXMgdGltZW91dCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgfSksXG4gICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4oKF8sIHJlamVjdCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBEaXNjb3ZlcnkgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlLmJvZHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCB3aXRoIG5vIGRhdGEgWyR7dXJsfV1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc1N0cmluZyA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhc1N0cmluZy5zcGxpdCgnLCcpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gbmV3IEVuZFBvaW50KGVuZFBvaW50LCB0aW1lb3V0KSk7XG4gIH1cblxuICBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCh0aW1lb3V0OiBudW1iZXIgPSBkZWZhdWx0VGltZW91dCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSBEaXNjb3ZlcnlVcmkuYnVpbGREaXNjb3ZlcnlVcmwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhd2FpdCB0aGlzLmRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKG5ldyBVUkwodXJsKSwgdGltZW91dCk7XG4gICAgY29uc3QgbmV2ZXJSZXNvbHZlID0gKCk6IFByb21pc2U8dm9pZD4gPT4gbmV3IFByb21pc2UoKCkgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JlcXVlc3QgWyVzXSBmYWlsZWQsIHByZXZlbnRpbmcgaXQgZnJvbSBjb21wbGV0aW5nJywgdXJsKTtcbiAgICB9KTtcbiAgICBjb25zdCBlbmRQb2ludCA9IGF3YWl0IFByb21pc2UucmFjZShlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IGVuZFBvaW50XG4gICAgICAucGluZygpXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdGYWlsZWQgdG8gcGluZyBlbmQgcG9pbnQgWyVzXScsIGVuZFBvaW50LCBlKTtcblxuICAgICAgICByZXR1cm4gbmV2ZXJSZXNvbHZlKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4odGltZSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyZWQgZW5kIHBvaW50IFslc10gd2l0aCB0aW1lIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpLCB0aW1lKTtcbiAgICAgICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgICAgICBydW50aW1lOiAobm93IC0gU0RLLnBhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lIHx8IDB9LFxuICAgICAgICAgIHJlc291cmNlOiBlbmRQb2ludC50b1N0cmluZygpLFxuICAgICAgICAgIGtpbmQ6ICdwaW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQ7XG4gICAgICB9KSkpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX0gZnJvbSAnLi4vZGVmYXVsdHMnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVVyaSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kaXNjb3ZlcnlVcmk6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oZGVmYXVsdERpc2NvdmVyeVVyaSk7XG5cbiAgc3RhdGljIGdldCB1cmkoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5VXJpLl9kaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGREaXNjb3ZlcnlVcmwodXJpOiBVUkwpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodXJpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgdXJsLnNlYXJjaCA9IGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFtbJ3ZlcnNpb24nLCBzZGtWZXJzaW9uXSwgWydfJywgYCR7RGF0ZS5ub3coKX1gXV0pLnRvU3RyaW5nKCl9YDtcblxuICAgIGlmICh1cmwucGF0aG5hbWUgPT09ICcvJykge1xuICAgICAgdXJsLnBhdGhuYW1lID0gJy9wY2FzdC9lbmRQb2ludHMnO1xuICAgIH1cblxuICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnlVcmkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuXG5pbXBvcnQge1xuICBJU3Vic2NyaWJlUmVzcG9uc2UsXG4gIElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdFxufSBmcm9tICcuLi9hcGkvU3Vic2NyaWJlJztcbmltcG9ydCB7SVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCwgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9TZXRSZW1vdGVEZXNjcmlwdGlvbic7XG5pbXBvcnQge0lTZXNzaW9uRGVzY3JpcHRpb24sIFNkcFR5cGV9IGZyb20gJy4uL2FwaS9TZXNzaW9uRGVzY3JpcHRpb24nO1xuaW1wb3J0IHtJRGVzdHJveVN0cmVhbVJlcXVlc3QsIElEZXN0cm95U3RyZWFtUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9EZXN0cm95U3RyZWFtJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCB7SUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0LCBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlfSBmcm9tICcuLi9hcGkvQWRkSWNlQ2FuZGlkYXRlcyc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgRWRnZUF1dGggZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGgnO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlLCBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgQml0cmF0ZU1vZGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZU1vZGVNYXBwaW5nJztcbmltcG9ydCBCaXRyYXRlU3RhdGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZVN0YXRlTWFwcGluZyc7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5cbmNvbnN0IGFwaVZlcnNpb24gPSA2O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpYmVTdGF0dXMgPSAnb2snIHwgJ25vLXN0cmVhbScgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFJlbW92ZVRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgRGVzdHJveVN0cmVhbVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW0ge1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpYmVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59XG5cbmludGVyZmFjZSBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzO1xuICBzZXNzaW9uRGVzY3JpcHRpb24/OiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5pbnRlcmZhY2UgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXM7XG4gIG9wdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXM7XG59XG5cbmludGVyZmFjZSBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kUG9pbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRW5kUG9pbnQnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXJpOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcm91bmRUcmlwVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIpIHtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gICAgdGhpcy5fdGltZW91dCA9IHRpbWVvdXQ7XG5cbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW5kIHBvaW50IHJlcXVpcmVzIGEgdGltZW91dGApO1xuICAgIH1cbiAgfVxuXG4gIGdldCByb3VuZFRyaXBUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRW5kUG9pbnRbdXJpPSR7dGhpcy5fdXJpfV1gO1xuICB9XG5cbiAgYXN5bmMgcGluZygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRQaW5nVXJsKCk7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgfSksXG4gICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4oKF8sIHJlamVjdCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBQaW5nIHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGhpcy5fdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7IC8qIEhhbmRsZSAqL1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQaW5nIGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIHRoaXMuX3JvdW5kVHJpcFRpbWUgPSBmaW5pc2hlZCAtIHN0YXJ0O1xuXG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICBhc3luYyBzdWJzY3JpYmUodG9rZW46IHN0cmluZywgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKHRva2VuKTtcblxuICAgIGlmICghcGFyc2VkVG9rZW4gfHwgIXBhcnNlZFRva2VuLmFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdGVuYW5jeSA9IHBhcnNlZFRva2VuLmFwcGxpY2F0aW9uSWQ7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdzdWJzY3JpYmUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGVkZ2VBdXRoVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMuY29udmVydFJUQ1NkcFR5cGVUb1NkcFR5cGUobG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSksXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGVkZ2VBdXRoVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRob3V0T2ZmZXIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBTdWJzY3JpYmUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU3Vic2NyaWJlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzdWJzY3JpYmUgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtOiBJU3RyZWFtLCBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzY3JpcHRpb24nLCAncmVtb3RlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICB0eXBlOiB0aGlzLmNvbnZlcnRSVENTZHBUeXBlVG9TZHBUeXBlKHNlc3Npb25EZXNjcmlwdGlvbi50eXBlKSxcbiAgICAgICAgc2RwOiBzZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIG5ldyBFcnJvcihgU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHNldCByZW1vdGUgZGVzY3JpcHRpb24gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGxpbWl0Qml0cmF0ZShcbiAgICBzdHJlYW06IElTdHJlYW0sXG4gICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXIsXG4gICAgYml0cmF0ZUluQml0c1BlclNlY29uZDogQml0c1BlclNlY29uZCxcbiAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSxcbiAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUsXG4gICk6IFByb21pc2U8SVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdiaXRyYXRlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZSksXG4gICAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlKVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgbmV3IEVycm9yKGBTZXQgbGltaXQgYml0cmF0ZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3Qgc2V0IGxpbWl0IGJpdHJhdGUgcmVzcG9uc2UgWyVzXSBpbiBbJXNdIG1zJywgc3RhdHVzLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiB7c3RhdHVzfTtcbiAgfVxuXG4gIGFzeW5jIGFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtOiBJU3RyZWFtLCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSwgZGlzY292ZXJ5Q29tcGxldGVkOiBib29sZWFuLCBvcHRpb25zOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnaWNlJywgJ2NhbmRpZGF0ZXMnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBjYW5kaWRhdGVzLFxuICAgICAgZGlzY292ZXJ5Q29tcGxldGVkLFxuICAgICAgb3B0aW9uc1xuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIG5ldyBFcnJvcihgQWRkIGljZSBjYW5kaWRhdGVzIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgYWRkIElDRSBjYW5kaWRhdGVzIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbShzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBEZWxldGUgc3RyZWFtIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgc3RyZWFtJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGRlc3Ryb3kgc3RyZWFtIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGRlc3Ryb3lTdHJlYW1SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICB9XG5cbiAgYnVpbGRVcmwocGF0aDogc3RyaW5nW10pOiBVUkwge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBwYXRoQXNBcnJheSA9IHVyaS5wYXRobmFtZS5zcGxpdCgnLycpO1xuXG4gICAgcGF0aEFzQXJyYXkubGVuZ3RoID0gcGF0aEFzQXJyYXkubGVuZ3RoIC0gMTtcblxuICAgIHVyaS5wYXRobmFtZSA9IHBhdGhBc0FycmF5LmNvbmNhdCguLi5wYXRoKS5qb2luKCcvJyk7XG5cbiAgICByZXR1cm4gdXJpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBpbmdVcmwoKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICB1cmkuc2VhcmNoID0gYD8ke25ldyBVUkxTZWFyY2hQYXJhbXMoW1sndHlwZScsICdodHRwJ10sIFsndmVyc2lvbicsIHNka1ZlcnNpb25dLCBbJ18nLCBgJHtEYXRlLm5vdygpfWBdXSkudG9TdHJpbmcoKX1gO1xuXG4gICAgcmV0dXJuIHVyaS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU3Vic2NyaWJlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBEZXN0cm95U3RyZWFtU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVN1YnNjcmliZVJlc3BvbnNlO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlOiBJU3Vic2NyaWJlUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5sYWcgPSBkYXRhLmxhZztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gPSB7fTtcblxuICAgICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSkge1xuICAgICAgICAgIHN3aXRjaCAoZGF0YS5ydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSkge1xuICAgICAgICAgICAgY2FzZSAnQnVuZGxlUG9saWN5QmFsYW5jZWQnOlxuICAgICAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9ICdiYWxhbmNlZCc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCdW5kbGVQb2xpY3lNYXhDb21wYXQnOlxuICAgICAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9ICdtYXgtY29tcGF0JztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0J1bmRsZVBvbGljeU1heEJ1bmRsZSc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gJ21heC1idW5kbGUnO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoZGF0YS5ydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9IGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVycykge1xuICAgICAgICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICAgICAgICB1cmxzOiBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzLFxuICAgICAgICAgICAgICB1c2VybmFtZTogZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgICAgICAgIGNyZWRlbnRpYWw6IGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkge1xuICAgICAgICAgIHN3aXRjaCAoZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkge1xuICAgICAgICAgICAgY2FzZSAnSWNlVHJhbnNwb3J0UG9saWN5QWxsJzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kgPSAnYWxsJztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0ljZVRyYW5zcG9ydFBvbGljeVJlbGF5JzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kgPSAncmVsYXknO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnSWNlVHJhbnNwb3J0UG9saWN5UHVibGljJzpcbiAgICAgICAgICAgICAgLy8gRGVwcmVjYXRlZCAtIE5vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uLnBlZXJJZGVudGl0eSkge1xuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24ucGVlcklkZW50aXR5ID0gZGF0YS5ydGNDb25maWd1cmF0aW9uLnBlZXJJZGVudGl0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSkge1xuICAgICAgICAgIHN3aXRjaCAoZGF0YS5ydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ1J0Y3BNdXhQb2xpY3lOZWdvdGlhdGUnOlxuICAgICAgICAgICAgICBydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kgPSAnbmVnb3RpYXRlJztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1J0Y3BNdXhQb2xpY3lSZXF1aXJlJzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5ID0gJ3JlcXVpcmUnO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoZGF0YS5ydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSBydGNDb25maWd1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IHRoaXMuY29udmVydElTZXNzaW9uRGVzY3JpcHRpb25Ub1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKX07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogdGhpcy5jb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiB0aGlzLmNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKX07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbjogSVNlc3Npb25EZXNjcmlwdGlvbik6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQge1xuICAgIGNvbnN0IHJ0Y1Nlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCA9IHtzZHA6IHNlc3Npb25EZXNjcmlwdGlvbi5zZHB9O1xuXG4gICAgc3dpdGNoIChzZXNzaW9uRGVzY3JpcHRpb24udHlwZSkge1xuICAgICAgY2FzZSAnT2ZmZXInOlxuICAgICAgICBydGNTZXNzaW9uRGVzY3JpcHRpb24udHlwZSA9ICdvZmZlcic7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBbnN3ZXInOlxuICAgICAgICBydGNTZXNzaW9uRGVzY3JpcHRpb24udHlwZSA9ICdhbnN3ZXInO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUpO1xuICAgIH1cblxuICAgIHJldHVybiBydGNTZXNzaW9uRGVzY3JpcHRpb247XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U6IElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIGlmIChkYXRhICYmIGRhdGEuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiA9IHRoaXMuY29udmVydElTZXNzaW9uRGVzY3JpcHRpb25Ub1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihkYXRhLnNlc3Npb25EZXNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTogSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLm9wdGlvbnMpIHtcbiAgICAgICAgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElEZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbTogSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFJUQ1NkcFR5cGVUb1NkcFR5cGUodHlwZTogUlRDU2RwVHlwZSk6IFNkcFR5cGUge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYW5zd2VyJzpcbiAgICAgICAgcmV0dXJuICdBbnN3ZXInO1xuICAgICAgY2FzZSAnb2ZmZXInOlxuICAgICAgICByZXR1cm4gJ09mZmVyJztcbiAgICAgIGNhc2UgJ3ByYW5zd2VyJzpcbiAgICAgIGNhc2UgJ3JvbGxiYWNrJzpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTRFAgdHlwZSBbJHt0eXBlfV0gaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lFZGdlQXV0aH0gZnJvbSAnLi9FZGdlQXV0aFRva2VuJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQge0VkZ2VUb2tlbn0gZnJvbSAnLi9FZGdlVG9rZW4nO1xuXG5jb25zdCBlZGdlQXV0aFRva2VuUHJlZml4ID0gJ0RJR0VTVDonO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlQXV0aCB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRWRnZUF1dGgnKTtcblxuICBzdGF0aWMgcGFyc2VUb2tlbih0b2tlbjogRWRnZVRva2VuKTogSUVkZ2VBdXRoIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZFRva2VuKHRva2VuKSkge1xuICAgICAgRWRnZUF1dGguX2xvZ2dlci5lcnJvcignVG9rZW4gaXMgbm90IHZhbGlkIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVuY29kZWRFZGdlQXV0aFRva2VuID0gYXRvYih0b2tlbi5zdWJzdHIoZWRnZUF1dGhUb2tlblByZWZpeC5sZW5ndGgpKTtcbiAgICAgIGNvbnN0IGVkZ2VBdXRoVG9rZW4gPSBKU09OLnBhcnNlKGVuY29kZWRFZGdlQXV0aFRva2VuKTtcblxuICAgICAgZWRnZUF1dGhUb2tlbi50b2tlbiA9IEpTT04ucGFyc2UoZWRnZUF1dGhUb2tlbi50b2tlbik7XG5cbiAgICAgIHJldHVybiBlZGdlQXV0aFRva2VuO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIEVkZ2VBdXRoLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBwYXJzZSB0b2tlbiB2YWx1ZScsIGUpO1xuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRVcmkocGFyc2VkVG9rZW46IElFZGdlQXV0aCk6IFVSTCB7XG4gICAgcmV0dXJuIHBhcnNlZFRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuLnVyaSA/XG4gICAgICBuZXcgVVJMKHBhcnNlZFRva2VuLnRva2VuLnVyaSkgOiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbmFuY3kocGFyc2VkVG9rZW46IElFZGdlQXV0aCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhcnNlZFRva2VuICYmIHBhcnNlZFRva2VuLmFwcGxpY2F0aW9uSWQgP1xuICAgICAgcGFyc2VkVG9rZW4uYXBwbGljYXRpb25JZCA6ICcnO1xuICB9XG5cbiAgc3RhdGljIGlzVmFsaWRUb2tlbih0b2tlbjogRWRnZVRva2VuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4uc3RhcnRzV2l0aChlZGdlQXV0aFRva2VuUHJlZml4KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi8uLi9kb20vQnJvd3NlckRldGVjdG9yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmVhdHVyZUVuYWJsZW1lbnQge1xuICBzdGF0aWMgZ2V0IGNsaWVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2xpZW50IG9mZmVyIHdvcmtmbG93IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IGluIHRoZSBmb2xsb3dpbmcgYnJvd3NlcnNcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzQgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc1IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NiB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFkZFRyYW5jZWl2ZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDaHJvbWUgNjksIDcwLCA3MSwgNzIgZXhwb3NlcyBgYWRkVHJhbmNlaXZlcmAgYnV0IGl0IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzEgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBnZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY2O1xuICB9XG5cbiAgc3RhdGljIGdldCBnZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG9uVHJhY2tEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2MyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaG91bGRVc2VOYXRpdmVIbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaScgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhbXN1bmdCcm93c2VyJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNSVE1QRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDwgODQpIHx8XG4gICAgICAoQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8IDcwKSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRWRnZScgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0lFJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNQcmVjYWNoaW5nRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lICE9PSAnSUUnO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuLi9jaGFubmVscy9DaGFubmVscyc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5cbmV4cG9ydCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0NoYW5uZWxTdGF0ZX0gZnJvbSAnLi4vY2hhbm5lbHMnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaHVua2VkU3RyZWFtIGltcGxlbWVudHMgSVN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaHVua2VkU3RyZWFtJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfbW9uaXRvckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX3N0cmVhbVN0YXRpc3RpY3M6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzO1xuICBwcml2YXRlIF9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gY2hhbm5lbENvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHRoaXMpO1xuICB9XG5cbiAgc3RhcnQodXJpOiBVUkwsIHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQgfCBJRGlzcG9zYWJsZT4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpXG4gICAgICAudGhlbihlbmRQb2ludCA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQuc3Vic2NyaWJlKHRva2VuLCBudWxsLCB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCh7c3RhdHVzLCBzdHJlYW0sIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSwgbGFnfSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBzdHJlYW07XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxhZy52YWx1ZSA9IGxhZztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoXG4gICAgICAgICAgJ1slc10gU3Vic2NyaWJlIGNvbXBsZXRlZCBbJXNdIFslal0gWyVqXSBbJWpdIFslal0nLFxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvZmZlclNkcCA9IGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgIG9yaWdpblN0YXJ0VGltZTogRGF0ZS5ub3coKSAtIGxhZyArIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyAyLFxuICAgICAgICAgIGxhZ1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBMaXZlU3RyZWFtaW5nLnN0YXJ0KHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSwgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIG9mZmVyU2RwLCBvcHRpb25zKVxuICAgICAgICAgIC50aGVuKHBsYXllciA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vbml0b3IocGxheWVyKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBsYXllcjtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignTGl2ZVN0cmVhbWluZyBmYWlsZWQnLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbW9uaXRvcihwbGF5ZXI6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBuZXdTdHJlYW1TdGF0aXN0aWNzID0gTGl2ZVN0cmVhbWluZy5nZXRTdGF0cygpO1xuXG4gICAgICBpZiAodGhpcy5fc3RyZWFtU3RhdGlzdGljcyAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmN1cnJlbnRUaW1lID49IG5ld1N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgJiZcbiAgICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5kYXRhQnVmZmVyZWRcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50Kys7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPiA2KSB7XG4gICAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgcGxheWVyLmRpc3Bvc2UoKTtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZWQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MgPSBuZXdTdHJlYW1TdGF0aXN0aWNzO1xuICAgICAgdGhpcy5tb25pdG9yKHBsYXllcik7XG4gICAgfSwgMTAwMCk7XG5cbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB9KSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TGl2ZVN0cmVhbWluZ30gZnJvbSAnLi9MaXZlU3RyZWFtaW5nJztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ09wdGlvbnMsIExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7SUhsc1BsYXllclR5cGV9IGZyb20gJy4vSUhsc1BsYXllcic7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhsc1BsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJSGxzUGxheWVyVHlwZTtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChMaXZlU3RyZWFtaW5nLmhsc1BsYXllcikge1xuICAgICAgaWYgKExpdmVTdHJlYW1pbmcuaGxzUGxheWVyLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgICAgdGhpcy5fcGxheWVyID0gbmV3IExpdmVTdHJlYW1pbmcuaGxzUGxheWVyKHtcbiAgICAgICAgICBlbmFibGVXb3JrZXI6IHRydWUsXG4gICAgICAgICAgbWF4QnVmZmVyTGVuZ3RoOiAxLFxuICAgICAgICAgIGxpdmVCYWNrQnVmZmVyTGVuZ3RoOiAwLFxuICAgICAgICAgIGxpdmVTeW5jRHVyYXRpb246IDcsXG4gICAgICAgICAgbGl2ZUR1cmF0aW9uSW5maW5pdHk6IHRydWUsXG4gICAgICAgICAgbGl2ZU1heExhdGVuY3lEdXJhdGlvbjogSW5maW5pdHksXG4gICAgICAgICAgaGlnaEJ1ZmZlcldhdGNoZG9nUGVyaW9kOiAxXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9wbGF5ZXIubG9hZFNvdXJjZSh0aGlzLl9tYW5pZmVzdFVSSSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5hdHRhY2hNZWRpYSh0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuY2FuUGxheVR5cGUoJ2FwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsJykpIHtcbiAgICAgICAgdGhpcy5fdmlkZW9FbGVtZW50LnNyYyA9IHRoaXMuX21hbmlmZXN0VVJJO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMaXZlU3RyZWFtaW5nLmhsc1BsYXllciAmJiBMaXZlU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMC4wLFxuICAgICAgICBsYWc6IDAuMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0ge1xuICAgICAgd2lkdGg6IHRoaXMuX3BsYXllci5tZWRpYS5vZmZzZXRXaWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldEhlaWdodCxcbiAgICAgIGN1cnJlbnRUaW1lOiB0aGlzLl9wbGF5ZXIubWVkaWEuY3VycmVudFRpbWUsXG4gICAgICBsYWc6IDAuMCxcbiAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZSxcbiAgICAgIGRhdGFCdWZmZXJlZDogMC4wXG4gICAgfTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0lETEUnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0VSUk9SJyB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0VOREVEJykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlLmluY2x1ZGVzKCdMT0FESU5HJykgfHwgdGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ1dBSVRJTkcnKSkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuXG4gICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIChjdXJyZW50VGltZSArICh0aGlzLl9vcHRpb25zLmxhZyAvIDEwMDApKSAtIHRydWVDdXJyZW50VGltZSk7XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllciAmJiB0aGlzLl9wbGF5ZXIuZGVzdHJveSkge1xuICAgICAgdGhpcy5fcGxheWVyLmRlc3Ryb3koKTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9mZWF0dXJlL0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBXZWJQbGF5ZXIgZnJvbSAnLi9XZWJQbGF5ZXInO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IFNoYWthUGxheWVyIGZyb20gJy4vU2hha2FQbGF5ZXInO1xuaW1wb3J0IEhsc1BsYXllciBmcm9tICcuL0hsc1BsYXllcic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQge0hsc1BsYXllclR5cGUsIExpdmVTdHJlYW1pbmdPcHRpb25zLCBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcywgU2hha2FUeXBlLCBXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcblxuZXhwb3J0IGNsYXNzIExpdmVTdHJlYW1pbmcge1xuICBwcml2YXRlIHN0YXRpYyBfcGVuZGluZyA9IGZhbHNlO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzUGxheWVyOiBIbHNQbGF5ZXJUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfcGhlbml4V2ViUGxheWVyOiBXZWJQbGF5ZXJUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2E6IFNoYWthVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIHN0YXRpYyBfcGxheWVyOiBTaGFrYVBsYXllciB8IFdlYlBsYXllciB8IEhsc1BsYXllcjtcblxuICBzdGF0aWMgZ2V0IGhsc1BsYXllcigpOiBIbHNQbGF5ZXJUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5faGxzUGxheWVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBwaGVuaXhXZWJQbGF5ZXIoKTogV2ViUGxheWVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BoZW5peFdlYlBsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2EoKTogU2hha2FUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2hha2E7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgc3RhcnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucyk6IFByb21pc2U8SURpc3Bvc2FibGU+IHtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcblxuICAgIGlmICh0aGlzLl9obHNQbGF5ZXIgfHwgdGhpcy5fc2hha2EgfHwgdGhpcy5fcGhlbml4V2ViUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkZWQodmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHApO1xuICAgIH1cblxuICAgIGlmICghU0RLLndlYlBsYXllckxvYWRlciAmJiAhU0RLLnNoYWthUGxheWVyTG9hZGVyICYmICFTREsuaGxzSnNMb2FkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcGxheWVyIGlzIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFTREsud2ViUGxheWVyTG9hZGVyICYmICFTREsuc2hha2FQbGF5ZXJMb2FkZXIgJiYgIVNESy5obHNKc0xvYWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZC1mZWF0dXJlLCBhZGQgc3RyZWFtIHBsYXllcicpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGlmIChTREsuaGxzSnNMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy5obHNKc0xvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX2hsc1BsYXllciA9IHBsYXllcjtcblxuICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5sb2FkZWQodmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoU0RLLndlYlBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLndlYlBsYXllckxvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX3BoZW5peFdlYlBsYXllciA9IHBsYXllcjtcblxuICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5sb2FkZWQodmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoU0RLLnNoYWthUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsuc2hha2FQbGF5ZXJMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9zaGFrYSA9IHBsYXllcjtcblxuICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5sb2FkZWQodmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGxheWVyLmdldFN0YXRzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwbGF5KFBsYXllcjogdHlwZW9mIFdlYlBsYXllciB8IHR5cGVvZiBTaGFrYVBsYXllciB8IHR5cGVvZiBIbHNQbGF5ZXIsIHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZywgb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnMpOiBJRGlzcG9zYWJsZSB7XG4gICAgY29uc3QgZGFzaE1hbmlmZXN0VXJsTWF0Y2ggPSBvZmZlclNkcC5tYXRjaCgvYT14LXBsYXlsaXN0OihbXlxcbl0qWy5dbXBkXFw/P1teXFxzXSopL20pO1xuICAgIGNvbnN0IGhsc01hbmlmZXN0VXJsTWF0Y2ggPSBvZmZlclNkcC5tYXRjaCgvYT14LXBsYXlsaXN0OihbXlxcbl0qWy5dbTN1OFxcPz9bXlxcc10qKS9tKTtcbiAgICBjb25zdCBtYW5pZmVzdFVybCA9IGRhc2hNYW5pZmVzdFVybE1hdGNoICYmIGRhc2hNYW5pZmVzdFVybE1hdGNoWzFdID8gZGFzaE1hbmlmZXN0VXJsTWF0Y2hbMV0gOiAnJztcbiAgICBjb25zdCBwbGF5bGlzdFVybCA9IGhsc01hbmlmZXN0VXJsTWF0Y2ggJiYgaGxzTWFuaWZlc3RVcmxNYXRjaFsxXSA/IGhsc01hbmlmZXN0VXJsTWF0Y2hbMV0gOiAnJztcblxuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHMgfHwgKHRoaXMuX2hsc1BsYXllciAmJiB0aGlzLl9obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKSkpIHtcbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBQbGF5ZXIodmlkZW9FbGVtZW50LCAnaGxzJywgc3RyZWFtSWQsIHBsYXlsaXN0VXJsLCBvcHRpb25zKTtcblxuICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KCk7XG5cbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXI7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbmV3IFBsYXllcih2aWRlb0VsZW1lbnQsICdkYXNoJywgc3RyZWFtSWQsIG1hbmlmZXN0VXJsLCBvcHRpb25zKTtcblxuICAgIHRoaXMuX3BsYXllci5zdGFydCgpO1xuXG4gICAgcmV0dXJuIHRoaXMuX3BsYXllcjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGxvYWRlZCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcpOiBJRGlzcG9zYWJsZSB7XG4gICAgaWYgKCF0aGlzLl9zaGFrYSAmJiAhdGhpcy5fcGhlbml4V2ViUGxheWVyICYmICF0aGlzLl9obHNQbGF5ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KEhsc1BsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoV2ViUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3NoYWthKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KFNoYWthUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBlbnVtIE5ldHdvcmtTdGF0ZXMge1xuICBOZXR3b3JrRW1wdHksXG4gIE5ldHdvcmtJZGxlLFxuICBOZXR3b3JrTG9hZGluZyxcbiAgTmV0d29ya05vU291cmNlXG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IEVuZFBvaW50LCB7U2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLCB7SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0fSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgUnRjQ29ubmVjdGlvbk1vbml0b3IgZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxDb250ZXh0JztcblxuY29uc3QgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwgPSAxMDA7XG5jb25zdCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0ID0gMzAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWxUaW1lU3RyZWFtIGltcGxlbWVudHMgSVN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdSZWFsVGltZVN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgY29uc3RydWN0b3IoY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUgPSBoYW5kbGVTdHJlYW1GYWlsdXJlO1xuICB9XG5cbiAgc3RhcnQodXJpLCB0b2tlbiwgbGlzdGVuT25TdHJlYW1TZXR1cCwgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGw8RW5kUG9pbnQsIElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4oW1xuICAgICAgRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKSxcbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICBdKVxuICAgICAgLnRoZW4oKFtlbmRQb2ludCwge2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufV0pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnTG9jYWwgb2ZmZXI6XFxuJyArIGxvY2FsT2ZmZXIuc2RwKTtcblxuICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICBsb2NhbE9mZmVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBydGNDb25maWd1cmF0aW9uLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseVJ0Y0NvbmZpZ3VyYXRpb24odGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUsIHJ0Y0NvbmZpZ3VyYXRpb24pXG4gICAgICAgICAgLnRoZW4ocGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICAgICAgbGV0IHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0O1xuICAgICAgICAgICAgbGV0IGNhbmNlbERpc2NvdmVyeSA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGRpc2NvdmVyeUNvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10gPSBbXTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIHN0b3Agbm9ybWFsbHkgdGhlIHBlZXIgY29ubmVjdGlvbiBpcyB1bnJlZ2lzdGVyZWQgZmlyc3QuXG4gICAgICAgICAgICAgICAgLy8gVGh1cyBhbnl0aW1lIHdlIHNlZSBhIGNsb3NlZCBwZWVyIGNvbm5lY3Rpb24gdGhhdCBpcyBzdGlsbCB2YWxpZCwgaXQgaXMgYW4gZXJyb3IuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciBwZWVyIGNvbm5lY3Rpb24gc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNraW5nJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3JzpcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgdHJ5aW5nIHRvIHJlY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlZCc6XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHJldHJ5aW5nIHRvIGNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbVByb21pc2UgPSBuZXcgUHJvbWlzZTxNZWRpYVN0cmVhbT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50Lm9uVHJhY2tEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuXG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoe1xuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFuc3dlciA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIGFuc3dlciBbJWpdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGFuc3dlcik7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5zZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW0sIGFuc3dlcik7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoe3N0YXR1cywgc2Vzc2lvbkRlc2NyaXB0aW9ufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBtZWRpYVN0cmVhbTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNDb25uZWN0aW9uTW9uaXRvciA9IG5ldyBSdGNDb25uZWN0aW9uTW9uaXRvcihwZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW0sIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyA0KTtcblxuICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3IpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSBydGNDb25uZWN0aW9uTW9uaXRvci5ydGNTdGF0aXN0aWMuc3Vic2NyaWJlKHN0YXRpc3RpY3MgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MudmFsdWUgPSBzdGF0aXN0aWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiAhdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhdWRpb1RyYWNrRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHZpZGVvVHJhY2tGYWlsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLmF1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICBhdWRpb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpb1RyYWNrRmFpbGVkICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEF1ZGlvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MuYXVkaW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBWaWRlbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCh2aWRlb1RyYWNrRmFpbGVkIHx8IGF1ZGlvVHJhY2tGYWlsZWQpICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgcnRjQ29ubmVjdGlvbk1vbml0b3IuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciB0cmFjayBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoIVNESy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXBwbHlSdGNDb25maWd1cmF0aW9uKFxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiB8IG51bGwsXG4gICAgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgaWYgKCFvcHRpb25hbFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uID0gdGhpcy50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHRydW5jYXRlSWNlU2VydmVycyhjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB1cmxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCB1cmwgPSBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF07XG5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHVybHMucHVzaChjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgIHVybHM6IHVybHMsXG4gICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuXG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIDwgU0RLLm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgfHwgIVNESy5hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMrKztcblxuICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JlY29ubmVjdGluZyBwZWVyIGNvbm5lY3Rpb24gYnkgcmVzdGFydGluZyBJQ0UnKTtcblxuICAgICAgY29uc3QgbG9jYWxPZmZlciA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihsb2NhbE9mZmVyKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbicsIGUpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gYWZ0ZXIgWyVzXSBhdHRlbXB0cywgcGVyZm9ybWluZyBmdWxsIHJlY292ZXJ5JywgdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgcmV0cnlDYWxsYmFjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdPcHRpb25zLCBMaXZlU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbnR5cGUgU2hha2FPcHRpb25zID0ge1xuICBhYnI6IHtcbiAgICBkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGU6IG51bWJlcjtcbiAgfTtcbiAgbWFuaWZlc3Q6IHtcbiAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgIHRpbWVvdXQ6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICBzdHJlYW1pbmc6IHtcbiAgICByZWJ1ZmZlcmluZ0dvYWw6IG51bWJlcjtcbiAgICBidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyQmVoaW5kOiBudW1iZXI7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgICBtYXhBdHRlbXB0czogbnVtYmVyO1xuICAgICAgYmFja29mZkZhY3RvcjogbnVtYmVyO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNoYWthIHtcbiAgY29uZmlndXJlOiAobzogU2hha2FPcHRpb25zKSA9PiB2b2lkO1xuICBsb2FkOiAodXJpOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIGdldFN0YXRzOiAoKSA9PiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcztcbiAgZGVzdHJveTogKCkgPT4gdm9pZDtcbiAgdW5sb2FkOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFrYVBsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTaGFrYVBsYXllcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSVNoYWthO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKExpdmVTdHJlYW1pbmcuc2hha2EpIHtcbiAgICAgIGNvbnN0IHBsYXllck9wdGlvbnM6IFNoYWthT3B0aW9ucyA9IHtcbiAgICAgICAgYWJyOiB7ZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiAyMDAwMDAwfSxcbiAgICAgICAgbWFuaWZlc3Q6IHtyZXRyeVBhcmFtZXRlcnM6IHt0aW1lb3V0OiAxMDAwMH19LFxuICAgICAgICBzdHJlYW1pbmc6IHtcbiAgICAgICAgICByZWJ1ZmZlcmluZ0dvYWw6IDIsXG4gICAgICAgICAgYnVmZmVyaW5nR29hbDogMTAsXG4gICAgICAgICAgYnVmZmVyQmVoaW5kOiAzMCxcbiAgICAgICAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICAgICAgbWF4QXR0ZW1wdHM6IDEwLFxuICAgICAgICAgICAgYmFja29mZkZhY3RvcjogMS4xXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgTGl2ZVN0cmVhbWluZy5zaGFrYS5QbGF5ZXIodGhpcy5fdmlkZW9FbGVtZW50KTtcbiAgICAgIHRoaXMubG9hZFBsYXllcihwbGF5ZXJPcHRpb25zKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAsXG4gICAgICAgIGxhZzogMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0ge1xuICAgICAgLi4udGhpcy5fcGxheWVyLmdldFN0YXRzKCksXG4gICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgIGxhZzogMFxuICAgIH07XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ10gfHwgMDtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG4gICAgY29uc3QgbGFnID0gTWF0aC5tYXgoMC4wLCB0cnVlQ3VycmVudFRpbWUgLSBjdXJyZW50VGltZSk7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50KSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgICBzdGF0aXN0aWNzLmxhZyA9IGxhZztcblxuICAgICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLnVubG9hZCgpO1xuICAgICAgdGhpcy5fcGxheWVyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGxheWVyKHBsYXllckNvbmZpZzogU2hha2FPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGxheWVyLmNvbmZpZ3VyZShwbGF5ZXJDb25maWcpO1xuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BsYXllci5sb2FkKHRoaXMuX21hbmlmZXN0VVJJKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERBU0ggbGl2ZSBzdHJlYW0gaGFzIGJlZW4gbG9hZGVkJywgdGhpcy5fc3RyZWFtSWQpO1xuXG4gICAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LnBsYXkpIHtcbiAgICAgICAgdGhpcy5fdmlkZW9FbGVtZW50LnBsYXkoKTtcbiAgICAgIH1cbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBFcnJvciB3aGlsZSBsb2FkaW5nIERBU0ggbGl2ZSBzdHJlYW0gWyVzXScsIHRoaXMuX3N0cmVhbUlkLCBlLmNvZGUsIGUpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQgRWRnZUF1dGggZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGgnO1xuaW1wb3J0IENodW5rZWRTdHJlYW0gZnJvbSAnLi9DaHVua2VkU3RyZWFtJztcbmltcG9ydCBSZWFsVGltZVN0cmVhbSBmcm9tICcuL1JlYWxUaW1lU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbUZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbWluZycpO1xuXG4gIHN0YXRpYyBjcmVhdGUodG9rZW46IHN0cmluZywgY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiBJU3RyZWFtIHtcbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IGlzUnRtcCA9IHBhcnNlZFRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuLmNhcGFiaWxpdGllcyAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3J0bXAnKTtcblxuICAgIGlmIChpc1J0bXApIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignVGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IFJUTVAgcGxheWJhY2suJyk7XG4gICAgICBjaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc1N0cmVhbWluZyA9IHBhcnNlZFRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuLmNhcGFiaWxpdGllcyAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3N0cmVhbWluZycpO1xuXG4gICAgaWYgKGlzU3RyZWFtaW5nKSB7XG4gICAgICByZXR1cm4gbmV3IENodW5rZWRTdHJlYW0oY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVhbFRpbWVTdHJlYW0oY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJlYW1GYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ30gZnJvbSAnLi9MaXZlU3RyZWFtaW5nJztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ09wdGlvbnMsIExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuY29uc3QgYmFuZHdpZHRoVG9TdGFydEF0ID0gMzAwMDAwMDsgLy8gQ29ycmVzcG9uZHMgdG8gNzIwcCBpbiBtb3N0IHNldHVwc1xuY29uc3QgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgPSAxNTAwMDtcblxudHlwZSBFdmVudExpc3RlbmVyRm9yV2ViUGxheWVyID0gKGV2dDogV2ViUGxheWVyRXZlbnQpID0+IHZvaWQ7XG50eXBlIFdlYlBsYXllckV2ZW50ID0ge1xuICBjb2RlOiBudW1iZXI7XG4gIHNldmVyaXR5OiBudW1iZXI7XG4gIGVycm9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVdlYlBsYXllciB7XG4gIHN0YXJ0OiAodXJsOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGFkZEV2ZW50TGlzdGVuZXIobmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lckZvcldlYlBsYXllcik6IHZvaWQ7XG4gIGRpc3Bvc2UoKTogdm9pZDtcbiAgZXJyb3JzOiB7XG4gICAgc2V2ZXJpdHk6IHtcbiAgICAgIFJFQ09WRVJBQkxFOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3M7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYlBsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdXZWJQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElXZWJQbGF5ZXI7XG4gIHByaXZhdGUgX2xhc3RSZWxvYWRUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIGNvbnN0IHBsYXllck9wdGlvbnMgPSB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIGJhbmR3aWR0aFRvU3RhcnRBdFxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IExpdmVTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLldlYlBsYXllcih0aGlzLl9sb2dnZXIsIHRoaXMuX3ZpZGVvRWxlbWVudCwgcGxheWVyT3B0aW9ucyk7XG4gICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQodGhpcy5fbWFuaWZlc3RVUkkpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBlcnJvck9iamVjdCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNhblJlbG9hZCgpICYmIGVycm9yT2JqZWN0ICYmIChlcnJvck9iamVjdC5jb2RlID09PSAzIHx8IGVycm9yT2JqZWN0LnNldmVyaXR5ID09PSBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5lcnJvcnMuc2V2ZXJpdHkuUkVDT1ZFUkFCTEUpKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1JlbG9hZGluZyB1bmhlYWx0aHkgc3RyZWFtIGFmdGVyIGVycm9yIGV2ZW50IFslal0nLCBlcnJvck9iamVjdCk7XG4gICAgICAgICAgdGhpcy5yZWxvYWRJZkFibGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2Fubm90IHJlbG9hZCB3aXRoIGVycm9yIFslal0nLCBlcnJvck9iamVjdCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllciAmJiBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5pc1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAuMCxcbiAgICAgICAgbGFnOiAwLjAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2UsXG4gICAgICAgIGRhdGFCdWZmZXJlZDogMC4wXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHN0YXRpc3RpY3MuY3VycmVudFRpbWUgfHwgdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmlzTmF0aXZlICYmIHN0YXRpc3RpY3MuZGVsaXZlcnlUeXBlID09PSAnSGxzJykge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIC0gc3RhdGlzdGljcy5sYWc7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0aXN0aWNzLmN1cnJlbnRUaW1lKSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0aXN0aWNzLmlzTmF0aXZlKSB7XG4gICAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MucGxheVRpbWUgPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGNhblJlbG9hZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZCA9ICF0aGlzLl9sYXN0UmVsb2FkVGltZSB8fCBEYXRlLm5vdygpIC0gdGhpcy5fbGFzdFJlbG9hZFRpbWUgPiBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZDtcblxuICAgIHJldHVybiB0aGlzLl92aWRlb0VsZW1lbnQgJiYgdGhpcy5fcGxheWVyICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGggIT09IDAgJiYgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQ7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZElmQWJsZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuUmVsb2FkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSB0aGF0IHdhcyBhY3RpdmUgZm9yIGF0IGxlYXN0IFslc10gc2Vjb25kcycsIHRoaXMuX3N0cmVhbUlkLCBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZCAvIDEwMDApO1xuXG4gICAgdGhpcy5fbGFzdFJlbG9hZFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuX3BsYXllci5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fU0RLVkVSU0lPTl9fOiBzdHJpbmc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnNpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2RlZmF1bHRWZXJzaW9uID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gIHN0YXRpYyBnZXQgc2RrVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gX19TREtWRVJTSU9OX187XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWZXJzaW9uO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeVNlcnZpY2UgZnJvbSAnLi9UZWxlbWV0cnlTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4vVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi4vbG9nZ2VyL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUFwcGVuZGVyIGltcGxlbWVudHMgSUFwcGVuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5U2VydmljZTogVGVsZW1ldHJ5U2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWw7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3k7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQ7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQ7XG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZSA9IG5ldyBUZWxlbWV0cnlTZXJ2aWNlKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgbG9nKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChsb2dMZXZlbCA8IHRoaXMuX3RocmVzaG9sZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UucHVzaChsb2dMZXZlbCwgbWVzc2FnZSwgY2F0ZWdvcnksIGRhdGUpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiB7XG4gIHByaXZhdGUgX3VybCA9ICdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeS9sb2dzJztcbiAgcHJpdmF0ZSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdGhyZXNob2xkID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlVcmwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgPSB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgKyAnL2xvZ3MnO1xuXG4gICAgdGhpcy5fdXJsID0gdGVsZW1ldHJ5VXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuXG5jb25zdCByZXF1ZXN0U2l6ZUxpbWl0ID0gODE5MjtcblxuaW50ZXJmYWNlIElMb2dJdGVtIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgbGV2ZWw6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIF9sb2dzOiBBcnJheTxJTG9nSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgdGltZXN0YW1wOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgbG9nUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXAudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSxcbiAgICAgIGxldmVsOiBMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdLFxuICAgICAgY2F0ZWdvcnksXG4gICAgICBtZXNzYWdlLFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHZlcnNpb246IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb24sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW5cbiAgICB9O1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICB0aGlzLl9sb2dzLnB1c2gobG9nUmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9ncy51bnNoaWZ0KGxvZ1JlY29yZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3MobG9nTWVzc2FnZXM6IEFycmF5PElMb2dJdGVtPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbG9nTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZmV0Y2godGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbG9ncy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMDtcbiAgICBsZXQgc2l6ZU9mTG9nc1RvU2VuZCA9IDA7XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZ2V0TG9nU2l6ZSA9IChsb2c6IElMb2dJdGVtKTogbnVtYmVyID0+IE9iamVjdC52YWx1ZXMobG9nKVxuICAgICAgLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyAoaXRlbSA/IGl0ZW0ubGVuZ3RoIDogMCksIDApO1xuXG4gICAgd2hpbGUgKHRoaXMuX2xvZ3MubGVuZ3RoID4gbnVtYmVyT2ZMb2dzVG9TZW5kICYmIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIHNpemVPZkxvZ3NUb1NlbmQgPCByZXF1ZXN0U2l6ZUxpbWl0KSB7XG4gICAgICBzaXplT2ZMb2dzVG9TZW5kICs9IGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCsrO1xuICAgIH1cblxuICAgIGlmICghbnVtYmVyT2ZMb2dzVG9TZW5kKSB7XG4gICAgICB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZSA9IHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlLnN1YnN0cmluZygwLFxuICAgICAgICBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyAocmVxdWVzdFNpemVMaW1pdCAtIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSkpO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2dNZXNzYWdlcyA9IHRoaXMuX2xvZ3Muc2xpY2UoMCwgbnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHRoaXMuX2xvZ3MgPSB0aGlzLl9sb2dzLnNsaWNlKG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTG9ncyhsb2dNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9ucyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2R1cmF0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZHVyYXRpb24gPSAwKSB7XG4gICAgdGhpcy5fZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgfVxuXG4gIHRvSXNvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2R1cmF0aW9uID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1AwUyc7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOZWdhdGl2ZSA9IHRoaXMuX2R1cmF0aW9uIDwgMDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGlzTmVnYXRpdmUgPyBNYXRoLmFicyh0aGlzLl9kdXJhdGlvbikgOiB0aGlzLl9kdXJhdGlvbjtcbiAgICBsZXQgb2Zmc2V0ID0gTWF0aC5mbG9vcihkdXJhdGlvbik7XG4gICAgY29uc3QgbWlsbGlzZWNvbmRzID0gb2Zmc2V0ICUgMTAwMDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gMTAwMCk7XG5cbiAgICBjb25zdCBzZWNvbmRzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IG1pbnV0ZXMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgaG91cnMgPSBvZmZzZXQgJSAyNDtcbiAgICBjb25zdCBwYXJ0cyA9IFsnUFQnXTtcblxuICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCctJyk7XG4gICAgfVxuXG4gICAgaWYgKGhvdXJzKSB7XG4gICAgICBwYXJ0cy5wdXNoKGhvdXJzICsgJ0gnKTtcbiAgICB9XG5cbiAgICBpZiAobWludXRlcykge1xuICAgICAgcGFydHMucHVzaChtaW51dGVzICsgJ00nKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vjb25kcyB8fCBtaWxsaXNlY29uZHMpIHtcbiAgICAgIHBhcnRzLnB1c2goU3RyaW5nKHNlY29uZHMpKTtcblxuICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICBwYXJ0cy5wdXNoKCcuJyArIHRoaXMucGFkU3RhcnQobWlsbGlzZWNvbmRzLnRvU3RyaW5nKCksIDMsICcwJykpO1xuICAgICAgfVxuXG4gICAgICBwYXJ0cy5wdXNoKCdTJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJycpO1xuICB9XG5cbiAgcGFkU3RhcnQoaXRlbTogc3RyaW5nLCB0YXJnZXRMZW5ndGg6IG51bWJlciwgcGFkU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCA+PiAwO1xuICAgIHBhZFN0cmluZyA9IFN0cmluZygodHlwZW9mIHBhZFN0cmluZyAhPT0gJ3VuZGVmaW5lZCcgPyBwYWRTdHJpbmcgOiAnICcpKTtcblxuICAgIGlmIChpdGVtLmxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gaXRlbS5sZW5ndGg7XG5cbiAgICBpZiAodGFyZ2V0TGVuZ3RoID4gcGFkU3RyaW5nLmxlbmd0aCkge1xuICAgICAgcGFkU3RyaW5nICs9IHBhZFN0cmluZy5yZXBlYXQodGFyZ2V0TGVuZ3RoIC8gcGFkU3RyaW5nLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZFN0cmluZy5zbGljZSgwLCB0YXJnZXRMZW5ndGgpICsgaXRlbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaW1lbnNpb24gaW1wbGVtZW50cyBJQ29tcGFyYWJsZTxEaW1lbnNpb24+IHtcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXI7XG5cbiAgc3RhdGljIGdldCBlbXB0eSgpOiBEaW1lbnNpb24ge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9uKDAsIDApO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IERpbWVuc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLndpZHRoID09PSBvdGhlci53aWR0aCAmJiB0aGlzLmhlaWdodCA9PT0gb3RoZXIuaGVpZ2h0O1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aH14JHt0aGlzLmhlaWdodH1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1N0cmVhbVNldHVwTGlzdGVuZXJ9IGZyb20gJy4uL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTmV0d29ya01vbml0b3IgZnJvbSAnLi4vZG9tL05ldHdvcmtNb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSU5ldHdvcmtTdGF0aXN0aWNzIHtcbiAgcnR0PzogbnVtYmVyO1xuICBlZmZlY3RpdmVUeXBlPzogc3RyaW5nO1xuICBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvblRlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1Nlc3Npb25UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IFNESy5hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29ya01vbml0b3I6IE5ldHdvcmtNb25pdG9yID0gbmV3IE5ldHdvcmtNb25pdG9yKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfbGFzdE5ldHdvcmtTdGF0aXN0aWNzOiBJTmV0d29ya1N0YXRpc3RpY3MgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvcik7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcblxuICAgIGlmICghdGhpcy5fbmV0d29ya01vbml0b3IuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuaXNGb3JlZ3JvdW5kLnN1YnNjcmliZShpc0ZvcmVncm91bmQgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5ydHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1JUVFVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5lZmZlY3RpdmVUeXBlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICB9XG5cbiAgbGlzdGVuT25TdHJlYW1TZXR1cCgpOiBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbVNldHVwTGlzdGVuZXIodGhpcy5fcGFnZUxvYWRUaW1lKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdENoYW5nZSA9IHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogaXNGb3JlZ3JvdW5kID8gTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kIDogTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZUxhc3RDaGFuZ2V9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdBcHBsaWNhdGlvbiBoYXMgZ29uZSBpbnRvIHRoZSBbJXNdIGFmdGVyIFslc10gbXMnLFxuICAgICAgaXNGb3JlZ3JvdW5kID8gJ2ZvcmVncm91bmQnIDogJ2JhY2tncm91bmQnLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VMYXN0Q2hhbmdlKS50b0lzb1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtSVFRVcGRhdGUobmV3UlRUOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZFJ0dCA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQ7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0ID0gbmV3UlRUO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IG5ld1JUVH0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRSdHQgPyB7dWludDY0OiBvbGRSdHR9IDogdW5kZWZpbmVkLFxuICAgICAgcmVzb3VyY2U6ICduYXZpZ2F0b3InXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgUlRUIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdSVFQsXG4gICAgICBvbGRSdHRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZShuZXdOZXR3b3JrVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGROZXR3b3JrVHlwZSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlO1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGUgPSBuZXdOZXR3b3JrVHlwZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuTmV0d29ya1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3TmV0d29ya1R5cGV9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkTmV0d29ya1R5cGUgPyB7c3RyaW5nOiBvbGROZXR3b3JrVHlwZX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBlZmZlY3RpdmUgdHlwZSBoYXMgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld05ldHdvcmtUeXBlLFxuICAgICAgb2xkTmV0d29ya1R5cGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUobmV3Q2FwYWNpdHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkQ2FwYWNpdHkgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkgPSBuZXdDYXBhY2l0eTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge2Zsb2F0OiBuZXdDYXBhY2l0eX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRDYXBhY2l0eSA/IHtmbG9hdDogb2xkQ2FwYWNpdHl9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZG93bmxpbmsgdGhyb3VnaHB1dCBjYXBhY2l0eSBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3Q2FwYWNpdHksXG4gICAgICBvbGRDYXBhY2l0eVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlkZW9UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfbGlzdGVuVG9GaXJzdFRpbWU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvclN0YWxsOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JDb250aW51YXRpb246IChldmVudCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1N0YWxsZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbGFzdFByb2dyZXNzOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvUmVzb2x1dGlvbjogc3RyaW5nO1xuICBwcml2YXRlIF9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcjogRGlzcG9zYWJsZTtcbiAgcHJpdmF0ZSBfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyOiBEaXNwb3NhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUlkOiBzdHJpbmcsIHBhZ2VMb2FkVGltZTogbnVtYmVyLCBjaGFubmVsU3RhcnRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBjaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUgPSAoKTogdm9pZCA9PiB0aGlzLmNhbGxUaW1lVG9GaXJzdEZyYW1lKCk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbkZvclN0YWxsID0gKCk6IHZvaWQgPT4gdGhpcy5vblN0YWxsKCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24gPSAoZXZlbnQpOiB2b2lkID0+IHRoaXMub25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG5cbiAgICB0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcik7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGR1cmF0aW9uU2luY2VQYWdlTG9hZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGxUaW1lVG9GaXJzdEZyYW1lKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG4gICAgdGhpcy5wdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl90aW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gRmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl90aW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX2NoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBDaGFubmVsIGNyZWF0aW9uIHRvIGZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uU3RhbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZpZGVvU3RhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuU3RhbGxlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyBzdGFsbGVkJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pOiB2b2lkIHtcbiAgICBpZiAoIXZpZGVvLmJ1ZmZlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdmlkZW8uYnVmZmVyZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ3BsYXlpbmcnXG4gICAgfHwgYnVmZmVyTGVuZ3RoID4gMCA/IChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnXG4gICAgICB8fCBldmVudC50eXBlID09PSAndGltZXVwZGF0ZScpXG4gICAgICAmJiB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSkgPT09IHRoaXMuX2xhc3RQcm9ncmVzcyA6IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX3ZpZGVvU3RhbGxlZCB8fCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlU3RvcCA9IERhdGUubm93KCkgLSB0aGlzLl92aWRlb1N0YWxsZWQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkJ1ZmZlcmluZyxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlU3RvcH0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHJlY292ZXJlZCBmcm9tIHN0YWxsIGFmdGVyIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlU3RvcCkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhuZXdSZXNvbHV0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdSZXNvbHV0aW9ufSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA/IHtzdHJpbmc6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbn0gOiB1bmRlZmluZWQsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA9IG5ld1Jlc29sdXRpb247XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbnZhciBydW50aW1lID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgZXhwb3J0cy5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yLCBQcm9taXNlSW1wbCkge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAvLyBJZiBhIHJlamVjdGVkIFByb21pc2Ugd2FzIHlpZWxkZWQsIHRocm93IHRoZSByZWplY3Rpb24gYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgaGFuZGxlZCB0aGVyZS5cbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlSW1wbChmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBleHBvcnRzLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBleHBvcnRzLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QsIFByb21pc2VJbXBsKSB7XG4gICAgaWYgKFByb21pc2VJbXBsID09PSB2b2lkIDApIFByb21pc2VJbXBsID0gUHJvbWlzZTtcblxuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSxcbiAgICAgIFByb21pc2VJbXBsXG4gICAgKTtcblxuICAgIHJldHVybiBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAvLyBOb3RlOiBbXCJyZXR1cm5cIl0gbXVzdCBiZSB1c2VkIGZvciBFUzMgcGFyc2luZyBjb21wYXRpYmlsaXR5LlxuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBleHBvcnRzLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGVcbiAgLy8gb3Igbm90LCByZXR1cm4gdGhlIHJ1bnRpbWUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGRlY2xhcmUgdGhlIHZhcmlhYmxlXG4gIC8vIHJlZ2VuZXJhdG9yUnVudGltZSBpbiB0aGUgb3V0ZXIgc2NvcGUsIHdoaWNoIGFsbG93cyB0aGlzIG1vZHVsZSB0byBiZVxuICAvLyBpbmplY3RlZCBlYXNpbHkgYnkgYGJpbi9yZWdlbmVyYXRvciAtLWluY2x1ZGUtcnVudGltZSBzY3JpcHQuanNgLlxuICByZXR1cm4gZXhwb3J0cztcblxufShcbiAgLy8gSWYgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlLCB1c2UgbW9kdWxlLmV4cG9ydHNcbiAgLy8gYXMgdGhlIHJlZ2VuZXJhdG9yUnVudGltZSBuYW1lc3BhY2UuIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcgZW1wdHlcbiAgLy8gb2JqZWN0LiBFaXRoZXIgd2F5LCB0aGUgcmVzdWx0aW5nIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZVxuICAvLyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIHZhcmlhYmxlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLlxuICB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiID8gbW9kdWxlLmV4cG9ydHMgOiB7fVxuKSk7XG5cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICAvLyBUaGlzIG1vZHVsZSBzaG91bGQgbm90IGJlIHJ1bm5pbmcgaW4gc3RyaWN0IG1vZGUsIHNvIHRoZSBhYm92ZVxuICAvLyBhc3NpZ25tZW50IHNob3VsZCBhbHdheXMgd29yayB1bmxlc3Mgc29tZXRoaW5nIGlzIG1pc2NvbmZpZ3VyZWQuIEp1c3RcbiAgLy8gaW4gY2FzZSBydW50aW1lLmpzIGFjY2lkZW50YWxseSBydW5zIGluIHN0cmljdCBtb2RlLCB3ZSBjYW4gZXNjYXBlXG4gIC8vIHN0cmljdCBtb2RlIHVzaW5nIGEgZ2xvYmFsIEZ1bmN0aW9uIGNhbGwuIFRoaXMgY291bGQgY29uY2VpdmFibHkgZmFpbFxuICAvLyBpZiBhIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGZvcmJpZHMgdXNpbmcgRnVuY3Rpb24sIGJ1dCBpbiB0aGF0IGNhc2VcbiAgLy8gdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlIGFjY2lkZW50YWwgc3RyaWN0IG1vZGUgcHJvYmxlbS4gSWZcbiAgLy8geW91J3ZlIG1pc2NvbmZpZ3VyZWQgeW91ciBidW5kbGVyIHRvIGZvcmNlIHN0cmljdCBtb2RlIGFuZCBhcHBsaWVkIGFcbiAgLy8gQ1NQIHRvIGZvcmJpZCBGdW5jdGlvbiwgYW5kIHlvdSdyZSBub3Qgd2lsbGluZyB0byBmaXggZWl0aGVyIG9mIHRob3NlXG4gIC8vIHByb2JsZW1zLCBwbGVhc2UgZGV0YWlsIHlvdXIgdW5pcXVlIHByZWRpY2FtZW50IGluIGEgR2l0SHViIGlzc3VlLlxuICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0aWYoX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSkge1xuXHRcdHJldHVybiBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiBtb2R1bGVbJ2RlZmF1bHQnXSA6XG5cdFx0KCkgPT4gbW9kdWxlO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5yZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL3Nkay9mdWxsL2luZGV4LnRzXCIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
11408
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vUHJpdmFjeU1vZGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZUxpc3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvU3RyaW5ncy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9hc3NlcnRVbnJlYWNoYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0FwcGVuZGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0NvbnNvbGVBcHBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckRlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nVGhyZXNob2xkLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZUhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1NkcFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1JlYWRPbmx5U3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvU3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvU0RLLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvVGVsZW1ldHJ5VXJsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbFN0YXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVNb2RlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlU3RhdGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9FbmRQb2ludC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2VkZ2VBdXRoL0VkZ2VBdXRoLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Z1bGwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvQ2h1bmtlZFN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9IbHNQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTGl2ZVN0cmVhbWluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9OZXR3b3JrU3RhdGVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1JlYWxUaW1lU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1NoYWthUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvV2ViUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9EdXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vRGltZW5zaW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9TZXNzaW9uVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9WaWRlb1RlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbImRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0IiwiQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJEaXNwb3NhYmxlTGlzdCIsIkRhdGUiLCJub3ciLCJfaXNGb3JlZ3JvdW5kIiwiU3ViamVjdCIsIl9yZWFkT25seUlzRm9yZWdyb3VuZCIsIlJlYWRPbmx5U3ViamVjdCIsImRldGVjdFRhYkZvY3VzQ2hhbmdlIiwiX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZSIsIl9kaXNwb3NhYmxlcyIsImRpc3Bvc2UiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Q2hhbmdlIiwiZG9jdW1lbnQiLCJtc0hpZGRlbiIsIndlYmtpdEhpZGRlbiIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJpc0ZvcmVncm91bmQiLCJzZXRGb2N1c1N0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFkZCIsIkRpc3Bvc2FibGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuRm9yRG9jdW1lbnRGb2N1cyIsImNhbGwiLCJfZG9jdW1lbnRGb2N1c0ludGVydmFsIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJoYXNGb2N1cyIsImNsZWFySW50ZXJ2YWwiLCJ2YWx1ZSIsIkJyb3dzZXJEZXRlY3RvciIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIm1hdGNoIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSIsIl9icm93c2VyTmFtZUFuZFZlcnNpb24iLCJicm93c2VyTmFtZUxpc3QiLCJzcGxpdCIsImJyb3dzZXJWZXJzaW9uTGlzdCIsImZ1bGxWZXJzaW9uIiwiTnVtYmVyIiwibXNpZSIsImluZGV4T2YiLCJwYXJzZUludCIsInN1YnN0cmluZyIsInRyaWRlbnQiLCJ2ZXJzaW9uIiwiX2Jyb3dzZXJOYW1lIiwiX2Jyb3dzZXJNYWpvclZlcnNpb24iLCJfaXNDaHJvbWU2OSIsIl9pc0Nocm9tZTcwIiwiX2lzQ2hyb21lNzEiLCJfaXNDaHJvbWU3MiIsIl9pc0Nocm9tZTc0IiwiX2lzQ2hyb21lNzUiLCJfaXNDaHJvbWU3NiIsIl9pc0Nocm9tZTc3IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24iLCJwYXJzZUJyb3dzZXJOYW1lIiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiaW5jbHVkZXMiLCJDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwibmFtZSIsInJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlIiwiZGVmYXVsdFN0cmluZ1ZhbHVlIiwidmFsdWVGcm9tVXJpIiwiZGVmYXVsdEJvb2xlYW5WYWx1ZSIsIm1ldGFWYWx1ZSIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRBdHRyaWJ1dGUiLCJ2YWx1ZVVSSVBhcmFtZXRlck5hbWUiLCJVUkxTZWFyY2hQYXJhbXMiLCJsb2NhdGlvbiIsInNlYXJjaCIsImdldCIsInVuZGVmaW5lZCIsIlRlbGVtZXRyeUxldmVsTWFwcGluZyIsIlRlbGVtZXRyeURlZmF1bHQiLCJMb2dnaW5nTGV2ZWxNYXBwaW5nIiwiTG9nZ2VyRGVmYXVsdHMiLCJOZXR3b3JrTW9uaXRvciIsImlzU3VwcG9ydGVkIiwic2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzIiwidXBkYXRlU3RhdGlzdGljcyIsImRvd25saW5rIiwiZG93bmxpbmtNYXgiLCJlZmZlY3RpdmVUeXBlIiwidHlwZSIsInJ0dCIsImxpc3RlbmVyIiwiX3J0dCIsImdldFJvdW5kVHJpcFRpbWUiLCJfZWZmZWN0aXZlVHlwZSIsImdldEVmZmVjdGl2ZVR5cGUiLCJfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsIl9pc1N1cHBvcnRlZCIsIlByaXZhY3lNb2RlIiwiX2lzUHJpdmF0ZSIsIl9fUFJJVkFDWV9NT0RFX18iLCJlIiwiYXBwbHlJc1ByaXZhdGUiLCJTdHJlYW1TZXR1cExpc3RlbmVyIiwicGFnZUxvYWRUaW1lIiwiTG9nZ2VyRmFjdG9yeSIsIlNESyIsIl9zdGFydFRpbWUiLCJfcGFnZUxvYWRUaW1lIiwic3RyZWFtSWQiLCJyZWNvcmRTdHJlYW1NZXRyaWMiLCJNZXRyaWNzVHlwZSIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsIk1ldHJpY1R5cGUiLCJnZXROYW1lIiwibWV0cmljc1NlcnZpY2UiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwiRHVyYXRpb25zIiwidG9Jc29TdHJpbmciLCJkaXNwb3NhYmxlIiwiX2Rpc3Bvc2VkIiwiX2Rpc3Bvc2FibGUiLCJfbGlzdCIsImZvckVhY2giLCJsZW5ndGgiLCJTdHJpbmdzIiwicmFuZG9tMTNDaGFyYWN0ZXJzIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwibG9vcHMiLCJjZWlsIiwiQXJyYXkiLCJmaWxsIiwicmVkdWNlIiwic3RyaW5nIiwiZnVuYyIsIkVycm9yIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiYXBwZW5kZXIiLCJfYXBwZW5kZXJzIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwibG9nTGV2ZWwiLCJtZXNzYWdlIiwiY2F0ZWdvcnkiLCJkYXRlIiwiX3RocmVzaG9sZCIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwibG9nIiwiZXJyb3IiLCJ0aHJlc2hvbGQiLCJMb2dnZXIiLCJUcmFjZSIsImFyZ3MiLCJEZWJ1ZyIsIkluZm8iLCJXYXJuIiwiRmF0YWwiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIkpTT04iLCJrZXkiLCJPYmplY3QiLCJhcmd1bWVudCIsImRhdGEiLCJ0b1N0cmluZ1N0ciIsIl9jYXRlZ29yeSIsImFwcGVuZGVycyIsImxvZ2dlciIsIl9sb2dnZXJzIiwiYXBwbHlMb2dnaW5nTGV2ZWwiLCJhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsIiwiYXBwbHlDb25zb2xlTG9nZ2VyIiwiYmluZCIsImFwcGx5VGVsZW1ldHJ5TG9nZ2VyIiwicGFyYW1ldGVyVmFsdWUiLCJfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsImdldFN0cmluZ1ZhbHVlIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIl90ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiVGVsZW1ldHJ5QXBwZW5kZXIiLCJMb2dnaW5nVGhyZXNob2xkIiwiVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJsb2dnaW5nTGV2ZWwiLCJsb2dnaW5nTGV2ZWxUeXBlIiwibWV0cmljcyIsIl9tZXRyaWNzIiwiVGVsZW1ldHJ5TGV2ZWwiLCJNZXRyaWNzQ29uZmlndXJhdGlvbiIsIl91cmwiLCJ1cmwiLCJtZXRyaWNzVXJsIiwiVVJMIiwicGF0aG5hbWUiLCJfZW52aXJvbm1lbnQiLCJlbnZpcm9ubWVudCIsIl90ZW5hbmN5IiwidGVuYW5jeSIsIl9zZXNzaW9uSWQiLCJzZXNzaW9uSWQiLCJNZXRyaWNzRmFjdG9yeSIsIm1ldHJpY3NTZXJ2aWNlcyIsIl9tZXRyaWNzU2VydmljZXMiLCJtZXRyaWNzQ29uZmlndXJhdGlvbiIsIlRlbGVtZXRyeVVybCIsIkVudmlyb25tZW50IiwiTWV0cmljc1NlcnZpY2UiLCJ0ZWxlbWV0cnlMZXZlbCIsInZhbHVlcyIsInJlcXVlc3RTaXplTGltaXQiLCJob3N0bmFtZSIsIl9tZXRyaWNzQ29uZmlndXJhdGlvbiIsIm1ldHJpYyIsInByZXZpb3VzVmFsdWUiLCJyZXNvdXJjZSIsImtpbmQiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwiX2RvbWFpbiIsIlZlcnNpb25NYW5hZ2VyIiwiaWdub3JlZCIsInNlbmRNZXRyaWNzSWZBYmxlIiwibWV0cmljc01lc3NhZ2VzIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImFwcGVuZCIsInJlY29yZHMiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJfaXNTZW5kaW5nIiwic2xpY2UiLCJzZW5kTWV0cmljcyIsInRoZW4iLCJyZXNwb25zZSIsImNhdGNoIiwidGVsZW1ldHJ5TGV2ZWxUeXBlIiwiUHJvbWlzZSIsImNhbGxiYWNrIiwiVHlwZUVycm9yIiwiX3N0YXRlIiwiX2hhbmRsZWQiLCJfdmFsdWUiLCJfZGVmZXJyZWRzIiwiZG9SZXNvbHZlIiwiZG9uZSIsInByb21pc2VSZXNvbHZlIiwicmVhc29uIiwicHJvbWlzZVJlamVjdCIsIm5ld1ZhbHVlIiwicHJvbWlzZSIsImZpbmFsZSIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2ltbWVkaWF0ZSIsIl91bmhhbmRsZWRSZWplY3Rpb24iLCJpIiwibGVuIiwiaGFuZGxlIiwiZGVmZXJyZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyZXN1bHQiLCJhcnIiLCJyZXNvbHZlIiwicmVqZWN0IiwiaXNBcnJheSIsInByb3RvdHlwZSIsInJlbWFpbmluZyIsIm1hbmFnZVJlc3BvbnNlIiwiY29uc3RydWN0b3IiLCJfIiwic2V0VGltZW91dCIsIndhcm4iLCJQcm9taXNlSGFuZGxlciIsIlBlZXJDb25uZWN0aW9uU2VydmljZSIsIkZlYXR1cmVFbmFibGVtZW50IiwicHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhY2hlZCIsImNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJwZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjcmVhdGVQZWVyQ29ubmVjdGlvbiIsInBlZXJDb25uZWN0aW9uIiwic3VwcG9ydHNBZGRUcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJhZGRUcmFuc2NlaXZlciIsImRpcmVjdGlvbiIsInZpZGVvVHJhbnNjZWl2ZXIiLCJjcmVhdGVPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwibG9jYWxPZmZlciIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJ1cGRhdGVTdGF0aXN0aWNUaW1lT3V0IiwiUnRjQ29ubmVjdGlvbk1vbml0b3IiLCJtZWRpYVN0cmVhbSIsImVzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfcGVlckNvbm5lY3Rpb24iLCJfZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl90cmFja3NUb01vbml0b3IiLCJnZXRUcmFja3MiLCJtYXAiLCJ0cmFjayIsInBhcnNlZFNEUCIsIlNkcFBhcnNlciIsImN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiIsInNkcCIsIl9lc3RpbWF0ZWRBdWRpb0NvZGVjIiwiYXVkaW9Db2RlYyIsIl9lc3RpbWF0ZWRWaWRlb0NvZGVjIiwidmlkZW9Db2RlYyIsInVwZGF0ZVN0YXRpc3RpYyIsIl9pc01vbml0b3JSdW5uaW5nIiwiX3VwZGF0ZVRpbWVPdXQiLCJjbGVhclRpbWVvdXQiLCJ1cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJnZXRLaW5kRm9yU2FmYXJpMTEiLCJpZCIsImdldFN0YXRzIiwic3RhdHMiLCJydGNTdGF0cyIsInJvdW5kVHJpcFRpbWUiLCJsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAiLCJyZXBvcnQiLCJjdXJyZW50Um91bmRUcmlwVGltZSIsIm1lZGlhVHlwZSIsImNvZGVjIiwiY29kZWNJZCIsIm1pbWVUeXBlIiwic3NyYyIsImJ5dGVzUmVjZWl2ZWQiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwiX3J0Y1N0YXRpc3RpYyIsInZpZGVvIiwiZnJhbWVzRGVjb2RlZCIsImdldFN0YXRzTGVnYWN5IiwibmFtZXMiLCJzdGF0IiwiX3NkcCIsIl9hdWRpb0NvZGVjIiwiYXBwbHlDb2RlYyIsIl92aWRlb0NvZGVjIiwic3BsaXRTZHAiLCJ1c2VkQ29kZWNMaW5lIiwiZmluZCIsInVzZWRDb2RlYyIsImNvZGVjTmFtZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbiIsImNvbmZpZ3VyYXRpb24iLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiIsIlJUQ1BlZXJDb25uZWN0aW9uIiwib3B0aW9ucyIsImNyZWF0ZUFuc3dlciIsImRlc2NyaXB0aW9uIiwic2V0TG9jYWxEZXNjcmlwdGlvbiIsIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiIsImhhc0NyeXB0byIsInNldFJlbW90ZURlc2NyaXB0aW9uIiwic2VsZWN0b3IiLCJnZXRDb25maWd1cmF0aW9uIiwic2V0Q29uZmlndXJhdGlvbiIsImNsb3NlIiwiY3VycmVudExvY2FsRGVzY3JpcHRpb24iLCJpY2VDb25uZWN0aW9uU3RhdGUiLCJoYW5kbGVyIiwib250cmFjayIsIm9uaWNlY2FuZGlkYXRlIiwib25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5Iiwic3ViamVjdCIsIl9zdWJqZWN0Iiwic3Vic2NyaWJlIiwiRGlzcG9zYWJsZUxpc3RlbmVyIiwibGlzdGVuZXJzIiwiaWR4IiwiX2xpc3RlbmVycyIsImNoYW5nZWQiLCJjb21wYXJhYmxlIiwiZXF1YWxzIiwiYmFzZVVSTCIsIm9yaWdpbiIsInRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjbGllbnRTZXNzaW9uSWQiLCJpZ25vcmVkRW52aXJvbm1lbnQiLCJpZ25vcmVkRGlzY292ZXJ5VXJpIiwidGVsZW1ldHJ5VXJsIiwidGVsZW1ldHJ5QXBwZW5kZXIiLCJyZW1vdmUiLCJpZ25vcmVkVGVuYW5jeSIsIl9tZXRyaWNzU2VydmljZSIsIkRpc2NvdmVyeVVyaSIsImlnbm9yZWRUZWxlbWV0cnlMZXZlbCIsIl90ZWxlbWV0cnlMZXZlbCIsIl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUiLCJnZXRCb29sZWFuVmFsdWUiLCJfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwiZGlzY292ZXJ5VXJpIiwiZ2V0VGVsZW1ldHJ5VXJsIiwiY2hhbm5lbFRva2VuIiwicGFyc2VkVG9rZW4iLCJFZGdlQXV0aCIsInVyaVZhbHVlIiwiYmFzZVVSSVZhbHVlIiwiX2luaXRpYWxpemVkIiwiX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImNvbnNvbGVMb2dnaW5nTGV2ZWwiLCJjb25zb2xlQXBwZW5kZXIiLCJhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIndlYlBsYXllckxvYWRlciIsIl93ZWJQbGF5ZXJMb2FkZXIiLCJzaGFrYVBsYXllckxvYWRlciIsIl9zaGFrYVBsYXllckxvYWRlciIsImhsc0pzTG9hZGVyIiwiX2hsc0pzTG9hZGVyIiwiX3NlbmRMb2NhbENhbmRpZGF0ZXMiLCJfY2xpZW50U2Vzc2lvbklkIiwiX2xvYWRlZFRpbWVzdGFtcCIsIl9yZWFkT25seUluaXRpYWxpemVkIiwiX3JlYWRPbmx5RGlzY292ZXJ5VXJpIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiX3RlbGVtZXRyeVVybCIsIl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwicmV0cmllc0Ftb3VudCIsImFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbiIsImFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiaW5pdCIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0Iiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwiam9pbiIsIkJpdHJhdGVTdGF0ZSIsIkJpdHJhdGVNb2RlIiwiZGVmYXVsdFRhcmdldExhZyIsImRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiIsImJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwiZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMiLCJtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIkNoYW5uZWwiLCJ2aWRlb0VsZW1lbnQiLCJ0b2tlbiIsInRhcmdldExhZyIsIl9jb250ZXh0IiwiQ2hhbm5lbENvbnRleHQiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVZpZGVvRWxlbWVudCIsIl9yZWFkT25seVRva2VuIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwicnRjU3RhdGlzdGljcyIsIl9yZWFkT25seU1lZGlhU3RyZWFtIiwic2Vzc2lvblRlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJjaGFubmVsRGlzcG9zYWJsZXMiLCJfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyIiwiaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQiLCJyZW5kZXJlckRpc3Bvc2FibGVzIiwidmlkZW9UZWxlbWV0cnkiLCJkYXRhc2V0IiwiVmlkZW9UZWxlbWV0cnkiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiQ2hhbm5lbFN0YXRlIiwicmVzdGFydEFmdGVyU3RvcCIsImNsZWFyRmFpbHVyZUNvdW50VGltZW91dCIsIm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyIsImVsYXBzZWRJbk1pbGxpc2Vjb25kcyIsImNoYW5uZWxJbml0aWFsaXphdGlvbiIsImdldFRpbWUiLCJsaW1pdEJpdHJhdGUiLCJzdGFydCIsIndpZHRoIiwidmlkZW9XaWR0aCIsImhlaWdodCIsInZpZGVvSGVpZ2h0IiwiRGltZW5zaW9uIiwiYml0cmF0ZUluQml0c1BlclNlY29uZCIsInN0YXR1cyIsImlzU3RhcnRpbmciLCJwcm9jZXNzU3RvcCIsInBhdXNlIiwic3JjT2JqZWN0IiwiY2xlYW5VcFJlc291cmNlcyIsInBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50IiwibXV0ZWQiLCJzdG9wIiwiaXNEaXNwb3NlZCIsInByb2Nlc3NTdGFydCIsImZpbmFsbHkiLCJsaXN0ZW5PblN0cmVhbVNldHVwIiwidXJpIiwiZ2V0VXJpIiwiaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrIiwiaGFuZGxlU3RyZWFtRmFpbHVyZSIsInN0cmVhbVBsYXllciIsIlN0cmVhbUZhY3RvcnkiLCJmYWlsIiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsImRpc3Bvc2FibGVzIiwibWluIiwicG93IiwibWF4IiwiZGVzdHJveVN0cmVhbSIsInBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJwbGF5UHJvbWlzZSIsInBsYXkiLCJoYXNBdWRpb1RyYWNrIiwiZmlsdGVyIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYiLCJDaGFubmVscyIsImRlZmF1bHREaXNjb3ZlcnlVcmkiLCJCaXRyYXRlTW9kZU1hcHBpbmciLCJiaXRyYXRlTW9kZSIsIkJpdHJhdGVTdGF0ZU1hcHBpbmciLCJiaXRyYXRlU3RhdGUiLCJkaXNjb3ZlcnlDYWNoZUludGVydmFsIiwiRGlzY292ZXJ5IiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsIl9jYWNoZSIsImRpc2NvdmVyeVNlcnZpY2UiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiY2FjaGVkVmFsdWUiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsInByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiZGVmYXVsdFRpbWVvdXQiLCJfdXJpIiwidGltZW91dCIsInJhY2UiLCJvayIsInRleHQiLCJhc1N0cmluZyIsImVuZFBvaW50cyIsIkVuZFBvaW50IiwiZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJuZXZlclJlc29sdmUiLCJwaW5nIiwidGltZSIsInNka1ZlcnNpb24iLCJfZGlzY292ZXJ5VXJpIiwiYXBpVmVyc2lvbiIsIl90aW1lb3V0IiwiYnVpbGRQaW5nVXJsIiwiZmluaXNoZWQiLCJfcm91bmRUcmlwVGltZSIsImxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uIiwiYXBwbGljYXRpb25JZCIsImJ1aWxkVXJsIiwiY2xpZW50VmVyc2lvbiIsImJvZHlXaXRoT2ZmZXIiLCJlZGdlQXV0aFRva2VuIiwic2Vzc2lvbkRlc2NyaXB0aW9uIiwiY29udmVydFJUQ1NkcFR5cGVUb1NkcFR5cGUiLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbiIsImJvZHlXaXRob3V0T2ZmZXIiLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uIiwiaHR0cFJlc3BvbnNlIiwibWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJzdWJzY3JpYmVSZXNwb25zZSIsImRlYnVnIiwic2hhcmVkU2VjcmV0IiwibWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIiwiY2FuZGlkYXRlcyIsImRpc2NvdmVyeUNvbXBsZXRlZCIsIm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiZGVzdHJveVN0cmVhbVJlc3BvbnNlIiwicGF0aCIsInBhdGhBc0FycmF5IiwiY29uY2F0IiwianNvbiIsInJ0Y0NvbmZpZ3VyYXRpb24iLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVNlcnZlcnMiLCJ1cmxzIiwidXNlcm5hbWUiLCJjcmVkZW50aWFsIiwiaWNlVHJhbnNwb3J0UG9saWN5IiwicGVlcklkZW50aXR5IiwicnRjcE11eFBvbGljeSIsImNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwicnRjU2Vzc2lvbkRlc2NyaXB0aW9uIiwiZWRnZUF1dGhUb2tlblByZWZpeCIsImlzVmFsaWRUb2tlbiIsImVuY29kZWRFZGdlQXV0aFRva2VuIiwiYXRvYiIsInN1YnN0ciIsInBhcnNlIiwiQ2h1bmtlZFN0cmVhbSIsImNoYW5uZWxDb250ZXh0IiwiX2NoYW5uZWxDb250ZXh0IiwiX2hhbmRsZVN0cmVhbUZhaWx1cmUiLCJhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQiLCJtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJhcHBseVN0YXR1cyIsIm9mZmVyU2RwIiwib3JpZ2luU3RhcnRUaW1lIiwiTGl2ZVN0cmVhbWluZyIsInBsYXllciIsIm1vbml0b3IiLCJfbW9uaXRvckRpc3Bvc2FibGVzIiwibmV3U3RyZWFtU3RhdGlzdGljcyIsIl9zdHJlYW1TdGF0aXN0aWNzIiwiY3VycmVudFRpbWUiLCJkYXRhQnVmZmVyZWQiLCJfbW9uaXRvckZhaWx1cmVDb3VudCIsInBhdXNlZCIsIkhsc1BsYXllciIsIm1hbmlmZXN0VVJJIiwiX3ZpZGVvRWxlbWVudCIsIl9raW5kIiwiX3N0cmVhbUlkIiwiX21hbmlmZXN0VVJJIiwiZW5jb2RlVVJJIiwicmVwbGFjZSIsIl9vcHRpb25zIiwiX3BsYXllciIsImVuYWJsZVdvcmtlciIsIm1heEJ1ZmZlckxlbmd0aCIsImxpdmVCYWNrQnVmZmVyTGVuZ3RoIiwibGl2ZVN5bmNEdXJhdGlvbiIsImxpdmVEdXJhdGlvbkluZmluaXR5IiwibGl2ZU1heExhdGVuY3lEdXJhdGlvbiIsIkluZmluaXR5IiwiaGlnaEJ1ZmZlcldhdGNoZG9nUGVyaW9kIiwibG9hZFNvdXJjZSIsImF0dGFjaE1lZGlhIiwiY2FuUGxheVR5cGUiLCJzcmMiLCJuZXR3b3JrU3RhdGUiLCJOZXR3b3JrU3RhdGVzIiwiTmV0d29ya05vU291cmNlIiwic3RhdGlzdGljcyIsIm1lZGlhIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJidWZmZXJlZCIsImVuZCIsInN0cmVhbUNvbnRyb2xsZXIiLCJ0cnVlQ3VycmVudFRpbWUiLCJkZXN0cm95IiwiX2hsc1BsYXllciIsIl9zaGFrYSIsIl9waGVuaXhXZWJQbGF5ZXIiLCJsb2FkZWQiLCJfcGVuZGluZyIsIlBsYXllciIsImRhc2hNYW5pZmVzdFVybE1hdGNoIiwiaGxzTWFuaWZlc3RVcmxNYXRjaCIsIm1hbmlmZXN0VXJsIiwicGxheWxpc3RVcmwiLCJwcmVmZXJOYXRpdmUiLCJzaG91bGRVc2VOYXRpdmVIbHMiLCJXZWJQbGF5ZXIiLCJTaGFrYVBsYXllciIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwiZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCIsIlJlYWxUaW1lU3RyZWFtIiwiYWxsIiwic3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIiwic3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIiwiYXBwbHlSdGNDb25maWd1cmF0aW9uIiwic3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQiLCJjYW5jZWxEaXNjb3ZlcnkiLCJjYW5kaWRhdGUiLCJhZGRJY2VDYW5kaWRhdGVzIiwicmV0cnlDYWxsYmFjayIsIm9uTGluZSIsInJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwibWVkaWFTdHJlYW1Qcm9taXNlIiwic3RyZWFtcyIsInRyYWNrTGlzdGVuZXIiLCJhbnN3ZXIiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsInN1Y2Nlc3MiLCJydGNDb25uZWN0aW9uTW9uaXRvciIsInJ0Y1N0YXRpc3RpYyIsInJ0Y1ZpZGVvU3RhdGlzdGljIiwicnRjQXVkaW9TdGF0aXN0aWMiLCJhdWRpbyIsImF1ZGlvVHJhY2tGYWlsZWQiLCJ2aWRlb1RyYWNrRmFpbGVkIiwib3B0aW9uYWxQZWVyQ29ubmVjdGlvbiIsInRydW5jYXRlSWNlU2VydmVycyIsIm5ld1J0Y0NvbmZpZ3VyYXRpb24iLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJwbGF5ZXJPcHRpb25zIiwiYWJyIiwiZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlIiwibWFuaWZlc3QiLCJyZXRyeVBhcmFtZXRlcnMiLCJzdHJlYW1pbmciLCJyZWJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJpbmdHb2FsIiwiYnVmZmVyQmVoaW5kIiwibWF4QXR0ZW1wdHMiLCJiYWNrb2ZmRmFjdG9yIiwibG9hZFBsYXllciIsImVzdGltYXRlZEJhbmR3aWR0aCIsInBsYXlUaW1lIiwidW5sb2FkIiwicGxheWVyQ29uZmlnIiwiY29uZmlndXJlIiwibG9hZCIsImNvZGUiLCJpc1J0bXAiLCJjYXBhYmlsaXRpZXMiLCJpc1N0cmVhbWluZyIsImJhbmR3aWR0aFRvU3RhcnRBdCIsIm1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIiwiZXJyb3JPYmplY3QiLCJjYW5SZWxvYWQiLCJzZXZlcml0eSIsInJlbG9hZElmQWJsZSIsImlzTmF0aXZlIiwiZGVsaXZlcnlUeXBlIiwiaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQiLCJfbGFzdFJlbG9hZFRpbWUiLCJyZWxvYWQiLCJfX1NES1ZFUlNJT05fXyIsIl9kZWZhdWx0VmVyc2lvbiIsIl90ZWxlbWV0cnlTZXJ2aWNlIiwiVGVsZW1ldHJ5U2VydmljZSIsImxvZ1JlY29yZCIsIl9sb2dzIiwic2VuZExvZ3NJZkFibGUiLCJsb2dNZXNzYWdlcyIsIm51bWJlck9mTG9nc1RvU2VuZCIsInNpemVPZkxvZ3NUb1NlbmQiLCJnZXRMb2dTaXplIiwic3VtIiwic2VuZExvZ3MiLCJkdXJhdGlvbiIsIl9kdXJhdGlvbiIsImlzTmVnYXRpdmUiLCJhYnMiLCJvZmZzZXQiLCJmbG9vciIsIm1pbGxpc2Vjb25kcyIsInNlY29uZHMiLCJtaW51dGVzIiwiaG91cnMiLCJwYXJ0cyIsIlN0cmluZyIsInBhZFN0YXJ0IiwidGFyZ2V0TGVuZ3RoIiwicGFkU3RyaW5nIiwicmVwZWF0Iiwib3RoZXIiLCJfbmV0d29ya01vbml0b3IiLCJyZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlIiwicmVjb3JkTmV0d29ya1JUVFVwZGF0ZSIsInJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlIiwiZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJyZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUiLCJ0aW1lU2luY2VMYXN0Q2hhbmdlIiwiZ2V0VGltZVNpbmNlTGFzdENoYW5nZSIsIm5ld1JUVCIsIm9sZFJ0dCIsIl9sYXN0TmV0d29ya1N0YXRpc3RpY3MiLCJuZXdOZXR3b3JrVHlwZSIsIm9sZE5ldHdvcmtUeXBlIiwibmV3Q2FwYWNpdHkiLCJvbGRDYXBhY2l0eSIsImZsb2F0IiwiY2hhbm5lbFN0YXJ0VGltZSIsIl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUiLCJfbGlzdGVuVG9GaXJzdFRpbWUiLCJjYWxsVGltZVRvRmlyc3RGcmFtZSIsIl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciIsIl9saXN0ZW5Gb3JTdGFsbCIsIm9uU3RhbGwiLCJfbGlzdGVuRm9yQ29udGludWF0aW9uIiwiZXZlbnQiLCJvbkNvbnRpbnVhdGlvbiIsIl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIiLCJwdXNoVGltZVRvRmlyc3RGcmFtZSIsInB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3RpbWVUb0ZpcnN0RnJhbWUiLCJkdXJhdGlvblNpbmNlUGFnZUxvYWQiLCJfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl92aWRlb1N0YWxsZWQiLCJidWZmZXJMZW5ndGgiLCJoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCIsIl9sYXN0UHJvZ3Jlc3MiLCJ0aW1lU2luY2VTdG9wIiwibmV3UmVzb2x1dGlvbiIsIl92aWRlb1Jlc29sdXRpb24iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPOzs7Ozs7Ozs7QUNWQTtBQUNBOztBQUVBLHdDQUF3QyxTQUFTO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQzs7Ozs7Ozs7OztBQ1ZBO0FBQ0E7QUFDQTs7QUFFQSxpQzs7Ozs7Ozs7OztBQ0pBLHVCQUF1QixtQkFBTyxDQUFDLHFGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBOztBQUVBLG9DOzs7Ozs7Ozs7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3Qzs7Ozs7Ozs7Ozs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCxJQUFJLE9BQU87QUFDWDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxtQzs7Ozs7Ozs7OztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDOzs7Ozs7Ozs7O0FDTkE7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOEI7Ozs7Ozs7Ozs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNI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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QyxXQUFXO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBLDhDQUE4QyxPQUFPOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsS0FBMEIsb0JBQW9CLENBQUU7QUFDbEQ7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O1VDeHRCQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7Ozs7V0NyQkE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGdDQUFnQyxZQUFZO1dBQzVDO1dBQ0EsRTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHdDQUF3Qyx5Q0FBeUM7V0FDakY7V0FDQTtXQUNBLEU7Ozs7O1dDUEEsc0Y7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0Esc0RBQXNELGtCQUFrQjtXQUN4RTtXQUNBLCtDQUErQyxjQUFjO1dBQzdELEU7Ozs7VUNOQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJmdWxsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykge1xuICAgIGFycjJbaV0gPSBhcnJbaV07XG4gIH1cblxuICByZXR1cm4gYXJyMjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlMaWtlVG9BcnJheTsiLCJmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aEhvbGVzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheVwiKTtcblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlczsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQ7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG5cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3I7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHk7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mXCIpO1xuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5OyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47XG4gIHZhciBfYXJyID0gW107XG4gIHZhciBfbiA9IHRydWU7XG4gIHZhciBfZCA9IGZhbHNlO1xuICB2YXIgX2UgPSB1bmRlZmluZWQ7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfZCA9IHRydWU7XG4gICAgX2UgPSBlcnI7XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX2Fycjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5TGltaXQ7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0OyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpO1xuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuOyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mOyIsInZhciBhcnJheVdpdGhIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aEhvbGVzXCIpO1xuXG52YXIgaXRlcmFibGVUb0FycmF5TGltaXQgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdFwiKTtcblxudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlcIik7XG5cbnZhciBub25JdGVyYWJsZVJlc3QgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVJlc3RcIik7XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NsaWNlZFRvQXJyYXk7IiwidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXNcIik7XG5cbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlcIik7XG5cbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZFwiKTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5OyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXlcIik7XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuY29uc3QgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQgPSAzMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ZvcmVncm91bmQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnRGb2N1c0ludGVydmFsOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0KHRoaXMuX2lzRm9yZWdyb3VuZCk7XG4gICAgdGhpcy5kZXRlY3RUYWJGb2N1c0NoYW5nZSgpO1xuICB9XG5cbiAgZ2V0IGlzRm9yZWdyb3VuZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZDtcbiAgfVxuXG4gIGdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlY3RUYWJGb2N1c0NoYW5nZSgpOiB2b2lkIHtcbiAgICBsZXQgaGlkZGVuO1xuICAgIGxldCB2aXNpYmlsaXR5Q2hhbmdlO1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZ25vcmVkIGFzIHR5cGVzY3JpcHQgZG9lcyBub3QgaGF2ZSBsZWdhY3kgZ2V0U3RhdHMgdHlwZXNcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWlnbm9yZSAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50Lm1zSGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ21zSGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnbXN2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC53ZWJraXRIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnd2Via2l0SGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnd2Via2l0dmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQuaGlkZGVuICE9PSAndW5kZWZpbmVkJykgeyAvLyBPcGVyYSAxMi4xMCBhbmQgRmlyZWZveCAxOCBhbmQgbGF0ZXIgc3VwcG9ydFxuICAgICAgaGlkZGVuID0gJ2hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlICovXG5cbiAgICBjb25zdCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gIWRvY3VtZW50W2hpZGRlbl07XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudFtoaWRkZW5dICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG5cbiAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpc3RlbkZvckRvY3VtZW50Rm9jdXMuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvckRvY3VtZW50Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9IGRvY3VtZW50Lmhhc0ZvY3VzKCk7XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH0sIGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gbnVsbDtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzRm9yZWdyb3VuZCA9PT0gaXNGb3JlZ3JvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kLnZhbHVlID0gaXNGb3JlZ3JvdW5kO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCcm93c2VyRGV0ZWN0b3Ige1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXggPSAvKE1TSUV8KD8hR2Vja28uKylGaXJlZm94fCg/IUFwcGxlV2ViS2l0LitDaHJvbWUuKylTYWZhcml8KD8hQXBwbGVXZWJLaXQuKylDaHJvbWV8QXBwbGVXZWJLaXQoPyEuK0Nocm9tZXwuK1NhZmFyaSl8R2Vja28oPyEuK0ZpcmVmb3gpKSg/OiB8XFwvKShbXFxkLmFwcmVdKykvZztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWUgPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck1ham9yVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU2OSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNjkuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcwID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzEgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzIuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzUgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzYuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc3ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ny4nKTtcblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck5hbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU2OSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTY5O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc2O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4KTtcblxuICAgIGlmIChicm93c2VyTmFtZUFuZFZlcnNpb24gJiYgYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdKSB7XG4gICAgICByZXR1cm4gYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyTmFtZUxpc3QgfHwgIWJyb3dzZXJOYW1lTGlzdFswXSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBicm93c2VyTmFtZUxpc3RbMF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyVmVyc2lvbkxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyVmVyc2lvbkxpc3QgfHwgIWJyb3dzZXJWZXJzaW9uTGlzdFsxXSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFZlcnNpb24gPSBicm93c2VyVmVyc2lvbkxpc3RbMV07XG5cbiAgICBpZiAoIWZ1bGxWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IG1zaWUgPSB1c2VyQWdlbnQuaW5kZXhPZignTVNJRSAnKTtcblxuICAgIGlmIChtc2llID4gMCkge1xuICAgICAgLy8gSUUgMTAgb3Igb2xkZXIgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKX1gO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWRlbnQgPSB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKTtcblxuICAgIGlmICh0cmlkZW50ID4gMCkge1xuICAgICAgLy8gSUUgMTEgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICBjb25zdCB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xuXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyh2ZXJzaW9uICsgMywgdXNlckFnZW50LmluZGV4T2YoJy4nLCB2ZXJzaW9uKSksIDEwKX1gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIHtcbiAgZ2V0U3RyaW5nVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpIHx8XG4gICAgICB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCkgfHxcbiAgICAgIHRoaXMuZGVmYXVsdFN0cmluZ1ZhbHVlW25hbWVdO1xuICB9XG5cbiAgZ2V0Qm9vbGVhblZhbHVlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJzEnIHx8IHZhbHVlID09PSAnT24nO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlRnJvbVVyaSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShgJHtuYW1lfS11cmktcGFyYW1ldGVyLW5hbWVgKTtcblxuICAgIGlmICh2YWx1ZUZyb21VcmkpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gJ3RydWUnIHx8IHZhbHVlID09PSAnMScgfHwgdmFsdWUgPT09ICdPbic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEJvb2xlYW5WYWx1ZVtuYW1lXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRTdHJpbmdWYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmd9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1tZXRyaWNzLWxldmVsJzogVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKSxcbiAgICAgICdwaGVuaXgtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY29uc29sZS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtdGVsZW1ldHJ5LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNoYW5uZWwtdG9rZW4nOiAnJyxcbiAgICAgICdwaGVuaXgtdXJpJzogJycsXG4gICAgICAncGhlbml4LWJhc2UtdXJpJzogJydcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEJvb2xlYW5WYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBib29sZWFuIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZSc6IHRydWUsXG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbic6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YVZhbHVlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbWV0YVtuYW1lPScke25hbWV9J11gKTtcblxuICAgIGlmICghbWV0YVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBtZXRhVmFsdWUuZ2V0QXR0cmlidXRlKCd2YWx1ZScpO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlVVJJUGFyYW1ldGVyTmFtZSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKTtcblxuICAgIGlmICghdmFsdWVVUklQYXJhbWV0ZXJOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLnNlYXJjaCkuZ2V0KHZhbHVlVVJJUGFyYW1ldGVyTmFtZSkgfHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNTdXBwb3J0ZWQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yWydjb25uZWN0aW9uJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0dDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWZmZWN0aXZlVHlwZTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgfVxuXG4gIGdldCBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgcnR0KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0dDtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVUeXBlKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVR5cGU7XG4gIH1cblxuICBnZXQgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmsgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmtNYXg7XG4gIH1cblxuICBwcml2YXRlIGdldEVmZmVjdGl2ZVR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAnVW5rbm93bic7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmVmZmVjdGl2ZVR5cGUgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10udHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5ydHQ7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuICAgIH07XG5cbiAgICBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGlzdGljcygpOiB2b2lkIHtcbiAgICB0aGlzLl9ydHQudmFsdWUgPSB0aGlzLmdldFJvdW5kVHJpcFRpbWUoKTtcbiAgICB0aGlzLl9lZmZlY3RpdmVUeXBlLnZhbHVlID0gdGhpcy5nZXRFZmZlY3RpdmVUeXBlKCk7XG4gICAgdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkudmFsdWUgPSB0aGlzLmdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19QUklWQUNZX01PREVfXzogYm9vbGVhbjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJpdmFjeU1vZGUge1xuICBwcml2YXRlIHN0YXRpYyBfaXNQcml2YXRlOiBib29sZWFuO1xuXG4gIHN0YXRpYyBnZXQgaXNQcml2YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1ByaXZhdGU7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlJc1ByaXZhdGUoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX2lzUHJpdmF0ZSA9IF9fUFJJVkFDWV9NT0RFX187XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5faXNQcml2YXRlID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cblByaXZhY3lNb2RlLmFwcGx5SXNQcml2YXRlKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuXG5leHBvcnQgY2xhc3MgU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1TZXR1cExpc3RlbmVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0cmljc1NlcnZpY2UgPSBTREsubWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWV0cmljU3VibWl0dGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN1Y2Nlc3Moc3RyZWFtSWQpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZCwgc3RyZWFtSWQpO1xuICB9XG5cbiAgZmFpbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZFN0cmVhbU1ldHJpYyhtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZSwgc3RyZWFtSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbWV0cmljU3VibWl0dGVkKSB7XG4gICAgICByZXR1cm4gO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY1N1Ym1pdHRlZCA9IHRydWU7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldHVwVGltZSA9IG5vdyAtIHRoaXMuX3N0YXJ0VGltZTtcbiAgICBjb25zdCBtZXRyaWNOYW1lID0gbmV3IE1ldHJpY1R5cGUobWV0cmljVHlwZSkuZ2V0TmFtZSgpO1xuXG4gICAgdGhpcy5tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogc2V0dXBUaW1lfSxcbiAgICAgIHN0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gU3RyZWFtIG1ldHJpYyBbJXNdIGluIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBuZXcgRHVyYXRpb25zKHNldHVwVGltZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rpc3Bvc2FibGU6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGlzcG9zYWJsZTogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGU7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLl9kaXNwb3NhYmxlLmNhbGwodGhpcyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZUxpc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0OiBJRGlzcG9zYWJsZVtdID0gW107XG5cbiAgYWRkKGRpc3Bvc2FibGU6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5wdXNoKGRpc3Bvc2FibGUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LmZvckVhY2goZGlzcG9zYWJsZSA9PiBkaXNwb3NhYmxlLmRpc3Bvc2UoKSk7XG4gICAgdGhpcy5fbGlzdC5sZW5ndGggPSAwO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYERpc3Bvc2FibGVMaXN0W2Rpc3Bvc2FibGVzPSR7dGhpcy5fbGlzdC5sZW5ndGh9XWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ3Mge1xuICBzdGF0aWMgcmFuZG9tKGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCByYW5kb20xM0NoYXJhY3RlcnMgPSAoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMiwgMTUpO1xuICAgIH07XG5cbiAgICBjb25zdCBsb29wczogbnVtYmVyID0gTWF0aC5jZWlsKGxlbmd0aCAvIDEzKTtcblxuICAgIHJldHVybiBuZXcgQXJyYXkobG9vcHMpLmZpbGwocmFuZG9tMTNDaGFyYWN0ZXJzKS5yZWR1Y2UoKHN0cmluZywgZnVuYykgPT4ge1xuICAgICAgcmV0dXJuIHN0cmluZyArIGZ1bmMoKTtcbiAgICB9LCAnJykuc3Vic3RyaW5nKDAsIGxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5ncyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZSh4OiBuZXZlcik6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIFske3h9XS4gVGhpcyBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZGApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NlcnRVbnJlYWNoYWJsZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGVuZGVycyB7XG4gIHByaXZhdGUgX2FwcGVuZGVyczogQXJyYXk8SUFwcGVuZGVyPiA9IFtdO1xuXG4gIGdldCB2YWx1ZSgpOiBBcnJheTxJQXBwZW5kZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgYWRkKGFwcGVuZGVyOiBJQXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMucHVzaChhcHBlbmRlcik7XG4gIH1cblxuICByZW1vdmUoYXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSB0aGlzLl9hcHBlbmRlcnMucmVkdWNlKChpdGVtcywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCEoaXRlbSA9PT0gYXBwZW5kZXIpKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9LCBbXSBhcyBBcnJheTxJQXBwZW5kZXI+KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnNvbGVBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsTWVzc2FnZSA9IGAke2RhdGUudG9JU09TdHJpbmcoKX0gWyR7Y2F0ZWdvcnl9XSBbJHtMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdfV0gJHttZXNzYWdlfWA7XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgY29uc29sZS5sb2coZnVsbE1lc3NhZ2UpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihmdWxsTWVzc2FnZSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcblxuZXhwb3J0IGVudW0gTG9nZ2luZ0xldmVsIHtcbiAgQWxsID0gLTEsXG4gIFRyYWNlID0gMTAsXG4gIERlYnVnID0gMjAsXG4gIEluZm8gPSAzMCxcbiAgV2FybiA9IDQwLFxuICBFcnJvciA9IDUwLFxuICBGYXRhbCA9IDYwLFxuICBPZmYgPSAxMDAsXG59XG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdMZXZlbElucHV0VHlwZXMgPSAnT2ZmJyB8ICdUcmFjZScgfCAnRGVidWcnIHwgJ0luZm8nIHwgJ1dhcm4nIHwgJ0Vycm9yJyB8ICdGYXRhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2F0ZWdvcnk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwZW5kZXJzOiBBcHBlbmRlcnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZDtcblxuICBnZXQgY2F0ZWdvcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcnk7XG4gIH1cblxuICBnZXQgYXBwZW5kZXJzKCk6IEFwcGVuZGVycyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ1RocmVzaG9sZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHRyYWNlKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5UcmFjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5UcmFjZSwgYXJncyk7XG4gIH1cblxuICBkZWJ1ZyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRGVidWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRGVidWcsIGFyZ3MpO1xuICB9XG5cbiAgaW5mbyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5JbmZvLCBhcmdzKTtcbiAgfVxuXG4gIHdhcm4oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuV2FybiwgYXJncyk7XG4gIH1cblxuICBlcnJvciguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRXJyb3IsIGFyZ3MpO1xuICB9XG5cbiAgZmF0YWwoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkZhdGFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkZhdGFsLCBhcmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nKGxldmVsOiBudW1iZXIsIGFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnJlcGxhY2VQbGFjZWhvbGRlcnMoYXJncyk7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMudmFsdWUuZm9yRWFjaCgoYXBwZW5kZXI6IElBcHBlbmRlcikgPT4ge1xuICAgICAgYXBwZW5kZXIubG9nKGxldmVsLCBtZXNzYWdlLCB0aGlzLmNhdGVnb3J5LCBkYXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gYXJnc1swXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZiAmJiBhcmdzLmxlbmd0aCA+IDEgJiYgaW5kZXggPj0gMCkge1xuICAgICAgaW5kZXggPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YoJyUnLCBpbmRleCk7XG5cbiAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSwgaW5kZXggKyAyKTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgIC8vIEVzY2FwZWQgJyUlJyB0dXJucyBpbnRvICclJ1xuICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJyVkJyBvciAnJXMnIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nKGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJWonIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnN0cmluZ2lmeShhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MgPSBhcmdzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPT09IGFycmF5Lmxlbmd0aCAmJiBjdXJyZW50VmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUuc3RhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgYFske3RoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlKX1dYDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeShhcmc6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FjaGUgPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGFyZyBpbnN0YW5jZW9mIEVycm9yID8gdGhpcy50b1N0cmluZyhhcmcpIDogYXJnLFxuICAgICAgICAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoY2FjaGUuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnPHJlY3Vyc2l2ZT4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWNoZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIDJcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICdbb2JqZWN0IGludmFsaWQgSlNPTi5zdHJpbmdpZnldJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VBcmd1bWVudChhcmd1bWVudDogYW55LCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyB0aGlzLnRvU3RyaW5nKGFyZ3VtZW50KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMik7XG4gIH1cblxuICBwcml2YXRlIHRvU3RyaW5nKGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkYXRhID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCB0b1N0cmluZ1N0ciA9ICcnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSAnW29iamVjdCBpbnZhbGlkIHRvU3RyaW5nKCldJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1N0cmluZ1N0cjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIGFwcGVuZGVyczogQXBwZW5kZXJzLCB0aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQpIHtcbiAgICB0aGlzLl9jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IGFwcGVuZGVycztcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcml2YWN5TW9kZSBmcm9tICcuLi9kb20vUHJpdmFjeU1vZGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJEZWZhdWx0cyB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdExvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBQcml2YWN5TW9kZS5pc1ByaXZhdGUgPyBMb2dnaW5nTGV2ZWwuT2ZmIDogTG9nZ2luZ0xldmVsLkFsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gUHJpdmFjeU1vZGUuaXNQcml2YXRlID8gTG9nZ2luZ0xldmVsLk9mZiA6IExvZ2dpbmdMZXZlbC5BbGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlciwge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXJzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBJTG9nZ2VyfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBfYXBwZW5kZXJzOiBBcHBlbmRlcnMgPSBuZXcgQXBwZW5kZXJzKCk7XG4gIHByaXZhdGUgc3RhdGljIF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQgPSBuZXcgTG9nZ2luZ1RocmVzaG9sZCgpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IG5ldyBUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll90ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldExvZ2dlcihjYXRlZ29yeTogc3RyaW5nKTogSUxvZ2dlciB7XG4gICAgaWYgKHR5cGVvZiBjYXRlZ29yeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNhdGVnb3J5ID0gJ1NESyc7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV07XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIH1cblxuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XSA9IG5ldyBMb2dnZXIoY2F0ZWdvcnksIHRoaXMuX2FwcGVuZGVycywgdGhpcy5fdGhyZXNob2xkKTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlMb2dnaW5nTGV2ZWwoKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ2NvbnNvbGUnLCBMb2dnZXJGYWN0b3J5LmFwcGx5Q29uc29sZUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ3RlbGVtZXRyeScsIExvZ2dlckZhY3RvcnkuYXBwbHlUZWxlbWV0cnlMb2dnZXIuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUxvZ2dpbmdMZXZlbCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1sb2dnaW5nLWxldmVsJyk7XG5cbiAgICBpZiAoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSkge1xuICAgICAgdGhpcy5fdGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKG5hbWU6IHN0cmluZywgYXBwbHlBcHBlbmRlcjogKGxldmVsOiBMb2dnaW5nTGV2ZWwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoYHBoZW5peC0ke25hbWV9LWxvZ2dpbmctbGV2ZWxgKTtcblxuICAgIGlmIChwYXJhbWV0ZXJWYWx1ZSA9PT0gJ09mZicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhcHBseUFwcGVuZGVyKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlDb25zb2xlTG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIobGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5VGVsZW1ldHJ5TG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9nZ2VyRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsSW5wdXRUeXBlc30gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nTGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUobG9nZ2luZ0xldmVsOiBMb2dnaW5nTGV2ZWwpOiBMb2dnaW5nTGV2ZWxJbnB1dFR5cGVzIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbCkge1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5UcmFjZTpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5EZWJ1ZzpcbiAgICAgICAgcmV0dXJuICdEZWJ1Zyc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5JbmZvOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLldhcm46XG4gICAgICAgIHJldHVybiAnV2Fybic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5FcnJvcjpcbiAgICAgICAgcmV0dXJuICdFcnJvcic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5GYXRhbDpcbiAgICAgICAgcmV0dXJuICdGYXRhbCc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwobG9nZ2luZ0xldmVsVHlwZTogTG9nZ2luZ0xldmVsSW5wdXRUeXBlcyk6IExvZ2dpbmdMZXZlbCB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLk9mZjtcbiAgICAgIGNhc2UgJ1RyYWNlJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5UcmFjZTtcbiAgICAgIGNhc2UgJ0RlYnVnJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5EZWJ1ZztcbiAgICAgIGNhc2UgJ0luZm8nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gICAgICBjYXNlICdXYXJuJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5XYXJuO1xuICAgICAgY2FzZSAnRXJyb3InOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkVycm9yO1xuICAgICAgY2FzZSAnRmF0YWwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkZhdGFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdUaHJlc2hvbGQge1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHZhbHVlKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldFRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY1R5cGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzOiBNZXRyaWNzVHlwZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzOiBNZXRyaWNzVHlwZSkge1xuICAgIHRoaXMuX21ldHJpY3MgPSBtZXRyaWNzO1xuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBNZXRyaWNzVHlwZVt0aGlzLl9tZXRyaWNzXTtcbiAgfVxuXG4gIGdldFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICBzd2l0Y2ggKHRoaXMuX21ldHJpY3MpIHtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU3RhbGxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQnVmZmVyaW5nOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fbWV0cmljcyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5leHBvcnQgZW51bSBUZWxlbWV0cnlMZXZlbCB7XG4gIE9mZiA9IDEwMCxcbiAgRXNzZW50aWFsID0gMTAsXG4gIEFsbCA9IC0xXG59XG5cbmV4cG9ydCB0eXBlIFRlbGVtZXRyeUxldmVsVHlwZSA9ICdPZmYnIHwgJ0Vzc2VudGlhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbWV0cmljcyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwgPSBUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtZXRyaWNzVXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgbWV0cmljc1VybC5wYXRobmFtZSA9IG1ldHJpY3NVcmwucGF0aG5hbWUgKyAnL21ldHJpY3MnO1xuXG4gICAgdGhpcy5fdXJsID0gbWV0cmljc1VybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuLi9zZGsvVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi9zZGsvRW52aXJvbm1lbnQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZXM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IE1ldHJpY3NTZXJ2aWNlfSA9IHt9O1xuXG4gIHN0YXRpYyBnZXRNZXRyaWNzU2VydmljZSh1cmw6IHN0cmluZyk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF07XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzKSB7XG4gICAgICByZXR1cm4gbWV0cmljc1NlcnZpY2VzO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbmV3IE1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodXJsKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChTREsudGVsZW1ldHJ5TGV2ZWwpO1xuXG4gICAgcmV0dXJuIE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXSA9IG5ldyBNZXRyaWNzU2VydmljZShtZXRyaWNzQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogdm9pZCB7XG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gT2JqZWN0LnZhbHVlcyhNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzKTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMgJiYgbWV0cmljc1NlcnZpY2VzLmxlbmd0aCkge1xuICAgICAgbWV0cmljc1NlcnZpY2VzLmZvckVhY2gobWV0cmljc1NlcnZpY2UgPT4ge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IHRlbGVtZXRyeUxldmVsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uIGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi9NZXRyaWNUeXBlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDEwMjQ7XG5cbmludGVyZmFjZSBJVmFsdWUge1xuICBzdHJpbmc/OiBzdHJpbmc7XG4gIHVpbnQ2ND86IG51bWJlcjtcbiAgZmxvYXQ/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBJTWV0cmljUmVjb3JkIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIG1ldHJpYzogc3RyaW5nO1xuICB2YWx1ZTogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlOiBJVmFsdWU7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIElNZXRyaWMge1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgbWV0cmljVHlwZTogTWV0cmljc1R5cGU7XG4gIHZhbHVlPzogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlPzogSVZhbHVlO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBfbWV0cmljczogQXJyYXk8SU1ldHJpY1JlY29yZD4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgZ2V0IG1ldHJpY3NDb25maWd1cmF0aW9uKCk6IE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKG1ldHJpYzogSU1ldHJpYyk6IHZvaWQge1xuICAgIGNvbnN0IHtzdHJlYW1JZCwgdmFsdWUsIHByZXZpb3VzVmFsdWUsIHJ1bnRpbWUsIHJlc291cmNlLCBraW5kfSA9IG1ldHJpYztcbiAgICBjb25zdCBtZXRyaWNUeXBlID0gbmV3IE1ldHJpY1R5cGUobWV0cmljLm1ldHJpY1R5cGUpO1xuXG4gICAgaWYgKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA+IG1ldHJpY1R5cGUuZ2V0VGVsZW1ldHJ5TGV2ZWwoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWM6IG1ldHJpY1R5cGUuZ2V0TmFtZSgpLFxuICAgICAgdmFsdWUsXG4gICAgICBwcmV2aW91c1ZhbHVlLFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIHZlcnNpb246IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb24sXG4gICAgICBydW50aW1lLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBraW5kXG4gICAgfTtcblxuICAgIHRoaXMuX21ldHJpY3MucHVzaChtZXRyaWNSZWNvcmQpO1xuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzOiBBcnJheTxJTWV0cmljUmVjb3JkPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbWV0cmljc01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBtZXRyaWNzTWVzc2FnZXMgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKDAsIHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgdGhpcy5fbWV0cmljcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UocmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBNZXRyaWNzVHlwZSB7XG4gIFRpbWVUb0ZpcnN0RnJhbWUsXG4gIENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gIFN0YWxsZWQsXG4gIEJ1ZmZlcmluZyxcbiAgU2V0dXBDb21wbGV0ZWQsXG4gIFNldHVwRmFpbGVkLFxuICBSb3VuZFRyaXBUaW1lLFxuICBEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgTmV0d29ya1R5cGUsXG4gIFJlc29sdXRpb25DaGFuZ2VkLFxuICBBcHBsaWNhdGlvbkZvcmVncm91bmQsXG4gIEFwcGxpY2F0aW9uQmFja2dyb3VuZFxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXRyaWNzVHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUxldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDpcbiAgICAgICAgcmV0dXJuICdFc3NlbnRpYWwnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWxUeXBlOiBUZWxlbWV0cnlMZXZlbFR5cGUpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5PZmY7XG4gICAgICBjYXNlICdFc3NlbnRpYWwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJpdmFjeU1vZGUgZnJvbSAnLi4vZG9tL1ByaXZhY3lNb2RlJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlEZWZhdWx0IHtcbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiBQcml2YWN5TW9kZS5pc1ByaXZhdGUgPyBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWwgOiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlSGFuZGxlciBmcm9tICcuL1Byb21pc2VIYW5kbGVyJztcblxuY2xhc3MgUHJvbWlzZSB7XG4gIF9zdGF0ZTogbnVtYmVyO1xuICBfaGFuZGxlZDogYm9vbGVhbjtcbiAgX3ZhbHVlOiBQcm9taXNlO1xuICBfZGVmZXJyZWRzOiBBcnJheTxQcm9taXNlSGFuZGxlcj47XG4gIC8qIGVzbGludC1kaXNhYmxlICovXG4gIC8vIEB0cy1pZ25vcmVcbiAgdGhlbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQ7XG4gIC8qIGVzbGludC1lbmFibGUqL1xuXG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXcnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdub3QgYSBmdW5jdGlvbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlID0gMDtcbiAgICB0aGlzLl9oYW5kbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGVmZXJyZWRzID0gW107XG5cbiAgICB0aGlzLmRvUmVzb2x2ZShjYWxsYmFjayk7XG4gIH1cblxuICBkb1Jlc29sdmUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjYWxsYmFjayhcbiAgICAgICAgdmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbiA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZWplY3QocmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMucHJvbWlzZVJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlc29sdmUobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFByb21pc2UgUmVzb2x1dGlvbiBQcm9jZWR1cmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Qcm9taXNlcy1hcGx1cy9Qcm9taXNlcy1zcGVjI3RoZS1Qcm9taXNlLXJlc29sdXRpb24tcHJvY2VkdXJlXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHByb21pc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQSBQcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0IHNlbGYuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWYWx1ZSAmJiAodHlwZW9mIG5ld1ZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV3VmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgIGNvbnN0IHRoZW4gPSBuZXdWYWx1ZS50aGVuO1xuXG4gICAgICAgIGlmIChuZXdWYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICBwcm9taXNlLl9zdGF0ZSA9IDM7XG4gICAgICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICBwcm9taXNlLmZpbmFsZSgpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcHJvbWlzZS5kb1Jlc29sdmUoZnVuY3Rpb24oKTogdm9pZCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICB0aGVuLmFwcGx5KG5ld1ZhbHVlLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb21pc2UuX3N0YXRlID0gMTtcbiAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICBwcm9taXNlLmZpbmFsZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHByb21pc2UucHJvbWlzZVJlamVjdChlKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVqZWN0KG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZHtcbiAgICB0aGlzLl9zdGF0ZSA9IDI7XG4gICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLmZpbmFsZSgpO1xuICB9XG5cbiAgZmluYWxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gMiAmJiB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2hhbmRsZWQpIHtcbiAgICAgICAgICBQcm9taXNlLl91bmhhbmRsZWRSZWplY3Rpb24odGhpcy5fdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5fZGVmZXJyZWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0aGlzLmhhbmRsZSh0aGlzLl9kZWZlcnJlZHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX2RlZmVycmVkcyA9IG51bGw7XG4gIH1cblxuICBoYW5kbGUoZGVmZXJyZWQ6IFByb21pc2VIYW5kbGVyKTogdm9pZCB7XG4gICAgbGV0IHByb21pc2UgPSB0aGlzIGFzIFByb21pc2U7XG5cbiAgICB3aGlsZSAocHJvbWlzZS5fc3RhdGUgPT09IDMpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLl92YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDApIHtcbiAgICAgIHByb21pc2UuX2RlZmVycmVkcy5wdXNoKGRlZmVycmVkKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByb21pc2UuX2hhbmRsZWQgPSB0cnVlO1xuICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IHByb21pc2UuX3N0YXRlID09PSAxID8gZGVmZXJyZWQub25GdWxmaWxsZWQgOiBkZWZlcnJlZC5vblJlamVjdGVkO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAxKSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlc3VsdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2socHJvbWlzZS5fdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHJlc3VsdCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYWxsKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLmFsbCBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyKTtcblxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKFtdKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlbWFpbmluZyA9IGFyZ3MubGVuZ3RoO1xuICAgICAgY29uc3QgbWFuYWdlUmVzcG9uc2UgPSAoaSwgdmFsdWUpOiB2b2lkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgY29uc3QgdGhlbiA9IHZhbHVlLnRoZW47XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB0aGVuLmNhbGwoXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWUgPT4gbWFuYWdlUmVzcG9uc2UoaSwgdmFsdWUpLFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhcmdzW2ldID0gdmFsdWU7XG5cbiAgICAgICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYW5hZ2VSZXNwb25zZShpLCBhcmdzW2ldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyByZXNvbHZlKHZhbHVlKTogUHJvbWlzZSB7XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IFByb21pc2UpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiByZXNvbHZlKHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmVqZWN0KHZhbHVlKTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHJlamVjdCh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJhY2UoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UucmFjZSBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShhcnJbaV0pLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBfaW1tZWRpYXRlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKTtcbiAgfVxuXG4gIHN0YXRpYyBfdW5oYW5kbGVkUmVqZWN0aW9uKGVycm9yKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1Bvc3NpYmxlIFVuaGFuZGxlZCBQcm9taXNlIFJlamVjdGlvbjonLCBlcnJvcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgIH1cbiAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZVsnY2F0Y2gnXSA9IGZ1bmN0aW9uKG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ3RoZW4nXSA9IGZ1bmN0aW9uKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcigoKSA9PiBudWxsKTtcblxuICB0aGlzLmhhbmRsZShuZXcgUHJvbWlzZUhhbmRsZXIob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpKTtcblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10gPSBmdW5jdGlvbihjYWxsYmFjazogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIHZhbHVlID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiB2YWx1ZSksXG4gICAgcmVhc29uID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiBjb25zdHJ1Y3Rvci5yZWplY3QocmVhc29uKSlcbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb21pc2U7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZSBmcm9tICcuL1Byb21pc2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9taXNlSGFuZGxlciB7XG4gIG9uRnVsZmlsbGVkOiBGdW5jdGlvbjtcbiAgb25SZWplY3RlZDogRnVuY3Rpb247XG4gIHByb21pc2U6IFByb21pc2U7XG5cbiAgY29uc3RydWN0b3Iob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpIHtcbiAgICB0aGlzLm9uRnVsZmlsbGVkID0gdHlwZW9mIG9uRnVsZmlsbGVkID09PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiBudWxsO1xuICAgIHRoaXMub25SZWplY3RlZCA9IHR5cGVvZiBvblJlamVjdGVkID09PSAnZnVuY3Rpb24nID8gb25SZWplY3RlZCA6IG51bGw7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9zZGsvZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHtcbiAgYXVkaW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICB2aWRlb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIGxvY2FsT2ZmZXI6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlJyk7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWQ6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PjtcblxuICBzdGF0aWMgaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNQcmVjYWNoaW5nRW5hYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHByZS1jYWNoZSBwZWVyIGNvbm5lY3Rpb24gb2ZmZXJcIicsIGUpKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCk6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+IHtcbiAgICBpZiAoUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQ7XG5cbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSA9IFNESy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWU7XG5cbiAgICByZXR1cm4gcGVlckNvbm5lY3Rpb25GYWN0b3J5LmNyZWF0ZVBlZXJDb25uZWN0aW9uKClcbiAgICAgIC50aGVuKGFzeW5jIHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9ydHNBZGRUcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLnN1cHBvcnRzQWRkVHJhbnNjZWl2ZXI7XG4gICAgICAgIGxldCB2aWRlb1RyYW5zY2VpdmVyLCBhdWRpb1RyYW5zY2VpdmVyO1xuXG4gICAgICAgIGlmIChzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKSB7XG4gICAgICAgICAgYXVkaW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCdhdWRpbycsIHtkaXJlY3Rpb246ICdyZWN2b25seSd9KTtcbiAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ3ZpZGVvJywge2RpcmVjdGlvbjogJ3JlY3Zvbmx5J30pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyLFxuICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgIGxvY2FsT2ZmZXI6IGF3YWl0IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIgPyB1bmRlZmluZWQgOiB7XG4gICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cblBlZXJDb25uZWN0aW9uU2VydmljZS5pbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL3Nkay9mZWF0dXJlL0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi9TZHBQYXJzZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNNb25pdG9yU3RhdGlzdGljIHtcbiAgW2tpbmQ6IHN0cmluZ106IElSdGNTdGF0aXN0aWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0IHtcbiAgcmVzdWx0OiAoKSA9PiBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbSBleHRlbmRzIFJUQ1N0YXRzUmVwb3J0IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lczogKCkgPT4gc3RyaW5nW107XG4gIHN0YXQ6IChuYW1lKSA9PiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y1N0YXRpc3RpYyB7XG4gIHNzcmM/OiBzdHJpbmc7XG4gIG1lZGlhVHlwZT86IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGJ5dGVzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGZyYW1lc0RlY29kZWQ/OiBudW1iZXI7XG4gIHBhY2tldHNMb3N0PzogbnVtYmVyO1xuICBwYWNrZXRzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGNvZGVjPzogc3RyaW5nO1xuICBmcHM/OiBudW1iZXI7XG4gIHJvdW5kVHJpcFRpbWU/OiBudW1iZXI7XG4gIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcD86IG51bWJlcjtcbn1cblxuY29uc3QgdXBkYXRlU3RhdGlzdGljVGltZU91dCA9IDEwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkQXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydGNTdGF0aXN0aWM6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+ID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHt9KTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgcHJpdmF0ZSBfaXNNb25pdG9yUnVubmluZyA9IHRydWU7XG4gIHByaXZhdGUgX3VwZGF0ZVRpbWVPdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdHJhY2tzVG9Nb25pdG9yOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0sIGVzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gcGVlckNvbm5lY3Rpb247XG4gICAgdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZSA9IGVzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgdGhpcy5fdHJhY2tzVG9Nb25pdG9yID0gbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkubWFwKHRyYWNrID0+IHRyYWNrLmtpbmQpIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmdldEN1cnJlbnRPZmZlckRpc2FibGVkKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFNEUCA9IG5ldyBTZHBQYXJzZXIodGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYyA9IHBhcnNlZFNEUC5hdWRpb0NvZGVjO1xuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjID0gcGFyc2VkU0RQLnZpZGVvQ29kZWM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpYygpOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0Y1N0YXRpc3RpYztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNNb25pdG9yUnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cGRhdGVUaW1lT3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlVGltZU91dCk7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lT3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMudXBkYXRlU3RhdGlzdGljTGVnYWN5KCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTYWZhcmkgMTEgZG9lc250IGhhdmUga2luZCBvciBtZWRpYVR5cGUgc28gd2UgbmVlZCB0byB0YWtlIGl0IGZyb20gdGhlIGluYm91bmQtcnRwIG9iamVjdCBpZFxuICAgIGNvbnN0IGdldEtpbmRGb3JTYWZhcmkxMSA9IChpdGVtKTogc3RyaW5nID0+IGl0ZW0uaWQuaW5jbHVkZXMoJ0F1ZGlvJykgPyAnYXVkaW8nIDogaXRlbS5pZC5pbmNsdWRlcygnVmlkZW8nKSA/ICd2aWRlbycgOiAnJztcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMobnVsbClcbiAgICAgIC50aGVuKHN0YXRzID0+IHtcbiAgICAgICAgY29uc3QgcnRjU3RhdHM6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG5cbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgICAgICAgIGxldCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICBzdGF0cy5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lKSB7XG4gICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUgKiAxMDAwO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0c1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRzWydhdWRpbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdHNbJ3ZpZGVvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdHNbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0c1snYXVkaW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdHNbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0c1sndmlkZW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnaW5ib3VuZC1ydHAnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSByZXBvcnQua2luZCB8fCByZXBvcnQubWVkaWFUeXBlIHx8IGdldEtpbmRGb3JTYWZhcmkxMShyZXBvcnQpO1xuICAgICAgICAgICAgICBsZXQgY29kZWMgPSAnJztcblxuICAgICAgICAgICAgICBzdGF0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSByZXBvcnQuY29kZWNJZCkge1xuICAgICAgICAgICAgICAgICAgY29kZWMgPSBpdGVtLm1pbWVUeXBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKGtpbmQgJiYgdGhpcy5fdHJhY2tzVG9Nb25pdG9yLmluY2x1ZGVzKGtpbmQpKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdHNba2luZF0gPSB7XG4gICAgICAgICAgICAgICAgICBzc3JjOiByZXBvcnQuc3NyYyxcbiAgICAgICAgICAgICAgICAgIG1lZGlhVHlwZToga2luZCxcbiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogcmVwb3J0LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgIGJ5dGVzUmVjZWl2ZWQ6IHJlcG9ydC5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgcGFja2V0c0xvc3Q6IHJlcG9ydC5wYWNrZXRzTG9zdCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNSZWNlaXZlZDogcmVwb3J0LnBhY2tldHNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIGNvZGVjOiBjb2RlYyB8fCB0aGlzLmdldENvZGVjQnlUeXBlKGtpbmQpLFxuICAgICAgICAgICAgICAgICAgcm91bmRUcmlwVGltZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRzW2tpbmRdLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRzW2tpbmRdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuZnJhbWVzRGVjb2RlZDtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRzW2tpbmRdWydmcHMnXSA9IChyZXBvcnQuZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0c1traW5kXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAgICAgICAgIDEwMDAgfHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRzO1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlVGltZU91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVPdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljTGVnYWN5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0c0xlZ2FjeSgpLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgY29uc3QgcnRjU3RhdHM6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG4gICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG5cbiAgICAgIHN0YXRzLnJlc3VsdCgpLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgcmVwb3J0Lm5hbWVzKCkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ2dvb2dSVFQnKSB7XG4gICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LnN0YXQobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdzc3JjJykge1xuICAgICAgICAgIGNvbnN0IG1lZGlhVHlwZSA9IHJlcG9ydC5zdGF0KCdtZWRpYVR5cGUnKS50b1N0cmluZygpO1xuXG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXSA9IHt0aW1lc3RhbXA6IERhdGUubm93KCl9O1xuICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV1bJ3NzcmMnXSA9IHJlcG9ydC5zdGF0KCdzc3JjJykudG9TdHJpbmcoKTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydtZWRpYVR5cGUnXSA9IG1lZGlhVHlwZTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydieXRlc1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgnYnl0ZXNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV1bJ3BhY2tldHNMb3N0J10gPSByZXBvcnQuc3RhdCgncGFja2V0c0xvc3QnKTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydwYWNrZXRzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydjb2RlYyddID0gcmVwb3J0LnN0YXQoJ2dvb2dDb2RlY05hbWUnKS50b1N0cmluZygpIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUobWVkaWFUeXBlKTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydyb3VuZFRyaXBUaW1lJ10gPSByb3VuZFRyaXBUaW1lO1xuXG4gICAgICAgICAgaWYgKG1lZGlhVHlwZSA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuc3RhdCgnZnJhbWVzRGVjb2RlZCcpO1xuICAgICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsnZnBzJ10gPSAocnRjU3RhdHNbbWVkaWFUeXBlXS5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgKHJ0Y1N0YXRzW21lZGlhVHlwZV0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgMTAwMCB8fCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0cztcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVPdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lT3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZWNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWM7XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2RwUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2RwOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9Db2RlYzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNkcDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2RwID0gc2RwO1xuICAgIHRoaXMuX2F1ZGlvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ2F1ZGlvJyk7XG4gICAgdGhpcy5fdmlkZW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygndmlkZW8nKTtcbiAgfVxuXG4gIGdldCBhdWRpb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ29kZWM7XG4gIH1cblxuICBnZXQgdmlkZW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92aWRlb0NvZGVjO1xuICB9XG5cbiAgYXBwbHlDb2RlYyh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNwbGl0U2RwID0gdGhpcy5fc2RwLnNwbGl0KC8oXFxyXFxufFxccnxcXG4pLyk7XG4gICAgY29uc3QgdXNlZENvZGVjTGluZSA9IHNwbGl0U2RwLmZpbmQoaXRlbSA9PiBpdGVtLmluY2x1ZGVzKGBhPXJ0cG1hcDoke3NwbGl0U2RwLmZpbmQoaSA9PiBpLmluY2x1ZGVzKGBtPSR7dHlwZX1gKSkuc3BsaXQoJyAnKVszXX1gKSk7XG4gICAgY29uc3QgdXNlZENvZGVjID0gdXNlZENvZGVjTGluZS5zcGxpdCgnICcpWzFdO1xuICAgIGNvbnN0IGNvZGVjTmFtZSA9IHVzZWRDb2RlYy5zcGxpdCgnLycpWzBdO1xuXG4gICAgcmV0dXJuIGNvZGVjTmFtZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiwge1BlZXJDb25uZWN0aW9uRXZlbnRzfSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL3Nkay9mZWF0dXJlL0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCB7SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0fSBmcm9tICcuL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1ZhbmlsbGFQZWVyQ29ubmVjdGlvbicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbjogUlRDUGVlckNvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQud2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgZ2V0IG5hdGl2ZSgpOiBSVENQZWVyQ29ubmVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBpY2VDb25uZWN0aW9uU3RhdGUoKTogUlRDSWNlQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhRmVhdHVyZUVuYWJsZW1lbnQuYWRkVHJhbmNlaXZlckRpc2FibGVkICYmIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlciA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9mZmVyKG9wdGlvbnM/OiBSVENPZmZlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgdHlwZXNjcmlwdCBkb2VzIG5vdCBoYXZlIGxlZ2FjeSBnZXRTdGF0cyB0eXBlc1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1pZ25vcmUgKi9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVBbnN3ZXIob3B0aW9ucz86IFJUQ0Fuc3dlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgdHlwZXNjcmlwdCBkb2VzIG5vdCBoYXZlIGxlZ2FjeSBnZXRTdGF0cyB0eXBlc1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1pZ25vcmUgKi9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHNldExvY2FsRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaGFzQ3J5cHRvID0gZGVzY3JpcHRpb24uc2RwLm1hdGNoKC9hPWNyeXB0bzovaSk7XG5cbiAgICBpZiAoaGFzQ3J5cHRvKSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybignU0RQIGE9Y3J5cHRvIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBnZXRTdGF0cyhzZWxlY3Rvcj86IE1lZGlhU3RyZWFtVHJhY2sgfCBudWxsKTogUHJvbWlzZTxSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhzZWxlY3Rvcik7XG4gIH1cblxuICBnZXRTdGF0c0xlZ2FjeSgpOiBQcm9taXNlPElMZWdhY3lSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIC8vIElnbm9yZWQgYXMgdHlwZXNjcmlwdCBkb2VzIG5vdCBoYXZlIGxlZ2FjeSBnZXRTdGF0cyB0eXBlc1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1pZ25vcmUgKi9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhyZXNvbHZlKTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICB9KTtcbiAgfVxuXG4gIGFkZEV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICByZW1vdmVFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkVHJhbnNjZWl2ZXIobmFtZTogc3RyaW5nLCBvcHRpb25zOiBSVENSdHBUcmFuc2NlaXZlckluaXQpOiBSVENSdHBUcmFuc2NlaXZlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKG5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0Q29uZmlndXJhdGlvbigpOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpO1xuICB9XG5cbiAgc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHNldCBvbnRyYWNrKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbnRyYWNrKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrO1xuICB9XG5cbiAgc2V0IG9uaWNlY2FuZGlkYXRlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2VjYW5kaWRhdGUoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlO1xuICB9XG5cbiAgc2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbjsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IHtcbiAgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiBuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRPbmx5U3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YmplY3Q6IFN1YmplY3Q8VD47XG5cbiAgY29uc3RydWN0b3Ioc3ViamVjdDogU3ViamVjdDxUPikge1xuICAgIHRoaXMuX3N1YmplY3QgPSBzdWJqZWN0O1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmNsYXNzIERpc3Bvc2FibGVMaXN0ZW5lcjxUPiBleHRlbmRzIERpc3Bvc2FibGUge1xuICBjb25zdHJ1Y3RvcihsaXN0ZW5lcnM6IEFycmF5PFQ+LCBsaXN0ZW5lcjogVCkge1xuICAgIHN1cGVyKCgpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXJzOiBBcnJheTwoVCkgPT4gdm9pZD47XG4gIHByaXZhdGUgX3ZhbHVlOiBUO1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgIGxldCBjaGFuZ2VkID0gdGhpcy5fdmFsdWUgIT09IHZhbHVlO1xuXG4gICAgaWYgKGNoYW5nZWQgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmFibGUgPSB2YWx1ZSBhcyB1bmtub3duIGFzIElDb21wYXJhYmxlPFQ+O1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBhcmFibGUuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNoYW5nZWQgPSAhY29tcGFyYWJsZS5lcXVhbHModGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY2hhbmdlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lcih0aGlzLl92YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGVMaXN0ZW5lcjwoVCkgPT4gdm9pZD4odGhpcy5fbGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW52aXJvbm1lbnQge1xuICBzdGF0aWMgZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcblxuICAgICAgcmV0dXJuIGJhc2VVUkwub3JpZ2luO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTdHJpbmdzIGZyb20gJy4uL2xhbmcvU3RyaW5ncyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBFZGdlQXV0aCBmcm9tICcuL2VkZ2VBdXRoL0VkZ2VBdXRoJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsSW5wdXRUeXBlc30gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4uL2xvZ2dlci9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IFByaXZhY3lNb2RlIGZyb20gJy4uL2RvbS9Qcml2YWN5TW9kZSc7XG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciBmcm9tICcuLi9kb20vQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3InO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9FbnZpcm9ubWVudCc7XG5pbXBvcnQge0hsc1BsYXllclR5cGUsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9zdHJlYW1pbmcvU3RyZWFtVHlwZXMnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcblxuY29uc3QgcGFnZUxvYWRUaW1lID0gd2luZG93WydfX3BoZW5peFBhZ2VMb2FkVGltZSddIHx8IHdpbmRvd1snX19wYWdlTG9hZFRpbWUnXSB8fCBEYXRlLm5vdygpO1xuXG5pbnRlcmZhY2UgSUluaXRPcHRpb25zIHtcbiAgZGlzY292ZXJ5VXJpPzogc3RyaW5nO1xuICBwZWVyQ29ubmVjdGlvbkZhY3Rvcnk/OiBJUGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB0ZWxlbWV0cnlMZXZlbD86IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsSW5wdXRUeXBlcztcbiAgY29uc29sZUxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbElucHV0VHlwZXM7XG4gIGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0/OiBib29sZWFuO1xuICBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZT86IGJvb2xlYW47XG4gIHdlYlBsYXllckxvYWRlcj86IChwbGF5ZXI6IFdlYlBsYXllclR5cGUpID0+IHZvaWQ7XG4gIHNoYWthUGxheWVyTG9hZGVyPzogKHBsYXllcjogU2hha2FUeXBlKSA9PiB2b2lkO1xuICBobHNKc0xvYWRlcj86IChwbGF5ZXI6IEhsc1BsYXllclR5cGUpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyB7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfd2ViUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc0pzTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Vudmlyb25tZW50OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeVVybDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSA4O1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5TGV2ZWw6IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+ID0gbmV3IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+KFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VuZExvY2FsQ2FuZGlkYXRlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCFQcml2YWN5TW9kZS5pc1ByaXZhdGUpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdGVuYW5jeTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9jbGllbnRTZXNzaW9uSWQ6IHN0cmluZyA9IFN0cmluZ3MucmFuZG9tKDMyKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvYWRlZFRpbWVzdGFtcDogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU0RLJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pbml0aWFsaXplZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uRmFjdG9yeTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5KCkpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlJbml0aWFsaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPihTREsuX2luaXRpYWxpemVkKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5RGlzY292ZXJ5VXJpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPihEaXNjb3ZlcnlVcmkudXJpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5OiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KFNESy5fcGVlckNvbm5lY3Rpb25GYWN0b3J5KTtcblxuICBzdGF0aWMgZ2V0IHBhZ2VMb2FkVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogU3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbmFuY3koKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY2xpZW50U2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNESy5fY2xpZW50U2Vzc2lvbklkO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2FkZWRUaW1lc3RhbXAoKTogRGF0ZSB7XG4gICAgcmV0dXJuIFNESy5fbG9hZGVkVGltZXN0YW1wO1xuICB9XG5cbiAgc3RhdGljIGdldCBpbml0aWFsaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5SW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVVyaSgpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlEaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYlBsYXllckxvYWRlcigpOiAoV2ViUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKFNoYWthVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAoSGxzUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc0pzTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBtZXRyaWNzU2VydmljZSgpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgcmV0dXJuIFNESy5fbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbElucHV0VHlwZXMge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJyk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKFRlbGVtZXRyeUxldmVsW3ZhbHVlXSk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZFRlbGVtZXRyeUxldmVsID0gU0RLLl90ZWxlbWV0cnlMZXZlbC5zdWJzY3JpYmUodGVsZW1ldHJ5TGV2ZWwgPT4ge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZXRyeSBvbiBmYWlsdXJlIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4oY2hhbm5lbFRva2VuKTtcblxuICAgICAgU0RLLl90ZW5hbmN5LnZhbHVlID0gRWRnZUF1dGguZ2V0VGVuYW5jeShwYXJzZWRUb2tlbik7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gKEVkZ2VBdXRoLmdldFVyaShwYXJzZWRUb2tlbikgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXJpVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtdXJpJyk7XG5cbiAgICBpZiAodXJpVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmlWYWx1ZTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVVJJVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtYmFzZS11cmknKTtcblxuICAgIGlmIChiYXNlVVJJVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBgJHtiYXNlVVJJVmFsdWV9L3BjYXN0L2VuZFBvaW50c2A7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC1iYXNlLXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaW5pdChvcHRpb25zPzogSUluaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBuZXcgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuZGlzY292ZXJ5VXJpKSB7XG4gICAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBvcHRpb25zLmRpc2NvdmVyeVVyaTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5KSB7XG4gICAgICAgIFNESy5fcGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlID0gb3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRlbGVtZXRyeUxldmVsICYmIFRlbGVtZXRyeUxldmVsW29wdGlvbnMudGVsZW1ldHJ5TGV2ZWxdKSB7XG4gICAgICAgIFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5sb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci50aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmxvZ2dpbmdMZXZlbCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICYmXG4gICAgICAgIExvZ2dpbmdMZXZlbFtvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIGNvbnN0IGNvbnNvbGVBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIENvbnNvbGVBcHBlbmRlcik7XG5cbiAgICAgICAgaWYgKGNvbnNvbGVBcHBlbmRlcikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKGNvbnNvbGVBcHBlbmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICE9PSAnT2ZmJykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3dlYlBsYXllckxvYWRlciA9IG9wdGlvbnMud2ViUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9zaGFrYVBsYXllckxvYWRlciA9IG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX2hsc0pzTG9hZGVyID0gb3B0aW9ucy5obHNKc0xvYWRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5kaXNwb3NlKCk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gIFNESy5kaXNwb3NlKCk7XG59KTtcblxuU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuaW5pdCgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlVcmwge1xuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYmFzZVVSTC5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgICBzd2l0Y2ggKGJhc2VVUkwucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnd3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHA6JztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3c3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHBzOic7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAyIHx8XG4gICAgICAgICAgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMyAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAyXS5sZW5ndGggPD0gMiAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5sZW5ndGggPD0gMylcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50cy51bnNoaWZ0KCd0ZWxlbWV0cnknKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnc3RnLScpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctc3RnJykgfHwgc2VnbWVudHNbMF0uaW5jbHVkZXMoJy1zdGctJykgfHwgc2VnbWVudHNbMF0gPT09ICdzdGcnKSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeS1zdGcnO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdsb2NhbCcpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctbG9jYWwnKSkge1xuICAgICAgICAvLyBMZWF2ZSBVUkwgdW5jaGFuZ2VkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnknO1xuICAgICAgfVxuXG4gICAgICBiYXNlVVJMLmhvc3RuYW1lID0gc2VnbWVudHMuam9pbignLicpO1xuXG4gICAgICByZXR1cm4gYCR7YmFzZVVSTC5vcmlnaW59L3RlbGVtZXRyeWA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0cmF0ZVN0YXRlVHlwZSA9ICdLZWVwJyB8ICdSZXNldCc7XG5leHBvcnQgdHlwZSBCaXRyYXRlTW9kZVR5cGUgPSAnTm9ybWFsJyB8ICdGb3JjZScgfCAnUmVzZXQnO1xuXG5leHBvcnQgZW51bSBCaXRyYXRlU3RhdGUge1xuICBLZWVwLFxuICBSZXNldFxufVxuXG5leHBvcnQgZW51bSBCaXRyYXRlTW9kZSB7XG4gIE5vcm1hbCxcbiAgRm9yY2UsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlIHtcbiAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IG51bWJlcjtcbiAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVUeXBlO1xuICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVUeXBlO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEVuZFBvaW50LCB7SVN0cmVhbX0gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRWRnZUF1dGggZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGgnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5cbmltcG9ydCB7RWRnZVRva2VufSBmcm9tICcuLi9lZGdlQXV0aC9FZGdlVG9rZW4nO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4vQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5jb25zdCBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24gPSAnY2xpZW50OnRlcm1pbmF0aW9uJztcbmNvbnN0IGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMjAwMDtcbmNvbnN0IGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMzAwMDtcbmNvbnN0IG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMzAwMDAwO1xuY29uc3Qgc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMTUwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWwgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaGFubmVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VmlkZW9FbGVtZW50OiBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW46IFJlYWRPbmx5U3ViamVjdDxFZGdlVG9rZW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGF0ZTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b011dGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b1BhdXNlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuRXhwaXJpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRob3JpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5T25saW5lOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TG9hZGluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBsYXlpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGFuZGJ5OiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RvcHBlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRhcmdldExhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5Qml0cmF0ZUxpbWl0OiBSZWFkT25seVN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UmVzb2x1dGlvbjogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RmFpbHVyZUNvdW50OiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlFbmRQb2ludDogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSdGNTdGF0aXN0aWNzOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU1lZGlhU3RyZWFtOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuXG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgdG9rZW46IHN0cmluZywgdGFyZ2V0TGFnOiBudW1iZXIgPSBkZWZhdWx0VGFyZ2V0TGFnKSB7XG4gICAgdGhpcy5fY29udGV4dCA9IG5ldyBDaGFubmVsQ29udGV4dCh0b2tlbiwgdGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVZpZGVvRWxlbWVudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4odGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4odGhpcy5fY29udGV4dC50b2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPih0aGlzLl9jb250ZXh0LnBlZXJDb25uZWN0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YXRlID0gbmV3IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+KHRoaXMuX2NvbnRleHQuc3RhdGUpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LmF1dG9NdXRlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC50b2tlbkV4cGlyaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQuYXV0aG9yaXplZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlPbmxpbmUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQub25saW5lKTtcbiAgICB0aGlzLl9yZWFkT25seUxvYWRpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQubG9hZGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlQbGF5aW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LnBsYXlpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhbmRieSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC5zdGFuZGJ5KTtcbiAgICB0aGlzLl9yZWFkT25seVN0b3BwZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQuc3RvcHBlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY29udGV4dC50YXJnZXRMYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NvbnRleHQubGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jb250ZXh0LmJpdHJhdGVMaW1pdCk7XG4gICAgdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+KHRoaXMuX2NvbnRleHQucmVzb2x1dGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY29udGV4dC5mYWlsdXJlQ291bnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50Pih0aGlzLl9jb250ZXh0LmVuZFBvaW50KTtcbiAgICB0aGlzLl9yZWFkT25seVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4odGhpcy5fY29udGV4dC5zdHJlYW0pO1xuICAgIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcyA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHRoaXMuX2NvbnRleHQucnRjU3RhdGlzdGljcyk7XG4gICAgdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+KHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0pO1xuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKHRoaXMuX2NvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChFZGdlQXV0aC5nZXRVcmkocGFyc2VkVG9rZW4pIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IEVkZ2VBdXRoLmdldFRlbmFuY3kocGFyc2VkVG9rZW4pIHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuICAgIHRoaXMuX2NvbnRleHQuc2Vzc2lvblRlbGVtZXRyeSA9IG5ldyBTZXNzaW9uVGVsZW1ldHJ5KFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLl9jb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY29udGV4dC5zZXNzaW9uVGVsZW1ldHJ5KTtcbiAgICB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIgPSB0aGlzLmhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkLmJpbmQodGhpcyk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICB0aGlzLl9jb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC5zdWJzY3JpYmUodmlkZW9FbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fY29udGV4dC5zdHJlYW0uc3Vic2NyaWJlKHN0cmVhbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9UZWxlbWV0cnkuZGlzcG9zZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc3RyZWFtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLnZpZGVvRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICAgICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICAgICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5ID0gbmV3IFZpZGVvVGVsZW1ldHJ5KHRoaXMuc3RyZWFtSWQsIFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodGhpcy52aWRlb0VsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9UZWxlbWV0cnkuc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHRoaXMudmlkZW9FbGVtZW50KTtcblxuICAgICAgICAgIGlmICh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuU3RvcHBlZCkge1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMucmVzdGFydEFmdGVyU3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9jb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMpO1xuICAgICAgfSkpO1xuICAgIHRoaXMuX2NvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2NvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB9LCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY29udGV4dC5yZXNvbHV0aW9uLnN1YnNjcmliZShyZXNvbHV0aW9uID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5Lm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhyZXNvbHV0aW9uLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY29udGV4dC5iaXRyYXRlTGltaXQuc3Vic2NyaWJlKGJpdHJhdGVMaW1pdCA9PiB7XG4gICAgICAgIGlmIChiaXRyYXRlTGltaXQgJiYgdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICAgICAgdGhpcy5fY29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgICAgICBiaXRyYXRlTGltaXQsXG4gICAgICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgICAgIEJpdHJhdGVNb2RlLk5vcm1hbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgdmlkZW9FbGVtZW50KCk6IEhUTUxWaWRlb0VsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHNldCB2aWRlb0VsZW1lbnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG5cbiAgICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSA9IHZpZGVvRWxlbWVudDtcblxuICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHV0aW9uLnZhbHVlLndpZHRoICE9PSB2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCB8fCB0aGlzLnJlc29sdXRpb24udmFsdWUuaGVpZ2h0ICE9PSB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gbmV3IERpbWVuc2lvbih2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCwgdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gRGltZW5zaW9uLmVtcHR5O1xuICAgIH1cbiAgfVxuXG4gIGdldCB0b2tlbigpOiBFZGdlVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlO1xuICB9XG5cbiAgc2V0IHRva2VuKHRva2VuOiBFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9jb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX2NvbnRleHQudG9rZW4udmFsdWUgPSB0b2tlbjtcbiAgICB0aGlzLl9jb250ZXh0LnRva2VuRXhwaXJpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgIGNvbnN0IHBhcnNlZFRva2VuID0gRWRnZUF1dGgucGFyc2VUb2tlbih0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlKTtcbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoRWRnZUF1dGguZ2V0VXJpKHBhcnNlZFRva2VuKSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBFZGdlQXV0aC5nZXRUZW5hbmN5KHBhcnNlZFRva2VuKSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHBlZXJDb25uZWN0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhdGU7XG4gIH1cblxuICBnZXQgYXV0b011dGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkO1xuICB9XG5cbiAgZ2V0IGF1dG9QYXVzZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkO1xuICB9XG5cbiAgZ2V0IHRva2VuRXhwaXJpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nO1xuICB9XG5cbiAgZ2V0IGF1dGhvcml6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkO1xuICB9XG5cbiAgZ2V0IG9ubGluZSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU9ubGluZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TG9hZGluZztcbiAgfVxuXG4gIGdldCBwbGF5aW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGxheWluZztcbiAgfVxuXG4gIGdldCBzdGFuZGJ5KCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhbmRieTtcbiAgfVxuXG4gIGdldCBzdG9wcGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RvcHBlZDtcbiAgfVxuXG4gIGdldCB0YXJnZXRMYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnO1xuICB9XG5cbiAgZ2V0IGxhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMYWc7XG4gIH1cblxuICBnZXQgYml0cmF0ZUxpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHJlc29sdXRpb24oKTogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJlc29sdXRpb247XG4gIH1cblxuICBnZXQgZmFpbHVyZUNvdW50KCk6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQ7XG4gIH1cblxuICBnZXQgZW5kUG9pbnQoKTogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQ7XG4gIH1cblxuICBnZXQgc3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RyZWFtO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHQuc3RyZWFtSWQ7XG4gIH1cblxuICBnZXQgcnRjU3RhdHMoKTogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcztcbiAgfVxuXG4gIGdldCBtZWRpYVN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHNldEJpdHJhdGVMaW1pdChiaXRyYXRlTGltaXQ6IEJpdHNQZXJTZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IGJpdHJhdGVMaW1pdDtcbiAgfVxuXG4gIGNsZWFyQml0cmF0ZUxpbWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSAmJiB0aGlzLl9jb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgY29uc3QgYml0cmF0ZUluQml0c1BlclNlY29uZCA9IDA7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgIHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICBCaXRyYXRlTW9kZS5SZXNldFxuICAgICAgKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGFyZ2V0TGFnKGxhZzogTWlsbGlzZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jb250ZXh0LnRhcmdldExhZy52YWx1ZSA9IGxhZztcbiAgfVxuXG4gIGFzeW5jIHN0b3AocmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2NvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9jb250ZXh0LmlzU3RhcnRpbmcuc3Vic2NyaWJlKGlzU3RhcnRpbmcgPT4ge1xuICAgICAgICBpZiAoIWlzU3RhcnRpbmcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTdG9wKHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKHJlYXNvbik7XG5cbiAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG4gIH1cblxuICBhc3luYyByZXN1bWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBtdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1bm11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9wKCdjbGllbnQ6Y2hhbm5lbC1kaXNwb3NlJykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gICAgICB0aGlzLl9jb250ZXh0LmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXJpKHRva2VuKTogVVJMIHtcbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IHVybCA9IEVkZ2VBdXRoLmdldFVyaShwYXJzZWRUb2tlbik7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZGlzY292ZXIgVVJJIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2NvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgc3RhcnQnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzU3RhcnQoKVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzU3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9jb250ZXh0LnNlc3Npb25UZWxlbWV0cnkubGlzdGVuT25TdHJlYW1TZXR1cCgpO1xuXG4gICAgaWYgKCFFZGdlQXV0aC5pc1ZhbGlkVG9rZW4odG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OnN0YXJ0Jyk7XG4gICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9jb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0cmVhbVBsYXllciA9IFN0cmVhbUZhY3RvcnkuY3JlYXRlKHRva2VuLCB0aGlzLl9jb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2spO1xuXG4gICAgaWYgKCFzdHJlYW1QbGF5ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtUGxheWVyLnN0YXJ0KFxuICAgICAgdXJpLFxuICAgICAgdG9rZW4sXG4gICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLFxuICAgICAgdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudC5iaW5kKHRoaXMpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKys7XG5cbiAgICAgICAgdGhpcy5fY29udGV4dC5vbmxpbmUudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpjbGVhbnVwLWFmdGVyLWZhaWxlZC1zZXR1cCcpO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgY2hhbm5lbCcsIGUpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nIHx8ICFTREsuYXV0b21hdGljUmV0cnlPbkZhaWx1cmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0aGlzLmdldFJldHJ5SW50ZXJ2YWwoKSk7XG5cbiAgICAgICAgdGhpcy5fY29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzdGFydEFmdGVyU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fY29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbnRleHQudG9rZW4udmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBsYXkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVkaWFTdHJlYW0gPSB0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFtZWRpYVN0cmVhbSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJldHJ5SW50ZXJ2YWwoKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgICByZXR1cm4gc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGF0dGVtcHQgZmFzdCwgYWZ0ZXIgdGhhdCBleHBvbmVudGlhbCB3aXRoIGJhY2tvZmYgaW50ZXJ2YWxcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRzLCBNYXRoLnBvdyhiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcywgTWF0aC5tYXgoMCwgdGhpcy5fY29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgLSAxKSkpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1GYWlsdXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZXRyeSBzdGFydCB3aXRoIGluaXRpYWwgc3RhdGUgWyVzXSBbJXNdJywgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSwgQ2hhbm5lbFN0YXRlW3RoaXMuX2NvbnRleHQuc3RhdGUudmFsdWVdKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgdW5hdXRob3JpemVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIHJlc3RyaWN0ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gYmxvY2tlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBsYXlpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwYXVzZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgaW52b2tlIHBsYXkoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gdW5zdXBwb3J0ZWQgZmVhdHVyZSwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcFJlc291cmNlcyhyZWFzb246IHN0cmluZyA9IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbik6IHZvaWQge1xuICAgIHRoaXMuX2NvbnRleHQuZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgcGVlckNvbm5lY3Rpb24gPSB0aGlzLl9jb250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlO1xuXG4gICAgaWYgKHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9jb250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUuZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgdGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jb250ZXh0LnN0b3BwZWQudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX2NvbnRleHQuc3RhbmRieS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX2NvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW0odGhpcy5fY29udGV4dC5zdHJlYW0udmFsdWUsIHJlYXNvbilcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRGVzdHJveWVkIHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0nLCB0aGlzLnN0cmVhbUlkLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlkZW9FbGVtZW50ICYmIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5fY29udGV4dC5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX2NvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX2NvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG5cbiAgICBjb25zdCBwbGF5UHJvbWlzZSA9IHZpZGVvRWxlbWVudC5wbGF5KCk7XG5cbiAgICBpZiAocGxheVByb21pc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsYXlQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgY29uc3QgaGFzQXVkaW9UcmFjayA9ICEhbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKHRyYWNrID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYWNrLmtpbmQgPT09ICdhdWRpbyc7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmID0gIVNESy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcblxuICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIHx8IHZpZGVvRWxlbWVudC5tdXRlZCB8fCAhaGFzQXVkaW9UcmFjaykge1xuICAgICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBhdXNlZCB2aWRlbyBhZnRlciBwbGF5IGZhaWxlZC4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBudWxsO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgbXV0ZWQgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiB2aWRlb0VsZW1lbnQucGxheSgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQbGF5ZWQgdmlkZW8gYWZ0ZXIgYXV0byBtdXRpbmcuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZCB0byB1bm11dGUuJywgdGhpcy5zdHJlYW1JZCk7XG5cbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEVuZFBvaW50LCB7SVN0cmVhbSwgU3Vic2NyaWJlU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCBTZXNzaW9uVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7RWRnZVRva2VufSBmcm9tICcuLi9lZGdlQXV0aC9FZGdlVG9rZW4nO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsQ29udGV4dCB7XG4gIGNoYW5uZWxJbml0aWFsaXphdGlvbjogRGF0ZTtcbiAgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICBjaGFubmVsRGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICByZW5kZXJlckRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgdmlkZW9FbGVtZW50OiBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICB0b2tlbjogU3ViamVjdDxFZGdlVG9rZW4+O1xuICBwZWVyQ29ubmVjdGlvbjogU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBtZWRpYVN0cmVhbTogU3ViamVjdDxNZWRpYVN0cmVhbT47XG4gIHN0YXRlOiBTdWJqZWN0PENoYW5uZWxTdGF0ZT47XG4gIGF1dG9NdXRlZDogU3ViamVjdDxib29sZWFuPjtcbiAgYXV0b1BhdXNlZDogU3ViamVjdDxib29sZWFuPjtcbiAgdG9rZW5FeHBpcmluZzogU3ViamVjdDxib29sZWFuPjtcbiAgYXV0aG9yaXplZDogU3ViamVjdDxib29sZWFuPjtcbiAgb25saW5lOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBsb2FkaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwbGF5aW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdGFuZGJ5OiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdG9wcGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICB0YXJnZXRMYWc6IFN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBsYWc6IFN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBiaXRyYXRlTGltaXQ6IFN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHJlc29sdXRpb246IFN1YmplY3Q8RGltZW5zaW9uPjtcbiAgZmFpbHVyZUNvdW50OiBTdWJqZWN0PG51bWJlcj47XG4gIGVuZFBvaW50OiBTdWJqZWN0PEVuZFBvaW50PjtcbiAgc3RyZWFtOiBTdWJqZWN0PElTdHJlYW0+O1xuICBydGNTdGF0aXN0aWNzOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPjtcblxuICBwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXI7XG4gIGlzRGlzcG9zZWQ6IGJvb2xlYW47XG4gIGlzU3RhcnRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHZpZGVvVGVsZW1ldHJ5OiBWaWRlb1RlbGVtZXRyeTtcbiAgc2Vzc2lvblRlbGVtZXRyeTogU2Vzc2lvblRlbGVtZXRyeTtcbiAgcnRjQXVkaW9TdGF0aXN0aWM6IElSdGNTdGF0aXN0aWM7XG4gIHJ0Y1ZpZGVvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih0b2tlbjogc3RyaW5nLCB0YXJnZXRMYWc6IG51bWJlcikge1xuICAgIHRoaXMuaXNEaXNwb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNTdGFydGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLnJlbmRlcmVyRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxJbml0aWFsaXphdGlvbiA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSBuZXcgU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PihudWxsKTtcbiAgICB0aGlzLnRva2VuID0gbmV3IFN1YmplY3Q8RWRnZVRva2VuPih0b2tlbik7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvbiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4obnVsbCk7XG4gICAgdGhpcy5tZWRpYVN0cmVhbSA9IG5ldyBTdWJqZWN0PE1lZGlhU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnN0YXRlID0gbmV3IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPihDaGFubmVsU3RhdGUuU3RhcnRpbmcpO1xuICAgIHRoaXMuYXV0b011dGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0b1BhdXNlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnRva2VuRXhwaXJpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRob3JpemVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5vbmxpbmUgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5wbGF5aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RhbmRieSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0b3BwZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy50YXJnZXRMYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4odGFyZ2V0TGFnKTtcbiAgICB0aGlzLmxhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPigwKTtcbiAgICB0aGlzLmJpdHJhdGVMaW1pdCA9IG5ldyBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+KDApO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG5ldyBTdWJqZWN0PERpbWVuc2lvbj4oRGltZW5zaW9uLmVtcHR5KTtcbiAgICB0aGlzLmZhaWx1cmVDb3VudCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgdGhpcy5lbmRQb2ludCA9IG5ldyBTdWJqZWN0PEVuZFBvaW50PihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtLnN0cmVhbUlkO1xuICB9XG5cbiAgYXBwbHlTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHRoaXMuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlKys7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LnZhbHVlICYmIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgIH1cbiAgfVxuXG4gIG1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YW5kQnk7XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDtcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBDaGFubmVsU3RhdGUge1xuICBPZmZsaW5lID0gMSxcbiAgU3RhcnRpbmcsXG4gIFBhdXNlZCxcbiAgUGxheWluZyxcbiAgUmVjb3ZlcmluZyxcbiAgUmVjb25uZWN0aW5nLFxuICBTdGFuZEJ5LFxuICBTdG9wcGVkLFxuICBVbmF1dGhvcml6ZWQsXG4gIEdlb1Jlc3RyaWN0ZWQsXG4gIEdlb0Jsb2NrZWQsXG4gIEVycm9yLFxuICBVbnN1cHBvcnRlZEZlYXR1cmVcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbFN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQ2hhbm5lbCBmcm9tICcuL0NoYW5uZWwnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtFZGdlVG9rZW59IGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VUb2tlbic7XG5pbXBvcnQge01pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5cbnR5cGUgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgdG9rZW46IEVkZ2VUb2tlbjtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWxzIHtcbiAgc3RhdGljIGNyZWF0ZUNoYW5uZWwob3B0aW9uczogQ3JlYXRlQ2hhbm5lbE9wdGlvbnMpOiBDaGFubmVsIHtcbiAgICBpZiAoIVNESy5pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgbm90IGxvYWRlZC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IENoYW5uZWwob3B0aW9ucy52aWRlb0VsZW1lbnQsIG9wdGlvbnMudG9rZW4sIG9wdGlvbnMudGFyZ2V0TGFnKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVscyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IENoYW5uZWxzIGZyb20gJy4vQ2hhbm5lbHMnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5cbmV4cG9ydCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHREaXNjb3ZlcnlVcmkgPSAnaHR0cHM6Ly9wY2FzdC5waGVuaXhydHMuY29tL3BjYXN0L2VuZFBvaW50cyc7XG5cbmV4cG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlTW9kZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVNb2RlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUpOiBCaXRyYXRlTW9kZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZU1vZGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuTm9ybWFsOlxuICAgICAgICByZXR1cm4gJ05vcm1hbCc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLkZvcmNlOlxuICAgICAgICByZXR1cm4gJ0ZvcmNlJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZU1vZGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlU3RhdGUsIEJpdHJhdGVTdGF0ZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVTdGF0ZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSk6IEJpdHJhdGVTdGF0ZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZVN0YXRlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5LZWVwOlxuICAgICAgICByZXR1cm4gJ0tlZXAnO1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZVN0YXRlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBEaXNjb3ZlcnlTZXJ2aWNlIGZyb20gJy4vRGlzY292ZXJ5U2VydmljZSc7XG5cbmNvbnN0IGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwgPSA2MDAwMDtcblxuaW50ZXJmYWNlIElQZXJVUklFbmRwb2ludCB7IFt4OiBzdHJpbmddOiBQcm9taXNlPEVuZFBvaW50PiB9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZTogSVBlclVSSUVuZHBvaW50ID0ge307XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5KCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmk6IFVSTCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIHJldHVybiBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuXG4gICAgY29uc3QgZGlzY292ZXJ5U2VydmljZSA9IG5ldyBEaXNjb3ZlcnlTZXJ2aWNlKHVyaSk7XG4gICAgY29uc3QgY2FjaGVkVmFsdWUgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPSBkaXNjb3ZlcnlTZXJ2aWNlLmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KCk7XG5cbiAgICBEaXNjb3ZlcnkuX2NhY2hlW3VybF0udGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPT09IGNhY2hlZFZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICAgICAgfVxuICAgICAgfSwgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCk7XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuXG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhY2hlZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuXG5jb25zdCBkZWZhdWx0VGltZW91dCA9IDIwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0Rpc2NvdmVyeScpO1xuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX3VyaTogVVJMO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogVVJMKSB7XG4gICAgaWYgKCF1cmkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHVyaScpO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UodXJpLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKHVyaTogVVJMLCB0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPEVuZFBvaW50W10+IHtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHRpbWVvdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlzY292ZXJ5IHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5ib2R5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgd2l0aCBubyBkYXRhIFske3VybH1dYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNTdHJpbmcgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXNTdHJpbmcuc3BsaXQoJywnKTtcblxuICAgIHJldHVybiBlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IG5ldyBFbmRQb2ludChlbmRQb2ludCwgdGltZW91dCkpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQodGltZW91dDogbnVtYmVyID0gZGVmYXVsdFRpbWVvdXQpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gRGlzY292ZXJ5VXJpLmJ1aWxkRGlzY292ZXJ5VXJsKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXdhaXQgdGhpcy5kaXNjb3Zlck5lYXJieUVuZFBvaW50cyhuZXcgVVJMKHVybCksIHRpbWVvdXQpO1xuICAgIGNvbnN0IG5ldmVyUmVzb2x2ZSA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IG5ldyBQcm9taXNlKCgpID0+IHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZXF1ZXN0IFslc10gZmFpbGVkLCBwcmV2ZW50aW5nIGl0IGZyb20gY29tcGxldGluZycsIHVybCk7XG4gICAgfSk7XG4gICAgY29uc3QgZW5kUG9pbnQgPSBhd2FpdCBQcm9taXNlLnJhY2UoZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBlbmRQb2ludFxuICAgICAgLnBpbmcoKVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICB0aGlzLl9sb2dnZXIud2FybignRmFpbGVkIHRvIHBpbmcgZW5kIHBvaW50IFslc10nLCBlbmRQb2ludCwgZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldmVyUmVzb2x2ZSgpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHRpbWUgPT4ge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcmVkIGVuZCBwb2ludCBbJXNdIHdpdGggdGltZSBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSwgdGltZSk7XG4gICAgICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICAgICAgcnVudGltZTogKG5vdyAtIFNESy5wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgICAgICB2YWx1ZToge3VpbnQ2NDogdGltZSB8fCAwfSxcbiAgICAgICAgICByZXNvdXJjZTogZW5kUG9pbnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBraW5kOiAncGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50O1xuICAgICAgfSkpKTtcblxuICAgIHJldHVybiBlbmRQb2ludDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9IGZyb20gJy4uL2RlZmF1bHRzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlVcmkge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZGlzY292ZXJ5VXJpOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KGRlZmF1bHREaXNjb3ZlcnlVcmkpO1xuXG4gIHN0YXRpYyBnZXQgdXJpKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeVVyaS5fZGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkRGlzY292ZXJ5VXJsKHVyaTogVVJMKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHVyaS50b1N0cmluZygpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIHVybC5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lID09PSAnLycpIHtcbiAgICAgIHVybC5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5VXJpIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcblxuaW1wb3J0IHtcbiAgSVN1YnNjcmliZVJlc3BvbnNlLFxuICBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3Rcbn0gZnJvbSAnLi4vYXBpL1N1YnNjcmliZSc7XG5pbXBvcnQge0lTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QsIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlfSBmcm9tICcuLi9hcGkvU2V0UmVtb3RlRGVzY3JpcHRpb24nO1xuaW1wb3J0IHtJU2Vzc2lvbkRlc2NyaXB0aW9uLCBTZHBUeXBlfSBmcm9tICcuLi9hcGkvU2Vzc2lvbkRlc2NyaXB0aW9uJztcbmltcG9ydCB7SURlc3Ryb3lTdHJlYW1SZXF1ZXN0LCBJRGVzdHJveVN0cmVhbVJlc3BvbnNlfSBmcm9tICcuLi9hcGkvRGVzdHJveVN0cmVhbSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0lBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCwgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZX0gZnJvbSAnLi4vYXBpL0FkZEljZUNhbmRpZGF0ZXMnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IEVkZ2VBdXRoIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZSwgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEJpdHJhdGVNb2RlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVNb2RlTWFwcGluZyc7XG5pbXBvcnQgQml0cmF0ZVN0YXRlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVTdGF0ZU1hcHBpbmcnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG5jb25zdCBhcGlWZXJzaW9uID0gNjtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlU3RhdHVzID0gJ29rJyB8ICduby1zdHJlYW0nIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdnZW8tcmVzdHJpY3RlZCcgfCAnZ2VvLWJsb2NrZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBSZW1vdmVUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIERlc3Ryb3lTdHJlYW1TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtIHtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3Vic2NyaWJlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufVxuXG5pbnRlcmZhY2UgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cztcbiAgc2Vzc2lvbkRlc2NyaXB0aW9uPzogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuaW50ZXJmYWNlIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzO1xuICBvcHRpb25zPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzO1xufVxuXG5pbnRlcmZhY2UgSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZFBvaW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VuZFBvaW50Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VyaTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3JvdW5kVHJpcFRpbWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IHN0cmluZywgdGltZW91dDogbnVtYmVyKSB7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSB0aW1lb3V0O1xuXG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuZCBwb2ludCByZXF1aXJlcyBhIHRpbWVvdXRgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcm91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYEVuZFBvaW50W3VyaT0ke3RoaXMuX3VyaX1dYDtcbiAgfVxuXG4gIGFzeW5jIHBpbmcoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkUGluZ1VybCgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgUGluZyB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRoaXMuX3RpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykgeyAvKiBIYW5kbGUgKi9cbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGluZyBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yb3VuZFRyaXBUaW1lID0gZmluaXNoZWQgLSBzdGFydDtcblxuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlKHRva2VuOiBzdHJpbmcsIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHBhcnNlZFRva2VuID0gRWRnZUF1dGgucGFyc2VUb2tlbih0b2tlbik7XG5cbiAgICBpZiAoIXBhcnNlZFRva2VuIHx8ICFwYXJzZWRUb2tlbi5hcHBsaWNhdGlvbklkKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHRlbmFuY3kgPSBwYXJzZWRUb2tlbi5hcHBsaWNhdGlvbklkO1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAnc3Vic2NyaWJlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBlZGdlQXV0aFRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLmNvbnZlcnRSVENTZHBUeXBlVG9TZHBUeXBlKGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUpLFxuICAgICAgICAgICAgc2RwOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBlZGdlQXV0aFRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgU3Vic2NyaWJlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc3Vic2NyaWJlIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbTogSVN0cmVhbSwgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc2NyaXB0aW9uJywgJ3JlbW90ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZTogdGhpcy5jb252ZXJ0UlRDU2RwVHlwZVRvU2RwVHlwZShzZXNzaW9uRGVzY3JpcHRpb24udHlwZSksXG4gICAgICAgIHNkcDogc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBuZXcgRXJyb3IoYFNldCByZW1vdGUgZGVzY3JpcHRpb24gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBsaW1pdEJpdHJhdGUoXG4gICAgc3RyZWFtOiBJU3RyZWFtLFxuICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyLFxuICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IEJpdHNQZXJTZWNvbmQsXG4gICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUsXG4gICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlLFxuICApOiBQcm9taXNlPElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnYml0cmF0ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZU1hcHBpbmcuY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGUpLFxuICAgICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZSlcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIG5ldyBFcnJvcihgU2V0IGxpbWl0IGJpdHJhdGUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IHNldCBsaW1pdCBiaXRyYXRlIHJlc3BvbnNlIFslc10gaW4gWyVzXSBtcycsIHN0YXR1cywgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4ge3N0YXR1c307XG4gIH1cblxuICBhc3luYyBhZGRJY2VDYW5kaWRhdGVzKHN0cmVhbTogSVN0cmVhbSwgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10sIGRpc2NvdmVyeUNvbXBsZXRlZDogYm9vbGVhbiwgb3B0aW9uczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2ljZScsICdjYW5kaWRhdGVzJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgY2FuZGlkYXRlcyxcbiAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBuZXcgRXJyb3IoYEFkZCBpY2UgY2FuZGlkYXRlcyB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGFkZCBJQ0UgY2FuZGlkYXRlcyByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW0oc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgRGVsZXRlIHN0cmVhbSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHN0cmVhbScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBkZXN0cm95IHN0cmVhbSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBkZXN0cm95U3RyZWFtUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgfVxuXG4gIGJ1aWxkVXJsKHBhdGg6IHN0cmluZ1tdKTogVVJMIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgcGF0aEFzQXJyYXkgPSB1cmkucGF0aG5hbWUuc3BsaXQoJy8nKTtcblxuICAgIHBhdGhBc0FycmF5Lmxlbmd0aCA9IHBhdGhBc0FycmF5Lmxlbmd0aCAtIDE7XG5cbiAgICB1cmkucGF0aG5hbWUgPSBwYXRoQXNBcnJheS5jb25jYXQoLi4ucGF0aCkuam9pbignLycpO1xuXG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQaW5nVXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgdXJpLnNlYXJjaCA9IGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFtbJ3R5cGUnLCAnaHR0cCddLCBbJ3ZlcnNpb24nLCBzZGtWZXJzaW9uXSwgWydfJywgYCR7RGF0ZS5ub3coKX1gXV0pLnRvU3RyaW5nKCl9YDtcblxuICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFN1YnNjcmliZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogRGVzdHJveVN0cmVhbVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTdWJzY3JpYmVSZXNwb25zZTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZTogSVN1YnNjcmliZVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2UubGFnID0gZGF0YS5sYWc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBjb25zdCBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0ge307XG5cbiAgICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgICAgICBzd2l0Y2ggKGRhdGEucnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ0J1bmRsZVBvbGljeUJhbGFuY2VkJzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kgPSAnYmFsYW5jZWQnO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQnVuZGxlUG9saWN5TWF4Q29tcGF0JzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kgPSAnbWF4LWNvbXBhdCc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCdW5kbGVQb2xpY3lNYXhCdW5kbGUnOlxuICAgICAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9ICdtYXgtYnVuZGxlJztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGRhdGEucnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgICAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgICAgICAgdXJsczogZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJscyxcbiAgICAgICAgICAgICAgdXNlcm5hbWU6IGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICAgICAgICBjcmVkZW50aWFsOiBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgICAgICBzd2l0Y2ggKGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ0ljZVRyYW5zcG9ydFBvbGljeUFsbCc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gJ2FsbCc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdJY2VUcmFuc3BvcnRQb2xpY3lSZWxheSc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gJ3JlbGF5JztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0ljZVRyYW5zcG9ydFBvbGljeVB1YmxpYyc6XG4gICAgICAgICAgICAgIC8vIERlcHJlY2F0ZWQgLSBOb3Qgc3VwcG9ydGVkXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbi5wZWVySWRlbnRpdHkpIHtcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLnBlZXJJZGVudGl0eSA9IGRhdGEucnRjQ29uZmlndXJhdGlvbi5wZWVySWRlbnRpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kpIHtcbiAgICAgICAgICBzd2l0Y2ggKGRhdGEucnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICAgICAgICBjYXNlICdSdGNwTXV4UG9saWN5TmVnb3RpYXRlJzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5ID0gJ25lZ290aWF0ZSc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdSdGNwTXV4UG9saWN5UmVxdWlyZSc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSA9ICdyZXF1aXJlJztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGRhdGEucnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gcnRjQ29uZmlndXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiB0aGlzLmNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbil9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IHRoaXMuY29udmVydElTZXNzaW9uRGVzY3JpcHRpb25Ub1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKX07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogdGhpcy5jb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbil9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydElTZXNzaW9uRGVzY3JpcHRpb25Ub1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb246IElTZXNzaW9uRGVzY3JpcHRpb24pOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0IHtcbiAgICBjb25zdCBydGNTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQgPSB7c2RwOiBzZXNzaW9uRGVzY3JpcHRpb24uc2RwfTtcblxuICAgIHN3aXRjaCAoc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZmVyJzpcbiAgICAgICAgcnRjU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUgPSAnb2ZmZXInO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQW5zd2VyJzpcbiAgICAgICAgcnRjU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUgPSAnYW5zd2VyJztcblxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHNlc3Npb25EZXNjcmlwdGlvbi50eXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnRjU2Vzc2lvbkRlc2NyaXB0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlOiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24gPSB0aGlzLmNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U6IElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0ID0ge1xuICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1cyxcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5vcHRpb25zKSB7XG4gICAgICAgIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZS5vcHRpb25zID0gZGF0YS5vcHRpb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJRGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW06IElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRSVENTZHBUeXBlVG9TZHBUeXBlKHR5cGU6IFJUQ1NkcFR5cGUpOiBTZHBUeXBlIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2Fuc3dlcic6XG4gICAgICAgIHJldHVybiAnQW5zd2VyJztcbiAgICAgIGNhc2UgJ29mZmVyJzpcbiAgICAgICAgcmV0dXJuICdPZmZlcic7XG4gICAgICBjYXNlICdwcmFuc3dlcic6XG4gICAgICBjYXNlICdyb2xsYmFjayc6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU0RQIHR5cGUgWyR7dHlwZX1dIGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJRWRnZUF1dGh9IGZyb20gJy4vRWRnZUF1dGhUb2tlbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtFZGdlVG9rZW59IGZyb20gJy4vRWRnZVRva2VuJztcblxuY29uc3QgZWRnZUF1dGhUb2tlblByZWZpeCA9ICdESUdFU1Q6JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZUF1dGgge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VkZ2VBdXRoJyk7XG5cbiAgc3RhdGljIHBhcnNlVG9rZW4odG9rZW46IEVkZ2VUb2tlbik6IElFZGdlQXV0aCB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRUb2tlbih0b2tlbikpIHtcbiAgICAgIEVkZ2VBdXRoLl9sb2dnZXIuZXJyb3IoJ1Rva2VuIGlzIG5vdCB2YWxpZCBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbmNvZGVkRWRnZUF1dGhUb2tlbiA9IGF0b2IodG9rZW4uc3Vic3RyKGVkZ2VBdXRoVG9rZW5QcmVmaXgubGVuZ3RoKSk7XG4gICAgICBjb25zdCBlZGdlQXV0aFRva2VuID0gSlNPTi5wYXJzZShlbmNvZGVkRWRnZUF1dGhUb2tlbik7XG5cbiAgICAgIGVkZ2VBdXRoVG9rZW4udG9rZW4gPSBKU09OLnBhcnNlKGVkZ2VBdXRoVG9rZW4udG9rZW4pO1xuXG4gICAgICByZXR1cm4gZWRnZUF1dGhUb2tlbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBFZGdlQXV0aC5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcGFyc2UgdG9rZW4gdmFsdWUnLCBlKTtcblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0VXJpKHBhcnNlZFRva2VuOiBJRWRnZUF1dGgpOiBVUkwge1xuICAgIHJldHVybiBwYXJzZWRUb2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbi51cmkgP1xuICAgICAgbmV3IFVSTChwYXJzZWRUb2tlbi50b2tlbi51cmkpIDogbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUZW5hbmN5KHBhcnNlZFRva2VuOiBJRWRnZUF1dGgpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXJzZWRUb2tlbiAmJiBwYXJzZWRUb2tlbi5hcHBsaWNhdGlvbklkID9cbiAgICAgIHBhcnNlZFRva2VuLmFwcGxpY2F0aW9uSWQgOiAnJztcbiAgfVxuXG4gIHN0YXRpYyBpc1ZhbGlkVG9rZW4odG9rZW46IEVkZ2VUb2tlbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRva2VuICYmIHRva2VuLnN0YXJ0c1dpdGgoZWRnZUF1dGhUb2tlblByZWZpeCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlYXR1cmVFbmFibGVtZW50IHtcbiAgc3RhdGljIGdldCBjbGllbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENsaWVudCBvZmZlciB3b3JrZmxvdyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSBpbiB0aGUgZm9sbG93aW5nIGJyb3dzZXJzXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc0IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzYgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGdldCBhZGRUcmFuY2VpdmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hyb21lIDY5LCA3MCwgNzEsIDcyIGV4cG9zZXMgYGFkZFRyYW5jZWl2ZXJgIGJ1dCBpdCBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseVxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzAgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU2O1xuICB9XG5cbiAgc3RhdGljIGdldCBvblRyYWNrRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjMgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hvdWxkVXNlTmF0aXZlSGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYW1zdW5nQnJvd3Nlcic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUlRNUEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8IDg0KSB8fFxuICAgICAgKEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPCA3MCkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0VkZ2UnIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUHJlY2FjaGluZ0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ0lFJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgQ2hhbm5lbHMgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbHMnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtDaGFubmVsU3RhdGV9IGZyb20gJy4uL2NoYW5uZWxzJztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ30gZnJvbSAnLi9MaXZlU3RyZWFtaW5nJztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2h1bmtlZFN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2h1bmtlZFN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21vbml0b3JEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9zdHJlYW1TdGF0aXN0aWNzOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcztcbiAgcHJpdmF0ZSBfbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG5cbiAgY29uc3RydWN0b3IoY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUgPSBoYW5kbGVTdHJlYW1GYWlsdXJlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZCh0aGlzKTtcbiAgfVxuXG4gIHN0YXJ0KHVyaTogVVJMLCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkIHwgSURpc3Bvc2FibGU+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKVxuICAgICAgLnRoZW4oZW5kUG9pbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbnVsbCwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2ZmZXJTZHAgPSBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcDtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICBvcmlnaW5TdGFydFRpbWU6IERhdGUubm93KCkgLSBsYWcgKyB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gMixcbiAgICAgICAgICBsYWdcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gTGl2ZVN0cmVhbWluZy5zdGFydCh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBvZmZlclNkcCwgb3B0aW9ucylcbiAgICAgICAgICAudGhlbihwbGF5ZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb25pdG9yKHBsYXllcik7XG5cbiAgICAgICAgICAgIHJldHVybiBwbGF5ZXI7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0xpdmVTdHJlYW1pbmcgZmFpbGVkJywgZSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1vbml0b3IocGxheWVyOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgbmV3U3RyZWFtU3RhdGlzdGljcyA9IExpdmVTdHJlYW1pbmcuZ2V0U3RhdHMoKTtcblxuICAgICAgaWYgKHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MgJiZcbiAgICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmN1cnJlbnRUaW1lICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID49IG5ld1N0cmVhbVN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCsrO1xuXG4gICAgICAgIGlmICh0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID4gNikge1xuICAgICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHBsYXllci5kaXNwb3NlKCk7XG4gICAgICAgICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZWQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzID0gbmV3U3RyZWFtU3RhdGlzdGljcztcbiAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuICAgIH0sIDEwMDApO1xuXG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgfSkpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdPcHRpb25zLCBMaXZlU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge0lIbHNQbGF5ZXJUeXBlfSBmcm9tICcuL0lIbHNQbGF5ZXInO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIbHNQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSUhsc1BsYXllclR5cGU7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIpIHtcbiAgICAgIGlmIChMaXZlU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBMaXZlU3RyZWFtaW5nLmhsc1BsYXllcih7XG4gICAgICAgICAgZW5hYmxlV29ya2VyOiB0cnVlLFxuICAgICAgICAgIG1heEJ1ZmZlckxlbmd0aDogMSxcbiAgICAgICAgICBsaXZlQmFja0J1ZmZlckxlbmd0aDogMCxcbiAgICAgICAgICBsaXZlU3luY0R1cmF0aW9uOiA3LFxuICAgICAgICAgIGxpdmVEdXJhdGlvbkluZmluaXR5OiB0cnVlLFxuICAgICAgICAgIGxpdmVNYXhMYXRlbmN5RHVyYXRpb246IEluZmluaXR5LFxuICAgICAgICAgIGhpZ2hCdWZmZXJXYXRjaGRvZ1BlcmlvZDogMVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmxvYWRTb3VyY2UodGhpcy5fbWFuaWZlc3RVUkkpO1xuICAgICAgICB0aGlzLl9wbGF5ZXIuYXR0YWNoTWVkaWEodGhpcy5fdmlkZW9FbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmNhblBsYXlUeXBlKCdhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCcpKSB7XG4gICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5zcmMgPSB0aGlzLl9tYW5pZmVzdFVSSTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIgJiYgTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKTtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAuMCxcbiAgICAgICAgbGFnOiAwLjAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHtcbiAgICAgIHdpZHRoOiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0V2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuX3BsYXllci5tZWRpYS5vZmZzZXRIZWlnaHQsXG4gICAgICBjdXJyZW50VGltZTogdGhpcy5fcGxheWVyLm1lZGlhLmN1cnJlbnRUaW1lLFxuICAgICAgbGFnOiAwLjAsXG4gICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGUsXG4gICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdJRExFJykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdFUlJPUicgfHwgdGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdFTkRFRCcpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnTE9BRElORycpIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlLmluY2x1ZGVzKCdXQUlUSU5HJykpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXSB8fCAwO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcblxuICAgIHN0YXRpc3RpY3MubGFnID0gTWF0aC5tYXgoMC4wLCAoY3VycmVudFRpbWUgKyAodGhpcy5fb3B0aW9ucy5sYWcgLyAxMDAwKSkgLSB0cnVlQ3VycmVudFRpbWUpO1xuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIgJiYgdGhpcy5fcGxheWVyLmRlc3Ryb3kpIHtcbiAgICAgIHRoaXMuX3BsYXllci5kZXN0cm95KCk7XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgV2ViUGxheWVyIGZyb20gJy4vV2ViUGxheWVyJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBTaGFrYVBsYXllciBmcm9tICcuL1NoYWthUGxheWVyJztcbmltcG9ydCBIbHNQbGF5ZXIgZnJvbSAnLi9IbHNQbGF5ZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3MsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBMaXZlU3RyZWFtaW5nIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BlbmRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc1BsYXllcjogSGxzUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BoZW5peFdlYlBsYXllcjogV2ViUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthOiBTaGFrYVR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBzdGF0aWMgX3BsYXllcjogU2hha2FQbGF5ZXIgfCBXZWJQbGF5ZXIgfCBIbHNQbGF5ZXI7XG5cbiAgc3RhdGljIGdldCBobHNQbGF5ZXIoKTogSGxzUGxheWVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc1BsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGhlbml4V2ViUGxheWVyKCk6IFdlYlBsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9waGVuaXhXZWJQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthKCk6IFNoYWthVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHN0YXJ0KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZywgb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnMpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyIHx8IHRoaXMuX3NoYWthIHx8IHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBsYXllciBpcyBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICghU0RLLndlYlBsYXllckxvYWRlciAmJiAhU0RLLnNoYWthUGxheWVyTG9hZGVyICYmICFTREsuaGxzSnNMb2FkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQtZmVhdHVyZSwgYWRkIHN0cmVhbSBwbGF5ZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsuaGxzSnNMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9obHNQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy53ZWJQbGF5ZXJMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9waGVuaXhXZWJQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLnNoYWthUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fc2hha2EgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllci5nZXRTdGF0cygpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGxheShQbGF5ZXI6IHR5cGVvZiBXZWJQbGF5ZXIgfCB0eXBlb2YgU2hha2FQbGF5ZXIgfCB0eXBlb2YgSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKTogSURpc3Bvc2FibGUge1xuICAgIGNvbnN0IGRhc2hNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW1wZFxcPz9bXlxcc10qKS9tKTtcbiAgICBjb25zdCBobHNNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW0zdThcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgbWFuaWZlc3RVcmwgPSBkYXNoTWFuaWZlc3RVcmxNYXRjaCAmJiBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA/IGRhc2hNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG4gICAgY29uc3QgcGxheWxpc3RVcmwgPSBobHNNYW5pZmVzdFVybE1hdGNoICYmIGhsc01hbmlmZXN0VXJsTWF0Y2hbMV0gPyBobHNNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG5cbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzIHx8ICh0aGlzLl9obHNQbGF5ZXIgJiYgdGhpcy5faGxzUGxheWVyLmlzU3VwcG9ydGVkKCkpKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2hscycsIHN0cmVhbUlkLCBwbGF5bGlzdFVybCwgb3B0aW9ucyk7XG5cbiAgICAgIHRoaXMuX3BsYXllci5zdGFydCgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG5ldyBQbGF5ZXIodmlkZW9FbGVtZW50LCAnZGFzaCcsIHN0cmVhbUlkLCBtYW5pZmVzdFVybCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgIHJldHVybiB0aGlzLl9wbGF5ZXI7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBsb2FkZWQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nKTogSURpc3Bvc2FibGUge1xuICAgIGlmICghdGhpcy5fc2hha2EgJiYgIXRoaXMuX3BoZW5peFdlYlBsYXllciAmJiAhdGhpcy5faGxzUGxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShIbHNQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGhlbml4V2ViUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KFdlYlBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaGFrYSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShTaGFrYVBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZW51bSBOZXR3b3JrU3RhdGVzIHtcbiAgTmV0d29ya0VtcHR5LFxuICBOZXR3b3JrSWRsZSxcbiAgTmV0d29ya0xvYWRpbmcsXG4gIE5ldHdvcmtOb1NvdXJjZVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFbmRQb2ludCwge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSwge0lQZWVyQ29ubmVjdGlvbk9mZmVySW5pdH0gZnJvbSAnLi4vLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2ZlYXR1cmUvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uLy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsQ29udGV4dCc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXJ0KHVyaSwgdG9rZW4sIGxpc3Rlbk9uU3RyZWFtU2V0dXAsIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsPEVuZFBvaW50LCBJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+KFtcbiAgICAgIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSksXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgXSlcbiAgICAgIC50aGVuKChbZW5kUG9pbnQsIHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn1dKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0xvY2FsIG9mZmVyOlxcbicgKyBsb2NhbE9mZmVyLnNkcCk7XG5cbiAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgbG9jYWxPZmZlciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIGxvY2FsT2ZmZXIsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgcnRjQ29uZmlndXJhdGlvbiwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlSdGNDb25maWd1cmF0aW9uKHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIHN0b3Agbm9ybWFsbHkgdGhlIHBlZXIgY29ubmVjdGlvbiBpcyB1bnJlZ2lzdGVyZWQgZmlyc3QuXG4gICAgICAgICAgICAgICAgLy8gVGh1cyBhbnl0aW1lIHdlIHNlZSBhIGNsb3NlZCBwZWVyIGNvbm5lY3Rpb24gdGhhdCBpcyBzdGlsbCB2YWxpZCwgaXQgaXMgYW4gZXJyb3IuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciBwZWVyIGNvbm5lY3Rpb24gc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNraW5nJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3JzpcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgdHJ5aW5nIHRvIHJlY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlZCc6XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHJldHJ5aW5nIHRvIGNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbVByb21pc2UgPSBuZXcgUHJvbWlzZTxNZWRpYVN0cmVhbT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50Lm9uVHJhY2tEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuXG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoe1xuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFuc3dlciA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIGFuc3dlciBbJWpdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGFuc3dlcik7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5zZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW0sIGFuc3dlcik7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoe3N0YXR1cywgc2Vzc2lvbkRlc2NyaXB0aW9ufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBtZWRpYVN0cmVhbTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNDb25uZWN0aW9uTW9uaXRvciA9IG5ldyBSdGNDb25uZWN0aW9uTW9uaXRvcihwZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW0sIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyA0KTtcblxuICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3IpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSBydGNDb25uZWN0aW9uTW9uaXRvci5ydGNTdGF0aXN0aWMuc3Vic2NyaWJlKHN0YXRpc3RpY3MgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MudmFsdWUgPSBzdGF0aXN0aWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiAhdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhdWRpb1RyYWNrRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHZpZGVvVHJhY2tGYWlsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLmF1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICBhdWRpb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpb1RyYWNrRmFpbGVkICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEF1ZGlvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MuYXVkaW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBWaWRlbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCh2aWRlb1RyYWNrRmFpbGVkIHx8IGF1ZGlvVHJhY2tGYWlsZWQpICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgcnRjQ29ubmVjdGlvbk1vbml0b3IuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciB0cmFjayBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoIVNESy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXBwbHlSdGNDb25maWd1cmF0aW9uKFxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiB8IG51bGwsXG4gICAgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgaWYgKCFvcHRpb25hbFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uID0gdGhpcy50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHRydW5jYXRlSWNlU2VydmVycyhjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB1cmxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCB1cmwgPSBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF07XG5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHVybHMucHVzaChjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgIHVybHM6IHVybHMsXG4gICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuXG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIDwgU0RLLm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgfHwgIVNESy5hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMrKztcblxuICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JlY29ubmVjdGluZyBwZWVyIGNvbm5lY3Rpb24gYnkgcmVzdGFydGluZyBJQ0UnKTtcblxuICAgICAgY29uc3QgbG9jYWxPZmZlciA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihsb2NhbE9mZmVyKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbicsIGUpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gYWZ0ZXIgWyVzXSBhdHRlbXB0cywgcGVyZm9ybWluZyBmdWxsIHJlY292ZXJ5JywgdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgcmV0cnlDYWxsYmFjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdPcHRpb25zLCBMaXZlU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbnR5cGUgU2hha2FPcHRpb25zID0ge1xuICBhYnI6IHtcbiAgICBkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGU6IG51bWJlcjtcbiAgfTtcbiAgbWFuaWZlc3Q6IHtcbiAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgIHRpbWVvdXQ6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICBzdHJlYW1pbmc6IHtcbiAgICByZWJ1ZmZlcmluZ0dvYWw6IG51bWJlcjtcbiAgICBidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyQmVoaW5kOiBudW1iZXI7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgICBtYXhBdHRlbXB0czogbnVtYmVyO1xuICAgICAgYmFja29mZkZhY3RvcjogbnVtYmVyO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNoYWthIHtcbiAgY29uZmlndXJlOiAobzogU2hha2FPcHRpb25zKSA9PiB2b2lkO1xuICBsb2FkOiAodXJpOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIGdldFN0YXRzOiAoKSA9PiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcztcbiAgZGVzdHJveTogKCkgPT4gdm9pZDtcbiAgdW5sb2FkOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFrYVBsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTaGFrYVBsYXllcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSVNoYWthO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKExpdmVTdHJlYW1pbmcuc2hha2EpIHtcbiAgICAgIGNvbnN0IHBsYXllck9wdGlvbnM6IFNoYWthT3B0aW9ucyA9IHtcbiAgICAgICAgYWJyOiB7ZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiAyMDAwMDAwfSxcbiAgICAgICAgbWFuaWZlc3Q6IHtyZXRyeVBhcmFtZXRlcnM6IHt0aW1lb3V0OiAxMDAwMH19LFxuICAgICAgICBzdHJlYW1pbmc6IHtcbiAgICAgICAgICByZWJ1ZmZlcmluZ0dvYWw6IDIsXG4gICAgICAgICAgYnVmZmVyaW5nR29hbDogMTAsXG4gICAgICAgICAgYnVmZmVyQmVoaW5kOiAzMCxcbiAgICAgICAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICAgICAgbWF4QXR0ZW1wdHM6IDEwLFxuICAgICAgICAgICAgYmFja29mZkZhY3RvcjogMS4xXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgTGl2ZVN0cmVhbWluZy5zaGFrYS5QbGF5ZXIodGhpcy5fdmlkZW9FbGVtZW50KTtcbiAgICAgIHRoaXMubG9hZFBsYXllcihwbGF5ZXJPcHRpb25zKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAsXG4gICAgICAgIGxhZzogMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0ge1xuICAgICAgLi4udGhpcy5fcGxheWVyLmdldFN0YXRzKCksXG4gICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgIGxhZzogMFxuICAgIH07XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ10gfHwgMDtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG4gICAgY29uc3QgbGFnID0gTWF0aC5tYXgoMC4wLCB0cnVlQ3VycmVudFRpbWUgLSBjdXJyZW50VGltZSk7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50KSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgICBzdGF0aXN0aWNzLmxhZyA9IGxhZztcblxuICAgICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLnVubG9hZCgpO1xuICAgICAgdGhpcy5fcGxheWVyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGxheWVyKHBsYXllckNvbmZpZzogU2hha2FPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGxheWVyLmNvbmZpZ3VyZShwbGF5ZXJDb25maWcpO1xuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BsYXllci5sb2FkKHRoaXMuX21hbmlmZXN0VVJJKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERBU0ggbGl2ZSBzdHJlYW0gaGFzIGJlZW4gbG9hZGVkJywgdGhpcy5fc3RyZWFtSWQpO1xuXG4gICAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LnBsYXkpIHtcbiAgICAgICAgdGhpcy5fdmlkZW9FbGVtZW50LnBsYXkoKTtcbiAgICAgIH1cbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBFcnJvciB3aGlsZSBsb2FkaW5nIERBU0ggbGl2ZSBzdHJlYW0gWyVzXScsIHRoaXMuX3N0cmVhbUlkLCBlLmNvZGUsIGUpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQgRWRnZUF1dGggZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGgnO1xuaW1wb3J0IENodW5rZWRTdHJlYW0gZnJvbSAnLi9DaHVua2VkU3RyZWFtJztcbmltcG9ydCBSZWFsVGltZVN0cmVhbSBmcm9tICcuL1JlYWxUaW1lU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbUZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbWluZycpO1xuXG4gIHN0YXRpYyBjcmVhdGUodG9rZW46IHN0cmluZywgY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiBJU3RyZWFtIHtcbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IGlzUnRtcCA9IHBhcnNlZFRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuLmNhcGFiaWxpdGllcyAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3J0bXAnKTtcblxuICAgIGlmIChpc1J0bXApIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignVGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IFJUTVAgcGxheWJhY2suJyk7XG4gICAgICBjaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc1N0cmVhbWluZyA9IHBhcnNlZFRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuLmNhcGFiaWxpdGllcyAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3N0cmVhbWluZycpO1xuXG4gICAgaWYgKGlzU3RyZWFtaW5nKSB7XG4gICAgICByZXR1cm4gbmV3IENodW5rZWRTdHJlYW0oY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVhbFRpbWVTdHJlYW0oY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJlYW1GYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ30gZnJvbSAnLi9MaXZlU3RyZWFtaW5nJztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ09wdGlvbnMsIExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuY29uc3QgYmFuZHdpZHRoVG9TdGFydEF0ID0gMzAwMDAwMDsgLy8gQ29ycmVzcG9uZHMgdG8gNzIwcCBpbiBtb3N0IHNldHVwc1xuY29uc3QgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgPSAxNTAwMDtcblxudHlwZSBFdmVudExpc3RlbmVyRm9yV2ViUGxheWVyID0gKGV2dDogV2ViUGxheWVyRXZlbnQpID0+IHZvaWQ7XG50eXBlIFdlYlBsYXllckV2ZW50ID0ge1xuICBjb2RlOiBudW1iZXI7XG4gIHNldmVyaXR5OiBudW1iZXI7XG4gIGVycm9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVdlYlBsYXllciB7XG4gIHN0YXJ0OiAodXJsOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGFkZEV2ZW50TGlzdGVuZXIobmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lckZvcldlYlBsYXllcik6IHZvaWQ7XG4gIGRpc3Bvc2UoKTogdm9pZDtcbiAgZXJyb3JzOiB7XG4gICAgc2V2ZXJpdHk6IHtcbiAgICAgIFJFQ09WRVJBQkxFOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3M7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYlBsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdXZWJQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElXZWJQbGF5ZXI7XG4gIHByaXZhdGUgX2xhc3RSZWxvYWRUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIGNvbnN0IHBsYXllck9wdGlvbnMgPSB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIGJhbmR3aWR0aFRvU3RhcnRBdFxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IExpdmVTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLldlYlBsYXllcih0aGlzLl9sb2dnZXIsIHRoaXMuX3ZpZGVvRWxlbWVudCwgcGxheWVyT3B0aW9ucyk7XG4gICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQodGhpcy5fbWFuaWZlc3RVUkkpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBlcnJvck9iamVjdCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNhblJlbG9hZCgpICYmIGVycm9yT2JqZWN0ICYmIChlcnJvck9iamVjdC5jb2RlID09PSAzIHx8IGVycm9yT2JqZWN0LnNldmVyaXR5ID09PSBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5lcnJvcnMuc2V2ZXJpdHkuUkVDT1ZFUkFCTEUpKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1JlbG9hZGluZyB1bmhlYWx0aHkgc3RyZWFtIGFmdGVyIGVycm9yIGV2ZW50IFslal0nLCBlcnJvck9iamVjdCk7XG4gICAgICAgICAgdGhpcy5yZWxvYWRJZkFibGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2Fubm90IHJlbG9hZCB3aXRoIGVycm9yIFslal0nLCBlcnJvck9iamVjdCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllciAmJiBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5pc1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAuMCxcbiAgICAgICAgbGFnOiAwLjAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2UsXG4gICAgICAgIGRhdGFCdWZmZXJlZDogMC4wXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHN0YXRpc3RpY3MuY3VycmVudFRpbWUgfHwgdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmlzTmF0aXZlICYmIHN0YXRpc3RpY3MuZGVsaXZlcnlUeXBlID09PSAnSGxzJykge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIC0gc3RhdGlzdGljcy5sYWc7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0aXN0aWNzLmN1cnJlbnRUaW1lKSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0aXN0aWNzLmlzTmF0aXZlKSB7XG4gICAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MucGxheVRpbWUgPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGNhblJlbG9hZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZCA9ICF0aGlzLl9sYXN0UmVsb2FkVGltZSB8fCBEYXRlLm5vdygpIC0gdGhpcy5fbGFzdFJlbG9hZFRpbWUgPiBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZDtcblxuICAgIHJldHVybiB0aGlzLl92aWRlb0VsZW1lbnQgJiYgdGhpcy5fcGxheWVyICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGggIT09IDAgJiYgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQ7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZElmQWJsZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuUmVsb2FkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSB0aGF0IHdhcyBhY3RpdmUgZm9yIGF0IGxlYXN0IFslc10gc2Vjb25kcycsIHRoaXMuX3N0cmVhbUlkLCBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZCAvIDEwMDApO1xuXG4gICAgdGhpcy5fbGFzdFJlbG9hZFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuX3BsYXllci5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fU0RLVkVSU0lPTl9fOiBzdHJpbmc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnNpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2RlZmF1bHRWZXJzaW9uID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gIHN0YXRpYyBnZXQgc2RrVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gX19TREtWRVJTSU9OX187XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWZXJzaW9uO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeVNlcnZpY2UgZnJvbSAnLi9UZWxlbWV0cnlTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4vVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi4vbG9nZ2VyL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUFwcGVuZGVyIGltcGxlbWVudHMgSUFwcGVuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5U2VydmljZTogVGVsZW1ldHJ5U2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWw7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3k7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQ7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQ7XG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZSA9IG5ldyBUZWxlbWV0cnlTZXJ2aWNlKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgbG9nKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChsb2dMZXZlbCA8IHRoaXMuX3RocmVzaG9sZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UucHVzaChsb2dMZXZlbCwgbWVzc2FnZSwgY2F0ZWdvcnksIGRhdGUpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiB7XG4gIHByaXZhdGUgX3VybCA9ICdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeS9sb2dzJztcbiAgcHJpdmF0ZSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdGhyZXNob2xkID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlVcmwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgPSB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgKyAnL2xvZ3MnO1xuXG4gICAgdGhpcy5fdXJsID0gdGVsZW1ldHJ5VXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuXG5jb25zdCByZXF1ZXN0U2l6ZUxpbWl0ID0gODE5MjtcblxuaW50ZXJmYWNlIElMb2dJdGVtIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgbGV2ZWw6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIF9sb2dzOiBBcnJheTxJTG9nSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgdGltZXN0YW1wOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgbG9nUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXAudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSxcbiAgICAgIGxldmVsOiBMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdLFxuICAgICAgY2F0ZWdvcnksXG4gICAgICBtZXNzYWdlLFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHZlcnNpb246IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb24sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW5cbiAgICB9O1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICB0aGlzLl9sb2dzLnB1c2gobG9nUmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9ncy51bnNoaWZ0KGxvZ1JlY29yZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3MobG9nTWVzc2FnZXM6IEFycmF5PElMb2dJdGVtPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbG9nTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZmV0Y2godGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbG9ncy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMDtcbiAgICBsZXQgc2l6ZU9mTG9nc1RvU2VuZCA9IDA7XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZ2V0TG9nU2l6ZSA9IChsb2c6IElMb2dJdGVtKTogbnVtYmVyID0+IE9iamVjdC52YWx1ZXMobG9nKVxuICAgICAgLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyAoaXRlbSA/IGl0ZW0ubGVuZ3RoIDogMCksIDApO1xuXG4gICAgd2hpbGUgKHRoaXMuX2xvZ3MubGVuZ3RoID4gbnVtYmVyT2ZMb2dzVG9TZW5kICYmIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIHNpemVPZkxvZ3NUb1NlbmQgPCByZXF1ZXN0U2l6ZUxpbWl0KSB7XG4gICAgICBzaXplT2ZMb2dzVG9TZW5kICs9IGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCsrO1xuICAgIH1cblxuICAgIGlmICghbnVtYmVyT2ZMb2dzVG9TZW5kKSB7XG4gICAgICB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZSA9IHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlLnN1YnN0cmluZygwLFxuICAgICAgICBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyAocmVxdWVzdFNpemVMaW1pdCAtIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSkpO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2dNZXNzYWdlcyA9IHRoaXMuX2xvZ3Muc2xpY2UoMCwgbnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHRoaXMuX2xvZ3MgPSB0aGlzLl9sb2dzLnNsaWNlKG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTG9ncyhsb2dNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9ucyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2R1cmF0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZHVyYXRpb24gPSAwKSB7XG4gICAgdGhpcy5fZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgfVxuXG4gIHRvSXNvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2R1cmF0aW9uID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1AwUyc7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOZWdhdGl2ZSA9IHRoaXMuX2R1cmF0aW9uIDwgMDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGlzTmVnYXRpdmUgPyBNYXRoLmFicyh0aGlzLl9kdXJhdGlvbikgOiB0aGlzLl9kdXJhdGlvbjtcbiAgICBsZXQgb2Zmc2V0ID0gTWF0aC5mbG9vcihkdXJhdGlvbik7XG4gICAgY29uc3QgbWlsbGlzZWNvbmRzID0gb2Zmc2V0ICUgMTAwMDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gMTAwMCk7XG5cbiAgICBjb25zdCBzZWNvbmRzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IG1pbnV0ZXMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgaG91cnMgPSBvZmZzZXQgJSAyNDtcbiAgICBjb25zdCBwYXJ0cyA9IFsnUFQnXTtcblxuICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCctJyk7XG4gICAgfVxuXG4gICAgaWYgKGhvdXJzKSB7XG4gICAgICBwYXJ0cy5wdXNoKGhvdXJzICsgJ0gnKTtcbiAgICB9XG5cbiAgICBpZiAobWludXRlcykge1xuICAgICAgcGFydHMucHVzaChtaW51dGVzICsgJ00nKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vjb25kcyB8fCBtaWxsaXNlY29uZHMpIHtcbiAgICAgIHBhcnRzLnB1c2goU3RyaW5nKHNlY29uZHMpKTtcblxuICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICBwYXJ0cy5wdXNoKCcuJyArIHRoaXMucGFkU3RhcnQobWlsbGlzZWNvbmRzLnRvU3RyaW5nKCksIDMsICcwJykpO1xuICAgICAgfVxuXG4gICAgICBwYXJ0cy5wdXNoKCdTJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJycpO1xuICB9XG5cbiAgcGFkU3RhcnQoaXRlbTogc3RyaW5nLCB0YXJnZXRMZW5ndGg6IG51bWJlciwgcGFkU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCA+PiAwO1xuICAgIHBhZFN0cmluZyA9IFN0cmluZygodHlwZW9mIHBhZFN0cmluZyAhPT0gJ3VuZGVmaW5lZCcgPyBwYWRTdHJpbmcgOiAnICcpKTtcblxuICAgIGlmIChpdGVtLmxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gaXRlbS5sZW5ndGg7XG5cbiAgICBpZiAodGFyZ2V0TGVuZ3RoID4gcGFkU3RyaW5nLmxlbmd0aCkge1xuICAgICAgcGFkU3RyaW5nICs9IHBhZFN0cmluZy5yZXBlYXQodGFyZ2V0TGVuZ3RoIC8gcGFkU3RyaW5nLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZFN0cmluZy5zbGljZSgwLCB0YXJnZXRMZW5ndGgpICsgaXRlbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaW1lbnNpb24gaW1wbGVtZW50cyBJQ29tcGFyYWJsZTxEaW1lbnNpb24+IHtcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXI7XG5cbiAgc3RhdGljIGdldCBlbXB0eSgpOiBEaW1lbnNpb24ge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9uKDAsIDApO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IERpbWVuc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLndpZHRoID09PSBvdGhlci53aWR0aCAmJiB0aGlzLmhlaWdodCA9PT0gb3RoZXIuaGVpZ2h0O1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aH14JHt0aGlzLmhlaWdodH1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1N0cmVhbVNldHVwTGlzdGVuZXJ9IGZyb20gJy4uL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTmV0d29ya01vbml0b3IgZnJvbSAnLi4vZG9tL05ldHdvcmtNb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSU5ldHdvcmtTdGF0aXN0aWNzIHtcbiAgcnR0PzogbnVtYmVyO1xuICBlZmZlY3RpdmVUeXBlPzogc3RyaW5nO1xuICBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvblRlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1Nlc3Npb25UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IFNESy5hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29ya01vbml0b3I6IE5ldHdvcmtNb25pdG9yID0gbmV3IE5ldHdvcmtNb25pdG9yKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfbGFzdE5ldHdvcmtTdGF0aXN0aWNzOiBJTmV0d29ya1N0YXRpc3RpY3MgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvcik7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcblxuICAgIGlmICghdGhpcy5fbmV0d29ya01vbml0b3IuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuaXNGb3JlZ3JvdW5kLnN1YnNjcmliZShpc0ZvcmVncm91bmQgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5ydHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1JUVFVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5lZmZlY3RpdmVUeXBlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICB9XG5cbiAgbGlzdGVuT25TdHJlYW1TZXR1cCgpOiBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbVNldHVwTGlzdGVuZXIodGhpcy5fcGFnZUxvYWRUaW1lKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdENoYW5nZSA9IHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogaXNGb3JlZ3JvdW5kID8gTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kIDogTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZUxhc3RDaGFuZ2V9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdBcHBsaWNhdGlvbiBoYXMgZ29uZSBpbnRvIHRoZSBbJXNdIGFmdGVyIFslc10gbXMnLFxuICAgICAgaXNGb3JlZ3JvdW5kID8gJ2ZvcmVncm91bmQnIDogJ2JhY2tncm91bmQnLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VMYXN0Q2hhbmdlKS50b0lzb1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtSVFRVcGRhdGUobmV3UlRUOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZFJ0dCA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQ7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0ID0gbmV3UlRUO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IG5ld1JUVH0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRSdHQgPyB7dWludDY0OiBvbGRSdHR9IDogdW5kZWZpbmVkLFxuICAgICAgcmVzb3VyY2U6ICduYXZpZ2F0b3InXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgUlRUIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdSVFQsXG4gICAgICBvbGRSdHRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZShuZXdOZXR3b3JrVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGROZXR3b3JrVHlwZSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlO1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGUgPSBuZXdOZXR3b3JrVHlwZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuTmV0d29ya1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3TmV0d29ya1R5cGV9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkTmV0d29ya1R5cGUgPyB7c3RyaW5nOiBvbGROZXR3b3JrVHlwZX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBlZmZlY3RpdmUgdHlwZSBoYXMgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld05ldHdvcmtUeXBlLFxuICAgICAgb2xkTmV0d29ya1R5cGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUobmV3Q2FwYWNpdHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkQ2FwYWNpdHkgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkgPSBuZXdDYXBhY2l0eTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge2Zsb2F0OiBuZXdDYXBhY2l0eX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRDYXBhY2l0eSA/IHtmbG9hdDogb2xkQ2FwYWNpdHl9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZG93bmxpbmsgdGhyb3VnaHB1dCBjYXBhY2l0eSBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3Q2FwYWNpdHksXG4gICAgICBvbGRDYXBhY2l0eVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlkZW9UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfbGlzdGVuVG9GaXJzdFRpbWU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvclN0YWxsOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JDb250aW51YXRpb246IChldmVudCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1N0YWxsZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbGFzdFByb2dyZXNzOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvUmVzb2x1dGlvbjogc3RyaW5nO1xuICBwcml2YXRlIF9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcjogRGlzcG9zYWJsZTtcbiAgcHJpdmF0ZSBfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyOiBEaXNwb3NhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUlkOiBzdHJpbmcsIHBhZ2VMb2FkVGltZTogbnVtYmVyLCBjaGFubmVsU3RhcnRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBjaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUgPSAoKTogdm9pZCA9PiB0aGlzLmNhbGxUaW1lVG9GaXJzdEZyYW1lKCk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbkZvclN0YWxsID0gKCk6IHZvaWQgPT4gdGhpcy5vblN0YWxsKCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24gPSAoZXZlbnQpOiB2b2lkID0+IHRoaXMub25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG5cbiAgICB0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcik7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGR1cmF0aW9uU2luY2VQYWdlTG9hZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGxUaW1lVG9GaXJzdEZyYW1lKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG4gICAgdGhpcy5wdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl90aW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gRmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl90aW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX2NoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBDaGFubmVsIGNyZWF0aW9uIHRvIGZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uU3RhbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZpZGVvU3RhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuU3RhbGxlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyBzdGFsbGVkJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pOiB2b2lkIHtcbiAgICBpZiAoIXZpZGVvLmJ1ZmZlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdmlkZW8uYnVmZmVyZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ3BsYXlpbmcnXG4gICAgfHwgYnVmZmVyTGVuZ3RoID4gMCA/IChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnXG4gICAgICB8fCBldmVudC50eXBlID09PSAndGltZXVwZGF0ZScpXG4gICAgICAmJiB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSkgPT09IHRoaXMuX2xhc3RQcm9ncmVzcyA6IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX3ZpZGVvU3RhbGxlZCB8fCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlU3RvcCA9IERhdGUubm93KCkgLSB0aGlzLl92aWRlb1N0YWxsZWQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkJ1ZmZlcmluZyxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlU3RvcH0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHJlY292ZXJlZCBmcm9tIHN0YWxsIGFmdGVyIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlU3RvcCkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhuZXdSZXNvbHV0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdSZXNvbHV0aW9ufSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA/IHtzdHJpbmc6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbn0gOiB1bmRlZmluZWQsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA9IG5ld1Jlc29sdXRpb247XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbnZhciBydW50aW1lID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgZXhwb3J0cy5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yLCBQcm9taXNlSW1wbCkge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAvLyBJZiBhIHJlamVjdGVkIFByb21pc2Ugd2FzIHlpZWxkZWQsIHRocm93IHRoZSByZWplY3Rpb24gYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgaGFuZGxlZCB0aGVyZS5cbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlSW1wbChmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBleHBvcnRzLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBleHBvcnRzLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QsIFByb21pc2VJbXBsKSB7XG4gICAgaWYgKFByb21pc2VJbXBsID09PSB2b2lkIDApIFByb21pc2VJbXBsID0gUHJvbWlzZTtcblxuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSxcbiAgICAgIFByb21pc2VJbXBsXG4gICAgKTtcblxuICAgIHJldHVybiBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAvLyBOb3RlOiBbXCJyZXR1cm5cIl0gbXVzdCBiZSB1c2VkIGZvciBFUzMgcGFyc2luZyBjb21wYXRpYmlsaXR5LlxuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBleHBvcnRzLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGVcbiAgLy8gb3Igbm90LCByZXR1cm4gdGhlIHJ1bnRpbWUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGRlY2xhcmUgdGhlIHZhcmlhYmxlXG4gIC8vIHJlZ2VuZXJhdG9yUnVudGltZSBpbiB0aGUgb3V0ZXIgc2NvcGUsIHdoaWNoIGFsbG93cyB0aGlzIG1vZHVsZSB0byBiZVxuICAvLyBpbmplY3RlZCBlYXNpbHkgYnkgYGJpbi9yZWdlbmVyYXRvciAtLWluY2x1ZGUtcnVudGltZSBzY3JpcHQuanNgLlxuICByZXR1cm4gZXhwb3J0cztcblxufShcbiAgLy8gSWYgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlLCB1c2UgbW9kdWxlLmV4cG9ydHNcbiAgLy8gYXMgdGhlIHJlZ2VuZXJhdG9yUnVudGltZSBuYW1lc3BhY2UuIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcgZW1wdHlcbiAgLy8gb2JqZWN0LiBFaXRoZXIgd2F5LCB0aGUgcmVzdWx0aW5nIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZVxuICAvLyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIHZhcmlhYmxlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLlxuICB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiID8gbW9kdWxlLmV4cG9ydHMgOiB7fVxuKSk7XG5cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICAvLyBUaGlzIG1vZHVsZSBzaG91bGQgbm90IGJlIHJ1bm5pbmcgaW4gc3RyaWN0IG1vZGUsIHNvIHRoZSBhYm92ZVxuICAvLyBhc3NpZ25tZW50IHNob3VsZCBhbHdheXMgd29yayB1bmxlc3Mgc29tZXRoaW5nIGlzIG1pc2NvbmZpZ3VyZWQuIEp1c3RcbiAgLy8gaW4gY2FzZSBydW50aW1lLmpzIGFjY2lkZW50YWxseSBydW5zIGluIHN0cmljdCBtb2RlLCB3ZSBjYW4gZXNjYXBlXG4gIC8vIHN0cmljdCBtb2RlIHVzaW5nIGEgZ2xvYmFsIEZ1bmN0aW9uIGNhbGwuIFRoaXMgY291bGQgY29uY2VpdmFibHkgZmFpbFxuICAvLyBpZiBhIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGZvcmJpZHMgdXNpbmcgRnVuY3Rpb24sIGJ1dCBpbiB0aGF0IGNhc2VcbiAgLy8gdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlIGFjY2lkZW50YWwgc3RyaWN0IG1vZGUgcHJvYmxlbS4gSWZcbiAgLy8geW91J3ZlIG1pc2NvbmZpZ3VyZWQgeW91ciBidW5kbGVyIHRvIGZvcmNlIHN0cmljdCBtb2RlIGFuZCBhcHBsaWVkIGFcbiAgLy8gQ1NQIHRvIGZvcmJpZCBGdW5jdGlvbiwgYW5kIHlvdSdyZSBub3Qgd2lsbGluZyB0byBmaXggZWl0aGVyIG9mIHRob3NlXG4gIC8vIHByb2JsZW1zLCBwbGVhc2UgZGV0YWlsIHlvdXIgdW5pcXVlIHByZWRpY2FtZW50IGluIGEgR2l0SHViIGlzc3VlLlxuICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0aWYoX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSkge1xuXHRcdHJldHVybiBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiBtb2R1bGVbJ2RlZmF1bHQnXSA6XG5cdFx0KCkgPT4gbW9kdWxlO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5yZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL3Nkay9mdWxsL2luZGV4LnRzXCIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==