@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();
@@ -8577,6 +8715,10 @@ var RealTimeStream = /*#__PURE__*/function () {
8577
8715
  var discoveryCompleted = false;
8578
8716
  var candidates = [];
8579
8717
 
8718
+ if (!_this._channelContext.peerConnection.value) {
8719
+ _this._channelContext.peerConnection.value = peerConnection;
8720
+ }
8721
+
8580
8722
  peerConnection.onicecandidate = function (e) {
8581
8723
  if (_this._channelContext.stream.value !== stream) {
8582
8724
  return;
@@ -9461,7 +9603,7 @@ var VersionManager = /*#__PURE__*/function () {
9461
9603
  key: "sdkVersion",
9462
9604
  get: function get() {
9463
9605
  try {
9464
- return "2022-01-10T19:09:12.604Z (2022.0.2)";
9606
+ return "2022-05-05T18:02:55.793Z (2022.0.5)";
9465
9607
  } catch (e) {
9466
9608
  return this._defaultVersion;
9467
9609
  }
@@ -11235,4 +11377,4 @@ try {
11235
11377
  /******/ })()
11236
11378
  ;
11237
11379
  });
11238
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vUHJpdmFjeU1vZGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZUxpc3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvU3RyaW5ncy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9hc3NlcnRVbnJlYWNoYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0FwcGVuZGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0NvbnNvbGVBcHBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckRlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nVGhyZXNob2xkLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZUhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1NkcFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1JlYWRPbmx5U3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvU3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvU0RLLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvVGVsZW1ldHJ5VXJsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbFN0YXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVNb2RlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlU3RhdGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9FbmRQb2ludC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2VkZ2VBdXRoL0VkZ2VBdXRoLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9DaHVua2VkU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0hsc1BsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9MaXZlU3RyZWFtaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL05ldHdvcmtTdGF0ZXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvUmVhbFRpbWVTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvU2hha2FQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvU3RyZWFtRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9XZWJQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0R1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9EaW1lbnNpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3N0YXJ0dXAiXSwibmFtZXMiOlsiZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQiLCJBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIkRpc3Bvc2FibGVMaXN0IiwiRGF0ZSIsIm5vdyIsIl9pc0ZvcmVncm91bmQiLCJTdWJqZWN0IiwiX3JlYWRPbmx5SXNGb3JlZ3JvdW5kIiwiUmVhZE9ubHlTdWJqZWN0IiwiZGV0ZWN0VGFiRm9jdXNDaGFuZ2UiLCJfdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlIiwiX2Rpc3Bvc2FibGVzIiwiZGlzcG9zZSIsImhpZGRlbiIsInZpc2liaWxpdHlDaGFuZ2UiLCJkb2N1bWVudCIsIm1zSGlkZGVuIiwid2Via2l0SGlkZGVuIiwiaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSIsImlzRm9yZWdyb3VuZCIsInNldEZvY3VzU3RhdGUiLCJhZGRFdmVudExpc3RlbmVyIiwiYWRkIiwiRGlzcG9zYWJsZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzIiwiY2FsbCIsIl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwiLCJ3aW5kb3ciLCJzZXRJbnRlcnZhbCIsImhhc0ZvY3VzIiwiY2xlYXJJbnRlcnZhbCIsInZhbHVlIiwiQnJvd3NlckRldGVjdG9yIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibWF0Y2giLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiIsImJyb3dzZXJOYW1lTGlzdCIsInNwbGl0IiwiYnJvd3NlclZlcnNpb25MaXN0IiwiZnVsbFZlcnNpb24iLCJOdW1iZXIiLCJtc2llIiwiaW5kZXhPZiIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwidHJpZGVudCIsInZlcnNpb24iLCJfYnJvd3Nlck5hbWUiLCJfYnJvd3Nlck1ham9yVmVyc2lvbiIsIl9pc0Nocm9tZTY5IiwiX2lzQ2hyb21lNzAiLCJfaXNDaHJvbWU3MSIsIl9pc0Nocm9tZTcyIiwiX2lzQ2hyb21lNzQiLCJfaXNDaHJvbWU3NSIsIl9pc0Nocm9tZTc2IiwiX2lzQ2hyb21lNzciLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsInBhcnNlQnJvd3Nlck5hbWUiLCJwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24iLCJpbmNsdWRlcyIsIkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJuYW1lIiwicmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZSIsInJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUiLCJkZWZhdWx0U3RyaW5nVmFsdWUiLCJ2YWx1ZUZyb21VcmkiLCJkZWZhdWx0Qm9vbGVhblZhbHVlIiwibWV0YVZhbHVlIiwicXVlcnlTZWxlY3RvciIsImdldEF0dHJpYnV0ZSIsInZhbHVlVVJJUGFyYW1ldGVyTmFtZSIsIlVSTFNlYXJjaFBhcmFtcyIsImxvY2F0aW9uIiwic2VhcmNoIiwiZ2V0IiwidW5kZWZpbmVkIiwiVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIiwiVGVsZW1ldHJ5RGVmYXVsdCIsIkxvZ2dpbmdMZXZlbE1hcHBpbmciLCJMb2dnZXJEZWZhdWx0cyIsIk5ldHdvcmtNb25pdG9yIiwiaXNTdXBwb3J0ZWQiLCJzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMiLCJ1cGRhdGVTdGF0aXN0aWNzIiwiZG93bmxpbmsiLCJkb3dubGlua01heCIsImVmZmVjdGl2ZVR5cGUiLCJ0eXBlIiwicnR0IiwibGlzdGVuZXIiLCJfcnR0IiwiZ2V0Um91bmRUcmlwVGltZSIsIl9lZmZlY3RpdmVUeXBlIiwiZ2V0RWZmZWN0aXZlVHlwZSIsIl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiX2lzU3VwcG9ydGVkIiwiUHJpdmFjeU1vZGUiLCJfaXNQcml2YXRlIiwiX19QUklWQUNZX01PREVfXyIsImUiLCJhcHBseUlzUHJpdmF0ZSIsIlN0cmVhbVNldHVwTGlzdGVuZXIiLCJwYWdlTG9hZFRpbWUiLCJMb2dnZXJGYWN0b3J5IiwiU0RLIiwiX3N0YXJ0VGltZSIsIl9wYWdlTG9hZFRpbWUiLCJzdHJlYW1JZCIsInJlY29yZFN0cmVhbU1ldHJpYyIsIk1ldHJpY3NUeXBlIiwibWV0cmljVHlwZSIsIl9tZXRyaWNTdWJtaXR0ZWQiLCJzZXR1cFRpbWUiLCJtZXRyaWNOYW1lIiwiTWV0cmljVHlwZSIsImdldE5hbWUiLCJtZXRyaWNzU2VydmljZSIsInB1c2giLCJydW50aW1lIiwidWludDY0IiwiX2xvZ2dlciIsImluZm8iLCJEdXJhdGlvbnMiLCJ0b0lzb1N0cmluZyIsImRpc3Bvc2FibGUiLCJfZGlzcG9zZWQiLCJfZGlzcG9zYWJsZSIsIl9saXN0IiwiZm9yRWFjaCIsImxlbmd0aCIsIlN0cmluZ3MiLCJyYW5kb20xM0NoYXJhY3RlcnMiLCJNYXRoIiwicmFuZG9tIiwidG9TdHJpbmciLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiRXJyb3IiLCJhc3NlcnRVbnJlYWNoYWJsZSIsIngiLCJBcHBlbmRlcnMiLCJhcHBlbmRlciIsIl9hcHBlbmRlcnMiLCJpdGVtcyIsIml0ZW0iLCJDb25zb2xlQXBwZW5kZXIiLCJsb2dMZXZlbCIsIm1lc3NhZ2UiLCJjYXRlZ29yeSIsImRhdGUiLCJfdGhyZXNob2xkIiwiZnVsbE1lc3NhZ2UiLCJ0b0lTT1N0cmluZyIsIkxvZ2dpbmdMZXZlbCIsImNvbnNvbGUiLCJsb2ciLCJlcnJvciIsInRocmVzaG9sZCIsIkxvZ2dlciIsIlRyYWNlIiwiYXJncyIsIkRlYnVnIiwiSW5mbyIsIldhcm4iLCJGYXRhbCIsImxldmVsIiwicmVwbGFjZVBsYWNlaG9sZGVycyIsInJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmciLCJpbmRleCIsInJlcGxhY2VBcmd1bWVudCIsInNwbGljZSIsInN0cmluZ2lmeSIsImFjY3VtdWxhdG9yIiwiY3VycmVudFZhbHVlIiwiYXJyYXkiLCJzdGFjayIsImFyZyIsImNhY2hlIiwiSlNPTiIsImtleSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX2NhdGVnb3J5IiwiYXBwZW5kZXJzIiwibG9nZ2VyIiwiX2xvZ2dlcnMiLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwiZ2V0U3RyaW5nVmFsdWUiLCJzZXRUaHJlc2hvbGQiLCJhcHBseUFwcGVuZGVyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJUZWxlbWV0cnlBcHBlbmRlciIsIkxvZ2dpbmdUaHJlc2hvbGQiLCJUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImxvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJUZWxlbWV0cnlMZXZlbCIsIk1ldHJpY3NDb25maWd1cmF0aW9uIiwiX3VybCIsInVybCIsIm1ldHJpY3NVcmwiLCJVUkwiLCJwYXRobmFtZSIsIl9lbnZpcm9ubWVudCIsImVudmlyb25tZW50IiwiX3RlbmFuY3kiLCJ0ZW5hbmN5IiwiX3Nlc3Npb25JZCIsInNlc3Npb25JZCIsIk1ldHJpY3NGYWN0b3J5IiwibWV0cmljc1NlcnZpY2VzIiwiX21ldHJpY3NTZXJ2aWNlcyIsIm1ldHJpY3NDb25maWd1cmF0aW9uIiwiVGVsZW1ldHJ5VXJsIiwiRW52aXJvbm1lbnQiLCJNZXRyaWNzU2VydmljZSIsInRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwicmVxdWVzdFNpemVMaW1pdCIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwibWV0cmljIiwicHJldmlvdXNWYWx1ZSIsInJlc291cmNlIiwia2luZCIsImdldFRlbGVtZXRyeUxldmVsIiwibWV0cmljUmVjb3JkIiwidGltZXN0YW1wIiwiZnVsbFF1YWxpZmllZE5hbWUiLCJfZG9tYWluIiwiVmVyc2lvbk1hbmFnZXIiLCJpZ25vcmVkIiwic2VuZE1ldHJpY3NJZkFibGUiLCJtZXRyaWNzTWVzc2FnZXMiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwicmVjb3JkcyIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsIl9pc1NlbmRpbmciLCJzbGljZSIsInNlbmRNZXRyaWNzIiwidGhlbiIsInJlc3BvbnNlIiwiY2F0Y2giLCJ0ZWxlbWV0cnlMZXZlbFR5cGUiLCJQcm9taXNlIiwiY2FsbGJhY2siLCJUeXBlRXJyb3IiLCJfc3RhdGUiLCJfaGFuZGxlZCIsIl92YWx1ZSIsIl9kZWZlcnJlZHMiLCJkb1Jlc29sdmUiLCJkb25lIiwicHJvbWlzZVJlc29sdmUiLCJyZWFzb24iLCJwcm9taXNlUmVqZWN0IiwibmV3VmFsdWUiLCJwcm9taXNlIiwiZmluYWxlIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfaW1tZWRpYXRlIiwiX3VuaGFuZGxlZFJlamVjdGlvbiIsImkiLCJsZW4iLCJoYW5kbGUiLCJkZWZlcnJlZCIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInJlc3VsdCIsImFyciIsInJlc29sdmUiLCJyZWplY3QiLCJpc0FycmF5IiwicHJvdG90eXBlIiwicmVtYWluaW5nIiwibWFuYWdlUmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsIl8iLCJzZXRUaW1lb3V0Iiwid2FybiIsIlByb21pc2VIYW5kbGVyIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiRmVhdHVyZUVuYWJsZW1lbnQiLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY2FjaGVkIiwiY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsInBlZXJDb25uZWN0aW9uRmFjdG9yeSIsImNyZWF0ZVBlZXJDb25uZWN0aW9uIiwicGVlckNvbm5lY3Rpb24iLCJzdXBwb3J0c0FkZFRyYW5zY2VpdmVyIiwiYXVkaW9UcmFuc2NlaXZlciIsImFkZFRyYW5zY2VpdmVyIiwiZGlyZWN0aW9uIiwidmlkZW9UcmFuc2NlaXZlciIsImNyZWF0ZU9mZmVyIiwib2ZmZXJUb1JlY2VpdmVBdWRpbyIsIm9mZmVyVG9SZWNlaXZlVmlkZW8iLCJsb2NhbE9mZmVyIiwiaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZyIsInVwZGF0ZVN0YXRpc3RpY1RpbWVPdXQiLCJSdGNDb25uZWN0aW9uTW9uaXRvciIsIm1lZGlhU3RyZWFtIiwiZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl9wZWVyQ29ubmVjdGlvbiIsIl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3RyYWNrc1RvTW9uaXRvciIsImdldFRyYWNrcyIsIm1hcCIsInRyYWNrIiwicGFyc2VkU0RQIiwiU2RwUGFyc2VyIiwiY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIiwic2RwIiwiX2VzdGltYXRlZEF1ZGlvQ29kZWMiLCJhdWRpb0NvZGVjIiwiX2VzdGltYXRlZFZpZGVvQ29kZWMiLCJ2aWRlb0NvZGVjIiwidXBkYXRlU3RhdGlzdGljIiwiX2lzTW9uaXRvclJ1bm5pbmciLCJfdXBkYXRlVGltZU91dCIsImNsZWFyVGltZW91dCIsInVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImdldEtpbmRGb3JTYWZhcmkxMSIsImlkIiwiZ2V0U3RhdHMiLCJzdGF0cyIsInJ0Y1N0YXRzIiwicm91bmRUcmlwVGltZSIsImN1cnJlbnRSb3VuZFRyaXBUaW1lIiwibWVkaWFUeXBlIiwiY29kZWMiLCJjb2RlY0lkIiwibWltZVR5cGUiLCJzc3JjIiwiYnl0ZXNSZWNlaXZlZCIsInBhY2tldHNMb3N0IiwicGFja2V0c1JlY2VpdmVkIiwiZ2V0Q29kZWNCeVR5cGUiLCJfcnRjU3RhdGlzdGljIiwidmlkZW8iLCJmcmFtZXNEZWNvZGVkIiwiZ2V0U3RhdHNMZWdhY3kiLCJyZXBvcnQiLCJuYW1lcyIsInN0YXQiLCJfc2RwIiwiX2F1ZGlvQ29kZWMiLCJhcHBseUNvZGVjIiwiX3ZpZGVvQ29kZWMiLCJzcGxpdFNkcCIsInVzZWRDb2RlY0xpbmUiLCJmaW5kIiwidXNlZENvZGVjIiwiY29kZWNOYW1lIiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uIiwiY29uZmlndXJhdGlvbiIsIndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIiwiUlRDUGVlckNvbm5lY3Rpb24iLCJvcHRpb25zIiwiY3JlYXRlQW5zd2VyIiwiZGVzY3JpcHRpb24iLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiaGFzQ3J5cHRvIiwic2V0UmVtb3RlRGVzY3JpcHRpb24iLCJzZWxlY3RvciIsImdldENvbmZpZ3VyYXRpb24iLCJzZXRDb25maWd1cmF0aW9uIiwiY2xvc2UiLCJjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiIsImljZUNvbm5lY3Rpb25TdGF0ZSIsImhhbmRsZXIiLCJvbnRyYWNrIiwib25pY2VjYW5kaWRhdGUiLCJvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJzdWJqZWN0IiwiX3N1YmplY3QiLCJzdWJzY3JpYmUiLCJEaXNwb3NhYmxlTGlzdGVuZXIiLCJsaXN0ZW5lcnMiLCJpZHgiLCJfbGlzdGVuZXJzIiwiY2hhbmdlZCIsImNvbXBhcmFibGUiLCJlcXVhbHMiLCJiYXNlVVJMIiwib3JpZ2luIiwidGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImNsaWVudFNlc3Npb25JZCIsImlnbm9yZWRFbnZpcm9ubWVudCIsImlnbm9yZWREaXNjb3ZlcnlVcmkiLCJ0ZWxlbWV0cnlVcmwiLCJ0ZWxlbWV0cnlBcHBlbmRlciIsInJlbW92ZSIsImlnbm9yZWRUZW5hbmN5IiwiX21ldHJpY3NTZXJ2aWNlIiwiRGlzY292ZXJ5VXJpIiwiaWdub3JlZFRlbGVtZXRyeUxldmVsIiwiX3RlbGVtZXRyeUxldmVsIiwiX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSIsImdldEJvb2xlYW5WYWx1ZSIsIl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJkaXNjb3ZlcnlVcmkiLCJnZXRUZWxlbWV0cnlVcmwiLCJjaGFubmVsVG9rZW4iLCJwYXJzZWRUb2tlbiIsIkVkZ2VBdXRoIiwidXJpVmFsdWUiLCJiYXNlVVJJVmFsdWUiLCJfaW5pdGlhbGl6ZWQiLCJfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfcGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiY29uc29sZUxvZ2dpbmdMZXZlbCIsImNvbnNvbGVBcHBlbmRlciIsImF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwiX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwid2ViUGxheWVyTG9hZGVyIiwiX3dlYlBsYXllckxvYWRlciIsInNoYWthUGxheWVyTG9hZGVyIiwiX3NoYWthUGxheWVyTG9hZGVyIiwiaGxzSnNMb2FkZXIiLCJfaGxzSnNMb2FkZXIiLCJfc2VuZExvY2FsQ2FuZGlkYXRlcyIsIl9jbGllbnRTZXNzaW9uSWQiLCJfbG9hZGVkVGltZXN0YW1wIiwiX3JlYWRPbmx5SW5pdGlhbGl6ZWQiLCJfcmVhZE9ubHlEaXNjb3ZlcnlVcmkiLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJfdGVsZW1ldHJ5VXJsIiwiX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJyZXRyaWVzQW1vdW50IiwiYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uIiwiYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJpbml0Iiwic2VnbWVudHMiLCJwcm90b2NvbCIsInVuc2hpZnQiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJkZWZhdWx0VGFyZ2V0TGFnIiwiZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uIiwiYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZHMiLCJmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIm1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwic3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwiQ2hhbm5lbCIsInZpZGVvRWxlbWVudCIsInRva2VuIiwidGFyZ2V0TGFnIiwiX2NvbnRleHQiLCJDaGFubmVsQ29udGV4dCIsIl9jaGFubmVsU3RhcnRUaW1lIiwiX3JlYWRPbmx5VmlkZW9FbGVtZW50IiwiX3JlYWRPbmx5VG9rZW4iLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiIsIl9yZWFkT25seVN0YXRlIiwic3RhdGUiLCJfcmVhZE9ubHlBdXRvTXV0ZWQiLCJhdXRvTXV0ZWQiLCJfcmVhZE9ubHlBdXRvUGF1c2VkIiwiYXV0b1BhdXNlZCIsIl9yZWFkT25seVRva2VuRXhwaXJpbmciLCJ0b2tlbkV4cGlyaW5nIiwiX3JlYWRPbmx5QXV0aG9yaXplZCIsImF1dGhvcml6ZWQiLCJfcmVhZE9ubHlPbmxpbmUiLCJvbmxpbmUiLCJfcmVhZE9ubHlMb2FkaW5nIiwibG9hZGluZyIsIl9yZWFkT25seVBsYXlpbmciLCJwbGF5aW5nIiwiX3JlYWRPbmx5U3RhbmRieSIsInN0YW5kYnkiLCJfcmVhZE9ubHlTdG9wcGVkIiwic3RvcHBlZCIsIl9yZWFkT25seVRhcmdldExhZyIsIl9yZWFkT25seUxhZyIsImxhZyIsIl9yZWFkT25seUJpdHJhdGVMaW1pdCIsImJpdHJhdGVMaW1pdCIsIl9yZWFkT25seVJlc29sdXRpb24iLCJyZXNvbHV0aW9uIiwiX3JlYWRPbmx5RmFpbHVyZUNvdW50IiwiZmFpbHVyZUNvdW50IiwiX3JlYWRPbmx5RW5kUG9pbnQiLCJlbmRQb2ludCIsIl9yZWFkT25seVN0cmVhbSIsInN0cmVhbSIsIl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MiLCJydGNTdGF0aXN0aWNzIiwiX3JlYWRPbmx5TWVkaWFTdHJlYW0iLCJzZXNzaW9uVGVsZW1ldHJ5IiwiU2Vzc2lvblRlbGVtZXRyeSIsImNoYW5uZWxEaXNwb3NhYmxlcyIsIl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIiLCJoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCIsInJlbmRlcmVyRGlzcG9zYWJsZXMiLCJ2aWRlb1RlbGVtZXRyeSIsImRhdGFzZXQiLCJWaWRlb1RlbGVtZXRyeSIsInNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUiLCJzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmciLCJDaGFubmVsU3RhdGUiLCJyZXN0YXJ0QWZ0ZXJTdG9wIiwiY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0Iiwib25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzIiwiZWxhcHNlZEluTWlsbGlzZWNvbmRzIiwiY2hhbm5lbEluaXRpYWxpemF0aW9uIiwiZ2V0VGltZSIsImxpbWl0Qml0cmF0ZSIsInN0YXJ0Iiwid2lkdGgiLCJ2aWRlb1dpZHRoIiwiaGVpZ2h0IiwidmlkZW9IZWlnaHQiLCJEaW1lbnNpb24iLCJiaXRyYXRlSW5CaXRzUGVyU2Vjb25kIiwic3RhdHVzIiwicGF1c2UiLCJzcmNPYmplY3QiLCJjbGVhblVwUmVzb3VyY2VzIiwicGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJtdXRlZCIsInN0b3AiLCJpc0Rpc3Bvc2VkIiwibGlzdGVuT25TdHJlYW1TZXR1cCIsInVyaSIsImdldFVyaSIsInN0cmVhbVBsYXllciIsIlN0cmVhbUZhY3RvcnkiLCJoYW5kbGVTdHJlYW1GYWlsdXJlIiwiZmFpbCIsImZpbmFsbHkiLCJ0aW1lb3V0SWQiLCJnZXRSZXRyeUludGVydmFsIiwiZGlzcG9zYWJsZXMiLCJtaW4iLCJwb3ciLCJtYXgiLCJkZXN0cm95U3RyZWFtIiwicGxheVByb21pc2UiLCJwbGF5IiwiaGFzQXVkaW9UcmFjayIsImZpbHRlciIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIiwicGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsIkNoYW5uZWxzIiwiZGVmYXVsdERpc2NvdmVyeVVyaSIsIkJpdHJhdGVNb2RlTWFwcGluZyIsImJpdHJhdGVNb2RlIiwiQml0cmF0ZVN0YXRlTWFwcGluZyIsImJpdHJhdGVTdGF0ZSIsImRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwiLCJEaXNjb3ZlcnkiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwiX2NhY2hlIiwiZGlzY292ZXJ5U2VydmljZSIsIkRpc2NvdmVyeVNlcnZpY2UiLCJjYWNoZWRWYWx1ZSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwicHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkiLCJkZWZhdWx0VGltZW91dCIsIl91cmkiLCJ0aW1lb3V0IiwicmFjZSIsIm9rIiwidGV4dCIsImFzU3RyaW5nIiwiZW5kUG9pbnRzIiwiRW5kUG9pbnQiLCJkaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsIm5ldmVyUmVzb2x2ZSIsInBpbmciLCJ0aW1lIiwic2RrVmVyc2lvbiIsIl9kaXNjb3ZlcnlVcmkiLCJhcGlWZXJzaW9uIiwiX3RpbWVvdXQiLCJidWlsZFBpbmdVcmwiLCJmaW5pc2hlZCIsIl9yb3VuZFRyaXBUaW1lIiwibG9jYWxTZXNzaW9uRGVzY3JpcHRpb24iLCJhcHBsaWNhdGlvbklkIiwiYnVpbGRVcmwiLCJjbGllbnRWZXJzaW9uIiwiYm9keVdpdGhPZmZlciIsImVkZ2VBdXRoVG9rZW4iLCJzZXNzaW9uRGVzY3JpcHRpb24iLCJjb252ZXJ0UlRDU2RwVHlwZVRvU2RwVHlwZSIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uIiwiYm9keVdpdGhvdXRPZmZlciIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb24iLCJodHRwUmVzcG9uc2UiLCJtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsInN1YnNjcmliZVJlc3BvbnNlIiwiZGVidWciLCJzaGFyZWRTZWNyZXQiLCJtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwibWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMiLCJjYW5kaWRhdGVzIiwiZGlzY292ZXJ5Q29tcGxldGVkIiwibWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsImFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJkZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJwYXRoIiwicGF0aEFzQXJyYXkiLCJjb25jYXQiLCJqc29uIiwicnRjQ29uZmlndXJhdGlvbiIsImJ1bmRsZVBvbGljeSIsImljZUNhbmRpZGF0ZVBvb2xTaXplIiwiaWNlU2VydmVycyIsInVybHMiLCJ1c2VybmFtZSIsImNyZWRlbnRpYWwiLCJpY2VUcmFuc3BvcnRQb2xpY3kiLCJwZWVySWRlbnRpdHkiLCJydGNwTXV4UG9saWN5IiwiY29udmVydElTZXNzaW9uRGVzY3JpcHRpb25Ub1JUQ1Nlc3Npb25EZXNjcmlwdGlvbiIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UiLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UiLCJydGNTZXNzaW9uRGVzY3JpcHRpb24iLCJlZGdlQXV0aFRva2VuUHJlZml4IiwiaXNWYWxpZFRva2VuIiwiZW5jb2RlZEVkZ2VBdXRoVG9rZW4iLCJhdG9iIiwic3Vic3RyIiwicGFyc2UiLCJDaHVua2VkU3RyZWFtIiwiY2hhbm5lbENvbnRleHQiLCJfY2hhbm5lbENvbnRleHQiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsImFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCIsIm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsImFwcGx5U3RhdHVzIiwib2ZmZXJTZHAiLCJvcmlnaW5TdGFydFRpbWUiLCJMaXZlU3RyZWFtaW5nIiwicGxheWVyIiwibW9uaXRvciIsIl9tb25pdG9yRGlzcG9zYWJsZXMiLCJuZXdTdHJlYW1TdGF0aXN0aWNzIiwiX3N0cmVhbVN0YXRpc3RpY3MiLCJjdXJyZW50VGltZSIsImRhdGFCdWZmZXJlZCIsIl9tb25pdG9yRmFpbHVyZUNvdW50IiwicGF1c2VkIiwiSGxzUGxheWVyIiwibWFuaWZlc3RVUkkiLCJfdmlkZW9FbGVtZW50IiwiX2tpbmQiLCJfc3RyZWFtSWQiLCJfbWFuaWZlc3RVUkkiLCJlbmNvZGVVUkkiLCJyZXBsYWNlIiwiX29wdGlvbnMiLCJfcGxheWVyIiwiZW5hYmxlV29ya2VyIiwibWF4QnVmZmVyTGVuZ3RoIiwibGl2ZUJhY2tCdWZmZXJMZW5ndGgiLCJsaXZlU3luY0R1cmF0aW9uIiwibGl2ZUR1cmF0aW9uSW5maW5pdHkiLCJsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uIiwiSW5maW5pdHkiLCJoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2QiLCJsb2FkU291cmNlIiwiYXR0YWNoTWVkaWEiLCJjYW5QbGF5VHlwZSIsInNyYyIsIm5ldHdvcmtTdGF0ZSIsIk5ldHdvcmtTdGF0ZXMiLCJOZXR3b3JrTm9Tb3VyY2UiLCJzdGF0aXN0aWNzIiwibWVkaWEiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImJ1ZmZlcmVkIiwiZW5kIiwic3RyZWFtQ29udHJvbGxlciIsInRydWVDdXJyZW50VGltZSIsImRlc3Ryb3kiLCJfaGxzUGxheWVyIiwiX3NoYWthIiwiX3BoZW5peFdlYlBsYXllciIsImxvYWRlZCIsIl9wZW5kaW5nIiwiUGxheWVyIiwiZGFzaE1hbmlmZXN0VXJsTWF0Y2giLCJobHNNYW5pZmVzdFVybE1hdGNoIiwibWFuaWZlc3RVcmwiLCJwbGF5bGlzdFVybCIsInByZWZlck5hdGl2ZSIsInNob3VsZFVzZU5hdGl2ZUhscyIsIldlYlBsYXllciIsIlNoYWthUGxheWVyIiwiaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwiLCJkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0IiwiUmVhbFRpbWVTdHJlYW0iLCJhbGwiLCJzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24iLCJzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24iLCJhcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJzdWJtaXRDYW5kaWRhdGVzVGltZW91dCIsImNhbmNlbERpc2NvdmVyeSIsImNhbmRpZGF0ZSIsImFkZEljZUNhbmRpZGF0ZXMiLCJyZXRyeUNhbGxiYWNrIiwib25MaW5lIiwicmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJtZWRpYVN0cmVhbVByb21pc2UiLCJzdHJlYW1zIiwidHJhY2tMaXN0ZW5lciIsImFuc3dlciIsIm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwic3VjY2VzcyIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwicnRjU3RhdGlzdGljIiwicnRjVmlkZW9TdGF0aXN0aWMiLCJydGNBdWRpb1N0YXRpc3RpYyIsImF1ZGlvIiwiYXVkaW9UcmFja0ZhaWxlZCIsInZpZGVvVHJhY2tGYWlsZWQiLCJvcHRpb25hbFBlZXJDb25uZWN0aW9uIiwidHJ1bmNhdGVJY2VTZXJ2ZXJzIiwibmV3UnRjQ29uZmlndXJhdGlvbiIsImljZVJlc3RhcnQiLCJvZmZlciIsInBsYXllck9wdGlvbnMiLCJhYnIiLCJkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGUiLCJtYW5pZmVzdCIsInJldHJ5UGFyYW1ldGVycyIsInN0cmVhbWluZyIsInJlYnVmZmVyaW5nR29hbCIsImJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJCZWhpbmQiLCJtYXhBdHRlbXB0cyIsImJhY2tvZmZGYWN0b3IiLCJsb2FkUGxheWVyIiwiZXN0aW1hdGVkQmFuZHdpZHRoIiwicGxheVRpbWUiLCJ1bmxvYWQiLCJwbGF5ZXJDb25maWciLCJjb25maWd1cmUiLCJsb2FkIiwiY29kZSIsImlzUnRtcCIsImNhcGFiaWxpdGllcyIsImlzU3RyZWFtaW5nIiwiYmFuZHdpZHRoVG9TdGFydEF0IiwibWluVGltZUJlZm9yZU5leHRSZWxvYWQiLCJlcnJvck9iamVjdCIsImNhblJlbG9hZCIsInNldmVyaXR5IiwicmVsb2FkSWZBYmxlIiwiaXNOYXRpdmUiLCJkZWxpdmVyeVR5cGUiLCJoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZCIsIl9sYXN0UmVsb2FkVGltZSIsInJlbG9hZCIsIl9fU0RLVkVSU0lPTl9fIiwiX2RlZmF1bHRWZXJzaW9uIiwiX3RlbGVtZXRyeVNlcnZpY2UiLCJUZWxlbWV0cnlTZXJ2aWNlIiwibG9nUmVjb3JkIiwiX2xvZ3MiLCJzZW5kTG9nc0lmQWJsZSIsImxvZ01lc3NhZ2VzIiwibnVtYmVyT2ZMb2dzVG9TZW5kIiwic2l6ZU9mTG9nc1RvU2VuZCIsImdldExvZ1NpemUiLCJzdW0iLCJzZW5kTG9ncyIsImR1cmF0aW9uIiwiX2R1cmF0aW9uIiwiaXNOZWdhdGl2ZSIsImFicyIsIm9mZnNldCIsImZsb29yIiwibWlsbGlzZWNvbmRzIiwic2Vjb25kcyIsIm1pbnV0ZXMiLCJob3VycyIsInBhcnRzIiwiU3RyaW5nIiwicGFkU3RhcnQiLCJ0YXJnZXRMZW5ndGgiLCJwYWRTdHJpbmciLCJyZXBlYXQiLCJvdGhlciIsIl9uZXR3b3JrTW9uaXRvciIsInJlY29yZEZvcmVncm91bmRDaGFuZ2UiLCJyZWNvcmROZXR3b3JrUlRUVXBkYXRlIiwicmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUiLCJkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsInJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSIsInRpbWVTaW5jZUxhc3RDaGFuZ2UiLCJnZXRUaW1lU2luY2VMYXN0Q2hhbmdlIiwibmV3UlRUIiwib2xkUnR0IiwiX2xhc3ROZXR3b3JrU3RhdGlzdGljcyIsIm5ld05ldHdvcmtUeXBlIiwib2xkTmV0d29ya1R5cGUiLCJuZXdDYXBhY2l0eSIsIm9sZENhcGFjaXR5IiwiZmxvYXQiLCJjaGFubmVsU3RhcnRUaW1lIiwiX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSIsIl9saXN0ZW5Ub0ZpcnN0VGltZSIsImNhbGxUaW1lVG9GaXJzdEZyYW1lIiwiX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyIiwiX2xpc3RlbkZvclN0YWxsIiwib25TdGFsbCIsIl9saXN0ZW5Gb3JDb250aW51YXRpb24iLCJldmVudCIsIm9uQ29udGludWF0aW9uIiwiX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciIsInB1c2hUaW1lVG9GaXJzdEZyYW1lIiwicHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdGltZVRvRmlyc3RGcmFtZSIsImR1cmF0aW9uU2luY2VQYWdlTG9hZCIsIl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3ZpZGVvU3RhbGxlZCIsImJ1ZmZlckxlbmd0aCIsImhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50IiwiX2xhc3RQcm9ncmVzcyIsInRpbWVTaW5jZVN0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QTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0EsOENBQThDLE9BQU87O0FBRXJEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLGtCQUFrQjtBQUNuRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxLQUEwQixvQkFBb0IsQ0FBRTtBQUNsRDs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7VUN4dEJBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7OztXQ3JCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsZ0NBQWdDLFlBQVk7V0FDNUM7V0FDQSxFOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0Esd0NBQXdDLHlDQUF5QztXQUNqRjtXQUNBO1dBQ0EsRTs7Ozs7V0NQQSxzRjs7Ozs7V0NBQTtXQUNBO1dBQ0E7V0FDQSxzREFBc0Qsa0JBQWtCO1dBQ3hFO1dBQ0EsK0NBQStDLGNBQWM7V0FDN0QsRTs7OztVQ05BO1VBQ0E7VUFDQTtVQUNBIiwiZmlsZSI6ImNoYW5uZWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykge1xuICAgIGFycjJbaV0gPSBhcnJbaV07XG4gIH1cblxuICByZXR1cm4gYXJyMjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlMaWtlVG9BcnJheTsiLCJmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aEhvbGVzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheVwiKTtcblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlczsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQ7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG5cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3I7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHk7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mXCIpO1xuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5OyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47XG4gIHZhciBfYXJyID0gW107XG4gIHZhciBfbiA9IHRydWU7XG4gIHZhciBfZCA9IGZhbHNlO1xuICB2YXIgX2UgPSB1bmRlZmluZWQ7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfZCA9IHRydWU7XG4gICAgX2UgPSBlcnI7XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX2Fycjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5TGltaXQ7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0OyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpO1xuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuOyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mOyIsInZhciBhcnJheVdpdGhIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aEhvbGVzXCIpO1xuXG52YXIgaXRlcmFibGVUb0FycmF5TGltaXQgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdFwiKTtcblxudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlcIik7XG5cbnZhciBub25JdGVyYWJsZVJlc3QgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVJlc3RcIik7XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NsaWNlZFRvQXJyYXk7IiwidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXNcIik7XG5cbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlcIik7XG5cbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZFwiKTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5OyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXlcIik7XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuY29uc3QgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQgPSAzMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+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/OiBudW1iZXI7XG59XG5cbmNvbnN0IHVwZGF0ZVN0YXRpc3RpY1RpbWVPdXQgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25uZWN0aW9uTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRWaWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZEF1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRjU3RhdGlzdGljOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lT3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RyYWNrc1RvTW9uaXRvcjogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IHBlZXJDb25uZWN0aW9uO1xuICAgIHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUgPSBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgIHRoaXMuX3RyYWNrc1RvTW9uaXRvciA9IG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLm1hcCh0cmFjayA9PiB0cmFjay5raW5kKSB8fCBbXTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5nZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCkge1xuICAgICAgICBjb25zdCBwYXJzZWRTRFAgPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRTRFAuYXVkaW9Db2RlYztcbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFNEUC52aWRlb0NvZGVjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWMoKTogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9ydGNTdGF0aXN0aWM7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXBkYXRlVGltZU91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZVRpbWVPdXQpO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZU91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLnVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIDExIGRvZXNudCBoYXZlIGtpbmQgb3IgbWVkaWFUeXBlIHNvIHdlIG5lZWQgdG8gdGFrZSBpdCBmcm9tIHRoZSBpbmJvdW5kLXJ0cCBvYmplY3QgaWRcbiAgICBjb25zdCBnZXRLaW5kRm9yU2FmYXJpMTEgPSAoaXRlbSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKG51bGwpXG4gICAgICAudGhlbihzdGF0cyA9PiB7XG4gICAgICAgIGNvbnN0IHJ0Y1N0YXRzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuXG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgICAgICAgIHN0YXRzLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgICBpZiAoaS50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIGkuY3VycmVudFJvdW5kVHJpcFRpbWUpIHtcbiAgICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IGkuY3VycmVudFJvdW5kVHJpcFRpbWUgKiAxMDAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaS50eXBlID09PSAnaW5ib3VuZC1ydHAnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSBpLmtpbmQgfHwgaS5tZWRpYVR5cGUgfHwgZ2V0S2luZEZvclNhZmFyaTExKGkpO1xuICAgICAgICAgICAgICBsZXQgY29kZWMgPSAnJztcblxuICAgICAgICAgICAgICBzdGF0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSBpLmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX3RyYWNrc1RvTW9uaXRvci5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRzW2tpbmRdID0ge1xuICAgICAgICAgICAgICAgICAgc3NyYzogaS5zc3JjLFxuICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiBraW5kLFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBpLnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgIGJ5dGVzUmVjZWl2ZWQ6IGkuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNMb3N0OiBpLnBhY2tldHNMb3N0LFxuICAgICAgICAgICAgICAgICAgcGFja2V0c1JlY2VpdmVkOiBpLnBhY2tldHNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIGNvZGVjOiBjb2RlYyB8fCB0aGlzLmdldENvZGVjQnlUeXBlKGtpbmQpLFxuICAgICAgICAgICAgICAgICAgcm91bmRUcmlwVGltZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0c1traW5kXS5mcmFtZXNEZWNvZGVkID0gaS5mcmFtZXNEZWNvZGVkO1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdHNba2luZF1bJ2ZwcyddID0gKGkuZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0c1traW5kXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAgICAgICAgIDEwMDAgfHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRzO1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlVGltZU91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+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+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGFyZ2V0TGFnKGxhZzogTWlsbGlzZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jb250ZXh0LnRhcmdldExhZy52YWx1ZSA9IGxhZztcbiAgfVxuXG4gIHN0b3AocmVhc29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMocmVhc29uKTtcblxuICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgfVxuXG4gIGFzeW5jIHJlc3VtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVubXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcCgnY2xpZW50OmNoYW5uZWwtZGlzcG9zZScpO1xuICAgIHRoaXMuX2NvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9jb250ZXh0LmlzRGlzcG9zZWQgPSB0cnVlO1xuICB9XG5cbiAgZ2V0VXJpKHRva2VuKTogVVJMIHtcbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IHVybCA9IEVkZ2VBdXRoLmdldFVyaShwYXJzZWRUb2tlbik7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZGlzY292ZXIgVVJJIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2NvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9jb250ZXh0LnNlc3Npb25UZWxlbWV0cnkubGlzdGVuT25TdHJlYW1TZXR1cCgpO1xuXG4gICAgaWYgKCFFZGdlQXV0aC5pc1ZhbGlkVG9rZW4odG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OnN0YXJ0Jyk7XG4gICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuICAgIGNvbnN0IHN0cmVhbVBsYXllciA9IFN0cmVhbUZhY3RvcnkuY3JlYXRlKHRva2VuLCB0aGlzLl9jb250ZXh0LCB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUuYmluZCh0aGlzKSk7XG5cbiAgICBpZiAoIXN0cmVhbVBsYXllcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1QbGF5ZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAsXG4gICAgICB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50LmJpbmQodGhpcykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLmZhaWwoKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHQub25saW5lLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6Y2xlYW51cC1hZnRlci1mYWlsZWQtc2V0dXAnKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRpc2NvdmVyIGVuZCBwb2ludCwgbWFya2luZyBhcyBvZmZsaW5lJywgZSk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcgfHwgIVNESy5hdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRoaXMuZ2V0UmV0cnlJbnRlcnZhbCgpKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LmRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN0YXJ0QWZ0ZXJTdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9jb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29udGV4dC50b2tlbi52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGxheSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZWRpYVN0cmVhbSA9IHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIW1lZGlhU3RyZWFtKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0cnlJbnRlcnZhbCgpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICAgIHJldHVybiBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHM7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIC8vIEZpcnN0IGFuZCBzZWNvbmQgYXR0ZW1wdCBmYXN0LCBhZnRlciB0aGF0IGV4cG9uZW50aWFsIHdpdGggYmFja29mZiBpbnRlcnZhbFxuICAgICAgICByZXR1cm4gTWF0aC5taW4obWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZHMsIE1hdGgucG93KGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRzLCBNYXRoLm1heCgwLCB0aGlzLl9jb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSAtIDEpKSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVN0cmVhbUZhaWx1cmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoICh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JldHJ5IHN0YXJ0IHdpdGggaW5pdGlhbCBzdGF0ZSBbJXNdIFslc10nLCB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlLCBDaGFubmVsU3RhdGVbdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyB1bmF1dGhvcml6ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gcmVzdHJpY3RlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyBibG9ja2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGxheWluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBhdXNlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBpbnZva2UgcGxheSgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byB1bnN1cHBvcnRlZCBmZWF0dXJlLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblVwUmVzb3VyY2VzKHJlYXNvbjogc3RyaW5nID0gZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uKTogdm9pZCB7XG4gICAgdGhpcy5fY29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbiA9IHRoaXMuX2NvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWU7XG5cbiAgICBpZiAocGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX2NvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICB0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NvbnRleHQuc3RvcHBlZC52YWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fY29udGV4dC5zdGFuZGJ5LnZhbHVlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5fY29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbSh0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSwgcmVhc29uKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEZXN0cm95ZWQgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbScsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQgJiYgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZSA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG5cbiAgICBjb25zdCBwbGF5UHJvbWlzZSA9IHZpZGVvRWxlbWVudC5wbGF5KCk7XG5cbiAgICBpZiAocGxheVByb21pc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsYXlQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgY29uc3QgaGFzQXVkaW9UcmFjayA9ICEhbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKHRyYWNrID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYWNrLmtpbmQgPT09ICdhdWRpbyc7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmID0gIVNESy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcblxuICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIHx8IHZpZGVvRWxlbWVudC5tdXRlZCB8fCAhaGFzQXVkaW9UcmFjaykge1xuICAgICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBhdXNlZCB2aWRlbyBhZnRlciBwbGF5IGZhaWxlZC4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBudWxsO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgbXV0ZWQgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiB2aWRlb0VsZW1lbnQucGxheSgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQbGF5ZWQgdmlkZW8gYWZ0ZXIgYXV0byBtdXRpbmcuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZCB0byB1bm11dGUuJywgdGhpcy5zdHJlYW1JZCk7XG5cbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW0sIFN1YnNjcmliZVN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWMsIElSdGNTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQge0VkZ2VUb2tlbn0gZnJvbSAnLi4vZWRnZUF1dGgvRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgdG9rZW46IFN1YmplY3Q8RWRnZVRva2VuPjtcbiAgcGVlckNvbm5lY3Rpb246IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuICBzdGF0ZTogU3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBhdXRvTXV0ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dG9QYXVzZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dGhvcml6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIG9ubGluZTogU3ViamVjdDxib29sZWFuPjtcbiAgbG9hZGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgcGxheWluZzogU3ViamVjdDxib29sZWFuPjtcbiAgc3RhbmRieTogU3ViamVjdDxib29sZWFuPjtcbiAgc3RvcHBlZDogU3ViamVjdDxib29sZWFuPjtcbiAgdGFyZ2V0TGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgbGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgYml0cmF0ZUxpbWl0OiBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICByZXNvbHV0aW9uOiBTdWJqZWN0PERpbWVuc2lvbj47XG4gIGZhaWx1cmVDb3VudDogU3ViamVjdDxudW1iZXI+O1xuICBlbmRQb2ludDogU3ViamVjdDxFbmRQb2ludD47XG4gIHN0cmVhbTogU3ViamVjdDxJU3RyZWFtPjtcbiAgcnRjU3RhdGlzdGljczogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG5cbiAgcGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyO1xuICBpc0Rpc3Bvc2VkOiBib29sZWFuO1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHNlc3Npb25UZWxlbWV0cnk6IFNlc3Npb25UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodG9rZW46IHN0cmluZywgdGFyZ2V0TGFnOiBudW1iZXIpIHtcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLnJlbmRlcmVyRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxJbml0aWFsaXphdGlvbiA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSBuZXcgU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PihudWxsKTtcbiAgICB0aGlzLnRva2VuID0gbmV3IFN1YmplY3Q8RWRnZVRva2VuPih0b2tlbik7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvbiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4obnVsbCk7XG4gICAgdGhpcy5tZWRpYVN0cmVhbSA9IG5ldyBTdWJqZWN0PE1lZGlhU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnN0YXRlID0gbmV3IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPihDaGFubmVsU3RhdGUuU3RhcnRpbmcpO1xuICAgIHRoaXMuYXV0b011dGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0b1BhdXNlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+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+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTdWJzY3JpYmVSZXNwb25zZTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZTogSVN1YnNjcmliZVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2UubGFnID0gZGF0YS5sYWc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBjb25zdCBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0ge307XG5cbiAgICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgICAgICBzd2l0Y2ggKGRhdGEucnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ0J1bmRsZVBvbGljeUJhbGFuY2VkJzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kgPSAnYmFsYW5jZWQnO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQnVuZGxlUG9saWN5TWF4Q29tcGF0JzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kgPSAnbWF4LWNvbXBhdCc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCdW5kbGVQb2xpY3lNYXhCdW5kbGUnOlxuICAgICAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9ICdtYXgtYnVuZGxlJztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGRhdGEucnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgICAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgICAgICAgdXJsczogZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJscyxcbiAgICAgICAgICAgICAgdXNlcm5hbWU6IGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICAgICAgICBjcmVkZW50aWFsOiBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgICAgICBzd2l0Y2ggKGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ0ljZVRyYW5zcG9ydFBvbGljeUFsbCc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gJ2FsbCc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdJY2VUcmFuc3BvcnRQb2xpY3lSZWxheSc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gJ3JlbGF5JztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0ljZVRyYW5zcG9ydFBvbGljeVB1YmxpYyc6XG4gICAgICAgICAgICAgIC8vIERlcHJlY2F0ZWQgLSBOb3Qgc3VwcG9ydGVkXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbi5wZWVySWRlbnRpdHkpIHtcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLnBlZXJJZGVudGl0eSA9IGRhdGEucnRjQ29uZmlndXJhdGlvbi5wZWVySWRlbnRpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kpIHtcbiAgICAgICAgICBzd2l0Y2ggKGRhdGEucnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICAgICAgICBjYXNlICdSdGNwTXV4UG9saWN5TmVnb3RpYXRlJzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5ID0gJ25lZ290aWF0ZSc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdSdGNwTXV4UG9saWN5UmVxdWlyZSc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSA9ICdyZXF1aXJlJztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGRhdGEucnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gcnRjQ29uZmlndXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiB0aGlzLmNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbil9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IHRoaXMuY29udmVydElTZXNzaW9uRGVzY3JpcHRpb25Ub1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKX07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogdGhpcy5jb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbil9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydElTZXNzaW9uRGVzY3JpcHRpb25Ub1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb246IElTZXNzaW9uRGVzY3JpcHRpb24pOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0IHtcbiAgICBjb25zdCBydGNTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQgPSB7c2RwOiBzZXNzaW9uRGVzY3JpcHRpb24uc2RwfTtcblxuICAgIHN3aXRjaCAoc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZmVyJzpcbiAgICAgICAgcnRjU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUgPSAnb2ZmZXInO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQW5zd2VyJzpcbiAgICAgICAgcnRjU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUgPSAnYW5zd2VyJztcblxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHNlc3Npb25EZXNjcmlwdGlvbi50eXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnRjU2Vzc2lvbkRlc2NyaXB0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlOiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24gPSB0aGlzLmNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U6IElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0ID0ge1xuICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1cyxcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5vcHRpb25zKSB7XG4gICAgICAgIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZS5vcHRpb25zID0gZGF0YS5vcHRpb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJRGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW06IElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRSVENTZHBUeXBlVG9TZHBUeXBlKHR5cGU6IFJUQ1NkcFR5cGUpOiBTZHBUeXBlIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2Fuc3dlcic6XG4gICAgICAgIHJldHVybiAnQW5zd2VyJztcbiAgICAgIGNhc2UgJ29mZmVyJzpcbiAgICAgICAgcmV0dXJuICdPZmZlcic7XG4gICAgICBjYXNlICdwcmFuc3dlcic6XG4gICAgICBjYXNlICdyb2xsYmFjayc6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU0RQIHR5cGUgWyR7dHlwZX1dIGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJRWRnZUF1dGh9IGZyb20gJy4vRWRnZUF1dGhUb2tlbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtFZGdlVG9rZW59IGZyb20gJy4vRWRnZVRva2VuJztcblxuY29uc3QgZWRnZUF1dGhUb2tlblByZWZpeCA9ICdESUdFU1Q6JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZUF1dGgge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VkZ2VBdXRoJyk7XG5cbiAgc3RhdGljIHBhcnNlVG9rZW4odG9rZW46IEVkZ2VUb2tlbik6IElFZGdlQXV0aCB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRUb2tlbih0b2tlbikpIHtcbiAgICAgIEVkZ2VBdXRoLl9sb2dnZXIuZXJyb3IoJ1Rva2VuIGlzIG5vdCB2YWxpZCBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbmNvZGVkRWRnZUF1dGhUb2tlbiA9IGF0b2IodG9rZW4uc3Vic3RyKGVkZ2VBdXRoVG9rZW5QcmVmaXgubGVuZ3RoKSk7XG4gICAgICBjb25zdCBlZGdlQXV0aFRva2VuID0gSlNPTi5wYXJzZShlbmNvZGVkRWRnZUF1dGhUb2tlbik7XG5cbiAgICAgIGVkZ2VBdXRoVG9rZW4udG9rZW4gPSBKU09OLnBhcnNlKGVkZ2VBdXRoVG9rZW4udG9rZW4pO1xuXG4gICAgICByZXR1cm4gZWRnZUF1dGhUb2tlbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBFZGdlQXV0aC5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcGFyc2UgdG9rZW4gdmFsdWUnLCBlKTtcblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0VXJpKHBhcnNlZFRva2VuOiBJRWRnZUF1dGgpOiBVUkwge1xuICAgIHJldHVybiBwYXJzZWRUb2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbi51cmkgP1xuICAgICAgbmV3IFVSTChwYXJzZWRUb2tlbi50b2tlbi51cmkpIDogbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUZW5hbmN5KHBhcnNlZFRva2VuOiBJRWRnZUF1dGgpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXJzZWRUb2tlbiAmJiBwYXJzZWRUb2tlbi5hcHBsaWNhdGlvbklkID9cbiAgICAgIHBhcnNlZFRva2VuLmFwcGxpY2F0aW9uSWQgOiAnJztcbiAgfVxuXG4gIHN0YXRpYyBpc1ZhbGlkVG9rZW4odG9rZW46IEVkZ2VUb2tlbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRva2VuICYmIHRva2VuLnN0YXJ0c1dpdGgoZWRnZUF1dGhUb2tlblByZWZpeCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlYXR1cmVFbmFibGVtZW50IHtcbiAgc3RhdGljIGdldCBjbGllbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENsaWVudCBvZmZlciB3b3JrZmxvdyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSBpbiB0aGUgZm9sbG93aW5nIGJyb3dzZXJzXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc0IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzYgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGdldCBhZGRUcmFuY2VpdmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hyb21lIDY5LCA3MCwgNzEsIDcyIGV4cG9zZXMgYGFkZFRyYW5jZWl2ZXJgIGJ1dCBpdCBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseVxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzAgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU2O1xuICB9XG5cbiAgc3RhdGljIGdldCBvblRyYWNrRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjMgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hvdWxkVXNlTmF0aXZlSGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYW1zdW5nQnJvd3Nlcic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUlRNUEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8IDg0KSB8fFxuICAgICAgKEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPCA3MCkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0VkZ2UnIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUHJlY2FjaGluZ0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ0lFJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtDaGFubmVsU3RhdGV9IGZyb20gJy4uL2NoYW5uZWxzJztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ30gZnJvbSAnLi9MaXZlU3RyZWFtaW5nJztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2h1bmtlZFN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2h1bmtlZFN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21vbml0b3JEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9zdHJlYW1TdGF0aXN0aWNzOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcztcbiAgcHJpdmF0ZSBfbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG5cbiAgY29uc3RydWN0b3IoY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUgPSBoYW5kbGVTdHJlYW1GYWlsdXJlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZCh0aGlzKTtcbiAgfVxuXG4gIHN0YXJ0KHVyaTogVVJMLCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkIHwgSURpc3Bvc2FibGU+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKVxuICAgICAgLnRoZW4oZW5kUG9pbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbnVsbCwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2ZmZXJTZHAgPSBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcDtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICBvcmlnaW5TdGFydFRpbWU6IERhdGUubm93KCkgLSBsYWcgKyB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gMixcbiAgICAgICAgICBsYWdcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gTGl2ZVN0cmVhbWluZy5zdGFydCh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBvZmZlclNkcCwgb3B0aW9ucylcbiAgICAgICAgICAudGhlbihwbGF5ZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb25pdG9yKHBsYXllcik7XG5cbiAgICAgICAgICAgIHJldHVybiBwbGF5ZXI7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0xpdmVTdHJlYW1pbmcgZmFpbGVkJywgZSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1vbml0b3IocGxheWVyOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgbmV3U3RyZWFtU3RhdGlzdGljcyA9IExpdmVTdHJlYW1pbmcuZ2V0U3RhdHMoKTtcblxuICAgICAgaWYgKHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MgJiZcbiAgICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmN1cnJlbnRUaW1lICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID49IG5ld1N0cmVhbVN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCsrO1xuXG4gICAgICAgIGlmICh0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID4gNikge1xuICAgICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHBsYXllci5kaXNwb3NlKCk7XG4gICAgICAgICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZWQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzID0gbmV3U3RyZWFtU3RhdGlzdGljcztcbiAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuICAgIH0sIDEwMDApO1xuXG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgfSkpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdPcHRpb25zLCBMaXZlU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge0lIbHNQbGF5ZXJUeXBlfSBmcm9tICcuL0lIbHNQbGF5ZXInO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIbHNQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSUhsc1BsYXllclR5cGU7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIpIHtcbiAgICAgIGlmIChMaXZlU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBMaXZlU3RyZWFtaW5nLmhsc1BsYXllcih7XG4gICAgICAgICAgZW5hYmxlV29ya2VyOiB0cnVlLFxuICAgICAgICAgIG1heEJ1ZmZlckxlbmd0aDogMSxcbiAgICAgICAgICBsaXZlQmFja0J1ZmZlckxlbmd0aDogMCxcbiAgICAgICAgICBsaXZlU3luY0R1cmF0aW9uOiA3LFxuICAgICAgICAgIGxpdmVEdXJhdGlvbkluZmluaXR5OiB0cnVlLFxuICAgICAgICAgIGxpdmVNYXhMYXRlbmN5RHVyYXRpb246IEluZmluaXR5LFxuICAgICAgICAgIGhpZ2hCdWZmZXJXYXRjaGRvZ1BlcmlvZDogMVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmxvYWRTb3VyY2UodGhpcy5fbWFuaWZlc3RVUkkpO1xuICAgICAgICB0aGlzLl9wbGF5ZXIuYXR0YWNoTWVkaWEodGhpcy5fdmlkZW9FbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmNhblBsYXlUeXBlKCdhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCcpKSB7XG4gICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5zcmMgPSB0aGlzLl9tYW5pZmVzdFVSSTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIgJiYgTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKTtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAuMCxcbiAgICAgICAgbGFnOiAwLjAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHtcbiAgICAgIHdpZHRoOiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0V2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuX3BsYXllci5tZWRpYS5vZmZzZXRIZWlnaHQsXG4gICAgICBjdXJyZW50VGltZTogdGhpcy5fcGxheWVyLm1lZGlhLmN1cnJlbnRUaW1lLFxuICAgICAgbGFnOiAwLjAsXG4gICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGUsXG4gICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdJRExFJykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdFUlJPUicgfHwgdGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdFTkRFRCcpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnTE9BRElORycpIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlLmluY2x1ZGVzKCdXQUlUSU5HJykpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXSB8fCAwO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcblxuICAgIHN0YXRpc3RpY3MubGFnID0gTWF0aC5tYXgoMC4wLCAoY3VycmVudFRpbWUgKyAodGhpcy5fb3B0aW9ucy5sYWcgLyAxMDAwKSkgLSB0cnVlQ3VycmVudFRpbWUpO1xuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIgJiYgdGhpcy5fcGxheWVyLmRlc3Ryb3kpIHtcbiAgICAgIHRoaXMuX3BsYXllci5kZXN0cm95KCk7XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgV2ViUGxheWVyIGZyb20gJy4vV2ViUGxheWVyJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBTaGFrYVBsYXllciBmcm9tICcuL1NoYWthUGxheWVyJztcbmltcG9ydCBIbHNQbGF5ZXIgZnJvbSAnLi9IbHNQbGF5ZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3MsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBMaXZlU3RyZWFtaW5nIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BlbmRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc1BsYXllcjogSGxzUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BoZW5peFdlYlBsYXllcjogV2ViUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthOiBTaGFrYVR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBzdGF0aWMgX3BsYXllcjogU2hha2FQbGF5ZXIgfCBXZWJQbGF5ZXIgfCBIbHNQbGF5ZXI7XG5cbiAgc3RhdGljIGdldCBobHNQbGF5ZXIoKTogSGxzUGxheWVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc1BsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGhlbml4V2ViUGxheWVyKCk6IFdlYlBsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9waGVuaXhXZWJQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthKCk6IFNoYWthVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHN0YXJ0KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZywgb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnMpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyIHx8IHRoaXMuX3NoYWthIHx8IHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBsYXllciBpcyBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICghU0RLLndlYlBsYXllckxvYWRlciAmJiAhU0RLLnNoYWthUGxheWVyTG9hZGVyICYmICFTREsuaGxzSnNMb2FkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQtZmVhdHVyZSwgYWRkIHN0cmVhbSBwbGF5ZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsuaGxzSnNMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9obHNQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy53ZWJQbGF5ZXJMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9waGVuaXhXZWJQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLnNoYWthUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fc2hha2EgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllci5nZXRTdGF0cygpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGxheShQbGF5ZXI6IHR5cGVvZiBXZWJQbGF5ZXIgfCB0eXBlb2YgU2hha2FQbGF5ZXIgfCB0eXBlb2YgSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKTogSURpc3Bvc2FibGUge1xuICAgIGNvbnN0IGRhc2hNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW1wZFxcPz9bXlxcc10qKS9tKTtcbiAgICBjb25zdCBobHNNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW0zdThcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgbWFuaWZlc3RVcmwgPSBkYXNoTWFuaWZlc3RVcmxNYXRjaCAmJiBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA/IGRhc2hNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG4gICAgY29uc3QgcGxheWxpc3RVcmwgPSBobHNNYW5pZmVzdFVybE1hdGNoICYmIGhsc01hbmlmZXN0VXJsTWF0Y2hbMV0gPyBobHNNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG5cbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzIHx8ICh0aGlzLl9obHNQbGF5ZXIgJiYgdGhpcy5faGxzUGxheWVyLmlzU3VwcG9ydGVkKCkpKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2hscycsIHN0cmVhbUlkLCBwbGF5bGlzdFVybCwgb3B0aW9ucyk7XG5cbiAgICAgIHRoaXMuX3BsYXllci5zdGFydCgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG5ldyBQbGF5ZXIodmlkZW9FbGVtZW50LCAnZGFzaCcsIHN0cmVhbUlkLCBtYW5pZmVzdFVybCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgIHJldHVybiB0aGlzLl9wbGF5ZXI7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBsb2FkZWQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nKTogSURpc3Bvc2FibGUge1xuICAgIGlmICghdGhpcy5fc2hha2EgJiYgIXRoaXMuX3BoZW5peFdlYlBsYXllciAmJiAhdGhpcy5faGxzUGxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShIbHNQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGhlbml4V2ViUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KFdlYlBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaGFrYSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShTaGFrYVBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZW51bSBOZXR3b3JrU3RhdGVzIHtcbiAgTmV0d29ya0VtcHR5LFxuICBOZXR3b3JrSWRsZSxcbiAgTmV0d29ya0xvYWRpbmcsXG4gIE5ldHdvcmtOb1NvdXJjZVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFbmRQb2ludCwge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSwge0lQZWVyQ29ubmVjdGlvbk9mZmVySW5pdH0gZnJvbSAnLi4vLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2ZlYXR1cmUvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uLy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsQ29udGV4dCc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXJ0KHVyaSwgdG9rZW4sIGxpc3Rlbk9uU3RyZWFtU2V0dXAsIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsPEVuZFBvaW50LCBJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+KFtcbiAgICAgIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSksXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgXSlcbiAgICAgIC50aGVuKChbZW5kUG9pbnQsIHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn1dKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0xvY2FsIG9mZmVyOlxcbicgKyBsb2NhbE9mZmVyLnNkcCk7XG5cbiAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgbG9jYWxPZmZlciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIGxvY2FsT2ZmZXIsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgcnRjQ29uZmlndXJhdGlvbiwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlSdGNDb25maWd1cmF0aW9uKHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIVNESy5zZW5kTG9jYWxDYW5kaWRhdGVzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGUuY2FuZGlkYXRlICYmIGUuY2FuZGlkYXRlLmNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChlLmNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlzY292ZXJ5Q29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRDYW5kaWRhdGVzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5hZGRJY2VDYW5kaWRhdGVzKHN0cmVhbSwgY2FuZGlkYXRlcywgZGlzY292ZXJ5Q29tcGxldGVkKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoe3N0YXR1cywgb3B0aW9uc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVzKCdjYW5jZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBBZGRlZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdIGFuZCBvcHRpb25zIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2luZyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkaXNjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub250cmFjayA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcblxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCB0cmFja0xpc3RlbmVyID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICAgIGlmIChlLnN0cmVhbXMpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW1zWzBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKTtcbiAgICAgICAgICAgICAgfSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCBsb2NhbCBTRFAgb2ZmZXIgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBhbnN3ZXIgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbik7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cC5zdWNjZXNzKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkKTtcblxuICAgICAgICAgICAgICByZXR1cm4gbWVkaWFTdHJlYW1Qcm9taXNlO1xuICAgICAgICAgICAgfSkudGhlbihtZWRpYVN0cmVhbSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3IgPSBuZXcgUnRjQ29ubmVjdGlvbk1vbml0b3IocGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gNCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gVmlkZW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgodmlkZW9UcmFja0ZhaWxlZCB8fCBhdWRpb1RyYWNrRmFpbGVkKSAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFwcGx5UnRjQ29uZmlndXJhdGlvbihcbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24gfCBudWxsLFxuICAgIHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIGlmICghb3B0aW9uYWxQZWVyQ29ubmVjdGlvbikge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbiA9IHRoaXMudHJ1bmNhdGVJY2VTZXJ2ZXJzKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm4gU0RLLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihydGNDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdSdGNDb25maWd1cmF0aW9uID0ge1xuICAgICAgLi4ub3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCksXG4gICAgICAuLi5ydGNDb25maWd1cmF0aW9uXG4gICAgfTtcblxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihuZXdSdGNDb25maWd1cmF0aW9uKTtcblxuICAgIHJldHVybiBvcHRpb25hbFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSB0cnVuY2F0ZUljZVNlcnZlcnMoY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdXJsczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDI7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgdXJsID0gY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdO1xuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICB1cmxzLnB1c2goY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICB1cmxzOiB1cmxzLFxuICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcblxuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKys7XG5cbiAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWVcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZWNvbm5lY3RpbmcgcGVlciBjb25uZWN0aW9uIGJ5IHJlc3RhcnRpbmcgSUNFJyk7XG5cbiAgICAgIGNvbnN0IGxvY2FsT2ZmZXIgPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih7aWNlUmVzdGFydDogdHJ1ZX0pLnRoZW4ob2ZmZXIgPT4ge1xuICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24obG9jYWxPZmZlcik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGFmdGVyIFslc10gYXR0ZW1wdHMsIHBlcmZvcm1pbmcgZnVsbCByZWNvdmVyeScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG50eXBlIFNoYWthT3B0aW9ucyA9IHtcbiAgYWJyOiB7XG4gICAgZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiBudW1iZXI7XG4gIH07XG4gIG1hbmlmZXN0OiB7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgc3RyZWFtaW5nOiB7XG4gICAgcmVidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyaW5nR29hbDogbnVtYmVyO1xuICAgIGJ1ZmZlckJlaGluZDogbnVtYmVyO1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgICAgbWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgICAgIGJhY2tvZmZGYWN0b3I6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTaGFrYSB7XG4gIGNvbmZpZ3VyZTogKG86IFNoYWthT3B0aW9ucykgPT4gdm9pZDtcbiAgbG9hZDogKHVyaTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdGF0czogKCkgPT4gTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XG4gIHVubG9hZDogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hha2FQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2hha2FQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElTaGFrYTtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChMaXZlU3RyZWFtaW5nLnNoYWthKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zOiBTaGFrYU9wdGlvbnMgPSB7XG4gICAgICAgIGFicjoge2RlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZTogMjAwMDAwMH0sXG4gICAgICAgIG1hbmlmZXN0OiB7cmV0cnlQYXJhbWV0ZXJzOiB7dGltZW91dDogMTAwMDB9fSxcbiAgICAgICAgc3RyZWFtaW5nOiB7XG4gICAgICAgICAgcmVidWZmZXJpbmdHb2FsOiAyLFxuICAgICAgICAgIGJ1ZmZlcmluZ0dvYWw6IDEwLFxuICAgICAgICAgIGJ1ZmZlckJlaGluZDogMzAsXG4gICAgICAgICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgICAgIG1heEF0dGVtcHRzOiAxMCxcbiAgICAgICAgICAgIGJhY2tvZmZGYWN0b3I6IDEuMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IExpdmVTdHJlYW1pbmcuc2hha2EuUGxheWVyKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB0aGlzLmxvYWRQbGF5ZXIocGxheWVyT3B0aW9ucyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgICBsYWc6IDAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHtcbiAgICAgIC4uLnRoaXMuX3BsYXllci5nZXRTdGF0cygpLFxuICAgICAgY3VycmVudFRpbWU6IDAsXG4gICAgICBsYWc6IDBcbiAgICB9O1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuICAgIGNvbnN0IGxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudCkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBsYWc7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5wbGF5VGltZSA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci51bmxvYWQoKTtcbiAgICAgIHRoaXMuX3BsYXllci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBsYXllcihwbGF5ZXJDb25maWc6IFNoYWthT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BsYXllci5jb25maWd1cmUocGxheWVyQ29uZmlnKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wbGF5ZXIubG9hZCh0aGlzLl9tYW5pZmVzdFVSSSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEQVNIIGxpdmUgc3RyZWFtIGhhcyBiZWVuIGxvYWRlZCcsIHRoaXMuX3N0cmVhbUlkKTtcblxuICAgICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KSB7XG4gICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KCk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRXJyb3Igd2hpbGUgbG9hZGluZyBEQVNIIGxpdmUgc3RyZWFtIFslc10nLCB0aGlzLl9zdHJlYW1JZCwgZS5jb2RlLCBlKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IEVkZ2VBdXRoIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoJztcbmltcG9ydCBDaHVua2VkU3RyZWFtIGZyb20gJy4vQ2h1bmtlZFN0cmVhbSc7XG5pbXBvcnQgUmVhbFRpbWVTdHJlYW0gZnJvbSAnLi9SZWFsVGltZVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1GYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1pbmcnKTtcblxuICBzdGF0aWMgY3JlYXRlKHRva2VuOiBzdHJpbmcsIGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogSVN0cmVhbSB7XG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKHRva2VuKTtcbiAgICBjb25zdCBpc1J0bXAgPSBwYXJzZWRUb2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMgJiYgcGFyc2VkVG9rZW4udG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdydG1wJyk7XG5cbiAgICBpZiAoaXNSdG1wKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBSVE1QIHBsYXliYWNrLicpO1xuICAgICAgY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXNTdHJlYW1pbmcgPSBwYXJzZWRUb2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMgJiYgcGFyc2VkVG9rZW4udG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdzdHJlYW1pbmcnKTtcblxuICAgIGlmIChpc1N0cmVhbWluZykge1xuICAgICAgcmV0dXJuIG5ldyBDaHVua2VkU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlYWxUaW1lU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyZWFtRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdPcHRpb25zLCBMaXZlU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbmNvbnN0IGJhbmR3aWR0aFRvU3RhcnRBdCA9IDMwMDAwMDA7IC8vIENvcnJlc3BvbmRzIHRvIDcyMHAgaW4gbW9zdCBzZXR1cHNcbmNvbnN0IG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkID0gMTUwMDA7XG5cbnR5cGUgRXZlbnRMaXN0ZW5lckZvcldlYlBsYXllciA9IChldnQ6IFdlYlBsYXllckV2ZW50KSA9PiB2b2lkO1xudHlwZSBXZWJQbGF5ZXJFdmVudCA9IHtcbiAgY29kZTogbnVtYmVyO1xuICBzZXZlcml0eTogbnVtYmVyO1xuICBlcnJvcjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElXZWJQbGF5ZXIge1xuICBzdGFydDogKHVybDogc3RyaW5nKSA9PiB2b2lkO1xuICBhZGRFdmVudExpc3RlbmVyKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIpOiB2b2lkO1xuICBkaXNwb3NlKCk6IHZvaWQ7XG4gIGVycm9yczoge1xuICAgIHNldmVyaXR5OiB7XG4gICAgICBSRUNPVkVSQUJMRTogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignV2ViUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJV2ViUGxheWVyO1xuICBwcml2YXRlIF9sYXN0UmVsb2FkVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKExpdmVTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zID0ge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBiYW5kd2lkdGhUb1N0YXJ0QXRcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5XZWJQbGF5ZXIodGhpcy5fbG9nZ2VyLCB0aGlzLl92aWRlb0VsZW1lbnQsIHBsYXllck9wdGlvbnMpO1xuICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KHRoaXMuX21hbmlmZXN0VVJJKTtcblxuICAgICAgdGhpcy5fcGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JPYmplY3QgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5SZWxvYWQoKSAmJiBlcnJvck9iamVjdCAmJiAoZXJyb3JPYmplY3QuY29kZSA9PT0gMyB8fCBlcnJvck9iamVjdC5zZXZlcml0eSA9PT0gTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuZXJyb3JzLnNldmVyaXR5LlJFQ09WRVJBQkxFKSkge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSBhZnRlciBlcnJvciBldmVudCBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgICAgIHRoaXMucmVsb2FkSWZBYmxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZWxvYWQgd2l0aCBlcnJvciBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIgJiYgTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuaXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlLFxuICAgICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0gdGhpcy5fcGxheWVyLmdldFN0YXRzKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lIHx8IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXTtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5pc05hdGl2ZSAmJiBzdGF0aXN0aWNzLmRlbGl2ZXJ5VHlwZSA9PT0gJ0hscycpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSAtIHN0YXRpc3RpY3MubGFnO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5jdXJyZW50VGltZSkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5pc05hdGl2ZSkge1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5SZWxvYWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQgPSAhdGhpcy5fbGFzdFJlbG9hZFRpbWUgfHwgRGF0ZS5ub3coKSAtIHRoaXMuX2xhc3RSZWxvYWRUaW1lID4gbWluVGltZUJlZm9yZU5leHRSZWxvYWQ7XG5cbiAgICByZXR1cm4gdGhpcy5fdmlkZW9FbGVtZW50ICYmIHRoaXMuX3BsYXllciAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoICE9PSAwICYmIGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWRJZkFibGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbG9hZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gdGhhdCB3YXMgYWN0aXZlIGZvciBhdCBsZWFzdCBbJXNdIHNlY29uZHMnLCB0aGlzLl9zdHJlYW1JZCwgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgLyAxMDAwKTtcblxuICAgIHRoaXMuX2xhc3RSZWxvYWRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX1NES1ZFUlNJT05fXzogc3RyaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJzaW9uTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIF9kZWZhdWx0VmVyc2lvbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICBzdGF0aWMgZ2V0IHNka1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF9fU0RLVkVSU0lPTl9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmVyc2lvbjtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlTZXJ2aWNlIGZyb20gJy4vVGVsZW1ldHJ5U2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4uL2xvZ2dlci9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkO1xuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UgPSBuZXcgVGVsZW1ldHJ5U2VydmljZSh0ZWxlbWV0cnlDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlLnB1c2gobG9nTGV2ZWwsIG1lc3NhZ2UsIGNhdGVnb3J5LCBkYXRlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGVsZW1ldHJ5VXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgdGVsZW1ldHJ5VXJsLnBhdGhuYW1lID0gdGVsZW1ldHJ5VXJsLnBhdGhuYW1lICsgJy9sb2dzJztcblxuICAgIHRoaXMuX3VybCA9IHRlbGVtZXRyeVVybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgcHJpdmF0ZSBfbG9nczogQXJyYXk8SUxvZ0l0ZW0+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIHRpbWVzdGFtcDogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluXG4gICAgfTtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgdGhpcy5fbG9ncy5wdXNoKGxvZ1JlY29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvZ3MudW5zaGlmdChsb2dSZWNvcmQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzKGxvZ01lc3NhZ2VzOiBBcnJheTxJTG9nSXRlbT4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IGxvZ01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2xvZ3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG51bWJlck9mTG9nc1RvU2VuZCA9IDA7XG4gICAgbGV0IHNpemVPZkxvZ3NUb1NlbmQgPSAwO1xuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGdldExvZ1NpemUgPSAobG9nOiBJTG9nSXRlbSk6IG51bWJlciA9PiBPYmplY3QudmFsdWVzKGxvZylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0gPyBpdGVtLmxlbmd0aCA6IDApLCAwKTtcblxuICAgIHdoaWxlICh0aGlzLl9sb2dzLmxlbmd0aCA+IG51bWJlck9mTG9nc1RvU2VuZCAmJiBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyBzaXplT2ZMb2dzVG9TZW5kIDwgcmVxdWVzdFNpemVMaW1pdCkge1xuICAgICAgc2l6ZU9mTG9nc1RvU2VuZCArPSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQrKztcbiAgICB9XG5cbiAgICBpZiAoIW51bWJlck9mTG9nc1RvU2VuZCkge1xuICAgICAgdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2UgPSB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZS5zdWJzdHJpbmcoMCxcbiAgICAgICAgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgKHJlcXVlc3RTaXplTGltaXQgLSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkpKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCA9IDE7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nTWVzc2FnZXMgPSB0aGlzLl9sb2dzLnNsaWNlKDAsIG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICB0aGlzLl9sb2dzID0gdGhpcy5fbG9ncy5zbGljZShudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZExvZ3MobG9nTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdXJhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGR1cmF0aW9uID0gMCkge1xuICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG4gIH1cblxuICB0b0lzb1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuICdQMFMnO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB0aGlzLl9kdXJhdGlvbiA8IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpc05lZ2F0aXZlID8gTWF0aC5hYnModGhpcy5fZHVyYXRpb24pIDogdGhpcy5fZHVyYXRpb247XG4gICAgbGV0IG9mZnNldCA9IE1hdGguZmxvb3IoZHVyYXRpb24pO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG9mZnNldCAlIDEwMDA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDEwMDApO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IGhvdXJzID0gb2Zmc2V0ICUgMjQ7XG4gICAgY29uc3QgcGFydHMgPSBbJ1BUJ107XG5cbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLScpO1xuICAgIH1cblxuICAgIGlmIChob3Vycykge1xuICAgICAgcGFydHMucHVzaChob3VycyArICdIJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIHBhcnRzLnB1c2gobWludXRlcyArICdNJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgfHwgbWlsbGlzZWNvbmRzKSB7XG4gICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzZWNvbmRzKSk7XG5cbiAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcGFydHMucHVzaCgnLicgKyB0aGlzLnBhZFN0YXJ0KG1pbGxpc2Vjb25kcy50b1N0cmluZygpLCAzLCAnMCcpKTtcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnUycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIHBhZFN0YXJ0KGl0ZW06IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBTdHJpbmcoKHR5cGVvZiBwYWRTdHJpbmcgIT09ICd1bmRlZmluZWQnID8gcGFkU3RyaW5nIDogJyAnKSk7XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGl0ZW0ubGVuZ3RoO1xuXG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIGl0ZW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJQ29tcGFyYWJsZSBmcm9tICcuLi9sYW5nL0lDb21wYXJhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGltZW5zaW9uIGltcGxlbWVudHMgSUNvbXBhcmFibGU8RGltZW5zaW9uPiB7XG4gIHJlYWRvbmx5IHdpZHRoOiBudW1iZXI7XG4gIHJlYWRvbmx5IGhlaWdodDogbnVtYmVyO1xuXG4gIHN0YXRpYyBnZXQgZW1wdHkoKTogRGltZW5zaW9uIHtcbiAgICByZXR1cm4gbmV3IERpbWVuc2lvbigwLCAwKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgZXF1YWxzKG90aGVyOiBEaW1lbnNpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3RoZXIgJiYgdGhpcy53aWR0aCA9PT0gb3RoZXIud2lkdGggJiYgdGhpcy5oZWlnaHQgPT09IG90aGVyLmhlaWdodDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMud2lkdGh9eCR7dGhpcy5oZWlnaHR9YDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtTdHJlYW1TZXR1cExpc3RlbmVyfSBmcm9tICcuLi9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IE5ldHdvcmtNb25pdG9yIGZyb20gJy4uL2RvbS9OZXR3b3JrTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuaW50ZXJmYWNlIElOZXR3b3JrU3RhdGlzdGljcyB7XG4gIHJ0dD86IG51bWJlcjtcbiAgZWZmZWN0aXZlVHlwZT86IHN0cmluZztcbiAgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlc3Npb25UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTZXNzaW9uVGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBTREsuYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25ldHdvcmtNb25pdG9yOiBOZXR3b3JrTW9uaXRvciA9IG5ldyBOZXR3b3JrTW9uaXRvcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgX2xhc3ROZXR3b3JrU3RhdGlzdGljczogSU5ldHdvcmtTdGF0aXN0aWNzID0ge307XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG5cbiAgICBpZiAoIXRoaXMuX25ldHdvcmtNb25pdG9yLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmlzRm9yZWdyb3VuZC5zdWJzY3JpYmUoaXNGb3JlZ3JvdW5kID0+IHtcbiAgICAgIHRoaXMucmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IucnR0LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtSVFRVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZWZmZWN0aXZlVHlwZS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGxpc3Rlbk9uU3RyZWFtU2V0dXAoKTogU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1TZXR1cExpc3RlbmVyKHRoaXMuX3BhZ2VMb2FkVGltZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RDaGFuZ2UgPSB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5nZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IGlzRm9yZWdyb3VuZCA/IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZCA6IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZCxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VMYXN0Q2hhbmdlfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnQXBwbGljYXRpb24gaGFzIGdvbmUgaW50byB0aGUgWyVzXSBhZnRlciBbJXNdIG1zJyxcbiAgICAgIGlzRm9yZWdyb3VuZCA/ICdmb3JlZ3JvdW5kJyA6ICdiYWNrZ3JvdW5kJyxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlTGFzdENoYW5nZSkudG9Jc29TdHJpbmcoKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrUlRUVXBkYXRlKG5ld1JUVDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRSdHQgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dCA9IG5ld1JUVDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBuZXdSVFR9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkUnR0ID8ge3VpbnQ2NDogb2xkUnR0fSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlc291cmNlOiAnbmF2aWdhdG9yJ1xuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIFJUVCBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3UlRULFxuICAgICAgb2xkUnR0XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUobmV3TmV0d29ya1R5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkTmV0d29ya1R5cGUgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlID0gbmV3TmV0d29ya1R5cGU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld05ldHdvcmtUeXBlfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZE5ldHdvcmtUeXBlID8ge3N0cmluZzogb2xkTmV0d29ya1R5cGV9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZWZmZWN0aXZlIHR5cGUgaGFzIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdOZXR3b3JrVHlwZSxcbiAgICAgIG9sZE5ldHdvcmtUeXBlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKG5ld0NhcGFjaXR5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZENhcGFjaXR5ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtmbG9hdDogbmV3Q2FwYWNpdHl9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkQ2FwYWNpdHkgPyB7ZmxvYXQ6IG9sZENhcGFjaXR5fSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGRvd25saW5rIHRocm91Z2hwdXQgY2FwYWNpdHkgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld0NhcGFjaXR5LFxuICAgICAgb2xkQ2FwYWNpdHlcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZGVvVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtVGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX2xpc3RlblRvRmlyc3RUaW1lOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JTdGFsbDogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yQ29udGludWF0aW9uOiAoZXZlbnQpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9TdGFsbGVkOiBudW1iZXI7XG4gIHByaXZhdGUgX2xhc3RQcm9ncmVzczogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1Jlc29sdXRpb246IHN0cmluZztcbiAgcHJpdmF0ZSBfY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXI6IERpc3Bvc2FibGU7XG4gIHByaXZhdGUgX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcjogRGlzcG9zYWJsZTtcblxuICBjb25zdHJ1Y3RvcihzdHJlYW1JZDogc3RyaW5nLCBwYWdlTG9hZFRpbWU6IG51bWJlciwgY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lID0gKCk6IHZvaWQgPT4gdGhpcy5jYWxsVGltZVRvRmlyc3RGcmFtZSgpO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIH0pO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcik7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0ZW5Gb3JTdGFsbCA9ICgpOiB2b2lkID0+IHRoaXMub25TdGFsbCgpO1xuXG4gICAgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uID0gKGV2ZW50KTogdm9pZCA9PiB0aGlzLm9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuXG4gICAgdGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBkdXJhdGlvblNpbmNlUGFnZUxvYWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxsVGltZVRvRmlyc3RGcmFtZSgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5wdXNoVGltZVRvRmlyc3RGcmFtZShub3cpO1xuICAgIHRoaXMucHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fdGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl90aW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIEZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fdGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9jaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5DaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gQ2hhbm5lbCBjcmVhdGlvbiB0byBmaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvblN0YWxsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl92aWRlb1N0YWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlN0YWxsZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgc3RhbGxlZCcsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTogdm9pZCB7XG4gICAgaWYgKCF2aWRlby5idWZmZXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHZpZGVvLmJ1ZmZlcmVkLmxlbmd0aDtcbiAgICBjb25zdCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCA9IGV2ZW50LnR5cGUgPT09ICdwbGF5aW5nJ1xuICAgIHx8IGJ1ZmZlckxlbmd0aCA+IDAgPyAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJ1xuICAgICAgfHwgZXZlbnQudHlwZSA9PT0gJ3RpbWV1cGRhdGUnKVxuICAgICAgJiYgdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpID09PSB0aGlzLl9sYXN0UHJvZ3Jlc3MgOiB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLl92aWRlb1N0YWxsZWQgfHwgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJykge1xuICAgICAgdGhpcy5fbGFzdFByb2dyZXNzID0gdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVTaW5jZVN0b3AgPSBEYXRlLm5vdygpIC0gdGhpcy5fdmlkZW9TdGFsbGVkO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5CdWZmZXJpbmcsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZVN0b3B9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyByZWNvdmVyZWQgZnJvbSBzdGFsbCBhZnRlciBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZVN0b3ApLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IG51bGw7XG4gIH1cblxuICBvblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMobmV3UmVzb2x1dGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3UmVzb2x1dGlvbn0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiB0aGlzLl92aWRlb1Jlc29sdXRpb24gPyB7c3RyaW5nOiB0aGlzLl92aWRlb1Jlc29sdXRpb259IDogdW5kZWZpbmVkLFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl92aWRlb1Jlc29sdXRpb24gPSBuZXdSZXNvbHV0aW9uO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgcnVudGltZSA9IChmdW5jdGlvbiAoZXhwb3J0cykge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIGV4cG9ydHMud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgZXhwb3J0cy5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvciwgUHJvbWlzZUltcGwpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgLy8gSWYgYSByZWplY3RlZCBQcm9taXNlIHdhcyB5aWVsZGVkLCB0aHJvdyB0aGUgcmVqZWN0aW9uIGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gc28gaXQgY2FuIGJlIGhhbmRsZWQgdGhlcmUuXG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0LCBQcm9taXNlSW1wbCkge1xuICAgIGlmIChQcm9taXNlSW1wbCA9PT0gdm9pZCAwKSBQcm9taXNlSW1wbCA9IFByb21pc2U7XG5cbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCksXG4gICAgICBQcm9taXNlSW1wbFxuICAgICk7XG5cbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgLy8gTm90ZTogW1wicmV0dXJuXCJdIG11c3QgYmUgdXNlZCBmb3IgRVMzIHBhcnNpbmcgY29tcGF0aWJpbGl0eS5cbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yW1wicmV0dXJuXCJdKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBleHBvcnRzLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlXG4gIC8vIG9yIG5vdCwgcmV0dXJuIHRoZSBydW50aW1lIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBkZWNsYXJlIHRoZSB2YXJpYWJsZVxuICAvLyByZWdlbmVyYXRvclJ1bnRpbWUgaW4gdGhlIG91dGVyIHNjb3BlLCB3aGljaCBhbGxvd3MgdGhpcyBtb2R1bGUgdG8gYmVcbiAgLy8gaW5qZWN0ZWQgZWFzaWx5IGJ5IGBiaW4vcmVnZW5lcmF0b3IgLS1pbmNsdWRlLXJ1bnRpbWUgc2NyaXB0LmpzYC5cbiAgcmV0dXJuIGV4cG9ydHM7XG5cbn0oXG4gIC8vIElmIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyBhcyBhIENvbW1vbkpTIG1vZHVsZSwgdXNlIG1vZHVsZS5leHBvcnRzXG4gIC8vIGFzIHRoZSByZWdlbmVyYXRvclJ1bnRpbWUgbmFtZXNwYWNlLiBPdGhlcndpc2UgY3JlYXRlIGEgbmV3IGVtcHR5XG4gIC8vIG9iamVjdC4gRWl0aGVyIHdheSwgdGhlIHJlc3VsdGluZyBvYmplY3Qgd2lsbCBiZSB1c2VkIHRvIGluaXRpYWxpemVcbiAgLy8gdGhlIHJlZ2VuZXJhdG9yUnVudGltZSB2YXJpYWJsZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS5cbiAgdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiA/IG1vZHVsZS5leHBvcnRzIDoge31cbikpO1xuXG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgLy8gVGhpcyBtb2R1bGUgc2hvdWxkIG5vdCBiZSBydW5uaW5nIGluIHN0cmljdCBtb2RlLCBzbyB0aGUgYWJvdmVcbiAgLy8gYXNzaWdubWVudCBzaG91bGQgYWx3YXlzIHdvcmsgdW5sZXNzIHNvbWV0aGluZyBpcyBtaXNjb25maWd1cmVkLiBKdXN0XG4gIC8vIGluIGNhc2UgcnVudGltZS5qcyBhY2NpZGVudGFsbHkgcnVucyBpbiBzdHJpY3QgbW9kZSwgd2UgY2FuIGVzY2FwZVxuICAvLyBzdHJpY3QgbW9kZSB1c2luZyBhIGdsb2JhbCBGdW5jdGlvbiBjYWxsLiBUaGlzIGNvdWxkIGNvbmNlaXZhYmx5IGZhaWxcbiAgLy8gaWYgYSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBmb3JiaWRzIHVzaW5nIEZ1bmN0aW9uLCBidXQgaW4gdGhhdCBjYXNlXG4gIC8vIHRoZSBwcm9wZXIgc29sdXRpb24gaXMgdG8gZml4IHRoZSBhY2NpZGVudGFsIHN0cmljdCBtb2RlIHByb2JsZW0uIElmXG4gIC8vIHlvdSd2ZSBtaXNjb25maWd1cmVkIHlvdXIgYnVuZGxlciB0byBmb3JjZSBzdHJpY3QgbW9kZSBhbmQgYXBwbGllZCBhXG4gIC8vIENTUCB0byBmb3JiaWQgRnVuY3Rpb24sIGFuZCB5b3UncmUgbm90IHdpbGxpbmcgdG8gZml4IGVpdGhlciBvZiB0aG9zZVxuICAvLyBwcm9ibGVtcywgcGxlYXNlIGRldGFpbCB5b3VyIHVuaXF1ZSBwcmVkaWNhbWVudCBpbiBhIEdpdEh1YiBpc3N1ZS5cbiAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdGlmKF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0pIHtcblx0XHRyZXR1cm4gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gbW9kdWxlWydkZWZhdWx0J10gOlxuXHRcdCgpID0+IG1vZHVsZTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLy8gbW9kdWxlIGV4cG9ydHMgbXVzdCBiZSByZXR1cm5lZCBmcm9tIHJ1bnRpbWUgc28gZW50cnkgaW5saW5pbmcgaXMgZGlzYWJsZWRcbi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xucmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9
11380
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vUHJpdmFjeU1vZGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZUxpc3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvU3RyaW5ncy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9hc3NlcnRVbnJlYWNoYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0FwcGVuZGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0NvbnNvbGVBcHBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckRlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nVGhyZXNob2xkLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZUhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1NkcFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1JlYWRPbmx5U3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvU3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvU0RLLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvVGVsZW1ldHJ5VXJsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbFN0YXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVNb2RlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlU3RhdGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9FbmRQb2ludC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2VkZ2VBdXRoL0VkZ2VBdXRoLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9DaHVua2VkU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0hsc1BsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9MaXZlU3RyZWFtaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL05ldHdvcmtTdGF0ZXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvUmVhbFRpbWVTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvU2hha2FQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvU3RyZWFtRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9XZWJQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0R1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9EaW1lbnNpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3N0YXJ0dXAiXSwibmFtZXMiOlsiZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQiLCJBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIkRpc3Bvc2FibGVMaXN0IiwiRGF0ZSIsIm5vdyIsIl9pc0ZvcmVncm91bmQiLCJTdWJqZWN0IiwiX3JlYWRPbmx5SXNGb3JlZ3JvdW5kIiwiUmVhZE9ubHlTdWJqZWN0IiwiZGV0ZWN0VGFiRm9jdXNDaGFuZ2UiLCJfdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlIiwiX2Rpc3Bvc2FibGVzIiwiZGlzcG9zZSIsImhpZGRlbiIsInZpc2liaWxpdHlDaGFuZ2UiLCJkb2N1bWVudCIsIm1zSGlkZGVuIiwid2Via2l0SGlkZGVuIiwiaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSIsImlzRm9yZWdyb3VuZCIsInNldEZvY3VzU3RhdGUiLCJhZGRFdmVudExpc3RlbmVyIiwiYWRkIiwiRGlzcG9zYWJsZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzIiwiY2FsbCIsIl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwiLCJ3aW5kb3ciLCJzZXRJbnRlcnZhbCIsImhhc0ZvY3VzIiwiY2xlYXJJbnRlcnZhbCIsInZhbHVlIiwiQnJvd3NlckRldGVjdG9yIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibWF0Y2giLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiIsImJyb3dzZXJOYW1lTGlzdCIsInNwbGl0IiwiYnJvd3NlclZlcnNpb25MaXN0IiwiZnVsbFZlcnNpb24iLCJOdW1iZXIiLCJtc2llIiwiaW5kZXhPZiIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwidHJpZGVudCIsInZlcnNpb24iLCJfYnJvd3Nlck5hbWUiLCJfYnJvd3Nlck1ham9yVmVyc2lvbiIsIl9pc0Nocm9tZTY5IiwiX2lzQ2hyb21lNzAiLCJfaXNDaHJvbWU3MSIsIl9pc0Nocm9tZTcyIiwiX2lzQ2hyb21lNzQiLCJfaXNDaHJvbWU3NSIsIl9pc0Nocm9tZTc2IiwiX2lzQ2hyb21lNzciLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsInBhcnNlQnJvd3Nlck5hbWUiLCJwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24iLCJpbmNsdWRlcyIsIkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJuYW1lIiwicmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZSIsInJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUiLCJkZWZhdWx0U3RyaW5nVmFsdWUiLCJ2YWx1ZUZyb21VcmkiLCJkZWZhdWx0Qm9vbGVhblZhbHVlIiwibWV0YVZhbHVlIiwicXVlcnlTZWxlY3RvciIsImdldEF0dHJpYnV0ZSIsInZhbHVlVVJJUGFyYW1ldGVyTmFtZSIsIlVSTFNlYXJjaFBhcmFtcyIsImxvY2F0aW9uIiwic2VhcmNoIiwiZ2V0IiwidW5kZWZpbmVkIiwiVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIiwiVGVsZW1ldHJ5RGVmYXVsdCIsIkxvZ2dpbmdMZXZlbE1hcHBpbmciLCJMb2dnZXJEZWZhdWx0cyIsIk5ldHdvcmtNb25pdG9yIiwiaXNTdXBwb3J0ZWQiLCJzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMiLCJ1cGRhdGVTdGF0aXN0aWNzIiwiZG93bmxpbmsiLCJkb3dubGlua01heCIsImVmZmVjdGl2ZVR5cGUiLCJ0eXBlIiwicnR0IiwibGlzdGVuZXIiLCJfcnR0IiwiZ2V0Um91bmRUcmlwVGltZSIsIl9lZmZlY3RpdmVUeXBlIiwiZ2V0RWZmZWN0aXZlVHlwZSIsIl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiX2lzU3VwcG9ydGVkIiwiUHJpdmFjeU1vZGUiLCJfaXNQcml2YXRlIiwiX19QUklWQUNZX01PREVfXyIsImUiLCJhcHBseUlzUHJpdmF0ZSIsIlN0cmVhbVNldHVwTGlzdGVuZXIiLCJwYWdlTG9hZFRpbWUiLCJMb2dnZXJGYWN0b3J5IiwiU0RLIiwiX3N0YXJ0VGltZSIsIl9wYWdlTG9hZFRpbWUiLCJzdHJlYW1JZCIsInJlY29yZFN0cmVhbU1ldHJpYyIsIk1ldHJpY3NUeXBlIiwibWV0cmljVHlwZSIsIl9tZXRyaWNTdWJtaXR0ZWQiLCJzZXR1cFRpbWUiLCJtZXRyaWNOYW1lIiwiTWV0cmljVHlwZSIsImdldE5hbWUiLCJtZXRyaWNzU2VydmljZSIsInB1c2giLCJydW50aW1lIiwidWludDY0IiwiX2xvZ2dlciIsImluZm8iLCJEdXJhdGlvbnMiLCJ0b0lzb1N0cmluZyIsImRpc3Bvc2FibGUiLCJfZGlzcG9zZWQiLCJfZGlzcG9zYWJsZSIsIl9saXN0IiwiZm9yRWFjaCIsImxlbmd0aCIsIlN0cmluZ3MiLCJyYW5kb20xM0NoYXJhY3RlcnMiLCJNYXRoIiwicmFuZG9tIiwidG9TdHJpbmciLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiRXJyb3IiLCJhc3NlcnRVbnJlYWNoYWJsZSIsIngiLCJBcHBlbmRlcnMiLCJhcHBlbmRlciIsIl9hcHBlbmRlcnMiLCJpdGVtcyIsIml0ZW0iLCJDb25zb2xlQXBwZW5kZXIiLCJsb2dMZXZlbCIsIm1lc3NhZ2UiLCJjYXRlZ29yeSIsImRhdGUiLCJfdGhyZXNob2xkIiwiZnVsbE1lc3NhZ2UiLCJ0b0lTT1N0cmluZyIsIkxvZ2dpbmdMZXZlbCIsImNvbnNvbGUiLCJsb2ciLCJlcnJvciIsInRocmVzaG9sZCIsIkxvZ2dlciIsIlRyYWNlIiwiYXJncyIsIkRlYnVnIiwiSW5mbyIsIldhcm4iLCJGYXRhbCIsImxldmVsIiwicmVwbGFjZVBsYWNlaG9sZGVycyIsInJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmciLCJpbmRleCIsInJlcGxhY2VBcmd1bWVudCIsInNwbGljZSIsInN0cmluZ2lmeSIsImFjY3VtdWxhdG9yIiwiY3VycmVudFZhbHVlIiwiYXJyYXkiLCJzdGFjayIsImFyZyIsImNhY2hlIiwiSlNPTiIsImtleSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX2NhdGVnb3J5IiwiYXBwZW5kZXJzIiwibG9nZ2VyIiwiX2xvZ2dlcnMiLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwiZ2V0U3RyaW5nVmFsdWUiLCJzZXRUaHJlc2hvbGQiLCJhcHBseUFwcGVuZGVyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJUZWxlbWV0cnlBcHBlbmRlciIsIkxvZ2dpbmdUaHJlc2hvbGQiLCJUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImxvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJUZWxlbWV0cnlMZXZlbCIsIk1ldHJpY3NDb25maWd1cmF0aW9uIiwiX3VybCIsInVybCIsIm1ldHJpY3NVcmwiLCJVUkwiLCJwYXRobmFtZSIsIl9lbnZpcm9ubWVudCIsImVudmlyb25tZW50IiwiX3RlbmFuY3kiLCJ0ZW5hbmN5IiwiX3Nlc3Npb25JZCIsInNlc3Npb25JZCIsIk1ldHJpY3NGYWN0b3J5IiwibWV0cmljc1NlcnZpY2VzIiwiX21ldHJpY3NTZXJ2aWNlcyIsIm1ldHJpY3NDb25maWd1cmF0aW9uIiwiVGVsZW1ldHJ5VXJsIiwiRW52aXJvbm1lbnQiLCJNZXRyaWNzU2VydmljZSIsInRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwicmVxdWVzdFNpemVMaW1pdCIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwibWV0cmljIiwicHJldmlvdXNWYWx1ZSIsInJlc291cmNlIiwia2luZCIsImdldFRlbGVtZXRyeUxldmVsIiwibWV0cmljUmVjb3JkIiwidGltZXN0YW1wIiwiZnVsbFF1YWxpZmllZE5hbWUiLCJfZG9tYWluIiwiVmVyc2lvbk1hbmFnZXIiLCJpZ25vcmVkIiwic2VuZE1ldHJpY3NJZkFibGUiLCJtZXRyaWNzTWVzc2FnZXMiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwicmVjb3JkcyIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsIl9pc1NlbmRpbmciLCJzbGljZSIsInNlbmRNZXRyaWNzIiwidGhlbiIsInJlc3BvbnNlIiwiY2F0Y2giLCJ0ZWxlbWV0cnlMZXZlbFR5cGUiLCJQcm9taXNlIiwiY2FsbGJhY2siLCJUeXBlRXJyb3IiLCJfc3RhdGUiLCJfaGFuZGxlZCIsIl92YWx1ZSIsIl9kZWZlcnJlZHMiLCJkb1Jlc29sdmUiLCJkb25lIiwicHJvbWlzZVJlc29sdmUiLCJyZWFzb24iLCJwcm9taXNlUmVqZWN0IiwibmV3VmFsdWUiLCJwcm9taXNlIiwiZmluYWxlIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfaW1tZWRpYXRlIiwiX3VuaGFuZGxlZFJlamVjdGlvbiIsImkiLCJsZW4iLCJoYW5kbGUiLCJkZWZlcnJlZCIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInJlc3VsdCIsImFyciIsInJlc29sdmUiLCJyZWplY3QiLCJpc0FycmF5IiwicHJvdG90eXBlIiwicmVtYWluaW5nIiwibWFuYWdlUmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsIl8iLCJzZXRUaW1lb3V0Iiwid2FybiIsIlByb21pc2VIYW5kbGVyIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiRmVhdHVyZUVuYWJsZW1lbnQiLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY2FjaGVkIiwiY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsInBlZXJDb25uZWN0aW9uRmFjdG9yeSIsImNyZWF0ZVBlZXJDb25uZWN0aW9uIiwicGVlckNvbm5lY3Rpb24iLCJzdXBwb3J0c0FkZFRyYW5zY2VpdmVyIiwiYXVkaW9UcmFuc2NlaXZlciIsImFkZFRyYW5zY2VpdmVyIiwiZGlyZWN0aW9uIiwidmlkZW9UcmFuc2NlaXZlciIsImNyZWF0ZU9mZmVyIiwib2ZmZXJUb1JlY2VpdmVBdWRpbyIsIm9mZmVyVG9SZWNlaXZlVmlkZW8iLCJsb2NhbE9mZmVyIiwiaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZyIsInVwZGF0ZVN0YXRpc3RpY1RpbWVPdXQiLCJSdGNDb25uZWN0aW9uTW9uaXRvciIsIm1lZGlhU3RyZWFtIiwiZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl9wZWVyQ29ubmVjdGlvbiIsIl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3RyYWNrc1RvTW9uaXRvciIsImdldFRyYWNrcyIsIm1hcCIsInRyYWNrIiwicGFyc2VkU0RQIiwiU2RwUGFyc2VyIiwiY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIiwic2RwIiwiX2VzdGltYXRlZEF1ZGlvQ29kZWMiLCJhdWRpb0NvZGVjIiwiX2VzdGltYXRlZFZpZGVvQ29kZWMiLCJ2aWRlb0NvZGVjIiwidXBkYXRlU3RhdGlzdGljIiwiX2lzTW9uaXRvclJ1bm5pbmciLCJfdXBkYXRlVGltZU91dCIsImNsZWFyVGltZW91dCIsInVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImdldEtpbmRGb3JTYWZhcmkxMSIsImlkIiwiZ2V0U3RhdHMiLCJzdGF0cyIsInJ0Y1N0YXRzIiwicm91bmRUcmlwVGltZSIsImxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCIsInJlcG9ydCIsImN1cnJlbnRSb3VuZFRyaXBUaW1lIiwibWVkaWFUeXBlIiwiY29kZWMiLCJjb2RlY0lkIiwibWltZVR5cGUiLCJzc3JjIiwiYnl0ZXNSZWNlaXZlZCIsInBhY2tldHNMb3N0IiwicGFja2V0c1JlY2VpdmVkIiwiZ2V0Q29kZWNCeVR5cGUiLCJfcnRjU3RhdGlzdGljIiwidmlkZW8iLCJmcmFtZXNEZWNvZGVkIiwiZ2V0U3RhdHNMZWdhY3kiLCJuYW1lcyIsInN0YXQiLCJfc2RwIiwiX2F1ZGlvQ29kZWMiLCJhcHBseUNvZGVjIiwiX3ZpZGVvQ29kZWMiLCJzcGxpdFNkcCIsInVzZWRDb2RlY0xpbmUiLCJmaW5kIiwidXNlZENvZGVjIiwiY29kZWNOYW1lIiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uIiwiY29uZmlndXJhdGlvbiIsIndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIiwiUlRDUGVlckNvbm5lY3Rpb24iLCJvcHRpb25zIiwiY3JlYXRlQW5zd2VyIiwiZGVzY3JpcHRpb24iLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiaGFzQ3J5cHRvIiwic2V0UmVtb3RlRGVzY3JpcHRpb24iLCJzZWxlY3RvciIsImdldENvbmZpZ3VyYXRpb24iLCJzZXRDb25maWd1cmF0aW9uIiwiY2xvc2UiLCJjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiIsImljZUNvbm5lY3Rpb25TdGF0ZSIsImhhbmRsZXIiLCJvbnRyYWNrIiwib25pY2VjYW5kaWRhdGUiLCJvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJzdWJqZWN0IiwiX3N1YmplY3QiLCJzdWJzY3JpYmUiLCJEaXNwb3NhYmxlTGlzdGVuZXIiLCJsaXN0ZW5lcnMiLCJpZHgiLCJfbGlzdGVuZXJzIiwiY2hhbmdlZCIsImNvbXBhcmFibGUiLCJlcXVhbHMiLCJiYXNlVVJMIiwib3JpZ2luIiwidGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImNsaWVudFNlc3Npb25JZCIsImlnbm9yZWRFbnZpcm9ubWVudCIsImlnbm9yZWREaXNjb3ZlcnlVcmkiLCJ0ZWxlbWV0cnlVcmwiLCJ0ZWxlbWV0cnlBcHBlbmRlciIsInJlbW92ZSIsImlnbm9yZWRUZW5hbmN5IiwiX21ldHJpY3NTZXJ2aWNlIiwiRGlzY292ZXJ5VXJpIiwiaWdub3JlZFRlbGVtZXRyeUxldmVsIiwiX3RlbGVtZXRyeUxldmVsIiwiX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSIsImdldEJvb2xlYW5WYWx1ZSIsIl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJkaXNjb3ZlcnlVcmkiLCJnZXRUZWxlbWV0cnlVcmwiLCJjaGFubmVsVG9rZW4iLCJwYXJzZWRUb2tlbiIsIkVkZ2VBdXRoIiwidXJpVmFsdWUiLCJiYXNlVVJJVmFsdWUiLCJfaW5pdGlhbGl6ZWQiLCJfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfcGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiY29uc29sZUxvZ2dpbmdMZXZlbCIsImNvbnNvbGVBcHBlbmRlciIsImF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwiX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwid2ViUGxheWVyTG9hZGVyIiwiX3dlYlBsYXllckxvYWRlciIsInNoYWthUGxheWVyTG9hZGVyIiwiX3NoYWthUGxheWVyTG9hZGVyIiwiaGxzSnNMb2FkZXIiLCJfaGxzSnNMb2FkZXIiLCJfc2VuZExvY2FsQ2FuZGlkYXRlcyIsIl9jbGllbnRTZXNzaW9uSWQiLCJfbG9hZGVkVGltZXN0YW1wIiwiX3JlYWRPbmx5SW5pdGlhbGl6ZWQiLCJfcmVhZE9ubHlEaXNjb3ZlcnlVcmkiLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJfdGVsZW1ldHJ5VXJsIiwiX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJyZXRyaWVzQW1vdW50IiwiYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uIiwiYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJpbml0Iiwic2VnbWVudHMiLCJwcm90b2NvbCIsInVuc2hpZnQiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJkZWZhdWx0VGFyZ2V0TGFnIiwiZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uIiwiYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZHMiLCJmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIm1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwic3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwiQ2hhbm5lbCIsInZpZGVvRWxlbWVudCIsInRva2VuIiwidGFyZ2V0TGFnIiwiX2NvbnRleHQiLCJDaGFubmVsQ29udGV4dCIsIl9jaGFubmVsU3RhcnRUaW1lIiwiX3JlYWRPbmx5VmlkZW9FbGVtZW50IiwiX3JlYWRPbmx5VG9rZW4iLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiIsIl9yZWFkT25seVN0YXRlIiwic3RhdGUiLCJfcmVhZE9ubHlBdXRvTXV0ZWQiLCJhdXRvTXV0ZWQiLCJfcmVhZE9ubHlBdXRvUGF1c2VkIiwiYXV0b1BhdXNlZCIsIl9yZWFkT25seVRva2VuRXhwaXJpbmciLCJ0b2tlbkV4cGlyaW5nIiwiX3JlYWRPbmx5QXV0aG9yaXplZCIsImF1dGhvcml6ZWQiLCJfcmVhZE9ubHlPbmxpbmUiLCJvbmxpbmUiLCJfcmVhZE9ubHlMb2FkaW5nIiwibG9hZGluZyIsIl9yZWFkT25seVBsYXlpbmciLCJwbGF5aW5nIiwiX3JlYWRPbmx5U3RhbmRieSIsInN0YW5kYnkiLCJfcmVhZE9ubHlTdG9wcGVkIiwic3RvcHBlZCIsIl9yZWFkT25seVRhcmdldExhZyIsIl9yZWFkT25seUxhZyIsImxhZyIsIl9yZWFkT25seUJpdHJhdGVMaW1pdCIsImJpdHJhdGVMaW1pdCIsIl9yZWFkT25seVJlc29sdXRpb24iLCJyZXNvbHV0aW9uIiwiX3JlYWRPbmx5RmFpbHVyZUNvdW50IiwiZmFpbHVyZUNvdW50IiwiX3JlYWRPbmx5RW5kUG9pbnQiLCJlbmRQb2ludCIsIl9yZWFkT25seVN0cmVhbSIsInN0cmVhbSIsIl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MiLCJydGNTdGF0aXN0aWNzIiwiX3JlYWRPbmx5TWVkaWFTdHJlYW0iLCJzZXNzaW9uVGVsZW1ldHJ5IiwiU2Vzc2lvblRlbGVtZXRyeSIsImNoYW5uZWxEaXNwb3NhYmxlcyIsIl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIiLCJoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCIsInJlbmRlcmVyRGlzcG9zYWJsZXMiLCJ2aWRlb1RlbGVtZXRyeSIsImRhdGFzZXQiLCJWaWRlb1RlbGVtZXRyeSIsInNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUiLCJzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmciLCJDaGFubmVsU3RhdGUiLCJyZXN0YXJ0QWZ0ZXJTdG9wIiwiY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0Iiwib25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzIiwiZWxhcHNlZEluTWlsbGlzZWNvbmRzIiwiY2hhbm5lbEluaXRpYWxpemF0aW9uIiwiZ2V0VGltZSIsImxpbWl0Qml0cmF0ZSIsInN0YXJ0Iiwid2lkdGgiLCJ2aWRlb1dpZHRoIiwiaGVpZ2h0IiwidmlkZW9IZWlnaHQiLCJEaW1lbnNpb24iLCJiaXRyYXRlSW5CaXRzUGVyU2Vjb25kIiwic3RhdHVzIiwiaXNTdGFydGluZyIsInByb2Nlc3NTdG9wIiwicGF1c2UiLCJzcmNPYmplY3QiLCJjbGVhblVwUmVzb3VyY2VzIiwicGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJtdXRlZCIsInN0b3AiLCJpc0Rpc3Bvc2VkIiwicHJvY2Vzc1N0YXJ0IiwiZmluYWxseSIsImxpc3Rlbk9uU3RyZWFtU2V0dXAiLCJ1cmkiLCJnZXRVcmkiLCJoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2siLCJoYW5kbGVTdHJlYW1GYWlsdXJlIiwic3RyZWFtUGxheWVyIiwiU3RyZWFtRmFjdG9yeSIsImZhaWwiLCJ0aW1lb3V0SWQiLCJnZXRSZXRyeUludGVydmFsIiwiZGlzcG9zYWJsZXMiLCJtaW4iLCJwb3ciLCJtYXgiLCJkZXN0cm95U3RyZWFtIiwicGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsInBsYXlQcm9taXNlIiwicGxheSIsImhhc0F1ZGlvVHJhY2siLCJmaWx0ZXIiLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiIsIkNoYW5uZWxzIiwiZGVmYXVsdERpc2NvdmVyeVVyaSIsIkJpdHJhdGVNb2RlTWFwcGluZyIsImJpdHJhdGVNb2RlIiwiQml0cmF0ZVN0YXRlTWFwcGluZyIsImJpdHJhdGVTdGF0ZSIsImRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwiLCJEaXNjb3ZlcnkiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwiX2NhY2hlIiwiZGlzY292ZXJ5U2VydmljZSIsIkRpc2NvdmVyeVNlcnZpY2UiLCJjYWNoZWRWYWx1ZSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwicHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkiLCJkZWZhdWx0VGltZW91dCIsIl91cmkiLCJ0aW1lb3V0IiwicmFjZSIsIm9rIiwidGV4dCIsImFzU3RyaW5nIiwiZW5kUG9pbnRzIiwiRW5kUG9pbnQiLCJkaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsIm5ldmVyUmVzb2x2ZSIsInBpbmciLCJ0aW1lIiwic2RrVmVyc2lvbiIsIl9kaXNjb3ZlcnlVcmkiLCJhcGlWZXJzaW9uIiwiX3RpbWVvdXQiLCJidWlsZFBpbmdVcmwiLCJmaW5pc2hlZCIsIl9yb3VuZFRyaXBUaW1lIiwibG9jYWxTZXNzaW9uRGVzY3JpcHRpb24iLCJhcHBsaWNhdGlvbklkIiwiYnVpbGRVcmwiLCJjbGllbnRWZXJzaW9uIiwiYm9keVdpdGhPZmZlciIsImVkZ2VBdXRoVG9rZW4iLCJzZXNzaW9uRGVzY3JpcHRpb24iLCJjb252ZXJ0UlRDU2RwVHlwZVRvU2RwVHlwZSIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uIiwiYm9keVdpdGhvdXRPZmZlciIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb24iLCJodHRwUmVzcG9uc2UiLCJtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsInN1YnNjcmliZVJlc3BvbnNlIiwiZGVidWciLCJzaGFyZWRTZWNyZXQiLCJtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwibWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMiLCJjYW5kaWRhdGVzIiwiZGlzY292ZXJ5Q29tcGxldGVkIiwibWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsImFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJkZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJwYXRoIiwicGF0aEFzQXJyYXkiLCJjb25jYXQiLCJqc29uIiwicnRjQ29uZmlndXJhdGlvbiIsImJ1bmRsZVBvbGljeSIsImljZUNhbmRpZGF0ZVBvb2xTaXplIiwiaWNlU2VydmVycyIsInVybHMiLCJ1c2VybmFtZSIsImNyZWRlbnRpYWwiLCJpY2VUcmFuc3BvcnRQb2xpY3kiLCJwZWVySWRlbnRpdHkiLCJydGNwTXV4UG9saWN5IiwiY29udmVydElTZXNzaW9uRGVzY3JpcHRpb25Ub1JUQ1Nlc3Npb25EZXNjcmlwdGlvbiIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UiLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UiLCJydGNTZXNzaW9uRGVzY3JpcHRpb24iLCJlZGdlQXV0aFRva2VuUHJlZml4IiwiaXNWYWxpZFRva2VuIiwiZW5jb2RlZEVkZ2VBdXRoVG9rZW4iLCJhdG9iIiwic3Vic3RyIiwicGFyc2UiLCJDaHVua2VkU3RyZWFtIiwiY2hhbm5lbENvbnRleHQiLCJfY2hhbm5lbENvbnRleHQiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsImFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCIsIm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsImFwcGx5U3RhdHVzIiwib2ZmZXJTZHAiLCJvcmlnaW5TdGFydFRpbWUiLCJMaXZlU3RyZWFtaW5nIiwicGxheWVyIiwibW9uaXRvciIsIl9tb25pdG9yRGlzcG9zYWJsZXMiLCJuZXdTdHJlYW1TdGF0aXN0aWNzIiwiX3N0cmVhbVN0YXRpc3RpY3MiLCJjdXJyZW50VGltZSIsImRhdGFCdWZmZXJlZCIsIl9tb25pdG9yRmFpbHVyZUNvdW50IiwicGF1c2VkIiwiSGxzUGxheWVyIiwibWFuaWZlc3RVUkkiLCJfdmlkZW9FbGVtZW50IiwiX2tpbmQiLCJfc3RyZWFtSWQiLCJfbWFuaWZlc3RVUkkiLCJlbmNvZGVVUkkiLCJyZXBsYWNlIiwiX29wdGlvbnMiLCJfcGxheWVyIiwiZW5hYmxlV29ya2VyIiwibWF4QnVmZmVyTGVuZ3RoIiwibGl2ZUJhY2tCdWZmZXJMZW5ndGgiLCJsaXZlU3luY0R1cmF0aW9uIiwibGl2ZUR1cmF0aW9uSW5maW5pdHkiLCJsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uIiwiSW5maW5pdHkiLCJoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2QiLCJsb2FkU291cmNlIiwiYXR0YWNoTWVkaWEiLCJjYW5QbGF5VHlwZSIsInNyYyIsIm5ldHdvcmtTdGF0ZSIsIk5ldHdvcmtTdGF0ZXMiLCJOZXR3b3JrTm9Tb3VyY2UiLCJzdGF0aXN0aWNzIiwibWVkaWEiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImJ1ZmZlcmVkIiwiZW5kIiwic3RyZWFtQ29udHJvbGxlciIsInRydWVDdXJyZW50VGltZSIsImRlc3Ryb3kiLCJfaGxzUGxheWVyIiwiX3NoYWthIiwiX3BoZW5peFdlYlBsYXllciIsImxvYWRlZCIsIl9wZW5kaW5nIiwiUGxheWVyIiwiZGFzaE1hbmlmZXN0VXJsTWF0Y2giLCJobHNNYW5pZmVzdFVybE1hdGNoIiwibWFuaWZlc3RVcmwiLCJwbGF5bGlzdFVybCIsInByZWZlck5hdGl2ZSIsInNob3VsZFVzZU5hdGl2ZUhscyIsIldlYlBsYXllciIsIlNoYWthUGxheWVyIiwiaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwiLCJkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0IiwiUmVhbFRpbWVTdHJlYW0iLCJhbGwiLCJzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24iLCJzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24iLCJhcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJzdWJtaXRDYW5kaWRhdGVzVGltZW91dCIsImNhbmNlbERpc2NvdmVyeSIsImNhbmRpZGF0ZSIsImFkZEljZUNhbmRpZGF0ZXMiLCJyZXRyeUNhbGxiYWNrIiwib25MaW5lIiwicmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJtZWRpYVN0cmVhbVByb21pc2UiLCJzdHJlYW1zIiwidHJhY2tMaXN0ZW5lciIsImFuc3dlciIsIm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwic3VjY2VzcyIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwicnRjU3RhdGlzdGljIiwicnRjVmlkZW9TdGF0aXN0aWMiLCJydGNBdWRpb1N0YXRpc3RpYyIsImF1ZGlvIiwiYXVkaW9UcmFja0ZhaWxlZCIsInZpZGVvVHJhY2tGYWlsZWQiLCJvcHRpb25hbFBlZXJDb25uZWN0aW9uIiwidHJ1bmNhdGVJY2VTZXJ2ZXJzIiwibmV3UnRjQ29uZmlndXJhdGlvbiIsImljZVJlc3RhcnQiLCJvZmZlciIsInBsYXllck9wdGlvbnMiLCJhYnIiLCJkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGUiLCJtYW5pZmVzdCIsInJldHJ5UGFyYW1ldGVycyIsInN0cmVhbWluZyIsInJlYnVmZmVyaW5nR29hbCIsImJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJCZWhpbmQiLCJtYXhBdHRlbXB0cyIsImJhY2tvZmZGYWN0b3IiLCJsb2FkUGxheWVyIiwiZXN0aW1hdGVkQmFuZHdpZHRoIiwicGxheVRpbWUiLCJ1bmxvYWQiLCJwbGF5ZXJDb25maWciLCJjb25maWd1cmUiLCJsb2FkIiwiY29kZSIsImlzUnRtcCIsImNhcGFiaWxpdGllcyIsImlzU3RyZWFtaW5nIiwiYmFuZHdpZHRoVG9TdGFydEF0IiwibWluVGltZUJlZm9yZU5leHRSZWxvYWQiLCJlcnJvck9iamVjdCIsImNhblJlbG9hZCIsInNldmVyaXR5IiwicmVsb2FkSWZBYmxlIiwiaXNOYXRpdmUiLCJkZWxpdmVyeVR5cGUiLCJoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZCIsIl9sYXN0UmVsb2FkVGltZSIsInJlbG9hZCIsIl9fU0RLVkVSU0lPTl9fIiwiX2RlZmF1bHRWZXJzaW9uIiwiX3RlbGVtZXRyeVNlcnZpY2UiLCJUZWxlbWV0cnlTZXJ2aWNlIiwibG9nUmVjb3JkIiwiX2xvZ3MiLCJzZW5kTG9nc0lmQWJsZSIsImxvZ01lc3NhZ2VzIiwibnVtYmVyT2ZMb2dzVG9TZW5kIiwic2l6ZU9mTG9nc1RvU2VuZCIsImdldExvZ1NpemUiLCJzdW0iLCJzZW5kTG9ncyIsImR1cmF0aW9uIiwiX2R1cmF0aW9uIiwiaXNOZWdhdGl2ZSIsImFicyIsIm9mZnNldCIsImZsb29yIiwibWlsbGlzZWNvbmRzIiwic2Vjb25kcyIsIm1pbnV0ZXMiLCJob3VycyIsInBhcnRzIiwiU3RyaW5nIiwicGFkU3RhcnQiLCJ0YXJnZXRMZW5ndGgiLCJwYWRTdHJpbmciLCJyZXBlYXQiLCJvdGhlciIsIl9uZXR3b3JrTW9uaXRvciIsInJlY29yZEZvcmVncm91bmRDaGFuZ2UiLCJyZWNvcmROZXR3b3JrUlRUVXBkYXRlIiwicmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUiLCJkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsInJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSIsInRpbWVTaW5jZUxhc3RDaGFuZ2UiLCJnZXRUaW1lU2luY2VMYXN0Q2hhbmdlIiwibmV3UlRUIiwib2xkUnR0IiwiX2xhc3ROZXR3b3JrU3RhdGlzdGljcyIsIm5ld05ldHdvcmtUeXBlIiwib2xkTmV0d29ya1R5cGUiLCJuZXdDYXBhY2l0eSIsIm9sZENhcGFjaXR5IiwiZmxvYXQiLCJjaGFubmVsU3RhcnRUaW1lIiwiX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSIsIl9saXN0ZW5Ub0ZpcnN0VGltZSIsImNhbGxUaW1lVG9GaXJzdEZyYW1lIiwiX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyIiwiX2xpc3RlbkZvclN0YWxsIiwib25TdGFsbCIsIl9saXN0ZW5Gb3JDb250aW51YXRpb24iLCJldmVudCIsIm9uQ29udGludWF0aW9uIiwiX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciIsInB1c2hUaW1lVG9GaXJzdEZyYW1lIiwicHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdGltZVRvRmlyc3RGcmFtZSIsImR1cmF0aW9uU2luY2VQYWdlTG9hZCIsIl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3ZpZGVvU3RhbGxlZCIsImJ1ZmZlckxlbmd0aCIsImhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50IiwiX2xhc3RQcm9ncmVzcyIsInRpbWVTaW5jZVN0b3AiLCJuZXdSZXNvbHV0aW9uIiwiX3ZpZGVvUmVzb2x1dGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7OztBQ1ZBO0FBQ0E7O0FBRUEsd0NBQXdDLFNBQVM7QUFDakQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1DOzs7Ozs7Ozs7O0FDVkE7QUFDQTtBQUNBOztBQUVBLGlDOzs7Ozs7Ozs7O0FDSkEsdUJBQXVCLG1CQUFPLENBQUMscUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7O0FBRUEsb0M7Ozs7Ozs7Ozs7QUNOQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHdDOzs7Ozs7Ozs7OztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNILElBQUksT0FBTztBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBLG1DOzs7Ozs7Ozs7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUM7Ozs7Ozs7Ozs7QUNOQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Qjs7Ozs7Ozs7OztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlDOzs7Ozs7Ozs7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDOzs7Ozs7Ozs7O0FDUEEscUJBQXFCLG1CQUFPLENBQUMsaUZBQWtCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSwyQjs7Ozs7Ozs7OztBQ2pCQTtBQUNBO0FBQ0E7O0FBRUEsa0M7Ozs7Ozs7Ozs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkMsK0JBQStCO0FBQzVFOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVDOzs7Ozs7Ozs7O0FDM0JBO0FBQ0E7QUFDQTs7QUFFQSxrQzs7Ozs7Ozs7OztBQ0pBO0FBQ0E7QUFDQTs7QUFFQSxvQzs7Ozs7Ozs7OztBQ0pBLGNBQWMsbUJBQU8sQ0FBQyxzRkFBK0I7O0FBRXJELDRCQUE0QixtQkFBTyxDQUFDLCtGQUF5Qjs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw0Qzs7Ozs7Ozs7OztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQzs7Ozs7Ozs7OztBQ1RBLHFCQUFxQixtQkFBTyxDQUFDLGlGQUFrQjs7QUFFL0MsMkJBQTJCLG1CQUFPLENBQUMsNkZBQXdCOztBQUUzRCxpQ0FBaUMsbUJBQU8sQ0FBQyx5R0FBOEI7O0FBRXZFLHNCQUFzQixtQkFBTyxDQUFDLG1GQUFtQjs7QUFFakQ7QUFDQTtBQUNBOztBQUVBLGdDOzs7Ozs7Ozs7O0FDWkEsd0JBQXdCLG1CQUFPLENBQUMsdUZBQXFCOztBQUVyRCxzQkFBc0IsbUJBQU8sQ0FBQyxtRkFBbUI7O0FBRWpELGlDQUFpQyxtQkFBTyxDQUFDLHlHQUE4Qjs7QUFFdkUsd0JBQXdCLG1CQUFPLENBQUMsdUZBQXFCOztBQUVyRDtBQUNBO0FBQ0E7O0FBRUEsb0M7Ozs7Ozs7Ozs7QUNaQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEseUI7Ozs7Ozs7Ozs7QUNoQkEsdUJBQXVCLG1CQUFPLENBQUMscUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZDOzs7Ozs7Ozs7O0FDWEEsZ0hBQStDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0EvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQU1BLG1DQUFtQyxHQUFHLElBQTVDOztJQUVxQkMsMEI7QUFPbkIsd0NBQWM7QUFBQTs7QUFBQSw2SUFOa0MsSUFBSUMseURBQUosRUFNbEM7O0FBQUE7O0FBQUE7O0FBQUEsMEpBSDhCQyxJQUFJLENBQUNDLEdBQUwsRUFHOUI7O0FBQUE7O0FBQ1osU0FBS0MsYUFBTCxHQUFxQixJQUFJQyxnREFBSixDQUFxQixJQUFyQixDQUFyQjtBQUNBLFNBQUtDLHFCQUFMLEdBQTZCLElBQUlDLHdEQUFKLENBQW9CLEtBQUtILGFBQXpCLENBQTdCO0FBQ0EsU0FBS0ksb0JBQUw7QUFDRDs7Ozs2Q0FNZ0M7QUFDL0IsYUFBT04sSUFBSSxDQUFDQyxHQUFMLEtBQWEsS0FBS00seUJBQXpCO0FBQ0Q7Ozs4QkFFZTtBQUNkLFdBQUtDLFlBQUwsQ0FBa0JDLE9BQWxCO0FBQ0Q7OzsyQ0FFb0M7QUFBQTs7QUFDbkMsVUFBSUMsTUFBSjtBQUNBLFVBQUlDLGdCQUFKOztBQUVBLFVBQUksUUFBT0MsUUFBUCw0SUFBT0EsUUFBUCxPQUFvQixRQUF4QixFQUFrQztBQUNoQztBQUNELE9BTmtDLENBUW5DOztBQUNBO0FBQ0E7OztBQUNBLFVBQUksT0FBT0EsUUFBUSxDQUFDQyxRQUFoQixLQUE2QixXQUFqQyxFQUE4QztBQUM1Q0gsY0FBTSxHQUFHLFVBQVQ7QUFDQUMsd0JBQWdCLEdBQUcsb0JBQW5CLENBRjRDLENBRzVDO0FBQ0QsT0FKRCxNQUlPLElBQUksT0FBT0MsUUFBUSxDQUFDRSxZQUFoQixLQUFpQyxXQUFyQyxFQUFrRDtBQUN2REosY0FBTSxHQUFHLGNBQVQ7QUFDQUMsd0JBQWdCLEdBQUcsd0JBQW5CO0FBQ0QsT0FITSxNQUdBLElBQUksT0FBT0MsUUFBUSxDQUFDRixNQUFoQixLQUEyQixXQUEvQixFQUE0QztBQUFFO0FBQ25EQSxjQUFNLEdBQUcsUUFBVDtBQUNBQyx3QkFBZ0IsR0FBRyxrQkFBbkI7QUFDRDtBQUNEOzs7QUFFQSxVQUFNSSxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXlCLEdBQVk7QUFDekMsWUFBTUMsWUFBWSxHQUFHLENBQUNKLFFBQVEsQ0FBQ0YsTUFBRCxDQUE5Qjs7QUFFQSxhQUFJLENBQUNPLGFBQUwsQ0FBbUJELFlBQW5CO0FBQ0QsT0FKRDs7QUFNQSxVQUFJLE9BQU9KLFFBQVEsQ0FBQ00sZ0JBQWhCLEtBQXFDLFdBQXJDLElBQW9ELE9BQU9OLFFBQVEsQ0FBQ0YsTUFBRCxDQUFmLEtBQTRCLFdBQXBGLEVBQWlHO0FBQy9GRSxnQkFBUSxDQUFDTSxnQkFBVCxDQUEwQlAsZ0JBQTFCLEVBQTRDSSxzQkFBNUMsRUFBb0UsS0FBcEU7O0FBRUEsYUFBS1AsWUFBTCxDQUFrQlcsR0FBbEIsQ0FBc0IsSUFBSUMscURBQUosQ0FBZSxZQUFNO0FBQ3pDUixrQkFBUSxDQUFDUyxtQkFBVCxDQUE2QlYsZ0JBQTdCLEVBQStDSSxzQkFBL0MsRUFBdUUsS0FBdkU7QUFDRCxTQUZxQixDQUF0QjtBQUdELE9BTkQsTUFNTztBQUNMLGFBQUtPLHNCQUFMLENBQTRCQyxJQUE1QixDQUFpQyxJQUFqQztBQUNEO0FBQ0Y7Ozs2Q0FFc0M7QUFBQTs7QUFDckMsV0FBS0Msc0JBQUwsR0FBOEJDLE1BQU0sQ0FBQ0MsV0FBUCxDQUFtQixZQUFNO0FBQ3JELFlBQU1WLFlBQVksR0FBR0osUUFBUSxDQUFDZSxRQUFULEVBQXJCOztBQUVBLGNBQUksQ0FBQ1YsYUFBTCxDQUFtQkQsWUFBbkI7QUFDRCxPQUo2QixFQUkzQm5CLG1DQUoyQixDQUE5Qjs7QUFNQSxXQUFLVyxZQUFMLENBQWtCVyxHQUFsQixDQUFzQixJQUFJQyxxREFBSixDQUFlLFlBQU07QUFDekMsWUFBSSxNQUFJLENBQUNJLHNCQUFULEVBQWlDO0FBQy9CSSx1QkFBYSxDQUFDLE1BQUksQ0FBQ0osc0JBQU4sQ0FBYjtBQUNEOztBQUVELGNBQUksQ0FBQ0Esc0JBQUwsR0FBOEIsSUFBOUI7QUFDRCxPQU5xQixDQUF0QjtBQU9EOzs7a0NBRXFCUixZLEVBQW9CO0FBQ3hDLFVBQUksS0FBS2QsYUFBTCxLQUF1QmMsWUFBM0IsRUFBeUM7QUFDdkM7QUFDRDs7QUFFRCxXQUFLZCxhQUFMLENBQW1CMkIsS0FBbkIsR0FBMkJiLFlBQTNCO0FBQ0Q7Ozt3QkEzRTRDO0FBQzNDLGFBQU8sS0FBS1oscUJBQVo7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekJIO0FBQ0E7QUFDQTtJQUNxQjBCLGU7Ozs7Ozs7aURBMkRpQztBQUNsRCxVQUFJLENBQUNDLFNBQUQsSUFBYyxDQUFDQSxTQUFTLENBQUNDLFNBQTdCLEVBQXdDO0FBQ3RDLGVBQU8sRUFBUDtBQUNEOztBQUVELFVBQU1DLHFCQUFxQixHQUFHRixTQUFTLENBQUNDLFNBQVYsQ0FBb0JFLEtBQXBCLENBQTBCSixlQUFlLENBQUNLLDJCQUExQyxDQUE5Qjs7QUFFQSxVQUFJRixxQkFBcUIsSUFBSUEscUJBQXFCLENBQUMsQ0FBRCxDQUFsRCxFQUF1RDtBQUNyRCxlQUFPQSxxQkFBcUIsQ0FBQyxDQUFELENBQTVCO0FBQ0Q7O0FBRUQsYUFBT0gsZUFBZSxDQUFDTSwrQkFBaEIsRUFBUDtBQUNEOzs7dUNBRXlDO0FBQ3hDLFVBQUksQ0FBQ04sZUFBZSxDQUFDTyxzQkFBckIsRUFBNkM7QUFDM0MsZUFBTyxFQUFQO0FBQ0Q7O0FBRUQsVUFBTUMsZUFBZSxHQUFHUixlQUFlLENBQUNPLHNCQUFoQixDQUF1Q0UsS0FBdkMsQ0FBNkMsR0FBN0MsQ0FBeEI7O0FBRUEsVUFBSSxDQUFDRCxlQUFELElBQW9CLENBQUNBLGVBQWUsQ0FBQyxDQUFELENBQXhDLEVBQTZDO0FBQzNDLGVBQU8sRUFBUDtBQUNEOztBQUVELGFBQU9BLGVBQWUsQ0FBQyxDQUFELENBQXRCO0FBQ0Q7OzsrQ0FFaUQ7QUFDaEQsVUFBSSxDQUFDUixlQUFlLENBQUNPLHNCQUFyQixFQUE2QztBQUMzQyxlQUFPLENBQVA7QUFDRDs7QUFFRCxVQUFNRyxrQkFBa0IsR0FBR1YsZUFBZSxDQUFDTyxzQkFBaEIsQ0FBdUNFLEtBQXZDLENBQTZDLEdBQTdDLENBQTNCOztBQUVBLFVBQUksQ0FBQ0Msa0JBQUQsSUFBdUIsQ0FBQ0Esa0JBQWtCLENBQUMsQ0FBRCxDQUE5QyxFQUFtRDtBQUNqRCxlQUFPLENBQVA7QUFDRDs7QUFFRCxVQUFNQyxXQUFXLEdBQUdELGtCQUFrQixDQUFDLENBQUQsQ0FBdEM7O0FBRUEsVUFBSSxDQUFDQyxXQUFMLEVBQWtCO0FBQ2hCLGVBQU8sQ0FBUDtBQUNEOztBQUVELGFBQU9DLE1BQU0sQ0FBQ0QsV0FBVyxDQUFDRixLQUFaLENBQWtCLEdBQWxCLEVBQXVCLENBQXZCLENBQUQsQ0FBTixJQUFxQyxDQUE1QztBQUNEOzs7c0RBRXdEO0FBQ3ZELFVBQUksQ0FBQ1IsU0FBRCxJQUFjLENBQUNBLFNBQVMsQ0FBQ0MsU0FBN0IsRUFBd0M7QUFDdEMsZUFBTyxFQUFQO0FBQ0Q7O0FBRUQsVUFBTUEsU0FBUyxHQUFHRCxTQUFTLENBQUNDLFNBQTVCO0FBQ0EsVUFBTVcsSUFBSSxHQUFHWCxTQUFTLENBQUNZLE9BQVYsQ0FBa0IsT0FBbEIsQ0FBYjs7QUFFQSxVQUFJRCxJQUFJLEdBQUcsQ0FBWCxFQUFjO0FBQ1o7QUFDQSw0QkFBYUUsUUFBUSxDQUFDYixTQUFTLENBQUNjLFNBQVYsQ0FBb0JILElBQUksR0FBRyxDQUEzQixFQUE4QlgsU0FBUyxDQUFDWSxPQUFWLENBQWtCLEdBQWxCLEVBQXVCRCxJQUF2QixDQUE5QixDQUFELEVBQThELEVBQTlELENBQXJCO0FBQ0Q7O0FBRUQsVUFBTUksT0FBTyxHQUFHZixTQUFTLENBQUNZLE9BQVYsQ0FBa0IsVUFBbEIsQ0FBaEI7O0FBRUEsVUFBSUcsT0FBTyxHQUFHLENBQWQsRUFBaUI7QUFDZjtBQUNBLFlBQU1DLE9BQU8sR0FBR2hCLFNBQVMsQ0FBQ1ksT0FBVixDQUFrQixLQUFsQixDQUFoQjtBQUVBLDRCQUFhQyxRQUFRLENBQUNiLFNBQVMsQ0FBQ2MsU0FBVixDQUFvQkUsT0FBTyxHQUFHLENBQTlCLEVBQWlDaEIsU0FBUyxDQUFDWSxPQUFWLENBQWtCLEdBQWxCLEVBQXVCSSxPQUF2QixDQUFqQyxDQUFELEVBQW9FLEVBQXBFLENBQXJCO0FBQ0Q7O0FBRUQsYUFBTyxFQUFQO0FBQ0Q7Ozt3QkFuSDBDO0FBQ3pDLGFBQU9sQixlQUFlLENBQUNPLHNCQUF2QjtBQUNEOzs7d0JBRWdDO0FBQy9CLGFBQU8sS0FBS1ksWUFBWjtBQUNEOzs7d0JBRXdDO0FBQ3ZDLGFBQU8sS0FBS0Msb0JBQVo7QUFDRDs7O3dCQUVnQztBQUMvQixhQUFPcEIsZUFBZSxDQUFDcUIsV0FBdkI7QUFDRDs7O3dCQUVnQztBQUMvQixhQUFPckIsZUFBZSxDQUFDc0IsV0FBdkI7QUFDRDs7O3dCQUVnQztBQUMvQixhQUFPdEIsZUFBZSxDQUFDdUIsV0FBdkI7QUFDRDs7O3dCQUVnQztBQUMvQixhQUFPdkIsZUFBZSxDQUFDd0IsV0FBdkI7QUFDRDs7O3dCQUVnQztBQUMvQixhQUFPeEIsZUFBZSxDQUFDeUIsV0FBdkI7QUFDRDs7O3dCQUVnQztBQUMvQixhQUFPekIsZUFBZSxDQUFDMEIsV0FBdkI7QUFDRDs7O3dCQUVnQztBQUMvQixhQUFPMUIsZUFBZSxDQUFDMkIsV0FBdkI7QUFDRDs7O3dCQUVnQztBQUMvQixhQUFPM0IsZUFBZSxDQUFDNEIsV0FBdkI7QUFDRDs7Ozs7O21IQXpEa0I1QixlLGlDQUNtQyw0Sjs7bUhBRG5DQSxlLDRCQUU4QkEsZUFBZSxDQUFDNkIsMEJBQWhCLEU7O21IQUY5QjdCLGUsa0JBR29CQSxlQUFlLENBQUM4QixnQkFBaEIsRTs7bUhBSHBCOUIsZSwwQkFJNEJBLGVBQWUsQ0FBQytCLHdCQUFoQixFOzttSEFKNUIvQixlLGlCQU1tQkEsZUFBZSxDQUFDTyxzQkFBaEIsQ0FBdUN5QixRQUF2QyxDQUFnRCxZQUFoRCxDOzttSEFObkJoQyxlLGlCQU9tQkEsZUFBZSxDQUFDTyxzQkFBaEIsQ0FBdUN5QixRQUF2QyxDQUFnRCxZQUFoRCxDOzttSEFQbkJoQyxlLGlCQVFtQkEsZUFBZSxDQUFDTyxzQkFBaEIsQ0FBdUN5QixRQUF2QyxDQUFnRCxZQUFoRCxDOzttSEFSbkJoQyxlLGlCQVNtQkEsZUFBZSxDQUFDTyxzQkFBaEIsQ0FBdUN5QixRQUF2QyxDQUFnRCxZQUFoRCxDOzttSEFUbkJoQyxlLGlCQVVtQkEsZUFBZSxDQUFDTyxzQkFBaEIsQ0FBdUN5QixRQUF2QyxDQUFnRCxZQUFoRCxDOzttSEFWbkJoQyxlLGlCQVdtQkEsZUFBZSxDQUFDTyxzQkFBaEIsQ0FBdUN5QixRQUF2QyxDQUFnRCxZQUFoRCxDOzttSEFYbkJoQyxlLGlCQVltQkEsZUFBZSxDQUFDTyxzQkFBaEIsQ0FBdUN5QixRQUF2QyxDQUFnRCxZQUFoRCxDOzttSEFabkJoQyxlLGlCQWFtQkEsZUFBZSxDQUFDTyxzQkFBaEIsQ0FBdUN5QixRQUF2QyxDQUFnRCxZQUFoRCxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoQnhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztJQUVxQkMsNEI7Ozs7Ozs7bUNBQ0pDLEksRUFBc0I7QUFDbkMsYUFBTyxLQUFLQywrQkFBTCxDQUFxQ0QsSUFBckMsS0FDTCxLQUFLRSxrQ0FBTCxXQUEyQ0YsSUFBM0MseUJBREssSUFFTCxLQUFLRyxrQkFBTCxDQUF3QkgsSUFBeEIsQ0FGRjtBQUdEOzs7b0NBRWVBLEksRUFBdUI7QUFDckMsVUFBTW5DLEtBQUssR0FBRyxLQUFLb0MsK0JBQUwsQ0FBcUNELElBQXJDLENBQWQ7O0FBRUEsVUFBSW5DLEtBQUosRUFBVztBQUNULGVBQU9BLEtBQUssS0FBSyxNQUFWLElBQW9CQSxLQUFLLEtBQUssR0FBOUIsSUFBcUNBLEtBQUssS0FBSyxJQUF0RDtBQUNEOztBQUVELFVBQU11QyxZQUFZLEdBQUcsS0FBS0Ysa0NBQUwsV0FBMkNGLElBQTNDLHlCQUFyQjs7QUFFQSxVQUFJSSxZQUFKLEVBQWtCO0FBQ2hCLGVBQU92QyxLQUFLLEtBQUssTUFBVixJQUFvQkEsS0FBSyxLQUFLLEdBQTlCLElBQXFDQSxLQUFLLEtBQUssSUFBdEQ7QUFDRDs7QUFFRCxhQUFPLEtBQUt3QyxtQkFBTCxDQUF5QkwsSUFBekIsTUFBbUMsSUFBMUM7QUFDRDs7O29EQXFCdUNBLEksRUFBc0I7QUFDNUQsVUFBTU0sU0FBUyxHQUFHMUQsUUFBUSxDQUFDMkQsYUFBVCxzQkFBcUNQLElBQXJDLFFBQWxCOztBQUVBLFVBQUksQ0FBQ00sU0FBTCxFQUFnQjtBQUNkO0FBQ0Q7O0FBRUQsVUFBTXpDLEtBQUssR0FBR3lDLFNBQVMsQ0FBQ0UsWUFBVixDQUF1QixPQUF2QixDQUFkOztBQUVBLFVBQUksQ0FBQzNDLEtBQUwsRUFBWTtBQUNWO0FBQ0Q7O0FBRUQsYUFBT0EsS0FBUDtBQUNEOzs7dURBRTBDbUMsSSxFQUFzQjtBQUMvRCxVQUFNUyxxQkFBcUIsR0FBRyxLQUFLUiwrQkFBTCxDQUFxQ0QsSUFBckMsQ0FBOUI7O0FBRUEsVUFBSSxDQUFDUyxxQkFBTCxFQUE0QjtBQUMxQjtBQUNEOztBQUVELFVBQU01QyxLQUFLLEdBQUcsSUFBSTZDLGVBQUosQ0FBb0JDLFFBQVEsQ0FBQ0MsTUFBN0IsRUFBcUNDLEdBQXJDLENBQXlDSixxQkFBekMsS0FBbUVLLFNBQWpGOztBQUVBLFVBQUksQ0FBQ2pELEtBQUwsRUFBWTtBQUNWO0FBQ0Q7O0FBRUQsYUFBT0EsS0FBUDtBQUNEOzs7d0JBakQyRDtBQUMxRCxhQUFPO0FBQ0wsZ0NBQXdCa0QsOEdBQUEsQ0FBZ0VDLG9GQUFoRSxDQURuQjtBQUVMLGdDQUF3QkMsc0dBQUEsQ0FBMERDLCtFQUExRCxDQUZuQjtBQUdMLHdDQUFnQ0Qsc0dBQUEsQ0FBMERDLHNGQUExRCxDQUgzQjtBQUlMLDBDQUFrQ0Qsc0dBQUEsQ0FBMERDLHdGQUExRCxDQUo3QjtBQUtMLGdDQUF3QixFQUxuQjtBQU1MLHNCQUFjLEVBTlQ7QUFPTCwyQkFBbUI7QUFQZCxPQUFQO0FBU0Q7Ozt3QkFFOEQ7QUFDN0QsYUFBTztBQUNMLGlEQUF5QyxJQURwQztBQUVMLDBEQUFrRDtBQUY3QyxPQUFQO0FBSUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2hESDtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7O0lBRXFCQyxjO0FBT25CLDRCQUFjO0FBQUE7O0FBQUEsNklBTmtDLElBQUlwRix5REFBSixFQU1sQzs7QUFBQSw2SUFMa0JnQyxTQUFTLElBQUlBLFNBQVMsQ0FBQyxZQUFELENBS3hDOztBQUFBLHFJQUoyQixJQUFJNUIsZ0RBQUosQ0FBWTJFLFNBQVosQ0FJM0I7O0FBQUEsK0lBSHFDLElBQUkzRSxnREFBSixDQUFZMkUsU0FBWixDQUdyQzs7QUFBQSw0SkFGa0QsSUFBSTNFLGdEQUFKLENBQVkyRSxTQUFaLENBRWxEOztBQUNaLFFBQUksQ0FBQyxLQUFLTSxXQUFWLEVBQXVCO0FBQ3JCO0FBQ0Q7O0FBRUQsU0FBS0MsMkJBQUw7QUFDQSxTQUFLQyxnQkFBTDtBQUNEOzs7OzhCQWtCZTtBQUNkLFdBQUs5RSxZQUFMLENBQWtCQyxPQUFsQjtBQUNEOzs7b0RBRStDO0FBQzlDLFVBQUksQ0FBQyxLQUFLMkUsV0FBVixFQUF1QjtBQUNyQixlQUFPLENBQUMsQ0FBUjtBQUNEOztBQUVELGFBQU9yRCxTQUFTLENBQUMsWUFBRCxDQUFULENBQXdCd0QsUUFBeEIsSUFBb0N4RCxTQUFTLENBQUMsWUFBRCxDQUFULENBQXdCeUQsV0FBbkU7QUFDRDs7O3VDQUVrQztBQUNqQyxVQUFJLENBQUMsS0FBS0osV0FBVixFQUF1QjtBQUNyQixlQUFPLFNBQVA7QUFDRDs7QUFFRCxhQUFPckQsU0FBUyxDQUFDLFlBQUQsQ0FBVCxDQUF3QjBELGFBQXhCLElBQXlDMUQsU0FBUyxDQUFDLFlBQUQsQ0FBVCxDQUF3QjJELElBQXhFO0FBQ0Q7Ozt1Q0FFa0M7QUFDakMsYUFBTzNELFNBQVMsQ0FBQyxZQUFELENBQVQsQ0FBd0I0RCxHQUEvQjtBQUNEOzs7a0RBRTJDO0FBQUE7O0FBQzFDLFVBQU1DLFFBQVEsR0FBRyxTQUFYQSxRQUFXLEdBQVk7QUFDM0IsYUFBSSxDQUFDTixnQkFBTDtBQUNELE9BRkQ7O0FBSUF2RCxlQUFTLENBQUMsWUFBRCxDQUFULENBQXdCYixnQkFBeEIsQ0FBeUMsUUFBekMsRUFBbUQwRSxRQUFuRDs7QUFFQSxXQUFLcEYsWUFBTCxDQUFrQlcsR0FBbEIsQ0FBc0IsSUFBSUMscURBQUosQ0FBZSxZQUFNO0FBQ3pDVyxpQkFBUyxDQUFDLFlBQUQsQ0FBVCxDQUF3QlYsbUJBQXhCLENBQTRDLFFBQTVDLEVBQXNEdUUsUUFBdEQ7QUFDRCxPQUZxQixDQUF0QjtBQUdEOzs7dUNBRWdDO0FBQy9CLFdBQUtDLElBQUwsQ0FBVWhFLEtBQVYsR0FBa0IsS0FBS2lFLGdCQUFMLEVBQWxCO0FBQ0EsV0FBS0MsY0FBTCxDQUFvQmxFLEtBQXBCLEdBQTRCLEtBQUttRSxnQkFBTCxFQUE1QjtBQUNBLFdBQUtDLDJCQUFMLENBQWlDcEUsS0FBakMsR0FBeUMsS0FBS3FFLDZCQUFMLEVBQXpDO0FBQ0Q7Ozt3QkF4RDBCO0FBQ3pCLGFBQU8sS0FBS0MsWUFBWjtBQUNEOzs7d0JBRTBCO0FBQ3pCLGFBQU8sS0FBS04sSUFBWjtBQUNEOzs7d0JBRW9DO0FBQ25DLGFBQU8sS0FBS0UsY0FBWjtBQUNEOzs7d0JBRWlEO0FBQ2hELGFBQU8sS0FBS0UsMkJBQVo7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdkNIO0FBQ0E7QUFDQTtJQUdxQkcsVzs7Ozs7OztxQ0FPVztBQUM1QixVQUFJO0FBQ0YsYUFBS0MsVUFBTCxHQUFrQkMsS0FBbEI7QUFDRCxPQUZELENBRUUsT0FBT0MsQ0FBUCxFQUFVO0FBQ1YsYUFBS0YsVUFBTCxHQUFrQixLQUFsQjtBQUNEO0FBQ0Y7Ozt3QkFWK0I7QUFDOUIsYUFBTyxLQUFLQSxVQUFaO0FBQ0Q7Ozs7OzttSEFMa0JELFc7OztBQWdCckJBLFdBQVcsQ0FBQ0ksY0FBWixHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRU8sSUFBTUMsbUJBQWI7QUFPRSwrQkFBWUMsWUFBWixFQUFrQztBQUFBOztBQUFBLHdJQU5FQyxvRUFBQSxDQUF3QixxQkFBeEIsQ0FNRjs7QUFBQSwrSUFMQUMsNERBS0E7O0FBQUE7O0FBQUE7O0FBQUEsaUpBRlAsS0FFTzs7QUFDaEMsU0FBS0MsVUFBTCxHQUFrQjdHLElBQUksQ0FBQ0MsR0FBTCxFQUFsQjtBQUNBLFNBQUs2RyxhQUFMLEdBQXFCSixZQUFyQjtBQUNEOztBQVZIO0FBQUE7QUFBQSw0QkFZVUssUUFaVixFQVkwQjtBQUN0QixXQUFLQyxrQkFBTCxDQUF3QkMsd0VBQXhCLEVBQW9ERixRQUFwRDtBQUNEO0FBZEg7QUFBQTtBQUFBLDJCQWdCZTtBQUNYLFdBQUtDLGtCQUFMLENBQXdCQyxxRUFBeEI7QUFDRDtBQWxCSDtBQUFBO0FBQUEsdUNBb0I2QkMsVUFwQjdCLEVBb0JzREgsUUFwQnRELEVBb0IrRTtBQUMzRSxVQUFJLEtBQUtJLGdCQUFULEVBQTJCO0FBQ3pCO0FBQ0Q7O0FBRUQsV0FBS0EsZ0JBQUwsR0FBd0IsSUFBeEI7QUFFQSxVQUFNbEgsR0FBRyxHQUFHRCxJQUFJLENBQUNDLEdBQUwsRUFBWjtBQUNBLFVBQU1tSCxTQUFTLEdBQUduSCxHQUFHLEdBQUcsS0FBSzRHLFVBQTdCO0FBQ0EsVUFBTVEsVUFBVSxHQUFHLElBQUlDLHdEQUFKLENBQWVKLFVBQWYsRUFBMkJLLE9BQTNCLEVBQW5CO0FBRUEsV0FBS0MsY0FBTCxDQUFvQkMsSUFBcEIsQ0FBeUI7QUFDdkJQLGtCQUFVLEVBQVZBLFVBRHVCO0FBRXZCUSxlQUFPLEVBQUUsQ0FBQ3pILEdBQUcsR0FBRyxLQUFLNkcsYUFBWixJQUE2QixJQUZmO0FBR3ZCakYsYUFBSyxFQUFFO0FBQUM4RixnQkFBTSxFQUFFUDtBQUFULFNBSGdCO0FBSXZCTCxnQkFBUSxFQUFSQTtBQUp1QixPQUF6Qjs7QUFPQSxXQUFLYSxPQUFMLENBQWFDLElBQWIsQ0FDRSxzQ0FERixFQUVFLElBQUlDLG1EQUFKLENBQWM3SCxHQUFHLEdBQUcsS0FBSzZHLGFBQXpCLEVBQXdDaUIsV0FBeEMsRUFGRixFQUdFaEIsUUFIRixFQUlFTSxVQUpGLEVBS0UsSUFBSVMsbURBQUosQ0FBY1YsU0FBZCxFQUF5QlcsV0FBekIsRUFMRjtBQU9EO0FBN0NIOztBQUFBO0FBQUEsSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDVkE7QUFDQTtBQUNBO0lBR3FCM0csVTtBQUluQixzQkFBWTRHLFVBQVosRUFBb0M7QUFBQTs7QUFBQTs7QUFBQTs7QUFDbEMsU0FBS0MsU0FBTCxHQUFpQixLQUFqQjtBQUNBLFNBQUtDLFdBQUwsR0FBbUJGLFVBQW5CO0FBQ0Q7Ozs7OEJBRWU7QUFDZCxVQUFJLEtBQUtDLFNBQVQsRUFBb0I7QUFDbEI7QUFDRDs7QUFFRCxXQUFLQSxTQUFMLEdBQWlCLElBQWpCO0FBRUEsYUFBTyxLQUFLQyxXQUFMLENBQWlCM0csSUFBakIsQ0FBc0IsSUFBdEIsQ0FBUDtBQUNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN0Qkg7QUFDQTtBQUNBO0lBR3FCeEIsYzs7OztzSUFDcUIsRTs7Ozs7d0JBRXBDaUksVSxFQUErQjtBQUNqQyxXQUFLRyxLQUFMLENBQVdWLElBQVgsQ0FBZ0JPLFVBQWhCO0FBQ0Q7Ozs4QkFFZTtBQUNkLFdBQUtHLEtBQUwsQ0FBV0MsT0FBWCxDQUFtQixVQUFBSixVQUFVO0FBQUEsZUFBSUEsVUFBVSxDQUFDdkgsT0FBWCxFQUFKO0FBQUEsT0FBN0I7O0FBQ0EsV0FBSzBILEtBQUwsQ0FBV0UsTUFBWCxHQUFvQixDQUFwQjtBQUNEOzs7K0JBRWtCO0FBQ2pCLGtEQUFxQyxLQUFLRixLQUFMLENBQVdFLE1BQWhEO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25CSDtBQUNBO0FBQ0E7SUFDcUJDLE87OzsyQkFDTEQsTSxFQUF3QjtBQUNwQyxVQUFNRSxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQXFCLEdBQWM7QUFDdkMsZUFBT0MsSUFBSSxDQUFDQyxNQUFMLEdBQWNDLFFBQWQsQ0FBdUIsRUFBdkIsRUFBMkI1RixTQUEzQixDQUFxQyxDQUFyQyxFQUF3QyxFQUF4QyxDQUFQO0FBQ0QsT0FGRDs7QUFJQSxVQUFNNkYsS0FBYSxHQUFHSCxJQUFJLENBQUNJLElBQUwsQ0FBVVAsTUFBTSxHQUFHLEVBQW5CLENBQXRCO0FBRUEsYUFBTyxJQUFJUSxLQUFKLENBQVVGLEtBQVYsRUFBaUJHLElBQWpCLENBQXNCUCxrQkFBdEIsRUFBMENRLE1BQTFDLENBQWlELFVBQUNDLE1BQUQsRUFBU0MsSUFBVCxFQUFrQjtBQUN4RSxlQUFPRCxNQUFNLEdBQUdDLElBQUksRUFBcEI7QUFDRCxPQUZNLEVBRUosRUFGSSxFQUVBbkcsU0FGQSxDQUVVLENBRlYsRUFFYXVGLE1BRmIsQ0FBUDtBQUdEOzs7QUFFRCxxQkFBc0I7QUFBQTs7QUFDcEIsVUFBTSxJQUFJYSxLQUFKLENBQVUsd0RBQVYsQ0FBTjtBQUNEOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2xCSDtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxpQkFBVCxDQUEyQkMsQ0FBM0IsRUFBNEM7QUFDakQsUUFBTSxJQUFJRixLQUFKLDZCQUErQkUsQ0FBL0IscUNBQU47QUFDRDtBQUVELCtEQUFlRCxpQkFBZixFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNQQTtBQUNBO0FBQ0E7SUFHcUJFLFM7Ozs7MklBQ29CLEU7Ozs7O3dCQU1uQ0MsUSxFQUEyQjtBQUM3QixXQUFLQyxVQUFMLENBQWdCOUIsSUFBaEIsQ0FBcUI2QixRQUFyQjtBQUNEOzs7MkJBRU1BLFEsRUFBZ0I7QUFDckIsV0FBS0MsVUFBTCxHQUFrQixLQUFLQSxVQUFMLENBQWdCUixNQUFoQixDQUF1QixVQUFDUyxLQUFELEVBQVFDLElBQVIsRUFBaUI7QUFDeEQsWUFBSSxFQUFFQSxJQUFJLEtBQUtILFFBQVgsQ0FBSixFQUEwQjtBQUN4QkUsZUFBSyxDQUFDL0IsSUFBTixDQUFXZ0MsSUFBWDtBQUNEOztBQUVELGVBQU9ELEtBQVA7QUFDRCxPQU5pQixFQU1mLEVBTmUsQ0FBbEI7QUFPRDs7O3dCQWhCNkI7QUFDNUIsYUFBTyxLQUFLRCxVQUFaO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNWSDtBQUNBO0FBQ0E7QUFFQTs7SUFFcUJHLGU7Ozt3QkFHZkMsUSxFQUF3QkMsTyxFQUFpQkMsUSxFQUFrQkMsSSxFQUFrQjtBQUMvRSxVQUFJSCxRQUFRLEdBQUcsS0FBS0ksVUFBcEIsRUFBZ0M7QUFDOUI7QUFDRDs7QUFFRCxVQUFNQyxXQUFXLGFBQU1GLElBQUksQ0FBQ0csV0FBTCxFQUFOLGVBQTZCSixRQUE3QixnQkFBMkNLLGlEQUFZLENBQUNQLFFBQUQsQ0FBdkQsZUFBc0VDLE9BQXRFLENBQWpCOztBQUVBLFVBQUlELFFBQVEsR0FBR08sc0RBQWYsRUFBa0M7QUFDaENDLGVBQU8sQ0FBQ0MsR0FBUixDQUFZSixXQUFaO0FBRUE7QUFDRDs7QUFFREcsYUFBTyxDQUFDRSxLQUFSLENBQWNMLFdBQWQ7QUFDRDs7O0FBRUQsMkJBQVlNLFNBQVosRUFBcUM7QUFBQTs7QUFBQTs7QUFDbkMsU0FBS1AsVUFBTCxHQUFrQk8sU0FBbEI7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDM0JIO0FBQ0E7QUFDQTs7QUFDQTtBQUtPLElBQUtKLFlBQVo7O1dBQVlBLFk7QUFBQUEsYyxDQUFBQSxZO0FBQUFBLGMsQ0FBQUEsWTtBQUFBQSxjLENBQUFBLFk7QUFBQUEsYyxDQUFBQSxZO0FBQUFBLGMsQ0FBQUEsWTtBQUFBQSxjLENBQUFBLFk7QUFBQUEsYyxDQUFBQSxZO0FBQUFBLGMsQ0FBQUEsWTtHQUFBQSxZLEtBQUFBLFk7O0lBYVNLLE07Ozs0QkFpQk87QUFDeEIsVUFBSSxDQUFDLEtBQUtSLFVBQUwsQ0FBZ0JsSSxLQUFqQixJQUEwQixLQUFLa0ksVUFBTCxDQUFnQmxJLEtBQWhCLEdBQXdCcUksWUFBWSxDQUFDTSxLQUFuRSxFQUEwRTtBQUN4RTtBQUNEOztBQUh1Qix3Q0FBakJDLElBQWlCO0FBQWpCQSxZQUFpQjtBQUFBOztBQUt4QixXQUFLTCxHQUFMLENBQVNGLFlBQVksQ0FBQ00sS0FBdEIsRUFBNkJDLElBQTdCO0FBQ0Q7Ozs0QkFFeUI7QUFDeEIsVUFBSSxDQUFDLEtBQUtWLFVBQUwsQ0FBZ0JsSSxLQUFqQixJQUEwQixLQUFLa0ksVUFBTCxDQUFnQmxJLEtBQWhCLEdBQXdCcUksWUFBWSxDQUFDUSxLQUFuRSxFQUEwRTtBQUN4RTtBQUNEOztBQUh1Qix5Q0FBakJELElBQWlCO0FBQWpCQSxZQUFpQjtBQUFBOztBQUt4QixXQUFLTCxHQUFMLENBQVNGLFlBQVksQ0FBQ1EsS0FBdEIsRUFBNkJELElBQTdCO0FBQ0Q7OzsyQkFFd0I7QUFDdkIsVUFBSSxDQUFDLEtBQUtWLFVBQUwsQ0FBZ0JsSSxLQUFqQixJQUEwQixLQUFLa0ksVUFBTCxDQUFnQmxJLEtBQWhCLEdBQXdCcUksWUFBWSxDQUFDUyxJQUFuRSxFQUF5RTtBQUN2RTtBQUNEOztBQUhzQix5Q0FBakJGLElBQWlCO0FBQWpCQSxZQUFpQjtBQUFBOztBQUt2QixXQUFLTCxHQUFMLENBQVNGLFlBQVksQ0FBQ1MsSUFBdEIsRUFBNEJGLElBQTVCO0FBQ0Q7OzsyQkFFd0I7QUFDdkIsVUFBSSxDQUFDLEtBQUtWLFVBQUwsQ0FBZ0JsSSxLQUFqQixJQUEwQixLQUFLa0ksVUFBTCxDQUFnQmxJLEtBQWhCLEdBQXdCcUksWUFBWSxDQUFDVSxJQUFuRSxFQUF5RTtBQUN2RTtBQUNEOztBQUhzQix5Q0FBakJILElBQWlCO0FBQWpCQSxZQUFpQjtBQUFBOztBQUt2QixXQUFLTCxHQUFMLENBQVNGLFlBQVksQ0FBQ1UsSUFBdEIsRUFBNEJILElBQTVCO0FBQ0Q7Ozs0QkFFeUI7QUFDeEIsVUFBSSxDQUFDLEtBQUtWLFVBQUwsQ0FBZ0JsSSxLQUFqQixJQUEwQixLQUFLa0ksVUFBTCxDQUFnQmxJLEtBQWhCLEdBQXdCcUksWUFBWSxDQUFDaEIsS0FBbkUsRUFBMEU7QUFDeEU7QUFDRDs7QUFIdUIseUNBQWpCdUIsSUFBaUI7QUFBakJBLFlBQWlCO0FBQUE7O0FBS3hCLFdBQUtMLEdBQUwsQ0FBU0YsWUFBWSxDQUFDaEIsS0FBdEIsRUFBNkJ1QixJQUE3QjtBQUNEOzs7NEJBRXlCO0FBQ3hCLFVBQUksQ0FBQyxLQUFLVixVQUFMLENBQWdCbEksS0FBakIsSUFBMEIsS0FBS2tJLFVBQUwsQ0FBZ0JsSSxLQUFoQixHQUF3QnFJLFlBQVksQ0FBQ1csS0FBbkUsRUFBMEU7QUFDeEU7QUFDRDs7QUFIdUIseUNBQWpCSixJQUFpQjtBQUFqQkEsWUFBaUI7QUFBQTs7QUFLeEIsV0FBS0wsR0FBTCxDQUFTRixZQUFZLENBQUNXLEtBQXRCLEVBQTZCSixJQUE3QjtBQUNEOzs7d0JBRVdLLEssRUFBZUwsSSxFQUFpQjtBQUFBOztBQUMxQyxVQUFNWCxJQUFJLEdBQUcsSUFBSTlKLElBQUosRUFBYjtBQUNBLFVBQU00SixPQUFPLEdBQUcsS0FBS21CLG1CQUFMLENBQXlCTixJQUF6QixDQUFoQjs7QUFFQSxXQUFLbEIsVUFBTCxDQUFnQjFILEtBQWhCLENBQXNCdUcsT0FBdEIsQ0FBOEIsVUFBQ2tCLFFBQUQsRUFBeUI7QUFDckRBLGdCQUFRLENBQUNjLEdBQVQsQ0FBYVUsS0FBYixFQUFvQmxCLE9BQXBCLEVBQTZCLEtBQUksQ0FBQ0MsUUFBbEMsRUFBNENDLElBQTVDO0FBQ0QsT0FGRDtBQUdEOzs7d0NBRTJCVyxJLEVBQW1CO0FBQUE7O0FBQzdDLFVBQUlPLHlCQUF5QixHQUFHUCxJQUFJLENBQUMsQ0FBRCxDQUFwQztBQUNBLFVBQUlRLEtBQUssR0FBRyxDQUFaOztBQUVBLGFBQU9ELHlCQUF5QixDQUFDcEksT0FBMUIsSUFBcUM2SCxJQUFJLENBQUNwQyxNQUFMLEdBQWMsQ0FBbkQsSUFBd0Q0QyxLQUFLLElBQUksQ0FBeEUsRUFBMkU7QUFDekVBLGFBQUssR0FBR0QseUJBQXlCLENBQUNwSSxPQUExQixDQUFrQyxHQUFsQyxFQUF1Q3FJLEtBQXZDLENBQVI7O0FBRUEsWUFBSUEsS0FBSyxHQUFHLENBQVosRUFBZTtBQUNiLGNBQU12RixJQUFJLEdBQUdzRix5QkFBeUIsQ0FBQ2xJLFNBQTFCLENBQW9DbUksS0FBSyxHQUFHLENBQTVDLEVBQStDQSxLQUFLLEdBQUcsQ0FBdkQsQ0FBYjs7QUFFQSxrQkFBUXZGLElBQVI7QUFDRSxpQkFBSyxHQUFMO0FBQ0U7QUFDQXNGLHVDQUF5QixHQUFHQSx5QkFBeUIsQ0FBQ2xJLFNBQTFCLENBQW9DLENBQXBDLEVBQXVDbUksS0FBdkMsSUFBZ0RELHlCQUF5QixDQUFDbEksU0FBMUIsQ0FBb0NtSSxLQUFLLEdBQUcsQ0FBNUMsQ0FBNUU7QUFDQUEsbUJBQUs7QUFFTDs7QUFDRixpQkFBSyxHQUFMO0FBQ0EsaUJBQUssR0FBTDtBQUNFO0FBQ0FSLGtCQUFJLENBQUMsQ0FBRCxDQUFKLEdBQVVPLHlCQUF5QixHQUFHLEtBQUtFLGVBQUwsQ0FDcEMsS0FBS3hDLFFBQUwsQ0FBYytCLElBQUksQ0FBQyxDQUFELENBQWxCLENBRG9DLEVBRXBDTyx5QkFGb0MsRUFHcENDLEtBSG9DLENBQXRDO0FBS0FSLGtCQUFJLENBQUNVLE1BQUwsQ0FBWSxDQUFaLEVBQWUsQ0FBZjtBQUVBOztBQUNGLGlCQUFLLEdBQUw7QUFDRTtBQUNBVixrQkFBSSxDQUFDLENBQUQsQ0FBSixHQUFVTyx5QkFBeUIsR0FBRyxLQUFLRSxlQUFMLENBQ3BDLEtBQUtFLFNBQUwsQ0FBZVgsSUFBSSxDQUFDLENBQUQsQ0FBbkIsQ0FEb0MsRUFFcENPLHlCQUZvQyxFQUdwQ0MsS0FIb0MsQ0FBdEM7QUFNQVIsa0JBQUksQ0FBQ1UsTUFBTCxDQUFZLENBQVosRUFBZSxDQUFmO0FBRUE7O0FBQ0Y7QUFDRSxxQkFBT1YsSUFBSSxDQUFDL0IsUUFBTCxFQUFQO0FBOUJKO0FBZ0NEO0FBQ0Y7O0FBRUQsVUFBSStCLElBQUksQ0FBQ3BDLE1BQUwsR0FBYyxDQUFsQixFQUFxQjtBQUNuQm9DLFlBQUksR0FBR0EsSUFBSSxDQUFDMUIsTUFBTCxDQUFZLFVBQUNzQyxXQUFELEVBQWNDLFlBQWQsRUFBNEJMLEtBQTVCLEVBQW1DTSxLQUFuQyxFQUE2QztBQUM5RCxjQUFJTixLQUFLLEdBQUcsQ0FBUixLQUFjTSxLQUFLLENBQUNsRCxNQUFwQixJQUE4QmlELFlBQVksWUFBWXBDLEtBQTFELEVBQWlFO0FBQy9ELG1CQUFPbUMsV0FBVyxHQUFHLElBQWQsR0FBcUIsTUFBSSxDQUFDM0MsUUFBTCxDQUFjNEMsWUFBWSxDQUFDRSxLQUEzQixDQUE1QjtBQUNEOztBQUVELGlCQUFPSCxXQUFXLGNBQU8sTUFBSSxDQUFDM0MsUUFBTCxDQUFjNEMsWUFBZCxDQUFQLE1BQWxCO0FBQ0QsU0FOTSxDQUFQO0FBT0Q7O0FBRUQsYUFBT2IsSUFBSSxDQUFDL0IsUUFBTCxFQUFQO0FBQ0Q7Ozs4QkFFaUIrQyxHLEVBQWtCO0FBQ2xDLFVBQU1DLEtBQUssR0FBRyxFQUFkOztBQUVBLFVBQUk7QUFDRixlQUFPQyxJQUFJLENBQUNQLFNBQUwsQ0FDTEssR0FBRyxZQUFZdkMsS0FBZixHQUF1QixLQUFLUixRQUFMLENBQWMrQyxHQUFkLENBQXZCLEdBQTRDQSxHQUR2QyxFQUVMLFVBQUNHLEdBQUQsRUFBTS9KLEtBQU4sRUFBZ0I7QUFDZCxjQUFJLENBQUMsQ0FBQ0EsS0FBRixJQUFXQSxLQUFLLFlBQVlnSyxNQUFoQyxFQUF3QztBQUN0QyxnQkFBSUgsS0FBSyxDQUFDNUgsUUFBTixDQUFlakMsS0FBZixDQUFKLEVBQTJCO0FBQ3pCLHFCQUFPLGFBQVA7QUFDRDs7QUFFRDZKLGlCQUFLLENBQUNqRSxJQUFOLENBQVc1RixLQUFYO0FBQ0Q7O0FBRUQsaUJBQU9BLEtBQVA7QUFDRCxTQVpJLEVBYUwsQ0FiSyxDQUFQO0FBZUQsT0FoQkQsQ0FnQkUsT0FBTzBFLENBQVAsRUFBVTtBQUNWLGVBQU8saUNBQVA7QUFDRDtBQUNGOzs7b0NBRXVCdUYsUSxFQUFlZCx5QixFQUFtQ0MsSyxFQUF1QjtBQUMvRixhQUFPRCx5QkFBeUIsQ0FBQ2xJLFNBQTFCLENBQW9DLENBQXBDLEVBQXVDbUksS0FBdkMsSUFBZ0QsS0FBS3ZDLFFBQUwsQ0FBY29ELFFBQWQsQ0FBaEQsR0FBMEVkLHlCQUF5QixDQUFDbEksU0FBMUIsQ0FBb0NtSSxLQUFLLEdBQUcsQ0FBNUMsQ0FBakY7QUFDRDs7OzZCQUVnQmMsSSxFQUFtQjtBQUNsQyxVQUFJLE9BQU9BLElBQVAsS0FBZ0IsUUFBcEIsRUFBOEI7QUFDNUIsZUFBT0EsSUFBUDtBQUNEOztBQUVELFVBQUksT0FBT0EsSUFBUCxLQUFnQixTQUFwQixFQUErQjtBQUM3QixlQUFPQSxJQUFJLEdBQUcsTUFBSCxHQUFZLE9BQXZCO0FBQ0Q7O0FBRUQsVUFBSSxPQUFPQSxJQUFQLEtBQWdCLFFBQXBCLEVBQThCO0FBQzVCLGVBQU9BLElBQUksQ0FBQ3JELFFBQUwsRUFBUDtBQUNEOztBQUVELFVBQUlzRCxXQUFXLEdBQUcsRUFBbEI7O0FBRUEsVUFBSUQsSUFBSixFQUFVO0FBQ1IsWUFBSSxPQUFPQSxJQUFQLEtBQWdCLFVBQXBCLEVBQWdDO0FBQzlCQyxxQkFBVyxHQUFHRCxJQUFJLENBQUNyRCxRQUFMLEVBQWQ7QUFDRCxTQUZELE1BRU8sSUFBSXFELElBQUksWUFBWUYsTUFBcEIsRUFBNEI7QUFDakMsY0FBSTtBQUNGRyx1QkFBVyxHQUFHRCxJQUFJLENBQUNyRCxRQUFMLEVBQWQ7QUFDRCxXQUZELENBRUUsT0FBT25DLENBQVAsRUFBVTtBQUNWeUYsdUJBQVcsR0FBRyw2QkFBZDtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxhQUFPQSxXQUFQO0FBQ0Q7Ozt3QkF2THNCO0FBQ3JCLGFBQU8sS0FBS0MsU0FBWjtBQUNEOzs7d0JBRTBCO0FBQ3pCLGFBQU8sS0FBSzFDLFVBQVo7QUFDRDs7O3dCQUVpQztBQUNoQyxhQUFPLEtBQUtRLFVBQVo7QUFDRDs7O0FBK0tELGtCQUFZRixRQUFaLEVBQThCcUMsU0FBOUIsRUFBb0Q1QixTQUFwRCxFQUFpRjtBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUMvRSxTQUFLMkIsU0FBTCxHQUFpQnBDLFFBQWpCO0FBQ0EsU0FBS04sVUFBTCxHQUFrQjJDLFNBQWxCO0FBQ0EsU0FBS25DLFVBQUwsR0FBa0JPLFNBQWxCO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2Tkg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7SUFFcUJwRixjOzs7Ozs7O3dCQUM0QjtBQUM3QyxhQUFPa0IsK0RBQUEsR0FBd0I4RCw0REFBeEIsR0FBMkNBLDREQUFsRDtBQUNEOzs7d0JBRXFEO0FBQ3BELGFBQU85RCwrREFBQSxHQUF3QjhELDREQUF4QixHQUEyQ0EsNERBQWxEO0FBQ0Q7Ozt3QkFFdUQ7QUFDdEQsYUFBT0EsNkRBQVA7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqQkg7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7SUFFcUJ2RCxhOzs7OEJBV0ZrRCxRLEVBQTJCO0FBQzFDLFVBQUksT0FBT0EsUUFBUCxLQUFvQixRQUF4QixFQUFrQztBQUNoQ0EsZ0JBQVEsR0FBRyxLQUFYO0FBQ0Q7O0FBRUQsVUFBTXNDLE1BQU0sR0FBR3hGLGFBQWEsQ0FBQ3lGLFFBQWQsQ0FBdUJ2QyxRQUF2QixDQUFmOztBQUVBLFVBQUlzQyxNQUFKLEVBQVk7QUFDVixlQUFPQSxNQUFQO0FBQ0Q7O0FBRUQsYUFBT3hGLGFBQWEsQ0FBQ3lGLFFBQWQsQ0FBdUJ2QyxRQUF2QixJQUFtQyxJQUFJVSw0Q0FBSixDQUFXVixRQUFYLEVBQXFCLEtBQUtOLFVBQTFCLEVBQXNDLEtBQUtRLFVBQTNDLENBQTFDO0FBQ0Q7OztrRUFFMEQ7QUFDekRwRCxtQkFBYSxDQUFDMEYsaUJBQWQ7QUFDQTFGLG1CQUFhLENBQUMyRix5QkFBZCxDQUF3QyxTQUF4QyxFQUFtRDNGLGFBQWEsQ0FBQzRGLGtCQUFkLENBQWlDQyxJQUFqQyxDQUFzQyxJQUF0QyxDQUFuRDtBQUNBN0YsbUJBQWEsQ0FBQzJGLHlCQUFkLENBQXdDLFdBQXhDLEVBQXFEM0YsYUFBYSxDQUFDOEYsb0JBQWQsQ0FBbUNELElBQW5DLENBQXdDLElBQXhDLENBQXJEO0FBQ0Q7Ozt3Q0FFd0M7QUFDdkMsVUFBTUUsY0FBYyxHQUFHLEtBQUtDLDZCQUFMLENBQW1DQyxjQUFuQyxDQUFrRCxzQkFBbEQsQ0FBdkI7O0FBRUEsVUFBSTFDLGlEQUFZLENBQUN3QyxjQUFELENBQWhCLEVBQWtDO0FBQ2hDLGFBQUszQyxVQUFMLENBQWdCOEMsWUFBaEIsQ0FBNkIzQyxpREFBWSxDQUFDd0MsY0FBRCxDQUF6QztBQUNEOztBQUVEO0FBQ0Q7Ozs4Q0FFd0MxSSxJLEVBQWM4SSxhLEVBQW9EO0FBQ3pHLFVBQU1KLGNBQWMsR0FBRyxLQUFLQyw2QkFBTCxDQUFtQ0MsY0FBbkMsa0JBQTRENUksSUFBNUQsb0JBQXZCOztBQUVBLFVBQUkwSSxjQUFjLEtBQUssS0FBdkIsRUFBOEI7QUFDNUI7QUFDRDs7QUFFREksbUJBQWEsQ0FBQzVDLGlEQUFZLENBQUN3QyxjQUFELENBQWIsQ0FBYjtBQUNEOzs7dUNBRWlDNUIsSyxFQUEyQjtBQUMzRCxXQUFLdkIsVUFBTCxDQUFnQnBJLEdBQWhCLENBQW9CLElBQUl1SSxxREFBSixDQUFvQm9CLEtBQUssSUFBSTVGLGdGQUE3QixDQUFwQjtBQUNEOzs7eUNBRW1DNEYsSyxFQUEyQjtBQUM3RCxXQUFLaUMsdUJBQUwsQ0FBNkJ6QyxTQUE3QixHQUF5Q1EsS0FBSyxJQUFJNUYsa0ZBQWxEOztBQUVBLFdBQUtxRSxVQUFMLENBQWdCcEksR0FBaEIsQ0FBb0IsSUFBSTZMLGdFQUFKLENBQXNCLEtBQUtELHVCQUEzQixDQUFwQjtBQUNEOzs7d0JBcEQyRDtBQUMxRCxhQUFPcEcsYUFBYSxDQUFDb0csdUJBQXJCO0FBQ0Q7OztBQW9ERCwyQkFBc0I7QUFBQTs7QUFDcEIsVUFBTSxJQUFJN0QsS0FBSixDQUFVLDhEQUFWLENBQU47QUFDRDs7Ozs7bUhBL0RrQnZDLGEsbUNBQzJELElBQUk1QyxzRUFBSixFOzttSEFEM0Q0QyxhLGNBRXNDLEU7O21IQUZ0Q0EsYSxnQkFHb0IsSUFBSTBDLCtDQUFKLEU7O21IQUhwQjFDLGEsZ0JBSTJCLElBQUlzRyxzREFBSixFOzttSEFKM0J0RyxhLDZCQUs4QyxJQUFJdUcsc0VBQUosRTs7O0FBNkRuRXZHLGFBQWEsQ0FBQ3dHLDJDQUFkLEc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0lBRXFCbEksbUI7Ozs7Ozs7MERBQzBCbUksWSxFQUFvRDtBQUMvRixjQUFRQSxZQUFSO0FBQ0UsYUFBS2xELHFEQUFMO0FBQ0UsaUJBQU8sS0FBUDs7QUFDRixhQUFLQSx1REFBTDtBQUNFLGlCQUFPLE9BQVA7O0FBQ0YsYUFBS0EsdURBQUw7QUFDRSxpQkFBTyxPQUFQOztBQUNGLGFBQUtBLHNEQUFMO0FBQ0UsaUJBQU8sT0FBUDs7QUFDRixhQUFLQSxzREFBTDtBQUNFLGlCQUFPLE1BQVA7O0FBQ0YsYUFBS0EsdURBQUw7QUFDRSxpQkFBTyxPQUFQOztBQUNGLGFBQUtBLHVEQUFMO0FBQ0UsaUJBQU8sT0FBUDs7QUFDRixhQUFLQSxxREFBTDtBQUNFLGlCQUFPLEtBQVA7O0FBQ0Y7QUFDRWYsMEVBQWlCLENBQUNpRSxZQUFELENBQWpCO0FBbEJKO0FBb0JEOzs7MERBRTRDQyxnQixFQUF3RDtBQUNuRyxjQUFRQSxnQkFBUjtBQUNFLGFBQUssS0FBTDtBQUNFLGlCQUFPbkQscURBQVA7O0FBQ0YsYUFBSyxPQUFMO0FBQ0UsaUJBQU9BLHVEQUFQOztBQUNGLGFBQUssT0FBTDtBQUNFLGlCQUFPQSx1REFBUDs7QUFDRixhQUFLLE1BQUw7QUFDRSxpQkFBT0Esc0RBQVA7O0FBQ0YsYUFBSyxNQUFMO0FBQ0UsaUJBQU9BLHNEQUFQOztBQUNGLGFBQUssT0FBTDtBQUNFLGlCQUFPQSx1REFBUDs7QUFDRixhQUFLLE9BQUw7QUFDRSxpQkFBT0EsdURBQVA7O0FBQ0YsYUFBSyxLQUFMO0FBQ0UsaUJBQU9BLHFEQUFQOztBQUNGO0FBQ0VmLDBFQUFpQixDQUFDa0UsZ0JBQUQsQ0FBakI7QUFsQko7QUFvQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuREg7QUFDQTtBQUNBO0FBQ0E7O0lBR3FCSixnQjs7OzsySUFDZ0IvSCx3RTs7Ozs7aUNBTXRCb0YsUyxFQUErQjtBQUMxQyxXQUFLUCxVQUFMLEdBQWtCTyxTQUFsQjtBQUNEOzs7d0JBTnlCO0FBQ3hCLGFBQU8sS0FBS1AsVUFBWjtBQUNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNYSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0lBRXFCekMsVTtBQUduQixzQkFBWWdHLE9BQVosRUFBa0M7QUFBQTs7QUFBQTs7QUFDaEMsU0FBS0MsUUFBTCxHQUFnQkQsT0FBaEI7QUFDRDs7Ozs4QkFFaUI7QUFDaEIsYUFBT3JHLGlEQUFXLENBQUMsS0FBS3NHLFFBQU4sQ0FBbEI7QUFDRDs7O3dDQUVtQztBQUNsQyxjQUFRLEtBQUtBLFFBQWI7QUFDRSxhQUFLdEcsa0VBQUw7QUFDRSxpQkFBT3VHLDJFQUFQOztBQUNGLGFBQUt2RyxpRkFBTDtBQUNFLGlCQUFPdUcsMkVBQVA7O0FBQ0YsYUFBS3ZHLHlEQUFMO0FBQ0UsaUJBQU91RyxxRUFBUDs7QUFDRixhQUFLdkcsMkRBQUw7QUFDRSxpQkFBT3VHLHFFQUFQOztBQUNGLGFBQUt2RyxnRUFBTDtBQUNFLGlCQUFPdUcscUVBQVA7O0FBQ0YsYUFBS3ZHLDZEQUFMO0FBQ0UsaUJBQU91RyxxRUFBUDs7QUFDRixhQUFLdkcsK0RBQUw7QUFDRSxpQkFBT3VHLHFFQUFQOztBQUNGLGFBQUt2Ryw0RUFBTDtBQUNFLGlCQUFPdUcscUVBQVA7O0FBQ0YsYUFBS3ZHLDZEQUFMO0FBQ0UsaUJBQU91RyxxRUFBUDs7QUFDRixhQUFLdkcsbUVBQUw7QUFDRSxpQkFBT3VHLHFFQUFQOztBQUNGLGFBQUt2Ryx1RUFBTDtBQUNFLGlCQUFPdUcscUVBQVA7O0FBQ0YsYUFBS3ZHLHVFQUFMO0FBQ0UsaUJBQU91RyxxRUFBUDs7QUFDRjtBQUNFckUsMEVBQWlCLENBQUMsS0FBS29FLFFBQU4sQ0FBakI7QUExQko7QUE0QkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0NIO0FBQ0E7QUFDQTtBQUNBO0FBRU8sSUFBS0MsY0FBWjs7V0FBWUEsYztBQUFBQSxnQixDQUFBQSxjO0FBQUFBLGdCLENBQUFBLGM7QUFBQUEsZ0IsQ0FBQUEsYztHQUFBQSxjLEtBQUFBLGM7O0lBUVNDLG9COzs7O3FJQUNKLG1EOzs7Ozs7OzsySUFJc0J6SSw0RTs7Ozs7d0JBRW5CO0FBQ2hCLGFBQU8sS0FBSzBJLElBQVo7QUFDRCxLO3NCQUVPQyxHLEVBQWE7QUFDbkIsVUFBTUMsVUFBVSxHQUFHLElBQUlDLEdBQUosQ0FBUUYsR0FBUixDQUFuQjtBQUVBQyxnQkFBVSxDQUFDRSxRQUFYLEdBQXNCRixVQUFVLENBQUNFLFFBQVgsR0FBc0IsVUFBNUM7QUFFQSxXQUFLSixJQUFMLEdBQVlFLFVBQVUsQ0FBQ2xGLFFBQVgsRUFBWjtBQUNEOzs7d0JBRXlCO0FBQ3hCLGFBQU8sS0FBS3FGLFlBQVo7QUFDRCxLO3NCQUVlQyxXLEVBQXFCO0FBQ25DLFdBQUtELFlBQUwsR0FBb0JDLFdBQXBCO0FBQ0Q7Ozt3QkFFcUI7QUFDcEIsYUFBTyxLQUFLQyxRQUFaO0FBQ0QsSztzQkFFV0MsTyxFQUFpQjtBQUMzQixXQUFLRCxRQUFMLEdBQWdCQyxPQUFoQjtBQUNEOzs7d0JBRXVCO0FBQ3RCLGFBQU8sS0FBS0MsVUFBWjtBQUNELEs7c0JBRWFDLFMsRUFBbUI7QUFDL0IsV0FBS0QsVUFBTCxHQUFrQkMsU0FBbEI7QUFDRDs7O3dCQUUrQjtBQUM5QixhQUFPLEtBQUtyRSxVQUFaO0FBQ0QsSztzQkFFYU8sUyxFQUEyQjtBQUN2QyxXQUFLUCxVQUFMLEdBQWtCTyxTQUFsQjtBQUNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5REg7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztJQUVxQitELGM7OztzQ0FHTVYsRyxFQUE2QjtBQUNwRCxVQUFJLE9BQU9BLEdBQVAsS0FBZSxRQUFuQixFQUE2QjtBQUMzQixjQUFNLElBQUl6RSxLQUFKLENBQVUsSUFBVixDQUFOO0FBQ0Q7O0FBRUQsVUFBTW9GLGVBQWUsR0FBR0QsY0FBYyxDQUFDRSxnQkFBZixDQUFnQ1osR0FBaEMsQ0FBeEI7O0FBRUEsVUFBSVcsZUFBSixFQUFxQjtBQUNuQixlQUFPQSxlQUFQO0FBQ0Q7O0FBRUQsVUFBTUUsb0JBQW9CLEdBQUcsSUFBSWYsMERBQUosRUFBN0I7QUFFQWUsMEJBQW9CLENBQUNKLFNBQXJCLEdBQWlDeEgsNkRBQWpDO0FBQ0E0SCwwQkFBb0IsQ0FBQ04sT0FBckIsR0FBK0J0SCwyREFBL0I7QUFDQTRILDBCQUFvQixDQUFDYixHQUFyQixHQUEyQmMsc0VBQUEsQ0FBNkJkLEdBQTdCLENBQTNCO0FBQ0FhLDBCQUFvQixDQUFDUixXQUFyQixHQUFtQ1UsMkVBQUEsQ0FBa0NmLEdBQWxDLENBQW5DO0FBRUFhLDBCQUFvQixDQUFDbEUsU0FBckIsR0FBaUN2RixzR0FBQSxDQUFnRTZCLDREQUFoRSxDQUFqQztBQUVBLGFBQU95SCxjQUFjLENBQUNFLGdCQUFmLENBQWdDWixHQUFoQyxJQUF1QyxJQUFJZ0Isb0RBQUosQ0FBbUJILG9CQUFuQixDQUE5QztBQUNEOzs7c0NBRXdCSSxjLEVBQXNDO0FBQzdELFVBQU1OLGVBQWUsR0FBR3pDLE1BQU0sQ0FBQ2dELE1BQVAsQ0FBY1IsY0FBYyxDQUFDRSxnQkFBN0IsQ0FBeEI7O0FBRUEsVUFBSUQsZUFBZSxJQUFJQSxlQUFlLENBQUNqRyxNQUF2QyxFQUErQztBQUM3Q2lHLHVCQUFlLENBQUNsRyxPQUFoQixDQUF3QixVQUFBWixjQUFjLEVBQUk7QUFDeEMsY0FBTWdILG9CQUFvQixHQUFHaEgsY0FBYyxDQUFDZ0gsb0JBQTVDO0FBRUFBLDhCQUFvQixDQUFDbEUsU0FBckIsR0FBaUNzRSxjQUFqQztBQUNELFNBSkQ7QUFLRDtBQUNGOzs7QUFFRCw0QkFBc0I7QUFBQTs7QUFDcEIsVUFBTSxJQUFJMUYsS0FBSixDQUFVLDhEQUFWLENBQU47QUFDRDs7Ozs7bUhBeENrQm1GLGMsc0JBQ3FELEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNaMUU7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBLElBQU1TLGdCQUFnQixHQUFHLElBQXpCOztJQWtDcUJILGM7QUFNbkIsMEJBQVlILG9CQUFaLEVBQXdEO0FBQUE7O0FBQUE7O0FBQUEseUlBSmYsRUFJZTs7QUFBQTs7QUFBQSx3SUFGdEM3SixRQUFRLENBQUNvSyxRQUU2Qjs7QUFDdEQsU0FBS0MscUJBQUwsR0FBNkJSLG9CQUE3QjtBQUNEOzs7O3lCQU1JUyxNLEVBQXVCO0FBQUEsVUFDbkJsSSxRQURtQixHQUN3Q2tJLE1BRHhDLENBQ25CbEksUUFEbUI7QUFBQSxVQUNUbEYsS0FEUyxHQUN3Q29OLE1BRHhDLENBQ1RwTixLQURTO0FBQUEsVUFDRnFOLGFBREUsR0FDd0NELE1BRHhDLENBQ0ZDLGFBREU7QUFBQSxVQUNheEgsT0FEYixHQUN3Q3VILE1BRHhDLENBQ2F2SCxPQURiO0FBQUEsVUFDc0J5SCxRQUR0QixHQUN3Q0YsTUFEeEMsQ0FDc0JFLFFBRHRCO0FBQUEsVUFDZ0NDLElBRGhDLEdBQ3dDSCxNQUR4QyxDQUNnQ0csSUFEaEM7QUFFMUIsVUFBTWxJLFVBQVUsR0FBRyxJQUFJSSxnREFBSixDQUFlMkgsTUFBTSxDQUFDL0gsVUFBdEIsQ0FBbkI7O0FBRUEsVUFBSSxLQUFLOEgscUJBQUwsQ0FBMkIxRSxTQUEzQixHQUF1Q3BELFVBQVUsQ0FBQ21JLGlCQUFYLEVBQTNDLEVBQTJFO0FBQ3pFO0FBQ0Q7O0FBRUQsVUFBTUMsWUFBWSxHQUFHO0FBQ25CQyxpQkFBUyxFQUFFLElBQUl2UCxJQUFKLEdBQVdpSyxXQUFYLEVBRFE7QUFFbkJpRSxlQUFPLEVBQUUsS0FBS2MscUJBQUwsQ0FBMkJkLE9BRmpCO0FBR25CRSxpQkFBUyxFQUFFLEtBQUtZLHFCQUFMLENBQTJCWixTQUhuQjtBQUluQnJILGdCQUFRLEVBQVJBLFFBSm1CO0FBS25Ca0ksY0FBTSxFQUFFL0gsVUFBVSxDQUFDSyxPQUFYLEVBTFc7QUFNbkIxRixhQUFLLEVBQUxBLEtBTm1CO0FBT25CcU4scUJBQWEsRUFBYkEsYUFQbUI7QUFRbkJNLHlCQUFpQixFQUFFLEtBQUtDLE9BUkw7QUFTbkJ6QixtQkFBVyxFQUFFLEtBQUtnQixxQkFBTCxDQUEyQmhCLFdBVHJCO0FBVW5CaEwsZUFBTyxFQUFFME0sMkVBVlU7QUFXbkJoSSxlQUFPLEVBQVBBLE9BWG1CO0FBWW5CeUgsZ0JBQVEsRUFBUkEsUUFabUI7QUFhbkJDLFlBQUksRUFBSkE7QUFibUIsT0FBckI7O0FBZ0JBLFdBQUs3QixRQUFMLENBQWM5RixJQUFkLENBQW1CNkgsWUFBbkI7O0FBRUEsVUFBTUssT0FBTyxHQUFHLEtBQUtDLGlCQUFMLEVBQWhCO0FBQ0Q7Ozs7MFJBRXlCQyxlOzs7Ozs7QUFDbEJDLHdCLEdBQVcsSUFBSUMsUUFBSixFO0FBRWpCRCx3QkFBUSxDQUFDRSxNQUFULENBQWdCLFVBQWhCLEVBQTRCckUsSUFBSSxDQUFDUCxTQUFMLENBQWU7QUFBQzZFLHlCQUFPLEVBQUVKO0FBQVYsaUJBQWYsQ0FBNUI7O3VCQUVhSyxLQUFLLENBQUMsS0FBS2xCLHFCQUFMLENBQTJCckIsR0FBNUIsRUFBaUM7QUFDakR3Qyx3QkFBTSxFQUFFLE1BRHlDO0FBRWpEQyxzQkFBSSxFQUFFTjtBQUYyQyxpQkFBakMsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NCQU9kLEtBQUt2QyxRQUFMLENBQWNsRixNQUFkLElBQXdCLENBQXhCLElBQTZCLEtBQUtnSSxVOzs7Ozs7OztBQUl0QyxxQkFBS0EsVUFBTCxHQUFrQixJQUFsQjtBQUVNUiwrQixHQUFrQixLQUFLdEMsUUFBTCxDQUFjK0MsS0FBZCxDQUFvQixDQUFwQixFQUF1QnhCLGdCQUF2QixDO0FBRXhCLHFCQUFLdkIsUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWMrQyxLQUFkLENBQW9CeEIsZ0JBQXBCLENBQWhCO2tEQUVPLEtBQUt5QixXQUFMLENBQWlCVixlQUFqQixFQUFrQ1csSUFBbEMsQ0FBdUMsVUFBQUMsUUFBUSxFQUFJO0FBQ3hELHVCQUFJLENBQUNKLFVBQUwsR0FBa0IsS0FBbEI7O0FBRUEsc0JBQU1WLE9BQU8sR0FBRyxLQUFJLENBQUNDLGlCQUFMLEVBQWhCOztBQUVBLHlCQUFPYSxRQUFQO0FBQ0QsaUJBTk0sRUFNSkMsS0FOSSxDQU1FLFlBQU07QUFDYix1QkFBSSxDQUFDTCxVQUFMLEdBQWtCLEtBQWxCOztBQUVBLHNCQUFNVixPQUFPLEdBQUcsS0FBSSxDQUFDQyxpQkFBTCxFQUFoQjtBQUNELGlCQVZNLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt3QkF2RHdDO0FBQy9DLGFBQU8sS0FBS1oscUJBQVo7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN0REg7QUFDQTtBQUNBO0lBQ0svSCxXOztXQUFBQSxXO0FBQUFBLGEsQ0FBQUEsVztBQUFBQSxhLENBQUFBLFc7QUFBQUEsYSxDQUFBQSxXO0FBQUFBLGEsQ0FBQUEsVztBQUFBQSxhLENBQUFBLFc7QUFBQUEsYSxDQUFBQSxXO0FBQUFBLGEsQ0FBQUEsVztBQUFBQSxhLENBQUFBLFc7QUFBQUEsYSxDQUFBQSxXO0FBQUFBLGEsQ0FBQUEsVztBQUFBQSxhLENBQUFBLFc7QUFBQUEsYSxDQUFBQSxXO0dBQUFBLFcsS0FBQUEsVzs7QUFlTCwrREFBZUEsV0FBZixFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztJQUVxQmxDLHFCOzs7Ozs7OzhEQUM4QjZKLGMsRUFBb0Q7QUFDbkcsY0FBUUEsY0FBUjtBQUNFLGFBQUtwQixxRUFBTDtBQUNFLGlCQUFPLEtBQVA7O0FBQ0YsYUFBS0EsMkVBQUw7QUFDRSxpQkFBTyxXQUFQOztBQUNGLGFBQUtBLHFFQUFMO0FBQ0UsaUJBQU8sS0FBUDs7QUFDRjtBQUNFckUsMEVBQWlCLENBQUN5RixjQUFELENBQWpCO0FBUko7QUFVRDs7OzhEQUVnRCtCLGtCLEVBQXdEO0FBQ3ZHLGNBQVFBLGtCQUFSO0FBQ0UsYUFBSyxLQUFMO0FBQ0UsaUJBQU9uRCxxRUFBUDs7QUFDRixhQUFLLFdBQUw7QUFDRSxpQkFBT0EsMkVBQVA7O0FBQ0YsYUFBSyxLQUFMO0FBQ0UsaUJBQU9BLHFFQUFQOztBQUNGO0FBQ0VyRSwwRUFBaUIsQ0FBQ3dILGtCQUFELENBQWpCO0FBUko7QUFVRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvQkg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7SUFFcUIzTCxnQjs7Ozs7Ozt3QkFDZ0M7QUFDakQsYUFBT29CLCtEQUFBLEdBQXdCb0gsbUZBQXhCLEdBQW1EQSw2RUFBMUQ7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNUSDtBQUNBO0FBQ0E7QUFDQTs7SUFFTW9ELE87QUFRSjtBQUVBLG1CQUFZQyxRQUFaLEVBQXNCO0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQ3BCLFFBQUksRUFBRSxnQkFBZ0JELE9BQWxCLENBQUosRUFBZ0M7QUFDOUIsWUFBTSxJQUFJRSxTQUFKLENBQWMsc0NBQWQsQ0FBTjtBQUNEOztBQUVELFFBQUksT0FBT0QsUUFBUCxLQUFvQixVQUF4QixFQUFvQztBQUNsQyxZQUFNLElBQUlDLFNBQUosQ0FBYyxnQkFBZCxDQUFOO0FBQ0Q7O0FBRUQsU0FBS0MsTUFBTCxHQUFjLENBQWQ7QUFDQSxTQUFLQyxRQUFMLEdBQWdCLEtBQWhCO0FBQ0EsU0FBS0MsTUFBTCxHQUFjbk0sU0FBZDtBQUNBLFNBQUtvTSxVQUFMLEdBQWtCLEVBQWxCO0FBRUEsU0FBS0MsU0FBTCxDQUFlTixRQUFmO0FBQ0Q7Ozs7OEJBRVNBLFEsRUFBMEI7QUFBQTs7QUFDbEMsVUFBSU8sSUFBSSxHQUFHLEtBQVg7O0FBRUEsVUFBSTtBQUNGUCxnQkFBUSxDQUNOLFVBQUFoUCxLQUFLLEVBQUk7QUFDUCxjQUFJdVAsSUFBSixFQUFVO0FBQ1I7QUFDRDs7QUFFREEsY0FBSSxHQUFHLElBQVA7O0FBQ0EsZUFBSSxDQUFDQyxjQUFMLENBQW9CeFAsS0FBcEI7QUFDRCxTQVJLLEVBU04sVUFBQXlQLE1BQU0sRUFBSTtBQUNSLGNBQUlGLElBQUosRUFBVTtBQUNSO0FBQ0Q7O0FBRURBLGNBQUksR0FBRyxJQUFQOztBQUNBLGVBQUksQ0FBQ0csYUFBTCxDQUFtQkQsTUFBbkI7QUFDRCxTQWhCSyxDQUFSO0FBa0JELE9BbkJELENBbUJFLE9BQU9qSCxLQUFQLEVBQWM7QUFDZCxZQUFJK0csSUFBSixFQUFVO0FBQ1I7QUFDRDs7QUFFREEsWUFBSSxHQUFHLElBQVA7QUFDQSxhQUFLRyxhQUFMLENBQW1CbEgsS0FBbkI7QUFDRDtBQUNGOzs7bUNBRWNtSCxRLEVBQXFDO0FBQ2xELFVBQU1DLE9BQU8sR0FBRyxJQUFoQjs7QUFFQSxVQUFJO0FBQ0Y7QUFDQSxZQUFJRCxRQUFRLEtBQUtDLE9BQWpCLEVBQTBCO0FBQ3hCLGdCQUFNLElBQUlYLFNBQUosQ0FBYyw0Q0FBZCxDQUFOO0FBQ0Q7O0FBRUQsWUFBSVUsUUFBUSxLQUFLLDJHQUFPQSxRQUFQLE1BQW9CLFFBQXBCLElBQWdDLE9BQU9BLFFBQVAsS0FBb0IsVUFBekQsQ0FBWixFQUFrRjtBQUNoRixjQUFNaEIsS0FBSSxHQUFHZ0IsUUFBUSxDQUFDaEIsSUFBdEI7O0FBRUEsY0FBSWdCLFFBQVEsWUFBWVosT0FBeEIsRUFBaUM7QUFDL0JhLG1CQUFPLENBQUNWLE1BQVIsR0FBaUIsQ0FBakI7QUFDQVUsbUJBQU8sQ0FBQ1IsTUFBUixHQUFpQk8sUUFBakI7QUFDQUMsbUJBQU8sQ0FBQ0MsTUFBUjtBQUVBO0FBQ0QsV0FORCxNQU1PLElBQUksT0FBT2xCLEtBQVAsS0FBZ0IsVUFBcEIsRUFBZ0M7QUFDckNpQixtQkFBTyxDQUFDTixTQUFSLENBQWtCLFlBQWlCO0FBQ2pDO0FBQ0FYLG1CQUFJLENBQUNtQixLQUFMLENBQVdILFFBQVgsRUFBcUJJLFNBQXJCO0FBQ0QsYUFIRDtBQUtBO0FBQ0Q7QUFDRjs7QUFFREgsZUFBTyxDQUFDVixNQUFSLEdBQWlCLENBQWpCO0FBQ0FVLGVBQU8sQ0FBQ1IsTUFBUixHQUFpQk8sUUFBakI7QUFDQUMsZUFBTyxDQUFDQyxNQUFSO0FBQ0QsT0E1QkQsQ0E0QkUsT0FBT25MLENBQVAsRUFBVTtBQUNWa0wsZUFBTyxDQUFDRixhQUFSLENBQXNCaEwsQ0FBdEI7QUFDRDtBQUNGOzs7a0NBRWFpTCxRLEVBQW9DO0FBQ2hELFdBQUtULE1BQUwsR0FBYyxDQUFkO0FBQ0EsV0FBS0UsTUFBTCxHQUFjTyxRQUFkO0FBQ0EsV0FBS0UsTUFBTDtBQUNEOzs7NkJBRWM7QUFBQTs7QUFDYixVQUFJLEtBQUtYLE1BQUwsS0FBZ0IsQ0FBaEIsSUFBcUIsS0FBS0csVUFBTCxDQUFnQjdJLE1BQWhCLEtBQTJCLENBQXBELEVBQXVEO0FBQ3JEdUksZUFBTyxDQUFDaUIsVUFBUixDQUFtQixZQUFNO0FBQ3ZCLGNBQUksQ0FBQyxNQUFJLENBQUNiLFFBQVYsRUFBb0I7QUFDbEJKLG1CQUFPLENBQUNrQixtQkFBUixDQUE0QixNQUFJLENBQUNiLE1BQWpDO0FBQ0Q7QUFDRixTQUpEO0FBS0Q7O0FBRUQsV0FBSyxJQUFJYyxDQUFDLEdBQUcsQ0FBUixFQUFXQyxHQUFHLEdBQUcsS0FBS2QsVUFBTCxDQUFnQjdJLE1BQXRDLEVBQThDMEosQ0FBQyxHQUFHQyxHQUFsRCxFQUF1REQsQ0FBQyxFQUF4RCxFQUE0RDtBQUMxRCxhQUFLRSxNQUFMLENBQVksS0FBS2YsVUFBTCxDQUFnQmEsQ0FBaEIsQ0FBWjtBQUNEOztBQUVELFdBQUtiLFVBQUwsR0FBa0IsSUFBbEI7QUFDRDs7OzJCQUVNZ0IsUSxFQUFnQztBQUNyQyxVQUFJVCxPQUFPLEdBQUcsSUFBZDs7QUFFQSxhQUFPQSxPQUFPLENBQUNWLE1BQVIsS0FBbUIsQ0FBMUIsRUFBNkI7QUFDM0JVLGVBQU8sR0FBR0EsT0FBTyxDQUFDUixNQUFsQjtBQUNEOztBQUVELFVBQUlRLE9BQU8sQ0FBQ1YsTUFBUixLQUFtQixDQUF2QixFQUEwQjtBQUN4QlUsZUFBTyxDQUFDUCxVQUFSLENBQW1CekosSUFBbkIsQ0FBd0J5SyxRQUF4Qjs7QUFFQTtBQUNEOztBQUVEVCxhQUFPLENBQUNULFFBQVIsR0FBbUIsSUFBbkI7O0FBQ0FKLGFBQU8sQ0FBQ2lCLFVBQVIsQ0FBbUIsWUFBTTtBQUN2QixZQUFNaEIsUUFBUSxHQUFHWSxPQUFPLENBQUNWLE1BQVIsS0FBbUIsQ0FBbkIsR0FBdUJtQixRQUFRLENBQUNDLFdBQWhDLEdBQThDRCxRQUFRLENBQUNFLFVBQXhFOztBQUVBLFlBQUl2QixRQUFRLEtBQUssSUFBakIsRUFBdUI7QUFDckIsY0FBSVksT0FBTyxDQUFDVixNQUFSLEtBQW1CLENBQXZCLEVBQTBCO0FBQ3hCbUIsb0JBQVEsQ0FBQ1QsT0FBVCxDQUFpQkosY0FBakIsQ0FBZ0NJLE9BQU8sQ0FBQ1IsTUFBeEM7QUFDRCxXQUZELE1BRU87QUFDTGlCLG9CQUFRLENBQUNULE9BQVQsQ0FBaUJGLGFBQWpCLENBQStCRSxPQUFPLENBQUNSLE1BQXZDO0FBQ0Q7O0FBRUQ7QUFDRDs7QUFFRCxZQUFJb0IsTUFBSjs7QUFFQSxZQUFJO0FBQ0ZBLGdCQUFNLEdBQUd4QixRQUFRLENBQUNZLE9BQU8sQ0FBQ1IsTUFBVCxDQUFqQjtBQUNELFNBRkQsQ0FFRSxPQUFPMUssQ0FBUCxFQUFVO0FBQ1YyTCxrQkFBUSxDQUFDVCxPQUFULENBQWlCRixhQUFqQixDQUErQmhMLENBQS9CO0FBRUE7QUFDRDs7QUFFRDJMLGdCQUFRLENBQUNULE9BQVQsQ0FBaUJKLGNBQWpCLENBQWdDZ0IsTUFBaEM7QUFDRCxPQXhCRDtBQXlCRDs7O3dCQUVVQyxHLEVBQThCO0FBQ3ZDLGFBQU8sSUFBSTFCLE9BQUosQ0FBWSxVQUFDMkIsT0FBRCxFQUFVQyxNQUFWLEVBQXFCO0FBQ3RDLFlBQUksQ0FBQzNKLEtBQUssQ0FBQzRKLE9BQU4sQ0FBY0gsR0FBZCxDQUFMLEVBQXlCO0FBQ3ZCLGlCQUFPRSxNQUFNLENBQUMsSUFBSTFCLFNBQUosQ0FBYyw4QkFBZCxDQUFELENBQWI7QUFDRDs7QUFFRCxZQUFNckcsSUFBSSxHQUFHNUIsS0FBSyxDQUFDNkosU0FBTixDQUFnQnBDLEtBQWhCLENBQXNCL08sSUFBdEIsQ0FBMkIrUSxHQUEzQixDQUFiOztBQUVBLFlBQUk3SCxJQUFJLENBQUNwQyxNQUFMLEtBQWdCLENBQXBCLEVBQXVCO0FBQ3JCLGlCQUFPa0ssT0FBTyxDQUFDLEVBQUQsQ0FBZDtBQUNEOztBQUVELFlBQUlJLFNBQVMsR0FBR2xJLElBQUksQ0FBQ3BDLE1BQXJCOztBQUNBLFlBQU11SyxjQUFjLEdBQUcsU0FBakJBLGNBQWlCLENBQUNiLENBQUQsRUFBSWxRLEtBQUosRUFBb0I7QUFDekMsY0FBSTtBQUNGLGdCQUFJQSxLQUFLLEtBQUssMkdBQU9BLEtBQVAsTUFBaUIsUUFBakIsSUFBNkIsT0FBT0EsS0FBUCxLQUFpQixVQUFuRCxDQUFULEVBQXlFO0FBQ3ZFLGtCQUFNMk8sTUFBSSxHQUFHM08sS0FBSyxDQUFDMk8sSUFBbkI7O0FBRUEsa0JBQUksT0FBT0EsTUFBUCxLQUFnQixVQUFwQixFQUFnQztBQUM5QkEsc0JBQUksQ0FBQ2pQLElBQUwsQ0FDRU0sS0FERixFQUVFLFVBQUFBLEtBQUs7QUFBQSx5QkFBSStRLGNBQWMsQ0FBQ2IsQ0FBRCxFQUFJbFEsS0FBSixDQUFsQjtBQUFBLGlCQUZQLEVBR0UyUSxNQUhGOztBQU1BO0FBQ0Q7QUFDRjs7QUFFRC9ILGdCQUFJLENBQUNzSCxDQUFELENBQUosR0FBVWxRLEtBQVY7O0FBRUEsZ0JBQUksRUFBRThRLFNBQUYsS0FBZ0IsQ0FBcEIsRUFBdUI7QUFDckJKLHFCQUFPLENBQUM5SCxJQUFELENBQVA7QUFDRDtBQUNGLFdBcEJELENBb0JFLE9BQU9KLEtBQVAsRUFBYztBQUNkbUksa0JBQU0sQ0FBQ25JLEtBQUQsQ0FBTjtBQUNEO0FBQ0YsU0F4QkQ7O0FBMEJBLGFBQUssSUFBSTBILENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUd0SCxJQUFJLENBQUNwQyxNQUF6QixFQUFpQzBKLENBQUMsRUFBbEMsRUFBc0M7QUFDcENhLHdCQUFjLENBQUNiLENBQUQsRUFBSXRILElBQUksQ0FBQ3NILENBQUQsQ0FBUixDQUFkO0FBQ0Q7QUFDRixPQXpDTSxDQUFQO0FBMENEOzs7NEJBRWNsUSxLLEVBQWdCO0FBQzdCLFVBQUlBLEtBQUssSUFBSSwyR0FBT0EsS0FBUCxNQUFpQixRQUExQixJQUFzQ0EsS0FBSyxDQUFDZ1IsV0FBTixLQUFzQmpDLE9BQWhFLEVBQXlFO0FBQ3ZFLGVBQU8vTyxLQUFQO0FBQ0Q7O0FBRUQsYUFBTyxJQUFJK08sT0FBSixDQUFZLFVBQUEyQixPQUFPO0FBQUEsZUFBSUEsT0FBTyxDQUFDMVEsS0FBRCxDQUFYO0FBQUEsT0FBbkIsQ0FBUDtBQUNEOzs7MkJBRWFBLEssRUFBZ0I7QUFDNUIsYUFBTyxJQUFJK08sT0FBSixDQUFZLFVBQUNrQyxDQUFELEVBQUlOLE1BQUo7QUFBQSxlQUFlQSxNQUFNLENBQUMzUSxLQUFELENBQXJCO0FBQUEsT0FBWixDQUFQO0FBQ0Q7Ozt5QkFFV3lRLEcsRUFBOEI7QUFDeEMsYUFBTyxJQUFJMUIsT0FBSixDQUFZLFVBQUMyQixPQUFELEVBQVVDLE1BQVYsRUFBcUI7QUFDdEMsWUFBSSxDQUFDM0osS0FBSyxDQUFDNEosT0FBTixDQUFjSCxHQUFkLENBQUwsRUFBeUI7QUFDdkIsaUJBQU9FLE1BQU0sQ0FBQyxJQUFJMUIsU0FBSixDQUFjLCtCQUFkLENBQUQsQ0FBYjtBQUNEOztBQUVELGFBQUssSUFBSWlCLENBQUMsR0FBRyxDQUFSLEVBQVdDLEdBQUcsR0FBR00sR0FBRyxDQUFDakssTUFBMUIsRUFBa0MwSixDQUFDLEdBQUdDLEdBQXRDLEVBQTJDRCxDQUFDLEVBQTVDLEVBQWdEO0FBQzlDbkIsaUJBQU8sQ0FBQzJCLE9BQVIsQ0FBZ0JELEdBQUcsQ0FBQ1AsQ0FBRCxDQUFuQixFQUF3QnZCLElBQXhCLENBQTZCK0IsT0FBN0IsRUFBc0NDLE1BQXRDO0FBQ0Q7QUFDRixPQVJNLENBQVA7QUFTRDs7OytCQUVpQjNCLFEsRUFBMEI7QUFDMUMsVUFBTWxCLE9BQU8sR0FBR29ELFVBQVUsQ0FBQ2xDLFFBQUQsRUFBVyxDQUFYLENBQTFCO0FBQ0Q7Ozt3Q0FFMEJ4RyxLLEVBQWE7QUFDdEMsVUFBSSxPQUFPRixPQUFQLEtBQW1CLFdBQW5CLElBQWtDQSxPQUF0QyxFQUErQztBQUM3Q0EsZUFBTyxDQUFDNkksSUFBUixDQUFhLHVDQUFiLEVBQXNEM0ksS0FBdEQsRUFENkMsQ0FDaUI7QUFDL0Q7QUFDRjs7Ozs7O0FBR0h1RyxPQUFPLENBQUM4QixTQUFSLENBQWtCLE9BQWxCLElBQTZCLFVBQVNOLFVBQVQsRUFBK0M7QUFDMUUsU0FBTyxLQUFLNUIsSUFBTCxDQUFVLElBQVYsRUFBZ0I0QixVQUFoQixDQUFQO0FBQ0QsQ0FGRDs7QUFJQXhCLE9BQU8sQ0FBQzhCLFNBQVIsQ0FBa0IsTUFBbEIsSUFBNEIsVUFBU1AsV0FBVCxFQUFnQ0MsVUFBaEMsRUFBc0U7QUFDaEcsTUFBTVgsT0FBTyxHQUFHLElBQUksS0FBS29CLFdBQVQsQ0FBcUI7QUFBQSxXQUFNLElBQU47QUFBQSxHQUFyQixDQUFoQjtBQUVBLE9BQUtaLE1BQUwsQ0FBWSxJQUFJZ0Isb0RBQUosQ0FBbUJkLFdBQW5CLEVBQWdDQyxVQUFoQyxFQUE0Q1gsT0FBNUMsQ0FBWjtBQUVBLFNBQU9BLE9BQVA7QUFDRCxDQU5EOztBQVFBYixPQUFPLENBQUM4QixTQUFSLENBQWtCLFNBQWxCLElBQStCLFVBQVM3QixRQUFULEVBQTZDO0FBQzFFLE1BQU1nQyxXQUFXLEdBQUcsS0FBS0EsV0FBekI7QUFFQSxTQUFPLEtBQUtyQyxJQUFMLENBQ0wsVUFBQTNPLEtBQUs7QUFBQSxXQUFJZ1IsV0FBVyxDQUFDTixPQUFaLENBQW9CMUIsUUFBUSxFQUE1QixFQUFnQ0wsSUFBaEMsQ0FBcUM7QUFBQSxhQUFNM08sS0FBTjtBQUFBLEtBQXJDLENBQUo7QUFBQSxHQURBLEVBRUwsVUFBQXlQLE1BQU07QUFBQSxXQUFJdUIsV0FBVyxDQUFDTixPQUFaLENBQW9CMUIsUUFBUSxFQUE1QixFQUFnQ0wsSUFBaEMsQ0FBcUM7QUFBQSxhQUFNcUMsV0FBVyxDQUFDTCxNQUFaLENBQW1CbEIsTUFBbkIsQ0FBTjtBQUFBLEtBQXJDLENBQUo7QUFBQSxHQUZELENBQVA7QUFJRCxDQVBEOztBQVNBLCtEQUFlVixPQUFmLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3hRQTtBQUNBO0FBQ0E7SUFHcUJxQyxjLEdBS25CLHdCQUFZZCxXQUFaLEVBQXlCQyxVQUF6QixFQUFxQ1gsT0FBckMsRUFBOEM7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTs7QUFDNUMsT0FBS1UsV0FBTCxHQUFtQixPQUFPQSxXQUFQLEtBQXVCLFVBQXZCLEdBQW9DQSxXQUFwQyxHQUFrRCxJQUFyRTtBQUNBLE9BQUtDLFVBQUwsR0FBa0IsT0FBT0EsVUFBUCxLQUFzQixVQUF0QixHQUFtQ0EsVUFBbkMsR0FBZ0QsSUFBbEU7QUFDQSxPQUFLWCxPQUFMLEdBQWVBLE9BQWY7QUFDRCxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2RIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7SUFTcUJ5QixxQjs7O2dEQUlzQjtBQUN2QyxVQUFJQyx1RkFBSixFQUEyQztBQUN6QyxZQUFNeEQsT0FBTyxHQUFHdUQscUJBQXFCLENBQUNFLGlDQUF0QixHQUNiMUMsS0FEYSxDQUNQLFVBQUFuSyxDQUFDO0FBQUEsaUJBQUkyTSxxQkFBcUIsQ0FBQ3RMLE9BQXRCLENBQThCeUMsS0FBOUIsQ0FBb0MsNENBQXBDLEVBQWtGOUQsQ0FBbEYsQ0FBSjtBQUFBLFNBRE0sQ0FBaEI7QUFFRDtBQUNGOzs7Ozs7Ozs7aURBR1EyTSxxQkFBcUIsQ0FBQ0csT0FBdEIsR0FBZ0NILHFCQUFxQixDQUFDSSx5QkFBdEIsR0FDcEM1QyxLQURvQyxDQUM5QixVQUFBbkssQ0FBQyxFQUFJO0FBQ1YyTSx1Q0FBcUIsQ0FBQ0csT0FBdEIsR0FBZ0MsSUFBaEM7QUFFQSx3QkFBTTlNLENBQU47QUFDRCxpQkFMb0MsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztxQkFTbkMyTSxxQkFBcUIsQ0FBQ0csTzs7Ozs7QUFDbEJ4UixxQixHQUFRcVIscUJBQXFCLENBQUNHLE87QUFFcENILHFDQUFxQixDQUFDRyxPQUF0QixHQUFnQyxJQUFoQztrREFFT3hSLEs7OztBQUdIMFIscUMsR0FBd0IzTSx5RTtrREFFdkIyTSxxQkFBcUIsQ0FBQ0Msb0JBQXRCLEdBQ0poRCxJQURJO0FBQUEsNlFBQ0Msa0JBQU1pRCxjQUFOO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNFQyxrREFERixHQUMyQkQsY0FBYyxDQUFDQyxzQkFEMUM7O0FBSUosZ0NBQUlBLHNCQUFKLEVBQTRCO0FBQzFCQyw4Q0FBZ0IsR0FBR0YsY0FBYyxDQUFDRyxjQUFmLENBQThCLE9BQTlCLEVBQXVDO0FBQUNDLHlDQUFTLEVBQUU7QUFBWiwrQkFBdkMsQ0FBbkI7QUFDQUMsOENBQWdCLEdBQUdMLGNBQWMsQ0FBQ0csY0FBZixDQUE4QixPQUE5QixFQUF1QztBQUFDQyx5Q0FBUyxFQUFFO0FBQVosK0JBQXZDLENBQW5CO0FBQ0Q7O0FBUEcsMkNBVUZGLGdCQVZFO0FBQUEsMkNBV0ZHLGdCQVhFO0FBQUEsMkNBWWNMLGNBWmQ7QUFBQTtBQUFBLG1DQWFnQkEsY0FBYyxDQUFDTSxXQUFmLENBQTJCTCxzQkFBc0IsR0FBRzVPLFNBQUgsR0FBZTtBQUNoRmtQLGlEQUFtQixFQUFFLElBRDJEO0FBRWhGQyxpREFBbUIsRUFBRTtBQUYyRCw2QkFBaEUsQ0FiaEI7O0FBQUE7QUFBQTtBQUFBO0FBVUZOLDhDQVZFO0FBV0ZHLDhDQVhFO0FBWUZMLDRDQVpFO0FBYUZTLHdDQWJFO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBREQ7O0FBQUE7QUFBQTtBQUFBO0FBQUEsb0I7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCVCxtQ0FBc0I7QUFBQTs7QUFDcEIsVUFBTSxJQUFJaEwsS0FBSixDQUFVLHNFQUFWLENBQU47QUFDRDs7Ozs7bUhBdkRrQmdLLHFCLGFBQ2V2TSxvRUFBQSxDQUF3Qix1QkFBeEIsQzs7bUhBRGZ1TSxxQjs7O0FBMERyQkEscUJBQXFCLENBQUNpQix5QkFBdEIsRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQStCQSxJQUFNQyxzQkFBc0IsR0FBRyxJQUEvQjs7SUFFcUJDLG9CO0FBVW5CLGdDQUFZWixjQUFaLEVBQTZDYSxXQUE3QyxFQUF1RUMsc0JBQXZFLEVBQXVHO0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUEsOElBTnZDLElBQUlwVSxnREFBSixDQUFrQyxFQUFsQyxDQU11Qzs7QUFBQTs7QUFBQSxrSkFKM0UsSUFJMkU7O0FBQUE7O0FBQUE7O0FBQ3JHLFNBQUtxVSxlQUFMLEdBQXVCZixjQUF2QjtBQUNBLFNBQUtnQix1QkFBTCxHQUErQkYsc0JBQS9CO0FBQ0EsU0FBS0csZ0JBQUwsR0FBd0JKLFdBQVcsQ0FBQ0ssU0FBWixHQUF3QkMsR0FBeEIsQ0FBNEIsVUFBQUMsS0FBSztBQUFBLGFBQUlBLEtBQUssQ0FBQ3pGLElBQVY7QUFBQSxLQUFqQyxLQUFvRCxFQUE1RTs7QUFFQSxRQUFJLEtBQUtvRixlQUFULEVBQTBCO0FBQ3hCLFVBQUksQ0FBQ3JCLDJGQUFMLEVBQWdEO0FBQzlDLFlBQU0yQixTQUFTLEdBQUcsSUFBSUMsK0NBQUosQ0FBYyxLQUFLUCxlQUFMLENBQXFCUSx3QkFBckIsQ0FBOENDLEdBQTVELENBQWxCO0FBRUEsYUFBS0Msb0JBQUwsR0FBNEJKLFNBQVMsQ0FBQ0ssVUFBdEM7QUFDQSxhQUFLQyxvQkFBTCxHQUE0Qk4sU0FBUyxDQUFDTyxVQUF0QztBQUNEOztBQUVELFdBQUtDLGVBQUw7QUFDRDtBQUNGOzs7OzhCQU1lO0FBQ2QsV0FBS0MsaUJBQUwsR0FBeUIsS0FBekI7QUFDQSxXQUFLZixlQUFMLEdBQXVCLElBQXZCOztBQUVBLFVBQUksS0FBS2dCLGNBQVQsRUFBeUI7QUFDdkJDLG9CQUFZLENBQUMsS0FBS0QsY0FBTixDQUFaO0FBQ0EsYUFBS0EsY0FBTCxHQUFzQixJQUF0QjtBQUNEO0FBQ0Y7Ozs7Ozs7Ozs7Ozs7cUJBR0tyQyxnRzs7Ozs7O3VCQUNvQixLQUFLdUMscUJBQUwsRTs7O0FBQWhCL0Ysd0I7Ozs7QUFLUjtBQUNNZ0csa0MsR0FBcUIsU0FBckJBLGtCQUFxQixDQUFDbE0sSUFBRDtBQUFBLHlCQUFrQkEsSUFBSSxDQUFDbU0sRUFBTCxDQUFROVIsUUFBUixDQUFpQixPQUFqQixJQUE0QixPQUE1QixHQUFzQzJGLElBQUksQ0FBQ21NLEVBQUwsQ0FBUTlSLFFBQVIsQ0FBaUIsT0FBakIsSUFBNEIsT0FBNUIsR0FBc0MsRUFBOUY7QUFBQSxpQjs7O3VCQUNMLEtBQUswUSxlQUFMLENBQXFCcUIsUUFBckIsQ0FBOEIsSUFBOUIsRUFDbkJyRixJQURtQixDQUNkLFVBQUFzRixLQUFLLEVBQUk7QUFDYixzQkFBTUMsUUFBOEIsR0FBRyxFQUF2Qzs7QUFFQSxzQkFBSUQsS0FBSixFQUFXO0FBQ1Qsd0JBQUlFLGFBQWEsR0FBRyxLQUFJLENBQUN2Qix1QkFBekI7QUFDQSx3QkFBSXdCLDJCQUFKO0FBRUFILHlCQUFLLENBQUMxTixPQUFOLENBQWMsVUFBQThOLE1BQU0sRUFBSTtBQUN0QiwwQkFBSUEsTUFBTSxDQUFDeFEsSUFBUCxLQUFnQixnQkFBaEIsSUFBb0N3USxNQUFNLENBQUNDLG9CQUEvQyxFQUFxRTtBQUNuRUgscUNBQWEsR0FBR0UsTUFBTSxDQUFDQyxvQkFBUCxHQUE4QixJQUE5Qzs7QUFFQSw0QkFBSUosUUFBUSxDQUFDLE9BQUQsQ0FBWixFQUF1QjtBQUNyQkEsa0NBQVEsQ0FBQyxPQUFELENBQVIsQ0FBa0JDLGFBQWxCLEdBQWtDQSxhQUFsQztBQUNEOztBQUVELDRCQUFJRCxRQUFRLENBQUMsT0FBRCxDQUFaLEVBQXVCO0FBQ3JCQSxrQ0FBUSxDQUFDLE9BQUQsQ0FBUixDQUFrQkMsYUFBbEIsR0FBa0NBLGFBQWxDO0FBQ0Q7QUFDRjs7QUFFRCwwQkFBSUUsTUFBTSxDQUFDeFEsSUFBUCxLQUFnQixnQkFBaEIsSUFBb0N3USxNQUFNLENBQUNELDJCQUEvQyxFQUE0RTtBQUMxRUEsbURBQTJCLEdBQUdDLE1BQU0sQ0FBQ0QsMkJBQXJDOztBQUVBLDRCQUFJRixRQUFRLENBQUMsT0FBRCxDQUFaLEVBQXVCO0FBQ3JCQSxrQ0FBUSxDQUFDLE9BQUQsQ0FBUixDQUFrQkUsMkJBQWxCLEdBQWdEQSwyQkFBaEQ7QUFDRDs7QUFFRCw0QkFBSUYsUUFBUSxDQUFDLE9BQUQsQ0FBWixFQUF1QjtBQUNyQkEsa0NBQVEsQ0FBQyxPQUFELENBQVIsQ0FBa0JFLDJCQUFsQixHQUFnREEsMkJBQWhEO0FBQ0Q7QUFDRjs7QUFFRCwwQkFBSUMsTUFBTSxDQUFDeFEsSUFBUCxLQUFnQixhQUFwQixFQUFtQztBQUNqQyw0QkFBTTBKLEtBQUksR0FBRzhHLE1BQU0sQ0FBQzlHLElBQVAsSUFBZThHLE1BQU0sQ0FBQ0UsU0FBdEIsSUFBbUNULGtCQUFrQixDQUFDTyxNQUFELENBQWxFOztBQUNBLDRCQUFJRyxLQUFLLEdBQUcsRUFBWjtBQUVBUCw2QkFBSyxDQUFDMU4sT0FBTixDQUFjLFVBQUFxQixJQUFJLEVBQUk7QUFDcEIsOEJBQUlBLElBQUksQ0FBQ21NLEVBQUwsS0FBWU0sTUFBTSxDQUFDSSxPQUF2QixFQUFnQztBQUM5QkQsaUNBQUssR0FBRzVNLElBQUksQ0FBQzhNLFFBQWI7QUFDRDtBQUNGLHlCQUpEOztBQU1BLDRCQUFJbkgsS0FBSSxJQUFJLEtBQUksQ0FBQ3NGLGdCQUFMLENBQXNCNVEsUUFBdEIsQ0FBK0JzTCxLQUEvQixDQUFaLEVBQWtEO0FBQ2hEMkcsa0NBQVEsQ0FBQzNHLEtBQUQsQ0FBUixHQUFpQjtBQUNmb0gsZ0NBQUksRUFBRU4sTUFBTSxDQUFDTSxJQURFO0FBRWZKLHFDQUFTLEVBQUVoSCxLQUZJO0FBR2ZHLHFDQUFTLEVBQUUyRyxNQUFNLENBQUMzRyxTQUhIO0FBSWZrSCx5Q0FBYSxFQUFFUCxNQUFNLENBQUNPLGFBSlA7QUFLZkMsdUNBQVcsRUFBRVIsTUFBTSxDQUFDUSxXQUxMO0FBTWZDLDJDQUFlLEVBQUVULE1BQU0sQ0FBQ1MsZUFOVDtBQU9mTixpQ0FBSyxFQUFFQSxLQUFLLElBQUksS0FBSSxDQUFDTyxjQUFMLENBQW9CeEgsS0FBcEIsQ0FQRDtBQVFmNEcseUNBQWEsRUFBYkE7QUFSZSwyQkFBakI7O0FBV0EsOEJBQUlFLE1BQU0sQ0FBQ0QsMkJBQVAsSUFBc0NBLDJCQUExQyxFQUF1RTtBQUNyRUYsb0NBQVEsQ0FBQzNHLEtBQUQsQ0FBUixDQUFlNkcsMkJBQWYsR0FBNkNDLE1BQU0sQ0FBQ0QsMkJBQVAsSUFBc0NBLDJCQUFuRjtBQUNEOztBQUVELDhCQUFJN0csS0FBSSxLQUFLLE9BQVQsSUFBb0IsS0FBSSxDQUFDeUgsYUFBTCxDQUFtQmhWLEtBQXZDLElBQWdELEtBQUksQ0FBQ2dWLGFBQUwsQ0FBbUJoVixLQUFuQixDQUF5QmlWLEtBQTdFLEVBQW9GO0FBQ2xGZixvQ0FBUSxDQUFDM0csS0FBRCxDQUFSLENBQWUsZUFBZixJQUFrQzhHLE1BQU0sQ0FBQ2EsYUFBekM7QUFDQWhCLG9DQUFRLENBQUMzRyxLQUFELENBQVIsQ0FBZSxLQUFmLElBQXdCLENBQUM4RyxNQUFNLENBQUNhLGFBQVAsR0FBdUIsS0FBSSxDQUFDRixhQUFMLENBQW1CaFYsS0FBbkIsQ0FBeUJpVixLQUF6QixDQUErQkMsYUFBdkQsS0FDckJoQixRQUFRLENBQUMzRyxLQUFELENBQVIsQ0FBZUcsU0FBZixHQUEyQixLQUFJLENBQUNzSCxhQUFMLENBQW1CaFYsS0FBbkIsQ0FBeUJpVixLQUF6QixDQUErQnZILFNBRHJDLElBRXRCLElBRnNCLElBRWQsQ0FGVjtBQUdEO0FBQ0Y7QUFDRjtBQUNGLHFCQTNERDtBQTRERDs7QUFFRCx1QkFBSSxDQUFDc0gsYUFBTCxDQUFtQmhWLEtBQW5CLEdBQTJCa1UsUUFBM0I7QUFDRCxpQkF2RW1CLEVBdUVqQnZGLElBdkVpQixDQXVFWixZQUFNO0FBQ1osc0JBQUksS0FBSSxDQUFDK0UsaUJBQVQsRUFBNEI7QUFDMUIseUJBQUksQ0FBQ0MsY0FBTCxHQUFzQi9ULE1BQU0sQ0FBQ3NSLFVBQVAsQ0FBa0I7QUFBQSw2QkFBTSxLQUFJLENBQUN1QyxlQUFMLEVBQU47QUFBQSxxQkFBbEIsRUFBZ0RsQixzQkFBaEQsQ0FBdEI7QUFDRDtBQUNGLGlCQTNFbUIsQzs7O0FBQWhCekUsdUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dUJBK0VnQixLQUFLNkUsZUFBTCxDQUFxQndDLGNBQXJCLEdBQXNDeEcsSUFBdEMsQ0FBMkMsVUFBQXNGLEtBQUssRUFBSTtBQUN4RSxzQkFBTUMsUUFBOEIsR0FBRyxFQUF2QztBQUNBLHNCQUFJQyxhQUFhLEdBQUcsTUFBSSxDQUFDdkIsdUJBQXpCO0FBRUFxQix1QkFBSyxDQUFDekQsTUFBTixHQUFlakssT0FBZixDQUF1QixVQUFBOE4sTUFBTSxFQUFJO0FBQy9CQSwwQkFBTSxDQUFDZSxLQUFQLEdBQWU3TyxPQUFmLENBQXVCLFVBQUFwRSxJQUFJLEVBQUk7QUFDN0IsMEJBQUlBLElBQUksS0FBSyxTQUFiLEVBQXdCO0FBQ3RCZ1MscUNBQWEsR0FBR0UsTUFBTSxDQUFDZ0IsSUFBUCxDQUFZbFQsSUFBWixDQUFoQjtBQUNEO0FBQ0YscUJBSkQ7O0FBTUEsd0JBQUlrUyxNQUFNLENBQUN4USxJQUFQLEtBQWdCLE1BQXBCLEVBQTRCO0FBQzFCLDBCQUFNMFEsU0FBUyxHQUFHRixNQUFNLENBQUNnQixJQUFQLENBQVksV0FBWixFQUF5QnhPLFFBQXpCLEVBQWxCO0FBRUFxTiw4QkFBUSxDQUFDSyxTQUFELENBQVIsR0FBc0I7QUFBQzdHLGlDQUFTLEVBQUV2UCxJQUFJLENBQUNDLEdBQUw7QUFBWix1QkFBdEI7QUFDQThWLDhCQUFRLENBQUNLLFNBQUQsQ0FBUixDQUFvQixNQUFwQixJQUE4QkYsTUFBTSxDQUFDZ0IsSUFBUCxDQUFZLE1BQVosRUFBb0J4TyxRQUFwQixFQUE5QjtBQUNBcU4sOEJBQVEsQ0FBQ0ssU0FBRCxDQUFSLENBQW9CLFdBQXBCLElBQW1DQSxTQUFuQztBQUNBTCw4QkFBUSxDQUFDSyxTQUFELENBQVIsQ0FBb0IsZUFBcEIsSUFBdUNGLE1BQU0sQ0FBQ2dCLElBQVAsQ0FBWSxlQUFaLENBQXZDO0FBQ0FuQiw4QkFBUSxDQUFDSyxTQUFELENBQVIsQ0FBb0IsYUFBcEIsSUFBcUNGLE1BQU0sQ0FBQ2dCLElBQVAsQ0FBWSxhQUFaLENBQXJDO0FBQ0FuQiw4QkFBUSxDQUFDSyxTQUFELENBQVIsQ0FBb0IsaUJBQXBCLElBQXlDRixNQUFNLENBQUNnQixJQUFQLENBQVksaUJBQVosQ0FBekM7QUFDQW5CLDhCQUFRLENBQUNLLFNBQUQsQ0FBUixDQUFvQixPQUFwQixJQUErQkYsTUFBTSxDQUFDZ0IsSUFBUCxDQUFZLGVBQVosRUFBNkJ4TyxRQUE3QixNQUEyQyxNQUFJLENBQUNrTyxjQUFMLENBQW9CUixTQUFwQixDQUExRTtBQUNBTCw4QkFBUSxDQUFDSyxTQUFELENBQVIsQ0FBb0IsZUFBcEIsSUFBdUNKLGFBQXZDOztBQUVBLDBCQUFJSSxTQUFTLEtBQUssT0FBZCxJQUF5QixNQUFJLENBQUNTLGFBQUwsQ0FBbUJoVixLQUE1QyxJQUFxRCxNQUFJLENBQUNnVixhQUFMLENBQW1CaFYsS0FBbkIsQ0FBeUJpVixLQUFsRixFQUF5RjtBQUN2RmYsZ0NBQVEsQ0FBQ0ssU0FBRCxDQUFSLENBQW9CLGVBQXBCLElBQXVDRixNQUFNLENBQUNnQixJQUFQLENBQVksZUFBWixDQUF2QztBQUNBbkIsZ0NBQVEsQ0FBQ0ssU0FBRCxDQUFSLENBQW9CLEtBQXBCLElBQTZCLENBQUNMLFFBQVEsQ0FBQ0ssU0FBRCxDQUFSLENBQW9CVyxhQUFwQixHQUFvQyxNQUFJLENBQUNGLGFBQUwsQ0FBbUJoVixLQUFuQixDQUF5QmlWLEtBQXpCLENBQStCQyxhQUFwRSxLQUMxQmhCLFFBQVEsQ0FBQ0ssU0FBRCxDQUFSLENBQW9CN0csU0FBcEIsR0FBZ0MsTUFBSSxDQUFDc0gsYUFBTCxDQUFtQmhWLEtBQW5CLENBQXlCaVYsS0FBekIsQ0FBK0J2SCxTQURyQyxJQUU3QixJQUY2QixJQUVyQixDQUZSO0FBR0Q7QUFDRjtBQUNGLG1CQTFCRDtBQTJCQSx3QkFBSSxDQUFDc0gsYUFBTCxDQUFtQmhWLEtBQW5CLEdBQTJCa1UsUUFBM0I7QUFDRCxpQkFoQ3FCLEVBZ0NuQnZGLElBaENtQixDQWdDZCxZQUFNO0FBQ1osc0JBQUksTUFBSSxDQUFDK0UsaUJBQVQsRUFBNEI7QUFDMUIsMEJBQUksQ0FBQ0MsY0FBTCxHQUFzQi9ULE1BQU0sQ0FBQ3NSLFVBQVAsQ0FBa0I7QUFBQSw2QkFBTSxNQUFJLENBQUN1QyxlQUFMLEVBQU47QUFBQSxxQkFBbEIsRUFBZ0RsQixzQkFBaEQsQ0FBdEI7QUFDRDtBQUNGLGlCQXBDcUIsQzs7O0FBQWhCekUsdUI7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQ0F1Q2VqSyxJLEVBQXNCO0FBQzNDLGNBQVFBLElBQVI7QUFDRSxhQUFLLE9BQUw7QUFDRSxpQkFBTyxLQUFLd1Asb0JBQVo7O0FBQ0YsYUFBSyxPQUFMO0FBQ0UsaUJBQU8sS0FBS0Usb0JBQVo7O0FBQ0Y7QUFDRSxpQkFBTyxTQUFQO0FBTko7QUFRRDs7O3dCQXRKaUQ7QUFDaEQsYUFBTyxLQUFLeUIsYUFBWjtBQUNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwRUg7QUFDQTtBQUNBO0lBRXFCOUIsUztBQUtuQixxQkFBWUUsR0FBWixFQUF5QjtBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUN2QixTQUFLa0MsSUFBTCxHQUFZbEMsR0FBWjtBQUNBLFNBQUttQyxXQUFMLEdBQW1CLEtBQUtDLFVBQUwsQ0FBZ0IsT0FBaEIsQ0FBbkI7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLEtBQUtELFVBQUwsQ0FBZ0IsT0FBaEIsQ0FBbkI7QUFDRDs7OzsrQkFVVTNSLEksRUFBc0I7QUFDL0IsVUFBTTZSLFFBQVEsR0FBRyxLQUFLSixJQUFMLENBQVU1VSxLQUFWLENBQWdCLGNBQWhCLENBQWpCOztBQUNBLFVBQU1pVixhQUFhLEdBQUdELFFBQVEsQ0FBQ0UsSUFBVCxDQUFjLFVBQUFoTyxJQUFJO0FBQUEsZUFBSUEsSUFBSSxDQUFDM0YsUUFBTCxvQkFBMEJ5VCxRQUFRLENBQUNFLElBQVQsQ0FBYyxVQUFBMUYsQ0FBQztBQUFBLGlCQUFJQSxDQUFDLENBQUNqTyxRQUFGLGFBQWdCNEIsSUFBaEIsRUFBSjtBQUFBLFNBQWYsRUFBNENuRCxLQUE1QyxDQUFrRCxHQUFsRCxFQUF1RCxDQUF2RCxDQUExQixFQUFKO0FBQUEsT0FBbEIsQ0FBdEI7QUFDQSxVQUFNbVYsU0FBUyxHQUFHRixhQUFhLENBQUNqVixLQUFkLENBQW9CLEdBQXBCLEVBQXlCLENBQXpCLENBQWxCO0FBQ0EsVUFBTW9WLFNBQVMsR0FBR0QsU0FBUyxDQUFDblYsS0FBVixDQUFnQixHQUFoQixFQUFxQixDQUFyQixDQUFsQjtBQUVBLGFBQU9vVixTQUFQO0FBQ0Q7Ozt3QkFmd0I7QUFDdkIsYUFBTyxLQUFLUCxXQUFaO0FBQ0Q7Ozt3QkFFd0I7QUFDdkIsYUFBTyxLQUFLRSxXQUFaO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JCSDtBQUNBO0FBQ0E7QUFDQTtBQUdBOztJQUdNTSxxQjtBQUlKLGlDQUFZQyxhQUFaLEVBQThDO0FBQUE7O0FBQUEsd0lBSFZsUixvRUFBQSxDQUF3Qix1QkFBeEIsQ0FHVTs7QUFBQTs7QUFDNUMsUUFBSXdNLGtHQUFKLEVBQXNEO0FBQ3BELFdBQUtxQixlQUFMLEdBQXVCLElBQUlzRCx1QkFBSixDQUE0QkQsYUFBNUIsQ0FBdkI7QUFFQTtBQUNEOztBQUVELFNBQUtyRCxlQUFMLEdBQXVCLElBQUl1RCxpQkFBSixDQUFzQkYsYUFBdEIsQ0FBdkI7QUFDRDs7Ozs7MFJBOEJpQkcsTzs7Ozs7OztxQkFDWjdFLGlHOzs7OztpREFJSyxJQUFJdkMsT0FBSixDQUFZLFVBQUMyQixPQUFELEVBQVVDLE1BQVY7QUFBQSx5QkFBcUIsS0FBSSxDQUFDZ0MsZUFBTCxDQUFxQlQsV0FBckIsQ0FBaUN4QixPQUFqQyxFQUEwQ0MsTUFBMUMsRUFBa0R3RixPQUFsRCxDQUFyQjtBQUFBLGlCQUFaLEM7OztpREFJRixLQUFLeEQsZUFBTCxDQUFxQlQsV0FBckIsQ0FBaUNpRSxPQUFqQyxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzRSQUdVQSxPOzs7Ozs7O3FCQUNiN0UsaUc7Ozs7O2tEQUlLLElBQUl2QyxPQUFKLENBQVksVUFBQzJCLE9BQUQsRUFBVUMsTUFBVjtBQUFBLHlCQUFxQixNQUFJLENBQUNnQyxlQUFMLENBQXFCeUQsWUFBckIsQ0FBa0MxRixPQUFsQyxFQUEyQ0MsTUFBM0MsRUFBbUR3RixPQUFuRCxDQUFyQjtBQUFBLGlCQUFaLEM7OztrREFJRixLQUFLeEQsZUFBTCxDQUFxQnlELFlBQXJCLENBQWtDRCxPQUFsQyxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O21TQUdpQkUsVzs7Ozs7a0RBQ2pCLEtBQUsxRCxlQUFMLENBQXFCMkQsbUJBQXJCLENBQXlDaEYsaUdBQUEsR0FDOUMsSUFBSWlGLHFCQUFKLENBQTBCRixXQUExQixDQUQ4QyxHQUNMQSxXQURwQyxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O29TQUlrQkEsVzs7Ozs7O0FBQ25CRyx5QixHQUFZSCxXQUFXLENBQUNqRCxHQUFaLENBQWdCL1MsS0FBaEIsQ0FBc0IsWUFBdEIsQzs7QUFFbEIsb0JBQUltVyxTQUFKLEVBQWU7QUFDYix1QkFBS3pRLE9BQUwsQ0FBYW9MLElBQWIsQ0FBa0IsK0JBQWxCO0FBQ0Q7O2tEQUVNLEtBQUt3QixlQUFMLENBQXFCOEQsb0JBQXJCLENBQTBDbkYsaUdBQUEsR0FDL0MsSUFBSWlGLHFCQUFKLENBQTBCRixXQUExQixDQUQrQyxHQUNOQSxXQURwQyxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7NkJBSUFLLFEsRUFBNkQ7QUFDcEUsYUFBTyxLQUFLL0QsZUFBTCxDQUFxQnFCLFFBQXJCLENBQThCMEMsUUFBOUIsQ0FBUDtBQUNEOzs7cUNBRWdEO0FBQUE7O0FBQy9DLGFBQU8sSUFBSTNILE9BQUosQ0FBWSxVQUFBMkIsT0FBTyxFQUFJO0FBQzVCOztBQUNBO0FBQ0E7QUFDQSxZQUFNNUMsT0FBTyxHQUFHLE1BQUksQ0FBQzZFLGVBQUwsQ0FBcUJxQixRQUFyQixDQUE4QnRELE9BQTlCLENBQWhCO0FBQ0E7O0FBQ0QsT0FOTSxDQUFQO0FBT0Q7OztxQ0FFZ0I3TSxJLEVBQTRCRSxRLEVBQThDb1MsTyxFQUFtRDtBQUM1SSxXQUFLeEQsZUFBTCxDQUFxQnRULGdCQUFyQixDQUFzQ3dFLElBQXRDLEVBQTRDRSxRQUE1QyxFQUFzRG9TLE9BQXREO0FBQ0Q7Ozt3Q0FFbUJ0UyxJLEVBQTRCRSxRLEVBQThDb1MsTyxFQUFnRDtBQUM1SSxXQUFLeEQsZUFBTCxDQUFxQm5ULG1CQUFyQixDQUF5Q3FFLElBQXpDLEVBQStDRSxRQUEvQyxFQUF5RG9TLE9BQXpEO0FBQ0Q7OzttQ0FFY2hVLEksRUFBY2dVLE8sRUFBbUQ7QUFDOUUsYUFBTyxLQUFLeEQsZUFBTCxDQUFxQlosY0FBckIsQ0FBb0M1UCxJQUFwQyxFQUEwQ2dVLE9BQTFDLENBQVA7QUFDRDs7O3VDQUVvQztBQUNuQyxhQUFPLEtBQUt4RCxlQUFMLENBQXFCZ0UsZ0JBQXJCLEVBQVA7QUFDRDs7O3FDQUVnQlgsYSxFQUF1QztBQUN0RCxXQUFLckQsZUFBTCxDQUFxQmlFLGdCQUFyQixDQUFzQ1osYUFBdEM7QUFDRDs7OzRCQTBCYTtBQUNaLFdBQUtyRCxlQUFMLENBQXFCa0UsS0FBckI7QUFDRDs7O3dCQWhJK0I7QUFDOUIsYUFBTyxLQUFLbEUsZUFBWjtBQUNEOzs7d0JBRTJEO0FBQzFELGFBQU8sS0FBS0EsZUFBTCxDQUFxQm1FLHVCQUE1QjtBQUNEOzs7d0JBRTREO0FBQzNELGFBQU8sS0FBS25FLGVBQUwsQ0FBcUJRLHdCQUE1QjtBQUNEOzs7d0JBRStDO0FBQzlDLGFBQU8sS0FBS1IsZUFBTCxDQUFxQm9FLGtCQUE1QjtBQUNEOzs7d0JBRXVDO0FBQ3RDLGFBQU8sT0FBTyxLQUFLcEUsZUFBTCxDQUFxQmdFLGdCQUE1QixLQUFpRCxVQUF4RDtBQUNEOzs7d0JBRXVDO0FBQ3RDLGFBQU8sT0FBTyxLQUFLaEUsZUFBTCxDQUFxQmlFLGdCQUE1QixLQUFpRCxVQUF4RDtBQUNEOzs7d0JBRXFDO0FBQ3BDLGFBQU8sQ0FBQ3RGLHlGQUFELElBQTRDLE9BQU8sS0FBS3FCLGVBQUwsQ0FBcUJaLGNBQTVCLEtBQStDLFVBQWxHO0FBQ0Q7OztzQkE0RVdpRixPLEVBQTJFO0FBQ3JGLFdBQUtyRSxlQUFMLENBQXFCc0UsT0FBckIsR0FBK0JELE9BQS9CO0FBQ0QsSzt3QkFFK0U7QUFDOUUsYUFBTyxLQUFLckUsZUFBTCxDQUFxQnNFLE9BQTVCO0FBQ0Q7OztzQkFFa0JELE8sRUFBdUY7QUFDeEcsV0FBS3JFLGVBQUwsQ0FBcUJ1RSxjQUFyQixHQUFzQ0YsT0FBdEM7QUFDRCxLO3dCQUVrRztBQUNqRyxhQUFPLEtBQUtyRSxlQUFMLENBQXFCdUUsY0FBNUI7QUFDRDs7O3NCQUU4QkYsTyxFQUFtRTtBQUNoRyxXQUFLckUsZUFBTCxDQUFxQndFLDBCQUFyQixHQUFrREgsT0FBbEQ7QUFDRCxLO3dCQUUwRjtBQUN6RixhQUFPLEtBQUtyRSxlQUFMLENBQXFCd0UsMEJBQTVCO0FBQ0Q7Ozs7OztBQU9ILCtEQUFlcEIscUJBQWYsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFKQTtBQUNBO0FBQ0E7QUFJQTs7SUFFTXFCLDRCOzs7Ozs7OzttU0FDdUJwQixhOzs7OztpREFDbEIsSUFBSUQsMkRBQUosQ0FBMEJDLGFBQTFCLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUlYLCtEQUFlb0IsNEJBQWYsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDZEE7QUFDQTtBQUNBO0lBS3FCNVksZTtBQUduQiwyQkFBWTZZLE9BQVosRUFBaUM7QUFBQTs7QUFBQTs7QUFDL0IsU0FBS0MsUUFBTCxHQUFnQkQsT0FBaEI7QUFDRDs7Ozs4QkFNU3RULFEsRUFBb0M7QUFDNUMsYUFBTyxLQUFLdVQsUUFBTCxDQUFjQyxTQUFkLENBQXdCeFQsUUFBeEIsQ0FBUDtBQUNEOzs7d0JBTmM7QUFDYixhQUFPLEtBQUt1VCxRQUFMLENBQWN0WCxLQUFyQjtBQUNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2hCSDtBQUNBO0FBQ0E7QUFHQTs7SUFHTXdYLGtCOzs7OztBQUNKLDhCQUFZQyxTQUFaLEVBQWlDMVQsUUFBakMsRUFBOEM7QUFBQTs7QUFBQSw2QkFDdEMsWUFBTTtBQUNWLFVBQU0yVCxHQUFHLEdBQUdELFNBQVMsQ0FBQzFXLE9BQVYsQ0FBa0JnRCxRQUFsQixDQUFaOztBQUVBLFVBQUkyVCxHQUFHLElBQUksQ0FBWCxFQUFjO0FBQ1pELGlCQUFTLENBQUNuTyxNQUFWLENBQWlCb08sR0FBakIsRUFBc0IsQ0FBdEI7QUFDRDtBQUNGLEtBUDJDO0FBUTdDOzs7RUFUaUNuWSxxRDs7SUFZZmpCLE87QUFJbkIsbUJBQVkwQixLQUFaLEVBQXNCO0FBQUE7O0FBQUE7O0FBQUE7O0FBQ3BCLFNBQUsyWCxVQUFMLEdBQWtCLEVBQWxCO0FBQ0EsU0FBS3ZJLE1BQUwsR0FBY3BQLEtBQWQ7QUFDRDs7Ozs4QkE0QlMrRCxRLEVBQW9DO0FBQzVDLFdBQUs0VCxVQUFMLENBQWdCL1IsSUFBaEIsQ0FBcUI3QixRQUFyQjs7QUFFQUEsY0FBUSxDQUFDLEtBQUtxTCxNQUFOLENBQVI7QUFFQSxhQUFPLElBQUlvSSxrQkFBSixDQUFvQyxLQUFLRyxVQUF6QyxFQUFxRDVULFFBQXJELENBQVA7QUFDRDs7O3NCQWhDUy9ELEssRUFBVTtBQUNsQixVQUFJNFgsT0FBTyxHQUFHLEtBQUt4SSxNQUFMLEtBQWdCcFAsS0FBOUI7O0FBRUEsVUFBSTRYLE9BQU8sSUFBSTVYLEtBQWYsRUFBc0I7QUFDcEIsWUFBTTZYLFVBQVUsR0FBRzdYLEtBQW5COztBQUVBLFlBQUksT0FBTzZYLFVBQVUsQ0FBQ0MsTUFBbEIsS0FBNkIsVUFBakMsRUFBNkM7QUFDM0NGLGlCQUFPLEdBQUcsQ0FBQ0MsVUFBVSxDQUFDQyxNQUFYLENBQWtCLEtBQUsxSSxNQUF2QixDQUFYO0FBQ0Q7QUFDRjs7QUFFRCxVQUFJLENBQUN3SSxPQUFMLEVBQWM7QUFDWjtBQUNEOztBQUVELFdBQUt4SSxNQUFMLEdBQWNwUCxLQUFkOztBQUVBLFdBQUsyWCxVQUFMLENBQWdCcFIsT0FBaEIsQ0FBd0IsVUFBQXhDLFFBQVEsRUFBSTtBQUNsQ0EsZ0JBQVEsQ0FBQy9ELEtBQUQsQ0FBUjtBQUNELE9BRkQ7QUFHRCxLO3dCQUVjO0FBQ2IsYUFBTyxLQUFLb1AsTUFBWjtBQUNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyREg7QUFDQTtBQUNBO0lBRXFCdkMsVzs7Ozs7OzswQ0FDVWYsRyxFQUFxQjtBQUNoRCxVQUFJO0FBQ0YsWUFBTWlNLE9BQU8sR0FBRyxJQUFJL0wsR0FBSixDQUFRRixHQUFSLENBQWhCO0FBRUEsZUFBT2lNLE9BQU8sQ0FBQ0MsTUFBZjtBQUNELE9BSkQsQ0FJRSxPQUFPdFQsQ0FBUCxFQUFVO0FBQ1YsZUFBTyxFQUFQO0FBQ0Q7QUFDRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNiSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQU1HLFlBQVksR0FBR2pGLE1BQU0sQ0FBQyxzQkFBRCxDQUFOLElBQWtDQSxNQUFNLENBQUMsZ0JBQUQsQ0FBeEMsSUFBOER6QixJQUFJLENBQUNDLEdBQUwsRUFBbkY7O0lBZXFCMkcsRzs7O2tEQXVId0I7QUFBQTs7QUFDekMsVUFBTWtULHNCQUFzQixHQUFHblQsaUZBQS9CO0FBRUFtVCw0QkFBc0IsQ0FBQzFMLFNBQXZCLEdBQW1DeEgsR0FBRyxDQUFDbVQsZUFBdkM7O0FBRUEsVUFBTUMsa0JBQWtCLEdBQUdwVCxHQUFHLENBQUNtSCxZQUFKLENBQWlCcUwsU0FBakIsQ0FBMkIsVUFBQXBMLFdBQVcsRUFBSTtBQUNuRThMLDhCQUFzQixDQUFDOUwsV0FBdkIsR0FBcUNBLFdBQXJDO0FBQ0QsT0FGMEIsQ0FBM0I7O0FBR0EsVUFBTWlNLG1CQUFtQixHQUFHclQsR0FBRyxDQUFDc1QsWUFBSixDQUFpQmQsU0FBakIsQ0FBMkIsVUFBQXZYLEtBQUssRUFBSTtBQUM5RCxZQUFNc1ksaUJBQWlCLEdBQUcsS0FBSSxDQUFDdlMsT0FBTCxDQUFhc0UsU0FBYixDQUF1QnJLLEtBQXZCLENBQTZCNFYsSUFBN0IsQ0FBa0MsVUFBQW5PLFFBQVE7QUFBQSxpQkFBSUEsUUFBUSxZQUFZMEQsaUVBQXhCO0FBQUEsU0FBMUMsQ0FBMUI7O0FBRUEsWUFBSW1OLGlCQUFKLEVBQXVCO0FBQ3JCTCxnQ0FBc0IsQ0FBQ25NLEdBQXZCLEdBQTZCOUwsS0FBN0I7O0FBRUEsZUFBSSxDQUFDK0YsT0FBTCxDQUFhc0UsU0FBYixDQUF1QmtPLE1BQXZCLENBQThCRCxpQkFBOUI7O0FBQ0EsZUFBSSxDQUFDdlMsT0FBTCxDQUFhc0UsU0FBYixDQUF1Qi9LLEdBQXZCLENBQTJCLElBQUk2TCxpRUFBSixDQUFzQjhNLHNCQUF0QixDQUEzQjs7QUFDQSxlQUFJLENBQUNsUyxPQUFMLENBQWFDLElBQWIsQ0FBa0IsK0JBQWxCLEVBQW1EaVMsc0JBQXNCLENBQUNuTSxHQUExRTtBQUNEO0FBQ0YsT0FWMkIsQ0FBNUI7O0FBV0EsVUFBTTBNLGNBQWMsR0FBR3pULEdBQUcsQ0FBQ3FILFFBQUosQ0FBYW1MLFNBQWIsQ0FBdUIsVUFBQWxMLE9BQU8sRUFBSTtBQUN2RCxZQUFNaU0saUJBQWlCLEdBQUcsS0FBSSxDQUFDdlMsT0FBTCxDQUFhc0UsU0FBYixDQUF1QnJLLEtBQXZCLENBQTZCNFYsSUFBN0IsQ0FBa0MsVUFBQW5PLFFBQVE7QUFBQSxpQkFBSUEsUUFBUSxZQUFZMEQsaUVBQXhCO0FBQUEsU0FBMUMsQ0FBMUI7O0FBRUEsWUFBSW1OLGlCQUFpQixJQUFJak0sT0FBekIsRUFBa0M7QUFDaEM0TCxnQ0FBc0IsQ0FBQzVMLE9BQXZCLEdBQWlDQSxPQUFqQzs7QUFFQSxlQUFJLENBQUN0RyxPQUFMLENBQWFzRSxTQUFiLENBQXVCa08sTUFBdkIsQ0FBOEJELGlCQUE5Qjs7QUFDQSxlQUFJLENBQUN2UyxPQUFMLENBQWFzRSxTQUFiLENBQXVCL0ssR0FBdkIsQ0FBMkIsSUFBSTZMLGlFQUFKLENBQXNCOE0sc0JBQXRCLENBQTNCOztBQUNBLGVBQUksQ0FBQ2xTLE9BQUwsQ0FBYUMsSUFBYixDQUFrQixtQ0FBbEIsRUFBdURpUyxzQkFBc0IsQ0FBQzVMLE9BQTlFO0FBQ0Q7QUFDRixPQVZzQixDQUF2QjtBQVdEOzs7Z0RBRXdDO0FBQ3ZDdEgsU0FBRyxDQUFDMFQsZUFBSixHQUFzQmpNLCtFQUFBLENBQWlDa00sdUVBQWpDLENBQXRCO0FBQ0EzVCxTQUFHLENBQUNvSSxxQkFBSixHQUE0QnBJLEdBQUcsQ0FBQzBULGVBQUosQ0FBb0I5TCxvQkFBaEQ7QUFFQTVILFNBQUcsQ0FBQ29JLHFCQUFKLENBQTBCWixTQUExQixHQUFzQ3hILEdBQUcsQ0FBQ21ULGVBQTFDOztBQUVBLFVBQU1DLGtCQUFrQixHQUFHcFQsR0FBRyxDQUFDbUgsWUFBSixDQUFpQnFMLFNBQWpCLENBQTJCLFVBQUFwTCxXQUFXLEVBQUk7QUFDbkVwSCxXQUFHLENBQUNvSSxxQkFBSixDQUEwQmhCLFdBQTFCLEdBQXdDQSxXQUF4QztBQUNELE9BRjBCLENBQTNCOztBQUdBLFVBQU1pTSxtQkFBbUIsR0FBR3JULEdBQUcsQ0FBQ3NULFlBQUosQ0FBaUJkLFNBQWpCLENBQTJCLFVBQUF2WCxLQUFLLEVBQUk7QUFDOUQrRSxXQUFHLENBQUNvSSxxQkFBSixDQUEwQnJCLEdBQTFCLEdBQWdDOUwsS0FBaEM7QUFDRCxPQUYyQixDQUE1Qjs7QUFHQSxVQUFNd1ksY0FBYyxHQUFHelQsR0FBRyxDQUFDcUgsUUFBSixDQUFhbUwsU0FBYixDQUF1QixVQUFBbEwsT0FBTyxFQUFJO0FBQ3ZEdEgsV0FBRyxDQUFDb0kscUJBQUosQ0FBMEJkLE9BQTFCLEdBQW9DQSxPQUFwQztBQUNELE9BRnNCLENBQXZCOztBQUdBLFVBQU1yTSxLQUFLLEdBQUcsS0FBSzhLLDZCQUFMLENBQW1DQyxjQUFuQyxDQUFrRCxzQkFBbEQsQ0FBZDs7QUFFQSxVQUFJL0ssS0FBSixFQUFXO0FBQ1R3TSx1RkFBQSxDQUFpQ2IsMEVBQWMsQ0FBQzNMLEtBQUQsQ0FBL0M7QUFDRDs7QUFFRCxVQUFNMlkscUJBQXFCLEdBQUc1VCxHQUFHLENBQUM2VCxlQUFKLENBQW9CckIsU0FBcEIsQ0FBOEIsVUFBQXhLLGNBQWMsRUFBSTtBQUM1RVAsdUZBQUEsQ0FBaUNPLGNBQWpDO0FBQ0QsT0FGNkIsQ0FBOUI7QUFHRDs7O2lGQUV5RTtBQUN4RSxXQUFLOEwsNEJBQUwsR0FBb0MsS0FBSy9OLDZCQUFMLENBQW1DZ08sZUFBbkMsQ0FBbUQsdUNBQW5ELENBQXBDOztBQUNBLFdBQUsvUyxPQUFMLENBQWFDLElBQWIsQ0FBa0IsZ0RBQWxCLEVBQW9FLEtBQUs2Uyw0QkFBekU7O0FBRUE7QUFDRDs7OzBGQUVrRjtBQUNqRixXQUFLRSxxQ0FBTCxHQUE2QyxLQUFLak8sNkJBQUwsQ0FBbUNnTyxlQUFuQyxDQUFtRCxnREFBbkQsQ0FBN0M7O0FBQ0EsV0FBSy9TLE9BQUwsQ0FBYUMsSUFBYixDQUFrQix5REFBbEIsRUFBNkUsS0FBSytTLHFDQUFsRjs7QUFFQTtBQUNEOzs7eUVBRWlFO0FBQ2hFaFUsU0FBRyxDQUFDaVUsWUFBSixDQUFpQnpCLFNBQWpCLENBQTJCLFVBQUF2WCxLQUFLLEVBQUk7QUFDbEMrRSxXQUFHLENBQUNzVCxZQUFKLENBQWlCclksS0FBakIsR0FBeUIrRSxHQUFHLENBQUNrVSxlQUFKLENBQW9CalosS0FBcEIsQ0FBekI7QUFDQStFLFdBQUcsQ0FBQ21ILFlBQUosQ0FBaUJsTSxLQUFqQixHQUF5QjZNLHdFQUFBLENBQWtDN00sS0FBbEMsQ0FBekI7QUFDRCxPQUhEOztBQUtBLFVBQU1rWixZQUFZLEdBQUcsS0FBS3BPLDZCQUFMLENBQW1DQyxjQUFuQyxDQUFrRCxzQkFBbEQsQ0FBckI7O0FBRUEsVUFBSW1PLFlBQUosRUFBa0I7QUFDaEIsWUFBTUMsV0FBVyxHQUFHQyxrRUFBQSxDQUFvQkYsWUFBcEIsQ0FBcEI7QUFFQW5VLFdBQUcsQ0FBQ3FILFFBQUosQ0FBYXBNLEtBQWIsR0FBcUJvWixrRUFBQSxDQUFvQkQsV0FBcEIsQ0FBckI7QUFDQVQsK0VBQUEsR0FBeUIsQ0FBQ1UsOERBQUEsQ0FBZ0JELFdBQWhCLEtBQWdDcFUsR0FBRyxDQUFDaVUsWUFBSixDQUFpQmhaLEtBQWxELEVBQXlENkcsUUFBekQsRUFBekI7O0FBRUEsYUFBS2QsT0FBTCxDQUFhQyxJQUFiLENBQWtCLHdEQUFsQixFQUE0RWpCLEdBQUcsQ0FBQ2lVLFlBQUosQ0FBaUJoWixLQUE3Rjs7QUFFQTtBQUNEOztBQUVELFVBQU1xWixRQUFRLEdBQUcsS0FBS3ZPLDZCQUFMLENBQW1DQyxjQUFuQyxDQUFrRCxZQUFsRCxDQUFqQjs7QUFFQSxVQUFJc08sUUFBSixFQUFjO0FBQ1pYLCtFQUFBLEdBQXlCVyxRQUF6Qjs7QUFDQSxhQUFLdFQsT0FBTCxDQUFhQyxJQUFiLENBQWtCLHlFQUFsQixFQUE2RmpCLEdBQUcsQ0FBQ2lVLFlBQUosQ0FBaUJoWixLQUE5Rzs7QUFFQTtBQUNEOztBQUVELFVBQU1zWixZQUFZLEdBQUcsS0FBS3hPLDZCQUFMLENBQW1DQyxjQUFuQyxDQUFrRCxpQkFBbEQsQ0FBckI7O0FBRUEsVUFBSXVPLFlBQUosRUFBa0I7QUFDaEJaLCtFQUFBLGFBQTRCWSxZQUE1Qjs7QUFDQSxhQUFLdlQsT0FBTCxDQUFhQyxJQUFiLENBQWtCLDhFQUFsQixFQUFrR2pCLEdBQUcsQ0FBQ2lVLFlBQUosQ0FBaUJoWixLQUFuSDs7QUFFQTtBQUNEO0FBQ0Y7Ozt5QkFFV21XLE8sRUFBOEI7QUFDeEMsVUFBSSxDQUFDLEtBQUtvRCxZQUFMLENBQWtCdlosS0FBdkIsRUFBOEI7QUFDNUIsYUFBS3daLDJCQUFMLEdBQW1DLElBQUl2YixxRUFBSixFQUFuQztBQUNEOztBQUVELFVBQUlrWSxPQUFKLEVBQWE7QUFDWCxZQUFJQSxPQUFPLENBQUM2QyxZQUFaLEVBQTBCO0FBQ3hCTixpRkFBQSxHQUF5QnZDLE9BQU8sQ0FBQzZDLFlBQWpDO0FBQ0Q7O0FBRUQsWUFBSTdDLE9BQU8sQ0FBQ3pFLHFCQUFaLEVBQW1DO0FBQ2pDM00sYUFBRyxDQUFDMFUsc0JBQUosQ0FBMkJ6WixLQUEzQixHQUFtQ21XLE9BQU8sQ0FBQ3pFLHFCQUEzQztBQUNEOztBQUVELFlBQUl5RSxPQUFPLENBQUNwSixjQUFSLElBQTBCcEIsMEVBQWMsQ0FBQ3dLLE9BQU8sQ0FBQ3BKLGNBQVQsQ0FBNUMsRUFBc0U7QUFDcEVoSSxhQUFHLENBQUM2VCxlQUFKLENBQW9CNVksS0FBcEIsR0FBNEJrRCwrR0FBQSxDQUFnRWlULE9BQU8sQ0FBQ3BKLGNBQXhFLENBQTVCO0FBQ0Q7O0FBRUQsWUFBSW9KLE9BQU8sQ0FBQzVLLFlBQVIsSUFBd0JsRCx3REFBWSxDQUFDOE4sT0FBTyxDQUFDNUssWUFBVCxDQUF4QyxFQUFnRTtBQUM5RCxlQUFLeEYsT0FBTCxDQUFhMEMsU0FBYixDQUF1QnVDLFlBQXZCLENBQW9DNUgsdUdBQUEsQ0FBMEQrUyxPQUFPLENBQUM1SyxZQUFsRSxDQUFwQztBQUNEOztBQUVELFlBQUk0SyxPQUFPLENBQUN1RCxtQkFBUixJQUNGclIsd0RBQVksQ0FBQzhOLE9BQU8sQ0FBQ3VELG1CQUFULENBRGQsRUFDNkM7QUFDM0MsY0FBTUMsZUFBZSxHQUFHLEtBQUs1VCxPQUFMLENBQWFzRSxTQUFiLENBQXVCckssS0FBdkIsQ0FBNkI0VixJQUE3QixDQUFrQyxVQUFBbk8sUUFBUTtBQUFBLG1CQUFJQSxRQUFRLFlBQVlJLDZEQUF4QjtBQUFBLFdBQTFDLENBQXhCOztBQUVBLGNBQUk4UixlQUFKLEVBQXFCO0FBQ25CLGlCQUFLNVQsT0FBTCxDQUFhc0UsU0FBYixDQUF1QmtPLE1BQXZCLENBQThCb0IsZUFBOUI7QUFDRDs7QUFFRCxjQUFJeEQsT0FBTyxDQUFDdUQsbUJBQVIsS0FBZ0MsS0FBcEMsRUFBMkM7QUFDekMsaUJBQUszVCxPQUFMLENBQWFzRSxTQUFiLENBQXVCL0ssR0FBdkIsQ0FBMkIsSUFBSXVJLDZEQUFKLENBQW9CekUsdUdBQUEsQ0FBMEQrUyxPQUFPLENBQUN1RCxtQkFBbEUsQ0FBcEIsQ0FBM0I7QUFDRDtBQUNGOztBQUVELFlBQUksT0FBT3ZELE9BQU8sQ0FBQ3lELDRCQUFmLEtBQWdELFNBQXBELEVBQStEO0FBQzdELGVBQUtDLDZCQUFMLEdBQXFDMUQsT0FBTyxDQUFDeUQsNEJBQTdDO0FBQ0Q7O0FBRUQsWUFBSSxPQUFPekQsT0FBTyxDQUFDMkQsbUNBQWYsS0FBdUQsU0FBM0QsRUFBc0U7QUFDcEUsZUFBS0Msb0NBQUwsR0FBNEM1RCxPQUFPLENBQUMyRCxtQ0FBcEQ7QUFDRDs7QUFFRCxZQUFJM0QsT0FBTyxDQUFDNkQsZUFBWixFQUE2QjtBQUMzQixlQUFLQyxnQkFBTCxHQUF3QjlELE9BQU8sQ0FBQzZELGVBQWhDO0FBQ0Q7O0FBRUQsWUFBSTdELE9BQU8sQ0FBQytELGlCQUFaLEVBQStCO0FBQzdCLGVBQUtDLGtCQUFMLEdBQTBCaEUsT0FBTyxDQUFDK0QsaUJBQWxDO0FBQ0Q7O0FBRUQsWUFBSS9ELE9BQU8sQ0FBQ2lFLFdBQVosRUFBeUI7QUFDdkIsZUFBS0MsWUFBTCxHQUFvQmxFLE9BQU8sQ0FBQ2lFLFdBQTVCO0FBQ0Q7QUFDRjs7QUFFRHJWLFNBQUcsQ0FBQ3dVLFlBQUosQ0FBaUJ2WixLQUFqQixHQUF5QixJQUF6QjtBQUNEOzs7OEJBRXNCO0FBQ3JCK0UsU0FBRyxDQUFDd1UsWUFBSixDQUFpQnZaLEtBQWpCLEdBQXlCLEtBQXpCOztBQUNBLFdBQUt3WiwyQkFBTCxDQUFpQzVhLE9BQWpDOztBQUNBLFdBQUs0YSwyQkFBTCxHQUFtQyxJQUFuQztBQUNEOzs7b0NBRXNCMU4sRyxFQUFxQjtBQUMxQyxhQUFPYyxtRUFBQSxDQUE2QmQsR0FBN0IsQ0FBUDtBQUNEOzs7d0JBN1FpQztBQUNoQyxhQUFPakgsWUFBUDtBQUNEOzs7d0JBRWtEO0FBQ2pELGFBQU8sS0FBS3lWLG9CQUFaO0FBQ0Q7Ozt3QkFFcUM7QUFDcEMsYUFBTyxLQUFLbE8sUUFBWjtBQUNEOzs7d0JBRW9DO0FBQ25DLGFBQU9ySCxHQUFHLENBQUN3VixnQkFBWDtBQUNEOzs7d0JBRWtDO0FBQ2pDLGFBQU94VixHQUFHLENBQUN5VixnQkFBWDtBQUNEOzs7d0JBRWtEO0FBQ2pELGFBQU96VixHQUFHLENBQUMwVixvQkFBWDtBQUNEOzs7d0JBRWtEO0FBQ2pELGFBQU8xVixHQUFHLENBQUMyVixxQkFBWDtBQUNEOzs7d0JBRTJFO0FBQzFFLGFBQU8zVixHQUFHLENBQUM0Viw4QkFBWDtBQUNEOzs7d0JBRTZDO0FBQzVDLGFBQU81VixHQUFHLENBQUM4VCw0QkFBWDtBQUNEOzs7d0JBRTBEO0FBQ3pELGFBQU85VCxHQUFHLENBQUNnVSxxQ0FBWDtBQUNEOzs7d0JBRWtEO0FBQ2pELGFBQU9oVSxHQUFHLENBQUM4VSw2QkFBWDtBQUNEOzs7d0JBRXlEO0FBQ3hELGFBQU85VSxHQUFHLENBQUNnVixvQ0FBWDtBQUNEOzs7d0JBRXFEO0FBQ3BELGFBQU8sS0FBS0UsZ0JBQVo7QUFDRDs7O3dCQUVtRDtBQUNsRCxhQUFPLEtBQUtFLGtCQUFaO0FBQ0Q7Ozt3QkFFaUQ7QUFDaEQsYUFBTyxLQUFLRSxZQUFaO0FBQ0Q7Ozt3QkFFMkM7QUFDMUMsYUFBT3RWLEdBQUcsQ0FBQzBULGVBQVg7QUFDRDs7O3dCQUVtRTtBQUNsRSxhQUFPLEtBQUtlLDJCQUFaO0FBQ0Q7Ozt3QkFFMEM7QUFDekMsYUFBTyxLQUFLb0IsYUFBWjtBQUNEOzs7d0JBRW1FO0FBQ2xFLGFBQU8sS0FBS0MsK0NBQVo7QUFDRCxLO3NCQUV5REMsYSxFQUF1QjtBQUMvRSxXQUFLRCwrQ0FBTCxHQUF1REMsYUFBdkQ7QUFDRDs7O3dCQUVpRDtBQUNoRCxhQUFPMVgsdUdBQUEsQ0FBMEQsS0FBSzJDLE9BQUwsQ0FBYTBDLFNBQWIsQ0FBdUJ6SSxLQUFqRixDQUFQO0FBQ0Q7Ozt3QkFFK0M7QUFDOUMsYUFBT2tELCtHQUFBLENBQWdFNkIsR0FBRyxDQUFDNlQsZUFBSixDQUFvQjVZLEtBQXBGLENBQVA7QUFDRDs7O3dCQUU2QztBQUM1QyxhQUFPQywwREFBUDtBQUNEOzs7QUFxTEQsaUJBQXNCO0FBQUE7O0FBQ3BCLFVBQU0sSUFBSW9ILEtBQUosQ0FBVSxvREFBVixDQUFOO0FBQ0Q7Ozs7O21IQTVTa0J0QyxHLGtDQUMyQixJOzttSEFEM0JBLEcsMkNBRW9DLEk7O21IQUZwQ0EsRyxtQ0FHNEIsSTs7bUhBSDVCQSxHLDBDQUltQyxJOzttSEFKbkNBLEcsc0JBS2UsSTs7bUhBTGZBLEcsd0JBTWlCLEk7O21IQU5qQkEsRyxrQkFPVyxJOzttSEFQWEEsRyxtQ0FRMkQsSUFBSTdDLHVFQUFKLEU7O21IQVIzRDZDLEc7O21IQUFBQSxHLGtCQVU0QixJQUFJekcsZ0RBQUosQ0FBb0IsRUFBcEIsQzs7bUhBVjVCeUcsRyxtQkFXNkIsSUFBSXpHLGdEQUFKLENBQW9CLDJDQUFwQixDOzttSEFYN0J5RyxHLHFEQVk4QyxDOzttSEFaOUNBLEcscUJBYXVDLElBQUl6RyxnREFBSixDQUE0QjZFLHFGQUE1QixDOzttSEFidkM0QixHOzttSEFBQUEsRzs7bUhBQUFBLEcsMEJBZ0I4QyxJQUFJekcsZ0RBQUosQ0FBWSxDQUFDaUcsZ0VBQWIsQzs7bUhBaEI5Q1EsRyxjQWlCaUMsSUFBSXpHLGdEQUFKLENBQW9CLEVBQXBCLEM7O21IQWpCakN5RyxHLHNCQWtCZ0MwQix5REFBQSxDQUFlLEVBQWYsQzs7bUhBbEJoQzFCLEcsc0JBbUI4QixJQUFJNUcsSUFBSixFOzttSEFuQjlCNEcsRyxhQW9Cd0JELG9FQUFBLENBQXdCLEtBQXhCLEM7O21IQXBCeEJDLEcsa0JBcUJzQyxJQUFJekcsZ0RBQUosQ0FBcUIsS0FBckIsQzs7bUhBckJ0Q3lHLEcsNEJBc0IrRCxJQUFJekcsZ0RBQUosQ0FBb0MsSUFBSThZLHNFQUFKLEVBQXBDLEM7O21IQXRCL0RyUyxHLDBCQXVCc0QsSUFBSXZHLHdEQUFKLENBQTZCdUcsR0FBRyxDQUFDd1UsWUFBakMsQzs7bUhBdkJ0RHhVLEcsMkJBd0JzRCxJQUFJdkcsd0RBQUosQ0FBNEJrYSxpRUFBNUIsQzs7bUhBeEJ0RDNULEcsb0NBeUIrRSxJQUFJdkcsd0RBQUosQ0FBNEN1RyxHQUFHLENBQUMwVSxzQkFBaEQsQzs7O0FBc1JwRzdaLE1BQU0sQ0FBQ1AsZ0JBQVAsQ0FBd0IsUUFBeEIsRUFBa0MsWUFBTTtBQUN0QzBGLEtBQUcsQ0FBQ25HLE9BQUo7QUFDRCxDQUZEO0FBSUFtRyxHQUFHLENBQUNnVyxrREFBSjtBQUNBaFcsR0FBRyxDQUFDaVcseUJBQUo7QUFDQWpXLEdBQUcsQ0FBQ2tXLDJCQUFKO0FBQ0FsVyxHQUFHLENBQUNtVywwREFBSjtBQUNBblcsR0FBRyxDQUFDb1csbUVBQUo7QUFDQXBXLEdBQUcsQ0FBQ3FXLElBQUosRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcldBO0FBQ0E7QUFDQTtJQUVxQnhPLFk7Ozs7Ozs7b0NBQ0lkLEcsRUFBcUI7QUFDMUMsVUFBSTtBQUNGLFlBQU1pTSxPQUFPLEdBQUcsSUFBSS9MLEdBQUosQ0FBUUYsR0FBUixDQUFoQjtBQUNBLFlBQU11UCxRQUFRLEdBQUd0RCxPQUFPLENBQUM3SyxRQUFSLENBQWlCeE0sS0FBakIsQ0FBdUIsR0FBdkIsQ0FBakI7O0FBRUEsZ0JBQVFxWCxPQUFPLENBQUN1RCxRQUFoQjtBQUNFLGVBQUssS0FBTDtBQUNFdkQsbUJBQU8sQ0FBQ3VELFFBQVIsR0FBbUIsT0FBbkI7QUFFQTs7QUFDRixlQUFLLE1BQUw7QUFDRXZELG1CQUFPLENBQUN1RCxRQUFSLEdBQW1CLFFBQW5CO0FBRUE7O0FBRUY7QUFDRTtBQVhKOztBQWNBLFlBQUlELFFBQVEsQ0FBQzdVLE1BQVQsS0FBb0IsQ0FBcEIsSUFDQzZVLFFBQVEsQ0FBQzdVLE1BQVQsS0FBb0IsQ0FBcEIsSUFBeUI2VSxRQUFRLENBQUNBLFFBQVEsQ0FBQzdVLE1BQVQsR0FBa0IsQ0FBbkIsQ0FBUixDQUE4QkEsTUFBOUIsSUFBd0MsQ0FBakUsSUFBc0U2VSxRQUFRLENBQUNBLFFBQVEsQ0FBQzdVLE1BQVQsR0FBa0IsQ0FBbkIsQ0FBUixDQUE4QkEsTUFBOUIsSUFBd0MsQ0FEbkgsRUFFRTtBQUNBNlUsa0JBQVEsQ0FBQ0UsT0FBVCxDQUFpQixXQUFqQjtBQUNELFNBSkQsTUFJTyxJQUFJRixRQUFRLENBQUMsQ0FBRCxDQUFSLENBQVlHLFVBQVosQ0FBdUIsTUFBdkIsS0FBa0NILFFBQVEsQ0FBQyxDQUFELENBQVIsQ0FBWUksUUFBWixDQUFxQixNQUFyQixDQUFsQyxJQUFrRUosUUFBUSxDQUFDLENBQUQsQ0FBUixDQUFZcFosUUFBWixDQUFxQixPQUFyQixDQUFsRSxJQUFtR29aLFFBQVEsQ0FBQyxDQUFELENBQVIsS0FBZ0IsS0FBdkgsRUFBOEg7QUFDbklBLGtCQUFRLENBQUMsQ0FBRCxDQUFSLEdBQWMsZUFBZDtBQUNELFNBRk0sTUFFQSxJQUFJQSxRQUFRLENBQUMsQ0FBRCxDQUFSLENBQVlHLFVBQVosQ0FBdUIsT0FBdkIsS0FBbUNILFFBQVEsQ0FBQyxDQUFELENBQVIsQ0FBWUksUUFBWixDQUFxQixRQUFyQixDQUF2QyxFQUF1RSxDQUM1RTtBQUNELFNBRk0sTUFFQTtBQUNMSixrQkFBUSxDQUFDLENBQUQsQ0FBUixHQUFjLFdBQWQ7QUFDRDs7QUFFRHRELGVBQU8sQ0FBQzdLLFFBQVIsR0FBbUJtTyxRQUFRLENBQUNLLElBQVQsQ0FBYyxHQUFkLENBQW5CO0FBRUEseUJBQVUzRCxPQUFPLENBQUNDLE1BQWxCO0FBQ0QsT0FqQ0QsQ0FpQ0UsT0FBT3RULENBQVAsRUFBVTtBQUNWLGVBQU9vSCxHQUFQO0FBQ0Q7QUFDRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUNIO0FBQ0E7QUFDQTtBQUtPLElBQUs2UCxZQUFaOztXQUFZQSxZO0FBQUFBLGMsQ0FBQUEsWTtBQUFBQSxjLENBQUFBLFk7R0FBQUEsWSxLQUFBQSxZOztBQUtMLElBQUtDLFdBQVo7O1dBQVlBLFc7QUFBQUEsYSxDQUFBQSxXO0FBQUFBLGEsQ0FBQUEsVztBQUFBQSxhLENBQUFBLFc7R0FBQUEsVyxLQUFBQSxXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWlo7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBR0EsSUFBTUMsZ0JBQWdCLEdBQUcsQ0FBekI7QUFDQSxJQUFNQyw4QkFBOEIsR0FBRyxvQkFBdkM7QUFDQSxJQUFNQyw2QkFBNkIsR0FBRyxJQUF0QztBQUNBLElBQU1DLHlDQUF5QyxHQUFHLElBQWxEO0FBQ0EsSUFBTUMsZ0NBQWdDLEdBQUcsTUFBekM7QUFDQSxJQUFNQyxvQ0FBb0MsR0FBRyxLQUE3Qzs7SUFFcUJDLE87QUE4Qm5CLG1CQUFZQyxZQUFaLEVBQTRDQyxLQUE1QyxFQUFpRztBQUFBOztBQUFBLFFBQXRDQyxTQUFzQyx1RUFBbEJULGdCQUFrQjs7QUFBQTs7QUFBQSx3SUE3QjdEL1csb0VBQUEsQ0FBd0IsU0FBeEIsQ0E2QjZEOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUMvRixTQUFLeVgsUUFBTCxHQUFnQixJQUFJQyxxREFBSixDQUFtQkgsS0FBbkIsRUFBMEJDLFNBQTFCLENBQWhCO0FBQ0EsU0FBS0csaUJBQUwsR0FBeUJ0ZSxJQUFJLENBQUNDLEdBQUwsRUFBekI7QUFDQSxTQUFLc2UscUJBQUwsR0FBNkIsSUFBSWxlLHdEQUFKLENBQXNDLEtBQUsrZCxRQUFMLENBQWNILFlBQXBELENBQTdCO0FBQ0EsU0FBS08sY0FBTCxHQUFzQixJQUFJbmUsd0RBQUosQ0FBNEIsS0FBSytkLFFBQUwsQ0FBY0YsS0FBMUMsQ0FBdEI7QUFDQSxTQUFLTyx1QkFBTCxHQUErQixJQUFJcGUsd0RBQUosQ0FBcUMsS0FBSytkLFFBQUwsQ0FBYzNLLGNBQW5ELENBQS9CO0FBQ0EsU0FBS2lMLGNBQUwsR0FBc0IsSUFBSXJlLHdEQUFKLENBQWtDLEtBQUsrZCxRQUFMLENBQWNPLEtBQWhELENBQXRCO0FBQ0EsU0FBS0Msa0JBQUwsR0FBMEIsSUFBSXZlLHdEQUFKLENBQTZCLEtBQUsrZCxRQUFMLENBQWNTLFNBQTNDLENBQTFCO0FBQ0EsU0FBS0MsbUJBQUwsR0FBMkIsSUFBSXplLHdEQUFKLENBQTZCLEtBQUsrZCxRQUFMLENBQWNXLFVBQTNDLENBQTNCO0FBQ0EsU0FBS0Msc0JBQUwsR0FBOEIsSUFBSTNlLHdEQUFKLENBQTZCLEtBQUsrZCxRQUFMLENBQWNhLGFBQTNDLENBQTlCO0FBQ0EsU0FBS0MsbUJBQUwsR0FBMkIsSUFBSTdlLHdEQUFKLENBQTZCLEtBQUsrZCxRQUFMLENBQWNlLFVBQTNDLENBQTNCO0FBQ0EsU0FBS0MsZUFBTCxHQUF1QixJQUFJL2Usd0RBQUosQ0FBNkIsS0FBSytkLFFBQUwsQ0FBY2lCLE1BQTNDLENBQXZCO0FBQ0EsU0FBS0MsZ0JBQUwsR0FBd0IsSUFBSWpmLHdEQUFKLENBQTZCLEtBQUsrZCxRQUFMLENBQWNtQixPQUEzQyxDQUF4QjtBQUNBLFNBQUtDLGdCQUFMLEdBQXdCLElBQUluZix3REFBSixDQUE2QixLQUFLK2QsUUFBTCxDQUFjcUIsT0FBM0MsQ0FBeEI7QUFDQSxTQUFLQyxnQkFBTCxHQUF3QixJQUFJcmYsd0RBQUosQ0FBNkIsS0FBSytkLFFBQUwsQ0FBY3VCLE9BQTNDLENBQXhCO0FBQ0EsU0FBS0MsZ0JBQUwsR0FBd0IsSUFBSXZmLHdEQUFKLENBQTZCLEtBQUsrZCxRQUFMLENBQWN5QixPQUEzQyxDQUF4QjtBQUNBLFNBQUtDLGtCQUFMLEdBQTBCLElBQUl6Zix3REFBSixDQUE0QixLQUFLK2QsUUFBTCxDQUFjRCxTQUExQyxDQUExQjtBQUNBLFNBQUs0QixZQUFMLEdBQW9CLElBQUkxZix3REFBSixDQUE0QixLQUFLK2QsUUFBTCxDQUFjNEIsR0FBMUMsQ0FBcEI7QUFDQSxTQUFLQyxxQkFBTCxHQUE2QixJQUFJNWYsd0RBQUosQ0FBNEIsS0FBSytkLFFBQUwsQ0FBYzhCLFlBQTFDLENBQTdCO0FBQ0EsU0FBS0MsbUJBQUwsR0FBMkIsSUFBSTlmLHdEQUFKLENBQStCLEtBQUsrZCxRQUFMLENBQWNnQyxVQUE3QyxDQUEzQjtBQUNBLFNBQUtDLHFCQUFMLEdBQTZCLElBQUloZ0Isd0RBQUosQ0FBNEIsS0FBSytkLFFBQUwsQ0FBY2tDLFlBQTFDLENBQTdCO0FBQ0EsU0FBS0MsaUJBQUwsR0FBeUIsSUFBSWxnQix3REFBSixDQUE4QixLQUFLK2QsUUFBTCxDQUFjb0MsUUFBNUMsQ0FBekI7QUFDQSxTQUFLQyxlQUFMLEdBQXVCLElBQUlwZ0Isd0RBQUosQ0FBNkIsS0FBSytkLFFBQUwsQ0FBY3NDLE1BQTNDLENBQXZCO0FBQ0EsU0FBS0Msc0JBQUwsR0FBOEIsSUFBSXRnQix3REFBSixDQUEwQyxLQUFLK2QsUUFBTCxDQUFjd0MsYUFBeEQsQ0FBOUI7QUFDQSxTQUFLQyxvQkFBTCxHQUE0QixJQUFJeGdCLHdEQUFKLENBQWlDLEtBQUsrZCxRQUFMLENBQWM5SixXQUEvQyxDQUE1QjtBQUVBLFFBQU0wRyxXQUFXLEdBQUdDLG1FQUFBLENBQW9CLEtBQUttRCxRQUFMLENBQWNGLEtBQWQsQ0FBb0JyYyxLQUF4QyxDQUFwQjtBQUNBLFFBQU1nWixZQUFZLEdBQUcsQ0FBQ0ksK0RBQUEsQ0FBZ0JELFdBQWhCLEtBQWdDcFUsNERBQWpDLEVBQXlEOEIsUUFBekQsRUFBckI7QUFFQTlCLDJEQUFBLEdBQW9CcVUsbUVBQUEsQ0FBb0JELFdBQXBCLEtBQW9DcFUsdURBQXhEO0FBQ0EyVCwyRUFBQSxHQUF5Qk0sWUFBekI7QUFDQSxTQUFLUCxlQUFMLEdBQXVCak0sK0VBQUEsQ0FBaUN3TSxZQUFqQyxDQUF2QjtBQUNBLFNBQUt1RCxRQUFMLENBQWMwQyxnQkFBZCxHQUFpQyxJQUFJQyw2REFBSixDQUFxQm5hLHNEQUFyQixFQUF1QyxLQUFLMFQsZUFBNUMsQ0FBakM7O0FBQ0EsU0FBSzhELFFBQUwsQ0FBYzRDLGtCQUFkLENBQWlDN2YsR0FBakMsQ0FBcUMsS0FBS2lkLFFBQUwsQ0FBYzBDLGdCQUFuRDs7QUFDQSxTQUFLRyw0QkFBTCxHQUFvQyxLQUFLQywwQkFBTCxDQUFnQzFVLElBQWhDLENBQXFDLElBQXJDLENBQXBDO0FBQ0EsU0FBS3lSLFlBQUwsR0FBb0JBLFlBQXBCOztBQUVBLFNBQUtHLFFBQUwsQ0FBYzRDLGtCQUFkLENBQWlDN2YsR0FBakMsQ0FDRSxLQUFLaWQsUUFBTCxDQUFjSCxZQUFkLENBQTJCN0UsU0FBM0IsQ0FBcUMsVUFBQTZFLFlBQVksRUFBSTtBQUNuRCxXQUFJLENBQUNHLFFBQUwsQ0FBYytDLG1CQUFkLENBQWtDMWdCLE9BQWxDOztBQUVBLFVBQUksQ0FBQ3dkLFlBQUwsRUFBbUI7QUFDakI7QUFDRDs7QUFFRCxXQUFJLENBQUNHLFFBQUwsQ0FBYytDLG1CQUFkLENBQWtDaGdCLEdBQWxDLENBQXNDLEtBQUksQ0FBQ2lkLFFBQUwsQ0FBY3NDLE1BQWQsQ0FBcUJ0SCxTQUFyQixDQUErQixVQUFBc0gsTUFBTSxFQUFJO0FBQzdFLFlBQUksS0FBSSxDQUFDdEMsUUFBTCxDQUFjZ0QsY0FBbEIsRUFBa0M7QUFDaEMsZUFBSSxDQUFDaEQsUUFBTCxDQUFjZ0QsY0FBZCxDQUE2QjNnQixPQUE3QjtBQUNEOztBQUVELFlBQUksQ0FBQ2lnQixNQUFMLEVBQWE7QUFDWDtBQUNEOztBQUVELFlBQUksQ0FBQyxLQUFJLENBQUN6QyxZQUFWLEVBQXdCO0FBQ3RCO0FBQ0Q7O0FBRUQsWUFBSSxLQUFJLENBQUNBLFlBQUwsQ0FBa0JvRCxPQUF0QixFQUErQjtBQUM3QixlQUFJLENBQUNwRCxZQUFMLENBQWtCb0QsT0FBbEIsQ0FBMEJqVCxTQUExQixHQUFzQ3hILHlEQUF0QztBQUNBLGVBQUksQ0FBQ3FYLFlBQUwsQ0FBa0JvRCxPQUFsQixDQUEwQnRhLFFBQTFCLEdBQXFDLEtBQUksQ0FBQ0EsUUFBMUM7QUFDRDs7QUFFRCxhQUFJLENBQUNxWCxRQUFMLENBQWNnRCxjQUFkLEdBQStCLElBQUlFLDJEQUFKLENBQW1CLEtBQUksQ0FBQ3ZhLFFBQXhCLEVBQWtDSCxzREFBbEMsRUFBb0QsS0FBSSxDQUFDMFgsaUJBQXpELEVBQTRFLEtBQUksQ0FBQ2hFLGVBQWpGLENBQS9COztBQUNBLGFBQUksQ0FBQzhELFFBQUwsQ0FBY2dELGNBQWQsQ0FBNkJHLCtCQUE3QixDQUE2RCxLQUFJLENBQUN0RCxZQUFsRTs7QUFDQSxhQUFJLENBQUNHLFFBQUwsQ0FBY2dELGNBQWQsQ0FBNkJJLDJCQUE3QixDQUF5RCxLQUFJLENBQUN2RCxZQUE5RDs7QUFFQSxZQUFJLEtBQUksQ0FBQ0csUUFBTCxDQUFjTyxLQUFkLENBQW9COWMsS0FBcEIsS0FBOEI0ZiwwREFBbEMsRUFBd0Q7QUFDdEQsY0FBTTlSLE9BQU8sR0FBRyxLQUFJLENBQUMrUixnQkFBTCxFQUFoQjtBQUNEO0FBQ0YsT0F6QnFDLENBQXRDOztBQTJCQSxXQUFJLENBQUN0RCxRQUFMLENBQWM0QyxrQkFBZCxDQUFpQzdmLEdBQWpDLENBQXFDLEtBQUksQ0FBQ2lkLFFBQUwsQ0FBYytDLG1CQUFuRDtBQUNELEtBbkNELENBREY7O0FBcUNBLFNBQUsvQyxRQUFMLENBQWM0QyxrQkFBZCxDQUFpQzdmLEdBQWpDLENBQ0UsS0FBS2lkLFFBQUwsQ0FBY08sS0FBZCxDQUFvQnZGLFNBQXBCLENBQThCLFVBQUF1RixLQUFLLEVBQUk7QUFDckMsVUFBSSxLQUFJLENBQUNQLFFBQUwsQ0FBY3VELHdCQUFsQixFQUE0QztBQUMxQ2xNLG9CQUFZLENBQUMsS0FBSSxDQUFDMkksUUFBTCxDQUFjdUQsd0JBQWYsQ0FBWjtBQUNEOztBQUVELFVBQUksQ0FBQyxLQUFJLENBQUN2RCxRQUFMLENBQWNrQyxZQUFkLENBQTJCemUsS0FBaEMsRUFBdUM7QUFDckM7QUFDRDs7QUFFRCxVQUFJOGMsS0FBSyxLQUFLOEMsMERBQWQsRUFBb0M7QUFDbEM7QUFDRDs7QUFFRCxXQUFJLENBQUNyRCxRQUFMLENBQWN1RCx3QkFBZCxHQUF5Q2xnQixNQUFNLENBQUNzUixVQUFQLENBQWtCLFlBQU07QUFDL0QsYUFBSSxDQUFDcUwsUUFBTCxDQUFja0MsWUFBZCxDQUEyQnplLEtBQTNCLEdBQW1DLENBQW5DO0FBQ0QsT0FGd0MsRUFFdENnYyx5Q0FGc0MsQ0FBekM7QUFHRCxLQWhCRCxDQURGOztBQWtCQSxTQUFLTyxRQUFMLENBQWM0QyxrQkFBZCxDQUFpQzdmLEdBQWpDLENBQ0UsS0FBS2lkLFFBQUwsQ0FBY2dDLFVBQWQsQ0FBeUJoSCxTQUF6QixDQUFtQyxVQUFBZ0gsVUFBVSxFQUFJO0FBQy9DLFVBQUksS0FBSSxDQUFDaEMsUUFBTCxDQUFjZ0QsY0FBbEIsRUFBa0M7QUFDaEMsYUFBSSxDQUFDaEQsUUFBTCxDQUFjZ0QsY0FBZCxDQUE2QlEsd0JBQTdCLENBQXNEeEIsVUFBVSxDQUFDMVgsUUFBWCxFQUF0RDtBQUNEO0FBQ0YsS0FKRCxDQURGOztBQU1BLFNBQUswVixRQUFMLENBQWM0QyxrQkFBZCxDQUFpQzdmLEdBQWpDLENBQ0UsS0FBS2lkLFFBQUwsQ0FBYzhCLFlBQWQsQ0FBMkI5RyxTQUEzQixDQUFxQyxVQUFBOEcsWUFBWSxFQUFJO0FBQ25ELFVBQUlBLFlBQVksSUFBSSxLQUFJLENBQUM5QixRQUFMLENBQWNvQyxRQUFkLENBQXVCM2UsS0FBdkMsSUFBZ0QsS0FBSSxDQUFDdWMsUUFBTCxDQUFjc0MsTUFBZCxDQUFxQjdlLEtBQXpFLEVBQWdGO0FBQzlFLFlBQU1nZ0IscUJBQXFCLEdBQUc3aEIsSUFBSSxDQUFDQyxHQUFMLEtBQWEsS0FBSSxDQUFDbWUsUUFBTCxDQUFjMEQscUJBQWQsQ0FBb0NDLE9BQXBDLEVBQTNDOztBQUNBLFlBQU1wUyxPQUFPLEdBQUcsS0FBSSxDQUFDeU8sUUFBTCxDQUFjb0MsUUFBZCxDQUF1QjNlLEtBQXZCLENBQTZCbWdCLFlBQTdCLENBQ2QsS0FBSSxDQUFDNUQsUUFBTCxDQUFjc0MsTUFBZCxDQUFxQjdlLEtBRFAsRUFFZGdnQixxQkFGYyxFQUdkM0IsWUFIYyxFQUlkMUMsK0VBSmMsRUFLZEMsZ0ZBTGMsRUFPYi9NLEtBUGEsQ0FPUCxVQUFBbkssQ0FBQyxFQUFJO0FBQ1YsZUFBSSxDQUFDcUIsT0FBTCxDQUFheUMsS0FBYixDQUFtQixtQ0FBbkIsRUFBd0Q5RCxDQUF4RDtBQUNELFNBVGEsQ0FBaEI7QUFVRDtBQUNGLEtBZEQsQ0FERjs7QUFrQkEsU0FBSzBiLEtBQUw7QUFDRDs7OztpREFzQzBDO0FBQ3pDLFVBQU1oRSxZQUFZLEdBQUcsS0FBS0csUUFBTCxDQUFjSCxZQUFkLENBQTJCcGMsS0FBaEQ7O0FBRUEsVUFBSW9jLFlBQUosRUFBa0I7QUFDaEIsWUFBSSxLQUFLbUMsVUFBTCxDQUFnQnZlLEtBQWhCLENBQXNCcWdCLEtBQXRCLEtBQWdDakUsWUFBWSxDQUFDa0UsVUFBN0MsSUFBMkQsS0FBSy9CLFVBQUwsQ0FBZ0J2ZSxLQUFoQixDQUFzQnVnQixNQUF0QixLQUFpQ25FLFlBQVksQ0FBQ29FLFdBQTdHLEVBQTBIO0FBQ3hILGVBQUtqRSxRQUFMLENBQWNnQyxVQUFkLENBQXlCdmUsS0FBekIsR0FBaUMsSUFBSXlnQixxREFBSixDQUFjckUsWUFBWSxDQUFDa0UsVUFBM0IsRUFBdUNsRSxZQUFZLENBQUNvRSxXQUFwRCxDQUFqQztBQUNEO0FBQ0YsT0FKRCxNQUlPO0FBQ0wsYUFBS2pFLFFBQUwsQ0FBY2dDLFVBQWQsQ0FBeUJ2ZSxLQUF6QixHQUFpQ3lnQiwyREFBakM7QUFDRDtBQUNGOzs7b0NBMkdlcEMsWSxFQUFtQztBQUNqRCxXQUFLOUIsUUFBTCxDQUFjOEIsWUFBZCxDQUEyQnJlLEtBQTNCLEdBQW1DcWUsWUFBbkM7QUFDRDs7O3dDQUV5QjtBQUFBOztBQUN4QixVQUFJLEtBQUs5QixRQUFMLENBQWM4QixZQUFkLENBQTJCcmUsS0FBM0IsSUFBb0MsS0FBS3VjLFFBQUwsQ0FBY29DLFFBQWQsQ0FBdUIzZSxLQUEzRCxJQUFvRSxLQUFLdWMsUUFBTCxDQUFjc0MsTUFBZCxDQUFxQjdlLEtBQTdGLEVBQW9HO0FBQ2xHLFlBQU1nZ0IscUJBQXFCLEdBQUc3aEIsSUFBSSxDQUFDQyxHQUFMLEtBQWEsS0FBS21lLFFBQUwsQ0FBYzBELHFCQUFkLENBQW9DQyxPQUFwQyxFQUEzQzs7QUFDQSxZQUFNUSxzQkFBc0IsR0FBRyxDQUEvQjs7QUFDQSxZQUFNNVMsT0FBTyxHQUFHLEtBQUt5TyxRQUFMLENBQWNvQyxRQUFkLENBQXVCM2UsS0FBdkIsQ0FBNkJtZ0IsWUFBN0IsQ0FDZCxLQUFLNUQsUUFBTCxDQUFjc0MsTUFBZCxDQUFxQjdlLEtBRFAsRUFFZGdnQixxQkFGYyxFQUdkVSxzQkFIYyxFQUlkL0UsK0VBSmMsRUFLZEMsK0VBTGMsRUFPYmpOLElBUGEsQ0FPUixnQkFBYztBQUFBLGNBQVpnUyxNQUFZLFFBQVpBLE1BQVk7O0FBQ2xCLGNBQUlBLE1BQU0sS0FBSyxJQUFmLEVBQXFCO0FBQ25CLGtCQUFJLENBQUNwRSxRQUFMLENBQWM4QixZQUFkLENBQTJCcmUsS0FBM0IsR0FBbUMsQ0FBbkM7QUFDRDtBQUNGLFNBWGEsRUFZYjZPLEtBWmEsQ0FZUCxVQUFBbkssQ0FBQyxFQUFJO0FBQ1YsZ0JBQUksQ0FBQ3FCLE9BQUwsQ0FBYXlDLEtBQWIsQ0FBbUIsbUNBQW5CLEVBQXdEOUQsQ0FBeEQ7QUFDRCxTQWRhLENBQWhCO0FBZUQ7QUFDRjs7O29DQUVleVosRyxFQUF3QjtBQUN0QyxXQUFLNUIsUUFBTCxDQUFjRCxTQUFkLENBQXdCdGMsS0FBeEIsR0FBZ0NtZSxHQUFoQztBQUNEOzs7O21SQUVVMU8sTTs7Ozs7OztpREFDRixJQUFJVixPQUFKLENBQVksVUFBQTJCLE9BQU8sRUFBSTtBQUM1QixzQkFBSSxDQUFDLE1BQUksQ0FBQzZMLFFBQUwsQ0FBY3FFLFVBQWQsQ0FBeUI1Z0IsS0FBOUIsRUFBcUM7QUFDbkMsMEJBQUksQ0FBQzZnQixXQUFMLENBQWlCcFIsTUFBakI7O0FBRUFpQiwyQkFBTztBQUVQO0FBQ0Q7O0FBRUQsd0JBQUksQ0FBQzZMLFFBQUwsQ0FBYytDLG1CQUFkLENBQWtDaGdCLEdBQWxDLENBQXNDLE1BQUksQ0FBQ2lkLFFBQUwsQ0FBY3FFLFVBQWQsQ0FBeUJySixTQUF6QixDQUFtQyxVQUFBcUosVUFBVSxFQUFJO0FBQ3JGLHdCQUFJLENBQUNBLFVBQUwsRUFBaUI7QUFDZiw0QkFBSSxDQUFDQyxXQUFMLENBQWlCcFIsTUFBakI7O0FBQ0FpQiw2QkFBTztBQUNSO0FBQ0YsbUJBTHFDLENBQXRDO0FBTUQsaUJBZk0sQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dDQWtCV2pCLE0sRUFBc0I7QUFDeEMsVUFBSSxLQUFLOE0sUUFBTCxDQUFjSCxZQUFkLENBQTJCcGMsS0FBL0IsRUFBc0M7QUFDcEMsYUFBS3VjLFFBQUwsQ0FBY0gsWUFBZCxDQUEyQnBjLEtBQTNCLENBQWlDOGdCLEtBQWpDOztBQUNBLGFBQUt2RSxRQUFMLENBQWNILFlBQWQsQ0FBMkJwYyxLQUEzQixDQUFpQytnQixTQUFqQyxHQUE2QyxJQUE3QztBQUNEOztBQUVELFdBQUt4RSxRQUFMLENBQWMrQyxtQkFBZCxDQUFrQzFnQixPQUFsQzs7QUFFQSxXQUFLb2lCLGdCQUFMLENBQXNCdlIsTUFBdEI7QUFFQSxXQUFLOE0sUUFBTCxDQUFjTyxLQUFkLENBQW9COWMsS0FBcEIsR0FBNEI0ZiwwREFBNUI7QUFDRDs7Ozs7Ozs7O3FCQUdLLEtBQUtyRCxRQUFMLENBQWM5SixXQUFkLENBQTBCelMsSzs7Ozs7QUFDNUIscUJBQUt1YyxRQUFMLENBQWNXLFVBQWQsQ0FBeUJsZCxLQUF6QixHQUFpQyxLQUFqQztrREFFTyxLQUFLaWhCLDZCQUFMLENBQW1DLEtBQUsxRSxRQUFMLENBQWM5SixXQUFkLENBQTBCelMsS0FBN0QsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJCQUlFO0FBQ1gsVUFBTW9jLFlBQVksR0FBRyxLQUFLRyxRQUFMLENBQWNILFlBQWQsQ0FBMkJwYyxLQUFoRDs7QUFFQSxVQUFJb2MsWUFBSixFQUFrQjtBQUNoQkEsb0JBQVksQ0FBQzhFLEtBQWIsR0FBcUIsSUFBckI7QUFDRDtBQUNGOzs7NkJBRWM7QUFDYixVQUFNOUUsWUFBWSxHQUFHLEtBQUtHLFFBQUwsQ0FBY0gsWUFBZCxDQUEyQnBjLEtBQWhEOztBQUVBLFVBQUlvYyxZQUFKLEVBQWtCO0FBQ2hCQSxvQkFBWSxDQUFDOEUsS0FBYixHQUFxQixLQUFyQjtBQUNBLGFBQUszRSxRQUFMLENBQWNTLFNBQWQsQ0FBd0JoZCxLQUF4QixHQUFnQyxLQUFoQztBQUNEO0FBQ0Y7Ozs7Ozs7Ozs7O2tEQUdRLEtBQUttaEIsSUFBTCxDQUFVLHdCQUFWLEVBQW9DeFMsSUFBcEMsQ0FBeUMsWUFBTTtBQUNwRCx3QkFBSSxDQUFDNE4sUUFBTCxDQUFjNEMsa0JBQWQsQ0FBaUN2Z0IsT0FBakM7O0FBQ0Esd0JBQUksQ0FBQzJkLFFBQUwsQ0FBYzZFLFVBQWQsR0FBMkIsSUFBM0I7QUFDRCxpQkFITSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBTUYvRSxLLEVBQVk7QUFDakIsVUFBTWxELFdBQVcsR0FBR0MsbUVBQUEsQ0FBb0JpRCxLQUFwQixDQUFwQjtBQUNBLFVBQU12USxHQUFHLEdBQUdzTiwrREFBQSxDQUFnQkQsV0FBaEIsQ0FBWjs7QUFFQSxVQUFJck4sR0FBSixFQUFTO0FBQ1AsZUFBT0EsR0FBUDtBQUNEOztBQUVELFdBQUsvRixPQUFMLENBQWFDLElBQWIsQ0FBa0IsNENBQWxCLEVBQWdFakIsNERBQWhFOztBQUVBLGFBQU8sSUFBSWlILEdBQUosQ0FBUWpILDREQUFSLENBQVA7QUFDRDs7Ozs7Ozs7Ozs7cUJBR0ssS0FBS3dYLFFBQUwsQ0FBYzZFLFU7Ozs7O3NCQUNWLElBQUkvWixLQUFKLENBQVUsOEJBQVYsQzs7O3FCQUdKLEtBQUtrVixRQUFMLENBQWNxRSxVQUFkLENBQXlCNWdCLEs7Ozs7O0FBQzNCLHFCQUFLK0YsT0FBTCxDQUFhQyxJQUFiLENBQWtCLDZDQUFsQjs7Ozs7QUFLRixxQkFBS3VXLFFBQUwsQ0FBY3FFLFVBQWQsQ0FBeUI1Z0IsS0FBekIsR0FBaUMsSUFBakM7a0RBRU8sS0FBS3FoQixZQUFMLEdBQ0pDLE9BREksQ0FDSSxZQUFNO0FBQ2Isd0JBQUksQ0FBQy9FLFFBQUwsQ0FBY3FFLFVBQWQsQ0FBeUI1Z0IsS0FBekIsR0FBaUMsS0FBakM7QUFDRCxpQkFISSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPRHFjLHFCLEdBQVEsS0FBS0UsUUFBTCxDQUFjRixLQUFkLENBQW9CcmMsSztBQUM1QnVoQixtQyxHQUFzQixLQUFLaEYsUUFBTCxDQUFjMEMsZ0JBQWQsQ0FBK0JzQyxtQkFBL0IsRTs7b0JBRXZCbkkscUVBQUEsQ0FBc0JpRCxLQUF0QixDOzs7OztBQUNILHFCQUFLdFcsT0FBTCxDQUFheUMsS0FBYixDQUFtQiw0QkFBbkIsRUFBaUQ2VCxLQUFqRDs7QUFDQSxxQkFBS0UsUUFBTCxDQUFjTyxLQUFkLENBQW9COWMsS0FBcEIsR0FBNEI0ZiwrREFBNUI7QUFDQSxxQkFBS3JELFFBQUwsQ0FBY2UsVUFBZCxDQUF5QnRkLEtBQXpCLEdBQWlDLEtBQWpDOzs7O0FBS0YscUJBQUtnaEIsZ0JBQUwsQ0FBc0IsY0FBdEI7QUFDQSxxQkFBS3pFLFFBQUwsQ0FBY08sS0FBZCxDQUFvQjljLEtBQXBCLEdBQTRCNGYsMkRBQTVCO0FBQ0EscUJBQUtyRCxRQUFMLENBQWNtQixPQUFkLENBQXNCMWQsS0FBdEIsR0FBOEIsSUFBOUI7QUFFTXdoQixtQixHQUFNLEtBQUtDLE1BQUwsQ0FBWXBGLEtBQVosQzs7QUFDTnFGLDJDLEdBQW1ELFNBQW5EQSwyQkFBbUQ7QUFBQSx5QkFBTSxJQUFJM1MsT0FBSixDQUFZLFVBQUMyQixPQUFELEVBQW1CO0FBQzVGO0FBQ0EsMEJBQUksQ0FBQzZMLFFBQUwsQ0FBY3FFLFVBQWQsQ0FBeUI1Z0IsS0FBekIsR0FBaUMsS0FBakM7QUFFQSwyQkFBTzBRLE9BQU8sQ0FBQyxNQUFJLENBQUNpUixtQkFBTCxFQUFELENBQWQ7QUFDRCxtQkFMOEQsQ0FBTjtBQUFBLGlCOztBQU1uREMsNEIsR0FBZUMscUVBQUEsQ0FBcUJ4RixLQUFyQixFQUE0QixLQUFLRSxRQUFqQyxFQUEyQ21GLDJCQUEzQyxDOztvQkFFaEJFLFk7Ozs7Ozs7O2tEQUlFQSxZQUFZLENBQUN4QixLQUFiLENBQ0xvQixHQURLLEVBRUxuRixLQUZLLEVBR0xrRixtQkFISyxFQUlMLEtBQUtOLDZCQUFMLENBQW1DdFcsSUFBbkMsQ0FBd0MsSUFBeEMsQ0FKSyxFQUtKZ0UsSUFMSSxDQUtDLFlBQU07QUFDVix3QkFBSSxDQUFDNE4sUUFBTCxDQUFjbUIsT0FBZCxDQUFzQjFkLEtBQXRCLEdBQThCLEtBQTlCO0FBQ0QsaUJBUEksRUFRSjZPLEtBUkksQ0FRRSxVQUFBbkssQ0FBQyxFQUFJO0FBQ1Y2YyxxQ0FBbUIsQ0FBQ08sSUFBcEI7QUFFQSx3QkFBSSxDQUFDdkYsUUFBTCxDQUFja0MsWUFBZCxDQUEyQnplLEtBQTNCO0FBRUEsd0JBQUksQ0FBQ3VjLFFBQUwsQ0FBY2lCLE1BQWQsQ0FBcUJ4ZCxLQUFyQixHQUE2QixLQUE3Qjs7QUFFQSx3QkFBSSxDQUFDZ2hCLGdCQUFMLENBQXNCLG1DQUF0Qjs7QUFFQSx3QkFBSSxDQUFDekUsUUFBTCxDQUFjTyxLQUFkLENBQW9COWMsS0FBcEIsR0FBNEI0Zix3REFBNUI7O0FBRUEsd0JBQUksQ0FBQzdaLE9BQUwsQ0FBYXlDLEtBQWIsQ0FBbUIseUJBQW5CLEVBQThDOUQsQ0FBOUM7QUFDRCxpQkFwQkksRUFxQko0YyxPQXJCSSxDQXFCSSxZQUFNO0FBQ2Isc0JBQUksTUFBSSxDQUFDL0UsUUFBTCxDQUFjTyxLQUFkLENBQW9COWMsS0FBcEIsS0FBOEI0ZiwwREFBOUIsSUFBc0QsQ0FBQzdhLGlFQUEzRCxFQUF3RjtBQUN0RjtBQUNEOztBQUVELHNCQUFNZ2QsU0FBUyxHQUFHN1EsVUFBVSxDQUFDLFlBQU07QUFDakMsd0JBQU1wRCxPQUFPLEdBQUcsTUFBSSxDQUFDNlQsbUJBQUwsR0FDYjlTLEtBRGEsQ0FDUCxVQUFBbkssQ0FBQyxFQUFJO0FBQ1YsNEJBQUksQ0FBQ3FCLE9BQUwsQ0FBYXlDLEtBQWIsQ0FBbUIsZ0NBQW5CLEVBQXFEOUQsQ0FBckQ7QUFDRCxxQkFIYSxDQUFoQjtBQUlELG1CQUwyQixFQUt6QixNQUFJLENBQUNzZCxnQkFBTCxFQUx5QixDQUE1Qjs7QUFPQSx3QkFBSSxDQUFDekYsUUFBTCxDQUFjMEYsV0FBZCxDQUEwQjNpQixHQUExQixDQUE4QixJQUFJQyxzREFBSixDQUFlLFlBQU07QUFDakRxVSxnQ0FBWSxDQUFDbU8sU0FBRCxDQUFaO0FBQ0QsbUJBRjZCLENBQTlCO0FBR0QsaUJBcENJLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBd0NILEtBQUt4RixRQUFMLENBQWM2RSxVOzs7OztzQkFDVixJQUFJL1osS0FBSixDQUFVLDhCQUFWLEM7OztxQkFHSixLQUFLa1YsUUFBTCxDQUFjOUosV0FBZCxDQUEwQnpTLEs7Ozs7O2tEQUNyQixLQUFLaWhCLDZCQUFMLENBQW1DLEtBQUsxRSxRQUFMLENBQWM5SixXQUFkLENBQTBCelMsS0FBN0QsQzs7O0FBR1Qsb0JBQUksS0FBS3VjLFFBQUwsQ0FBY0YsS0FBZCxDQUFvQnJjLEtBQXhCLEVBQStCO0FBQ3ZCOE4seUJBRHVCLEdBQ2IsS0FBS3NTLEtBQUwsRUFEYTtBQUU5Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUlLM04sMkIsR0FBYyxLQUFLOEosUUFBTCxDQUFjOUosV0FBZCxDQUEwQnpTLEs7O29CQUV6Q3lTLFc7Ozs7O2tEQUNJLEtBQUsyTixLQUFMLEU7OztrREFHRixLQUFLYSw2QkFBTCxDQUFtQ3hPLFdBQW5DLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt1Q0FHMEI7QUFDakMsY0FBUSxLQUFLOEosUUFBTCxDQUFjTyxLQUFkLENBQW9COWMsS0FBNUI7QUFDRSxhQUFLNGYsMERBQUw7QUFDQSxhQUFLQSwwREFBTDtBQUNFLGlCQUFPMUQsb0NBQVA7O0FBQ0YsYUFBSzBELHdEQUFMO0FBQ0EsYUFBS0EsNkRBQUw7QUFDQSxhQUFLQSwrREFBTDtBQUNBLGFBQUtBLGdFQUFMO0FBQ0EsYUFBS0EsNkRBQUw7QUFDQSxhQUFLQSwwREFBTDtBQUNBLGFBQUtBLDJEQUFMO0FBQ0EsYUFBS0EsMERBQUw7QUFDQSxhQUFLQSx5REFBTDtBQUNBLGFBQUtBLCtEQUFMO0FBQ0EsYUFBS0EscUVBQUw7QUFDRTtBQUNBLGlCQUFPalosSUFBSSxDQUFDdWIsR0FBTCxDQUFTakcsZ0NBQVQsRUFBMkN0VixJQUFJLENBQUN3YixHQUFMLENBQVNwRyw2QkFBVCxFQUF3Q3BWLElBQUksQ0FBQ3liLEdBQUwsQ0FBUyxDQUFULEVBQVksS0FBSzdGLFFBQUwsQ0FBY2tDLFlBQWQsQ0FBMkJ6ZSxLQUEzQixHQUFtQyxDQUEvQyxDQUF4QyxDQUEzQyxDQUFQOztBQUNGO0FBQ0VzSCwyRUFBaUIsQ0FBQyxLQUFLaVYsUUFBTCxDQUFjTyxLQUFkLENBQW9COWMsS0FBckIsQ0FBakI7QUFsQko7QUFvQkQ7Ozs7Ozs7OzsrQkFHUyxLQUFLdWMsUUFBTCxDQUFjTyxLQUFkLENBQW9COWMsSztrREFDckI0Zix3RCx3QkFDQUEsK0Qsd0JBQ0FBLDBELHdCQUNBQSwwRCx3QkFDQUEsNkQsd0JBSUFBLCtELHdCQUlBQSxnRSx3QkFJQUEsNkQsd0JBSUFBLDBELHlCQUlBQSwwRCx5QkFJQUEseUQseUJBSUFBLDJELHlCQUlBQSxxRTs7OztBQS9CSCxxQkFBSzdaLE9BQUwsQ0FBYUMsSUFBYixDQUFrQiwwQ0FBbEIsRUFBOEQsS0FBS3VXLFFBQUwsQ0FBY08sS0FBZCxDQUFvQjljLEtBQWxGLEVBQXlGNGYsa0RBQVksQ0FBQyxLQUFLckQsUUFBTCxDQUFjTyxLQUFkLENBQW9COWMsS0FBckIsQ0FBckc7Ozs7O0FBSUEscUJBQUsrRixPQUFMLENBQWFDLElBQWIsQ0FBa0IsaUdBQWxCOzs7OztBQUlBLHFCQUFLRCxPQUFMLENBQWFDLElBQWIsQ0FBa0IsbUdBQWxCOzs7OztBQUlBLHFCQUFLRCxPQUFMLENBQWFDLElBQWIsQ0FBa0IsZ0dBQWxCOzs7OztBQUlBLHFCQUFLRCxPQUFMLENBQWFDLElBQWIsQ0FBa0IsOENBQWxCOzs7OztBQUlBLHFCQUFLRCxPQUFMLENBQWFDLElBQWIsQ0FBa0IsNkNBQWxCOzs7OztBQUlBLHFCQUFLRCxPQUFMLENBQWFDLElBQWIsQ0FBa0Isa0VBQWxCOzs7OztBQUlBLHFCQUFLRCxPQUFMLENBQWFDLElBQWIsQ0FBa0Isc0RBQWxCOzs7OztBQUlBLHFCQUFLRCxPQUFMLENBQWFDLElBQWIsQ0FBa0IseUVBQWxCOzs7OztBQUlBc0IsaUZBQWlCLENBQUMsS0FBS2lWLFFBQUwsQ0FBY08sS0FBZCxDQUFvQjljLEtBQXJCLENBQWpCOzs7a0RBR0csS0FBS29nQixLQUFMLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt1Q0FHdUU7QUFBQTs7QUFBQSxVQUF2RDNRLE1BQXVELHVFQUF0Q3FNLDhCQUFzQzs7QUFDOUUsV0FBS1MsUUFBTCxDQUFjMEYsV0FBZCxDQUEwQnJqQixPQUExQjs7QUFFQSxVQUFNZ1QsY0FBYyxHQUFHLEtBQUsySyxRQUFMLENBQWMzSyxjQUFkLENBQTZCNVIsS0FBcEQ7O0FBRUEsVUFBSTRSLGNBQUosRUFBb0I7QUFDbEIsYUFBSzJLLFFBQUwsQ0FBYzNLLGNBQWQsQ0FBNkI1UixLQUE3QixHQUFxQyxJQUFyQztBQUNBNFIsc0JBQWMsQ0FBQ2lGLEtBQWY7QUFDRDs7QUFFRCxVQUFJLEtBQUswRixRQUFMLENBQWM5SixXQUFkLENBQTBCelMsS0FBOUIsRUFBcUM7QUFDbkMsYUFBS3VjLFFBQUwsQ0FBYzlKLFdBQWQsQ0FBMEJ6UyxLQUExQixDQUFnQzhTLFNBQWhDLEdBQTRDdk0sT0FBNUMsQ0FBb0QsVUFBQXlNLEtBQUs7QUFBQSxpQkFBSUEsS0FBSyxDQUFDbU8sSUFBTixFQUFKO0FBQUEsU0FBekQ7O0FBQ0EsYUFBSzVFLFFBQUwsQ0FBYzlKLFdBQWQsQ0FBMEJ6UyxLQUExQixHQUFrQyxJQUFsQztBQUNEOztBQUVELFdBQUt1YyxRQUFMLENBQWNXLFVBQWQsQ0FBeUJsZCxLQUF6QixHQUFpQyxLQUFqQztBQUNBLFdBQUt1YyxRQUFMLENBQWNTLFNBQWQsQ0FBd0JoZCxLQUF4QixHQUFnQyxLQUFoQztBQUNBLFdBQUt1YyxRQUFMLENBQWNxQixPQUFkLENBQXNCNWQsS0FBdEIsR0FBOEIsS0FBOUI7QUFDQSxXQUFLdWMsUUFBTCxDQUFjeUIsT0FBZCxDQUFzQmhlLEtBQXRCLEdBQThCLElBQTlCO0FBQ0EsV0FBS3VjLFFBQUwsQ0FBY3VCLE9BQWQsQ0FBc0I5ZCxLQUF0QixHQUE4QixLQUE5Qjs7QUFFQSxVQUFJLEtBQUt1YyxRQUFMLENBQWNzQyxNQUFkLENBQXFCN2UsS0FBckIsSUFBOEIsS0FBS3VjLFFBQUwsQ0FBY29DLFFBQWQsQ0FBdUIzZSxLQUF6RCxFQUFnRTtBQUM5RCxZQUFNOE4sT0FBTyxHQUFHLEtBQUt5TyxRQUFMLENBQWNvQyxRQUFkLENBQXVCM2UsS0FBdkIsQ0FBNkJxaUIsYUFBN0IsQ0FBMkMsS0FBSzlGLFFBQUwsQ0FBY3NDLE1BQWQsQ0FBcUI3ZSxLQUFoRSxFQUF1RXlQLE1BQXZFLEVBQ2JkLElBRGEsQ0FDUixpQkFBYztBQUFBLGNBQVpnUyxNQUFZLFNBQVpBLE1BQVk7O0FBQ2xCLGNBQUlBLE1BQU0sS0FBSyxJQUFmLEVBQXFCO0FBQ25CLGtCQUFJLENBQUM1YSxPQUFMLENBQWFvTCxJQUFiLENBQWtCLGdEQUFsQixFQUFvRSxNQUFJLENBQUNqTSxRQUF6RSxFQUFtRnliLE1BQW5GOztBQUVBO0FBQ0Q7O0FBRUQsZ0JBQUksQ0FBQzVhLE9BQUwsQ0FBYUMsSUFBYixDQUFrQix3Q0FBbEIsRUFBNEQsTUFBSSxDQUFDZCxRQUFqRSxFQUEyRXliLE1BQTNFO0FBQ0QsU0FUYSxFQVViOVIsS0FWYSxDQVVQLFVBQUFuSyxDQUFDLEVBQUk7QUFDVixnQkFBSSxDQUFDcUIsT0FBTCxDQUFheUMsS0FBYixDQUFtQiwrQkFBbkIsRUFBb0QsTUFBSSxDQUFDdEQsUUFBekQsRUFBbUVSLENBQW5FO0FBQ0QsU0FaYSxDQUFoQjtBQWFEOztBQUVELFVBQUksS0FBSzBYLFlBQUwsSUFBcUIsS0FBS0EsWUFBTCxDQUFrQm9ELE9BQTNDLEVBQW9EO0FBQ2xELGFBQUtwRCxZQUFMLENBQWtCb0QsT0FBbEIsQ0FBMEJqVCxTQUExQixHQUFzQyxFQUF0QztBQUNBLGFBQUs2UCxZQUFMLENBQWtCb0QsT0FBbEIsQ0FBMEJ0YSxRQUExQixHQUFxQyxFQUFyQztBQUNEOztBQUVELFdBQUtxWCxRQUFMLENBQWNzQyxNQUFkLENBQXFCN2UsS0FBckIsR0FBNkIsSUFBN0I7QUFDQSxXQUFLdWMsUUFBTCxDQUFjb0MsUUFBZCxDQUF1QjNlLEtBQXZCLEdBQStCLElBQS9CO0FBQ0EsV0FBS3VjLFFBQUwsQ0FBYytGLCtCQUFkLEdBQWdELENBQWhEO0FBQ0Q7Ozs7NlNBRTJDN1AsVzs7Ozs7Ozs7QUFDcEMySiw0QixHQUFlLEtBQUtHLFFBQUwsQ0FBY0gsWUFBZCxDQUEyQnBjLEs7O29CQUUzQ29jLFk7Ozs7O0FBQ0gscUJBQUtHLFFBQUwsQ0FBY1MsU0FBZCxDQUF3QmhkLEtBQXhCLEdBQWdDLEtBQWhDO0FBQ0EscUJBQUt1YyxRQUFMLENBQWNXLFVBQWQsQ0FBeUJsZCxLQUF6QixHQUFpQyxLQUFqQztBQUNBLHFCQUFLdWMsUUFBTCxDQUFjbUIsT0FBZCxDQUFzQjFkLEtBQXRCLEdBQThCLEtBQTlCO0FBQ0EscUJBQUt1YyxRQUFMLENBQWNxQixPQUFkLENBQXNCNWQsS0FBdEIsR0FBOEIsS0FBOUI7QUFDQSxxQkFBS3VjLFFBQUwsQ0FBY08sS0FBZCxDQUFvQjljLEtBQXBCLEdBQTRCNGYsMERBQTVCOzs7O0FBS0Z4RCw0QkFBWSxDQUFDMkUsU0FBYixHQUF5QnRPLFdBQXpCO0FBRU04UCwyQixHQUFjbkcsWUFBWSxDQUFDb0csSUFBYixFOztzQkFFaEJELFdBQVcsS0FBS3RmLFM7Ozs7O0FBQ2xCLHFCQUFLc1osUUFBTCxDQUFjUyxTQUFkLENBQXdCaGQsS0FBeEIsR0FBZ0MsS0FBaEM7QUFDQSxxQkFBS3VjLFFBQUwsQ0FBY1csVUFBZCxDQUF5QmxkLEtBQXpCLEdBQWlDLEtBQWpDO0FBQ0EscUJBQUt1YyxRQUFMLENBQWNtQixPQUFkLENBQXNCMWQsS0FBdEIsR0FBOEIsS0FBOUI7QUFDQSxxQkFBS3VjLFFBQUwsQ0FBY3FCLE9BQWQsQ0FBc0I1ZCxLQUF0QixHQUE4QixJQUE5QjtBQUNBLHFCQUFLdWMsUUFBTCxDQUFjTyxLQUFkLENBQW9COWMsS0FBcEIsR0FBNEI0ZiwwREFBNUI7Ozs7a0RBS0syQyxXQUFXLENBQUM1VCxJQUFaLENBQWlCLFlBQU07QUFDNUIsd0JBQUksQ0FBQzROLFFBQUwsQ0FBY1MsU0FBZCxDQUF3QmhkLEtBQXhCLEdBQWdDLEtBQWhDO0FBQ0Esd0JBQUksQ0FBQ3VjLFFBQUwsQ0FBY1csVUFBZCxDQUF5QmxkLEtBQXpCLEdBQWlDLEtBQWpDO0FBQ0Esd0JBQUksQ0FBQ3VjLFFBQUwsQ0FBY21CLE9BQWQsQ0FBc0IxZCxLQUF0QixHQUE4QixLQUE5QjtBQUNBLHdCQUFJLENBQUN1YyxRQUFMLENBQWNxQixPQUFkLENBQXNCNWQsS0FBdEIsR0FBOEIsSUFBOUI7QUFDQSx3QkFBSSxDQUFDdWMsUUFBTCxDQUFjTyxLQUFkLENBQW9COWMsS0FBcEIsR0FBNEI0ZiwwREFBNUI7QUFDRCxpQkFOTSxFQU1KL1EsS0FOSSxDQU1FLFVBQUFuSyxDQUFDLEVBQUk7QUFDWixzQkFBTStkLGFBQWEsR0FBRyxDQUFDLENBQUNoUSxXQUFXLENBQUNLLFNBQVosR0FBd0I0UCxNQUF4QixDQUErQixVQUFBMVAsS0FBSyxFQUFJO0FBQzlELDJCQUFPQSxLQUFLLENBQUN6RixJQUFOLEtBQWUsT0FBdEI7QUFDRCxtQkFGdUIsQ0FBeEI7QUFHQSxzQkFBTW9WLHNDQUFzQyxHQUFHLENBQUM1ZCw2RUFBaEQ7O0FBRUEsc0JBQUk0ZCxzQ0FBc0MsSUFBSXZHLFlBQVksQ0FBQzhFLEtBQXZELElBQWdFLENBQUN1QixhQUFyRSxFQUFvRjtBQUNsRiwwQkFBSSxDQUFDbEcsUUFBTCxDQUFjUyxTQUFkLENBQXdCaGQsS0FBeEIsR0FBZ0MsS0FBaEM7QUFDQSwwQkFBSSxDQUFDdWMsUUFBTCxDQUFjVyxVQUFkLENBQXlCbGQsS0FBekIsR0FBaUMsSUFBakM7QUFDQSwwQkFBSSxDQUFDdWMsUUFBTCxDQUFjbUIsT0FBZCxDQUFzQjFkLEtBQXRCLEdBQThCLEtBQTlCO0FBQ0EsMEJBQUksQ0FBQ3VjLFFBQUwsQ0FBY3FCLE9BQWQsQ0FBc0I1ZCxLQUF0QixHQUE4QixLQUE5QjtBQUNBLDBCQUFJLENBQUN1YyxRQUFMLENBQWNPLEtBQWQsQ0FBb0I5YyxLQUFwQixHQUE0QjRmLHlEQUE1Qjs7QUFFQSx3QkFBSStDLHNDQUFKLEVBQTRDO0FBQzFDLDRCQUFJLENBQUM1YyxPQUFMLENBQWFDLElBQWIsQ0FBa0IsbUVBQWxCLEVBQXVGLE1BQUksQ0FBQ2QsUUFBNUYsRUFBc0dSLENBQXRHOztBQUNBMFgsa0NBQVksQ0FBQzJFLFNBQWIsR0FBeUIsSUFBekI7QUFFQTtBQUNEOztBQUVELHdCQUFJMEIsYUFBSixFQUFtQjtBQUNqQiw0QkFBSSxDQUFDMWMsT0FBTCxDQUFhQyxJQUFiLENBQWtCLHlEQUFsQixFQUE2RSxNQUFJLENBQUNkLFFBQWxGLEVBQTRGUixDQUE1Rjs7QUFFQTtBQUNEOztBQUVELDBCQUFJLENBQUNxQixPQUFMLENBQWFDLElBQWIsQ0FBa0IsK0RBQWxCLEVBQW1GLE1BQUksQ0FBQ2QsUUFBeEYsRUFBa0dSLENBQWxHOztBQUVBO0FBQ0Q7O0FBRUQwWCw4QkFBWSxDQUFDOEUsS0FBYixHQUFxQixJQUFyQjtBQUVBLHlCQUFPOUUsWUFBWSxDQUFDb0csSUFBYixHQUNKN1QsSUFESSxDQUNDLFlBQU07QUFDViwwQkFBSSxDQUFDNUksT0FBTCxDQUFhQyxJQUFiLENBQWtCLDZFQUFsQixFQUFpRyxNQUFJLENBQUNkLFFBQXRHOztBQUVBLDBCQUFJLENBQUNxWCxRQUFMLENBQWNTLFNBQWQsQ0FBd0JoZCxLQUF4QixHQUFnQyxJQUFoQztBQUNBLDBCQUFJLENBQUN1YyxRQUFMLENBQWNXLFVBQWQsQ0FBeUJsZCxLQUF6QixHQUFpQyxLQUFqQztBQUNBLDBCQUFJLENBQUN1YyxRQUFMLENBQWNtQixPQUFkLENBQXNCMWQsS0FBdEIsR0FBOEIsS0FBOUI7QUFDQSwwQkFBSSxDQUFDdWMsUUFBTCxDQUFjcUIsT0FBZCxDQUFzQjVkLEtBQXRCLEdBQThCLElBQTlCO0FBQ0EsMEJBQUksQ0FBQ3VjLFFBQUwsQ0FBY08sS0FBZCxDQUFvQjljLEtBQXBCLEdBQTRCNGYsMERBQTVCO0FBQ0QsbUJBVEksRUFTRi9RLEtBVEUsQ0FTSSxVQUFBbkssQ0FBQyxFQUFJO0FBQ1owWCxnQ0FBWSxDQUFDOEUsS0FBYixHQUFxQixLQUFyQjs7QUFFQSwwQkFBSSxDQUFDbmIsT0FBTCxDQUFhQyxJQUFiLENBQWtCLHlEQUFsQixFQUE2RSxNQUFJLENBQUNkLFFBQWxGLEVBQTRGUixDQUE1Rjs7QUFFQSwwQkFBSSxDQUFDNlgsUUFBTCxDQUFjUyxTQUFkLENBQXdCaGQsS0FBeEIsR0FBZ0MsS0FBaEM7QUFDQSwwQkFBSSxDQUFDdWMsUUFBTCxDQUFjVyxVQUFkLENBQXlCbGQsS0FBekIsR0FBaUMsSUFBakM7QUFDQSwwQkFBSSxDQUFDdWMsUUFBTCxDQUFjbUIsT0FBZCxDQUFzQjFkLEtBQXRCLEdBQThCLEtBQTlCO0FBQ0EsMEJBQUksQ0FBQ3VjLFFBQUwsQ0FBY3FCLE9BQWQsQ0FBc0I1ZCxLQUF0QixHQUE4QixLQUE5QjtBQUNBLDBCQUFJLENBQUN1YyxRQUFMLENBQWNPLEtBQWQsQ0FBb0I5YyxLQUFwQixHQUE0QjRmLHlEQUE1QjtBQUNELG1CQW5CSSxDQUFQO0FBb0JELGlCQTNETSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7d0JBcmdCNEI7QUFDbkMsYUFBTyxLQUFLckQsUUFBTCxDQUFjSCxZQUFkLENBQTJCcGMsS0FBbEM7QUFDRCxLO3NCQUVnQm9jLFksRUFBZ0M7QUFDL0MsVUFBSSxLQUFLRyxRQUFMLENBQWNILFlBQWQsQ0FBMkJwYyxLQUEvQixFQUFzQztBQUNwQyxhQUFLdWMsUUFBTCxDQUFjSCxZQUFkLENBQTJCcGMsS0FBM0IsQ0FBaUNSLG1CQUFqQyxDQUFxRCxZQUFyRCxFQUFtRSxLQUFLNGYsNEJBQXhFOztBQUNBLGFBQUs3QyxRQUFMLENBQWNILFlBQWQsQ0FBMkJwYyxLQUEzQixDQUFpQ1IsbUJBQWpDLENBQXFELGdCQUFyRCxFQUF1RSxLQUFLNGYsNEJBQTVFOztBQUNBLGFBQUs3QyxRQUFMLENBQWNILFlBQWQsQ0FBMkJwYyxLQUEzQixDQUFpQ1IsbUJBQWpDLENBQXFELFFBQXJELEVBQStELEtBQUs0Ziw0QkFBcEU7O0FBRUEsWUFBSSxLQUFLN0MsUUFBTCxDQUFjSCxZQUFkLENBQTJCcGMsS0FBM0IsQ0FBaUN3ZixPQUFyQyxFQUE4QztBQUM1QyxlQUFLakQsUUFBTCxDQUFjSCxZQUFkLENBQTJCcGMsS0FBM0IsQ0FBaUN3ZixPQUFqQyxDQUF5Q2pULFNBQXpDLEdBQXFELEVBQXJEO0FBQ0EsZUFBS2dRLFFBQUwsQ0FBY0gsWUFBZCxDQUEyQnBjLEtBQTNCLENBQWlDd2YsT0FBakMsQ0FBeUN0YSxRQUF6QyxHQUFvRCxFQUFwRDtBQUNEOztBQUVELGFBQUtxWCxRQUFMLENBQWMrQyxtQkFBZCxDQUFrQzFnQixPQUFsQzs7QUFFQSxhQUFLMmQsUUFBTCxDQUFjSCxZQUFkLENBQTJCcGMsS0FBM0IsQ0FBaUM4Z0IsS0FBakM7O0FBQ0EsYUFBS3ZFLFFBQUwsQ0FBY0gsWUFBZCxDQUEyQnBjLEtBQTNCLENBQWlDK2dCLFNBQWpDLEdBQTZDLElBQTdDO0FBQ0Q7O0FBRUQsV0FBS3hFLFFBQUwsQ0FBY1MsU0FBZCxDQUF3QmhkLEtBQXhCLEdBQWdDLEtBQWhDO0FBQ0EsV0FBS3VjLFFBQUwsQ0FBY1csVUFBZCxDQUF5QmxkLEtBQXpCLEdBQWlDLEtBQWpDO0FBQ0EsV0FBS3VjLFFBQUwsQ0FBY21CLE9BQWQsQ0FBc0IxZCxLQUF0QixHQUE4QixLQUE5QjtBQUNBLFdBQUt1YyxRQUFMLENBQWNxQixPQUFkLENBQXNCNWQsS0FBdEIsR0FBOEIsS0FBOUI7QUFDQSxXQUFLdWMsUUFBTCxDQUFjTyxLQUFkLENBQW9COWMsS0FBcEIsR0FBNEI0ZiwwREFBNUI7QUFFQSxXQUFLckQsUUFBTCxDQUFjSCxZQUFkLENBQTJCcGMsS0FBM0IsR0FBbUNvYyxZQUFuQzs7QUFFQSxVQUFJLEtBQUtHLFFBQUwsQ0FBY0gsWUFBZCxDQUEyQnBjLEtBQS9CLEVBQXNDO0FBQ3BDLGFBQUt1YyxRQUFMLENBQWNILFlBQWQsQ0FBMkJwYyxLQUEzQixDQUFpQ1gsZ0JBQWpDLENBQWtELFlBQWxELEVBQWdFLEtBQUsrZiw0QkFBckU7O0FBQ0EsYUFBSzdDLFFBQUwsQ0FBY0gsWUFBZCxDQUEyQnBjLEtBQTNCLENBQWlDWCxnQkFBakMsQ0FBa0QsZ0JBQWxELEVBQW9FLEtBQUsrZiw0QkFBekU7O0FBQ0EsYUFBSzdDLFFBQUwsQ0FBY0gsWUFBZCxDQUEyQnBjLEtBQTNCLENBQWlDWCxnQkFBakMsQ0FBa0QsUUFBbEQsRUFBNEQsS0FBSytmLDRCQUFqRTtBQUNEO0FBQ0Y7Ozt3QkFjc0I7QUFDckIsYUFBTyxLQUFLN0MsUUFBTCxDQUFjRixLQUFkLENBQW9CcmMsS0FBM0I7QUFDRCxLO3NCQUVTcWMsSyxFQUFrQjtBQUMxQixXQUFLRSxRQUFMLENBQWMwRixXQUFkLENBQTBCcmpCLE9BQTFCOztBQUVBLFdBQUsyZCxRQUFMLENBQWNGLEtBQWQsQ0FBb0JyYyxLQUFwQixHQUE0QnFjLEtBQTVCO0FBQ0EsV0FBS0UsUUFBTCxDQUFjYSxhQUFkLENBQTRCcGQsS0FBNUIsR0FBb0MsS0FBcEM7QUFFQSxVQUFNbVosV0FBVyxHQUFHQyxtRUFBQSxDQUFvQixLQUFLbUQsUUFBTCxDQUFjRixLQUFkLENBQW9CcmMsS0FBeEMsQ0FBcEI7QUFDQSxVQUFNZ1osWUFBWSxHQUFHLENBQUNJLCtEQUFBLENBQWdCRCxXQUFoQixLQUFnQ3BVLDREQUFqQyxFQUF5RDhCLFFBQXpELEVBQXJCO0FBRUE5Qiw2REFBQSxHQUFvQnFVLG1FQUFBLENBQW9CRCxXQUFwQixLQUFvQ3BVLHVEQUF4RDtBQUNBMlQsNkVBQUEsR0FBeUJNLFlBQXpCO0FBRUEsV0FBS1AsZUFBTCxHQUF1QmpNLCtFQUFBLENBQWlDd00sWUFBakMsQ0FBdkI7QUFFQSxXQUFLb0gsS0FBTDtBQUNEOzs7d0JBRXNEO0FBQ3JELGFBQU8sS0FBS3hELHVCQUFaO0FBQ0Q7Ozt3QkFFMEM7QUFDekMsYUFBTyxLQUFLQyxjQUFaO0FBQ0Q7Ozt3QkFFeUM7QUFDeEMsYUFBTyxLQUFLRSxrQkFBWjtBQUNEOzs7d0JBRTBDO0FBQ3pDLGFBQU8sS0FBS0UsbUJBQVo7QUFDRDs7O3dCQUU2QztBQUM1QyxhQUFPLEtBQUtFLHNCQUFaO0FBQ0Q7Ozt3QkFFMEM7QUFDekMsYUFBTyxLQUFLRSxtQkFBWjtBQUNEOzs7d0JBRXNDO0FBQ3JDLGFBQU8sS0FBS0UsZUFBWjtBQUNEOzs7d0JBRXVDO0FBQ3RDLGFBQU8sS0FBS0UsZ0JBQVo7QUFDRDs7O3dCQUV1QztBQUN0QyxhQUFPLEtBQUtFLGdCQUFaO0FBQ0Q7Ozt3QkFFdUM7QUFDdEMsYUFBTyxLQUFLRSxnQkFBWjtBQUNEOzs7d0JBRXVDO0FBQ3RDLGFBQU8sS0FBS0UsZ0JBQVo7QUFDRDs7O3dCQUU2QztBQUM1QyxhQUFPLEtBQUtFLGtCQUFaO0FBQ0Q7Ozt3QkFFdUM7QUFDdEMsYUFBTyxLQUFLQyxZQUFaO0FBQ0Q7Ozt3QkFFMEI7QUFDekIsYUFBTyxLQUFLRSxxQkFBTCxDQUEyQnBlLEtBQWxDO0FBQ0Q7Ozt3QkFFNEM7QUFDM0MsYUFBTyxLQUFLc2UsbUJBQVo7QUFDRDs7O3dCQUUyQztBQUMxQyxhQUFPLEtBQUtFLHFCQUFaO0FBQ0Q7Ozt3QkFFeUM7QUFDeEMsYUFBTyxLQUFLRSxpQkFBWjtBQUNEOzs7d0JBRXNDO0FBQ3JDLGFBQU8sS0FBS0UsZUFBWjtBQUNEOzs7d0JBRXNCO0FBQ3JCLGFBQU8sS0FBS3JDLFFBQUwsQ0FBY3JYLFFBQXJCO0FBQ0Q7Ozt3QkFFcUQ7QUFDcEQsYUFBTyxLQUFLNFosc0JBQVo7QUFDRDs7O3dCQUUrQztBQUM5QyxhQUFPLEtBQUtFLG9CQUFaO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9VSDtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7O0lBSXFCeEMsYztBQXFDbkIsMEJBQVlILEtBQVosRUFBMkJDLFNBQTNCLEVBQThDO0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQzVDLFNBQUs4RSxVQUFMLEdBQWtCLEtBQWxCO0FBQ0EsU0FBS1IsVUFBTCxHQUFrQixJQUFJdGlCLGdEQUFKLENBQXFCLEtBQXJCLENBQWxCO0FBQ0EsU0FBSzJqQixXQUFMLEdBQW1CLElBQUkvakIseURBQUosRUFBbkI7QUFDQSxTQUFLaWhCLGtCQUFMLEdBQTBCLElBQUlqaEIseURBQUosRUFBMUI7QUFDQSxTQUFLb2hCLG1CQUFMLEdBQTJCLElBQUlwaEIseURBQUosRUFBM0I7QUFDQSxTQUFLK2hCLHFCQUFMLEdBQTZCLElBQUk5aEIsSUFBSixFQUE3QjtBQUNBLFNBQUtpZSxZQUFMLEdBQW9CLElBQUk5ZCxnREFBSixDQUE4QixJQUE5QixDQUFwQjtBQUNBLFNBQUsrZCxLQUFMLEdBQWEsSUFBSS9kLGdEQUFKLENBQXVCK2QsS0FBdkIsQ0FBYjtBQUNBLFNBQUt6SyxjQUFMLEdBQXNCLElBQUl0VCxnREFBSixDQUE2QixJQUE3QixDQUF0QjtBQUNBLFNBQUttVSxXQUFMLEdBQW1CLElBQUluVSxnREFBSixDQUF5QixJQUF6QixDQUFuQjtBQUNBLFNBQUt3ZSxLQUFMLEdBQWEsSUFBSXhlLGdEQUFKLENBQTBCc2hCLDJEQUExQixDQUFiO0FBQ0EsU0FBSzVDLFNBQUwsR0FBaUIsSUFBSTFlLGdEQUFKLENBQXFCLEtBQXJCLENBQWpCO0FBQ0EsU0FBSzRlLFVBQUwsR0FBa0IsSUFBSTVlLGdEQUFKLENBQXFCLEtBQXJCLENBQWxCO0FBQ0EsU0FBSzhlLGFBQUwsR0FBcUIsSUFBSTllLGdEQUFKLENBQXFCLEtBQXJCLENBQXJCO0FBQ0EsU0FBS2dmLFVBQUwsR0FBa0IsSUFBSWhmLGdEQUFKLENBQXFCLElBQXJCLENBQWxCO0FBQ0EsU0FBS2tmLE1BQUwsR0FBYyxJQUFJbGYsZ0RBQUosQ0FBcUIsSUFBckIsQ0FBZDtBQUNBLFNBQUtvZixPQUFMLEdBQWUsSUFBSXBmLGdEQUFKLENBQXFCLEtBQXJCLENBQWY7QUFDQSxTQUFLc2YsT0FBTCxHQUFlLElBQUl0ZixnREFBSixDQUFxQixLQUFyQixDQUFmO0FBQ0EsU0FBS3dmLE9BQUwsR0FBZSxJQUFJeGYsZ0RBQUosQ0FBcUIsS0FBckIsQ0FBZjtBQUNBLFNBQUswZixPQUFMLEdBQWUsSUFBSTFmLGdEQUFKLENBQXFCLEtBQXJCLENBQWY7QUFDQSxTQUFLZ2UsU0FBTCxHQUFpQixJQUFJaGUsZ0RBQUosQ0FBeUJnZSxTQUF6QixDQUFqQjtBQUNBLFNBQUs2QixHQUFMLEdBQVcsSUFBSTdmLGdEQUFKLENBQXlCLENBQXpCLENBQVg7QUFDQSxTQUFLK2YsWUFBTCxHQUFvQixJQUFJL2YsZ0RBQUosQ0FBMkIsQ0FBM0IsQ0FBcEI7QUFDQSxTQUFLaWdCLFVBQUwsR0FBa0IsSUFBSWpnQixnREFBSixDQUF1Qm1pQiwyREFBdkIsQ0FBbEI7QUFDQSxTQUFLaEMsWUFBTCxHQUFvQixJQUFJbmdCLGdEQUFKLENBQW9CLENBQXBCLENBQXBCO0FBQ0EsU0FBS3FnQixRQUFMLEdBQWdCLElBQUlyZ0IsZ0RBQUosQ0FBc0IsSUFBdEIsQ0FBaEI7QUFDQSxTQUFLdWdCLE1BQUwsR0FBYyxJQUFJdmdCLGdEQUFKLENBQXFCLElBQXJCLENBQWQ7QUFDQSxTQUFLeWdCLGFBQUwsR0FBcUIsSUFBSXpnQixnREFBSixDQUFrQyxJQUFsQyxDQUFyQjtBQUNBLFNBQUtna0IsK0JBQUwsR0FBdUMsQ0FBdkM7QUFDRDs7OztnQ0FZVzNCLE0sRUFBK0I7QUFDekMsY0FBUUEsTUFBUjtBQUNFLGFBQUssSUFBTDtBQUNFOztBQUNGLGFBQUssY0FBTDtBQUNBLGFBQUssZ0JBQUw7QUFDQSxhQUFLLGFBQUw7QUFDRSxlQUFLckQsVUFBTCxDQUFnQnRkLEtBQWhCLEdBQXdCLEtBQXhCO0FBRUY7O0FBQ0EsYUFBSyxXQUFMO0FBQ0EsYUFBSyxXQUFMO0FBQ0UsZUFBS3llLFlBQUwsQ0FBa0J6ZSxLQUFsQixHQUEwQixDQUExQjtBQUNBLGVBQUs0ZCxPQUFMLENBQWE1ZCxLQUFiLEdBQXFCLEtBQXJCO0FBQ0EsZUFBSzhkLE9BQUwsQ0FBYTlkLEtBQWIsR0FBcUIsSUFBckI7QUFDQSxlQUFLZ2UsT0FBTCxDQUFhaGUsS0FBYixHQUFxQixLQUFyQjtBQUNBLGVBQUs2ZSxNQUFMLENBQVk3ZSxLQUFaLEdBQW9CLElBQXBCO0FBRUE7O0FBQ0Y7QUFDRSxlQUFLeWUsWUFBTCxDQUFrQnplLEtBQWxCO0FBQ0EsZUFBSzRkLE9BQUwsQ0FBYTVkLEtBQWIsR0FBcUIsS0FBckI7QUFDQSxlQUFLOGQsT0FBTCxDQUFhOWQsS0FBYixHQUFxQixJQUFyQjtBQUNBLGVBQUtnZSxPQUFMLENBQWFoZSxLQUFiLEdBQXFCLEtBQXJCO0FBQ0EsZUFBSzZlLE1BQUwsQ0FBWTdlLEtBQVosR0FBb0IsSUFBcEI7QUFDQSxlQUFLOGMsS0FBTCxDQUFXOWMsS0FBWCxHQUFtQjRmLHdEQUFuQjtBQUVBO0FBMUJKO0FBNEJEOzs7b0VBRXFEO0FBQ3BELFVBQUksS0FBS3hELFlBQUwsQ0FBa0JwYyxLQUFsQixJQUEyQixLQUFLb2MsWUFBTCxDQUFrQnBjLEtBQWxCLENBQXdCd2YsT0FBdkQsRUFBZ0U7QUFDOUQsYUFBS3BELFlBQUwsQ0FBa0JwYyxLQUFsQixDQUF3QndmLE9BQXhCLENBQWdDalQsU0FBaEMsR0FBNEN4SCx5REFBNUM7QUFDQSxhQUFLcVgsWUFBTCxDQUFrQnBjLEtBQWxCLENBQXdCd2YsT0FBeEIsQ0FBZ0N0YSxRQUFoQyxHQUEyQyxLQUFLQSxRQUFoRDtBQUNEO0FBQ0Y7OztzREFFaUN5YixNLEVBQXVDO0FBQ3ZFLGNBQVFBLE1BQVI7QUFDRSxhQUFLLElBQUw7QUFDRSxpQkFBT2YsMkRBQVA7O0FBQ0YsYUFBSyxXQUFMO0FBQ0EsYUFBSyxXQUFMO0FBQ0UsaUJBQU9BLDBEQUFQOztBQUNGLGFBQUssZ0JBQUw7QUFDRSxpQkFBT0EsZ0VBQVA7O0FBQ0YsYUFBSyxhQUFMO0FBQ0UsaUJBQU9BLDZEQUFQOztBQUNGLGFBQUssY0FBTDtBQUNFLGlCQUFPQSwrREFBUDs7QUFDRixhQUFLLFVBQUw7QUFDQSxhQUFLLGNBQUw7QUFDQSxhQUFLLFNBQUw7QUFDRSxpQkFBT0EsNkRBQVA7O0FBQ0YsYUFBSyxRQUFMO0FBQ0UsaUJBQU9BLHdEQUFQOztBQUNGO0FBQ0V0WSwwRUFBaUIsQ0FBQ3FaLE1BQUQsQ0FBakI7QUFuQko7QUFxQkQ7Ozt3QkF0RXNCO0FBQ3JCLFVBQU05QixNQUFNLEdBQUcsS0FBS0EsTUFBTCxDQUFZN2UsS0FBM0I7O0FBRUEsVUFBSSxDQUFDNmUsTUFBTCxFQUFhO0FBQ1gsZUFBTyxHQUFQO0FBQ0Q7O0FBRUQsYUFBT0EsTUFBTSxDQUFDM1osUUFBZDtBQUNEOzs7Ozs7Ozs7Ozs7Ozs7OztBQzlGSDtBQUNBO0FBQ0E7SUFDSzBhLFk7O1dBQUFBLFk7QUFBQUEsYyxDQUFBQSxZO0FBQUFBLGMsQ0FBQUEsWTtBQUFBQSxjLENBQUFBLFk7QUFBQUEsYyxDQUFBQSxZO0FBQUFBLGMsQ0FBQUEsWTtBQUFBQSxjLENBQUFBLFk7QUFBQUEsYyxDQUFBQSxZO0FBQUFBLGMsQ0FBQUEsWTtBQUFBQSxjLENBQUFBLFk7QUFBQUEsYyxDQUFBQSxZO0FBQUFBLGMsQ0FBQUEsWTtBQUFBQSxjLENBQUFBLFk7QUFBQUEsYyxDQUFBQSxZO0dBQUFBLFksS0FBQUEsWTs7QUFnQkwsK0RBQWVBLFlBQWYsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuQkE7QUFDQTtBQUNBO0FBRUE7QUFDQTs7SUFVcUJnRCxROzs7a0NBQ0V6TSxPLEVBQXdDO0FBQzNELFVBQUksQ0FBQ3BSLDJEQUFMLEVBQTRCO0FBQzFCLGNBQU0sSUFBSXNDLEtBQUosQ0FBVSxvQkFBVixDQUFOO0FBQ0Q7O0FBRUQsYUFBTyxJQUFJOFUsNkNBQUosQ0FBWWhHLE9BQU8sQ0FBQ2lHLFlBQXBCLEVBQWtDakcsT0FBTyxDQUFDa0csS0FBMUMsRUFBaURsRyxPQUFPLENBQUNtRyxTQUF6RCxDQUFQO0FBQ0Q7OztBQUVELHNCQUFzQjtBQUFBOztBQUNwQixVQUFNLElBQUlqVixLQUFKLENBQVUseURBQVYsQ0FBTjtBQUNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUJIO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBTUEsK0RBQWU7QUFDYnRDLEtBQUcsRUFBSEEseUNBRGE7QUFFYjZkLFVBQVEsRUFBUkEsOENBRmE7QUFHYmhELGNBQVksRUFBWkEsa0RBQVlBO0FBSEMsQ0FBZixFOzs7Ozs7Ozs7Ozs7OztBQ2RBO0FBQ0E7QUFDQTtBQUVBLElBQU1pRCxtQkFBbUIsR0FBRyw2Q0FBNUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0lBRXFCQyxrQjs7Ozs7Ozt3REFDd0JDLFcsRUFBMkM7QUFDcEYsY0FBUUEsV0FBUjtBQUNFLGFBQUtuSCwrRUFBTDtBQUNFLGlCQUFPLFFBQVA7O0FBQ0YsYUFBS0EsOEVBQUw7QUFDRSxpQkFBTyxPQUFQOztBQUNGLGFBQUtBLDhFQUFMO0FBQ0UsaUJBQU8sT0FBUDs7QUFDRjtBQUNFdFUsMEVBQWlCLENBQUN5YixXQUFELENBQWpCO0FBUko7QUFVRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsQkg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7SUFFcUJDLG1COzs7Ozs7OzBEQUMwQkMsWSxFQUE4QztBQUN6RixjQUFRQSxZQUFSO0FBQ0UsYUFBS3RILDhFQUFMO0FBQ0UsaUJBQU8sTUFBUDs7QUFDRixhQUFLQSwrRUFBTDtBQUNFLGlCQUFPLE9BQVA7O0FBQ0Y7QUFDRXJVLDBFQUFpQixDQUFDMmIsWUFBRCxDQUFqQjtBQU5KO0FBUUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaEJIO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQSxJQUFNQyxzQkFBc0IsR0FBRyxLQUEvQjs7SUFJcUJDLFM7Ozs7Ozs7Ozs7QUFJWDNCLG1CLEdBQU0sSUFBSXhWLEdBQUosQ0FBUWpILDREQUFSLEM7aURBRUxvZSxTQUFTLENBQUNDLGtDQUFWLENBQTZDNUIsR0FBN0MsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrVEFHdUNBLEc7Ozs7OztBQUN4QzFWLG1CLEdBQU0wVixHQUFHLENBQUMzYSxRQUFKLEU7O3FCQUVSc2MsU0FBUyxDQUFDRSxNQUFWLENBQWlCdlgsR0FBakIsQzs7Ozs7a0RBQ0txWCxTQUFTLENBQUNFLE1BQVYsQ0FBaUJ2WCxHQUFqQixDOzs7QUFHSHdYLGdDLEdBQW1CLElBQUlDLHNEQUFKLENBQXFCL0IsR0FBckIsQztBQUNuQmdDLDJCLEdBQWNMLFNBQVMsQ0FBQ0UsTUFBVixDQUFpQnZYLEdBQWpCLElBQXdCd1gsZ0JBQWdCLENBQUNHLHVCQUFqQixFOztBQUU1Q04seUJBQVMsQ0FBQ0UsTUFBVixDQUFpQnZYLEdBQWpCLEVBQXNCNkMsSUFBdEIsQ0FBMkIsWUFBTTtBQUMvQixzQkFBTWIsT0FBTyxHQUFHb0QsVUFBVSxDQUFDLFlBQU07QUFDL0Isd0JBQUlpUyxTQUFTLENBQUNFLE1BQVYsQ0FBaUJ2WCxHQUFqQixNQUEwQjBYLFdBQTlCLEVBQTJDO0FBQ3pDLDZCQUFPTCxTQUFTLENBQUNFLE1BQVYsQ0FBaUJ2WCxHQUFqQixDQUFQO0FBQ0Q7QUFDRixtQkFKeUIsRUFJdkJvWCxzQkFKdUIsQ0FBMUI7QUFLRCxpQkFORCxFQU1HclUsS0FOSCxDQU1TLFVBQUFuSyxDQUFDLEVBQUk7QUFDWix5QkFBT3llLFNBQVMsQ0FBQ0UsTUFBVixDQUFpQnZYLEdBQWpCLENBQVA7QUFFQSx3QkFBTXBILENBQU47QUFDRCxpQkFWRDs7a0RBWU84ZSxXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHVCx1QkFBc0I7QUFBQTs7QUFDcEIsVUFBTSxJQUFJbmMsS0FBSixDQUFVLDBEQUFWLENBQU47QUFDRDs7Ozs7bUhBcENrQjhiLFMsWUFDc0IsRTs7O0FBc0MzQyxJQUFNclYsT0FBTyxHQUFHcVYsU0FBUyxDQUFDTyxnQ0FBVixFQUFoQixDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBLElBQU1DLGNBQWMsR0FBRyxLQUF2Qjs7SUFFcUJKLGdCO0FBS25CLDRCQUFZL0IsR0FBWixFQUFzQjtBQUFBOztBQUFBLHdJQUpLMWMsb0VBQUEsQ0FBd0IsV0FBeEIsQ0FJTDs7QUFBQTs7QUFBQTs7QUFDcEIsUUFBSSxDQUFDMGMsR0FBTCxFQUFVO0FBQ1IsWUFBTSxJQUFJbmEsS0FBSixDQUFVLHdCQUFWLENBQU47QUFDRDs7QUFFRCxTQUFLb1IsZUFBTCxHQUF1QmpNLCtFQUFBLENBQWlDZ1YsR0FBRyxDQUFDM2EsUUFBSixFQUFqQyxDQUF2QjtBQUNBLFNBQUsrYyxJQUFMLEdBQVlwQyxHQUFaO0FBQ0Q7Ozs7O3NTQUU2QkEsRyxFQUFVcUMsTzs7Ozs7O29CQUNqQ0EsTzs7Ozs7c0JBQ0csSUFBSXhjLEtBQUosQ0FBVSw0QkFBVixDOzs7QUFHRnlFLG1CLEdBQU0wVixHQUFHLENBQUMzYSxRQUFKLEU7O3VCQUNXa0ksT0FBTyxDQUFDK1UsSUFBUixDQUFhLENBQ2xDelYsS0FBSyxDQUFDdkMsR0FBRCxFQUFNO0FBQ1R3Qyx3QkFBTSxFQUFFLEtBREM7QUFFVHpFLHVCQUFLLEVBQUU7QUFGRSxpQkFBTixDQUQ2QixFQUtsQyxJQUFJa0YsT0FBSixDQUFzQixVQUFDa0MsQ0FBRCxFQUFJTixNQUFKO0FBQUEseUJBQ3BCTyxVQUFVLENBQUM7QUFBQSwyQkFBTVAsTUFBTSxDQUFDLElBQUl0SixLQUFKLGdDQUFrQ3lFLEdBQWxDLE9BQUQsQ0FBWjtBQUFBLG1CQUFELEVBQTBEK1gsT0FBMUQsQ0FEVTtBQUFBLGlCQUF0QixDQUxrQyxDQUFiLEM7OztBQUFqQmpWLHdCOztvQkFVREEsUUFBUSxDQUFDbVYsRTs7Ozs7c0JBQ04sSUFBSTFjLEtBQUosNkJBQStCeUUsR0FBL0IsZ0JBQXdDOEMsUUFBUSxDQUFDK1IsTUFBakQsTzs7O3NCQUdKL1IsUUFBUSxDQUFDTCxJQUFULEtBQWtCLEk7Ozs7O3NCQUNkLElBQUlsSCxLQUFKLDBDQUE0Q3lFLEdBQTVDLE87Ozs7dUJBR2U4QyxRQUFRLENBQUNvVixJQUFULEU7OztBQUFqQkMsd0I7QUFDQUMseUIsR0FBWUQsUUFBUSxDQUFDdmpCLEtBQVQsQ0FBZSxHQUFmLEM7aURBRVh3akIsU0FBUyxDQUFDblIsR0FBVixDQUFjLFVBQUE0TCxRQUFRO0FBQUEseUJBQUksSUFBSXdGLDhDQUFKLENBQWF4RixRQUFiLEVBQXVCa0YsT0FBdkIsQ0FBSjtBQUFBLGlCQUF0QixDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdxQkEsdUIsOERBQWtCRixjO0FBQ3hDN1gsbUIsR0FBTTRNLG9FQUFBLENBQStCLEtBQUtrTCxJQUFwQyxDOzt1QkFDWSxLQUFLUSx1QkFBTCxDQUE2QixJQUFJcFksR0FBSixDQUFRRixHQUFSLENBQTdCLEVBQTJDK1gsT0FBM0MsQzs7O0FBQWxCSyx5Qjs7QUFDQUcsNEIsR0FBZSxTQUFmQSxZQUFlO0FBQUEseUJBQXFCLElBQUl0VixPQUFKLENBQVksWUFBTTtBQUMxRCx5QkFBSSxDQUFDaEosT0FBTCxDQUFhQyxJQUFiLENBQWtCLG9EQUFsQixFQUF3RThGLEdBQXhFO0FBQ0QsbUJBRnlDLENBQXJCO0FBQUEsaUI7Ozt1QkFHRWlELE9BQU8sQ0FBQytVLElBQVIsQ0FBYUksU0FBUyxDQUFDblIsR0FBVixDQUFjLFVBQUE0TCxRQUFRO0FBQUEseUJBQUlBLFFBQVEsQ0FDbkUyRixJQUQyRCxHQUUzRHpWLEtBRjJELENBRXJELFVBQUFuSyxDQUFDLEVBQUk7QUFDVix5QkFBSSxDQUFDcUIsT0FBTCxDQUFhb0wsSUFBYixDQUFrQiwrQkFBbEIsRUFBbUR3TixRQUFuRCxFQUE2RGphLENBQTdEOztBQUVBLDJCQUFPMmYsWUFBWSxFQUFuQjtBQUNELG1CQU4yRCxFQU8zRDFWLElBUDJELENBT3RELFVBQUE0VixJQUFJLEVBQUk7QUFDWix3QkFBTW5tQixHQUFHLEdBQUdELElBQUksQ0FBQ0MsR0FBTCxFQUFaOztBQUVBLHlCQUFJLENBQUMySCxPQUFMLENBQWFDLElBQWIsQ0FBa0IsMENBQWxCLEVBQThEMlksUUFBUSxDQUFDOVgsUUFBVCxFQUE5RCxFQUFtRjBkLElBQW5GOztBQUNBLHlCQUFJLENBQUM5TCxlQUFMLENBQXFCN1MsSUFBckIsQ0FBMEI7QUFDeEJQLGdDQUFVLEVBQUVELHVFQURZO0FBRXhCUyw2QkFBTyxFQUFFLENBQUN6SCxHQUFHLEdBQUcyRyxzREFBUCxJQUEyQixJQUZaO0FBR3hCL0UsMkJBQUssRUFBRTtBQUFDOEYsOEJBQU0sRUFBRXllLElBQUksSUFBSTtBQUFqQix1QkFIaUI7QUFJeEJqWCw4QkFBUSxFQUFFcVIsUUFBUSxDQUFDOVgsUUFBVCxFQUpjO0FBS3hCMEcsMEJBQUksRUFBRTtBQUxrQixxQkFBMUI7O0FBUUEsMkJBQU9vUixRQUFQO0FBQ0QsbUJBcEIyRCxDQUFKO0FBQUEsaUJBQXRCLENBQWIsQzs7O0FBQWpCQSx3QjtrREFzQkNBLFE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RGWDtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0lBRXFCakcsWTs7O3NDQU9NOEksRyxFQUFrQjtBQUN6QyxVQUFNMVYsR0FBRyxHQUFHLElBQUlFLEdBQUosQ0FBUXdWLEdBQUcsQ0FBQzNhLFFBQUosRUFBUixDQUFaO0FBQ0EsVUFBTTJkLFVBQVUsR0FBRzNXLHVFQUFuQjtBQUVBL0IsU0FBRyxDQUFDL0ksTUFBSixjQUFpQixJQUFJRixlQUFKLENBQW9CLENBQUMsQ0FBQyxTQUFELEVBQVkyaEIsVUFBWixDQUFELEVBQTBCLENBQUMsR0FBRCxZQUFTcm1CLElBQUksQ0FBQ0MsR0FBTCxFQUFULEVBQTFCLENBQXBCLEVBQXVFeUksUUFBdkUsRUFBakI7O0FBRUEsVUFBSWlGLEdBQUcsQ0FBQ0csUUFBSixLQUFpQixHQUFyQixFQUEwQjtBQUN4QkgsV0FBRyxDQUFDRyxRQUFKLEdBQWUsa0JBQWY7QUFDRDs7QUFFRCxhQUFPSCxHQUFHLENBQUNqRixRQUFKLEVBQVA7QUFDRDs7O3dCQWZpQztBQUNoQyxhQUFPNlIsWUFBWSxDQUFDK0wsYUFBcEI7QUFDRDs7O0FBZUQsMEJBQXNCO0FBQUE7O0FBQ3BCLFVBQU0sSUFBSXBkLEtBQUosQ0FBVSw2REFBVixDQUFOO0FBQ0Q7Ozs7O21IQXRCa0JxUixZLG1CQUNzQyxJQUFJcGEsZ0RBQUosQ0FBb0J1a0IsMERBQXBCLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1QzRDtBQUNBO0FBQ0E7QUFDQTtBQVdBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFHQSxJQUFNNkIsVUFBVSxHQUFHLENBQW5COztJQWdEcUJQLFE7QUFNbkIsb0JBQVkzQyxHQUFaLEVBQXlCcUMsT0FBekIsRUFBMEM7QUFBQTs7QUFBQSx3SUFMTi9lLG9FQUFBLENBQXdCLFVBQXhCLENBS007O0FBQUE7O0FBQUE7O0FBQUE7O0FBQ3hDLFNBQUs4ZSxJQUFMLEdBQVlwQyxHQUFaO0FBQ0EsU0FBS21ELFFBQUwsR0FBZ0JkLE9BQWhCOztBQUVBLFFBQUksQ0FBQ0EsT0FBTCxFQUFjO0FBQ1osWUFBTSxJQUFJeGMsS0FBSixnQ0FBTjtBQUNEO0FBQ0Y7Ozs7K0JBTWtCO0FBQ2pCLG9DQUF1QixLQUFLdWMsSUFBNUI7QUFDRDs7Ozs7Ozs7Ozs7O0FBR085WCxtQixHQUFNLEtBQUs4WSxZQUFMLEU7QUFDTnhFLHFCLEdBQVFqaUIsSUFBSSxDQUFDQyxHQUFMLEU7O3VCQUNTMlEsT0FBTyxDQUFDK1UsSUFBUixDQUFhLENBQ2xDelYsS0FBSyxDQUFDdkMsR0FBRCxFQUFNO0FBQ1R3Qyx3QkFBTSxFQUFFLEtBREM7QUFFVHpFLHVCQUFLLEVBQUU7QUFGRSxpQkFBTixDQUQ2QixFQUtsQyxJQUFJa0YsT0FBSixDQUFzQixVQUFDa0MsQ0FBRCxFQUFJTixNQUFKO0FBQUEseUJBQ3BCTyxVQUFVLENBQUM7QUFBQSwyQkFBTVAsTUFBTSxDQUFDLElBQUl0SixLQUFKLDJCQUE2QnlFLEdBQTdCLE9BQUQsQ0FBWjtBQUFBLG1CQUFELEVBQXFELEtBQUksQ0FBQzZZLFFBQTFELENBRFU7QUFBQSxpQkFBdEIsQ0FMa0MsQ0FBYixDOzs7QUFBakIvVix3QjtBQVNBaVcsd0IsR0FBVzFtQixJQUFJLENBQUNDLEdBQUwsRTs7b0JBRVp3USxRQUFRLENBQUNtVixFOzs7OztzQkFDTixJQUFJMWMsS0FBSix3QkFBMEJ5RSxHQUExQixnQkFBbUM4QyxRQUFRLENBQUMrUixNQUE1QyxPOzs7QUFHUixxQkFBS21FLGNBQUwsR0FBc0JELFFBQVEsR0FBR3pFLEtBQWpDO2lEQUVPLEtBQUswRSxjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O3lSQUdFekksSyxFQUFlMEksdUIsRUFBb0R0RyxZOzs7Ozs7OztBQUMzRXRGLDJCLEdBQWNDLGtFQUFBLENBQW9CaUQsS0FBcEIsQzs7c0JBRWhCLENBQUNsRCxXQUFELElBQWdCLENBQUNBLFdBQVcsQ0FBQzZMLGE7Ozs7O0FBQy9CLHFCQUFLamYsT0FBTCxDQUFheUMsS0FBYixDQUFtQiw0QkFBbkIsRUFBaUQ2VCxLQUFqRDs7a0RBRU87QUFBQ3NFLHdCQUFNLEVBQUU7QUFBVCxpQjs7O0FBR0h0VSx1QixHQUFVOE0sV0FBVyxDQUFDNkwsYTtBQUN0QmxaLG1CLEdBQU0sS0FBS21aLFFBQUwsQ0FBYyxDQUFDNVksT0FBRCxFQUFVLFFBQVYsRUFBb0IsV0FBcEIsQ0FBZCxFQUFnRHhGLFFBQWhELEU7QUFDTm9ILHdCLEdBQVcsSUFBSUMsUUFBSixFO0FBQ1hnWCw2QixHQUFnQnJYLHVFOztBQUV0QixvQkFBSTRRLFlBQVksS0FBSyxDQUFqQixJQUFzQnNHLHVCQUExQixFQUFtRDtBQUMzQ0ksK0JBRDJDLEdBQ0M7QUFDaERULDhCQUFVLEVBQVZBLFVBRGdEO0FBRWhEUSxpQ0FBYSxFQUFiQSxhQUZnRDtBQUdoREUsaUNBQWEsRUFBRS9JLEtBSGlDO0FBSWhEb0MsZ0NBQVksRUFBWkEsWUFKZ0Q7QUFLaERoSSx3Q0FBb0IsRUFBRTtBQUNwQmlPLGdDQUFVLEVBQVZBLFVBRG9CO0FBRXBCVyx3Q0FBa0IsRUFBRTtBQUNsQnhoQiw0QkFBSSxFQUFFLEtBQUt5aEIsMEJBQUwsQ0FBZ0NQLHVCQUF1QixDQUFDbGhCLElBQXhELENBRFk7QUFFbEJ1UCwyQkFBRyxFQUFFMlIsdUJBQXVCLENBQUMzUjtBQUZYO0FBRkEscUJBTDBCO0FBWWhEbVMsMkNBQXVCLEVBQUU7QUFBQ2IsZ0NBQVUsRUFBVkE7QUFBRDtBQVp1QixtQkFERDtBQWdCakR6VywwQkFBUSxDQUFDRSxNQUFULENBQWdCLFVBQWhCLEVBQTRCckUsSUFBSSxDQUFDUCxTQUFMLENBQWU0YixhQUFmLENBQTVCO0FBQ0QsaUJBakJELE1BaUJPO0FBQ0NLLGtDQURELEdBQ21EO0FBQ3REZCw4QkFBVSxFQUFWQSxVQURzRDtBQUV0RFEsaUNBQWEsRUFBYkEsYUFGc0Q7QUFHdERFLGlDQUFhLEVBQUUvSSxLQUh1QztBQUl0RG9DLGdDQUFZLEVBQVpBLFlBSnNEO0FBS3REZ0gsMENBQXNCLEVBQUU7QUFBQ2YsZ0NBQVUsRUFBVkE7QUFBRDtBQUw4QixtQkFEbkQ7QUFTTHpXLDBCQUFRLENBQUNFLE1BQVQsQ0FBZ0IsVUFBaEIsRUFBNEJyRSxJQUFJLENBQUNQLFNBQUwsQ0FBZWljLGdCQUFmLENBQTVCO0FBQ0Q7O0FBRUtwRixxQixHQUFRamlCLElBQUksQ0FBQ0MsR0FBTCxFOztBQUlSeWxCLHVCLEdBQVUsSTs7dUJBRU85VSxPQUFPLENBQUMrVSxJQUFSLENBQWEsQ0FDaEN6VixLQUFLLENBQUN2QyxHQUFELEVBQU07QUFDVHdDLHdCQUFNLEVBQUUsTUFEQztBQUVUQyxzQkFBSSxFQUFFTjtBQUZHLGlCQUFOLENBRDJCLEVBS2hDLElBQUljLE9BQUosQ0FBc0IsVUFBQTJCLE9BQU87QUFBQSx5QkFDM0JtVCxPQUFPLEdBQUdqa0IsTUFBTSxDQUFDc1IsVUFBUCxDQUFrQixZQUFNO0FBQ2hDLDBCQUFJLENBQUNuTCxPQUFMLENBQWF5QyxLQUFiLENBQW1CLHFCQUFuQixFQUEwQyxJQUFJbkIsS0FBSixnQ0FBa0N5RSxHQUFsQyxPQUExQzs7QUFDQTRFLDJCQUFPLENBQUM7QUFBQ2lRLDRCQUFNLEVBQUU7QUFBVCxxQkFBRCxDQUFQO0FBQ0QsbUJBSFMsRUFHUCxNQUFJLENBQUNnRSxRQUhFLENBRGlCO0FBQUEsaUJBQTdCLENBTGdDLENBQWIsRUFZbEJyRCxPQVprQixDQVlWLFlBQU07QUFDYixzQkFBSXVDLE9BQUosRUFBYTtBQUNYalEsZ0NBQVksQ0FBQ2lRLE9BQUQsQ0FBWjtBQUNEO0FBQ0YsaUJBaEJrQixDOzs7QUFBckI2Qiw0Qjs7Ozs7Ozs7QUFrQkEscUJBQUszZixPQUFMLENBQWF5QyxLQUFiLENBQW1CLHFCQUFuQjs7a0RBRU87QUFBQ21ZLHdCQUFNLEVBQUU7QUFBVCxpQjs7O0FBR0hBLHNCLEdBQTBCLEtBQUtnRiw4QkFBTCxDQUFvQ0QsWUFBcEMsQzs7c0JBRTVCL0UsTUFBTSxLQUFLLEk7Ozs7O2tEQUNOO0FBQUNBLHdCQUFNLEVBQU5BO0FBQUQsaUI7OztBQUdIa0Usd0IsR0FBVzFtQixJQUFJLENBQUNDLEdBQUwsRTs7dUJBQ2UsS0FBS3duQixzQ0FBTCxDQUE0Q3ZaLE9BQTVDLEVBQXFEcVosWUFBckQsQzs7O0FBQTFCRyxpQzs7QUFFTixxQkFBSzlmLE9BQUwsQ0FBYStmLEtBQWIsQ0FBbUIsd0NBQW5CLEVBQTZERCxpQkFBN0QsRUFBZ0ZoQixRQUFRLEdBQUd6RSxLQUEzRjs7a0RBRU95RixpQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvU0FHa0JoSCxNLEVBQWlCd0csa0I7Ozs7Ozs7O0FBQ3BDdlosbUIsR0FBTSxLQUFLbVosUUFBTCxDQUFjLENBQUNwRyxNQUFNLENBQUN4UyxPQUFSLEVBQWlCLFFBQWpCLEVBQTJCd1MsTUFBTSxDQUFDM1osUUFBbEMsRUFBNEMsYUFBNUMsRUFBMkQsUUFBM0QsQ0FBZCxFQUFvRjJCLFFBQXBGLEU7QUFDTm9ILHdCLEdBQVcsSUFBSUMsUUFBSixFO0FBQ1hLLG9CLEdBQXFDO0FBQ3pDbVcsNEJBQVUsRUFBVkEsVUFEeUM7QUFFekNxQiw4QkFBWSxFQUFFbEgsTUFBTSxDQUFDa0gsWUFGb0I7QUFHekNWLG9DQUFrQixFQUFFO0FBQ2xCeGhCLHdCQUFJLEVBQUUsS0FBS3loQiwwQkFBTCxDQUFnQ0Qsa0JBQWtCLENBQUN4aEIsSUFBbkQsQ0FEWTtBQUVsQnVQLHVCQUFHLEVBQUVpUyxrQkFBa0IsQ0FBQ2pTO0FBRk47QUFIcUIsaUI7QUFTM0NuRix3QkFBUSxDQUFDRSxNQUFULENBQWdCLFVBQWhCLEVBQTRCckUsSUFBSSxDQUFDUCxTQUFMLENBQWVnRixJQUFmLENBQTVCO0FBRU02UixxQixHQUFRamlCLElBQUksQ0FBQ0MsR0FBTCxFOztBQUlSeWxCLHVCLEdBQVUsSTs7dUJBRU85VSxPQUFPLENBQUMrVSxJQUFSLENBQWEsQ0FDaEN6VixLQUFLLENBQUN2QyxHQUFELEVBQU07QUFDVHdDLHdCQUFNLEVBQUUsTUFEQztBQUVUQyxzQkFBSSxFQUFFTjtBQUZHLGlCQUFOLENBRDJCLEVBS2hDLElBQUljLE9BQUosQ0FBc0IsVUFBQTJCLE9BQU87QUFBQSx5QkFDM0JtVCxPQUFPLEdBQUdqa0IsTUFBTSxDQUFDc1IsVUFBUCxDQUFrQixZQUFNO0FBQ2hDLDBCQUFJLENBQUNuTCxPQUFMLENBQWF5QyxLQUFiLENBQW1CLGtDQUFuQixFQUF1RCxJQUFJbkIsS0FBSiw2Q0FBK0N5RSxHQUEvQyxPQUF2RDs7QUFDQTRFLDJCQUFPLENBQUM7QUFBQ2lRLDRCQUFNLEVBQUU7QUFBVCxxQkFBRCxDQUFQO0FBQ0QsbUJBSFMsRUFHUCxNQUFJLENBQUNnRSxRQUhFLENBRGlCO0FBQUEsaUJBQTdCLENBTGdDLENBQWIsRUFZbEJyRCxPQVprQixDQVlWLFlBQU07QUFDYixzQkFBSXVDLE9BQUosRUFBYTtBQUNYalEsZ0NBQVksQ0FBQ2lRLE9BQUQsQ0FBWjtBQUNEO0FBQ0YsaUJBaEJrQixDOzs7QUFBckI2Qiw0Qjs7Ozs7Ozs7QUFrQkEscUJBQUszZixPQUFMLENBQWF5QyxLQUFiLENBQW1CLGtDQUFuQjs7a0RBRU87QUFBQ21ZLHdCQUFNLEVBQUU7QUFBVCxpQjs7O0FBR0hBLHNCLEdBQXFDLEtBQUtxRix5Q0FBTCxDQUErQ04sWUFBL0MsQzs7c0JBRXZDL0UsTUFBTSxLQUFLLEk7Ozs7O2tEQUNOO0FBQUNBLHdCQUFNLEVBQU5BO0FBQUQsaUI7OztBQUdIa0Usd0IsR0FBVzFtQixJQUFJLENBQUNDLEdBQUwsRTs7dUJBQzBCLEtBQUs2bkIsaURBQUwsQ0FBdURQLFlBQXZELEM7OztBQUFyQ1EsNEM7O0FBRU4scUJBQUtuZ0IsT0FBTCxDQUFhK2YsS0FBYixDQUFtQixxREFBbkIsRUFBMEVJLDRCQUExRSxFQUF3R3JCLFFBQVEsR0FBR3pFLEtBQW5IOztrREFFTzhGLDRCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzRSQUlQckgsTSxFQUNBbUIscUIsRUFDQVUsc0IsRUFDQXVDLFksRUFDQUYsVzs7Ozs7Ozs7QUFFTWpYLG1CLEdBQU0sS0FBS21aLFFBQUwsQ0FBYyxDQUFDcEcsTUFBTSxDQUFDeFMsT0FBUixFQUFpQixRQUFqQixFQUEyQndTLE1BQU0sQ0FBQzNaLFFBQWxDLEVBQTRDLFNBQTVDLENBQWQsRUFBc0UyQixRQUF0RSxFO0FBQ05vSCx3QixHQUFXLElBQUlDLFFBQUosRTtBQUNYSyxvQixHQUFvQztBQUN4Q21XLDRCQUFVLEVBQVZBLFVBRHdDO0FBRXhDcUIsOEJBQVksRUFBRWxILE1BQU0sQ0FBQ2tILFlBRm1CO0FBR3hDL0YsdUNBQXFCLEVBQXJCQSxxQkFId0M7QUFJeENVLHdDQUFzQixFQUF0QkEsc0JBSndDO0FBS3hDdUMsOEJBQVksRUFBRUQsZ0dBQUEsQ0FBMERDLFlBQTFELENBTDBCO0FBTXhDRiw2QkFBVyxFQUFFRCw2RkFBQSxDQUF1REMsV0FBdkQ7QUFOMkIsaUI7QUFTMUM5VSx3QkFBUSxDQUFDRSxNQUFULENBQWdCLFVBQWhCLEVBQTRCckUsSUFBSSxDQUFDUCxTQUFMLENBQWVnRixJQUFmLENBQTVCO0FBRU02UixxQixHQUFRamlCLElBQUksQ0FBQ0MsR0FBTCxFOztBQUlSeWxCLHVCLEdBQVUsSTs7dUJBRU85VSxPQUFPLENBQUMrVSxJQUFSLENBQWEsQ0FDaEN6VixLQUFLLENBQUN2QyxHQUFELEVBQU07QUFDVHdDLHdCQUFNLEVBQUUsTUFEQztBQUVUQyxzQkFBSSxFQUFFTjtBQUZHLGlCQUFOLENBRDJCLEVBS2hDLElBQUljLE9BQUosQ0FBc0IsVUFBQTJCLE9BQU87QUFBQSx5QkFDM0JtVCxPQUFPLEdBQUdqa0IsTUFBTSxDQUFDc1IsVUFBUCxDQUFrQixZQUFNO0FBQ2hDLDBCQUFJLENBQUNuTCxPQUFMLENBQWF5QyxLQUFiLENBQW1CLG1DQUFuQixFQUF3RCxJQUFJbkIsS0FBSix3Q0FBMEN5RSxHQUExQyxPQUF4RDs7QUFDQTRFLDJCQUFPLENBQUM7QUFBQ2lRLDRCQUFNLEVBQUU7QUFBVCxxQkFBRCxDQUFQO0FBQ0QsbUJBSFMsRUFHUCxNQUFJLENBQUNnRSxRQUhFLENBRGlCO0FBQUEsaUJBQTdCLENBTGdDLENBQWIsRUFZbEJyRCxPQVprQixDQVlWLFlBQU07QUFDYixzQkFBSXVDLE9BQUosRUFBYTtBQUNYalEsZ0NBQVksQ0FBQ2lRLE9BQUQsQ0FBWjtBQUNEO0FBQ0YsaUJBaEJrQixDOzs7QUFBckI2Qiw0Qjs7Ozs7Ozs7QUFrQkEscUJBQUszZixPQUFMLENBQWF5QyxLQUFiLENBQW1CLG1DQUFuQjs7a0RBRU87QUFBQ21ZLHdCQUFNLEVBQUU7QUFBVCxpQjs7O0FBR0hBLHNCLEdBQTJDLEtBQUt3RiwrQ0FBTCxDQUFxRFQsWUFBckQsQztBQUMzQ2Isd0IsR0FBVzFtQixJQUFJLENBQUNDLEdBQUwsRTs7QUFFakIscUJBQUsySCxPQUFMLENBQWFDLElBQWIsQ0FBa0IsZ0RBQWxCLEVBQW9FMmEsTUFBcEUsRUFBNEVrRSxRQUFRLEdBQUd6RSxLQUF2Rjs7a0RBRU87QUFBQ08sd0JBQU0sRUFBTkE7QUFBRCxpQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnU0FHYzlCLE0sRUFBaUJ1SCxVLEVBQStCQyxrQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQTZCbFEsdUIsOERBQW9CLEU7QUFDaEhySyxtQixHQUFNLEtBQUttWixRQUFMLENBQWMsQ0FBQ3BHLE1BQU0sQ0FBQ3hTLE9BQVIsRUFBaUIsUUFBakIsRUFBMkJ3UyxNQUFNLENBQUMzWixRQUFsQyxFQUE0QyxLQUE1QyxFQUFtRCxZQUFuRCxDQUFkLEVBQWdGMkIsUUFBaEYsRTtBQUNOb0gsd0IsR0FBVyxJQUFJQyxRQUFKLEU7QUFDWEssb0IsR0FBaUM7QUFDckNtVyw0QkFBVSxFQUFWQSxVQURxQztBQUVyQ3FCLDhCQUFZLEVBQUVsSCxNQUFNLENBQUNrSCxZQUZnQjtBQUdyQ0ssNEJBQVUsRUFBVkEsVUFIcUM7QUFJckNDLG9DQUFrQixFQUFsQkEsa0JBSnFDO0FBS3JDbFEseUJBQU8sRUFBUEE7QUFMcUMsaUI7QUFRdkNsSSx3QkFBUSxDQUFDRSxNQUFULENBQWdCLFVBQWhCLEVBQTRCckUsSUFBSSxDQUFDUCxTQUFMLENBQWVnRixJQUFmLENBQTVCO0FBRU02UixxQixHQUFRamlCLElBQUksQ0FBQ0MsR0FBTCxFOztBQUlSeWxCLHVCLEdBQVUsSTs7dUJBRU85VSxPQUFPLENBQUMrVSxJQUFSLENBQWEsQ0FDaEN6VixLQUFLLENBQUN2QyxHQUFELEVBQU07QUFDVHdDLHdCQUFNLEVBQUUsTUFEQztBQUVUQyxzQkFBSSxFQUFFTjtBQUZHLGlCQUFOLENBRDJCLEVBS2hDLElBQUljLE9BQUosQ0FBc0IsVUFBQTJCLE9BQU87QUFBQSx5QkFDM0JtVCxPQUFPLEdBQUdqa0IsTUFBTSxDQUFDc1IsVUFBUCxDQUFrQixZQUFNO0FBQ2hDLDBCQUFJLENBQUNuTCxPQUFMLENBQWF5QyxLQUFiLENBQW1CLDhCQUFuQixFQUFtRCxJQUFJbkIsS0FBSix5Q0FBMkN5RSxHQUEzQyxPQUFuRDs7QUFDQTRFLDJCQUFPLENBQUM7QUFBQ2lRLDRCQUFNLEVBQUU7QUFBVCxxQkFBRCxDQUFQO0FBQ0QsbUJBSFMsRUFHUCxNQUFJLENBQUNnRSxRQUhFLENBRGlCO0FBQUEsaUJBQTdCLENBTGdDLENBQWIsRUFZbEJyRCxPQVprQixDQVlWLFlBQU07QUFDYixzQkFBSXVDLE9BQUosRUFBYTtBQUNYalEsZ0NBQVksQ0FBQ2lRLE9BQUQsQ0FBWjtBQUNEO0FBQ0YsaUJBaEJrQixDOzs7QUFBckI2Qiw0Qjs7Ozs7Ozs7QUFrQkEscUJBQUszZixPQUFMLENBQWF5QyxLQUFiLENBQW1CLDhCQUFuQjs7a0RBRU87QUFBQ21ZLHdCQUFNLEVBQUU7QUFBVCxpQjs7O0FBR0hBLHNCLEdBQWlDLEtBQUsyRixxQ0FBTCxDQUEyQ1osWUFBM0MsQzs7c0JBRW5DL0UsTUFBTSxLQUFLLEk7Ozs7O2tEQUNOO0FBQUNBLHdCQUFNLEVBQU5BO0FBQUQsaUI7OztBQUdIa0Usd0IsR0FBVzFtQixJQUFJLENBQUNDLEdBQUwsRTs7dUJBQ3NCLEtBQUttb0IsNkNBQUwsQ0FBbURiLFlBQW5ELEM7OztBQUFqQ2Msd0M7O0FBRU4scUJBQUt6Z0IsT0FBTCxDQUFhQyxJQUFiLENBQWtCLGlEQUFsQixFQUFxRXdnQix3QkFBckUsRUFBK0YzQixRQUFRLEdBQUd6RSxLQUExRzs7a0RBRU9vRyx3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs2UkFHVzNILE0sRUFBaUJwUCxNOzs7Ozs7OztBQUM3QjNELG1CLEdBQU0sS0FBS21aLFFBQUwsQ0FBYyxDQUFDcEcsTUFBTSxDQUFDeFMsT0FBUixFQUFpQixRQUFqQixFQUEyQndTLE1BQU0sQ0FBQzNaLFFBQWxDLEVBQTRDLFNBQTVDLENBQWQsRUFBc0UyQixRQUF0RSxFO0FBQ05vSCx3QixHQUFXLElBQUlDLFFBQUosRTtBQUNYSyxvQixHQUE4QjtBQUNsQ21XLDRCQUFVLEVBQVZBLFVBRGtDO0FBRWxDcUIsOEJBQVksRUFBRWxILE1BQU0sQ0FBQ2tILFlBRmE7QUFHbEN0Vyx3QkFBTSxFQUFOQSxNQUhrQztBQUlsQzBHLHlCQUFPLEVBQUU7QUFKeUIsaUI7QUFPcENsSSx3QkFBUSxDQUFDRSxNQUFULENBQWdCLFVBQWhCLEVBQTRCckUsSUFBSSxDQUFDUCxTQUFMLENBQWVnRixJQUFmLENBQTVCO0FBRU02UixxQixHQUFRamlCLElBQUksQ0FBQ0MsR0FBTCxFOztBQUlSeWxCLHVCLEdBQVUsSTs7dUJBRU85VSxPQUFPLENBQUMrVSxJQUFSLENBQWEsQ0FDaEN6VixLQUFLLENBQUN2QyxHQUFELEVBQU07QUFDVHdDLHdCQUFNLEVBQUUsTUFEQztBQUVUQyxzQkFBSSxFQUFFTixRQUZHO0FBR1RwRSx1QkFBSyxFQUFFO0FBSEUsaUJBQU4sQ0FEMkIsRUFNaEMsSUFBSWtGLE9BQUosQ0FBc0IsVUFBQTJCLE9BQU87QUFBQSx5QkFDM0JtVCxPQUFPLEdBQUdqa0IsTUFBTSxDQUFDc1IsVUFBUCxDQUFrQixZQUFNO0FBQ2hDLDBCQUFJLENBQUNuTCxPQUFMLENBQWF5QyxLQUFiLENBQW1CLHFCQUFuQixFQUEwQyxJQUFJbkIsS0FBSixvQ0FBc0N5RSxHQUF0QyxPQUExQzs7QUFDQTRFLDJCQUFPLENBQUM7QUFBQ2lRLDRCQUFNLEVBQUU7QUFBVCxxQkFBRCxDQUFQO0FBQ0QsbUJBSFMsRUFHUCxNQUFJLENBQUNnRSxRQUhFLENBRGlCO0FBQUEsaUJBQTdCLENBTmdDLENBQWIsRUFhbEJyRCxPQWJrQixDQWFWLFlBQU07QUFDYixzQkFBSXVDLE9BQUosRUFBYTtBQUNYalEsZ0NBQVksQ0FBQ2lRLE9BQUQsQ0FBWjtBQUNEO0FBQ0YsaUJBakJrQixDOzs7QUFBckI2Qiw0Qjs7Ozs7Ozs7QUFtQkEscUJBQUszZixPQUFMLENBQWF5QyxLQUFiLENBQW1CLHlCQUFuQjs7a0RBRU87QUFBQ21ZLHdCQUFNLEVBQUU7QUFBVCxpQjs7O0FBR0hBLHNCLEdBQThCLEtBQUs4RixxQ0FBTCxDQUEyQ2YsWUFBM0MsQzs7c0JBRWhDL0UsTUFBTSxLQUFLLEk7Ozs7O2tEQUNOO0FBQUNBLHdCQUFNLEVBQU5BO0FBQUQsaUI7OztBQUdIa0Usd0IsR0FBVzFtQixJQUFJLENBQUNDLEdBQUwsRTs7dUJBQ21CLEtBQUtzb0IsMENBQUwsQ0FBZ0RoQixZQUFoRCxDOzs7QUFBOUJpQixxQzs7QUFFTixxQkFBSzVnQixPQUFMLENBQWFDLElBQWIsQ0FBa0IsNkNBQWxCLEVBQWlFMmdCLHFCQUFqRSxFQUF3RjlCLFFBQVEsR0FBR3pFLEtBQW5HOztrREFFT3VHLHFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7NkJBR0FDLEksRUFBcUI7QUFDNUIsVUFBTXBGLEdBQUcsR0FBRyxJQUFJeFYsR0FBSixDQUFRLEtBQUs0WCxJQUFiLENBQVo7QUFDQSxVQUFNaUQsV0FBVyxHQUFHckYsR0FBRyxDQUFDdlYsUUFBSixDQUFhdkwsS0FBYixDQUFtQixHQUFuQixDQUFwQjtBQUVBbW1CLGlCQUFXLENBQUNyZ0IsTUFBWixHQUFxQnFnQixXQUFXLENBQUNyZ0IsTUFBWixHQUFxQixDQUExQztBQUVBZ2IsU0FBRyxDQUFDdlYsUUFBSixHQUFlNGEsV0FBVyxDQUFDQyxNQUFaLE9BQUFELFdBQVcsd0hBQVdELElBQVgsRUFBWCxDQUE0QmxMLElBQTVCLENBQWlDLEdBQWpDLENBQWY7QUFFQSxhQUFPOEYsR0FBUDtBQUNEOzs7bUNBRThCO0FBQzdCLFVBQU1BLEdBQUcsR0FBRyxJQUFJeFYsR0FBSixDQUFRLEtBQUs0WCxJQUFiLENBQVo7QUFDQSxVQUFNWSxVQUFVLEdBQUczVyx1RUFBbkI7QUFFQTJULFNBQUcsQ0FBQ3plLE1BQUosY0FBaUIsSUFBSUYsZUFBSixDQUFvQixDQUFDLENBQUMsTUFBRCxFQUFTLE1BQVQsQ0FBRCxFQUFtQixDQUFDLFNBQUQsRUFBWTJoQixVQUFaLENBQW5CLEVBQTRDLENBQUMsR0FBRCxZQUFTcm1CLElBQUksQ0FBQ0MsR0FBTCxFQUFULEVBQTVDLENBQXBCLEVBQXlGeUksUUFBekYsRUFBakI7QUFFQSxhQUFPMmEsR0FBRyxDQUFDM2EsUUFBSixFQUFQO0FBQ0Q7OzttREFFc0MrSCxRLEVBQXFDO0FBQzFFLFVBQUksQ0FBQ0EsUUFBTCxFQUFlO0FBQ2IsZUFBTyxRQUFQO0FBQ0Q7O0FBRUQsY0FBUUEsUUFBUSxDQUFDK1IsTUFBakI7QUFDRSxhQUFLLEdBQUw7QUFDRSxpQkFBTyxJQUFQOztBQUNGLGFBQUssR0FBTDtBQUNFLGlCQUFPLGNBQVA7O0FBQ0YsYUFBSyxHQUFMO0FBQ0UsaUJBQU8sZ0JBQVA7O0FBQ0YsYUFBSyxHQUFMO0FBQ0UsaUJBQU8sYUFBUDs7QUFDRixhQUFLLEdBQUw7QUFDRSxpQkFBTyxTQUFQOztBQUNGLGFBQUssR0FBTDtBQUNFLGlCQUFPLFVBQVA7O0FBQ0YsYUFBSyxHQUFMO0FBQ0UsaUJBQU8sY0FBUDs7QUFDRjtBQUNFLGlCQUFPLFFBQVA7QUFoQko7QUFrQkQ7Ozs4REFFaUQvUixRLEVBQWdEO0FBQ2hHLFVBQUksQ0FBQ0EsUUFBTCxFQUFlO0FBQ2IsZUFBTyxRQUFQO0FBQ0Q7O0FBRUQsY0FBUUEsUUFBUSxDQUFDK1IsTUFBakI7QUFDRSxhQUFLLEdBQUw7QUFDRSxpQkFBTyxJQUFQOztBQUNGLGFBQUssR0FBTDtBQUNFLGlCQUFPLGNBQVA7O0FBQ0YsYUFBSyxHQUFMO0FBQ0UsaUJBQU8sU0FBUDs7QUFDRixhQUFLLEdBQUw7QUFDRSxpQkFBTyxVQUFQOztBQUNGLGFBQUssR0FBTDtBQUNFLGlCQUFPLGNBQVA7O0FBQ0Y7QUFDRSxpQkFBTyxRQUFQO0FBWko7QUFjRDs7O29FQUV1RC9SLFEsRUFBc0Q7QUFDNUcsVUFBSSxDQUFDQSxRQUFMLEVBQWU7QUFDYixlQUFPLFFBQVA7QUFDRDs7QUFFRCxjQUFRQSxRQUFRLENBQUMrUixNQUFqQjtBQUNFLGFBQUssR0FBTDtBQUNFLGlCQUFPLElBQVA7O0FBQ0YsYUFBSyxHQUFMO0FBQ0UsaUJBQU8sY0FBUDs7QUFDRixhQUFLLEdBQUw7QUFDRSxpQkFBTyxTQUFQOztBQUNGLGFBQUssR0FBTDtBQUNFLGlCQUFPLFVBQVA7O0FBQ0YsYUFBSyxHQUFMO0FBQ0UsaUJBQU8sY0FBUDs7QUFDRjtBQUNFLGlCQUFPLFFBQVA7QUFaSjtBQWNEOzs7MERBRTZDL1IsUSxFQUE0QztBQUN4RixVQUFJLENBQUNBLFFBQUwsRUFBZTtBQUNiLGVBQU8sUUFBUDtBQUNEOztBQUVELGNBQVFBLFFBQVEsQ0FBQytSLE1BQWpCO0FBQ0UsYUFBSyxHQUFMO0FBQ0UsaUJBQU8sSUFBUDs7QUFDRixhQUFLLEdBQUw7QUFDRSxpQkFBTyxjQUFQOztBQUNGLGFBQUssR0FBTDtBQUNFLGlCQUFPLFNBQVA7O0FBQ0YsYUFBSyxHQUFMO0FBQ0UsaUJBQU8sVUFBUDs7QUFDRixhQUFLLEdBQUw7QUFDRSxpQkFBTyxjQUFQOztBQUNGO0FBQ0UsaUJBQU8sUUFBUDtBQVpKO0FBY0Q7OzswREFFNkMvUixRLEVBQXlDO0FBQ3JGLFVBQUksQ0FBQ0EsUUFBTCxFQUFlO0FBQ2IsZUFBTyxRQUFQO0FBQ0Q7O0FBRUQsY0FBUUEsUUFBUSxDQUFDK1IsTUFBakI7QUFDRSxhQUFLLEdBQUw7QUFDRSxpQkFBTyxJQUFQOztBQUNGLGFBQUssR0FBTDtBQUNFLGlCQUFPLGNBQVA7O0FBQ0YsYUFBSyxHQUFMO0FBQ0UsaUJBQU8sU0FBUDs7QUFDRixhQUFLLEdBQUw7QUFDRSxpQkFBTyxVQUFQOztBQUNGLGFBQUssR0FBTDtBQUNFLGlCQUFPLGNBQVA7O0FBQ0Y7QUFDRSxpQkFBTyxRQUFQO0FBWko7QUFjRDs7OztzVEFFb0R0VSxPLEVBQWlCdUMsUTs7Ozs7Ozt1QkFDakRBLFFBQVEsQ0FBQ21ZLElBQVQsRTs7O0FBQWI3YyxvQjtBQUNBMmIsaUMsR0FBNEM7QUFBQ2xGLHdCQUFNLEVBQUV6VyxJQUFJLENBQUN5VztBQUFkLGlCO0FBRWxEa0YsaUNBQWlCLENBQUNoSCxNQUFsQixHQUEyQjtBQUN6QnhTLHlCQUFPLEVBQVBBLE9BRHlCO0FBRXpCbkgsMEJBQVEsRUFBRWdGLElBQUksQ0FBQ2hGLFFBRlU7QUFHekI2Z0IsOEJBQVksRUFBRTdiLElBQUksQ0FBQzZiO0FBSE0saUJBQTNCO0FBTUFGLGlDQUFpQixDQUFDMUgsR0FBbEIsR0FBd0JqVSxJQUFJLENBQUNpVSxHQUE3Qjs7cUJBRUlqVSxJOzs7OztxQkFDRUEsSUFBSSxDQUFDOGMsZ0I7Ozs7O0FBQ0RBLGdDLEdBQXFDLEU7O3FCQUV2QzljLElBQUksQ0FBQzhjLGdCQUFMLENBQXNCQyxZOzs7OzsrQkFDaEIvYyxJQUFJLENBQUM4YyxnQkFBTCxDQUFzQkMsWTtrREFDdkIsc0IseUJBSUEsdUIseUJBSUEsdUI7Ozs7QUFQSEQsZ0NBQWdCLENBQUNDLFlBQWpCLEdBQWdDLFVBQWhDOzs7O0FBSUFELGdDQUFnQixDQUFDQyxZQUFqQixHQUFnQyxZQUFoQzs7OztBQUlBRCxnQ0FBZ0IsQ0FBQ0MsWUFBakIsR0FBZ0MsWUFBaEM7Ozs7QUFJQTNmLGdGQUFpQixDQUFDNEMsSUFBSSxDQUFDOGMsZ0JBQUwsQ0FBc0JDLFlBQXZCLENBQWpCOzs7QUFJTixvQkFBSSxPQUFPL2MsSUFBSSxDQUFDOGMsZ0JBQUwsQ0FBc0JFLG9CQUE3QixLQUFzRCxRQUExRCxFQUFvRTtBQUNsRUYsa0NBQWdCLENBQUNFLG9CQUFqQixHQUF3Q2hkLElBQUksQ0FBQzhjLGdCQUFMLENBQXNCRSxvQkFBOUQ7QUFDRDs7QUFFRCxvQkFBSWhkLElBQUksQ0FBQzhjLGdCQUFMLENBQXNCRyxVQUExQixFQUFzQztBQUM5QkEsNEJBRDhCLEdBQ0QsRUFEQzs7QUFHcEMsdUJBQVNqWCxDQUFULEdBQWEsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHaEcsSUFBSSxDQUFDOGMsZ0JBQUwsQ0FBc0JHLFVBQXRCLENBQWlDM2dCLE1BQXJELEVBQTZEMEosQ0FBQyxFQUE5RCxFQUFrRTtBQUNoRWlYLDhCQUFVLENBQUN2aEIsSUFBWCxDQUFnQjtBQUNkd2hCLDBCQUFJLEVBQUVsZCxJQUFJLENBQUM4YyxnQkFBTCxDQUFzQkcsVUFBdEIsQ0FBaUNqWCxDQUFqQyxFQUFvQ2tYLElBRDVCO0FBRWRDLDhCQUFRLEVBQUVuZCxJQUFJLENBQUM4YyxnQkFBTCxDQUFzQkcsVUFBdEIsQ0FBaUNqWCxDQUFqQyxFQUFvQ21YLFFBRmhDO0FBR2RDLGdDQUFVLEVBQUVwZCxJQUFJLENBQUM4YyxnQkFBTCxDQUFzQkcsVUFBdEIsQ0FBaUNqWCxDQUFqQyxFQUFvQ29YO0FBSGxDLHFCQUFoQjtBQUtEOztBQUVETixrQ0FBZ0IsQ0FBQ0csVUFBakIsR0FBOEJBLFVBQTlCO0FBQ0Q7O3FCQUVHamQsSUFBSSxDQUFDOGMsZ0JBQUwsQ0FBc0JPLGtCOzs7OzsrQkFDaEJyZCxJQUFJLENBQUM4YyxnQkFBTCxDQUFzQk8sa0I7a0RBQ3ZCLHVCLHlCQUlBLHlCLHlCQUlBLDBCOzs7O0FBUEhQLGdDQUFnQixDQUFDTyxrQkFBakIsR0FBc0MsS0FBdEM7Ozs7QUFJQVAsZ0NBQWdCLENBQUNPLGtCQUFqQixHQUFzQyxPQUF0Qzs7Ozs7OztBQU9BamdCLGdGQUFpQixDQUFDNEMsSUFBSSxDQUFDOGMsZ0JBQUwsQ0FBc0JPLGtCQUF2QixDQUFqQjs7O0FBSU4sb0JBQUlyZCxJQUFJLENBQUM4YyxnQkFBTCxDQUFzQlEsWUFBMUIsRUFBd0M7QUFDdENSLGtDQUFnQixDQUFDUSxZQUFqQixHQUFnQ3RkLElBQUksQ0FBQzhjLGdCQUFMLENBQXNCUSxZQUF0RDtBQUNEOztxQkFFR3RkLElBQUksQ0FBQzhjLGdCQUFMLENBQXNCUyxhOzs7OzsrQkFDaEJ2ZCxJQUFJLENBQUM4YyxnQkFBTCxDQUFzQlMsYTtrREFDdkIsd0IseUJBSUEsc0I7Ozs7QUFISFQsZ0NBQWdCLENBQUNTLGFBQWpCLEdBQWlDLFdBQWpDOzs7O0FBSUFULGdDQUFnQixDQUFDUyxhQUFqQixHQUFpQyxTQUFqQzs7OztBQUlBbmdCLGdGQUFpQixDQUFDNEMsSUFBSSxDQUFDOGMsZ0JBQUwsQ0FBc0JTLGFBQXZCLENBQWpCOzs7QUFJTjVCLGlDQUFpQixDQUFDbUIsZ0JBQWxCLEdBQXFDQSxnQkFBckM7OztBQUdGLG9CQUFJOWMsSUFBSSxDQUFDZ2MsNEJBQUwsSUFBcUNoYyxJQUFJLENBQUNnYyw0QkFBTCxDQUFrQ2Isa0JBQTNFLEVBQStGO0FBQzdGUSxtQ0FBaUIsQ0FBQ0ssNEJBQWxCLEdBQWlEO0FBQUNiLHNDQUFrQixFQUFFLEtBQUtxQyxpREFBTCxDQUF1RHhkLElBQUksQ0FBQ2djLDRCQUFMLENBQWtDYixrQkFBekY7QUFBckIsbUJBQWpEO0FBQ0Q7O0FBRUQsb0JBQUluYixJQUFJLENBQUN5ZCwrQkFBTCxJQUF3Q3pkLElBQUksQ0FBQ3lkLCtCQUFMLENBQXFDdEMsa0JBQWpGLEVBQXFHO0FBQ25HUSxtQ0FBaUIsQ0FBQzhCLCtCQUFsQixHQUFvRDtBQUFDdEMsc0NBQWtCLEVBQUUsS0FBS3FDLGlEQUFMLENBQXVEeGQsSUFBSSxDQUFDeWQsK0JBQUwsQ0FBcUN0QyxrQkFBNUY7QUFBckIsbUJBQXBEO0FBQ0Q7O0FBRUQsb0JBQUluYixJQUFJLENBQUMwZCw4QkFBTCxJQUF1QzFkLElBQUksQ0FBQzBkLDhCQUFMLENBQW9DdkMsa0JBQS9FLEVBQW1HO0FBQ2pHUSxtQ0FBaUIsQ0FBQytCLDhCQUFsQixHQUFtRDtBQUFDdkMsc0NBQWtCLEVBQUUsS0FBS3FDLGlEQUFMLENBQXVEeGQsSUFBSSxDQUFDMGQsOEJBQUwsQ0FBb0N2QyxrQkFBM0Y7QUFBckIsbUJBQW5EO0FBQ0Q7OztrREFHSVEsaUI7Ozs7Ozs7Ozs7Ozs7Ozs7OztzRUFHaURSLGtCLEVBQW9FO0FBQzVILFVBQU13QyxxQkFBZ0QsR0FBRztBQUFDelUsV0FBRyxFQUFFaVMsa0JBQWtCLENBQUNqUztBQUF6QixPQUF6RDs7QUFFQSxjQUFRaVMsa0JBQWtCLENBQUN4aEIsSUFBM0I7QUFDRSxhQUFLLE9BQUw7QUFDRWdrQiwrQkFBcUIsQ0FBQ2hrQixJQUF0QixHQUE2QixPQUE3QjtBQUVBOztBQUNGLGFBQUssUUFBTDtBQUNFZ2tCLCtCQUFxQixDQUFDaGtCLElBQXRCLEdBQTZCLFFBQTdCO0FBRUE7O0FBQ0Y7QUFDRXlELDBFQUFpQixDQUFDK2Qsa0JBQWtCLENBQUN4aEIsSUFBcEIsQ0FBakI7QUFWSjs7QUFhQSxhQUFPZ2tCLHFCQUFQO0FBQ0Q7Ozs7aVVBRStEalosUTs7Ozs7Ozt1QkFDM0NBLFFBQVEsQ0FBQ21ZLElBQVQsRTs7O0FBQWI3YyxvQjtBQUNBZ2MsNEMsR0FBa0U7QUFBQ3ZGLHdCQUFNLEVBQUV6VyxJQUFJLENBQUN5VztBQUFkLGlCOztBQUV4RSxvQkFBSXpXLElBQUksSUFBSUEsSUFBSSxDQUFDbWIsa0JBQWpCLEVBQXFDO0FBQ25DYSw4Q0FBNEIsQ0FBQ2Isa0JBQTdCLEdBQWtELEtBQUtxQyxpREFBTCxDQUF1RHhkLElBQUksQ0FBQ21iLGtCQUE1RCxDQUFsRDtBQUNEOztrREFFTWEsNEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NlRBR21EdFgsUTs7Ozs7Ozt1QkFDdkNBLFFBQVEsQ0FBQ21ZLElBQVQsRTs7O0FBQWI3YyxvQjtBQUNBc2Msd0MsR0FBMEQ7QUFDOUQ3Rix3QkFBTSxFQUFFelcsSUFBSSxDQUFDeVcsTUFEaUQ7QUFFOUR4Syx5QkFBTyxFQUFFO0FBRnFELGlCOztBQUtoRSxvQkFBSWpNLElBQUosRUFBVTtBQUNSLHNCQUFJQSxJQUFJLENBQUNpTSxPQUFULEVBQWtCO0FBQ2hCcVEsNENBQXdCLENBQUNyUSxPQUF6QixHQUFtQ2pNLElBQUksQ0FBQ2lNLE9BQXhDO0FBQ0Q7QUFDRjs7a0RBRU1xUSx3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyVEFHZ0Q1WCxROzs7Ozs7O3VCQUNwQ0EsUUFBUSxDQUFDbVksSUFBVCxFOzs7QUFBYjdjLG9CO0FBQ0FtWSw2QixHQUE0QztBQUFDMUIsd0JBQU0sRUFBRXpXLElBQUksQ0FBQ3lXO0FBQWQsaUI7bURBRTNDMEIsYTs7Ozs7Ozs7Ozs7Ozs7Ozs7OytDQUcwQnhlLEksRUFBMkI7QUFDNUQsY0FBUUEsSUFBUjtBQUNFLGFBQUssUUFBTDtBQUNFLGlCQUFPLFFBQVA7O0FBQ0YsYUFBSyxPQUFMO0FBQ0UsaUJBQU8sT0FBUDs7QUFDRixhQUFLLFVBQUw7QUFDQSxhQUFLLFVBQUw7QUFDRSxnQkFBTSxJQUFJd0QsS0FBSixxQkFBdUJ4RCxJQUF2Qix3QkFBTjs7QUFDRjtBQUNFeUQsMEVBQWlCLENBQUN6RCxJQUFELENBQWpCO0FBVEo7QUFXRDs7O3dCQXRvQjJCO0FBQzFCLGFBQU8sS0FBS2loQixjQUFaO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4Rkg7QUFDQTtBQUNBO0FBQ0E7QUFLQSxJQUFNZ0QsbUJBQW1CLEdBQUcsU0FBNUI7O0lBRXFCMU8sUTs7Ozs7OzsrQkFHRGlELEssRUFBNkI7QUFDN0MsVUFBSSxDQUFDLEtBQUswTCxZQUFMLENBQWtCMUwsS0FBbEIsQ0FBTCxFQUErQjtBQUM3QmpELGdCQUFRLENBQUNyVCxPQUFULENBQWlCeUMsS0FBakIsQ0FBdUIseUJBQXZCLEVBQWtENlQsS0FBbEQ7O0FBRUEsZUFBT3BaLFNBQVA7QUFDRDs7QUFFRCxVQUFJO0FBQ0YsWUFBTStrQixvQkFBb0IsR0FBR0MsSUFBSSxDQUFDNUwsS0FBSyxDQUFDNkwsTUFBTixDQUFhSixtQkFBbUIsQ0FBQ3RoQixNQUFqQyxDQUFELENBQWpDO0FBQ0EsWUFBTTRlLGFBQWEsR0FBR3RiLElBQUksQ0FBQ3FlLEtBQUwsQ0FBV0gsb0JBQVgsQ0FBdEI7QUFFQTVDLHFCQUFhLENBQUMvSSxLQUFkLEdBQXNCdlMsSUFBSSxDQUFDcWUsS0FBTCxDQUFXL0MsYUFBYSxDQUFDL0ksS0FBekIsQ0FBdEI7QUFFQSxlQUFPK0ksYUFBUDtBQUNELE9BUEQsQ0FPRSxPQUFPMWdCLENBQVAsRUFBVTtBQUNWMFUsZ0JBQVEsQ0FBQ3JULE9BQVQsQ0FBaUJ5QyxLQUFqQixDQUF1QiwwQkFBdkIsRUFBbUQ5RCxDQUFuRDs7QUFFQSxlQUFPekIsU0FBUDtBQUNEO0FBQ0Y7OzsyQkFFYWtXLFcsRUFBNkI7QUFDekMsYUFBT0EsV0FBVyxJQUFJQSxXQUFXLENBQUNrRCxLQUEzQixJQUFvQ2xELFdBQVcsQ0FBQ2tELEtBQVosQ0FBa0JtRixHQUF0RCxHQUNMLElBQUl4VixHQUFKLENBQVFtTixXQUFXLENBQUNrRCxLQUFaLENBQWtCbUYsR0FBMUIsQ0FESyxHQUM0QixJQURuQztBQUVEOzs7K0JBRWlCckksVyxFQUFnQztBQUNoRCxhQUFPQSxXQUFXLElBQUlBLFdBQVcsQ0FBQzZMLGFBQTNCLEdBQ0w3TCxXQUFXLENBQUM2TCxhQURQLEdBQ3VCLEVBRDlCO0FBRUQ7OztpQ0FFbUIzSSxLLEVBQTJCO0FBQzdDLGFBQU8sQ0FBQyxDQUFDQSxLQUFGLElBQVdBLEtBQUssQ0FBQ2IsVUFBTixDQUFpQnNNLG1CQUFqQixDQUFsQjtBQUNEOzs7Ozs7bUhBcENrQjFPLFEsYUFDZXRVLG9FQUFBLENBQXdCLFVBQXhCLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1hwQztBQUNBO0FBQ0E7QUFDQTs7SUFFcUJ3TSxpQjs7Ozs7Ozt3QkFDdUI7QUFDeEM7QUFDQSxhQUFPclIsb0VBQUEsSUFDTEEsb0VBREssSUFFTEEsb0VBRkssSUFHTEEsb0VBSEY7QUFJRDs7O3dCQUUyQztBQUMxQztBQUNBLGFBQU9BLG9FQUFBLElBQ0xBLG9FQURLLElBRUxBLG9FQUZLLElBR0xBLG9FQUhGO0FBSUQ7Ozt3QkFFa0Q7QUFDakQsYUFBT0EscUVBQUEsS0FBZ0MsUUFBaEMsSUFBNENBLDZFQUFBLElBQXVDLEVBQTFGO0FBQ0Q7Ozt3QkFFNkM7QUFDNUMsYUFBT0EscUVBQUEsS0FBZ0MsUUFBaEMsSUFBNENBLDZFQUFBLElBQXVDLEVBQW5GLElBQ0xBLHFFQUFBLEtBQWdDLFNBQWhDLElBQTZDQSw2RUFBQSxJQUF1QyxFQUR0RjtBQUVEOzs7d0JBRXFDO0FBQ3BDLGFBQU9BLHFFQUFBLEtBQWdDLFFBQWhDLElBQTRDQSw2RUFBQSxJQUF1QyxFQUFuRixJQUNMQSxxRUFBQSxLQUFnQyxTQUFoQyxJQUE2Q0EsNkVBQUEsSUFBdUMsRUFEdEY7QUFFRDs7O3dCQUVvRDtBQUNuRCxhQUFPQSxxRUFBQSxLQUFnQyxRQUFoQyxJQUE0Q0EsNkVBQUEsSUFBdUMsRUFBMUY7QUFDRDs7O3dCQUVtRDtBQUNsRCxhQUFPQSxxRUFBQSxLQUFnQyxTQUFoQyxJQUE2Q0EsNkVBQUEsSUFBdUMsRUFBM0Y7QUFDRDs7O3dCQUV3QztBQUN2QyxhQUFPQSxxRUFBQSxLQUFnQyxRQUFoQyxJQUNMQSxxRUFBQSxLQUFnQyxnQkFEbEM7QUFFRDs7O3dCQUVtQztBQUNsQyxhQUFRQSxxRUFBQSxLQUFnQyxTQUFoQyxJQUE2Q0EsNkVBQUEsR0FBc0MsRUFBcEYsSUFDSkEscUVBQUEsS0FBZ0MsUUFBaEMsSUFBNENBLDZFQUFBLEdBQXNDLEVBRDlFLElBRUxBLHFFQUFBLEtBQWdDLE1BRjNCLElBR0xBLHFFQUFBLEtBQWdDLElBSGxDO0FBSUQ7Ozt3QkFFeUM7QUFDeEMsYUFBT0EscUVBQUEsS0FBZ0MsSUFBdkM7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMURIO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7SUFNcUJtb0IsYTtBQVFuQix5QkFBWUMsY0FBWixFQUE0QjFHLG1CQUE1QixFQUFzRTtBQUFBOztBQUFBLHdJQVBsQzdjLG9FQUFBLENBQXdCLGVBQXhCLENBT2tDOztBQUFBOztBQUFBLG9KQUwvQixJQUFJNUcseURBQUosRUFLK0I7O0FBQUE7O0FBQUE7O0FBQUEscUpBRnZDLENBRXVDOztBQUNwRSxTQUFLb3FCLGVBQUwsR0FBdUJELGNBQXZCO0FBQ0EsU0FBS0Usb0JBQUwsR0FBNEI1RyxtQkFBNUI7O0FBQ0EsU0FBSzJHLGVBQUwsQ0FBcUJyRyxXQUFyQixDQUFpQzNpQixHQUFqQyxDQUFxQyxJQUFyQztBQUNEOzs7OzBCQUVLa2lCLEcsRUFBVW5GLEssRUFBNEM7QUFBQTs7QUFDMUQsYUFBTzhHLDRGQUFBLENBQTZDM0IsR0FBN0MsRUFDSjdTLElBREksQ0FDQyxVQUFBZ1EsUUFBUSxFQUFJO0FBQ2hCLGFBQUksQ0FBQzJKLGVBQUwsQ0FBcUI5SyxNQUFyQixDQUE0QnhkLEtBQTVCLEdBQW9DLElBQXBDO0FBQ0EsYUFBSSxDQUFDc29CLGVBQUwsQ0FBcUIzSixRQUFyQixDQUE4QjNlLEtBQTlCLEdBQXNDMmUsUUFBdEM7O0FBQ0EsYUFBSSxDQUFDNVksT0FBTCxDQUFhQyxJQUFiLENBQWtCLG9CQUFsQixFQUF3QzJZLFFBQVEsQ0FBQzlYLFFBQVQsRUFBeEM7O0FBRUEsZUFBTzhYLFFBQVEsQ0FBQ3BILFNBQVQsQ0FBbUI4RSxLQUFuQixFQUEwQixJQUExQixFQUFnQyxLQUFJLENBQUNpTSxlQUFMLENBQXFCN0osWUFBckIsQ0FBa0N6ZSxLQUFsRSxDQUFQO0FBQ0QsT0FQSSxFQVFKMk8sSUFSSSxDQVFDLGdCQUEyRDtBQUFBLFlBQXpEZ1MsTUFBeUQsUUFBekRBLE1BQXlEO0FBQUEsWUFBakQ5QixNQUFpRCxRQUFqREEsTUFBaUQ7QUFBQSxZQUF6QytJLDhCQUF5QyxRQUF6Q0EsOEJBQXlDO0FBQUEsWUFBVHpKLEdBQVMsUUFBVEEsR0FBUztBQUMvRCxhQUFJLENBQUNtSyxlQUFMLENBQXFCekosTUFBckIsQ0FBNEI3ZSxLQUE1QixHQUFvQzZlLE1BQXBDO0FBQ0EsYUFBSSxDQUFDeUosZUFBTCxDQUFxQm5LLEdBQXJCLENBQXlCbmUsS0FBekIsR0FBaUNtZSxHQUFqQzs7QUFFQSxhQUFJLENBQUNtSyxlQUFMLENBQXFCRSw2Q0FBckI7O0FBRUEsYUFBSSxDQUFDemlCLE9BQUwsQ0FBYStmLEtBQWIsQ0FDRSxtREFERixFQUVFLEtBQUksQ0FBQ3dDLGVBQUwsQ0FBcUJwakIsUUFGdkIsRUFHRXliLE1BSEYsRUFJRWlILDhCQUpGOztBQU9BLGFBQUksQ0FBQ1UsZUFBTCxDQUFxQnhMLEtBQXJCLENBQTJCOWMsS0FBM0IsR0FBbUMsS0FBSSxDQUFDc29CLGVBQUwsQ0FBcUJHLGlDQUFyQixDQUF1RDlILE1BQXZELENBQW5DOztBQUVBLGFBQUksQ0FBQzJILGVBQUwsQ0FBcUJJLFdBQXJCLENBQWlDL0gsTUFBakM7O0FBRUEsWUFBSUEsTUFBTSxLQUFLLElBQWYsRUFBcUI7QUFDbkI7QUFDRDs7QUFFRCxZQUFNZ0ksUUFBUSxHQUFHZiw4QkFBOEIsQ0FBQ3ZDLGtCQUEvQixDQUFrRGpTLEdBQW5FO0FBQ0EsWUFBTStDLE9BQU8sR0FBRztBQUNkeVMseUJBQWUsRUFBRXpxQixJQUFJLENBQUNDLEdBQUwsS0FBYStmLEdBQWIsR0FBbUIsS0FBSSxDQUFDbUssZUFBTCxDQUFxQjNKLFFBQXJCLENBQThCM2UsS0FBOUIsQ0FBb0NtVSxhQUFwQyxHQUFvRCxDQUQxRTtBQUVkZ0ssYUFBRyxFQUFIQTtBQUZjLFNBQWhCO0FBS0EsZUFBTzBLLCtEQUFBLENBQW9CLEtBQUksQ0FBQ1AsZUFBTCxDQUFxQmxNLFlBQXJCLENBQWtDcGMsS0FBdEQsRUFBNkQsS0FBSSxDQUFDc29CLGVBQUwsQ0FBcUJwakIsUUFBbEYsRUFBNEZ5akIsUUFBNUYsRUFBc0d4UyxPQUF0RyxFQUNKeEgsSUFESSxDQUNDLFVBQUFtYSxNQUFNLEVBQUk7QUFDZCxlQUFJLENBQUNDLE9BQUwsQ0FBYUQsTUFBYjs7QUFFQSxpQkFBT0EsTUFBUDtBQUNELFNBTEksRUFNSmphLEtBTkksQ0FNRSxVQUFBbkssQ0FBQyxFQUFJO0FBQ1YsZUFBSSxDQUFDcUIsT0FBTCxDQUFheUMsS0FBYixDQUFtQixzQkFBbkIsRUFBMkM5RCxDQUEzQzs7QUFDQSxlQUFJLENBQUM0akIsZUFBTCxDQUFxQjVLLE9BQXJCLENBQTZCMWQsS0FBN0IsR0FBcUMsS0FBckM7QUFDQSxlQUFJLENBQUNzb0IsZUFBTCxDQUFxQjFLLE9BQXJCLENBQTZCNWQsS0FBN0IsR0FBcUMsS0FBckM7QUFDQSxlQUFJLENBQUNzb0IsZUFBTCxDQUFxQnhMLEtBQXJCLENBQTJCOWMsS0FBM0IsR0FBbUM0ZiwyREFBbkM7QUFDRCxTQVhJLENBQVA7QUFZRCxPQS9DSSxDQUFQO0FBZ0REOzs7NEJBRWVrSixNLEVBQTJCO0FBQUE7O0FBQ3pDLFdBQUtFLG1CQUFMLENBQXlCcHFCLE9BQXpCOztBQUVBLFVBQU1pbEIsT0FBTyxHQUFHamtCLE1BQU0sQ0FBQ3NSLFVBQVAsQ0FBa0IsWUFBTTtBQUN0QyxZQUFNK1gsbUJBQW1CLEdBQUdKLGtFQUFBLEVBQTVCOztBQUVBLFlBQUksTUFBSSxDQUFDSyxpQkFBTCxJQUNGLE1BQUksQ0FBQ0EsaUJBQUwsQ0FBdUJDLFdBQXZCLElBQXNDRixtQkFBbUIsQ0FBQ0UsV0FEeEQsSUFFRixNQUFJLENBQUNELGlCQUFMLENBQXVCRSxZQUF2QixJQUF1Q0gsbUJBQW1CLENBQUNHLFlBRjdELEVBR0U7QUFDQSxnQkFBSSxDQUFDQyxvQkFBTDs7QUFFQSxjQUFJLE1BQUksQ0FBQ0Esb0JBQUwsR0FBNEIsQ0FBaEMsRUFBbUM7QUFDakMsa0JBQUksQ0FBQ0Esb0JBQUwsR0FBNEIsQ0FBNUI7QUFDQSxrQkFBSSxDQUFDZixlQUFMLENBQXFCeEwsS0FBckIsQ0FBMkI5YyxLQUEzQixHQUFtQzRmLHlEQUFuQztBQUVBLGtCQUFJLENBQUMwSSxlQUFMLENBQXFCMUssT0FBckIsQ0FBNkI1ZCxLQUE3QixHQUFxQyxLQUFyQztBQUNBLGtCQUFJLENBQUNzb0IsZUFBTCxDQUFxQjVLLE9BQXJCLENBQTZCMWQsS0FBN0IsR0FBcUMsSUFBckM7QUFDQThvQixrQkFBTSxDQUFDbHFCLE9BQVA7O0FBQ0Esa0JBQUksQ0FBQ29xQixtQkFBTCxDQUF5QnBxQixPQUF6Qjs7QUFFQSxnQkFBTWtQLE9BQU8sR0FBRyxNQUFJLENBQUN5YSxvQkFBTCxHQUNiMVosS0FEYSxDQUNQLFVBQUFuSyxDQUFDLEVBQUk7QUFDVixvQkFBSSxDQUFDcUIsT0FBTCxDQUFheUMsS0FBYixDQUFtQixnQ0FBbkIsRUFBcUQ5RCxDQUFyRDtBQUNELGFBSGEsQ0FBaEI7O0FBS0E7QUFDRDtBQUNGLFNBdEJELE1Bc0JPO0FBQ0wsZ0JBQUksQ0FBQzJrQixvQkFBTCxHQUE0QixDQUE1QjtBQUNEOztBQUVELFlBQUksTUFBSSxDQUFDZixlQUFMLENBQXFCbE0sWUFBckIsQ0FBa0NwYyxLQUFsQyxDQUF3Q3NwQixNQUF4QyxJQUFrRCxNQUFJLENBQUNoQixlQUFMLENBQXFCeEwsS0FBckIsQ0FBMkI5YyxLQUEzQixLQUFxQzRmLDJEQUEzRixFQUFpSDtBQUMvRyxnQkFBSSxDQUFDMEksZUFBTCxDQUFxQnhMLEtBQXJCLENBQTJCOWMsS0FBM0IsR0FBbUM0ZiwwREFBbkM7QUFDRDs7QUFFRCxZQUFJLENBQUMsTUFBSSxDQUFDMEksZUFBTCxDQUFxQmxNLFlBQXJCLENBQWtDcGMsS0FBbEMsQ0FBd0NzcEIsTUFBekMsSUFBbUQsTUFBSSxDQUFDaEIsZUFBTCxDQUFxQnhMLEtBQXJCLENBQTJCOWMsS0FBM0IsS0FBcUM0ZiwyREFBNUYsRUFBa0g7QUFDaEgsZ0JBQUksQ0FBQzBJLGVBQUwsQ0FBcUJ4TCxLQUFyQixDQUEyQjljLEtBQTNCLEdBQW1DNGYsMkRBQW5DO0FBQ0Q7O0FBRUQsY0FBSSxDQUFDc0osaUJBQUwsR0FBeUJELG1CQUF6Qjs7QUFDQSxjQUFJLENBQUNGLE9BQUwsQ0FBYUQsTUFBYjtBQUNELE9BdkNlLEVBdUNiLElBdkNhLENBQWhCOztBQXlDQSxXQUFLRSxtQkFBTCxDQUF5QjFwQixHQUF6QixDQUE2QixJQUFJQyxxREFBSixDQUFlLFlBQU07QUFDaERxVSxvQkFBWSxDQUFDaVEsT0FBRCxDQUFaO0FBQ0QsT0FGNEIsQ0FBN0I7QUFHRDs7OzhCQUVlO0FBQ2QsV0FBS21GLG1CQUFMLENBQXlCcHFCLE9BQXpCO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbklIO0FBQ0E7QUFDQTtBQUNBO0FBR0E7O0lBRXFCMnFCLFM7QUFRbkIscUJBQVluTixZQUFaLEVBQTRDN08sSUFBNUMsRUFBMERySSxRQUExRCxFQUE0RXNrQixXQUE1RSxFQUFpR3JULE9BQWpHLEVBQWdJO0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQzlILFNBQUtzVCxhQUFMLEdBQXFCck4sWUFBckI7QUFDQSxTQUFLc04sS0FBTCxHQUFhbmMsSUFBYjtBQUNBLFNBQUtvYyxTQUFMLEdBQWlCemtCLFFBQWpCO0FBQ0EsU0FBSzBrQixZQUFMLEdBQW9CQyxTQUFTLENBQUNMLFdBQUQsQ0FBVCxDQUF1Qk0sT0FBdkIsQ0FBK0IsTUFBL0IsRUFBdUMsS0FBdkMsQ0FBcEI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCNVQsT0FBaEI7QUFDRDs7Ozs0QkFFYTtBQUNaLFVBQUkwUyxtRUFBSixFQUE2QjtBQUMzQixZQUFJQSwrRUFBQSxFQUFKLEVBQTJDO0FBQ3pDLGVBQUttQixPQUFMLEdBQWUsSUFBSW5CLG1FQUFKLENBQTRCO0FBQ3pDb0Isd0JBQVksRUFBRSxJQUQyQjtBQUV6Q0MsMkJBQWUsRUFBRSxDQUZ3QjtBQUd6Q0MsZ0NBQW9CLEVBQUUsQ0FIbUI7QUFJekNDLDRCQUFnQixFQUFFLENBSnVCO0FBS3pDQyxnQ0FBb0IsRUFBRSxJQUxtQjtBQU16Q0Msa0NBQXNCLEVBQUVDLFFBTmlCO0FBT3pDQyxvQ0FBd0IsRUFBRTtBQVBlLFdBQTVCLENBQWY7O0FBU0EsZUFBS1IsT0FBTCxDQUFhUyxVQUFiLENBQXdCLEtBQUtiLFlBQTdCOztBQUNBLGVBQUtJLE9BQUwsQ0FBYVUsV0FBYixDQUF5QixLQUFLakIsYUFBOUI7QUFDRCxTQVpELE1BWU8sSUFBSSxLQUFLQSxhQUFMLENBQW1Ca0IsV0FBbkIsQ0FBK0IsK0JBQS9CLENBQUosRUFBcUU7QUFDMUUsZUFBS2xCLGFBQUwsQ0FBbUJtQixHQUFuQixHQUF5QixLQUFLaEIsWUFBOUI7QUFDRDtBQUNGO0FBQ0Y7OztrQ0FFc0I7QUFDckIsYUFBT2YsbUVBQUEsSUFBMkJBLCtFQUFBLEVBQWxDO0FBQ0Q7OzsrQkFFbUM7QUFDbEMsVUFBSSxDQUFDLEtBQUttQixPQUFWLEVBQW1CO0FBQ2pCLGVBQU87QUFDTDNKLGVBQUssRUFBRSxDQURGO0FBRUxFLGdCQUFNLEVBQUUsQ0FGSDtBQUdMNEkscUJBQVcsRUFBRSxHQUhSO0FBSUxoTCxhQUFHLEVBQUUsR0FKQTtBQUtMME0sc0JBQVksRUFBRUMseUVBQTZCQztBQUx0QyxTQUFQO0FBT0Q7O0FBRUQsVUFBTUMsVUFBVSxHQUFHO0FBQ2pCM0ssYUFBSyxFQUFFLEtBQUsySixPQUFMLENBQWFpQixLQUFiLENBQW1CQyxXQURUO0FBRWpCM0ssY0FBTSxFQUFFLEtBQUt5SixPQUFMLENBQWFpQixLQUFiLENBQW1CRSxZQUZWO0FBR2pCaEMsbUJBQVcsRUFBRSxLQUFLYSxPQUFMLENBQWFpQixLQUFiLENBQW1COUIsV0FIZjtBQUlqQmhMLFdBQUcsRUFBRSxHQUpZO0FBS2pCME0sb0JBQVksRUFBRUMscUVBTEc7QUFNakIxQixvQkFBWSxFQUFFO0FBTkcsT0FBbkI7O0FBU0EsVUFBSSxLQUFLSyxhQUFMLENBQW1CMkIsUUFBbkIsSUFBK0IsS0FBSzNCLGFBQUwsQ0FBbUIyQixRQUFuQixDQUE0QjVrQixNQUEvRCxFQUF1RTtBQUNyRXdrQixrQkFBVSxDQUFDNUIsWUFBWCxHQUEwQixLQUFLSyxhQUFMLENBQW1CMkIsUUFBbkIsQ0FBNEJDLEdBQTVCLENBQWdDLENBQWhDLENBQTFCO0FBQ0Q7O0FBRUQsVUFBSSxLQUFLckIsT0FBTCxDQUFhc0IsZ0JBQWIsQ0FBOEJ4TyxLQUE5QixLQUF3QyxNQUE1QyxFQUFvRDtBQUNsRGtPLGtCQUFVLENBQUNILFlBQVgsR0FBMEJDLHFFQUExQjtBQUNELE9BRkQsTUFFTyxJQUFJLEtBQUtkLE9BQUwsQ0FBYXNCLGdCQUFiLENBQThCeE8sS0FBOUIsS0FBd0MsT0FBeEMsSUFBbUQsS0FBS2tOLE9BQUwsQ0FBYXNCLGdCQUFiLENBQThCeE8sS0FBOUIsS0FBd0MsT0FBL0YsRUFBd0c7QUFDN0drTyxrQkFBVSxDQUFDSCxZQUFYLEdBQTBCQyx5RUFBMUI7QUFDRCxPQUZNLE1BRUEsSUFBSSxLQUFLZCxPQUFMLENBQWFzQixnQkFBYixDQUE4QnhPLEtBQTlCLENBQW9DN2EsUUFBcEMsQ0FBNkMsU0FBN0MsS0FBMkQsS0FBSytuQixPQUFMLENBQWFzQixnQkFBYixDQUE4QnhPLEtBQTlCLENBQW9DN2EsUUFBcEMsQ0FBNkMsU0FBN0MsQ0FBL0QsRUFBd0g7QUFDN0grb0Isa0JBQVUsQ0FBQ0gsWUFBWCxHQUEwQkMsd0VBQTFCO0FBQ0QsT0FGTSxNQUVBO0FBQ0xFLGtCQUFVLENBQUNILFlBQVgsR0FBMEJDLHNFQUExQjtBQUNEOztBQUVELFVBQU0zQixXQUFXLEdBQUcsS0FBS00sYUFBTCxDQUFtQixhQUFuQixLQUFxQyxDQUF6RDtBQUNBLFVBQU04QixlQUFlLEdBQUcsQ0FBQ3B0QixJQUFJLENBQUNDLEdBQUwsS0FBYSxLQUFLMnJCLFFBQUwsQ0FBY25CLGVBQTVCLElBQStDLElBQXZFO0FBRUFvQyxnQkFBVSxDQUFDN00sR0FBWCxHQUFpQnhYLElBQUksQ0FBQ3liLEdBQUwsQ0FBUyxHQUFULEVBQWUrRyxXQUFXLEdBQUksS0FBS1ksUUFBTCxDQUFjNUwsR0FBZCxHQUFvQixJQUFwQyxHQUE2Q29OLGVBQTNELENBQWpCO0FBRUEsYUFBT1AsVUFBUDtBQUNEOzs7OEJBRWU7QUFDZCxVQUFJLEtBQUtoQixPQUFMLElBQWdCLEtBQUtBLE9BQUwsQ0FBYXdCLE9BQWpDLEVBQTBDO0FBQ3hDLGFBQUt4QixPQUFMLENBQWF3QixPQUFiOztBQUVBLGFBQUt4QixPQUFMLEdBQWUsSUFBZjtBQUNEO0FBQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlPLElBQU1uQixhQUFiO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBLG9SQW9CcUJ6TSxZQXBCckIsRUFvQnFEbFgsUUFwQnJELEVBb0J1RXlqQixRQXBCdkUsRUFvQnlGeFMsT0FwQnpGO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxQkkscUJBQUs0VCxRQUFMLEdBQWdCNVQsT0FBaEI7O0FBckJKLHNCQXVCUSxLQUFLc1YsVUFBTCxJQUFtQixLQUFLQyxNQUF4QixJQUFrQyxLQUFLQyxnQkF2Qi9DO0FBQUE7QUFBQTtBQUFBOztBQUFBLGlEQXdCYSxLQUFLQyxNQUFMLENBQVl4UCxZQUFaLEVBQTBCbFgsUUFBMUIsRUFBb0N5akIsUUFBcEMsQ0F4QmI7O0FBQUE7QUFBQSxzQkEyQlEsQ0FBQzVqQix5REFBRCxJQUF3QixDQUFDQSwyREFBekIsSUFBa0QsQ0FBQ0EscURBM0IzRDtBQUFBO0FBQUE7QUFBQTs7QUFBQSxzQkE0QlksSUFBSXNDLEtBQUosQ0FBVSx1QkFBVixDQTVCWjs7QUFBQTtBQUFBLHNCQStCUSxDQUFDdEMseURBQUQsSUFBd0IsQ0FBQ0EsMkRBQXpCLElBQWtELENBQUNBLHFEQS9CM0Q7QUFBQTtBQUFBO0FBQUE7O0FBQUEsc0JBZ0NZLElBQUlzQyxLQUFKLENBQVUsd0NBQVYsQ0FoQ1o7O0FBQUE7QUFBQSxpREFtQ1csSUFBSTBILE9BQUosQ0FBWSxVQUFBMkIsT0FBTyxFQUFJO0FBQzVCLHNCQUFJM0wscURBQUosRUFBcUI7QUFDbkIseUJBQUksQ0FBQzhtQixRQUFMLEdBQWdCLElBQWhCO0FBQ0E5bUIseUVBQUEsQ0FBZ0IsVUFBQStqQixNQUFNLEVBQUk7QUFDeEIsMkJBQUksQ0FBQzJDLFVBQUwsR0FBa0IzQyxNQUFsQjs7QUFFQSwwQkFBSSxLQUFJLENBQUMrQyxRQUFULEVBQW1CO0FBQ2pCLDZCQUFJLENBQUNBLFFBQUwsR0FBZ0IsS0FBaEI7QUFFQW5iLCtCQUFPLENBQUMsS0FBSSxDQUFDa2IsTUFBTCxDQUFZeFAsWUFBWixFQUEwQmxYLFFBQTFCLEVBQW9DeWpCLFFBQXBDLENBQUQsQ0FBUDtBQUNEO0FBQ0YscUJBUkQ7QUFTRDs7QUFFRCxzQkFBSTVqQix5REFBSixFQUF5QjtBQUN2Qix5QkFBSSxDQUFDOG1CLFFBQUwsR0FBZ0IsSUFBaEI7QUFDQTltQiw2RUFBQSxDQUFvQixVQUFBK2pCLE1BQU0sRUFBSTtBQUM1QiwyQkFBSSxDQUFDNkMsZ0JBQUwsR0FBd0I3QyxNQUF4Qjs7QUFFQSwwQkFBSSxLQUFJLENBQUMrQyxRQUFULEVBQW1CO0FBQ2pCLDZCQUFJLENBQUNBLFFBQUwsR0FBZ0IsS0FBaEI7QUFFQW5iLCtCQUFPLENBQUMsS0FBSSxDQUFDa2IsTUFBTCxDQUFZeFAsWUFBWixFQUEwQmxYLFFBQTFCLEVBQW9DeWpCLFFBQXBDLENBQUQsQ0FBUDtBQUNEO0FBQ0YscUJBUkQ7QUFTRDs7QUFFRCxzQkFBSTVqQiwyREFBSixFQUEyQjtBQUN6Qix5QkFBSSxDQUFDOG1CLFFBQUwsR0FBZ0IsSUFBaEI7QUFDQTltQiwrRUFBQSxDQUFzQixVQUFBK2pCLE1BQU0sRUFBSTtBQUM5QiwyQkFBSSxDQUFDNEMsTUFBTCxHQUFjNUMsTUFBZDs7QUFFQSwwQkFBSSxLQUFJLENBQUMrQyxRQUFULEVBQW1CO0FBQ2pCLDZCQUFJLENBQUNBLFFBQUwsR0FBZ0IsS0FBaEI7QUFFQW5iLCtCQUFPLENBQUMsS0FBSSxDQUFDa2IsTUFBTCxDQUFZeFAsWUFBWixFQUEwQmxYLFFBQTFCLEVBQW9DeWpCLFFBQXBDLENBQUQsQ0FBUDtBQUNEO0FBQ0YscUJBUkQ7QUFTRDtBQUNGLGlCQXZDTSxDQW5DWDs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwrQkE2RTZDO0FBQ3pDLFVBQUksS0FBS3FCLE9BQVQsRUFBa0I7QUFDaEIsZUFBTyxLQUFLQSxPQUFMLENBQWFoVyxRQUFiLEVBQVA7QUFDRDs7QUFFRCxhQUFPLElBQVA7QUFDRDtBQW5GSDtBQUFBO0FBQUEseUJBcUZzQjhYLE1BckZ0QixFQXFGd0YxUCxZQXJGeEYsRUFxRndIbFgsUUFyRnhILEVBcUYwSXlqQixRQXJGMUksRUFxRjRKeFMsT0FyRjVKLEVBcUZ3TTtBQUNwTSxVQUFNNFYsb0JBQW9CLEdBQUdwRCxRQUFRLENBQUN0b0IsS0FBVCxDQUFlLHVDQUFmLENBQTdCO0FBQ0EsVUFBTTJyQixtQkFBbUIsR0FBR3JELFFBQVEsQ0FBQ3RvQixLQUFULENBQWUsd0NBQWYsQ0FBNUI7QUFDQSxVQUFNNHJCLFdBQVcsR0FBR0Ysb0JBQW9CLElBQUlBLG9CQUFvQixDQUFDLENBQUQsQ0FBNUMsR0FBa0RBLG9CQUFvQixDQUFDLENBQUQsQ0FBdEUsR0FBNEUsRUFBaEc7QUFDQSxVQUFNRyxXQUFXLEdBQUdGLG1CQUFtQixJQUFJQSxtQkFBbUIsQ0FBQyxDQUFELENBQTFDLEdBQWdEQSxtQkFBbUIsQ0FBQyxDQUFELENBQW5FLEdBQXlFLEVBQTdGOztBQUVBLFVBQUkxYSxrRkFBQSxJQUF5QyxLQUFLbWEsVUFBTCxJQUFtQixLQUFLQSxVQUFMLENBQWdCbG9CLFdBQWhCLEVBQWhFLEVBQWdHO0FBQzlGLGFBQUt5bUIsT0FBTCxHQUFlLElBQUk4QixNQUFKLENBQVcxUCxZQUFYLEVBQXlCLEtBQXpCLEVBQWdDbFgsUUFBaEMsRUFBMENnbkIsV0FBMUMsRUFBdUQvVixPQUF2RCxDQUFmOztBQUVBLGFBQUs2VCxPQUFMLENBQWE1SixLQUFiOztBQUVBLGVBQU8sS0FBSzRKLE9BQVo7QUFDRDs7QUFFRCxXQUFLQSxPQUFMLEdBQWUsSUFBSThCLE1BQUosQ0FBVzFQLFlBQVgsRUFBeUIsTUFBekIsRUFBaUNsWCxRQUFqQyxFQUEyQyttQixXQUEzQyxFQUF3RDlWLE9BQXhELENBQWY7O0FBRUEsV0FBSzZULE9BQUwsQ0FBYTVKLEtBQWI7O0FBRUEsYUFBTyxLQUFLNEosT0FBWjtBQUNEO0FBeEdIO0FBQUE7QUFBQSwyQkEwR3dCNU4sWUExR3hCLEVBMEd3RGxYLFFBMUd4RCxFQTBHMEV5akIsUUExRzFFLEVBMEd5RztBQUNyRyxVQUFJLENBQUMsS0FBSytDLE1BQU4sSUFBZ0IsQ0FBQyxLQUFLQyxnQkFBdEIsSUFBMEMsQ0FBQyxLQUFLRixVQUFwRCxFQUFnRTtBQUM5RDtBQUNEOztBQUVELFVBQUksS0FBS0EsVUFBVCxFQUFxQjtBQUNuQixlQUFPLEtBQUtqSixJQUFMLENBQVUrRywrQ0FBVixFQUFxQm5OLFlBQXJCLEVBQW1DbFgsUUFBbkMsRUFBNkN5akIsUUFBN0Msa0NBQ0YsS0FBS29CLFFBREg7QUFFTG9DLHNCQUFZLEVBQUU3YSxrRkFBb0M4YTtBQUY3QyxXQUFQO0FBSUQ7O0FBRUQsVUFBSSxLQUFLVCxnQkFBVCxFQUEyQjtBQUN6QixlQUFPLEtBQUtuSixJQUFMLENBQVU2SiwrQ0FBVixFQUFxQmpRLFlBQXJCLEVBQW1DbFgsUUFBbkMsRUFBNkN5akIsUUFBN0Msa0NBQ0YsS0FBS29CLFFBREg7QUFFTG9DLHNCQUFZLEVBQUU3YSxrRkFBb0M4YTtBQUY3QyxXQUFQO0FBSUQ7O0FBRUQsVUFBSSxLQUFLVixNQUFULEVBQWlCO0FBQ2YsZUFBTyxLQUFLbEosSUFBTCxDQUFVOEosaURBQVYsRUFBdUJsUSxZQUF2QixFQUFxQ2xYLFFBQXJDLEVBQStDeWpCLFFBQS9DLGtDQUNGLEtBQUtvQixRQURIO0FBRUxvQyxzQkFBWSxFQUFFN2Esa0ZBQW9DOGE7QUFGN0MsV0FBUDtBQUlEO0FBQ0Y7QUFuSUg7QUFBQTtBQUFBLHdCQVF3QztBQUNwQyxhQUFPLEtBQUtYLFVBQVo7QUFDRDtBQVZIO0FBQUE7QUFBQSx3QkFZOEM7QUFDMUMsYUFBTyxLQUFLRSxnQkFBWjtBQUNEO0FBZEg7QUFBQTtBQUFBLHdCQWdCZ0M7QUFDNUIsYUFBTyxLQUFLRCxNQUFaO0FBQ0Q7QUFsQkg7O0FBQUE7QUFBQTs7bUhBQWE3QyxhLGNBQ2UsSzs7bUhBRGZBLGE7O21IQUFBQSxhOzttSEFBQUEsYTs7bUhBQUFBLGE7O21IQUFBQSxhOzs7Ozs7Ozs7Ozs7OztBQ1hiO0FBQ0E7QUFDQTtBQUVPLElBQUtpQyxhQUFaOztXQUFZQSxhO0FBQUFBLGUsQ0FBQUEsYTtBQUFBQSxlLENBQUFBLGE7QUFBQUEsZSxDQUFBQSxhO0FBQUFBLGUsQ0FBQUEsYTtHQUFBQSxhLEtBQUFBLGE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDSlo7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0EsSUFBTXlCLGdDQUFnQyxHQUFHLEdBQXpDO0FBQ0EsSUFBTUMseUJBQXlCLEdBQUcsS0FBbEM7O0lBRXFCQyxjO0FBS25CLDBCQUFZcEUsY0FBWixFQUE0QjFHLG1CQUE1QixFQUFzRTtBQUFBOztBQUFBLHdJQUpsQzdjLHFFQUFBLENBQXdCLGdCQUF4QixDQUlrQzs7QUFBQTs7QUFBQTs7QUFDcEUsU0FBS3dqQixlQUFMLEdBQXVCRCxjQUF2QjtBQUNBLFNBQUtFLG9CQUFMLEdBQTRCNUcsbUJBQTVCO0FBQ0Q7Ozs7MEJBRUtILEcsRUFBS25GLEssRUFBT2tGLG1CLEVBQXFCTiw2QixFQUE4QztBQUFBOztBQUNuRixhQUFPbFMsT0FBTyxDQUFDMmQsR0FBUixDQUFnRCxDQUNyRHZKLDRGQUFBLENBQTZDM0IsR0FBN0MsQ0FEcUQsRUFFckRuUSx5RkFBQSxFQUZxRCxDQUFoRCxFQUlKMUMsSUFKSSxDQUlDLGdCQUE4QztBQUFBO0FBQUEsWUFBNUNnUSxRQUE0QztBQUFBO0FBQUEsWUFBakN0TSxVQUFpQyxVQUFqQ0EsVUFBaUM7QUFBQSxZQUFyQlQsY0FBcUIsVUFBckJBLGNBQXFCOztBQUNsRCxhQUFJLENBQUMwVyxlQUFMLENBQXFCOUssTUFBckIsQ0FBNEJ4ZCxLQUE1QixHQUFvQyxJQUFwQztBQUNBLGFBQUksQ0FBQ3NvQixlQUFMLENBQXFCM0osUUFBckIsQ0FBOEIzZSxLQUE5QixHQUFzQzJlLFFBQXRDOztBQUNBLGFBQUksQ0FBQzVZLE9BQUwsQ0FBYUMsSUFBYixDQUFrQixvQkFBbEIsRUFBd0MyWSxRQUFRLENBQUM5WCxRQUFULEVBQXhDOztBQUNBLGFBQUksQ0FBQ2QsT0FBTCxDQUFhQyxJQUFiLENBQWtCLG1CQUFtQnFNLFVBQVUsQ0FBQ2UsR0FBaEQ7O0FBRUEsWUFBSTlCLG1GQUFBLElBQXlDLENBQUNNLGNBQWMsQ0FBQythLHdCQUF6RCxJQUFxRixDQUFDL2EsY0FBYyxDQUFDZ2Isd0JBQXpHLEVBQW1JO0FBQ2pJaGIsd0JBQWMsQ0FBQ2lGLEtBQWY7QUFDQWpGLHdCQUFjLEdBQUcsSUFBakI7QUFDQVMsb0JBQVUsR0FBRyxJQUFiO0FBQ0Q7O0FBRUQsYUFBSSxDQUFDaVcsZUFBTCxDQUFxQjFXLGNBQXJCLENBQW9DNVIsS0FBcEMsR0FBNEM0UixjQUE1QztBQUVBLGVBQU8rTSxRQUFRLENBQUNwSCxTQUFULENBQW1COEUsS0FBbkIsRUFBMEJoSyxVQUExQixFQUFzQyxLQUFJLENBQUNpVyxlQUFMLENBQXFCN0osWUFBckIsQ0FBa0N6ZSxLQUF4RSxDQUFQO0FBQ0QsT0FuQkksRUFvQkoyTyxJQXBCSSxDQW9CQyxpQkFBNEk7QUFBQSxZQUExSWdTLE1BQTBJLFNBQTFJQSxNQUEwSTtBQUFBLFlBQWxJOUIsTUFBa0ksU0FBbElBLE1BQWtJO0FBQUEsWUFBMUhtSSxnQkFBMEgsU0FBMUhBLGdCQUEwSDtBQUFBLFlBQXhHZCw0QkFBd0csU0FBeEdBLDRCQUF3RztBQUFBLFlBQTFFMEIsOEJBQTBFLFNBQTFFQSw4QkFBMEU7QUFBQSxZQUExQ0QsK0JBQTBDLFNBQTFDQSwrQkFBMEM7QUFBQSxZQUFUeEosR0FBUyxTQUFUQSxHQUFTO0FBQ2hKLGFBQUksQ0FBQ21LLGVBQUwsQ0FBcUJ6SixNQUFyQixDQUE0QjdlLEtBQTVCLEdBQW9DNmUsTUFBcEM7QUFDQSxhQUFJLENBQUN5SixlQUFMLENBQXFCbkssR0FBckIsQ0FBeUJuZSxLQUF6QixHQUFpQ21lLEdBQWpDOztBQUVBLGFBQUksQ0FBQ21LLGVBQUwsQ0FBcUJFLDZDQUFyQjs7QUFFQSxhQUFJLENBQUN6aUIsT0FBTCxDQUFhK2YsS0FBYixDQUNFLG1EQURGLEVBRUUsS0FBSSxDQUFDd0MsZUFBTCxDQUFxQnBqQixRQUZ2QixFQUdFeWIsTUFIRixFQUlFcUcsZ0JBSkYsRUFLRWQsNEJBTEYsRUFNRTBCLDhCQU5GLEVBT0VELCtCQVBGOztBQVVBLGFBQUksQ0FBQ1csZUFBTCxDQUFxQnhMLEtBQXJCLENBQTJCOWMsS0FBM0IsR0FBbUMsS0FBSSxDQUFDc29CLGVBQUwsQ0FBcUJHLGlDQUFyQixDQUF1RDlILE1BQXZELENBQW5DOztBQUVBLGFBQUksQ0FBQzJILGVBQUwsQ0FBcUJJLFdBQXJCLENBQWlDL0gsTUFBakM7O0FBRUEsWUFBSUEsTUFBTSxLQUFLLElBQWYsRUFBcUI7QUFDbkI7QUFDRDs7QUFFRCxlQUFPLEtBQUksQ0FBQ2tNLHFCQUFMLENBQTJCLEtBQUksQ0FBQ3ZFLGVBQUwsQ0FBcUIxVyxjQUFyQixDQUFvQzVSLEtBQS9ELEVBQXNFZ25CLGdCQUF0RSxFQUNKclksSUFESSxDQUNDLFVBQUFpRCxjQUFjLEVBQUk7QUFDdEIsY0FBSWtiLHVCQUFKO0FBQ0EsY0FBSUMsZUFBZSxHQUFHLEtBQXRCO0FBQ0EsY0FBSTFHLGtCQUFrQixHQUFHLEtBQXpCO0FBQ0EsY0FBTUQsVUFBNkIsR0FBRyxFQUF0Qzs7QUFFQSxjQUFJLENBQUMsS0FBSSxDQUFDa0MsZUFBTCxDQUFxQjFXLGNBQXJCLENBQW9DNVIsS0FBekMsRUFBZ0Q7QUFDOUMsaUJBQUksQ0FBQ3NvQixlQUFMLENBQXFCMVcsY0FBckIsQ0FBb0M1UixLQUFwQyxHQUE0QzRSLGNBQTVDO0FBQ0Q7O0FBRURBLHdCQUFjLENBQUNzRixjQUFmLEdBQWdDLFVBQUN4UyxDQUFELEVBQWE7QUFDM0MsZ0JBQUksS0FBSSxDQUFDNGpCLGVBQUwsQ0FBcUJ6SixNQUFyQixDQUE0QjdlLEtBQTVCLEtBQXNDNmUsTUFBMUMsRUFBa0Q7QUFDaEQ7QUFDRDs7QUFFRCxnQkFBSSxLQUFJLENBQUN5SixlQUFMLENBQXFCMVcsY0FBckIsQ0FBb0M1UixLQUFwQyxLQUE4QzRSLGNBQWxELEVBQWtFO0FBQ2hFO0FBQ0Q7O0FBRUQsZ0JBQUltYixlQUFKLEVBQXFCO0FBQ25CO0FBQ0Q7O0FBRUQsZ0JBQUksQ0FBQ2hvQixtRUFBTCxFQUFvQztBQUNsQztBQUNEOztBQUVELGdCQUFJTCxDQUFDLENBQUNzb0IsU0FBRixJQUFldG9CLENBQUMsQ0FBQ3NvQixTQUFGLENBQVlBLFNBQS9CLEVBQTBDO0FBQ3hDNUcsd0JBQVUsQ0FBQ3hnQixJQUFYLENBQWdCbEIsQ0FBQyxDQUFDc29CLFNBQWxCO0FBQ0QsYUFGRCxNQUVPO0FBQ0wzRyxnQ0FBa0IsR0FBRyxJQUFyQjtBQUNEOztBQUVELGdCQUFJLENBQUN5Ryx1QkFBTCxFQUE4QjtBQUM1QkEscUNBQXVCLEdBQUc1YixVQUFVLENBQUMsWUFBTTtBQUN6QyxvQkFBSSxLQUFJLENBQUNvWCxlQUFMLENBQXFCekosTUFBckIsQ0FBNEI3ZSxLQUE1QixLQUFzQzZlLE1BQTFDLEVBQWtEO0FBQ2hEO0FBQ0Q7O0FBRUQsb0JBQUlrTyxlQUFKLEVBQXFCO0FBQ25CO0FBQ0Q7O0FBRUQsb0JBQU1qZixPQUFPLEdBQUcsS0FBSSxDQUFDd2EsZUFBTCxDQUFxQjNKLFFBQXJCLENBQThCM2UsS0FBOUIsQ0FBb0NpdEIsZ0JBQXBDLENBQXFEcE8sTUFBckQsRUFBNkR1SCxVQUE3RCxFQUF5RUMsa0JBQXpFLEVBQ2IxWCxJQURhLENBQ1IsaUJBQXVCO0FBQUEsc0JBQXJCZ1MsTUFBcUIsU0FBckJBLE1BQXFCO0FBQUEsc0JBQWJ4SyxPQUFhLFNBQWJBLE9BQWE7O0FBQzNCLHNCQUFJd0ssTUFBTSxLQUFLLElBQWYsRUFBcUI7QUFDbkIseUJBQUksQ0FBQzVhLE9BQUwsQ0FBYW9MLElBQWIsQ0FBa0Isb0RBQWxCLEVBQXdFLEtBQUksQ0FBQ21YLGVBQUwsQ0FBcUJwakIsUUFBN0YsRUFBdUd5YixNQUF2Rzs7QUFFQTtBQUNEOztBQUVELHNCQUFJeEssT0FBTyxDQUFDbFUsUUFBUixDQUFpQixRQUFqQixDQUFKLEVBQWdDO0FBQzlCOHFCLG1DQUFlLEdBQUcsSUFBbEI7QUFDRDs7QUFFRCx1QkFBSSxDQUFDaG5CLE9BQUwsQ0FBYUMsSUFBYixDQUFrQiw2REFBbEIsRUFBaUYsS0FBSSxDQUFDc2lCLGVBQUwsQ0FBcUJwakIsUUFBdEcsRUFBZ0h5YixNQUFoSCxFQUF3SHhLLE9BQXhIO0FBQ0QsaUJBYmEsRUFjYnRILEtBZGEsQ0FjUCxVQUFBbkssQ0FBQyxFQUFJO0FBQ1YsdUJBQUksQ0FBQ3FCLE9BQUwsQ0FBYXlDLEtBQWIsQ0FBbUIsbUNBQW5CLEVBQXdELEtBQUksQ0FBQzhmLGVBQUwsQ0FBcUJwakIsUUFBN0UsRUFBdUZSLENBQXZGO0FBQ0QsaUJBaEJhLENBQWhCO0FBaUJELGVBMUJtQyxFQTBCakM2bkIsZ0NBMUJpQyxDQUFwQztBQTJCRDtBQUNGLFdBcEREOztBQXNEQTNhLHdCQUFjLENBQUN1RiwwQkFBZixHQUE0QyxZQUFZO0FBQ3RELGdCQUFJLEtBQUksQ0FBQ21SLGVBQUwsQ0FBcUJ6SixNQUFyQixDQUE0QjdlLEtBQTVCLEtBQXNDNmUsTUFBMUMsRUFBa0Q7QUFDaEQ7QUFDRDs7QUFFRCxnQkFBSSxLQUFJLENBQUN5SixlQUFMLENBQXFCMVcsY0FBckIsQ0FBb0M1UixLQUFwQyxLQUE4QzRSLGNBQWxELEVBQWtFO0FBQ2hFO0FBQ0Q7O0FBRUQsZ0JBQU1zYixhQUFhLEdBQUcsU0FBaEJBLGFBQWdCLEdBQVk7QUFDaEM7QUFDQTtBQUNBLG1CQUFJLENBQUM1RSxlQUFMLENBQXFCeEwsS0FBckIsQ0FBMkI5YyxLQUEzQixHQUFtQzRmLGtFQUFuQzs7QUFFQSxrQkFBSSxLQUFJLENBQUMwSSxlQUFMLENBQXFCbE0sWUFBckIsQ0FBa0NwYyxLQUF0QyxFQUE2QztBQUMzQyxxQkFBSSxDQUFDc29CLGVBQUwsQ0FBcUJsTSxZQUFyQixDQUFrQ3BjLEtBQWxDLENBQXdDOGdCLEtBQXhDOztBQUNBLHFCQUFJLENBQUN3SCxlQUFMLENBQXFCbE0sWUFBckIsQ0FBa0NwYyxLQUFsQyxDQUF3QytnQixTQUF4QyxHQUFvRCxJQUFwRDtBQUNEOztBQUVELG1CQUFJLENBQUN1SCxlQUFMLENBQXFCMUssT0FBckIsQ0FBNkI1ZCxLQUE3QixHQUFxQyxLQUFyQztBQUNBLG1CQUFJLENBQUNzb0IsZUFBTCxDQUFxQjVLLE9BQXJCLENBQTZCMWQsS0FBN0IsR0FBcUMsSUFBckM7O0FBRUEsa0JBQU04TixPQUFPLEdBQUcsS0FBSSxDQUFDeWEsb0JBQUwsR0FDYjFaLEtBRGEsQ0FDUCxVQUFBbkssQ0FBQyxFQUFJO0FBQ1YscUJBQUksQ0FBQ3FCLE9BQUwsQ0FBYXlDLEtBQWIsQ0FDRSxtRkFERixFQUVFLEtBQUksQ0FBQzhmLGVBQUwsQ0FBcUJwakIsUUFGdkIsRUFHRTBNLGNBQWMsQ0FBQ21GLGtCQUhqQixFQUlFclMsQ0FKRjtBQU1ELGVBUmEsQ0FBaEI7QUFTRCxhQXRCRDs7QUF3QkEsb0JBQVFrTixjQUFjLENBQUNtRixrQkFBdkI7QUFDRSxtQkFBSyxVQUFMO0FBQ0EsbUJBQUssV0FBTDtBQUNBLG1CQUFLLFdBQUw7QUFDQSxtQkFBSyxLQUFMO0FBQ0U7O0FBRUYsbUJBQUssY0FBTDtBQUNBLG1CQUFLLFFBQUw7QUFDRSxvQkFBSTdXLFNBQVMsQ0FBQ2l0QixNQUFkLEVBQXNCO0FBQ3BCLHVCQUFJLENBQUNwbkIsT0FBTCxDQUFhQyxJQUFiLENBQWtCLGdFQUFsQixFQUFvRixLQUFJLENBQUNzaUIsZUFBTCxDQUFxQnBqQixRQUF6RyxFQUFtSDBNLGNBQWMsQ0FBQ21GLGtCQUFsSTs7QUFDQSx1QkFBSSxDQUFDcVcsdUJBQUwsQ0FBNkJ4YixjQUE3QixFQUE2Q3NiLGFBQTdDO0FBQ0Q7O0FBRUQ7O0FBQ0YsbUJBQUssUUFBTDtBQUNFLHFCQUFJLENBQUNubkIsT0FBTCxDQUFhQyxJQUFiLENBQWtCLGdFQUFsQixFQUFvRixLQUFJLENBQUNzaUIsZUFBTCxDQUFxQnBqQixRQUF6RyxFQUFtSDBNLGNBQWMsQ0FBQ21GLGtCQUFsSTs7QUFDQW1XLDZCQUFhO0FBRWI7O0FBQ0Y7QUFDRTVsQixpRkFBaUIsQ0FBQ3NLLGNBQWMsQ0FBQ21GLGtCQUFoQixDQUFqQjtBQXJCSjtBQXVCRCxXQXhERDs7QUEwREEsY0FBTXNXLGtCQUFrQixHQUFHLElBQUl0ZSxPQUFKLENBQXlCLFVBQUMyQixPQUFELEVBQVVDLE1BQVYsRUFBcUI7QUFDdkUsZ0JBQUksQ0FBQ1csK0VBQUwsRUFBd0M7QUFDdEMsa0JBQU15USxVQUFTLEdBQUc3USxVQUFVLENBQUM7QUFBQSx1QkFBTVAsTUFBTSxDQUFDLElBQUl0SixLQUFKLENBQVUsd0JBQVYsQ0FBRCxDQUFaO0FBQUEsZUFBRCxFQUFvRG1sQix5QkFBcEQsQ0FBNUI7O0FBRUE1YSw0QkFBYyxDQUFDcUYsT0FBZixHQUF5QixVQUFDdlMsQ0FBRCxFQUFhO0FBQ3BDa1AsNEJBQVksQ0FBQ21PLFVBQUQsQ0FBWjtBQUVBclIsdUJBQU8sQ0FBQ2hNLENBQUMsQ0FBQzRvQixPQUFGLENBQVUsQ0FBVixDQUFELENBQVA7QUFDRCxlQUpEOztBQU1BO0FBQ0Q7O0FBRUQsZ0JBQU1DLGFBQWEsR0FBRyxTQUFoQkEsYUFBZ0IsQ0FBQzdvQixDQUFELEVBQWE7QUFDakM7QUFDQWtQLDBCQUFZLENBQUNtTyxTQUFELENBQVo7QUFDQW5RLDRCQUFjLENBQUNwUyxtQkFBZixDQUFtQyxPQUFuQyxFQUE0Qyt0QixhQUE1QztBQUNBM2IsNEJBQWMsQ0FBQ3BTLG1CQUFmLENBQW1DLFdBQW5DLEVBQWdEK3RCLGFBQWhEOztBQUVBLGtCQUFJN29CLENBQUMsQ0FBQzRvQixPQUFOLEVBQWU7QUFDYjVjLHVCQUFPLENBQUNoTSxDQUFDLENBQUM0b0IsT0FBRixDQUFVLENBQVYsQ0FBRCxDQUFQO0FBQ0QsZUFGRCxNQUVPO0FBQ0w1Yyx1QkFBTyxDQUFDaE0sQ0FBQyxDQUFDbWEsTUFBSCxDQUFQO0FBQ0Q7QUFDRixhQVhEOztBQWFBLGdCQUFNa0QsU0FBUyxHQUFHN1EsVUFBVSxDQUFDLFlBQU07QUFDakNVLDRCQUFjLENBQUNwUyxtQkFBZixDQUFtQyxPQUFuQyxFQUE0Qyt0QixhQUE1QztBQUNBM2IsNEJBQWMsQ0FBQ3BTLG1CQUFmLENBQW1DLFdBQW5DLEVBQWdEK3RCLGFBQWhEO0FBQ0E1YyxvQkFBTSxDQUFDLElBQUl0SixLQUFKLENBQVUsd0JBQVYsQ0FBRCxDQUFOO0FBQ0QsYUFKMkIsRUFJekJtbEIseUJBSnlCLENBQTVCO0FBTUE1YSwwQkFBYyxDQUFDdlMsZ0JBQWYsQ0FBZ0MsT0FBaEMsRUFBeUNrdUIsYUFBekM7QUFDQTNiLDBCQUFjLENBQUN2UyxnQkFBZixDQUFnQyxXQUFoQyxFQUE2Q2t1QixhQUE3QztBQUVBO0FBQ0QsV0FwQzBCLENBQTNCO0FBc0NBLGlCQUFPLElBQUl4ZSxPQUFKLENBQVksVUFBQTJCLE9BQU8sRUFBSTtBQUM1QkEsbUJBQU87QUFDUixXQUZNLEVBRUovQixJQUZJLENBRUMsWUFBTTtBQUNaLGdCQUFJLENBQUN1WCw0QkFBTCxFQUFtQztBQUNqQztBQUNEOztBQUVELGlCQUFJLENBQUNuZ0IsT0FBTCxDQUFhQyxJQUFiLENBQWtCLCtCQUFsQixFQUFtRCxLQUFJLENBQUNzaUIsZUFBTCxDQUFxQnBqQixRQUF4RSxFQUFrRmdoQiw0QkFBNEIsQ0FBQ2Isa0JBQTdCLENBQWdEalMsR0FBbEk7O0FBRUEsbUJBQU94QixjQUFjLENBQUMwRSxtQkFBZixDQUFtQzRQLDRCQUE0QixDQUFDYixrQkFBaEUsQ0FBUDtBQUNELFdBVk0sRUFVSjFXLElBVkksQ0FVQyxZQUFNO0FBQ1osZ0JBQUksQ0FBQ2daLCtCQUFMLEVBQXNDO0FBQ3BDO0FBQ0Q7O0FBRUQsaUJBQUksQ0FBQzVoQixPQUFMLENBQWFDLElBQWIsQ0FBa0IsaUNBQWxCLEVBQXFELEtBQUksQ0FBQ3NpQixlQUFMLENBQXFCcGpCLFFBQTFFLEVBQW9GeWlCLCtCQUErQixDQUFDdEMsa0JBQWhDLENBQW1EalMsR0FBdkk7O0FBRUEsbUJBQU94QixjQUFjLENBQUM2RSxvQkFBZixDQUFvQ2tSLCtCQUErQixDQUFDdEMsa0JBQXBFLENBQVA7QUFDRCxXQWxCTSxFQWtCSjFXLElBbEJJLENBa0JDLFlBQU07QUFDWixnQkFBSSxDQUFDaVosOEJBQUwsRUFBcUM7QUFDbkM7QUFDRDs7QUFFRCxpQkFBSSxDQUFDN2hCLE9BQUwsQ0FBYUMsSUFBYixDQUFrQixnQ0FBbEIsRUFBb0QsS0FBSSxDQUFDc2lCLGVBQUwsQ0FBcUJwakIsUUFBekUsRUFBbUYwaUIsOEJBQThCLENBQUN2QyxrQkFBL0IsQ0FBa0RqUyxHQUFySTs7QUFFQSxtQkFBT3hCLGNBQWMsQ0FBQzZFLG9CQUFmLENBQW9DbVIsOEJBQThCLENBQUN2QyxrQkFBbkUsRUFDSjFXLElBREksQ0FDQyxZQUFNO0FBQ1YscUJBQU9pRCxjQUFjLENBQUN3RSxZQUFmLENBQTRCO0FBQ2pDakUsbUNBQW1CLEVBQUUsSUFEWTtBQUVqQ0MsbUNBQW1CLEVBQUU7QUFGWSxlQUE1QixDQUFQO0FBSUQsYUFOSSxFQU1GekQsSUFORSxDQU1HLFVBQUE2ZSxNQUFNLEVBQUk7QUFDaEIsbUJBQUksQ0FBQ3puQixPQUFMLENBQWFDLElBQWIsQ0FBa0IsZ0NBQWxCLEVBQW9ELEtBQUksQ0FBQ3NpQixlQUFMLENBQXFCcGpCLFFBQXpFLEVBQW1Gc29CLE1BQW5GOztBQUVBLHFCQUFPLEtBQUksQ0FBQ2xGLGVBQUwsQ0FBcUIzSixRQUFyQixDQUE4QjNlLEtBQTlCLENBQW9DeVcsb0JBQXBDLENBQXlEb0ksTUFBekQsRUFBaUUyTyxNQUFqRSxDQUFQO0FBQ0QsYUFWSSxFQVVGN2UsSUFWRSxDQVVHLGlCQUFrQztBQUFBLGtCQUFoQ2dTLE1BQWdDLFNBQWhDQSxNQUFnQztBQUFBLGtCQUF4QjBFLGtCQUF3QixTQUF4QkEsa0JBQXdCO0FBQ3hDLG1CQUFJLENBQUNpRCxlQUFMLENBQXFCeEwsS0FBckIsQ0FBMkI5YyxLQUEzQixHQUFtQyxLQUFJLENBQUN5dEIsNENBQUwsQ0FBa0Q5TSxNQUFsRCxDQUFuQzs7QUFFQSxrQkFBSUEsTUFBTSxLQUFLLElBQWYsRUFBcUI7QUFDbkIscUJBQUksQ0FBQzJILGVBQUwsQ0FBcUIxSyxPQUFyQixDQUE2QjVkLEtBQTdCLEdBQXFDLEtBQXJDO0FBQ0EscUJBQUksQ0FBQ3NvQixlQUFMLENBQXFCeEssT0FBckIsQ0FBNkI5ZCxLQUE3QixHQUFxQyxJQUFyQztBQUNBLHFCQUFJLENBQUNzb0IsZUFBTCxDQUFxQnRLLE9BQXJCLENBQTZCaGUsS0FBN0IsR0FBcUMsS0FBckM7QUFFQTtBQUNEOztBQUVELHFCQUFPNFIsY0FBYyxDQUFDMEUsbUJBQWYsQ0FBbUMrTyxrQkFBbkMsQ0FBUDtBQUNELGFBdEJJLENBQVA7QUF1QkQsV0FoRE0sRUFnREoxVyxJQWhESSxDQWdEQyxZQUFNO0FBQ1o0UywrQkFBbUIsQ0FBQ21NLE9BQXBCLENBQTRCLEtBQUksQ0FBQ3BGLGVBQUwsQ0FBcUJwakIsUUFBakQ7QUFFQSxtQkFBT21vQixrQkFBUDtBQUNELFdBcERNLEVBb0RKMWUsSUFwREksQ0FvREMsVUFBQThELFdBQVcsRUFBSTtBQUNyQixpQkFBSSxDQUFDNlYsZUFBTCxDQUFxQjdWLFdBQXJCLENBQWlDelMsS0FBakMsR0FBeUN5UyxXQUF6QztBQUVBLGdCQUFNa2Isb0JBQW9CLEdBQUcsSUFBSW5iLCtEQUFKLENBQXlCWixjQUF6QixFQUF5Q2EsV0FBekMsRUFBc0QsS0FBSSxDQUFDNlYsZUFBTCxDQUFxQjNKLFFBQXJCLENBQThCM2UsS0FBOUIsQ0FBb0NtVSxhQUFwQyxHQUFvRCxDQUExRyxDQUE3Qjs7QUFFQSxpQkFBSSxDQUFDbVUsZUFBTCxDQUFxQnJHLFdBQXJCLENBQWlDM2lCLEdBQWpDLENBQXFDcXVCLG9CQUFyQzs7QUFFQSxnQkFBTTdmLE9BQU8sR0FBRzZmLG9CQUFvQixDQUFDQyxZQUFyQixDQUFrQ3JXLFNBQWxDLENBQTRDLFVBQUF5VCxVQUFVLEVBQUk7QUFDeEUsbUJBQUksQ0FBQzFDLGVBQUwsQ0FBcUJ2SixhQUFyQixDQUFtQy9lLEtBQW5DLEdBQTJDZ3JCLFVBQTNDOztBQUVBLGtCQUFJLENBQUMsS0FBSSxDQUFDMUMsZUFBTCxDQUFxQnVGLGlCQUF0QixJQUEyQyxDQUFDLEtBQUksQ0FBQ3ZGLGVBQUwsQ0FBcUJ3RixpQkFBckUsRUFBd0Y7QUFDdEYscUJBQUksQ0FBQ3hGLGVBQUwsQ0FBcUJ3RixpQkFBckIsR0FBeUM5QyxVQUFVLENBQUMrQyxLQUFwRDtBQUNBLHFCQUFJLENBQUN6RixlQUFMLENBQXFCdUYsaUJBQXJCLEdBQXlDN0MsVUFBVSxDQUFDL1YsS0FBcEQ7QUFFQTtBQUNEOztBQUVELGtCQUFJK1ksZ0JBQWdCLEdBQUcsS0FBdkI7QUFDQSxrQkFBSUMsZ0JBQWdCLEdBQUcsS0FBdkI7O0FBRUEsa0JBQUlqRCxVQUFVLENBQUMrQyxLQUFmLEVBQXNCO0FBQ3BCLG9CQUFJLEtBQUksQ0FBQ3pGLGVBQUwsQ0FBcUJ3RixpQkFBckIsSUFBMEMsS0FBSSxDQUFDeEYsZUFBTCxDQUFxQndGLGlCQUFyQixDQUF1Q3BnQixTQUF2QyxLQUFxRHNkLFVBQVUsQ0FBQytDLEtBQVgsQ0FBaUJyZ0IsU0FBcEgsRUFBK0g7QUFDN0hzZ0Isa0NBQWdCLEdBQUcsS0FBSSxDQUFDMUYsZUFBTCxDQUFxQndGLGlCQUFyQixJQUEwQyxLQUFJLENBQUN4RixlQUFMLENBQXFCd0YsaUJBQXJCLENBQXVDbFosYUFBdkMsS0FBeURvVyxVQUFVLENBQUMrQyxLQUFYLENBQWlCblosYUFBdkk7O0FBRUEsc0JBQUlvWixnQkFBZ0IsSUFBSTl0QixTQUFTLENBQUNpdEIsTUFBbEMsRUFBMEM7QUFDeEMseUJBQUksQ0FBQ3BuQixPQUFMLENBQWFDLElBQWIsQ0FDRSwwR0FERixFQUVFLEtBQUksQ0FBQ3NpQixlQUFMLENBQXFCcGpCLFFBRnZCLEVBR0U4bEIsVUFBVSxDQUFDK0MsS0FBWCxDQUFpQm5aLGFBSG5CLEVBSUUsS0FBSSxDQUFDMFQsZUFBTCxDQUFxQndGLGlCQUFyQixDQUF1Q2xaLGFBSnpDLEVBS0UsSUFBSTNPLG9EQUFKLENBQWMra0IsVUFBVSxDQUFDK0MsS0FBWCxDQUFpQnJnQixTQUFqQixHQUE2QixLQUFJLENBQUM0YSxlQUFMLENBQXFCd0YsaUJBQXJCLENBQXVDcGdCLFNBQWxGLEVBQTZGeEgsV0FBN0YsRUFMRjtBQU9EOztBQUVELHVCQUFJLENBQUNvaUIsZUFBTCxDQUFxQndGLGlCQUFyQixHQUF5QzlDLFVBQVUsQ0FBQytDLEtBQXBEO0FBQ0Q7QUFDRjs7QUFFRCxrQkFBSS9DLFVBQVUsQ0FBQy9WLEtBQWYsRUFBc0I7QUFDcEIsb0JBQUksS0FBSSxDQUFDcVQsZUFBTCxDQUFxQnVGLGlCQUFyQixJQUEwQyxLQUFJLENBQUN2RixlQUFMLENBQXFCdUYsaUJBQXJCLENBQXVDbmdCLFNBQXZDLEtBQXFEc2QsVUFBVSxDQUFDL1YsS0FBWCxDQUFpQnZILFNBQXBILEVBQStIO0FBQzdIdWdCLGtDQUFnQixHQUFHLEtBQUksQ0FBQzNGLGVBQUwsQ0FBcUJ1RixpQkFBckIsSUFBMEMsS0FBSSxDQUFDdkYsZUFBTCxDQUFxQnVGLGlCQUFyQixDQUF1Q2paLGFBQXZDLEtBQXlEb1csVUFBVSxDQUFDL1YsS0FBWCxDQUFpQkwsYUFBdkk7O0FBRUEsc0JBQUlxWixnQkFBZ0IsSUFBSS90QixTQUFTLENBQUNpdEIsTUFBbEMsRUFBMEM7QUFDeEMseUJBQUksQ0FBQ3BuQixPQUFMLENBQWFDLElBQWIsQ0FDRSwwR0FERixFQUVFLEtBQUksQ0FBQ3NpQixlQUFMLENBQXFCcGpCLFFBRnZCLEVBR0U4bEIsVUFBVSxDQUFDL1YsS0FBWCxDQUFpQkwsYUFIbkIsRUFJRSxLQUFJLENBQUMwVCxlQUFMLENBQXFCdUYsaUJBQXJCLENBQXVDalosYUFKekMsRUFLRSxJQUFJM08sb0RBQUosQ0FBYytrQixVQUFVLENBQUMvVixLQUFYLENBQWlCdkgsU0FBakIsR0FBNkIsS0FBSSxDQUFDNGEsZUFBTCxDQUFxQnVGLGlCQUFyQixDQUF1Q25nQixTQUFsRixFQUE2RnhILFdBQTdGLEVBTEY7QUFPRDs7QUFFRCx1QkFBSSxDQUFDb2lCLGVBQUwsQ0FBcUJ1RixpQkFBckIsR0FBeUM3QyxVQUFVLENBQUMvVixLQUFwRDtBQUNEO0FBQ0Y7O0FBRUQsa0JBQUksQ0FBQ2daLGdCQUFnQixJQUFJRCxnQkFBckIsS0FBMEM5dEIsU0FBUyxDQUFDaXRCLE1BQXhELEVBQWdFO0FBQzlELG9CQUFNRCxhQUFhLEdBQUcsU0FBaEJBLGFBQWdCLEdBQVk7QUFDaEMsdUJBQUksQ0FBQzVFLGVBQUwsQ0FBcUJ4TCxLQUFyQixDQUEyQjljLEtBQTNCLEdBQW1DNGYsa0VBQW5DOztBQUVBLHNCQUFJLEtBQUksQ0FBQzBJLGVBQUwsQ0FBcUJsTSxZQUFyQixDQUFrQ3BjLEtBQXRDLEVBQTZDO0FBQzNDLHlCQUFJLENBQUNzb0IsZUFBTCxDQUFxQmxNLFlBQXJCLENBQWtDcGMsS0FBbEMsQ0FBd0M4Z0IsS0FBeEM7O0FBQ0EseUJBQUksQ0FBQ3dILGVBQUwsQ0FBcUJsTSxZQUFyQixDQUFrQ3BjLEtBQWxDLENBQXdDK2dCLFNBQXhDLEdBQW9ELElBQXBEO0FBQ0Q7O0FBRUQsdUJBQUksQ0FBQ3VILGVBQUwsQ0FBcUIxSyxPQUFyQixDQUE2QjVkLEtBQTdCLEdBQXFDLEtBQXJDO0FBQ0EsdUJBQUksQ0FBQ3NvQixlQUFMLENBQXFCNUssT0FBckIsQ0FBNkIxZCxLQUE3QixHQUFxQyxJQUFyQztBQUVBMnRCLHNDQUFvQixDQUFDL3VCLE9BQXJCOztBQUVBLHNCQUFNa1AsT0FBTyxHQUFHLEtBQUksQ0FBQ3lhLG9CQUFMLEdBQ2IxWixLQURhLENBQ1AsVUFBQW5LLENBQUMsRUFBSTtBQUNWLHlCQUFJLENBQUNxQixPQUFMLENBQWF5QyxLQUFiLENBQ0UseUVBREYsRUFFRSxLQUFJLENBQUM4ZixlQUFMLENBQXFCcGpCLFFBRnZCLEVBR0UwTSxjQUFjLENBQUNtRixrQkFIakIsRUFJRXJTLENBSkY7QUFNRCxtQkFSYSxDQUFoQjtBQVNELGlCQXRCRDs7QUF3QkEscUJBQUksQ0FBQzBvQix1QkFBTCxDQUE2QnhiLGNBQTdCLEVBQTZDc2IsYUFBN0M7QUFDRCxlQTFCRCxNQTBCTztBQUNMLHFCQUFJLENBQUM1RSxlQUFMLENBQXFCaEcsK0JBQXJCLEdBQXVELENBQXZEO0FBQ0Q7QUFDRixhQTlFZSxDQUFoQjs7QUFnRkEsZ0JBQUksQ0FBQ3ZkLHNFQUFMLEVBQXVDO0FBQ3JDLG1CQUFJLENBQUN1akIsZUFBTCxDQUFxQnRMLFNBQXJCLENBQStCaGQsS0FBL0IsR0FBdUMsS0FBdkM7QUFDQSxtQkFBSSxDQUFDc29CLGVBQUwsQ0FBcUJwTCxVQUFyQixDQUFnQ2xkLEtBQWhDLEdBQXdDLElBQXhDO0FBQ0EsbUJBQUksQ0FBQ3NvQixlQUFMLENBQXFCNUssT0FBckIsQ0FBNkIxZCxLQUE3QixHQUFxQyxLQUFyQztBQUNBLG1CQUFJLENBQUNzb0IsZUFBTCxDQUFxQjFLLE9BQXJCLENBQTZCNWQsS0FBN0IsR0FBcUMsS0FBckM7QUFDQSxtQkFBSSxDQUFDc29CLGVBQUwsQ0FBcUJ4TCxLQUFyQixDQUEyQjljLEtBQTNCLEdBQW1DNGYsbUVBQW5DO0FBRUE7QUFDRDs7QUFFRCxtQkFBT3FCLDZCQUE2QixDQUFDeE8sV0FBRCxDQUFwQztBQUNELFdBdEpNLENBQVA7QUF1SkQsU0F4VEksQ0FBUDtBQXlURCxPQXJXSSxDQUFQO0FBc1dEOzs7O29TQUdDeWIsc0IsRUFDQWxILGdCOzs7Ozs7b0JBQ0trSCxzQjs7Ozs7QUFDSGxILGdDQUFnQixHQUFHLEtBQUttSCxrQkFBTCxDQUF3Qm5ILGdCQUF4QixDQUFuQjtpREFFT2ppQiwwRkFBQSxDQUFxRGlpQixnQkFBckQsQzs7O0FBR0hvSCxtQyxtQ0FDREYsc0JBQXNCLENBQUN2WCxnQkFBdkIsRSxHQUNBcVEsZ0I7QUFHTGtILHNDQUFzQixDQUFDdFgsZ0JBQXZCLENBQXdDd1gsbUJBQXhDO2lEQUVPRixzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O3VDQUdrQmxZLGEsRUFBbUQ7QUFDNUUsVUFBTW1SLFVBQTBCLEdBQUcsRUFBbkM7O0FBRUEsV0FBSyxJQUFJalgsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRzhGLGFBQWEsQ0FBQ21SLFVBQWQsQ0FBeUIzZ0IsTUFBN0MsRUFBcUQwSixDQUFDLEVBQXRELEVBQTBEO0FBQ3hELFlBQU1rWCxJQUFjLEdBQUcsRUFBdkI7O0FBRUEsYUFBSyxJQUFJaGUsS0FBSyxHQUFHLENBQWpCLEVBQW9CQSxLQUFLLEdBQUcsQ0FBNUIsRUFBK0JBLEtBQUssRUFBcEMsRUFBd0M7QUFDdEMsY0FBTTBDLEdBQUcsR0FBR2tLLGFBQWEsQ0FBQ21SLFVBQWQsQ0FBeUJqWCxDQUF6QixFQUE0QmtYLElBQTVCLENBQWlDaGUsS0FBakMsQ0FBWjs7QUFFQSxjQUFJMEMsR0FBSixFQUFTO0FBQ1BzYixnQkFBSSxDQUFDeGhCLElBQUwsQ0FBVW9RLGFBQWEsQ0FBQ21SLFVBQWQsQ0FBeUJqWCxDQUF6QixFQUE0QmtYLElBQTVCLENBQWlDaGUsS0FBakMsQ0FBVjtBQUNEO0FBQ0Y7O0FBRUQrZCxrQkFBVSxDQUFDdmhCLElBQVgsQ0FBZ0I7QUFDZHdoQixjQUFJLEVBQUVBLElBRFE7QUFFZEMsa0JBQVEsRUFBRXJSLGFBQWEsQ0FBQ21SLFVBQWQsQ0FBeUJqWCxDQUF6QixFQUE0Qm1YLFFBRnhCO0FBR2RDLG9CQUFVLEVBQUV0UixhQUFhLENBQUNtUixVQUFkLENBQXlCalgsQ0FBekIsRUFBNEJvWDtBQUgxQixTQUFoQjtBQUtEOztBQUVEdFIsbUJBQWEsQ0FBQ21SLFVBQWQsR0FBMkJBLFVBQTNCO0FBRUEsYUFBT25SLGFBQVA7QUFDRDs7OzRDQUUrQnBFLGMsRUFBaUNzYixhLEVBQWlDO0FBQUE7O0FBQ2hHLFVBQUl0YixjQUFjLENBQUNtRixrQkFBZixLQUFzQyxRQUExQyxFQUFvRDtBQUNsRDtBQUNEOztBQUVELFdBQUt1UixlQUFMLENBQXFCeEwsS0FBckIsQ0FBMkI5YyxLQUEzQixHQUFtQzRmLHlFQUFuQzs7QUFFQSxVQUFJLEtBQUswSSxlQUFMLENBQXFCaEcsK0JBQXJCLEdBQXVEdmQsd0ZBQXZELElBQTZHLENBQUNBLDhFQUFsSCxFQUE0SjtBQUMxSixhQUFLdWpCLGVBQUwsQ0FBcUJoRywrQkFBckI7O0FBRUEsWUFBSWhSLG1GQUFBLElBQ0YsQ0FBQ00sY0FBYyxDQUFDK2Esd0JBRGQsSUFFRixDQUFDL2EsY0FBYyxDQUFDZ2Isd0JBRmQsSUFHRixLQUFLdEUsZUFBTCxDQUFxQjdKLFlBQXJCLENBQWtDemUsS0FIcEMsRUFJRTtBQUNBO0FBQ0Q7O0FBRUQsYUFBSytGLE9BQUwsQ0FBYUMsSUFBYixDQUFrQixnREFBbEI7O0FBRUEsWUFBTXFNLFVBQVUsR0FBR1QsY0FBYyxDQUFDa0YsdUJBQWxDO0FBQ0EsWUFBTWhKLE9BQU8sR0FBRzhELGNBQWMsQ0FBQ00sV0FBZixDQUEyQjtBQUFDbWMsb0JBQVUsRUFBRTtBQUFiLFNBQTNCLEVBQStDMWYsSUFBL0MsQ0FBb0QsVUFBQTJmLEtBQUssRUFBSTtBQUMzRSxpQkFBTzFjLGNBQWMsQ0FBQzBFLG1CQUFmLENBQW1DZ1ksS0FBbkMsRUFBMEMzZixJQUExQyxDQUErQyxZQUFNO0FBQzFELG1CQUFPaUQsY0FBYyxDQUFDMEUsbUJBQWYsQ0FBbUNqRSxVQUFuQyxDQUFQO0FBQ0QsV0FGTSxDQUFQO0FBR0QsU0FKZSxFQUtieEQsS0FMYSxDQUtQLFVBQUFuSyxDQUFDLEVBQUk7QUFDVixnQkFBSSxDQUFDcUIsT0FBTCxDQUFheUMsS0FBYixDQUFtQixxQ0FBbkIsRUFBMEQ5RCxDQUExRDs7QUFDQSxnQkFBSSxDQUFDNGpCLGVBQUwsQ0FBcUJoRywrQkFBckIsR0FBdUQsQ0FBdkQ7QUFDQTRLLHVCQUFhO0FBQ2QsU0FUYSxDQUFoQjtBQVdBO0FBQ0Q7O0FBRUQsV0FBS25uQixPQUFMLENBQWFDLElBQWIsQ0FBa0IsbUZBQWxCLEVBQXVHLEtBQUtzaUIsZUFBTCxDQUFxQmhHLCtCQUE1SDs7QUFDQSxXQUFLZ0csZUFBTCxDQUFxQmhHLCtCQUFyQixHQUF1RCxDQUF2RDtBQUNBNEssbUJBQWE7QUFDZDs7O2lFQUVvRHZNLE0sRUFBa0Q7QUFDckcsY0FBUUEsTUFBUjtBQUNFLGFBQUssSUFBTDtBQUNFLGlCQUFPZixxRUFBUDs7QUFDRixhQUFLLGNBQUw7QUFDRSxpQkFBT0EseUVBQVA7O0FBQ0YsYUFBSyxXQUFMO0FBQ0EsYUFBSyxVQUFMO0FBQ0EsYUFBSyxjQUFMO0FBQ0EsYUFBSyxTQUFMO0FBQ0UsaUJBQU9BLHVFQUFQOztBQUNGLGFBQUssUUFBTDtBQUNFLGlCQUFPQSxrRUFBUDs7QUFDRjtBQUNFdFksMkVBQWlCLENBQUNxWixNQUFELENBQWpCO0FBYko7QUFlRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdlSDtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7O0lBK0JxQjJMLFc7QUFTbkIsdUJBQVlsUSxZQUFaLEVBQTRDN08sSUFBNUMsRUFBMERySSxRQUExRCxFQUE0RXNrQixXQUE1RSxFQUFpR3JULE9BQWpHLEVBQWdJO0FBQUE7O0FBQUEsd0lBUjVGclIsb0VBQUEsQ0FBd0IsYUFBeEIsQ0FRNEY7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQzlILFNBQUsya0IsYUFBTCxHQUFxQnJOLFlBQXJCO0FBQ0EsU0FBS3NOLEtBQUwsR0FBYW5jLElBQWI7QUFDQSxTQUFLb2MsU0FBTCxHQUFpQnprQixRQUFqQjtBQUNBLFNBQUswa0IsWUFBTCxHQUFvQkMsU0FBUyxDQUFDTCxXQUFELENBQVQsQ0FBdUJNLE9BQXZCLENBQStCLE1BQS9CLEVBQXVDLEtBQXZDLENBQXBCO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQjVULE9BQWhCO0FBQ0Q7Ozs7NEJBRWE7QUFDWixVQUFJMFMsK0RBQUosRUFBeUI7QUFDdkIsWUFBTTBGLGFBQTJCLEdBQUc7QUFDbENDLGFBQUcsRUFBRTtBQUFDQyxvQ0FBd0IsRUFBRTtBQUEzQixXQUQ2QjtBQUVsQ0Msa0JBQVEsRUFBRTtBQUFDQywyQkFBZSxFQUFFO0FBQUM5SyxxQkFBTyxFQUFFO0FBQVY7QUFBbEIsV0FGd0I7QUFHbEMrSyxtQkFBUyxFQUFFO0FBQ1RDLDJCQUFlLEVBQUUsQ0FEUjtBQUVUQyx5QkFBYSxFQUFFLEVBRk47QUFHVEMsd0JBQVksRUFBRSxFQUhMO0FBSVRKLDJCQUFlLEVBQUU7QUFDZjlLLHFCQUFPLEVBQUUsS0FETTtBQUVmbUwseUJBQVcsRUFBRSxFQUZFO0FBR2ZDLDJCQUFhLEVBQUU7QUFIQTtBQUpSO0FBSHVCLFNBQXBDO0FBZUEsYUFBS2pGLE9BQUwsR0FBZSxJQUFJbkIsc0VBQUosQ0FBK0IsS0FBS1ksYUFBcEMsQ0FBZjtBQUNBLGFBQUt5RixVQUFMLENBQWdCWCxhQUFoQjtBQUVBO0FBQ0Q7QUFDRjs7OytCQUVtQztBQUNsQyxVQUFJLENBQUMsS0FBS3ZFLE9BQVYsRUFBbUI7QUFDakIsZUFBTztBQUNMM0osZUFBSyxFQUFFLENBREY7QUFFTEUsZ0JBQU0sRUFBRSxDQUZIO0FBR0w0SSxxQkFBVyxFQUFFLENBSFI7QUFJTGhMLGFBQUcsRUFBRSxDQUpBO0FBS0wwTSxzQkFBWSxFQUFFQyx5RUFBNkJDO0FBTHRDLFNBQVA7QUFPRDs7QUFFRCxVQUFNQyxVQUFVLG1DQUNYLEtBQUtoQixPQUFMLENBQWFoVyxRQUFiLEVBRFc7QUFFZG1WLG1CQUFXLEVBQUUsQ0FGQztBQUdkaEwsV0FBRyxFQUFFO0FBSFMsUUFBaEI7O0FBS0EsVUFBTWdMLFdBQVcsR0FBRyxLQUFLTSxhQUFMLENBQW1CLGFBQW5CLEtBQXFDLENBQXpEO0FBQ0EsVUFBTThCLGVBQWUsR0FBRyxDQUFDcHRCLElBQUksQ0FBQ0MsR0FBTCxLQUFhLEtBQUsyckIsUUFBTCxDQUFjbkIsZUFBNUIsSUFBK0MsSUFBdkU7QUFDQSxVQUFNekssR0FBRyxHQUFHeFgsSUFBSSxDQUFDeWIsR0FBTCxDQUFTLEdBQVQsRUFBY21KLGVBQWUsR0FBR3BDLFdBQWhDLENBQVo7O0FBRUEsVUFBSSxLQUFLTSxhQUFULEVBQXdCO0FBQ3RCdUIsa0JBQVUsQ0FBQzdCLFdBQVgsR0FBeUJBLFdBQXpCO0FBQ0E2QixrQkFBVSxDQUFDN00sR0FBWCxHQUFpQkEsR0FBakI7O0FBRUEsWUFBSSxLQUFLc0wsYUFBTCxDQUFtQjJCLFFBQW5CLElBQStCLEtBQUszQixhQUFMLENBQW1CMkIsUUFBbkIsQ0FBNEI1a0IsTUFBL0QsRUFBdUU7QUFDckV3a0Isb0JBQVUsQ0FBQzVCLFlBQVgsR0FBMEIsS0FBS0ssYUFBTCxDQUFtQjJCLFFBQW5CLENBQTRCQyxHQUE1QixDQUFnQyxDQUFoQyxDQUExQjtBQUNEO0FBQ0Y7O0FBRUQsVUFBSUwsVUFBVSxDQUFDbUUsa0JBQVgsR0FBZ0MsQ0FBcEMsRUFBdUM7QUFDckNuRSxrQkFBVSxDQUFDSCxZQUFYLEdBQTBCQyx3RUFBMUI7QUFDRCxPQUZELE1BRU8sSUFBSUUsVUFBVSxDQUFDb0UsUUFBWCxHQUFzQixDQUExQixFQUE2QjtBQUNsQ3BFLGtCQUFVLENBQUNILFlBQVgsR0FBMEJDLHFFQUExQjtBQUNELE9BRk0sTUFFQSxJQUFJRSxVQUFVLENBQUMvVixLQUFmLEVBQXNCO0FBQzNCK1Ysa0JBQVUsQ0FBQ0gsWUFBWCxHQUEwQkMsc0VBQTFCO0FBQ0QsT0FGTSxNQUVBO0FBQ0xFLGtCQUFVLENBQUNILFlBQVgsR0FBMEJDLHlFQUExQjtBQUNEOztBQUVELGFBQU9FLFVBQVA7QUFDRDs7OzhCQUVlO0FBQ2QsVUFBSSxLQUFLaEIsT0FBVCxFQUFrQjtBQUNoQixhQUFLQSxPQUFMLENBQWFxRixNQUFiOztBQUNBLGFBQUtyRixPQUFMLENBQWF3QixPQUFiO0FBQ0Q7O0FBRUQsV0FBS3hCLE9BQUwsR0FBZSxJQUFmO0FBQ0Q7OzsrQkFFa0JzRixZLEVBQWtDO0FBQUE7O0FBQ25ELFdBQUt0RixPQUFMLENBQWF1RixTQUFiLENBQXVCRCxZQUF2Qjs7QUFFQSxVQUFNeGhCLE9BQU8sR0FBRyxLQUFLa2MsT0FBTCxDQUFhd0YsSUFBYixDQUFrQixLQUFLNUYsWUFBdkIsRUFBcUNqYixJQUFyQyxDQUEwQyxZQUFNO0FBQzlELGFBQUksQ0FBQzVJLE9BQUwsQ0FBYUMsSUFBYixDQUFrQix1Q0FBbEIsRUFBMkQsS0FBSSxDQUFDMmpCLFNBQWhFOztBQUVBLFlBQUksS0FBSSxDQUFDRixhQUFMLENBQW1CakgsSUFBdkIsRUFBNkI7QUFDM0IsZUFBSSxDQUFDaUgsYUFBTCxDQUFtQmpILElBQW5CO0FBQ0Q7QUFDRixPQU5lLEVBTWIzVCxLQU5hLENBTVAsVUFBQW5LLENBQUMsRUFBSTtBQUNaLGFBQUksQ0FBQ3FCLE9BQUwsQ0FBYXlDLEtBQWIsQ0FBbUIsZ0RBQW5CLEVBQXFFLEtBQUksQ0FBQ21oQixTQUExRSxFQUFxRmpsQixDQUFDLENBQUMrcUIsSUFBdkYsRUFBNkYvcUIsQ0FBN0Y7QUFDRCxPQVJlLENBQWhCO0FBU0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOUlIO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0lBRXFCbWQsYTs7OzJCQUdMeEYsSyxFQUFlZ00sYyxFQUFnQjFHLG1CLEVBQW1EO0FBQzlGLFVBQU14SSxXQUFXLEdBQUdDLGtFQUFBLENBQW9CaUQsS0FBcEIsQ0FBcEI7QUFDQSxVQUFNcVQsTUFBTSxHQUFHdlcsV0FBVyxJQUFJQSxXQUFXLENBQUNrRCxLQUEzQixJQUFvQ2xELFdBQVcsQ0FBQ2tELEtBQVosQ0FBa0JzVCxZQUF0RCxJQUFzRXhXLFdBQVcsQ0FBQ2tELEtBQVosQ0FBa0JzVCxZQUFsQixDQUErQjF0QixRQUEvQixDQUF3QyxNQUF4QyxDQUFyRjs7QUFFQSxVQUFJeXRCLE1BQUosRUFBWTtBQUNWLGFBQUszcEIsT0FBTCxDQUFheUMsS0FBYixDQUFtQiw0Q0FBbkI7O0FBQ0E2ZixzQkFBYyxDQUFDdkwsS0FBZixDQUFxQjljLEtBQXJCLEdBQTZCNGYsOEVBQTdCO0FBRUE7QUFDRDs7QUFFRCxVQUFNZ1EsV0FBVyxHQUFHelcsV0FBVyxJQUFJQSxXQUFXLENBQUNrRCxLQUEzQixJQUFvQ2xELFdBQVcsQ0FBQ2tELEtBQVosQ0FBa0JzVCxZQUF0RCxJQUFzRXhXLFdBQVcsQ0FBQ2tELEtBQVosQ0FBa0JzVCxZQUFsQixDQUErQjF0QixRQUEvQixDQUF3QyxXQUF4QyxDQUExRjs7QUFFQSxVQUFJMnRCLFdBQUosRUFBaUI7QUFDZixlQUFPLElBQUl4SCxtREFBSixDQUFrQkMsY0FBbEIsRUFBa0MxRyxtQkFBbEMsQ0FBUDtBQUNEOztBQUVELGFBQU8sSUFBSThLLG9EQUFKLENBQW1CcEUsY0FBbkIsRUFBbUMxRyxtQkFBbkMsQ0FBUDtBQUNEOzs7QUFFRCwyQkFBYztBQUFBOztBQUNaLFVBQU0sSUFBSXRhLEtBQUosQ0FBVSw4REFBVixDQUFOO0FBQ0Q7Ozs7O21IQXpCa0J3YSxhLGFBQ2UvYyxvRUFBQSxDQUF3QixXQUF4QixDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWnBDO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBLElBQU0rcUIsa0JBQWtCLEdBQUcsT0FBM0IsQyxDQUFvQzs7QUFDcEMsSUFBTUMsdUJBQXVCLEdBQUcsS0FBaEM7O0lBcUJxQnpELFM7QUFVbkIscUJBQVlqUSxZQUFaLEVBQTRDN08sSUFBNUMsRUFBMERySSxRQUExRCxFQUE0RXNrQixXQUE1RSxFQUFpR3JULE9BQWpHLEVBQWdJO0FBQUE7O0FBQUEsd0lBVDVGclIsb0VBQUEsQ0FBd0IsV0FBeEIsQ0FTNEY7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQUE7O0FBQzlILFNBQUsya0IsYUFBTCxHQUFxQnJOLFlBQXJCO0FBQ0EsU0FBS3NOLEtBQUwsR0FBYW5jLElBQWI7QUFDQSxTQUFLb2MsU0FBTCxHQUFpQnprQixRQUFqQjtBQUNBLFNBQUswa0IsWUFBTCxHQUFvQkMsU0FBUyxDQUFDTCxXQUFELENBQVQsQ0FBdUJNLE9BQXZCLENBQStCLE1BQS9CLEVBQXVDLEtBQXZDLENBQXBCO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQjVULE9BQWhCO0FBQ0Q7Ozs7NEJBRWE7QUFBQTs7QUFDWixVQUFJMFMseUVBQUosRUFBbUM7QUFDakMsWUFBTTBGLGFBQWEsbUNBQ2QsS0FBS3hFLFFBRFM7QUFFakI4Riw0QkFBa0IsRUFBbEJBO0FBRmlCLFVBQW5COztBQUtBLGFBQUs3RixPQUFMLEdBQWUsSUFBSW5CLG1GQUFKLENBQTRDLEtBQUs5aUIsT0FBakQsRUFBMEQsS0FBSzBqQixhQUEvRCxFQUE4RThFLGFBQTlFLENBQWY7O0FBQ0EsYUFBS3ZFLE9BQUwsQ0FBYTVKLEtBQWIsQ0FBbUIsS0FBS3dKLFlBQXhCOztBQUVBLGFBQUtJLE9BQUwsQ0FBYTNxQixnQkFBYixDQUE4QixPQUE5QixFQUF1QyxVQUFBMHdCLFdBQVcsRUFBSTtBQUNwRCxjQUFJLEtBQUksQ0FBQ0MsU0FBTCxNQUFvQkQsV0FBcEIsS0FBb0NBLFdBQVcsQ0FBQ04sSUFBWixLQUFxQixDQUFyQixJQUEwQk0sV0FBVyxDQUFDRSxRQUFaLEtBQXlCcEgscUdBQXZGLENBQUosRUFBdUo7QUFDckosaUJBQUksQ0FBQzlpQixPQUFMLENBQWFvTCxJQUFiLENBQWtCLG1EQUFsQixFQUF1RTRlLFdBQXZFOztBQUNBLGlCQUFJLENBQUNHLFlBQUw7QUFDRDs7QUFFRCxlQUFJLENBQUNucUIsT0FBTCxDQUFheUMsS0FBYixDQUFtQiwrQkFBbkIsRUFBb0R1bkIsV0FBcEQ7QUFDRCxTQVBEOztBQVNBO0FBQ0Q7QUFDRjs7O2tDQUVzQjtBQUNyQixhQUFPbEgseUVBQUEsSUFBaUNBLHFGQUF4QztBQUNEOzs7K0JBRW1DO0FBQ2xDLFVBQUksQ0FBQyxLQUFLbUIsT0FBVixFQUFtQjtBQUNqQixlQUFPO0FBQ0wzSixlQUFLLEVBQUUsQ0FERjtBQUVMRSxnQkFBTSxFQUFFLENBRkg7QUFHTDRJLHFCQUFXLEVBQUUsR0FIUjtBQUlMaEwsYUFBRyxFQUFFLEdBSkE7QUFLTDBNLHNCQUFZLEVBQUVDLHlFQUxUO0FBTUwxQixzQkFBWSxFQUFFO0FBTlQsU0FBUDtBQVFEOztBQUVELFVBQU00QixVQUFVLEdBQUcsS0FBS2hCLE9BQUwsQ0FBYWhXLFFBQWIsRUFBbkI7O0FBQ0EsVUFBTW1WLFdBQVcsR0FBRzZCLFVBQVUsQ0FBQzdCLFdBQVgsSUFBMEIsS0FBS00sYUFBTCxDQUFtQixhQUFuQixDQUE5QztBQUNBLFVBQU04QixlQUFlLEdBQUcsQ0FBQ3B0QixJQUFJLENBQUNDLEdBQUwsS0FBYSxLQUFLMnJCLFFBQUwsQ0FBY25CLGVBQTVCLElBQStDLElBQXZFOztBQUVBLFVBQUksS0FBS2EsYUFBTCxDQUFtQjJCLFFBQW5CLElBQStCLEtBQUszQixhQUFMLENBQW1CMkIsUUFBbkIsQ0FBNEI1a0IsTUFBL0QsRUFBdUU7QUFDckV3a0Isa0JBQVUsQ0FBQzVCLFlBQVgsR0FBMEIsS0FBS0ssYUFBTCxDQUFtQjJCLFFBQW5CLENBQTRCQyxHQUE1QixDQUFnQyxDQUFoQyxDQUExQjtBQUNEOztBQUVELFVBQUlMLFVBQVUsQ0FBQ21GLFFBQVgsSUFBdUJuRixVQUFVLENBQUNvRixZQUFYLEtBQTRCLEtBQXZELEVBQThEO0FBQzVEcEYsa0JBQVUsQ0FBQzdCLFdBQVgsR0FBeUJBLFdBQVcsR0FBRzZCLFVBQVUsQ0FBQzdNLEdBQWxEO0FBQ0Q7O0FBRUQsVUFBSSxDQUFDNk0sVUFBVSxDQUFDN0IsV0FBaEIsRUFBNkI7QUFDM0I2QixrQkFBVSxDQUFDN0IsV0FBWCxHQUF5QkEsV0FBekI7QUFDRDs7QUFFRCxVQUFJLENBQUM2QixVQUFVLENBQUNtRixRQUFoQixFQUEwQjtBQUN4Qm5GLGtCQUFVLENBQUM3TSxHQUFYLEdBQWlCeFgsSUFBSSxDQUFDeWIsR0FBTCxDQUFTLEdBQVQsRUFBY21KLGVBQWUsR0FBR3BDLFdBQWhDLENBQWpCO0FBQ0Q7O0FBRUQsVUFBSTZCLFVBQVUsQ0FBQ21FLGtCQUFYLEdBQWdDLENBQXBDLEVBQXVDO0FBQ3JDbkUsa0JBQVUsQ0FBQ0gsWUFBWCxHQUEwQkMsd0VBQTFCO0FBQ0QsT0FGRCxNQUVPLElBQUlFLFVBQVUsQ0FBQ29FLFFBQVgsR0FBc0IsQ0FBMUIsRUFBNkI7QUFDbENwRSxrQkFBVSxDQUFDSCxZQUFYLEdBQTBCQyxxRUFBMUI7QUFDRCxPQUZNLE1BRUEsSUFBSUUsVUFBVSxDQUFDL1YsS0FBZixFQUFzQjtBQUMzQitWLGtCQUFVLENBQUNILFlBQVgsR0FBMEJDLHNFQUExQjtBQUNELE9BRk0sTUFFQTtBQUNMRSxrQkFBVSxDQUFDSCxZQUFYLEdBQTBCQyx5RUFBMUI7QUFDRDs7QUFFRCxhQUFPRSxVQUFQO0FBQ0Q7Ozs4QkFFZTtBQUNkLFVBQUksS0FBS2hCLE9BQVQsRUFBa0I7QUFDaEIsYUFBS0EsT0FBTCxDQUFhcHJCLE9BQWI7QUFDRDs7QUFFRCxXQUFLb3JCLE9BQUwsR0FBZSxJQUFmO0FBQ0Q7OztnQ0FFNEI7QUFDM0IsVUFBTXFHLGdDQUFnQyxHQUFHLENBQUMsS0FBS0MsZUFBTixJQUF5Qm55QixJQUFJLENBQUNDLEdBQUwsS0FBYSxLQUFLa3lCLGVBQWxCLEdBQW9DUix1QkFBdEc7QUFFQSxhQUFPLEtBQUtyRyxhQUFMLElBQXNCLEtBQUtPLE9BQTNCLElBQXNDLEtBQUtQLGFBQUwsQ0FBbUIyQixRQUFuQixDQUE0QjVrQixNQUE1QixLQUF1QyxDQUE3RSxJQUFrRjZwQixnQ0FBekY7QUFDRDs7O21DQUU0QjtBQUMzQixVQUFJLENBQUMsS0FBS0wsU0FBTCxFQUFMLEVBQXVCO0FBQ3JCO0FBQ0Q7O0FBRUQsV0FBS2pxQixPQUFMLENBQWFvTCxJQUFiLENBQWtCLDJFQUFsQixFQUErRixLQUFLd1ksU0FBcEcsRUFBK0dtRyx1QkFBdUIsR0FBRyxJQUF6STs7QUFFQSxXQUFLUSxlQUFMLEdBQXVCbnlCLElBQUksQ0FBQ0MsR0FBTCxFQUF2QjtBQUVBLFdBQUtteUIsTUFBTDtBQUNEOzs7NkJBRXNCO0FBQ3JCLFdBQUt2RyxPQUFMLENBQWFwckIsT0FBYjs7QUFFQSxXQUFLb3JCLE9BQUwsR0FBZSxJQUFmO0FBRUEsV0FBSzVKLEtBQUw7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekpIO0FBQ0E7QUFDQTtJQUdxQnZTLGM7Ozs7Ozs7d0JBR2E7QUFDOUIsVUFBSTtBQUNGLGVBQU8yaUIscUNBQVA7QUFDRCxPQUZELENBRUUsT0FBTzlyQixDQUFQLEVBQVU7QUFDVixlQUFPLEtBQUsrckIsZUFBWjtBQUNEO0FBQ0Y7Ozs7OzttSEFUa0I1aUIsYyxxQkFDYyxJQUFJMVAsSUFBSixHQUFXaUssV0FBWCxFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNObkM7QUFDQTtBQUNBO0FBQ0E7O0lBS3FCK0MsaUI7QUFNbkIsNkJBQVk4TSxzQkFBWixFQUE0RDtBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUMxRCxTQUFLN0wsUUFBTCxHQUFnQjZMLHNCQUFzQixDQUFDNUwsT0FBdkM7QUFDQSxTQUFLQyxVQUFMLEdBQWtCMkwsc0JBQXNCLENBQUMxTCxTQUF6QztBQUNBLFNBQUtyRSxVQUFMLEdBQWtCK1Asc0JBQXNCLENBQUN4UCxTQUF6QztBQUNBLFNBQUtpb0IsaUJBQUwsR0FBeUIsSUFBSUMsc0RBQUosQ0FBcUIxWSxzQkFBckIsQ0FBekI7QUFDRDs7Ozt3QkFFR25RLFEsRUFBd0JDLE8sRUFBaUJDLFEsRUFBa0JDLEksRUFBa0I7QUFDL0UsVUFBSUgsUUFBUSxHQUFHLEtBQUtJLFVBQXBCLEVBQWdDO0FBQzlCO0FBQ0Q7O0FBRUQsV0FBS3dvQixpQkFBTCxDQUF1QjlxQixJQUF2QixDQUE0QmtDLFFBQTVCLEVBQXNDQyxPQUF0QyxFQUErQ0MsUUFBL0MsRUFBeURDLElBQXpEO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzQkg7QUFDQTtBQUNBO0FBRUE7O0lBRXFCb0Qsc0I7Ozs7cUlBQ0osZ0Q7Ozs7Ozs7OzJJQUlNaEksd0Y7Ozs7O3dCQUVIO0FBQ2hCLGFBQU8sS0FBS3dJLElBQVo7QUFDRCxLO3NCQUVPQyxHLEVBQWE7QUFDbkIsVUFBTXVNLFlBQVksR0FBRyxJQUFJck0sR0FBSixDQUFRRixHQUFSLENBQXJCO0FBRUF1TSxrQkFBWSxDQUFDcE0sUUFBYixHQUF3Qm9NLFlBQVksQ0FBQ3BNLFFBQWIsR0FBd0IsT0FBaEQ7QUFFQSxXQUFLSixJQUFMLEdBQVl3TSxZQUFZLENBQUN4UixRQUFiLEVBQVo7QUFDRDs7O3dCQUV5QjtBQUN4QixhQUFPLEtBQUtxRixZQUFaO0FBQ0QsSztzQkFFZUMsVyxFQUFxQjtBQUNuQyxXQUFLRCxZQUFMLEdBQW9CQyxXQUFwQjtBQUNEOzs7d0JBRXFCO0FBQ3BCLGFBQU8sS0FBS0MsUUFBWjtBQUNELEs7c0JBRVdDLE8sRUFBaUI7QUFDM0IsV0FBS0QsUUFBTCxHQUFnQkMsT0FBaEI7QUFDRDs7O3dCQUV1QjtBQUN0QixhQUFPLEtBQUtDLFVBQVo7QUFDRCxLO3NCQUVhQyxTLEVBQW1CO0FBQy9CLFdBQUtELFVBQUwsR0FBa0JDLFNBQWxCO0FBQ0Q7Ozt3QkFFNkI7QUFDNUIsYUFBTyxLQUFLckUsVUFBWjtBQUNELEs7c0JBRWFPLFMsRUFBeUI7QUFDckMsV0FBS1AsVUFBTCxHQUFrQk8sU0FBbEI7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2REg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBLElBQU13RSxnQkFBZ0IsR0FBRyxJQUF6Qjs7SUFjcUIwakIsZ0I7QUFPbkIsNEJBQVkxWSxzQkFBWixFQUE0RDtBQUFBOztBQUFBOztBQUFBLHNJQUozQixFQUkyQjs7QUFBQTs7QUFBQSx3SUFGMUNuVixRQUFRLENBQUNvSyxRQUVpQzs7QUFDMUQsU0FBS2hDLHVCQUFMLEdBQStCK00sc0JBQS9CO0FBQ0Q7Ozs7eUJBRUluUSxRLEVBQXdCQyxPLEVBQWlCQyxRLEVBQWtCMEYsUyxFQUF1QjtBQUNyRixVQUFNa2pCLFNBQVMsR0FBRztBQUNoQmxqQixpQkFBUyxFQUFFQSxTQUFTLENBQUN0RixXQUFWLEVBREs7QUFFaEJpRSxlQUFPLEVBQUUsS0FBS25CLHVCQUFMLENBQTZCbUIsT0FGdEI7QUFHaEJwRCxhQUFLLEVBQUVaLHdEQUFZLENBQUNQLFFBQUQsQ0FISDtBQUloQkUsZ0JBQVEsRUFBUkEsUUFKZ0I7QUFLaEJELGVBQU8sRUFBUEEsT0FMZ0I7QUFNaEJ3RSxpQkFBUyxFQUFFLEtBQUtyQix1QkFBTCxDQUE2QnFCLFNBTnhCO0FBT2hCcEwsZUFBTyxFQUFFME0sMkVBUE87QUFRaEIxQixtQkFBVyxFQUFFLEtBQUtqQix1QkFBTCxDQUE2QmlCLFdBUjFCO0FBU2hCd0IseUJBQWlCLEVBQUUsS0FBS0M7QUFUUixPQUFsQjs7QUFZQSxVQUFJOUYsUUFBUSxHQUFHTyw4REFBZixFQUFtQztBQUNqQyxhQUFLd29CLEtBQUwsQ0FBV2pyQixJQUFYLENBQWdCZ3JCLFNBQWhCO0FBQ0QsT0FGRCxNQUVPO0FBQ0wsYUFBS0MsS0FBTCxDQUFXdFYsT0FBWCxDQUFtQnFWLFNBQW5CO0FBQ0Q7O0FBRUQsVUFBTTlpQixPQUFPLEdBQUcsS0FBS2dqQixjQUFMLEVBQWhCO0FBQ0Q7Ozs7dVJBRXNCQyxXOzs7Ozs7QUFDZjlpQix3QixHQUFXLElBQUlDLFFBQUosRTtBQUVqQkQsd0JBQVEsQ0FBQ0UsTUFBVCxDQUFnQixVQUFoQixFQUE0QnJFLElBQUksQ0FBQ1AsU0FBTCxDQUFlO0FBQUM2RSx5QkFBTyxFQUFFMmlCO0FBQVYsaUJBQWYsQ0FBNUI7O3VCQUVhMWlCLEtBQUssQ0FBQyxLQUFLbkQsdUJBQUwsQ0FBNkJZLEdBQTlCLEVBQW1DO0FBQ25Ed0Msd0JBQU0sRUFBRSxNQUQyQztBQUVuREMsc0JBQUksRUFBRU47QUFGNkMsaUJBQW5DLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQkFPZCxLQUFLNGlCLEtBQUwsQ0FBV3JxQixNQUFYLElBQXFCLENBQXJCLElBQTBCLEtBQUtnSSxVOzs7Ozs7OztBQUkvQndpQixrQyxHQUFxQixDO0FBQ3JCQyxnQyxHQUFtQixDO0FBRXZCLHFCQUFLemlCLFVBQUwsR0FBa0IsSUFBbEI7O0FBRU0waUIsMEIsR0FBYSxTQUFiQSxVQUFhLENBQUMzb0IsR0FBRDtBQUFBLHlCQUEyQnlCLE1BQU0sQ0FBQ2dELE1BQVAsQ0FBY3pFLEdBQWQsRUFDM0NyQixNQUQyQyxDQUNwQyxVQUFDaXFCLEdBQUQsRUFBTXZwQixJQUFOO0FBQUEsMkJBQWV1cEIsR0FBRyxJQUFJdnBCLElBQUksR0FBR0EsSUFBSSxDQUFDcEIsTUFBUixHQUFpQixDQUF6QixDQUFsQjtBQUFBLG1CQURvQyxFQUNXLENBRFgsQ0FBM0I7QUFBQSxpQjs7QUFHbkIsdUJBQU8sS0FBS3FxQixLQUFMLENBQVdycUIsTUFBWCxHQUFvQndxQixrQkFBcEIsSUFBMENFLFVBQVUsQ0FBQyxLQUFLTCxLQUFMLENBQVdHLGtCQUFYLENBQUQsQ0FBVixHQUE2Q0MsZ0JBQTdDLEdBQWdFaGtCLGdCQUFqSCxFQUFtSTtBQUNqSWdrQixrQ0FBZ0IsSUFBSUMsVUFBVSxDQUFDLEtBQUtMLEtBQUwsQ0FBV0csa0JBQVgsQ0FBRCxDQUE5QjtBQUNBQSxvQ0FBa0I7QUFDbkI7O0FBRUQsb0JBQUksQ0FBQ0Esa0JBQUwsRUFBeUI7QUFDdkIsdUJBQUtILEtBQUwsQ0FBV0csa0JBQVgsRUFBK0JqcEIsT0FBL0IsR0FBeUMsS0FBSzhvQixLQUFMLENBQVdHLGtCQUFYLEVBQStCanBCLE9BQS9CLENBQXVDOUcsU0FBdkMsQ0FBaUQsQ0FBakQsRUFDdkNpd0IsVUFBVSxDQUFDLEtBQUtMLEtBQUwsQ0FBV0csa0JBQVgsQ0FBRCxDQUFWLElBQThDL2pCLGdCQUFnQixHQUFHaWtCLFVBQVUsQ0FBQyxLQUFLTCxLQUFMLENBQVdHLGtCQUFYLENBQUQsQ0FBM0UsQ0FEdUMsQ0FBekM7QUFFQUEsb0NBQWtCLEdBQUcsQ0FBckI7QUFDRDs7QUFFS0QsMkIsR0FBYyxLQUFLRixLQUFMLENBQVdwaUIsS0FBWCxDQUFpQixDQUFqQixFQUFvQnVpQixrQkFBcEIsQztBQUVwQixxQkFBS0gsS0FBTCxHQUFhLEtBQUtBLEtBQUwsQ0FBV3BpQixLQUFYLENBQWlCdWlCLGtCQUFqQixDQUFiO2tEQUVPLEtBQUtJLFFBQUwsQ0FBY0wsV0FBZCxFQUEyQnBpQixJQUEzQixDQUFnQyxVQUFBQyxRQUFRLEVBQUk7QUFDakQsdUJBQUksQ0FBQ0osVUFBTCxHQUFrQixLQUFsQjs7QUFFQSxzQkFBTVYsT0FBTyxHQUFHLEtBQUksQ0FBQ2dqQixjQUFMLEVBQWhCOztBQUVBLHlCQUFPbGlCLFFBQVA7QUFDRCxpQkFOTSxFQU1KQyxLQU5JLENBTUUsWUFBTTtBQUNiLHVCQUFJLENBQUNMLFVBQUwsR0FBa0IsS0FBbEI7O0FBRUEsc0JBQU1WLE9BQU8sR0FBRyxLQUFJLENBQUNnakIsY0FBTCxFQUFoQjtBQUNELGlCQVZNLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdGWDtBQUNBO0FBQ0E7SUFFcUI3cUIsUztBQUduQix1QkFBMEI7QUFBQSxRQUFkb3JCLFFBQWMsdUVBQUgsQ0FBRzs7QUFBQTs7QUFBQTs7QUFDeEIsU0FBS0MsU0FBTCxHQUFpQkQsUUFBakI7QUFDRDs7OztrQ0FFcUI7QUFDcEIsVUFBSSxLQUFLQyxTQUFMLEtBQW1CLENBQXZCLEVBQTBCO0FBQ3hCLGVBQU8sS0FBUDtBQUNEOztBQUVELFVBQU1DLFVBQVUsR0FBRyxLQUFLRCxTQUFMLEdBQWlCLENBQXBDO0FBQ0EsVUFBTUQsUUFBUSxHQUFHRSxVQUFVLEdBQUc1cUIsSUFBSSxDQUFDNnFCLEdBQUwsQ0FBUyxLQUFLRixTQUFkLENBQUgsR0FBOEIsS0FBS0EsU0FBOUQ7QUFDQSxVQUFJRyxNQUFNLEdBQUc5cUIsSUFBSSxDQUFDK3FCLEtBQUwsQ0FBV0wsUUFBWCxDQUFiO0FBQ0EsVUFBTU0sWUFBWSxHQUFHRixNQUFNLEdBQUcsSUFBOUI7QUFFQUEsWUFBTSxHQUFHOXFCLElBQUksQ0FBQytxQixLQUFMLENBQVdELE1BQU0sR0FBRyxJQUFwQixDQUFUO0FBRUEsVUFBTUcsT0FBTyxHQUFHSCxNQUFNLEdBQUcsRUFBekI7QUFFQUEsWUFBTSxHQUFHOXFCLElBQUksQ0FBQytxQixLQUFMLENBQVdELE1BQU0sR0FBRyxFQUFwQixDQUFUO0FBRUEsVUFBTUksT0FBTyxHQUFHSixNQUFNLEdBQUcsRUFBekI7QUFFQUEsWUFBTSxHQUFHOXFCLElBQUksQ0FBQytxQixLQUFMLENBQVdELE1BQU0sR0FBRyxFQUFwQixDQUFUO0FBRUEsVUFBTUssS0FBSyxHQUFHTCxNQUFNLEdBQUcsRUFBdkI7QUFDQSxVQUFNTSxLQUFLLEdBQUcsQ0FBQyxJQUFELENBQWQ7O0FBRUEsVUFBSVIsVUFBSixFQUFnQjtBQUNkUSxhQUFLLENBQUN4VyxPQUFOLENBQWMsR0FBZDtBQUNEOztBQUVELFVBQUl1VyxLQUFKLEVBQVc7QUFDVEMsYUFBSyxDQUFDbnNCLElBQU4sQ0FBV2tzQixLQUFLLEdBQUcsR0FBbkI7QUFDRDs7QUFFRCxVQUFJRCxPQUFKLEVBQWE7QUFDWEUsYUFBSyxDQUFDbnNCLElBQU4sQ0FBV2lzQixPQUFPLEdBQUcsR0FBckI7QUFDRDs7QUFFRCxVQUFJRCxPQUFPLElBQUlELFlBQWYsRUFBNkI7QUFDM0JJLGFBQUssQ0FBQ25zQixJQUFOLENBQVdvc0IsTUFBTSxDQUFDSixPQUFELENBQWpCOztBQUVBLFlBQUlELFlBQUosRUFBa0I7QUFDaEJJLGVBQUssQ0FBQ25zQixJQUFOLENBQVcsTUFBTSxLQUFLcXNCLFFBQUwsQ0FBY04sWUFBWSxDQUFDOXFCLFFBQWIsRUFBZCxFQUF1QyxDQUF2QyxFQUEwQyxHQUExQyxDQUFqQjtBQUNEOztBQUVEa3JCLGFBQUssQ0FBQ25zQixJQUFOLENBQVcsR0FBWDtBQUNEOztBQUVELGFBQU9tc0IsS0FBSyxDQUFDclcsSUFBTixDQUFXLEVBQVgsQ0FBUDtBQUNEOzs7NkJBRVE5VCxJLEVBQWNzcUIsWSxFQUFzQkMsUyxFQUEyQjtBQUN0RUQsa0JBQVksR0FBR0EsWUFBWSxJQUFJLENBQS9CO0FBQ0FDLGVBQVMsR0FBR0gsTUFBTSxDQUFFLE9BQU9HLFNBQVAsS0FBcUIsV0FBckIsR0FBbUNBLFNBQW5DLEdBQStDLEdBQWpELENBQWxCOztBQUVBLFVBQUl2cUIsSUFBSSxDQUFDcEIsTUFBTCxHQUFjMHJCLFlBQWxCLEVBQWdDO0FBQzlCLGVBQU90cUIsSUFBUDtBQUNEOztBQUVEc3FCLGtCQUFZLEdBQUdBLFlBQVksR0FBR3RxQixJQUFJLENBQUNwQixNQUFuQzs7QUFFQSxVQUFJMHJCLFlBQVksR0FBR0MsU0FBUyxDQUFDM3JCLE1BQTdCLEVBQXFDO0FBQ25DMnJCLGlCQUFTLElBQUlBLFNBQVMsQ0FBQ0MsTUFBVixDQUFpQkYsWUFBWSxHQUFHQyxTQUFTLENBQUMzckIsTUFBMUMsQ0FBYjtBQUNEOztBQUVELGFBQU8yckIsU0FBUyxDQUFDMWpCLEtBQVYsQ0FBZ0IsQ0FBaEIsRUFBbUJ5akIsWUFBbkIsSUFBbUN0cUIsSUFBMUM7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUVIO0FBQ0E7QUFDQTtJQUdxQjZZLFM7Ozt3QkFJVztBQUM1QixhQUFPLElBQUlBLFNBQUosQ0FBYyxDQUFkLEVBQWlCLENBQWpCLENBQVA7QUFDRDs7O0FBRUQscUJBQVlKLEtBQVosRUFBMkJFLE1BQTNCLEVBQTJDO0FBQUE7O0FBQUE7O0FBQUE7O0FBQ3pDLFNBQUtGLEtBQUwsR0FBYUEsS0FBYjtBQUNBLFNBQUtFLE1BQUwsR0FBY0EsTUFBZDtBQUNEOzs7OzJCQUVNOFIsSyxFQUEyQjtBQUNoQyxhQUFPQSxLQUFLLElBQUksS0FBS2hTLEtBQUwsS0FBZWdTLEtBQUssQ0FBQ2hTLEtBQTlCLElBQXVDLEtBQUtFLE1BQUwsS0FBZ0I4UixLQUFLLENBQUM5UixNQUFwRTtBQUNEOzs7K0JBRWtCO0FBQ2pCLHVCQUFVLEtBQUtGLEtBQWYsY0FBd0IsS0FBS0UsTUFBN0I7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3hCSDtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7SUFTcUJyQixnQjtBQVNuQiw0QkFBWXJhLFlBQVosRUFBa0NjLGNBQWxDLEVBQWtFO0FBQUE7O0FBQUE7O0FBQUEsd0lBUjlCYixvRUFBQSxDQUF3QixrQkFBeEIsQ0FROEI7O0FBQUE7O0FBQUEsNEpBTm5CQyx3RUFNbUI7O0FBQUEsZ0pBTGYsSUFBSXpCLHdEQUFKLEVBS2U7O0FBQUE7O0FBQUEsNklBSGxCLElBQUlwRix5REFBSixFQUdrQjs7QUFBQSx1SkFGYixFQUVhOztBQUNoRSxTQUFLK0csYUFBTCxHQUFxQkosWUFBckI7O0FBQ0EsU0FBS2xHLFlBQUwsQ0FBa0JXLEdBQWxCLENBQXNCLEtBQUtnekIsZUFBM0I7O0FBQ0EsU0FBSzdaLGVBQUwsR0FBdUI5UyxjQUF2Qjs7QUFFQSxRQUFJLENBQUMsS0FBSzJzQixlQUFMLENBQXFCL3VCLFdBQTFCLEVBQXVDO0FBQ3JDO0FBQ0Q7O0FBRUQsU0FBSzVFLFlBQUwsQ0FBa0JXLEdBQWxCLENBQXNCLEtBQUtrYSwyQkFBTCxDQUFpQ3JhLFlBQWpDLENBQThDb1ksU0FBOUMsQ0FBd0QsVUFBQXBZLFlBQVksRUFBSTtBQUM1RixXQUFJLENBQUNvekIsc0JBQUwsQ0FBNEJwekIsWUFBNUI7QUFDRCxLQUZxQixDQUF0Qjs7QUFHQSxTQUFLUixZQUFMLENBQWtCVyxHQUFsQixDQUFzQixLQUFLZ3pCLGVBQUwsQ0FBcUJ4dUIsR0FBckIsQ0FBeUJ5VCxTQUF6QixDQUFtQyxVQUFBdlgsS0FBSyxFQUFJO0FBQ2hFLFdBQUksQ0FBQ3d5QixzQkFBTCxDQUE0Qnh5QixLQUE1QjtBQUNELEtBRnFCLENBQXRCOztBQUdBLFNBQUtyQixZQUFMLENBQWtCVyxHQUFsQixDQUFzQixLQUFLZ3pCLGVBQUwsQ0FBcUIxdUIsYUFBckIsQ0FBbUMyVCxTQUFuQyxDQUE2QyxVQUFBdlgsS0FBSyxFQUFJO0FBQzFFLFdBQUksQ0FBQ3l5Qiw2QkFBTCxDQUFtQ3p5QixLQUFuQztBQUNELEtBRnFCLENBQXRCOztBQUdBLFNBQUtyQixZQUFMLENBQWtCVyxHQUFsQixDQUFzQixLQUFLZ3pCLGVBQUwsQ0FBcUJJLDBCQUFyQixDQUFnRG5iLFNBQWhELENBQTBELFVBQUF2WCxLQUFLLEVBQUk7QUFDdkYsV0FBSSxDQUFDMnlCLDZDQUFMLENBQW1EM3lCLEtBQW5EO0FBQ0QsS0FGcUIsQ0FBdEI7QUFHRDs7OzswQ0FFMEM7QUFDekMsYUFBTyxJQUFJNEUseUVBQUosQ0FBd0IsS0FBS0ssYUFBN0IsQ0FBUDtBQUNEOzs7OEJBRWU7QUFDZCxXQUFLdEcsWUFBTCxDQUFrQkMsT0FBbEI7QUFDRDs7OzJDQUU4Qk8sWSxFQUE2QjtBQUMxRCxVQUFNZixHQUFHLEdBQUdELElBQUksQ0FBQ0MsR0FBTCxFQUFaOztBQUNBLFVBQU13MEIsbUJBQW1CLEdBQUcsS0FBS3BaLDJCQUFMLENBQWlDcVosc0JBQWpDLEVBQTVCOztBQUVBLFdBQUtwYSxlQUFMLENBQXFCN1MsSUFBckIsQ0FBMEI7QUFDeEJQLGtCQUFVLEVBQUVsRyxZQUFZLEdBQUdpRywrRUFBSCxHQUF1Q0EsK0VBRHZDO0FBRXhCUyxlQUFPLEVBQUUsQ0FBQ3pILEdBQUcsR0FBRyxLQUFLNkcsYUFBWixJQUE2QixJQUZkO0FBR3hCakYsYUFBSyxFQUFFO0FBQUM4RixnQkFBTSxFQUFFOHNCO0FBQVQ7QUFIaUIsT0FBMUI7O0FBTUEsV0FBSzdzQixPQUFMLENBQWFDLElBQWIsQ0FDRSxrREFERixFQUVFN0csWUFBWSxHQUFHLFlBQUgsR0FBa0IsWUFGaEMsRUFHRSxJQUFJOEcsbURBQUosQ0FBYzJzQixtQkFBZCxFQUFtQzFzQixXQUFuQyxFQUhGO0FBS0Q7OzsyQ0FFOEI0c0IsTSxFQUFzQjtBQUNuRCxVQUFNMTBCLEdBQUcsR0FBR0QsSUFBSSxDQUFDQyxHQUFMLEVBQVo7QUFDQSxVQUFNMjBCLE1BQU0sR0FBRyxLQUFLQyxzQkFBTCxDQUE0Qmx2QixHQUEzQztBQUVBLFdBQUtrdkIsc0JBQUwsQ0FBNEJsdkIsR0FBNUIsR0FBa0NndkIsTUFBbEM7O0FBRUEsV0FBS3JhLGVBQUwsQ0FBcUI3UyxJQUFyQixDQUEwQjtBQUN4QlAsa0JBQVUsRUFBRUQsdUVBRFk7QUFFeEJTLGVBQU8sRUFBRSxDQUFDekgsR0FBRyxHQUFHLEtBQUs2RyxhQUFaLElBQTZCLElBRmQ7QUFHeEJqRixhQUFLLEVBQUU7QUFBQzhGLGdCQUFNLEVBQUVndEI7QUFBVCxTQUhpQjtBQUl4QnpsQixxQkFBYSxFQUFFMGxCLE1BQU0sR0FBRztBQUFDanRCLGdCQUFNLEVBQUVpdEI7QUFBVCxTQUFILEdBQXNCOXZCLFNBSm5CO0FBS3hCcUssZ0JBQVEsRUFBRTtBQUxjLE9BQTFCOztBQVFBLFdBQUt2SCxPQUFMLENBQWFDLElBQWIsQ0FDRSw0Q0FERixFQUVFLElBQUlDLG1EQUFKLENBQWM3SCxHQUFHLEdBQUcsS0FBSzZHLGFBQXpCLEVBQXdDaUIsV0FBeEMsRUFGRixFQUdFNHNCLE1BSEYsRUFJRUMsTUFKRjtBQU1EOzs7a0RBRXFDRSxjLEVBQThCO0FBQ2xFLFVBQU03MEIsR0FBRyxHQUFHRCxJQUFJLENBQUNDLEdBQUwsRUFBWjtBQUNBLFVBQU04MEIsY0FBYyxHQUFHLEtBQUtGLHNCQUFMLENBQTRCcHZCLGFBQW5EO0FBRUEsV0FBS292QixzQkFBTCxDQUE0QnB2QixhQUE1QixHQUE0Q3F2QixjQUE1Qzs7QUFFQSxXQUFLeGEsZUFBTCxDQUFxQjdTLElBQXJCLENBQTBCO0FBQ3hCUCxrQkFBVSxFQUFFRCxxRUFEWTtBQUV4QlMsZUFBTyxFQUFFLENBQUN6SCxHQUFHLEdBQUcsS0FBSzZHLGFBQVosSUFBNkIsSUFGZDtBQUd4QmpGLGFBQUssRUFBRTtBQUFDbUgsZ0JBQU0sRUFBRThyQjtBQUFULFNBSGlCO0FBSXhCNWxCLHFCQUFhLEVBQUU2bEIsY0FBYyxHQUFHO0FBQUMvckIsZ0JBQU0sRUFBRStyQjtBQUFULFNBQUgsR0FBOEJqd0I7QUFKbkMsT0FBMUI7O0FBT0EsV0FBSzhDLE9BQUwsQ0FBYUMsSUFBYixDQUNFLDJEQURGLEVBRUUsSUFBSUMsbURBQUosQ0FBYzdILEdBQUcsR0FBRyxLQUFLNkcsYUFBekIsRUFBd0NpQixXQUF4QyxFQUZGLEVBR0Urc0IsY0FIRixFQUlFQyxjQUpGO0FBTUQ7OztrRUFFcURDLFcsRUFBMkI7QUFDL0UsVUFBTS8wQixHQUFHLEdBQUdELElBQUksQ0FBQ0MsR0FBTCxFQUFaO0FBQ0EsVUFBTWcxQixXQUFXLEdBQUcsS0FBS0osc0JBQUwsQ0FBNEJOLDBCQUFoRDtBQUVBLFdBQUtNLHNCQUFMLENBQTRCTiwwQkFBNUIsR0FBeURTLFdBQXpEOztBQUVBLFdBQUsxYSxlQUFMLENBQXFCN1MsSUFBckIsQ0FBMEI7QUFDeEJQLGtCQUFVLEVBQUVELG9GQURZO0FBRXhCUyxlQUFPLEVBQUUsQ0FBQ3pILEdBQUcsR0FBRyxLQUFLNkcsYUFBWixJQUE2QixJQUZkO0FBR3hCakYsYUFBSyxFQUFFO0FBQUNxekIsZUFBSyxFQUFFRjtBQUFSLFNBSGlCO0FBSXhCOWxCLHFCQUFhLEVBQUUrbEIsV0FBVyxHQUFHO0FBQUNDLGVBQUssRUFBRUQ7QUFBUixTQUFILEdBQTBCbndCO0FBSjVCLE9BQTFCOztBQU9BLFdBQUs4QyxPQUFMLENBQWFDLElBQWIsQ0FDRSxxRUFERixFQUVFLElBQUlDLG1EQUFKLENBQWM3SCxHQUFHLEdBQUcsS0FBSzZHLGFBQXpCLEVBQXdDaUIsV0FBeEMsRUFGRixFQUdFaXRCLFdBSEYsRUFJRUMsV0FKRjtBQU1EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzNJSDtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBOztJQUdxQjNULGM7QUFtQm5CLDBCQUFZdmEsUUFBWixFQUE4QkwsWUFBOUIsRUFBb0R5dUIsZ0JBQXBELEVBQThFM3RCLGNBQTlFLEVBQThHO0FBQUE7O0FBQUE7O0FBQUE7O0FBQUEsd0lBaEIxRWIsb0VBQUEsQ0FBd0IsaUJBQXhCLENBZ0IwRTs7QUFBQSw2SUFmOUQsSUFBSTVHLHlEQUFKLEVBZThEOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUM1RyxTQUFLeXJCLFNBQUwsR0FBaUJ6a0IsUUFBakI7QUFDQSxTQUFLRCxhQUFMLEdBQXFCSixZQUFyQjtBQUNBLFNBQUs0WCxpQkFBTCxHQUF5QjZXLGdCQUF6QjtBQUVBLFNBQUs3YSxlQUFMLEdBQXVCOVMsY0FBdkI7QUFDRDs7OztvREFFK0JzUCxLLEVBQStCO0FBQUE7O0FBQzdELFdBQUtzZSx5QkFBTCxHQUFpQ3AxQixJQUFJLENBQUNDLEdBQUwsRUFBakM7O0FBRUEsV0FBS28xQixrQkFBTCxHQUEwQjtBQUFBLGVBQVksS0FBSSxDQUFDQyxvQkFBTCxFQUFaO0FBQUEsT0FBMUI7O0FBRUF4ZSxXQUFLLENBQUM1VixnQkFBTixDQUF1QixZQUF2QixFQUFxQyxLQUFLbTBCLGtCQUExQztBQUNBdmUsV0FBSyxDQUFDNVYsZ0JBQU4sQ0FBdUIsZ0JBQXZCLEVBQXlDLEtBQUttMEIsa0JBQTlDO0FBRUEsV0FBS0UsOEJBQUwsR0FBc0MsSUFBSW4wQixxREFBSixDQUFlLFlBQU07QUFDekQwVixhQUFLLENBQUN6VixtQkFBTixDQUEwQixZQUExQixFQUF3QyxLQUFJLENBQUNnMEIsa0JBQTdDO0FBQ0F2ZSxhQUFLLENBQUN6VixtQkFBTixDQUEwQixnQkFBMUIsRUFBNEMsS0FBSSxDQUFDZzBCLGtCQUFqRDtBQUNELE9BSHFDLENBQXRDOztBQUlBLFdBQUs3MEIsWUFBTCxDQUFrQlcsR0FBbEIsQ0FBc0IsS0FBS28wQiw4QkFBM0I7QUFDRDs7O2dEQUUyQnplLEssRUFBK0I7QUFBQTs7QUFDekQsV0FBSzBlLGVBQUwsR0FBdUI7QUFBQSxlQUFZLE1BQUksQ0FBQ0MsT0FBTCxFQUFaO0FBQUEsT0FBdkI7O0FBRUEsV0FBS0Msc0JBQUwsR0FBOEIsVUFBQ0MsS0FBRDtBQUFBLGVBQWlCLE1BQUksQ0FBQ0MsY0FBTCxDQUFvQkQsS0FBcEIsRUFBMkI3ZSxLQUEzQixDQUFqQjtBQUFBLE9BQTlCOztBQUVBQSxXQUFLLENBQUM1VixnQkFBTixDQUF1QixTQUF2QixFQUFrQyxLQUFLczBCLGVBQXZDO0FBQ0ExZSxXQUFLLENBQUM1VixnQkFBTixDQUF1QixPQUF2QixFQUFnQyxLQUFLczBCLGVBQXJDO0FBQ0ExZSxXQUFLLENBQUM1VixnQkFBTixDQUF1QixTQUF2QixFQUFrQyxLQUFLczBCLGVBQXZDO0FBQ0ExZSxXQUFLLENBQUM1VixnQkFBTixDQUF1QixNQUF2QixFQUErQixLQUFLdzBCLHNCQUFwQztBQUNBNWUsV0FBSyxDQUFDNVYsZ0JBQU4sQ0FBdUIsU0FBdkIsRUFBa0MsS0FBS3cwQixzQkFBdkM7QUFDQTVlLFdBQUssQ0FBQzVWLGdCQUFOLENBQXVCLFVBQXZCLEVBQW1DLEtBQUt3MEIsc0JBQXhDO0FBQ0E1ZSxXQUFLLENBQUM1VixnQkFBTixDQUF1QixZQUF2QixFQUFxQyxLQUFLdzBCLHNCQUExQztBQUVBLFdBQUtHLHlCQUFMLEdBQWlDLElBQUl6MEIscURBQUosQ0FBZSxZQUFNO0FBQ3BEMFYsYUFBSyxDQUFDelYsbUJBQU4sQ0FBMEIsU0FBMUIsRUFBcUMsTUFBSSxDQUFDbTBCLGVBQTFDO0FBQ0ExZSxhQUFLLENBQUN6VixtQkFBTixDQUEwQixPQUExQixFQUFtQyxNQUFJLENBQUNtMEIsZUFBeEM7QUFDQTFlLGFBQUssQ0FBQ3pWLG1CQUFOLENBQTBCLFNBQTFCLEVBQXFDLE1BQUksQ0FBQ20wQixlQUExQztBQUNBMWUsYUFBSyxDQUFDelYsbUJBQU4sQ0FBMEIsTUFBMUIsRUFBa0MsTUFBSSxDQUFDcTBCLHNCQUF2QztBQUNBNWUsYUFBSyxDQUFDelYsbUJBQU4sQ0FBMEIsU0FBMUIsRUFBcUMsTUFBSSxDQUFDcTBCLHNCQUExQztBQUNBNWUsYUFBSyxDQUFDelYsbUJBQU4sQ0FBMEIsVUFBMUIsRUFBc0MsTUFBSSxDQUFDcTBCLHNCQUEzQztBQUNBNWUsYUFBSyxDQUFDelYsbUJBQU4sQ0FBMEIsWUFBMUIsRUFBd0MsTUFBSSxDQUFDcTBCLHNCQUE3QztBQUNELE9BUmdDLENBQWpDOztBQVVBLFdBQUtsMUIsWUFBTCxDQUFrQlcsR0FBbEIsQ0FBc0IsS0FBSzAwQix5QkFBM0I7QUFDRDs7OzhCQUVlO0FBQ2QsV0FBS3IxQixZQUFMLENBQWtCQyxPQUFsQjtBQUNEOzs7MkNBUW9DO0FBQ25DLFVBQU1SLEdBQUcsR0FBR0QsSUFBSSxDQUFDQyxHQUFMLEVBQVo7QUFFQSxXQUFLNjFCLG9CQUFMLENBQTBCNzFCLEdBQTFCO0FBQ0EsV0FBSzgxQixtQ0FBTCxDQUF5QzkxQixHQUF6Qzs7QUFFQSxXQUFLczFCLDhCQUFMLENBQW9DOTBCLE9BQXBDO0FBQ0Q7Ozt5Q0FFNEJSLEcsRUFBVztBQUN0QyxXQUFLKzFCLGlCQUFMLEdBQXlCLzFCLEdBQUcsR0FBRyxLQUFLbTFCLHlCQUFwQzs7QUFFQSxXQUFLOWEsZUFBTCxDQUFxQjdTLElBQXJCLENBQTBCO0FBQ3hCUCxrQkFBVSxFQUFFRCwwRUFEWTtBQUV4QlMsZUFBTyxFQUFFLENBQUN6SCxHQUFHLEdBQUcsS0FBSzZHLGFBQVosSUFBNkIsSUFGZDtBQUd4QmpGLGFBQUssRUFBRTtBQUFDOEYsZ0JBQU0sRUFBRSxLQUFLcXVCO0FBQWQsU0FIaUI7QUFJeEJqdkIsZ0JBQVEsRUFBRSxLQUFLeWtCO0FBSlMsT0FBMUI7O0FBT0EsV0FBSzVqQixPQUFMLENBQWFDLElBQWIsQ0FDRSw0QkFERixFQUVFLEtBQUtvdUIscUJBRlAsRUFHRSxLQUFLekssU0FIUCxFQUlFLElBQUkxakIsbURBQUosQ0FBYyxLQUFLa3VCLGlCQUFuQixFQUFzQ2p1QixXQUF0QyxFQUpGO0FBTUQ7Ozt3REFFMkM5SCxHLEVBQVc7QUFDckQsV0FBS2kyQixnQ0FBTCxHQUF3Q2oyQixHQUFHLEdBQUcsS0FBS3FlLGlCQUFuRDs7QUFFQSxXQUFLaEUsZUFBTCxDQUFxQjdTLElBQXJCLENBQTBCO0FBQ3hCUCxrQkFBVSxFQUFFRCx5RkFEWTtBQUV4QlMsZUFBTyxFQUFFLENBQUN6SCxHQUFHLEdBQUcsS0FBSzZHLGFBQVosSUFBNkIsSUFGZDtBQUd4QmpGLGFBQUssRUFBRTtBQUFDOEYsZ0JBQU0sRUFBRSxLQUFLdXVCO0FBQWQsU0FIaUI7QUFJeEJudkIsZ0JBQVEsRUFBRSxLQUFLeWtCO0FBSlMsT0FBMUI7O0FBT0EsV0FBSzVqQixPQUFMLENBQWFDLElBQWIsQ0FDRSxnREFERixFQUVFLEtBQUtvdUIscUJBRlAsRUFHRSxLQUFLekssU0FIUCxFQUlFLElBQUkxakIsbURBQUosQ0FBYyxLQUFLb3VCLGdDQUFuQixFQUFxRG51QixXQUFyRCxFQUpGO0FBTUQ7Ozs4QkFFdUI7QUFDdEIsVUFBSSxLQUFLb3VCLGFBQVQsRUFBd0I7QUFDdEI7QUFDRDs7QUFFRCxXQUFLN2IsZUFBTCxDQUFxQjdTLElBQXJCLENBQTBCO0FBQ3hCUCxrQkFBVSxFQUFFRCxpRUFEWTtBQUV4QlMsZUFBTyxFQUFFLENBQUMxSCxJQUFJLENBQUNDLEdBQUwsS0FBYSxLQUFLNkcsYUFBbkIsSUFBb0MsSUFGckI7QUFHeEJDLGdCQUFRLEVBQUUsS0FBS3lrQjtBQUhTLE9BQTFCOztBQU1BLFdBQUsySyxhQUFMLEdBQXFCbjJCLElBQUksQ0FBQ0MsR0FBTCxFQUFyQjs7QUFFQSxXQUFLMkgsT0FBTCxDQUFhQyxJQUFiLENBQ0UsMENBREYsRUFFRSxLQUFLb3VCLHFCQUZQLEVBR0UsS0FBS3pLLFNBSFA7QUFLRDs7O21DQUVzQm1LLEssRUFBTzdlLEssRUFBYTtBQUN6QyxVQUFJLENBQUNBLEtBQUssQ0FBQ21XLFFBQVgsRUFBcUI7QUFDbkI7QUFDRDs7QUFFRCxVQUFNbUosWUFBWSxHQUFHdGYsS0FBSyxDQUFDbVcsUUFBTixDQUFlNWtCLE1BQXBDO0FBQ0EsVUFBTWd1QixzQ0FBc0MsR0FBR1YsS0FBSyxDQUFDandCLElBQU4sS0FBZSxTQUFmLElBQzVDMHdCLFlBQVksR0FBRyxDQUQ2QixHQUN6QixDQUFDVCxLQUFLLENBQUNqd0IsSUFBTixLQUFlLFVBQWYsSUFDbEJpd0IsS0FBSyxDQUFDandCLElBQU4sS0FBZSxZQURFLEtBRWpCb1IsS0FBSyxDQUFDbVcsUUFBTixDQUFlQyxHQUFmLENBQW1Ca0osWUFBWSxHQUFHLENBQWxDLE1BQXlDLEtBQUtFLGFBSEosR0FHb0IsSUFIbkU7O0FBS0EsVUFBSSxDQUFDLEtBQUtILGFBQU4sSUFBdUJFLHNDQUEzQixFQUFtRTtBQUNqRTtBQUNEOztBQUVELFVBQUlWLEtBQUssQ0FBQ2p3QixJQUFOLEtBQWUsVUFBbkIsRUFBK0I7QUFDN0IsYUFBSzR3QixhQUFMLEdBQXFCeGYsS0FBSyxDQUFDbVcsUUFBTixDQUFlQyxHQUFmLENBQW1Ca0osWUFBWSxHQUFHLENBQWxDLENBQXJCO0FBQ0Q7O0FBRUQsVUFBTUcsYUFBYSxHQUFHdjJCLElBQUksQ0FBQ0MsR0FBTCxLQUFhLEtBQUtrMkIsYUFBeEM7O0FBRUEsV0FBSzdiLGVBQUwsQ0FBcUI3UyxJQUFyQixDQUEwQjtBQUN4QlAsa0JBQVUsRUFBRUQsbUVBRFk7QUFFeEJTLGVBQU8sRUFBRSxDQUFDMUgsSUFBSSxDQUFDQyxHQUFMLEtBQWEsS0FBSzZHLGFBQW5CLElBQW9DLElBRnJCO0FBR3hCakYsYUFBSyxFQUFFO0FBQUM4RixnQkFBTSxFQUFFNHVCO0FBQVQsU0FIaUI7QUFJeEJ4dkIsZ0JBQVEsRUFBRSxLQUFLeWtCO0FBSlMsT0FBMUI7O0FBT0EsV0FBSzVqQixPQUFMLENBQWFDLElBQWIsQ0FDRSxrRUFERixFQUVFLEtBQUtvdUIscUJBRlAsRUFHRSxLQUFLekssU0FIUCxFQUlFLElBQUkxakIsbURBQUosQ0FBY3l1QixhQUFkLEVBQTZCeHVCLFdBQTdCLEVBSkY7O0FBTUEsV0FBS291QixhQUFMLEdBQXFCLElBQXJCO0FBQ0Q7Ozs2Q0FFd0JLLGEsRUFBNkI7QUFDcEQsV0FBS2xjLGVBQUwsQ0FBcUI3UyxJQUFyQixDQUEwQjtBQUN4QlAsa0JBQVUsRUFBRUQsMkVBRFk7QUFFeEJTLGVBQU8sRUFBRSxDQUFDMUgsSUFBSSxDQUFDQyxHQUFMLEtBQWEsS0FBSzZHLGFBQW5CLElBQW9DLElBRnJCO0FBR3hCakYsYUFBSyxFQUFFO0FBQUNtSCxnQkFBTSxFQUFFd3RCO0FBQVQsU0FIaUI7QUFJeEJ0bkIscUJBQWEsRUFBRSxLQUFLdW5CLGdCQUFMLEdBQXdCO0FBQUN6dEIsZ0JBQU0sRUFBRSxLQUFLeXRCO0FBQWQsU0FBeEIsR0FBMEQzeEIsU0FKakQ7QUFLeEJpQyxnQkFBUSxFQUFFLEtBQUt5a0I7QUFMUyxPQUExQjs7QUFRQSxXQUFLaUwsZ0JBQUwsR0FBd0JELGFBQXhCO0FBQ0Q7Ozt3QkF0SDJDO0FBQzFDLFVBQU12MkIsR0FBRyxHQUFHRCxJQUFJLENBQUNDLEdBQUwsRUFBWjtBQUVBLGFBQU8sSUFBSTZILG1EQUFKLENBQWM3SCxHQUFHLEdBQUcsS0FBSzZHLGFBQXpCLEVBQXdDaUIsV0FBeEMsRUFBUDtBQUNEOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3hGSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QyxXQUFXO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBLDhDQUE4QyxPQUFPOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsS0FBMEIsb0JBQW9CLENBQUU7QUFDbEQ7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O1VDeHRCQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7Ozs7V0NyQkE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGdDQUFnQyxZQUFZO1dBQzVDO1dBQ0EsRTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHdDQUF3Qyx5Q0FBeUM7V0FDakY7V0FDQTtXQUNBLEU7Ozs7O1dDUEEsc0Y7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0Esc0RBQXNELGtCQUFrQjtXQUN4RTtXQUNBLCtDQUErQyxjQUFjO1dBQzdELEU7Ozs7VUNOQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJjaGFubmVscy5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG59KShzZWxmLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCJmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5TGlrZVRvQXJyYXk7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhIb2xlczsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXlcIik7XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXM7IiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkOyIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcblxuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBfdGhyb3coZXJyKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgfVxuXG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3M7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5OyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZjsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZlwiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheTsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcbiAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheUxpbWl0OyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlUmVzdDsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVNwcmVhZDsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZlwiKTtcblxudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiKTtcblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZjsiLCJ2YXIgYXJyYXlXaXRoSG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhIb2xlc1wiKTtcblxudmFyIGl0ZXJhYmxlVG9BcnJheUxpbWl0ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5TGltaXRcIik7XG5cbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0XCIpO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5OyIsInZhciBhcnJheVdpdGhvdXRIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aG91dEhvbGVzXCIpO1xuXG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheVwiKTtcblxudmFyIG5vbkl0ZXJhYmxlU3ByZWFkID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVTcHJlYWRcIik7XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90b0NvbnN1bWFibGVBcnJheTsiLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2Y7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5XCIpO1xuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWdlbmVyYXRvci1ydW50aW1lXCIpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmNvbnN0IGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0ID0gMzAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlJc0ZvcmVncm91bmQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNGb3JlZ3JvdW5kOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIF90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U6IG51bWJlciA9IERhdGUubm93KCk7XG4gIHByaXZhdGUgX2RvY3VtZW50Rm9jdXNJbnRlcnZhbDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2lzRm9yZWdyb3VuZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kID0gbmV3IFJlYWRPbmx5U3ViamVjdCh0aGlzLl9pc0ZvcmVncm91bmQpO1xuICAgIHRoaXMuZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTtcbiAgfVxuXG4gIGdldCBpc0ZvcmVncm91bmQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQ7XG4gIH1cblxuICBnZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTogdm9pZCB7XG4gICAgbGV0IGhpZGRlbjtcbiAgICBsZXQgdmlzaWJpbGl0eUNoYW5nZTtcblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWdub3JlZCBhcyB0eXBlc2NyaXB0IGRvZXMgbm90IGhhdmUgbGVnYWN5IGdldFN0YXRzIHR5cGVzXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1pZ25vcmUgKi9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5tc0hpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICdtc0hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ21zdmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQud2Via2l0SGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ3dlYmtpdEhpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3dlYmtpdHZpc2liaWxpdHljaGFuZ2UnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LmhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gT3BlcmEgMTIuMTAgYW5kIEZpcmVmb3ggMTggYW5kIGxhdGVyIHN1cHBvcnRcbiAgICAgIGhpZGRlbiA9ICdoaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSAqL1xuXG4gICAgY29uc3QgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9ICFkb2N1bWVudFtoaWRkZW5dO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnRbaGlkZGVuXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuXG4gICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0ZW5Gb3JEb2N1bWVudEZvY3VzLmNhbGwodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSBkb2N1bWVudC5oYXNGb2N1cygpO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9LCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IG51bGw7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc0ZvcmVncm91bmQgPT09IGlzRm9yZWdyb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzRm9yZWdyb3VuZC52YWx1ZSA9IGlzRm9yZWdyb3VuZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlckRldGVjdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4ID0gLyhNU0lFfCg/IUdlY2tvLispRmlyZWZveHwoPyFBcHBsZVdlYktpdC4rQ2hyb21lLispU2FmYXJpfCg/IUFwcGxlV2ViS2l0LispQ2hyb21lfEFwcGxlV2ViS2l0KD8hLitDaHJvbWV8LitTYWZhcmkpfEdlY2tvKD8hLitGaXJlZm94KSkoPzogfFxcLykoW1xcZC5hcHJlXSspL2c7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJNYWpvclZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNjkgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzY5LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcxID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzIgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcyLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc1ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzYgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc2LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NyA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJyk7XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJNYWpvclZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNjkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU2OTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcwO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcxKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc0O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc1KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc3O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XG5cbiAgICBpZiAoYnJvd3Nlck5hbWVBbmRWZXJzaW9uICYmIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXSkge1xuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVMaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3Nlck5hbWVMaXN0WzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3NlclZlcnNpb25MaXN0IHx8ICFicm93c2VyVmVyc2lvbkxpc3RbMV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xuXG4gICAgaWYgKCFmdWxsVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcihmdWxsVmVyc2lvbi5zcGxpdCgnLicpWzBdKSB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XG5cbiAgICBpZiAobXNpZSA+IDApIHtcbiAgICAgIC8vIElFIDEwIG9yIG9sZGVyID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcobXNpZSArIDUsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCl9YDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XG5cbiAgICBpZiAodHJpZGVudCA+IDApIHtcbiAgICAgIC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgY29uc3QgdmVyc2lvbiA9IHVzZXJBZ2VudC5pbmRleE9mKCdydjonKTtcblxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcodmVyc2lvbiArIDMsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgdmVyc2lvbikpLCAxMCl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciB7XG4gIGdldFN0cmluZ1ZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKSB8fFxuICAgICAgdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKGAke25hbWV9LXVyaS1wYXJhbWV0ZXItbmFtZWApIHx8XG4gICAgICB0aGlzLmRlZmF1bHRTdHJpbmdWYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIGdldEJvb2xlYW5WYWx1ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJyB8fCB2YWx1ZSA9PT0gJ09uJztcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZUZyb21VcmkgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCk7XG5cbiAgICBpZiAodmFsdWVGcm9tVXJpKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJzEnIHx8IHZhbHVlID09PSAnT24nO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRCb29sZWFuVmFsdWVbbmFtZV0gPT09IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0U3RyaW5nVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtbWV0cmljcy1sZXZlbCc6IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCksXG4gICAgICAncGhlbml4LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNvbnNvbGUtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LXRlbGVtZXRyeS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jaGFubmVsLXRva2VuJzogJycsXG4gICAgICAncGhlbml4LXVyaSc6ICcnLFxuICAgICAgJ3BoZW5peC1iYXNlLXVyaSc6ICcnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRCb29sZWFuVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogYm9vbGVhbiB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGFWYWx1ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYG1ldGFbbmFtZT0nJHtuYW1lfSddYCk7XG5cbiAgICBpZiAoIW1ldGFWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbWV0YVZhbHVlLmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZVVSSVBhcmFtZXRlck5hbWUgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAoIXZhbHVlVVJJUGFyYW1ldGVyTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpLmdldCh2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHx8IHVuZGVmaW5lZDtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzU3VwcG9ydGVkID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvclsnY29ubmVjdGlvbiddO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydHQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VmZmVjdGl2ZVR5cGU6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk7XG4gICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gIH1cblxuICBnZXQgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IHJ0dCgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9ydHQ7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlVHlwZSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9lZmZlY3RpdmVUeXBlO1xuICB9XG5cbiAgZ2V0IGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rTWF4O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZmZlY3RpdmVUeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gJ1Vua25vd24nO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5lZmZlY3RpdmVUeXBlIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnR5cGU7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucnR0O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgICB9O1xuXG4gICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRpc3RpY3MoKTogdm9pZCB7XG4gICAgdGhpcy5fcnR0LnZhbHVlID0gdGhpcy5nZXRSb3VuZFRyaXBUaW1lKCk7XG4gICAgdGhpcy5fZWZmZWN0aXZlVHlwZS52YWx1ZSA9IHRoaXMuZ2V0RWZmZWN0aXZlVHlwZSgpO1xuICAgIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnZhbHVlID0gdGhpcy5nZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fUFJJVkFDWV9NT0RFX186IGJvb2xlYW47XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByaXZhY3lNb2RlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2lzUHJpdmF0ZTogYm9vbGVhbjtcblxuICBzdGF0aWMgZ2V0IGlzUHJpdmF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNQcml2YXRlO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5SXNQcml2YXRlKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9pc1ByaXZhdGUgPSBfX1BSSVZBQ1lfTU9ERV9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2lzUHJpdmF0ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5Qcml2YWN5TW9kZS5hcHBseUlzUHJpdmF0ZSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcblxuZXhwb3J0IGNsYXNzIFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtU2V0dXBMaXN0ZW5lcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldHJpY3NTZXJ2aWNlID0gU0RLLm1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX21ldHJpY1N1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdWNjZXNzKHN0cmVhbUlkKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQsIHN0cmVhbUlkKTtcbiAgfVxuXG4gIGZhaWwoKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRTdHJlYW1NZXRyaWMobWV0cmljVHlwZTogTWV0cmljc1R5cGUsIHN0cmVhbUlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21ldHJpY1N1Ym1pdHRlZCkge1xuICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNTdWJtaXR0ZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXR1cFRpbWUgPSBub3cgLSB0aGlzLl9zdGFydFRpbWU7XG4gICAgY29uc3QgbWV0cmljTmFtZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpY1R5cGUpLmdldE5hbWUoKTtcblxuICAgIHRoaXMubWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHNldHVwVGltZX0sXG4gICAgICBzdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFN0cmVhbSBtZXRyaWMgWyVzXSBpbiBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgbmV3IER1cmF0aW9ucyhzZXR1cFRpbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkOiBib29sZWFuO1xuICBwcml2YXRlIF9kaXNwb3NhYmxlOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGRpc3Bvc2FibGU6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGUgPSBkaXNwb3NhYmxlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZGlzcG9zYWJsZS5jYWxsKHRoaXMpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdDogSURpc3Bvc2FibGVbXSA9IFtdO1xuXG4gIGFkZChkaXNwb3NhYmxlOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QucHVzaChkaXNwb3NhYmxlKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5mb3JFYWNoKGRpc3Bvc2FibGUgPT4gZGlzcG9zYWJsZS5kaXNwb3NlKCkpO1xuICAgIHRoaXMuX2xpc3QubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBEaXNwb3NhYmxlTGlzdFtkaXNwb3NhYmxlcz0ke3RoaXMuX2xpc3QubGVuZ3RofV1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5cbmV4cG9ydCBlbnVtIExvZ2dpbmdMZXZlbCB7XG4gIEFsbCA9IC0xLFxuICBUcmFjZSA9IDEwLFxuICBEZWJ1ZyA9IDIwLFxuICBJbmZvID0gMzAsXG4gIFdhcm4gPSA0MCxcbiAgRXJyb3IgPSA1MCxcbiAgRmF0YWwgPSA2MCxcbiAgT2ZmID0gMTAwLFxufVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxJbnB1dFR5cGVzID0gJ09mZicgfCAnVHJhY2UnIHwgJ0RlYnVnJyB8ICdJbmZvJyB8ICdXYXJuJyB8ICdFcnJvcicgfCAnRmF0YWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhdGVnb3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGVuZGVyczogQXBwZW5kZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQ7XG5cbiAgZ2V0IGNhdGVnb3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGVnb3J5O1xuICB9XG5cbiAgZ2V0IGFwcGVuZGVycygpOiBBcHBlbmRlcnMge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdUaHJlc2hvbGQge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICB0cmFjZSguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuVHJhY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuVHJhY2UsIGFyZ3MpO1xuICB9XG5cbiAgZGVidWcoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkRlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkRlYnVnLCBhcmdzKTtcbiAgfVxuXG4gIGluZm8oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuSW5mbywgYXJncyk7XG4gIH1cblxuICB3YXJuKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLldhcm4sIGFyZ3MpO1xuICB9XG5cbiAgZXJyb3IoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkVycm9yLCBhcmdzKTtcbiAgfVxuXG4gIGZhdGFsKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5GYXRhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5GYXRhbCwgYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGxvZyhsZXZlbDogbnVtYmVyLCBhcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3MpO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLnZhbHVlLmZvckVhY2goKGFwcGVuZGVyOiBJQXBwZW5kZXIpID0+IHtcbiAgICAgIGFwcGVuZGVyLmxvZyhsZXZlbCwgbWVzc2FnZSwgdGhpcy5jYXRlZ29yeSwgZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQbGFjZWhvbGRlcnMoYXJnczogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IGFyZ3NbMF07XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YgJiYgYXJncy5sZW5ndGggPiAxICYmIGluZGV4ID49IDApIHtcbiAgICAgIGluZGV4ID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mKCclJywgaW5kZXgpO1xuXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIGluZGV4ICsgMik7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICAvLyBFc2NhcGVkICclJScgdHVybnMgaW50byAnJSdcbiAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICclZCcgb3IgJyVzJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy50b1N0cmluZyhhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICVqJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnkoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICBhcmdzID0gYXJncy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxID09PSBhcnJheS5sZW5ndGggJiYgY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGBbJHt0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZSl9XWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkoYXJnOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhY2hlID0gW107XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhcmcgaW5zdGFuY2VvZiBFcnJvciA/IHRoaXMudG9TdHJpbmcoYXJnKSA6IGFyZyxcbiAgICAgICAgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNhY2hlLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gJzxyZWN1cnNpdmU+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAyXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnW29iamVjdCBpbnZhbGlkIEpTT04uc3RyaW5naWZ5XSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXJndW1lbnQoYXJndW1lbnQ6IGFueSwgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgdGhpcy50b1N0cmluZyhhcmd1bWVudCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1N0cmluZyhkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGF0YSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgdG9TdHJpbmdTdHIgPSAnJztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gJ1tvYmplY3QgaW52YWxpZCB0b1N0cmluZygpXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9TdHJpbmdTdHI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBhcHBlbmRlcnM6IEFwcGVuZGVycywgdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkKSB7XG4gICAgdGhpcy5fY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSBhcHBlbmRlcnM7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJpdmFjeU1vZGUgZnJvbSAnLi4vZG9tL1ByaXZhY3lNb2RlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRGVmYXVsdHMge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gUHJpdmFjeU1vZGUuaXNQcml2YXRlID8gTG9nZ2luZ0xldmVsLk9mZiA6IExvZ2dpbmdMZXZlbC5BbGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIFByaXZhY3lNb2RlLmlzUHJpdmF0ZSA/IExvZ2dpbmdMZXZlbC5PZmYgOiBMb2dnaW5nTGV2ZWwuQWxsO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4vTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXIsIHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2Vyczoge1tjYXRlZ29yeTogc3RyaW5nXTogSUxvZ2dlcn0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGVuZGVyczogQXBwZW5kZXJzID0gbmV3IEFwcGVuZGVycygpO1xuICBwcml2YXRlIHN0YXRpYyBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkID0gbmV3IExvZ2dpbmdUaHJlc2hvbGQoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBuZXcgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMb2dnZXIoY2F0ZWdvcnk6IHN0cmluZyk6IElMb2dnZXIge1xuICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjYXRlZ29yeSA9ICdTREsnO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV0gPSBuZXcgTG9nZ2VyKGNhdGVnb3J5LCB0aGlzLl9hcHBlbmRlcnMsIHRoaXMuX3RocmVzaG9sZCk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2luZ0xldmVsKCk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCdjb25zb2xlJywgTG9nZ2VyRmFjdG9yeS5hcHBseUNvbnNvbGVMb2dnZXIuYmluZCh0aGlzKSk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCd0ZWxlbWV0cnknLCBMb2dnZXJGYWN0b3J5LmFwcGx5VGVsZW1ldHJ5TG9nZ2VyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlMb2dnaW5nTGV2ZWwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbG9nZ2luZy1sZXZlbCcpO1xuXG4gICAgaWYgKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pIHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbChuYW1lOiBzdHJpbmcsIGFwcGx5QXBwZW5kZXI6IChsZXZlbDogTG9nZ2luZ0xldmVsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKGBwaGVuaXgtJHtuYW1lfS1sb2dnaW5nLWxldmVsYCk7XG5cbiAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09ICdPZmYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXBwbHlBcHBlbmRlcihMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5Q29uc29sZUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseVRlbGVtZXRyeUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkxvZ2dlckZhY3RvcnkuYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbElucHV0VHlwZXN9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ0xldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKGxvZ2dpbmdMZXZlbDogTG9nZ2luZ0xldmVsKTogTG9nZ2luZ0xldmVsSW5wdXRUeXBlcyB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWwpIHtcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuVHJhY2U6XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRGVidWc6XG4gICAgICAgIHJldHVybiAnRGVidWcnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuSW5mbzpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5XYXJuOlxuICAgICAgICByZXR1cm4gJ1dhcm4nO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRXJyb3I6XG4gICAgICAgIHJldHVybiAnRXJyb3InO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRmF0YWw6XG4gICAgICAgIHJldHVybiAnRmF0YWwnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKGxvZ2dpbmdMZXZlbFR5cGU6IExvZ2dpbmdMZXZlbElucHV0VHlwZXMpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5PZmY7XG4gICAgICBjYXNlICdUcmFjZSc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuVHJhY2U7XG4gICAgICBjYXNlICdEZWJ1Zyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRGVidWc7XG4gICAgICBjYXNlICdJbmZvJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICAgICAgY2FzZSAnV2Fybic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuV2FybjtcbiAgICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5FcnJvcjtcbiAgICAgIGNhc2UgJ0ZhdGFsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5GYXRhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nVGhyZXNob2xkIHtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB2YWx1ZSgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXRUaHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNUeXBlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc1R5cGU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljczogTWV0cmljc1R5cGUpIHtcbiAgICB0aGlzLl9tZXRyaWNzID0gbWV0cmljcztcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWV0cmljc1R5cGVbdGhpcy5fbWV0cmljc107XG4gIH1cblxuICBnZXRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlN0YWxsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkJ1ZmZlcmluZzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuTmV0d29ya1R5cGU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX21ldHJpY3MpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi9UZWxlbWV0cnlEZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGVsZW1ldHJ5TGV2ZWwge1xuICBPZmYgPSAxMDAsXG4gIEVzc2VudGlhbCA9IDEwLFxuICBBbGwgPSAtMVxufVxuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlMZXZlbFR5cGUgPSAnT2ZmJyB8ICdFc3NlbnRpYWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L21ldHJpY3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsID0gVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWV0cmljc1VybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIG1ldHJpY3NVcmwucGF0aG5hbWUgPSBtZXRyaWNzVXJsLnBhdGhuYW1lICsgJy9tZXRyaWNzJztcblxuICAgIHRoaXMuX3VybCA9IG1ldHJpY3NVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4vTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi4vc2RrL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vc2RrL0Vudmlyb25tZW50JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0ZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2VzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBNZXRyaWNzU2VydmljZX0gPSB7fTtcblxuICBzdGF0aWMgZ2V0TWV0cmljc1NlcnZpY2UodXJsOiBzdHJpbmcpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcykge1xuICAgICAgcmV0dXJuIG1ldHJpY3NTZXJ2aWNlcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG5ldyBNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwoU0RLLnRlbGVtZXRyeUxldmVsKTtcblxuICAgIHJldHVybiBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF0gPSBuZXcgTWV0cmljc1NlcnZpY2UobWV0cmljc0NvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc3RhdGljIHNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE9iamVjdC52YWx1ZXMoTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlcyk7XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzICYmIG1ldHJpY3NTZXJ2aWNlcy5sZW5ndGgpIHtcbiAgICAgIG1ldHJpY3NTZXJ2aWNlcy5mb3JFYWNoKG1ldHJpY3NTZXJ2aWNlID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgICAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSB0ZWxlbWV0cnlMZXZlbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuXG5pbnRlcmZhY2UgSVZhbHVlIHtcbiAgc3RyaW5nPzogc3RyaW5nO1xuICB1aW50NjQ/OiBudW1iZXI7XG4gIGZsb2F0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBtZXRyaWM6IHN0cmluZztcbiAgdmFsdWU6IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZTogSVZhbHVlO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJTWV0cmljIHtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlO1xuICB2YWx1ZT86IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZT86IElWYWx1ZTtcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IG1ldHJpY3NNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgbWV0cmljc01lc3NhZ2VzID0gdGhpcy5fbWV0cmljcy5zbGljZSgwLCByZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHRoaXMuX21ldHJpY3MgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gTWV0cmljc1R5cGUge1xuICBUaW1lVG9GaXJzdEZyYW1lLFxuICBDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICBTdGFsbGVkLFxuICBCdWZmZXJpbmcsXG4gIFNldHVwQ29tcGxldGVkLFxuICBTZXR1cEZhaWxlZCxcbiAgUm91bmRUcmlwVGltZSxcbiAgRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gIE5ldHdvcmtUeXBlLFxuICBSZXNvbHV0aW9uQ2hhbmdlZCxcbiAgQXBwbGljYXRpb25Gb3JlZ3JvdW5kLFxuICBBcHBsaWNhdGlvbkJhY2tncm91bmRcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWV0cmljc1R5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsKSB7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw6XG4gICAgICAgIHJldHVybiAnRXNzZW50aWFsJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsVHlwZTogVGVsZW1ldHJ5TGV2ZWxUeXBlKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnRXNzZW50aWFsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByaXZhY3lNb2RlIGZyb20gJy4uL2RvbS9Qcml2YWN5TW9kZSc7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5RGVmYXVsdCB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gUHJpdmFjeU1vZGUuaXNQcml2YXRlID8gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsIDogVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZUhhbmRsZXIgZnJvbSAnLi9Qcm9taXNlSGFuZGxlcic7XG5cbmNsYXNzIFByb21pc2Uge1xuICBfc3RhdGU6IG51bWJlcjtcbiAgX2hhbmRsZWQ6IGJvb2xlYW47XG4gIF92YWx1ZTogUHJvbWlzZTtcbiAgX2RlZmVycmVkczogQXJyYXk8UHJvbWlzZUhhbmRsZXI+O1xuICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAvLyBAdHMtaWdub3JlXG4gIHRoZW4ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkO1xuICAvKiBlc2xpbnQtZW5hYmxlKi9cblxuICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSA9IDA7XG4gICAgdGhpcy5faGFuZGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RlZmVycmVkcyA9IFtdO1xuXG4gICAgdGhpcy5kb1Jlc29sdmUoY2FsbGJhY2spO1xuICB9XG5cbiAgZG9SZXNvbHZlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGxldCBkb25lID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY2FsbGJhY2soXG4gICAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICByZWFzb24gPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLnByb21pc2VSZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZXNvbHZlKG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBQcm9taXNlIFJlc29sdXRpb24gUHJvY2VkdXJlOiBodHRwczovL2dpdGh1Yi5jb20vUHJvbWlzZXMtYXBsdXMvUHJvbWlzZXMtc3BlYyN0aGUtUHJvbWlzZS1yZXNvbHV0aW9uLXByb2NlZHVyZVxuICAgICAgaWYgKG5ld1ZhbHVlID09PSBwcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0EgUHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdCBzZWxmLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUgJiYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG5ld1ZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICBjb25zdCB0aGVuID0gbmV3VmFsdWUudGhlbjtcblxuICAgICAgICBpZiAobmV3VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcHJvbWlzZS5fc3RhdGUgPSAzO1xuICAgICAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgcHJvbWlzZS5maW5hbGUoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHByb21pc2UuZG9SZXNvbHZlKGZ1bmN0aW9uKCk6IHZvaWQge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgICAgICAgdGhlbi5hcHBseShuZXdWYWx1ZSwgYXJndW1lbnRzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcm9taXNlLl9zdGF0ZSA9IDE7XG4gICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgcHJvbWlzZS5maW5hbGUoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBwcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlamVjdChuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWR7XG4gICAgdGhpcy5fc3RhdGUgPSAyO1xuICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy5maW5hbGUoKTtcbiAgfVxuXG4gIGZpbmFsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IDIgJiYgdGhpcy5fZGVmZXJyZWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9oYW5kbGVkKSB7XG4gICAgICAgICAgUHJvbWlzZS5fdW5oYW5kbGVkUmVqZWN0aW9uKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuX2RlZmVycmVkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGhpcy5oYW5kbGUodGhpcy5fZGVmZXJyZWRzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBudWxsO1xuICB9XG5cbiAgaGFuZGxlKGRlZmVycmVkOiBQcm9taXNlSGFuZGxlcik6IHZvaWQge1xuICAgIGxldCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgd2hpbGUgKHByb21pc2UuX3N0YXRlID09PSAzKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5fdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAwKSB7XG4gICAgICBwcm9taXNlLl9kZWZlcnJlZHMucHVzaChkZWZlcnJlZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9taXNlLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9taXNlLl9zdGF0ZSA9PT0gMSA/IGRlZmVycmVkLm9uRnVsZmlsbGVkIDogZGVmZXJyZWQub25SZWplY3RlZDtcblxuICAgICAgaWYgKGNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMSkge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCByZXN1bHQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShyZXN1bHQpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFsbChhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5hbGwgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycik7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShbXSk7XG4gICAgICB9XG5cbiAgICAgIGxldCByZW1haW5pbmcgPSBhcmdzLmxlbmd0aDtcbiAgICAgIGNvbnN0IG1hbmFnZVJlc3BvbnNlID0gKGksIHZhbHVlKTogdm9pZCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRoZW4gPSB2YWx1ZS50aGVuO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgdGhlbi5jYWxsKFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlID0+IG1hbmFnZVJlc3BvbnNlKGksIHZhbHVlKSxcbiAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXJnc1tpXSA9IHZhbHVlO1xuXG4gICAgICAgICAgaWYgKC0tcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKGFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFuYWdlUmVzcG9uc2UoaSwgYXJnc1tpXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZSh2YWx1ZSk6IFByb21pc2Uge1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcmVzb2x2ZSh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJlamVjdCh2YWx1ZSk6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiByZWplY3QodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByYWNlKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLnJhY2UgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoYXJyW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgX2ltbWVkaWF0ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dChjYWxsYmFjaywgMCk7XG4gIH1cblxuICBzdGF0aWMgX3VuaGFuZGxlZFJlamVjdGlvbihlcnJvcik6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZSkge1xuICAgICAgY29uc29sZS53YXJuKCdQb3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb246JywgZXJyb3IpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn1cblxuUHJvbWlzZS5wcm90b3R5cGVbJ2NhdGNoJ10gPSBmdW5jdGlvbihvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWyd0aGVuJ10gPSBmdW5jdGlvbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBwcm9taXNlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKCkgPT4gbnVsbCk7XG5cbiAgdGhpcy5oYW5kbGUobmV3IFByb21pc2VIYW5kbGVyKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSk7XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddID0gZnVuY3Rpb24oY2FsbGJhY2s6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICB2YWx1ZSA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gdmFsdWUpLFxuICAgIHJlYXNvbiA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gY29uc3RydWN0b3IucmVqZWN0KHJlYXNvbikpXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQcm9taXNlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2UgZnJvbSAnLi9Qcm9taXNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvbWlzZUhhbmRsZXIge1xuICBvbkZ1bGZpbGxlZDogRnVuY3Rpb247XG4gIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uO1xuICBwcm9taXNlOiBQcm9taXNlO1xuXG4gIGNvbnN0cnVjdG9yKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSB7XG4gICAgdGhpcy5vbkZ1bGZpbGxlZCA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogbnVsbDtcbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSB0eXBlb2Ygb25SZWplY3RlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uUmVqZWN0ZWQgOiBudWxsO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vc2RrL2ZlYXR1cmUvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB7XG4gIGF1ZGlvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgdmlkZW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICBwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBsb2NhbE9mZmVyOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1BlZXJDb25uZWN0aW9uU2VydmljZScpO1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGVkOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD47XG5cbiAgc3RhdGljIGluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUHJlY2FjaGluZ0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UucHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwcmUtY2FjaGUgcGVlciBjb25uZWN0aW9uIG9mZmVyXCInLCBlKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICAgIHRocm93IGU7XG4gICAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCk6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PiB7XG4gICAgaWYgKFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkO1xuXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkgPSBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlO1xuXG4gICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uRmFjdG9yeS5jcmVhdGVQZWVyQ29ubmVjdGlvbigpXG4gICAgICAudGhlbihhc3luYyBwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0FkZFRyYW5zY2VpdmVyO1xuICAgICAgICBsZXQgdmlkZW9UcmFuc2NlaXZlciwgYXVkaW9UcmFuc2NlaXZlcjtcblxuICAgICAgICBpZiAoc3VwcG9ydHNBZGRUcmFuc2NlaXZlcikge1xuICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcignYXVkaW8nLCB7ZGlyZWN0aW9uOiAncmVjdm9ubHknfSk7XG4gICAgICAgICAgdmlkZW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCd2aWRlbycsIHtkaXJlY3Rpb246ICdyZWN2b25seSd9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYXVkaW9UcmFuc2NlaXZlcixcbiAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyLFxuICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihzdXBwb3J0c0FkZFRyYW5zY2VpdmVyID8gdW5kZWZpbmVkIDoge1xuICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgIG9mZmVyVG9SZWNlaXZlVmlkZW86IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5QZWVyQ29ubmVjdGlvblNlcnZpY2UuaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9zZGsvZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU2RwUGFyc2VyIGZyb20gJy4vU2RwUGFyc2VyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGludGVyZmFjZSBJUnRjTW9uaXRvclN0YXRpc3RpYyB7XG4gIFtraW5kOiBzdHJpbmddOiBJUnRjU3RhdGlzdGljO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydCB7XG4gIHJlc3VsdDogKCkgPT4gSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW0gZXh0ZW5kcyBSVENTdGF0c1JlcG9ydCB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZXM6ICgpID0+IHN0cmluZ1tdO1xuICBzdGF0OiAobmFtZSkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNTdGF0aXN0aWMge1xuICBzc3JjPzogc3RyaW5nO1xuICBtZWRpYVR5cGU/OiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBieXRlc1JlY2VpdmVkPzogbnVtYmVyO1xuICBmcmFtZXNEZWNvZGVkPzogbnVtYmVyO1xuICBwYWNrZXRzTG9zdD86IG51bWJlcjtcbiAgcGFja2V0c1JlY2VpdmVkPzogbnVtYmVyO1xuICBjb2RlYz86IHN0cmluZztcbiAgZnBzPzogbnVtYmVyO1xuICByb3VuZFRyaXBUaW1lPzogbnVtYmVyO1xuICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbmNvbnN0IHVwZGF0ZVN0YXRpc3RpY1RpbWVPdXQgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25uZWN0aW9uTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRWaWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZEF1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRjU3RhdGlzdGljOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lT3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RyYWNrc1RvTW9uaXRvcjogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IHBlZXJDb25uZWN0aW9uO1xuICAgIHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUgPSBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgIHRoaXMuX3RyYWNrc1RvTW9uaXRvciA9IG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLm1hcCh0cmFjayA9PiB0cmFjay5raW5kKSB8fCBbXTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5nZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCkge1xuICAgICAgICBjb25zdCBwYXJzZWRTRFAgPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRTRFAuYXVkaW9Db2RlYztcbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFNEUC52aWRlb0NvZGVjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWMoKTogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9ydGNTdGF0aXN0aWM7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXBkYXRlVGltZU91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZVRpbWVPdXQpO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZU91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLnVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIDExIGRvZXNudCBoYXZlIGtpbmQgb3IgbWVkaWFUeXBlIHNvIHdlIG5lZWQgdG8gdGFrZSBpdCBmcm9tIHRoZSBpbmJvdW5kLXJ0cCBvYmplY3QgaWRcbiAgICBjb25zdCBnZXRLaW5kRm9yU2FmYXJpMTEgPSAoaXRlbSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKG51bGwpXG4gICAgICAudGhlbihzdGF0cyA9PiB7XG4gICAgICAgIGNvbnN0IHJ0Y1N0YXRzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuXG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICAgICAgICBsZXQgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgc3RhdHMuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSkge1xuICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lICogMTAwMDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdHNbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0c1snYXVkaW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0c1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRzWyd2aWRlbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdHNbJ2F1ZGlvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdHNbJ3ZpZGVvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2luYm91bmQtcnRwJykge1xuICAgICAgICAgICAgICBjb25zdCBraW5kID0gcmVwb3J0LmtpbmQgfHwgcmVwb3J0Lm1lZGlhVHlwZSB8fCBnZXRLaW5kRm9yU2FmYXJpMTEocmVwb3J0KTtcbiAgICAgICAgICAgICAgbGV0IGNvZGVjID0gJyc7XG5cbiAgICAgICAgICAgICAgc3RhdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gcmVwb3J0LmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX3RyYWNrc1RvTW9uaXRvci5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRzW2tpbmRdID0ge1xuICAgICAgICAgICAgICAgICAgc3NyYzogcmVwb3J0LnNzcmMsXG4gICAgICAgICAgICAgICAgICBtZWRpYVR5cGU6IGtpbmQsXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHJlcG9ydC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICBieXRlc1JlY2VpdmVkOiByZXBvcnQuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNMb3N0OiByZXBvcnQucGFja2V0c0xvc3QsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzUmVjZWl2ZWQ6IHJlcG9ydC5wYWNrZXRzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBjb2RlYzogY29kZWMgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShraW5kKSxcbiAgICAgICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0c1traW5kXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0c1traW5kXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LmZyYW1lc0RlY29kZWQ7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0c1traW5kXVsnZnBzJ10gPSAocmVwb3J0LmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAgICAgICAocnRjU3RhdHNba2luZF0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgICAgICAgICAxMDAwIHx8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0cztcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVPdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lT3V0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHNMZWdhY3koKS50aGVuKHN0YXRzID0+IHtcbiAgICAgIGNvbnN0IHJ0Y1N0YXRzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuXG4gICAgICBzdGF0cy5yZXN1bHQoKS5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgIHJlcG9ydC5uYW1lcygpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdnb29nUlRUJykge1xuICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5zdGF0KG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnc3NyYycpIHtcbiAgICAgICAgICBjb25zdCBtZWRpYVR5cGUgPSByZXBvcnQuc3RhdCgnbWVkaWFUeXBlJykudG9TdHJpbmcoKTtcblxuICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV0gPSB7dGltZXN0YW1wOiBEYXRlLm5vdygpfTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydzc3JjJ10gPSByZXBvcnQuc3RhdCgnc3NyYycpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsnbWVkaWFUeXBlJ10gPSBtZWRpYVR5cGU7XG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsnYnl0ZXNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ2J5dGVzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydwYWNrZXRzTG9zdCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNMb3N0Jyk7XG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsncGFja2V0c1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgncGFja2V0c1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsnY29kZWMnXSA9IHJlcG9ydC5zdGF0KCdnb29nQ29kZWNOYW1lJykudG9TdHJpbmcoKSB8fCB0aGlzLmdldENvZGVjQnlUeXBlKG1lZGlhVHlwZSk7XG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsncm91bmRUcmlwVGltZSddID0gcm91bmRUcmlwVGltZTtcblxuICAgICAgICAgIGlmIChtZWRpYVR5cGUgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LnN0YXQoJ2ZyYW1lc0RlY29kZWQnKTtcbiAgICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV1bJ2ZwcyddID0gKHJ0Y1N0YXRzW21lZGlhVHlwZV0uZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgIChydGNTdGF0c1ttZWRpYVR5cGVdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgIDEwMDAgfHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdHM7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lT3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZU91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvZGVjQnlUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjO1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNkcFBhcnNlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NkcDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvQ29kZWM6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzZHA6IHN0cmluZykge1xuICAgIHRoaXMuX3NkcCA9IHNkcDtcbiAgICB0aGlzLl9hdWRpb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCdhdWRpbycpO1xuICAgIHRoaXMuX3ZpZGVvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ3ZpZGVvJyk7XG4gIH1cblxuICBnZXQgYXVkaW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hdWRpb0NvZGVjO1xuICB9XG5cbiAgZ2V0IHZpZGVvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmlkZW9Db2RlYztcbiAgfVxuXG4gIGFwcGx5Q29kZWModHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzcGxpdFNkcCA9IHRoaXMuX3NkcC5zcGxpdCgvKFxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIGNvbnN0IHVzZWRDb2RlY0xpbmUgPSBzcGxpdFNkcC5maW5kKGl0ZW0gPT4gaXRlbS5pbmNsdWRlcyhgYT1ydHBtYXA6JHtzcGxpdFNkcC5maW5kKGkgPT4gaS5pbmNsdWRlcyhgbT0ke3R5cGV9YCkpLnNwbGl0KCcgJylbM119YCkpO1xuICAgIGNvbnN0IHVzZWRDb2RlYyA9IHVzZWRDb2RlY0xpbmUuc3BsaXQoJyAnKVsxXTtcbiAgICBjb25zdCBjb2RlY05hbWUgPSB1c2VkQ29kZWMuc3BsaXQoJy8nKVswXTtcblxuICAgIHJldHVybiBjb2RlY05hbWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24sIHtQZWVyQ29ubmVjdGlvbkV2ZW50c30gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9zZGsvZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQge0lMZWdhY3lSVENTdGF0c1JlcG9ydH0gZnJvbSAnLi9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdWYW5pbGxhUGVlckNvbm5lY3Rpb24nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb246IFJUQ1BlZXJDb25uZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCkge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGdldCBuYXRpdmUoKTogUlRDUGVlckNvbm5lY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgaWNlQ29ubmVjdGlvblN0YXRlKCk6IFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZTtcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNBZGRUcmFuc2NlaXZlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIUZlYXR1cmVFbmFibGVtZW50LmFkZFRyYW5jZWl2ZXJEaXNhYmxlZCAmJiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBhc3luYyBjcmVhdGVPZmZlcihvcHRpb25zPzogUlRDT2ZmZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIHR5cGVzY3JpcHQgZG9lcyBub3QgaGF2ZSBsZWdhY3kgZ2V0U3RhdHMgdHlwZXNcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtaWdub3JlICovXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQW5zd2VyKG9wdGlvbnM/OiBSVENBbnN3ZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIHR5cGVzY3JpcHQgZG9lcyBub3QgaGF2ZSBsZWdhY3kgZ2V0U3RhdHMgdHlwZXNcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtaWdub3JlICovXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSAqL1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBzZXRMb2NhbERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhhc0NyeXB0byA9IGRlc2NyaXB0aW9uLnNkcC5tYXRjaCgvYT1jcnlwdG86L2kpO1xuXG4gICAgaWYgKGhhc0NyeXB0bykge1xuICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1NEUCBhPWNyeXB0byBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgZ2V0U3RhdHMoc2VsZWN0b3I/OiBNZWRpYVN0cmVhbVRyYWNrIHwgbnVsbCk6IFByb21pc2U8UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMoc2VsZWN0b3IpO1xuICB9XG5cbiAgZ2V0U3RhdHNMZWdhY3koKTogUHJvbWlzZTxJTGVnYWN5UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAvLyBJZ25vcmVkIGFzIHR5cGVzY3JpcHQgZG9lcyBub3QgaGF2ZSBsZWdhY3kgZ2V0U3RhdHMgdHlwZXNcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtaWdub3JlICovXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMocmVzb2x2ZSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgfSk7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFRyYW5zY2VpdmVyKG5hbWU6IHN0cmluZywgb3B0aW9uczogUlRDUnRwVHJhbnNjZWl2ZXJJbml0KTogUlRDUnRwVHJhbnNjZWl2ZXIge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihuYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldENvbmZpZ3VyYXRpb24oKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgfVxuXG4gIHNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzZXQgb250cmFjayhoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjayA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb250cmFjaygpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjaztcbiAgfVxuXG4gIHNldCBvbmljZWNhbmRpZGF0ZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY2FuZGlkYXRlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZTtcbiAgfVxuXG4gIHNldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb247IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb24nO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSB7XG4gIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gbmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuL1N1YmplY3QnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkT25seVN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJqZWN0OiBTdWJqZWN0PFQ+O1xuXG4gIGNvbnN0cnVjdG9yKHN1YmplY3Q6IFN1YmplY3Q8VD4pIHtcbiAgICB0aGlzLl9zdWJqZWN0ID0gc3ViamVjdDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5jbGFzcyBEaXNwb3NhYmxlTGlzdGVuZXI8VD4gZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgY29uc3RydWN0b3IobGlzdGVuZXJzOiBBcnJheTxUPiwgbGlzdGVuZXI6IFQpIHtcbiAgICBzdXBlcigoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogQXJyYXk8KFQpID0+IHZvaWQ+O1xuICBwcml2YXRlIF92YWx1ZTogVDtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IFQpIHtcbiAgICBsZXQgY2hhbmdlZCA9IHRoaXMuX3ZhbHVlICE9PSB2YWx1ZTtcblxuICAgIGlmIChjaGFuZ2VkICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBjb21wYXJhYmxlID0gdmFsdWUgYXMgdW5rbm93biBhcyBJQ29tcGFyYWJsZTxUPjtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wYXJhYmxlLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjaGFuZ2VkID0gIWNvbXBhcmFibGUuZXF1YWxzKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgbGlzdGVuZXIodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgbGlzdGVuZXIodGhpcy5fdmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlTGlzdGVuZXI8KFQpID0+IHZvaWQ+KHRoaXMuX2xpc3RlbmVycywgbGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVudmlyb25tZW50IHtcbiAgc3RhdGljIGdldEVudmlyb25tZW50RnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICAgIHJldHVybiBiYXNlVVJMLm9yaWdpbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgU3RyaW5ncyBmcm9tICcuLi9sYW5nL1N0cmluZ3MnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuLi9ydGMvSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuLi9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgRWRnZUF1dGggZnJvbSAnLi9lZGdlQXV0aC9FZGdlQXV0aCc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbElucHV0VHlwZXN9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuLi9sb2dnZXIvQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBQcml2YWN5TW9kZSBmcm9tICcuLi9kb20vUHJpdmFjeU1vZGUnO1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgZnJvbSAnLi4vZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi9UZWxlbWV0cnlVcmwnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4vRW52aXJvbm1lbnQnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vc3RyZWFtaW5nL1N0cmVhbVR5cGVzJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5cbmNvbnN0IHBhZ2VMb2FkVGltZSA9IHdpbmRvd1snX19waGVuaXhQYWdlTG9hZFRpbWUnXSB8fCB3aW5kb3dbJ19fcGFnZUxvYWRUaW1lJ10gfHwgRGF0ZS5ub3coKTtcblxuaW50ZXJmYWNlIElJbml0T3B0aW9ucyB7XG4gIGRpc2NvdmVyeVVyaT86IHN0cmluZztcbiAgcGVlckNvbm5lY3Rpb25GYWN0b3J5PzogSVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgdGVsZW1ldHJ5TGV2ZWw/OiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIGxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbElucHV0VHlwZXM7XG4gIGNvbnNvbGVMb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxJbnB1dFR5cGVzO1xuICBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtPzogYm9vbGVhbjtcbiAgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU/OiBib29sZWFuO1xuICB3ZWJQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkO1xuICBzaGFrYVBsYXllckxvYWRlcj86IChwbGF5ZXI6IFNoYWthVHlwZSkgPT4gdm9pZDtcbiAgaGxzSnNMb2FkZXI/OiAocGxheWVyOiBIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTREsge1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3dlYlBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYVBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9obHNKc0xvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgc3RhdGljIF9lbnZpcm9ubWVudDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlVcmw6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgc3RhdGljIF9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gODtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUxldmVsOiBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPiA9IG5ldyBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPihUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCk7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb25cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCghUHJpdmFjeU1vZGUuaXNQcml2YXRlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3RlbmFuY3k6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfY2xpZW50U2Vzc2lvbklkOiBzdHJpbmcgPSBTdHJpbmdzLnJhbmRvbSgzMik7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2FkZWRUaW1lc3RhbXA6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NESycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaW5pdGlhbGl6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSgpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5SW5pdGlhbGl6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4oU0RLLl9pbml0aWFsaXplZCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seURpc2NvdmVyeVVyaTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4oRGlzY292ZXJ5VXJpLnVyaSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihTREsuX3BlZXJDb25uZWN0aW9uRmFjdG9yeSk7XG5cbiAgc3RhdGljIGdldCBwYWdlTG9hZFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IFN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZW5hbmN5KCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGNsaWVudFNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTREsuX2NsaWVudFNlc3Npb25JZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9hZGVkVGltZXN0YW1wKCk6IERhdGUge1xuICAgIHJldHVybiBTREsuX2xvYWRlZFRpbWVzdGFtcDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaW5pdGlhbGl6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seUluaXRpYWxpemVkO1xuICB9XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlVcmkoKTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5RGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGdldCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljUmV0cnlPbkZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJQbGF5ZXJMb2FkZXIoKTogKFdlYlBsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93ZWJQbGF5ZXJMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthUGxheWVyTG9hZGVyKCk6IChTaGFrYVR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYVBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaGxzSnNMb2FkZXIoKTogKEhsc1BsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9obHNKc0xvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWV0cmljc1NlcnZpY2UoKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIHJldHVybiBTREsuX21ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlVcmwoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVsZW1ldHJ5VXJsO1xuICB9XG5cbiAgc3RhdGljIGdldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM7XG4gIH1cblxuICBzdGF0aWMgc2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMocmV0cmllc0Ftb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IHJldHJpZXNBbW91bnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWxJbnB1dFR5cGVzIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKHRoaXMuX2xvZ2dlci50aHJlc2hvbGQudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJEZXRlY3RvcigpOiBCcm93c2VyRGV0ZWN0b3Ige1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3I7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBMb2dnZXJGYWN0b3J5LnRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgVVJMIHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyICYmIHRlbmFuY3kpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgdGVuYW5jeSB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKERpc2NvdmVyeVVyaS51cmkudmFsdWUpO1xuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBTREsuX21ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbWV0cmljcy1sZXZlbCcpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbChUZWxlbWV0cnlMZXZlbFt2YWx1ZV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWRUZWxlbWV0cnlMZXZlbCA9IFNESy5fdGVsZW1ldHJ5TGV2ZWwuc3Vic2NyaWJlKHRlbGVtZXRyeUxldmVsID0+IHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmV0cnkgb24gZmFpbHVyZSBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLmRpc2NvdmVyeVVyaS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgU0RLLnRlbGVtZXRyeVVybC52YWx1ZSA9IFNESy5nZXRUZWxlbWV0cnlVcmwodmFsdWUpO1xuICAgICAgU0RLLl9lbnZpcm9ubWVudC52YWx1ZSA9IEVudmlyb25tZW50LmdldEVudmlyb25tZW50RnJvbVVybCh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjaGFubmVsVG9rZW4gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtY2hhbm5lbC10b2tlbicpO1xuXG4gICAgaWYgKGNoYW5uZWxUb2tlbikge1xuICAgICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKGNoYW5uZWxUb2tlbik7XG5cbiAgICAgIFNESy5fdGVuYW5jeS52YWx1ZSA9IEVkZ2VBdXRoLmdldFRlbmFuY3kocGFyc2VkVG9rZW4pO1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IChFZGdlQXV0aC5nZXRVcmkocGFyc2VkVG9rZW4pIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LXVyaScpO1xuXG4gICAgaWYgKHVyaVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpVmFsdWU7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVVSSVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWJhc2UtdXJpJyk7XG5cbiAgICBpZiAoYmFzZVVSSVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gYCR7YmFzZVVSSVZhbHVlfS9wY2FzdC9lbmRQb2ludHNgO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtYmFzZS11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGluaXQob3B0aW9ucz86IElJbml0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbmV3IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpc2NvdmVyeVVyaSkge1xuICAgICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gb3B0aW9ucy5kaXNjb3ZlcnlVcmk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeSkge1xuICAgICAgICBTREsuX3BlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZSA9IG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCAmJiBUZWxlbWV0cnlMZXZlbFtvcHRpb25zLnRlbGVtZXRyeUxldmVsXSkge1xuICAgICAgICBTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5sb2dnaW5nTGV2ZWwgJiYgTG9nZ2luZ0xldmVsW29wdGlvbnMubG9nZ2luZ0xldmVsXSkge1xuICAgICAgICB0aGlzLl9sb2dnZXIudGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5sb2dnaW5nTGV2ZWwpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAmJlxuICAgICAgICBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsXSkge1xuICAgICAgICBjb25zdCBjb25zb2xlQXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBDb25zb2xlQXBwZW5kZXIpO1xuXG4gICAgICAgIGlmIChjb25zb2xlQXBwZW5kZXIpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZShjb25zb2xlQXBwZW5kZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAhPT0gJ09mZicpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLndlYlBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl93ZWJQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLndlYlBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9obHNKc0xvYWRlciA9IG9wdGlvbnMuaGxzSnNMb2FkZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IHRydWU7XG4gIH1cblxuICBzdGF0aWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5sb2FkJywgKCkgPT4ge1xuICBTREsuZGlzcG9zZSgpO1xufSk7XG5cblNESy5hcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmluaXQoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5VXJsIHtcbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgVVJMKHVybCk7XG4gICAgICBjb25zdCBzZWdtZW50cyA9IGJhc2VVUkwuaG9zdG5hbWUuc3BsaXQoJy4nKTtcblxuICAgICAgc3dpdGNoIChiYXNlVVJMLnByb3RvY29sKSB7XG4gICAgICAgIGNhc2UgJ3dzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwOic7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd3NzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwczonO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMiB8fFxuICAgICAgICAgIChzZWdtZW50cy5sZW5ndGggPT09IDMgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMl0ubGVuZ3RoIDw9IDIgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0ubGVuZ3RoIDw9IDMpXG4gICAgICApIHtcbiAgICAgICAgc2VnbWVudHMudW5zaGlmdCgndGVsZW1ldHJ5Jyk7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ3N0Zy0nKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLXN0ZycpIHx8IHNlZ21lbnRzWzBdLmluY2x1ZGVzKCctc3RnLScpIHx8IHNlZ21lbnRzWzBdID09PSAnc3RnJykge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnktc3RnJztcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnbG9jYWwnKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLWxvY2FsJykpIHtcbiAgICAgICAgLy8gTGVhdmUgVVJMIHVuY2hhbmdlZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5JztcbiAgICAgIH1cblxuICAgICAgYmFzZVVSTC5ob3N0bmFtZSA9IHNlZ21lbnRzLmpvaW4oJy4nKTtcblxuICAgICAgcmV0dXJuIGAke2Jhc2VVUkwub3JpZ2lufS90ZWxlbWV0cnlgO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCB0eXBlIEJpdHJhdGVTdGF0ZVR5cGUgPSAnS2VlcCcgfCAnUmVzZXQnO1xuZXhwb3J0IHR5cGUgQml0cmF0ZU1vZGVUeXBlID0gJ05vcm1hbCcgfCAnRm9yY2UnIHwgJ1Jlc2V0JztcblxuZXhwb3J0IGVudW0gQml0cmF0ZVN0YXRlIHtcbiAgS2VlcCxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGVudW0gQml0cmF0ZU1vZGUge1xuICBOb3JtYWwsXG4gIEZvcmNlLFxuICBSZXNldFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSB7XG4gIGFwaVZlcnNpb246IG51bWJlcjtcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBudW1iZXI7XG4gIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlVHlwZTtcbiAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlVHlwZTtcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IEVkZ2VBdXRoIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IFNlc3Npb25UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vU2Vzc2lvblRlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuXG5pbXBvcnQge0VkZ2VUb2tlbn0gZnJvbSAnLi4vZWRnZUF1dGgvRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuL0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBTdHJlYW1GYWN0b3J5IGZyb20gJy4uL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmNvbnN0IGRlZmF1bHRUYXJnZXRMYWcgPSAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uID0gJ2NsaWVudDp0ZXJtaW5hdGlvbic7XG5jb25zdCBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDIwMDA7XG5jb25zdCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDA7XG5jb25zdCBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDAwMDtcbmNvbnN0IHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDE1MDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2hhbm5lbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVZpZGVvRWxlbWVudDogUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuOiBSZWFkT25seVN1YmplY3Q8RWRnZVRva2VuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhdGU6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9NdXRlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9QYXVzZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbkV4cGlyaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0aG9yaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU9ubGluZTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxvYWRpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQbGF5aW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhbmRieTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0b3BwZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUYXJnZXRMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUJpdHJhdGVMaW1pdDogUmVhZE9ubHlTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJlc29sdXRpb246IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUZhaWx1cmVDb3VudDogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RW5kUG9pbnQ6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RyZWFtOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UnRjU3RhdGlzdGljczogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlNZWRpYVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPjtcblxuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcjogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHRva2VuOiBzdHJpbmcsIHRhcmdldExhZzogbnVtYmVyID0gZGVmYXVsdFRhcmdldExhZykge1xuICAgIHRoaXMuX2NvbnRleHQgPSBuZXcgQ2hhbm5lbENvbnRleHQodG9rZW4sIHRhcmdldExhZyk7XG4gICAgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fcmVhZE9ubHlWaWRlb0VsZW1lbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50KTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KHRoaXMuX2NvbnRleHQudG9rZW4pO1xuICAgIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4odGhpcy5fY29udGV4dC5wZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGF0ZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPih0aGlzLl9jb250ZXh0LnN0YXRlKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dG9NdXRlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC5hdXRvTXV0ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC5hdXRvUGF1c2VkKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQudG9rZW5FeHBpcmluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LmF1dGhvcml6ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5T25saW5lID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0Lm9ubGluZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlMb2FkaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LmxvYWRpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGxheWluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC5wbGF5aW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YW5kYnkgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQuc3RhbmRieSk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdG9wcGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LnN0b3BwZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NvbnRleHQudGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUxhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jb250ZXh0LmxhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlCaXRyYXRlTGltaXQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY29udGV4dC5iaXRyYXRlTGltaXQpO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPih0aGlzLl9jb250ZXh0LnJlc29sdXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NvbnRleHQuZmFpbHVyZUNvdW50KTtcbiAgICB0aGlzLl9yZWFkT25seUVuZFBvaW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4odGhpcy5fY29udGV4dC5lbmRQb2ludCk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+KHRoaXMuX2NvbnRleHQuc3RyZWFtKTtcbiAgICB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih0aGlzLl9jb250ZXh0LnJ0Y1N0YXRpc3RpY3MpO1xuICAgIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPih0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtKTtcblxuICAgIGNvbnN0IHBhcnNlZFRva2VuID0gRWRnZUF1dGgucGFyc2VUb2tlbih0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlKTtcbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoRWRnZUF1dGguZ2V0VXJpKHBhcnNlZFRva2VuKSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBFZGdlQXV0aC5nZXRUZW5hbmN5KHBhcnNlZFRva2VuKSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9jb250ZXh0LnNlc3Npb25UZWxlbWV0cnkgPSBuZXcgU2Vzc2lvblRlbGVtZXRyeShTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NvbnRleHQuc2Vzc2lvblRlbGVtZXRyeSk7XG4gICAgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuXG4gICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQuc3Vic2NyaWJlKHZpZGVvRWxlbWVudCA9PiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NvbnRleHQuc3RyZWFtLnN1YnNjcmliZShzdHJlYW0gPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5LmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy52aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY29udGV4dC52aWRlb1RlbGVtZXRyeSA9IG5ldyBWaWRlb1RlbGVtZXRyeSh0aGlzLnN0cmVhbUlkLCBTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9jaGFubmVsU3RhcnRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHRoaXMudmlkZW9FbGVtZW50KTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh0aGlzLnZpZGVvRWxlbWVudCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnJlc3RhcnRBZnRlclN0b3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2NvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgfSwgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMpO1xuICAgICAgfSkpO1xuICAgIHRoaXMuX2NvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NvbnRleHQucmVzb2x1dGlvbi5zdWJzY3JpYmUocmVzb2x1dGlvbiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC52aWRlb1RlbGVtZXRyeS5vblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMocmVzb2x1dGlvbi50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIHRoaXMuX2NvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NvbnRleHQuYml0cmF0ZUxpbWl0LnN1YnNjcmliZShiaXRyYXRlTGltaXQgPT4ge1xuICAgICAgICBpZiAoYml0cmF0ZUxpbWl0ICYmIHRoaXMuX2NvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgYml0cmF0ZUxpbWl0LFxuICAgICAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgICAgICBCaXRyYXRlTW9kZS5Ob3JtYWxcbiAgICAgICAgICApXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHZpZGVvRWxlbWVudCgpOiBIVE1MVmlkZW9FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG4gIH1cblxuICBzZXQgdmlkZW9FbGVtZW50KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuXG4gICAgICBpZiAodGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuXG4gICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICBpZiAodGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgaWYgKHRoaXMucmVzb2x1dGlvbi52YWx1ZS53aWR0aCAhPT0gdmlkZW9FbGVtZW50LnZpZGVvV2lkdGggfHwgdGhpcy5yZXNvbHV0aW9uLnZhbHVlLmhlaWdodCAhPT0gdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IG5ldyBEaW1lbnNpb24odmlkZW9FbGVtZW50LnZpZGVvV2lkdGgsIHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IERpbWVuc2lvbi5lbXB0eTtcbiAgICB9XG4gIH1cblxuICBnZXQgdG9rZW4oKTogRWRnZVRva2VuIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dC50b2tlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fY29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlID0gdG9rZW47XG4gICAgdGhpcy5fY29udGV4dC50b2tlbkV4cGlyaW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odGhpcy5fY29udGV4dC50b2tlbi52YWx1ZSk7XG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKEVkZ2VBdXRoLmdldFVyaShwYXJzZWRUb2tlbikgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gRWRnZUF1dGguZ2V0VGVuYW5jeShwYXJzZWRUb2tlbikgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCBwZWVyQ29ubmVjdGlvbigpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgc3RhdGUoKTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YXRlO1xuICB9XG5cbiAgZ2V0IGF1dG9NdXRlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9NdXRlZDtcbiAgfVxuXG4gIGdldCBhdXRvUGF1c2VkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZDtcbiAgfVxuXG4gIGdldCB0b2tlbkV4cGlyaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZztcbiAgfVxuXG4gIGdldCBhdXRob3JpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZDtcbiAgfVxuXG4gIGdldCBvbmxpbmUoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlPbmxpbmU7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxvYWRpbmc7XG4gIH1cblxuICBnZXQgcGxheWluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBsYXlpbmc7XG4gIH1cblxuICBnZXQgc3RhbmRieSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YW5kYnk7XG4gIH1cblxuICBnZXQgc3RvcHBlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0b3BwZWQ7XG4gIH1cblxuICBnZXQgdGFyZ2V0TGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRhcmdldExhZztcbiAgfVxuXG4gIGdldCBsYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TGFnO1xuICB9XG5cbiAgZ2V0IGJpdHJhdGVMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdC52YWx1ZTtcbiAgfVxuXG4gIGdldCByZXNvbHV0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uO1xuICB9XG5cbiAgZ2V0IGZhaWx1cmVDb3VudCgpOiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50O1xuICB9XG5cbiAgZ2V0IGVuZFBvaW50KCk6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUVuZFBvaW50O1xuICB9XG5cbiAgZ2V0IHN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0cmVhbTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnN0cmVhbUlkO1xuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRzKCk6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3M7XG4gIH1cblxuICBnZXQgbWVkaWFTdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzZXRCaXRyYXRlTGltaXQoYml0cmF0ZUxpbWl0OiBCaXRzUGVyU2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSBiaXRyYXRlTGltaXQ7XG4gIH1cblxuICBjbGVhckJpdHJhdGVMaW1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgJiYgdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQgPSAwO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICB0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgQml0cmF0ZU1vZGUuUmVzZXRcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRhcmdldExhZyhsYWc6IE1pbGxpc2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY29udGV4dC50YXJnZXRMYWcudmFsdWUgPSBsYWc7XG4gIH1cblxuICBhc3luYyBzdG9wKHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9jb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuXG4gICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fY29udGV4dC5pc1N0YXJ0aW5nLnN1YnNjcmliZShpc1N0YXJ0aW5nID0+IHtcbiAgICAgICAgaWYgKCFpc1N0YXJ0aW5nKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU3RvcChyZWFzb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcyhyZWFzb24pO1xuXG4gICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICB9XG5cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdW5tdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcCgnY2xpZW50OmNoYW5uZWwtZGlzcG9zZScpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fY29udGV4dC5pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFVyaSh0b2tlbik6IFVSTCB7XG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKHRva2VuKTtcbiAgICBjb25zdCB1cmwgPSBFZGdlQXV0aC5nZXRVcmkocGFyc2VkVG9rZW4pO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGRpc2NvdmVyIFVSSSBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9jb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHN0YXJ0Jyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0YXJ0KClcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5fY29udGV4dC50b2tlbi52YWx1ZTtcbiAgICBjb25zdCBsaXN0ZW5PblN0cmVhbVNldHVwID0gdGhpcy5fY29udGV4dC5zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGguaXNWYWxpZFRva2VuKHRva2VuKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcbiAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0VXJpKHRva2VuKTtcbiAgICBjb25zdCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2s6ICgpID0+IFByb21pc2U8dm9pZD4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgICAgLy8gTmVlZCB0byBzZXQgaXNTdGFydGluZyB0byBmYWxzZSBhbmQgY2FsbCBoYW5kbGVTdHJlYW1GYWlsdXJlIGlmIHN0cmVhbSBtb25pdG9ycyBmb3VuZCBhbiBpc3N1ZVxuICAgICAgdGhpcy5fY29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdHJlYW1QbGF5ZXIgPSBTdHJlYW1GYWN0b3J5LmNyZWF0ZSh0b2tlbiwgdGhpcy5fY29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrKTtcblxuICAgIGlmICghc3RyZWFtUGxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbVBsYXllci5zdGFydChcbiAgICAgIHVyaSxcbiAgICAgIHRva2VuLFxuICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cCxcbiAgICAgIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQuYmluZCh0aGlzKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLmZhaWwoKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHQub25saW5lLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6Y2xlYW51cC1hZnRlci1mYWlsZWQtc2V0dXAnKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IGNoYW5uZWwnLCBlKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZyB8fCAhU0RLLmF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgdGhpcy5nZXRSZXRyeUludGVydmFsKCkpO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3RhcnRBZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2NvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zdGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwbGF5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gdGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghbWVkaWFTdHJlYW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXRyeUludGVydmFsKCk6IG51bWJlciB7XG4gICAgc3dpdGNoICh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgICAgcmV0dXJuIHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgLy8gRmlyc3QgYW5kIHNlY29uZCBhdHRlbXB0IGZhc3QsIGFmdGVyIHRoYXQgZXhwb25lbnRpYWwgd2l0aCBiYWNrb2ZmIGludGVydmFsXG4gICAgICAgIHJldHVybiBNYXRoLm1pbihtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcywgTWF0aC5wb3coYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZHMsIE1hdGgubWF4KDAsIHRoaXMuX2NvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlIC0gMSkpKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU3RyZWFtRmFpbHVyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmV0cnkgc3RhcnQgd2l0aCBpbml0aWFsIHN0YXRlIFslc10gWyVzXScsIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUsIENoYW5uZWxTdGF0ZVt0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHVuYXV0aG9yaXplZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyByZXN0cmljdGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwbGF5aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGF1c2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIGludm9rZSBwbGF5KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9jb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fY29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZTtcblxuICAgIGlmIChwZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fY29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IG51bGw7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKTtcbiAgICAgIHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5zdG9wcGVkLnZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLl9jb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlLCByZWFzb24pXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERlc3Ryb3llZCBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudCAmJiB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9jb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9jb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuXG4gICAgY29uc3QgcGxheVByb21pc2UgPSB2aWRlb0VsZW1lbnQucGxheSgpO1xuXG4gICAgaWYgKHBsYXlQcm9taXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwbGF5UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIGNvbnN0IGhhc0F1ZGlvVHJhY2sgPSAhIW1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZpbHRlcih0cmFjayA9PiB7XG4gICAgICAgIHJldHVybiB0cmFjay5raW5kID09PSAnYXVkaW8nO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiA9ICFTREsuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG5cbiAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiB8fCB2aWRlb0VsZW1lbnQubXV0ZWQgfHwgIWhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQYXVzZWQgdmlkZW8gYWZ0ZXIgcGxheSBmYWlsZWQuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbnVsbDtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IG11dGVkIHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdmlkZW9FbGVtZW50LnBsYXkoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGxheWVkIHZpZGVvIGFmdGVyIGF1dG8gbXV0aW5nLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQgdG8gdW5tdXRlLicsIHRoaXMuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW0sIFN1YnNjcmliZVN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWMsIElSdGNTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQge0VkZ2VUb2tlbn0gZnJvbSAnLi4vZWRnZUF1dGgvRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgdG9rZW46IFN1YmplY3Q8RWRnZVRva2VuPjtcbiAgcGVlckNvbm5lY3Rpb246IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuICBzdGF0ZTogU3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBhdXRvTXV0ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dG9QYXVzZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dGhvcml6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIG9ubGluZTogU3ViamVjdDxib29sZWFuPjtcbiAgbG9hZGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgcGxheWluZzogU3ViamVjdDxib29sZWFuPjtcbiAgc3RhbmRieTogU3ViamVjdDxib29sZWFuPjtcbiAgc3RvcHBlZDogU3ViamVjdDxib29sZWFuPjtcbiAgdGFyZ2V0TGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgbGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgYml0cmF0ZUxpbWl0OiBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICByZXNvbHV0aW9uOiBTdWJqZWN0PERpbWVuc2lvbj47XG4gIGZhaWx1cmVDb3VudDogU3ViamVjdDxudW1iZXI+O1xuICBlbmRQb2ludDogU3ViamVjdDxFbmRQb2ludD47XG4gIHN0cmVhbTogU3ViamVjdDxJU3RyZWFtPjtcbiAgcnRjU3RhdGlzdGljczogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG5cbiAgcGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyO1xuICBpc0Rpc3Bvc2VkOiBib29sZWFuO1xuICBpc1N0YXJ0aW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHNlc3Npb25UZWxlbWV0cnk6IFNlc3Npb25UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodG9rZW46IHN0cmluZywgdGFyZ2V0TGFnOiBudW1iZXIpIHtcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzU3RhcnRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbERpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5yZW5kZXJlckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsSW5pdGlhbGl6YXRpb24gPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gbmV3IFN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4obnVsbCk7XG4gICAgdGhpcy50b2tlbiA9IG5ldyBTdWJqZWN0PEVkZ2VUb2tlbj4odG9rZW4pO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb24gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KG51bGwpO1xuICAgIHRoaXMubWVkaWFTdHJlYW0gPSBuZXcgU3ViamVjdDxNZWRpYVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdWJqZWN0PENoYW5uZWxTdGF0ZT4oQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nKTtcbiAgICB0aGlzLmF1dG9NdXRlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dG9QYXVzZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy50b2tlbkV4cGlyaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucGxheWluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMudGFyZ2V0TGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KHRhcmdldExhZyk7XG4gICAgdGhpcy5sYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4oMCk7XG4gICAgdGhpcy5iaXRyYXRlTGltaXQgPSBuZXcgU3ViamVjdDxCaXRzUGVyU2Vjb25kPigwKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSBuZXcgU3ViamVjdDxEaW1lbnNpb24+KERpbWVuc2lvbi5lbXB0eSk7XG4gICAgdGhpcy5mYWlsdXJlQ291bnQgPSBuZXcgU3ViamVjdDxudW1iZXI+KDApO1xuICAgIHRoaXMuZW5kUG9pbnQgPSBuZXcgU3ViamVjdDxFbmRQb2ludD4obnVsbCk7XG4gICAgdGhpcy5zdHJlYW0gPSBuZXcgU3ViamVjdDxJU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnJ0Y1N0YXRpc3RpY3MgPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5zdHJlYW1JZDtcbiAgfVxuXG4gIGFwcGx5U3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogdm9pZCB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICB0aGlzLmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC52YWx1ZSAmJiB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICB9XG4gIH1cblxuICBtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFuZEJ5O1xuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDtcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gQ2hhbm5lbFN0YXRlIHtcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nLFxuICBQYXVzZWQsXG4gIFBsYXlpbmcsXG4gIFJlY292ZXJpbmcsXG4gIFJlY29ubmVjdGluZyxcbiAgU3RhbmRCeSxcbiAgU3RvcHBlZCxcbiAgVW5hdXRob3JpemVkLFxuICBHZW9SZXN0cmljdGVkLFxuICBHZW9CbG9ja2VkLFxuICBFcnJvcixcbiAgVW5zdXBwb3J0ZWRGZWF0dXJlXG59XG5cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxTdGF0ZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IENoYW5uZWwgZnJvbSAnLi9DaGFubmVsJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7RWRnZVRva2VufSBmcm9tICcuLi9lZGdlQXV0aC9FZGdlVG9rZW4nO1xuaW1wb3J0IHtNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG50eXBlIENyZWF0ZUNoYW5uZWxPcHRpb25zID0ge1xuICB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHRva2VuOiBFZGdlVG9rZW47XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVscyB7XG4gIHN0YXRpYyBjcmVhdGVDaGFubmVsKG9wdGlvbnM6IENyZWF0ZUNoYW5uZWxPcHRpb25zKTogQ2hhbm5lbCB7XG4gICAgaWYgKCFTREsuaW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDaGFubmVsKG9wdGlvbnMudmlkZW9FbGVtZW50LCBvcHRpb25zLnRva2VuLCBvcHRpb25zLnRhcmdldExhZyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbHMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0RGlzY292ZXJ5VXJpID0gJ2h0dHBzOi8vcGNhc3QucGhlbml4cnRzLmNvbS9wY2FzdC9lbmRQb2ludHMnO1xuXG5leHBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZU1vZGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlTW9kZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlKTogQml0cmF0ZU1vZGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVNb2RlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLk5vcm1hbDpcbiAgICAgICAgcmV0dXJuICdOb3JtYWwnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Gb3JjZTpcbiAgICAgICAgcmV0dXJuICdGb3JjZSc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVNb2RlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZVN0YXRlLCBCaXRyYXRlU3RhdGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlU3RhdGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUpOiBCaXRyYXRlU3RhdGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVTdGF0ZSkge1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuS2VlcDpcbiAgICAgICAgcmV0dXJuICdLZWVwJztcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVTdGF0ZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgRGlzY292ZXJ5U2VydmljZSBmcm9tICcuL0Rpc2NvdmVyeVNlcnZpY2UnO1xuXG5jb25zdCBkaXNjb3ZlcnlDYWNoZUludGVydmFsID0gNjAwMDA7XG5cbmludGVyZmFjZSBJUGVyVVJJRW5kcG9pbnQgeyBbeDogc3RyaW5nXTogUHJvbWlzZTxFbmRQb2ludD4gfVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3Zlcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGU6IElQZXJVUklFbmRwb2ludCA9IHt9O1xuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpOiBVUkwpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdKSB7XG4gICAgICByZXR1cm4gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc2NvdmVyeVNlcnZpY2UgPSBuZXcgRGlzY292ZXJ5U2VydmljZSh1cmkpO1xuICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID0gZGlzY292ZXJ5U2VydmljZS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCgpO1xuXG4gICAgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID09PSBjYWNoZWRWYWx1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgICAgIH1cbiAgICAgIH0sIGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwpO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcblxuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjYWNoZWRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbmNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkucHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcblxuY29uc3QgZGVmYXVsdFRpbWVvdXQgPSAyMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5U2VydmljZSB7XG4gIHByaXZhdGUgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdEaXNjb3ZlcnknKTtcbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF91cmk6IFVSTDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IFVSTCkge1xuICAgIGlmICghdXJpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB1cmknKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKHVyaS50b1N0cmluZygpKTtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gIH1cblxuICBhc3luYyBkaXNjb3Zlck5lYXJieUVuZFBvaW50cyh1cmk6IFVSTCwgdGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxFbmRQb2ludFtdPiB7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB0aW1lb3V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpc2NvdmVyeSB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIHdpdGggbm8gZGF0YSBbJHt1cmx9XWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzU3RyaW5nID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGFzU3RyaW5nLnNwbGl0KCcsJyk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBuZXcgRW5kUG9pbnQoZW5kUG9pbnQsIHRpbWVvdXQpKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KHRpbWVvdXQ6IG51bWJlciA9IGRlZmF1bHRUaW1lb3V0KTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IERpc2NvdmVyeVVyaS5idWlsZERpc2NvdmVyeVVybCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGF3YWl0IHRoaXMuZGlzY292ZXJOZWFyYnlFbmRQb2ludHMobmV3IFVSTCh1cmwpLCB0aW1lb3V0KTtcbiAgICBjb25zdCBuZXZlclJlc29sdmUgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiBuZXcgUHJvbWlzZSgoKSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVxdWVzdCBbJXNdIGZhaWxlZCwgcHJldmVudGluZyBpdCBmcm9tIGNvbXBsZXRpbmcnLCB1cmwpO1xuICAgIH0pO1xuICAgIGNvbnN0IGVuZFBvaW50ID0gYXdhaXQgUHJvbWlzZS5yYWNlKGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gZW5kUG9pbnRcbiAgICAgIC5waW5nKClcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBwaW5nIGVuZCBwb2ludCBbJXNdJywgZW5kUG9pbnQsIGUpO1xuXG4gICAgICAgIHJldHVybiBuZXZlclJlc29sdmUoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbih0aW1lID0+IHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJlZCBlbmQgcG9pbnQgWyVzXSB3aXRoIHRpbWUgWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCksIHRpbWUpO1xuICAgICAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgICAgIHJ1bnRpbWU6IChub3cgLSBTREsucGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWUgfHwgMH0sXG4gICAgICAgICAgcmVzb3VyY2U6IGVuZFBvaW50LnRvU3RyaW5nKCksXG4gICAgICAgICAga2luZDogJ3BpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludDtcbiAgICAgIH0pKSk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfSBmcm9tICcuLi9kZWZhdWx0cyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5VXJpIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Rpc2NvdmVyeVVyaTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPihkZWZhdWx0RGlzY292ZXJ5VXJpKTtcblxuICBzdGF0aWMgZ2V0IHVyaSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnlVcmkuX2Rpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZERpc2NvdmVyeVVybCh1cmk6IFVSTCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh1cmkudG9TdHJpbmcoKSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICB1cmwuc2VhcmNoID0gYD8ke25ldyBVUkxTZWFyY2hQYXJhbXMoW1sndmVyc2lvbicsIHNka1ZlcnNpb25dLCBbJ18nLCBgJHtEYXRlLm5vdygpfWBdXSkudG9TdHJpbmcoKX1gO1xuXG4gICAgaWYgKHVybC5wYXRobmFtZSA9PT0gJy8nKSB7XG4gICAgICB1cmwucGF0aG5hbWUgPSAnL3BjYXN0L2VuZFBvaW50cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybC50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeVVyaSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5cbmltcG9ydCB7XG4gIElTdWJzY3JpYmVSZXNwb25zZSxcbiAgSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QsXG4gIElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0XG59IGZyb20gJy4uL2FwaS9TdWJzY3JpYmUnO1xuaW1wb3J0IHtJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0LCBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZX0gZnJvbSAnLi4vYXBpL1NldFJlbW90ZURlc2NyaXB0aW9uJztcbmltcG9ydCB7SVNlc3Npb25EZXNjcmlwdGlvbiwgU2RwVHlwZX0gZnJvbSAnLi4vYXBpL1Nlc3Npb25EZXNjcmlwdGlvbic7XG5pbXBvcnQge0lEZXN0cm95U3RyZWFtUmVxdWVzdCwgSURlc3Ryb3lTdHJlYW1SZXNwb25zZX0gZnJvbSAnLi4vYXBpL0Rlc3Ryb3lTdHJlYW0nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QsIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9BZGRJY2VDYW5kaWRhdGVzJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBFZGdlQXV0aCBmcm9tICcuLi9lZGdlQXV0aC9FZGdlQXV0aCc7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGUsIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBCaXRyYXRlTW9kZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlTW9kZU1hcHBpbmcnO1xuaW1wb3J0IEJpdHJhdGVTdGF0ZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlU3RhdGVNYXBwaW5nJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgYXBpVmVyc2lvbiA9IDY7XG5cbmV4cG9ydCB0eXBlIFN1YnNjcmliZVN0YXR1cyA9ICdvaycgfCAnbm8tc3RyZWFtJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAnZ2VvLXJlc3RyaWN0ZWQnIHwgJ2dlby1ibG9ja2VkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgUmVtb3ZlVGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBEZXN0cm95U3RyZWFtU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbSB7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1YnNjcmliZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU3Vic2NyaWJlU3RhdHVzO1xuICBzdHJlYW0/OiBJU3RyZWFtO1xuICBsYWc/OiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXM7XG4gIHNlc3Npb25EZXNjcmlwdGlvbj86IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmludGVyZmFjZSBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cztcbiAgb3B0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cztcbn1cblxuaW50ZXJmYWNlIElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRQb2ludCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFbmRQb2ludCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cmk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF9yb3VuZFRyaXBUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodXJpOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcikge1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICB0aGlzLl90aW1lb3V0ID0gdGltZW91dDtcblxuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmQgcG9pbnQgcmVxdWlyZXMgYSB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBFbmRQb2ludFt1cmk9JHt0aGlzLl91cml9XWA7XG4gIH1cblxuICBhc3luYyBwaW5nKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFBpbmdVcmwoKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYFBpbmcgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aGlzLl90aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogc3RyaW5nLCBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCwgZmFpbHVyZUNvdW50OiBudW1iZXIpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odG9rZW4pO1xuXG4gICAgaWYgKCFwYXJzZWRUb2tlbiB8fCAhcGFyc2VkVG9rZW4uYXBwbGljYXRpb25JZCkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZW5hbmN5ID0gcGFyc2VkVG9rZW4uYXBwbGljYXRpb25JZDtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3N1YnNjcmliZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgZWRnZUF1dGhUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogdGhpcy5jb252ZXJ0UlRDU2RwVHlwZVRvU2RwVHlwZShsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi50eXBlKSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgZWRnZUF1dGhUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYFN1YnNjcmliZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHN1YnNjcmliZSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW06IElTdHJlYW0sIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXNjcmlwdGlvbicsICdyZW1vdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgIHR5cGU6IHRoaXMuY29udmVydFJUQ1NkcFR5cGVUb1NkcFR5cGUoc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUpLFxuICAgICAgICBzZHA6IHNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgbmV3IEVycm9yKGBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgbGltaXRCaXRyYXRlKFxuICAgIHN0cmVhbTogSVN0cmVhbSxcbiAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcixcbiAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBCaXRzUGVyU2Vjb25kLFxuICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlLFxuICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSxcbiAgKTogUHJvbWlzZTxJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2JpdHJhdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlKSxcbiAgICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZU1hcHBpbmcuY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGUpXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBuZXcgRXJyb3IoYFNldCBsaW1pdCBiaXRyYXRlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBzZXQgbGltaXQgYml0cmF0ZSByZXNwb25zZSBbJXNdIGluIFslc10gbXMnLCBzdGF0dXMsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHtzdGF0dXN9O1xuICB9XG5cbiAgYXN5bmMgYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW06IElTdHJlYW0sIGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdLCBkaXNjb3ZlcnlDb21wbGV0ZWQ6IGJvb2xlYW4sIG9wdGlvbnM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdpY2UnLCAnY2FuZGlkYXRlcyddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQsXG4gICAgICBvcHRpb25zXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgbmV3IEVycm9yKGBBZGQgaWNlIGNhbmRpZGF0ZXMgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBhZGQgSUNFIGNhbmRpZGF0ZXMgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtKHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYERlbGV0ZSBzdHJlYW0gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBzdHJlYW0nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgZGVzdHJveSBzdHJlYW0gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgZGVzdHJveVN0cmVhbVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gIH1cblxuICBidWlsZFVybChwYXRoOiBzdHJpbmdbXSk6IFVSTCB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHBhdGhBc0FycmF5ID0gdXJpLnBhdGhuYW1lLnNwbGl0KCcvJyk7XG5cbiAgICBwYXRoQXNBcnJheS5sZW5ndGggPSBwYXRoQXNBcnJheS5sZW5ndGggLSAxO1xuXG4gICAgdXJpLnBhdGhuYW1lID0gcGF0aEFzQXJyYXkuY29uY2F0KC4uLnBhdGgpLmpvaW4oJy8nKTtcblxuICAgIHJldHVybiB1cmk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGluZ1VybCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIHVyaS5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd0eXBlJywgJ2h0dHAnXSwgWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTdWJzY3JpYmVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IERlc3Ryb3lTdHJlYW1TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU3Vic2NyaWJlUmVzcG9uc2U7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2U6IElTdWJzY3JpYmVSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLmxhZyA9IGRhdGEubGFnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgY29uc3QgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IHt9O1xuXG4gICAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7XG4gICAgICAgICAgc3dpdGNoIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7XG4gICAgICAgICAgICBjYXNlICdCdW5kbGVQb2xpY3lCYWxhbmNlZCc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gJ2JhbGFuY2VkJztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0J1bmRsZVBvbGljeU1heENvbXBhdCc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gJ21heC1jb21wYXQnO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQnVuZGxlUG9saWN5TWF4QnVuZGxlJzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kgPSAnbWF4LWJ1bmRsZSc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID0gZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzKSB7XG4gICAgICAgICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgICAgIHVybHM6IGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHMsXG4gICAgICAgICAgICAgIHVzZXJuYW1lOiBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgICAgICAgY3JlZGVudGlhbDogZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5KSB7XG4gICAgICAgICAgc3dpdGNoIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5KSB7XG4gICAgICAgICAgICBjYXNlICdJY2VUcmFuc3BvcnRQb2xpY3lBbGwnOlxuICAgICAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSA9ICdhbGwnO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnSWNlVHJhbnNwb3J0UG9saWN5UmVsYXknOlxuICAgICAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSA9ICdyZWxheSc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdJY2VUcmFuc3BvcnRQb2xpY3lQdWJsaWMnOlxuICAgICAgICAgICAgICAvLyBEZXByZWNhdGVkIC0gTm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24ucGVlcklkZW50aXR5KSB7XG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5wZWVySWRlbnRpdHkgPSBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24ucGVlcklkZW50aXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICAgICAgc3dpdGNoIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSkge1xuICAgICAgICAgICAgY2FzZSAnUnRjcE11eFBvbGljeU5lZ290aWF0ZSc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSA9ICduZWdvdGlhdGUnO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUnRjcE11eFBvbGljeVJlcXVpcmUnOlxuICAgICAgICAgICAgICBydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kgPSAncmVxdWlyZSc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHJ0Y0NvbmZpZ3VyYXRpb247XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogdGhpcy5jb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiB0aGlzLmNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbil9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IHRoaXMuY29udmVydElTZXNzaW9uRGVzY3JpcHRpb25Ub1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uOiBJU2Vzc2lvbkRlc2NyaXB0aW9uKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCB7XG4gICAgY29uc3QgcnRjU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0ID0ge3NkcDogc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcH07XG5cbiAgICBzd2l0Y2ggKHNlc3Npb25EZXNjcmlwdGlvbi50eXBlKSB7XG4gICAgICBjYXNlICdPZmZlcic6XG4gICAgICAgIHJ0Y1Nlc3Npb25EZXNjcmlwdGlvbi50eXBlID0gJ29mZmVyJztcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fuc3dlcic6XG4gICAgICAgIHJ0Y1Nlc3Npb25EZXNjcmlwdGlvbi50eXBlID0gJ2Fuc3dlcic7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzZXNzaW9uRGVzY3JpcHRpb24udHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ0Y1Nlc3Npb25EZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uID0gdGhpcy5jb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRhdGEuc2Vzc2lvbkRlc2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlOiBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEub3B0aW9ucykge1xuICAgICAgICBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2Uub3B0aW9ucyA9IGRhdGEub3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSURlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtOiBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UlRDU2RwVHlwZVRvU2RwVHlwZSh0eXBlOiBSVENTZHBUeXBlKTogU2RwVHlwZSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhbnN3ZXInOlxuICAgICAgICByZXR1cm4gJ0Fuc3dlcic7XG4gICAgICBjYXNlICdvZmZlcic6XG4gICAgICAgIHJldHVybiAnT2ZmZXInO1xuICAgICAgY2FzZSAncHJhbnN3ZXInOlxuICAgICAgY2FzZSAncm9sbGJhY2snOlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNEUCB0eXBlIFske3R5cGV9XSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0eXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUVkZ2VBdXRofSBmcm9tICcuL0VkZ2VBdXRoVG9rZW4nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCB7RWRnZVRva2VufSBmcm9tICcuL0VkZ2VUb2tlbic7XG5cbmNvbnN0IGVkZ2VBdXRoVG9rZW5QcmVmaXggPSAnRElHRVNUOic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VBdXRoIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFZGdlQXV0aCcpO1xuXG4gIHN0YXRpYyBwYXJzZVRva2VuKHRva2VuOiBFZGdlVG9rZW4pOiBJRWRnZUF1dGgge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkVG9rZW4odG9rZW4pKSB7XG4gICAgICBFZGdlQXV0aC5fbG9nZ2VyLmVycm9yKCdUb2tlbiBpcyBub3QgdmFsaWQgWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZW5jb2RlZEVkZ2VBdXRoVG9rZW4gPSBhdG9iKHRva2VuLnN1YnN0cihlZGdlQXV0aFRva2VuUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgY29uc3QgZWRnZUF1dGhUb2tlbiA9IEpTT04ucGFyc2UoZW5jb2RlZEVkZ2VBdXRoVG9rZW4pO1xuXG4gICAgICBlZGdlQXV0aFRva2VuLnRva2VuID0gSlNPTi5wYXJzZShlZGdlQXV0aFRva2VuLnRva2VuKTtcblxuICAgICAgcmV0dXJuIGVkZ2VBdXRoVG9rZW47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgRWRnZUF1dGguX2xvZ2dlci5lcnJvcignQ2Fubm90IHBhcnNlIHRva2VuIHZhbHVlJywgZSk7XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldFVyaShwYXJzZWRUb2tlbjogSUVkZ2VBdXRoKTogVVJMIHtcbiAgICByZXR1cm4gcGFyc2VkVG9rZW4gJiYgcGFyc2VkVG9rZW4udG9rZW4gJiYgcGFyc2VkVG9rZW4udG9rZW4udXJpID9cbiAgICAgIG5ldyBVUkwocGFyc2VkVG9rZW4udG9rZW4udXJpKSA6IG51bGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGVuYW5jeShwYXJzZWRUb2tlbjogSUVkZ2VBdXRoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGFyc2VkVG9rZW4gJiYgcGFyc2VkVG9rZW4uYXBwbGljYXRpb25JZCA/XG4gICAgICBwYXJzZWRUb2tlbi5hcHBsaWNhdGlvbklkIDogJyc7XG4gIH1cblxuICBzdGF0aWMgaXNWYWxpZFRva2VuKHRva2VuOiBFZGdlVG9rZW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0b2tlbiAmJiB0b2tlbi5zdGFydHNXaXRoKGVkZ2VBdXRoVG9rZW5QcmVmaXgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uLy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlRW5hYmxlbWVudCB7XG4gIHN0YXRpYyBnZXQgY2xpZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDbGllbnQgb2ZmZXIgd29ya2Zsb3cgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vyc1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzUgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc2IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYWRkVHJhbmNlaXZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENocm9tZSA2OSwgNzAsIDcxLCA3MiBleHBvc2VzIGBhZGRUcmFuY2VpdmVyYCBidXQgaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHlcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcwIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldEN1cnJlbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb25UcmFja0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDYzIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU1O1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNob3VsZFVzZU5hdGl2ZUhscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2Ftc3VuZ0Jyb3dzZXInO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1JUTVBFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPCA4NCkgfHxcbiAgICAgIChCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDwgNzApIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdFZGdlJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnSUUnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1ByZWNhY2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdJRSc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2hhbm5lbFN0YXRlfSBmcm9tICcuLi9jaGFubmVscyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENodW5rZWRTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NodW5rZWRTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb25pdG9yRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfc3RyZWFtU3RhdGlzdGljczogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIHByaXZhdGUgX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcyk7XG4gIH1cblxuICBzdGFydCh1cmk6IFVSTCwgdG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZCB8IElEaXNwb3NhYmxlPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSlcbiAgICAgIC50aGVuKGVuZFBvaW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIG51bGwsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZmVyU2RwID0gY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHA7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgb3JpZ2luU3RhcnRUaW1lOiBEYXRlLm5vdygpIC0gbGFnICsgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDIsXG4gICAgICAgICAgbGFnXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIExpdmVTdHJlYW1pbmcuc3RhcnQodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgb2ZmZXJTZHAsIG9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4ocGxheWVyID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGxheWVyO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdMaXZlU3RyZWFtaW5nIGZhaWxlZCcsIGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb25pdG9yKHBsYXllcjogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0cmVhbVN0YXRpc3RpY3MgPSBMaXZlU3RyZWFtaW5nLmdldFN0YXRzKCk7XG5cbiAgICAgIGlmICh0aGlzLl9zdHJlYW1TdGF0aXN0aWNzICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQrKztcblxuICAgICAgICBpZiAodGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA+IDYpIHtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICBwbGF5ZXIuZGlzcG9zZSgpO1xuICAgICAgICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcyA9IG5ld1N0cmVhbVN0YXRpc3RpY3M7XG4gICAgICB0aGlzLm1vbml0b3IocGxheWVyKTtcbiAgICB9LCAxMDAwKTtcblxuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtJSGxzUGxheWVyVHlwZX0gZnJvbSAnLi9JSGxzUGxheWVyJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGxzUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElIbHNQbGF5ZXJUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKExpdmVTdHJlYW1pbmcuaGxzUGxheWVyKSB7XG4gICAgICBpZiAoTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIoe1xuICAgICAgICAgIGVuYWJsZVdvcmtlcjogdHJ1ZSxcbiAgICAgICAgICBtYXhCdWZmZXJMZW5ndGg6IDEsXG4gICAgICAgICAgbGl2ZUJhY2tCdWZmZXJMZW5ndGg6IDAsXG4gICAgICAgICAgbGl2ZVN5bmNEdXJhdGlvbjogNyxcbiAgICAgICAgICBsaXZlRHVyYXRpb25JbmZpbml0eTogdHJ1ZSxcbiAgICAgICAgICBsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uOiBJbmZpbml0eSxcbiAgICAgICAgICBoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2Q6IDFcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5sb2FkU291cmNlKHRoaXMuX21hbmlmZXN0VVJJKTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmF0dGFjaE1lZGlhKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5jYW5QbGF5VHlwZSgnYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwnKSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQuc3JjID0gdGhpcy5fbWFuaWZlc3RVUkk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIExpdmVTdHJlYW1pbmcuaGxzUGxheWVyICYmIExpdmVTdHJlYW1pbmcuaGxzUGxheWVyLmlzU3VwcG9ydGVkKCk7XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICB3aWR0aDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldFdpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0SGVpZ2h0LFxuICAgICAgY3VycmVudFRpbWU6IHRoaXMuX3BsYXllci5tZWRpYS5jdXJyZW50VGltZSxcbiAgICAgIGxhZzogMC4wLFxuICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlLFxuICAgICAgZGF0YUJ1ZmZlcmVkOiAwLjBcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnSURMRScpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRVJST1InIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRU5ERUQnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ0xPQURJTkcnKSB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnV0FJVElORycpKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ10gfHwgMDtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgKGN1cnJlbnRUaW1lICsgKHRoaXMuX29wdGlvbnMubGFnIC8gMTAwMCkpIC0gdHJ1ZUN1cnJlbnRUaW1lKTtcblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyICYmIHRoaXMuX3BsYXllci5kZXN0cm95KSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2ZlYXR1cmUvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFdlYlBsYXllciBmcm9tICcuL1dlYlBsYXllcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgU2hha2FQbGF5ZXIgZnJvbSAnLi9TaGFrYVBsYXllcic7XG5pbXBvcnQgSGxzUGxheWVyIGZyb20gJy4vSGxzUGxheWVyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgTGl2ZVN0cmVhbWluZ09wdGlvbnMsIExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgTGl2ZVN0cmVhbWluZyB7XG4gIHByaXZhdGUgc3RhdGljIF9wZW5kaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgc3RhdGljIF9obHNQbGF5ZXI6IEhsc1BsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9waGVuaXhXZWJQbGF5ZXI6IFdlYlBsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYTogU2hha2FUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgc3RhdGljIF9wbGF5ZXI6IFNoYWthUGxheWVyIHwgV2ViUGxheWVyIHwgSGxzUGxheWVyO1xuXG4gIHN0YXRpYyBnZXQgaGxzUGxheWVyKCk6IEhsc1BsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9obHNQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBoZW5peFdlYlBsYXllcigpOiBXZWJQbGF5ZXJUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fcGhlbml4V2ViUGxheWVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYSgpOiBTaGFrYVR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBzdGFydCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKTogUHJvbWlzZTxJRGlzcG9zYWJsZT4ge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllciB8fCB0aGlzLl9zaGFrYSB8fCB0aGlzLl9waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCk7XG4gICAgfVxuXG4gICAgaWYgKCFTREsud2ViUGxheWVyTG9hZGVyICYmICFTREsuc2hha2FQbGF5ZXJMb2FkZXIgJiYgIVNESy5obHNKc0xvYWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwbGF5ZXIgaXMgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkLWZlYXR1cmUsIGFkZCBzdHJlYW0gcGxheWVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKFNESy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLmhsc0pzTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5faGxzUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsud2ViUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fcGhlbml4V2ViUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy5zaGFrYVBsYXllckxvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX3NoYWthID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBsYXkoUGxheWVyOiB0eXBlb2YgV2ViUGxheWVyIHwgdHlwZW9mIFNoYWthUGxheWVyIHwgdHlwZW9mIEhsc1BsYXllciwgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucyk6IElEaXNwb3NhYmxlIHtcbiAgICBjb25zdCBkYXNoTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tcGRcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgaGxzTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tM3U4XFw/P1teXFxzXSopL20pO1xuICAgIGNvbnN0IG1hbmlmZXN0VXJsID0gZGFzaE1hbmlmZXN0VXJsTWF0Y2ggJiYgZGFzaE1hbmlmZXN0VXJsTWF0Y2hbMV0gPyBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuICAgIGNvbnN0IHBsYXlsaXN0VXJsID0gaGxzTWFuaWZlc3RVcmxNYXRjaCAmJiBobHNNYW5pZmVzdFVybE1hdGNoWzFdID8gaGxzTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuXG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhscyB8fCAodGhpcy5faGxzUGxheWVyICYmIHRoaXMuX2hsc1BsYXllci5pc1N1cHBvcnRlZCgpKSkge1xuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IFBsYXllcih2aWRlb0VsZW1lbnQsICdobHMnLCBzdHJlYW1JZCwgcGxheWxpc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcjtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2Rhc2gnLCBzdHJlYW1JZCwgbWFuaWZlc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5fcGxheWVyLnN0YXJ0KCk7XG5cbiAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbG9hZGVkKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZyk6IElEaXNwb3NhYmxlIHtcbiAgICBpZiAoIXRoaXMuX3NoYWthICYmICF0aGlzLl9waGVuaXhXZWJQbGF5ZXIgJiYgIXRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9obHNQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShXZWJQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc2hha2EpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoU2hha2FQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGVudW0gTmV0d29ya1N0YXRlcyB7XG4gIE5ldHdvcmtFbXB0eSxcbiAgTmV0d29ya0lkbGUsXG4gIE5ldHdvcmtMb2FkaW5nLFxuICBOZXR3b3JrTm9Tb3VyY2Vcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQgRW5kUG9pbnQsIHtTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UsIHtJUGVlckNvbm5lY3Rpb25PZmZlckluaXR9IGZyb20gJy4uLy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9mZWF0dXJlL0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBSdGNDb25uZWN0aW9uTW9uaXRvciBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi8uLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbENvbnRleHQnO1xuXG5jb25zdCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCA9IDEwMDtcbmNvbnN0IGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQgPSAzMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhbFRpbWVTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1JlYWxUaW1lU3RyZWFtJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gY2hhbm5lbENvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gIH1cblxuICBzdGFydCh1cmksIHRva2VuLCBsaXN0ZW5PblN0cmVhbVNldHVwLCBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbDxFbmRQb2ludCwgSVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PihbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgIF0pXG4gICAgICAudGhlbigoW2VuZFBvaW50LCB7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259XSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdMb2NhbCBvZmZlcjpcXG4nICsgbG9jYWxPZmZlci5zZHApO1xuXG4gICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbikge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgIGxvY2FsT2ZmZXIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQuc3Vic2NyaWJlKHRva2VuLCBsb2NhbE9mZmVyLCB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCh7c3RhdHVzLCBzdHJlYW0sIHJ0Y0NvbmZpZ3VyYXRpb24sIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSwgbGFnfSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBzdHJlYW07XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxhZy52YWx1ZSA9IGxhZztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoXG4gICAgICAgICAgJ1slc10gU3Vic2NyaWJlIGNvbXBsZXRlZCBbJXNdIFslal0gWyVqXSBbJWpdIFslal0nLFxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLFxuICAgICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2VcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFwcGx5UnRjQ29uZmlndXJhdGlvbih0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSwgcnRjQ29uZmlndXJhdGlvbilcbiAgICAgICAgICAudGhlbihwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgICAgICBsZXQgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQ7XG4gICAgICAgICAgICBsZXQgY2FuY2VsRGlzY292ZXJ5ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZGlzY292ZXJ5Q29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIVNESy5zZW5kTG9jYWxDYW5kaWRhdGVzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGUuY2FuZGlkYXRlICYmIGUuY2FuZGlkYXRlLmNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChlLmNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlzY292ZXJ5Q29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRDYW5kaWRhdGVzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5hZGRJY2VDYW5kaWRhdGVzKHN0cmVhbSwgY2FuZGlkYXRlcywgZGlzY292ZXJ5Q29tcGxldGVkKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoe3N0YXR1cywgb3B0aW9uc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVzKCdjYW5jZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBBZGRlZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdIGFuZCBvcHRpb25zIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2luZyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkaXNjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub250cmFjayA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcblxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCB0cmFja0xpc3RlbmVyID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICAgIGlmIChlLnN0cmVhbXMpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW1zWzBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKTtcbiAgICAgICAgICAgICAgfSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCBsb2NhbCBTRFAgb2ZmZXIgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBhbnN3ZXIgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbik7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cC5zdWNjZXNzKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkKTtcblxuICAgICAgICAgICAgICByZXR1cm4gbWVkaWFTdHJlYW1Qcm9taXNlO1xuICAgICAgICAgICAgfSkudGhlbihtZWRpYVN0cmVhbSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3IgPSBuZXcgUnRjQ29ubmVjdGlvbk1vbml0b3IocGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gNCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gVmlkZW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgodmlkZW9UcmFja0ZhaWxlZCB8fCBhdWRpb1RyYWNrRmFpbGVkKSAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFwcGx5UnRjQ29uZmlndXJhdGlvbihcbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24gfCBudWxsLFxuICAgIHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIGlmICghb3B0aW9uYWxQZWVyQ29ubmVjdGlvbikge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbiA9IHRoaXMudHJ1bmNhdGVJY2VTZXJ2ZXJzKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm4gU0RLLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihydGNDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdSdGNDb25maWd1cmF0aW9uID0ge1xuICAgICAgLi4ub3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCksXG4gICAgICAuLi5ydGNDb25maWd1cmF0aW9uXG4gICAgfTtcblxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihuZXdSdGNDb25maWd1cmF0aW9uKTtcblxuICAgIHJldHVybiBvcHRpb25hbFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSB0cnVuY2F0ZUljZVNlcnZlcnMoY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdXJsczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDI7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgdXJsID0gY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdO1xuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICB1cmxzLnB1c2goY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICB1cmxzOiB1cmxzLFxuICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcblxuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKys7XG5cbiAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWVcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZWNvbm5lY3RpbmcgcGVlciBjb25uZWN0aW9uIGJ5IHJlc3RhcnRpbmcgSUNFJyk7XG5cbiAgICAgIGNvbnN0IGxvY2FsT2ZmZXIgPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih7aWNlUmVzdGFydDogdHJ1ZX0pLnRoZW4ob2ZmZXIgPT4ge1xuICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24obG9jYWxPZmZlcik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGFmdGVyIFslc10gYXR0ZW1wdHMsIHBlcmZvcm1pbmcgZnVsbCByZWNvdmVyeScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG50eXBlIFNoYWthT3B0aW9ucyA9IHtcbiAgYWJyOiB7XG4gICAgZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiBudW1iZXI7XG4gIH07XG4gIG1hbmlmZXN0OiB7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgc3RyZWFtaW5nOiB7XG4gICAgcmVidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyaW5nR29hbDogbnVtYmVyO1xuICAgIGJ1ZmZlckJlaGluZDogbnVtYmVyO1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgICAgbWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgICAgIGJhY2tvZmZGYWN0b3I6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTaGFrYSB7XG4gIGNvbmZpZ3VyZTogKG86IFNoYWthT3B0aW9ucykgPT4gdm9pZDtcbiAgbG9hZDogKHVyaTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdGF0czogKCkgPT4gTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XG4gIHVubG9hZDogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hha2FQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2hha2FQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElTaGFrYTtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChMaXZlU3RyZWFtaW5nLnNoYWthKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zOiBTaGFrYU9wdGlvbnMgPSB7XG4gICAgICAgIGFicjoge2RlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZTogMjAwMDAwMH0sXG4gICAgICAgIG1hbmlmZXN0OiB7cmV0cnlQYXJhbWV0ZXJzOiB7dGltZW91dDogMTAwMDB9fSxcbiAgICAgICAgc3RyZWFtaW5nOiB7XG4gICAgICAgICAgcmVidWZmZXJpbmdHb2FsOiAyLFxuICAgICAgICAgIGJ1ZmZlcmluZ0dvYWw6IDEwLFxuICAgICAgICAgIGJ1ZmZlckJlaGluZDogMzAsXG4gICAgICAgICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgICAgIG1heEF0dGVtcHRzOiAxMCxcbiAgICAgICAgICAgIGJhY2tvZmZGYWN0b3I6IDEuMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IExpdmVTdHJlYW1pbmcuc2hha2EuUGxheWVyKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB0aGlzLmxvYWRQbGF5ZXIocGxheWVyT3B0aW9ucyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgICBsYWc6IDAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHtcbiAgICAgIC4uLnRoaXMuX3BsYXllci5nZXRTdGF0cygpLFxuICAgICAgY3VycmVudFRpbWU6IDAsXG4gICAgICBsYWc6IDBcbiAgICB9O1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuICAgIGNvbnN0IGxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudCkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBsYWc7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5wbGF5VGltZSA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci51bmxvYWQoKTtcbiAgICAgIHRoaXMuX3BsYXllci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBsYXllcihwbGF5ZXJDb25maWc6IFNoYWthT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BsYXllci5jb25maWd1cmUocGxheWVyQ29uZmlnKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wbGF5ZXIubG9hZCh0aGlzLl9tYW5pZmVzdFVSSSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEQVNIIGxpdmUgc3RyZWFtIGhhcyBiZWVuIGxvYWRlZCcsIHRoaXMuX3N0cmVhbUlkKTtcblxuICAgICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KSB7XG4gICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KCk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRXJyb3Igd2hpbGUgbG9hZGluZyBEQVNIIGxpdmUgc3RyZWFtIFslc10nLCB0aGlzLl9zdHJlYW1JZCwgZS5jb2RlLCBlKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IEVkZ2VBdXRoIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoJztcbmltcG9ydCBDaHVua2VkU3RyZWFtIGZyb20gJy4vQ2h1bmtlZFN0cmVhbSc7XG5pbXBvcnQgUmVhbFRpbWVTdHJlYW0gZnJvbSAnLi9SZWFsVGltZVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1GYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1pbmcnKTtcblxuICBzdGF0aWMgY3JlYXRlKHRva2VuOiBzdHJpbmcsIGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogSVN0cmVhbSB7XG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKHRva2VuKTtcbiAgICBjb25zdCBpc1J0bXAgPSBwYXJzZWRUb2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMgJiYgcGFyc2VkVG9rZW4udG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdydG1wJyk7XG5cbiAgICBpZiAoaXNSdG1wKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBSVE1QIHBsYXliYWNrLicpO1xuICAgICAgY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXNTdHJlYW1pbmcgPSBwYXJzZWRUb2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMgJiYgcGFyc2VkVG9rZW4udG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdzdHJlYW1pbmcnKTtcblxuICAgIGlmIChpc1N0cmVhbWluZykge1xuICAgICAgcmV0dXJuIG5ldyBDaHVua2VkU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlYWxUaW1lU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyZWFtRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdPcHRpb25zLCBMaXZlU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbmNvbnN0IGJhbmR3aWR0aFRvU3RhcnRBdCA9IDMwMDAwMDA7IC8vIENvcnJlc3BvbmRzIHRvIDcyMHAgaW4gbW9zdCBzZXR1cHNcbmNvbnN0IG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkID0gMTUwMDA7XG5cbnR5cGUgRXZlbnRMaXN0ZW5lckZvcldlYlBsYXllciA9IChldnQ6IFdlYlBsYXllckV2ZW50KSA9PiB2b2lkO1xudHlwZSBXZWJQbGF5ZXJFdmVudCA9IHtcbiAgY29kZTogbnVtYmVyO1xuICBzZXZlcml0eTogbnVtYmVyO1xuICBlcnJvcjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElXZWJQbGF5ZXIge1xuICBzdGFydDogKHVybDogc3RyaW5nKSA9PiB2b2lkO1xuICBhZGRFdmVudExpc3RlbmVyKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIpOiB2b2lkO1xuICBkaXNwb3NlKCk6IHZvaWQ7XG4gIGVycm9yczoge1xuICAgIHNldmVyaXR5OiB7XG4gICAgICBSRUNPVkVSQUJMRTogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignV2ViUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJV2ViUGxheWVyO1xuICBwcml2YXRlIF9sYXN0UmVsb2FkVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKExpdmVTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zID0ge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBiYW5kd2lkdGhUb1N0YXJ0QXRcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5XZWJQbGF5ZXIodGhpcy5fbG9nZ2VyLCB0aGlzLl92aWRlb0VsZW1lbnQsIHBsYXllck9wdGlvbnMpO1xuICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KHRoaXMuX21hbmlmZXN0VVJJKTtcblxuICAgICAgdGhpcy5fcGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JPYmplY3QgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5SZWxvYWQoKSAmJiBlcnJvck9iamVjdCAmJiAoZXJyb3JPYmplY3QuY29kZSA9PT0gMyB8fCBlcnJvck9iamVjdC5zZXZlcml0eSA9PT0gTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuZXJyb3JzLnNldmVyaXR5LlJFQ09WRVJBQkxFKSkge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSBhZnRlciBlcnJvciBldmVudCBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgICAgIHRoaXMucmVsb2FkSWZBYmxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZWxvYWQgd2l0aCBlcnJvciBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIgJiYgTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuaXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlLFxuICAgICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0gdGhpcy5fcGxheWVyLmdldFN0YXRzKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lIHx8IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXTtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5pc05hdGl2ZSAmJiBzdGF0aXN0aWNzLmRlbGl2ZXJ5VHlwZSA9PT0gJ0hscycpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSAtIHN0YXRpc3RpY3MubGFnO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5jdXJyZW50VGltZSkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5pc05hdGl2ZSkge1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5SZWxvYWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQgPSAhdGhpcy5fbGFzdFJlbG9hZFRpbWUgfHwgRGF0ZS5ub3coKSAtIHRoaXMuX2xhc3RSZWxvYWRUaW1lID4gbWluVGltZUJlZm9yZU5leHRSZWxvYWQ7XG5cbiAgICByZXR1cm4gdGhpcy5fdmlkZW9FbGVtZW50ICYmIHRoaXMuX3BsYXllciAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoICE9PSAwICYmIGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWRJZkFibGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbG9hZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gdGhhdCB3YXMgYWN0aXZlIGZvciBhdCBsZWFzdCBbJXNdIHNlY29uZHMnLCB0aGlzLl9zdHJlYW1JZCwgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgLyAxMDAwKTtcblxuICAgIHRoaXMuX2xhc3RSZWxvYWRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX1NES1ZFUlNJT05fXzogc3RyaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJzaW9uTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIF9kZWZhdWx0VmVyc2lvbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICBzdGF0aWMgZ2V0IHNka1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF9fU0RLVkVSU0lPTl9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmVyc2lvbjtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlTZXJ2aWNlIGZyb20gJy4vVGVsZW1ldHJ5U2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4uL2xvZ2dlci9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkO1xuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UgPSBuZXcgVGVsZW1ldHJ5U2VydmljZSh0ZWxlbWV0cnlDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlLnB1c2gobG9nTGV2ZWwsIG1lc3NhZ2UsIGNhdGVnb3J5LCBkYXRlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGVsZW1ldHJ5VXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgdGVsZW1ldHJ5VXJsLnBhdGhuYW1lID0gdGVsZW1ldHJ5VXJsLnBhdGhuYW1lICsgJy9sb2dzJztcblxuICAgIHRoaXMuX3VybCA9IHRlbGVtZXRyeVVybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgcHJpdmF0ZSBfbG9nczogQXJyYXk8SUxvZ0l0ZW0+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIHRpbWVzdGFtcDogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluXG4gICAgfTtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgdGhpcy5fbG9ncy5wdXNoKGxvZ1JlY29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvZ3MudW5zaGlmdChsb2dSZWNvcmQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzKGxvZ01lc3NhZ2VzOiBBcnJheTxJTG9nSXRlbT4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IGxvZ01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2xvZ3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG51bWJlck9mTG9nc1RvU2VuZCA9IDA7XG4gICAgbGV0IHNpemVPZkxvZ3NUb1NlbmQgPSAwO1xuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGdldExvZ1NpemUgPSAobG9nOiBJTG9nSXRlbSk6IG51bWJlciA9PiBPYmplY3QudmFsdWVzKGxvZylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0gPyBpdGVtLmxlbmd0aCA6IDApLCAwKTtcblxuICAgIHdoaWxlICh0aGlzLl9sb2dzLmxlbmd0aCA+IG51bWJlck9mTG9nc1RvU2VuZCAmJiBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyBzaXplT2ZMb2dzVG9TZW5kIDwgcmVxdWVzdFNpemVMaW1pdCkge1xuICAgICAgc2l6ZU9mTG9nc1RvU2VuZCArPSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQrKztcbiAgICB9XG5cbiAgICBpZiAoIW51bWJlck9mTG9nc1RvU2VuZCkge1xuICAgICAgdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2UgPSB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZS5zdWJzdHJpbmcoMCxcbiAgICAgICAgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgKHJlcXVlc3RTaXplTGltaXQgLSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkpKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCA9IDE7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nTWVzc2FnZXMgPSB0aGlzLl9sb2dzLnNsaWNlKDAsIG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICB0aGlzLl9sb2dzID0gdGhpcy5fbG9ncy5zbGljZShudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZExvZ3MobG9nTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdXJhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGR1cmF0aW9uID0gMCkge1xuICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG4gIH1cblxuICB0b0lzb1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuICdQMFMnO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB0aGlzLl9kdXJhdGlvbiA8IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpc05lZ2F0aXZlID8gTWF0aC5hYnModGhpcy5fZHVyYXRpb24pIDogdGhpcy5fZHVyYXRpb247XG4gICAgbGV0IG9mZnNldCA9IE1hdGguZmxvb3IoZHVyYXRpb24pO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG9mZnNldCAlIDEwMDA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDEwMDApO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IGhvdXJzID0gb2Zmc2V0ICUgMjQ7XG4gICAgY29uc3QgcGFydHMgPSBbJ1BUJ107XG5cbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLScpO1xuICAgIH1cblxuICAgIGlmIChob3Vycykge1xuICAgICAgcGFydHMucHVzaChob3VycyArICdIJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIHBhcnRzLnB1c2gobWludXRlcyArICdNJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgfHwgbWlsbGlzZWNvbmRzKSB7XG4gICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzZWNvbmRzKSk7XG5cbiAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcGFydHMucHVzaCgnLicgKyB0aGlzLnBhZFN0YXJ0KG1pbGxpc2Vjb25kcy50b1N0cmluZygpLCAzLCAnMCcpKTtcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnUycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIHBhZFN0YXJ0KGl0ZW06IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBTdHJpbmcoKHR5cGVvZiBwYWRTdHJpbmcgIT09ICd1bmRlZmluZWQnID8gcGFkU3RyaW5nIDogJyAnKSk7XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGl0ZW0ubGVuZ3RoO1xuXG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIGl0ZW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJQ29tcGFyYWJsZSBmcm9tICcuLi9sYW5nL0lDb21wYXJhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGltZW5zaW9uIGltcGxlbWVudHMgSUNvbXBhcmFibGU8RGltZW5zaW9uPiB7XG4gIHJlYWRvbmx5IHdpZHRoOiBudW1iZXI7XG4gIHJlYWRvbmx5IGhlaWdodDogbnVtYmVyO1xuXG4gIHN0YXRpYyBnZXQgZW1wdHkoKTogRGltZW5zaW9uIHtcbiAgICByZXR1cm4gbmV3IERpbWVuc2lvbigwLCAwKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgZXF1YWxzKG90aGVyOiBEaW1lbnNpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3RoZXIgJiYgdGhpcy53aWR0aCA9PT0gb3RoZXIud2lkdGggJiYgdGhpcy5oZWlnaHQgPT09IG90aGVyLmhlaWdodDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMud2lkdGh9eCR7dGhpcy5oZWlnaHR9YDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtTdHJlYW1TZXR1cExpc3RlbmVyfSBmcm9tICcuLi9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IE5ldHdvcmtNb25pdG9yIGZyb20gJy4uL2RvbS9OZXR3b3JrTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuaW50ZXJmYWNlIElOZXR3b3JrU3RhdGlzdGljcyB7XG4gIHJ0dD86IG51bWJlcjtcbiAgZWZmZWN0aXZlVHlwZT86IHN0cmluZztcbiAgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlc3Npb25UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTZXNzaW9uVGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBTREsuYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25ldHdvcmtNb25pdG9yOiBOZXR3b3JrTW9uaXRvciA9IG5ldyBOZXR3b3JrTW9uaXRvcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgX2xhc3ROZXR3b3JrU3RhdGlzdGljczogSU5ldHdvcmtTdGF0aXN0aWNzID0ge307XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG5cbiAgICBpZiAoIXRoaXMuX25ldHdvcmtNb25pdG9yLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmlzRm9yZWdyb3VuZC5zdWJzY3JpYmUoaXNGb3JlZ3JvdW5kID0+IHtcbiAgICAgIHRoaXMucmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IucnR0LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtSVFRVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZWZmZWN0aXZlVHlwZS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGxpc3Rlbk9uU3RyZWFtU2V0dXAoKTogU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1TZXR1cExpc3RlbmVyKHRoaXMuX3BhZ2VMb2FkVGltZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RDaGFuZ2UgPSB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5nZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IGlzRm9yZWdyb3VuZCA/IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZCA6IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZCxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VMYXN0Q2hhbmdlfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnQXBwbGljYXRpb24gaGFzIGdvbmUgaW50byB0aGUgWyVzXSBhZnRlciBbJXNdIG1zJyxcbiAgICAgIGlzRm9yZWdyb3VuZCA/ICdmb3JlZ3JvdW5kJyA6ICdiYWNrZ3JvdW5kJyxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlTGFzdENoYW5nZSkudG9Jc29TdHJpbmcoKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrUlRUVXBkYXRlKG5ld1JUVDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRSdHQgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dCA9IG5ld1JUVDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBuZXdSVFR9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkUnR0ID8ge3VpbnQ2NDogb2xkUnR0fSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlc291cmNlOiAnbmF2aWdhdG9yJ1xuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIFJUVCBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3UlRULFxuICAgICAgb2xkUnR0XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUobmV3TmV0d29ya1R5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkTmV0d29ya1R5cGUgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlID0gbmV3TmV0d29ya1R5cGU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld05ldHdvcmtUeXBlfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZE5ldHdvcmtUeXBlID8ge3N0cmluZzogb2xkTmV0d29ya1R5cGV9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZWZmZWN0aXZlIHR5cGUgaGFzIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdOZXR3b3JrVHlwZSxcbiAgICAgIG9sZE5ldHdvcmtUeXBlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKG5ld0NhcGFjaXR5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZENhcGFjaXR5ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtmbG9hdDogbmV3Q2FwYWNpdHl9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkQ2FwYWNpdHkgPyB7ZmxvYXQ6IG9sZENhcGFjaXR5fSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGRvd25saW5rIHRocm91Z2hwdXQgY2FwYWNpdHkgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld0NhcGFjaXR5LFxuICAgICAgb2xkQ2FwYWNpdHlcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZGVvVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtVGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX2xpc3RlblRvRmlyc3RUaW1lOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JTdGFsbDogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yQ29udGludWF0aW9uOiAoZXZlbnQpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9TdGFsbGVkOiBudW1iZXI7XG4gIHByaXZhdGUgX2xhc3RQcm9ncmVzczogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1Jlc29sdXRpb246IHN0cmluZztcbiAgcHJpdmF0ZSBfY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXI6IERpc3Bvc2FibGU7XG4gIHByaXZhdGUgX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcjogRGlzcG9zYWJsZTtcblxuICBjb25zdHJ1Y3RvcihzdHJlYW1JZDogc3RyaW5nLCBwYWdlTG9hZFRpbWU6IG51bWJlciwgY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lID0gKCk6IHZvaWQgPT4gdGhpcy5jYWxsVGltZVRvRmlyc3RGcmFtZSgpO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIH0pO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcik7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0ZW5Gb3JTdGFsbCA9ICgpOiB2b2lkID0+IHRoaXMub25TdGFsbCgpO1xuXG4gICAgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uID0gKGV2ZW50KTogdm9pZCA9PiB0aGlzLm9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuXG4gICAgdGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBkdXJhdGlvblNpbmNlUGFnZUxvYWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxsVGltZVRvRmlyc3RGcmFtZSgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5wdXNoVGltZVRvRmlyc3RGcmFtZShub3cpO1xuICAgIHRoaXMucHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fdGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl90aW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIEZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fdGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9jaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5DaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gQ2hhbm5lbCBjcmVhdGlvbiB0byBmaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvblN0YWxsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl92aWRlb1N0YWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlN0YWxsZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgc3RhbGxlZCcsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTogdm9pZCB7XG4gICAgaWYgKCF2aWRlby5idWZmZXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHZpZGVvLmJ1ZmZlcmVkLmxlbmd0aDtcbiAgICBjb25zdCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCA9IGV2ZW50LnR5cGUgPT09ICdwbGF5aW5nJ1xuICAgIHx8IGJ1ZmZlckxlbmd0aCA+IDAgPyAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJ1xuICAgICAgfHwgZXZlbnQudHlwZSA9PT0gJ3RpbWV1cGRhdGUnKVxuICAgICAgJiYgdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpID09PSB0aGlzLl9sYXN0UHJvZ3Jlc3MgOiB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLl92aWRlb1N0YWxsZWQgfHwgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJykge1xuICAgICAgdGhpcy5fbGFzdFByb2dyZXNzID0gdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVTaW5jZVN0b3AgPSBEYXRlLm5vdygpIC0gdGhpcy5fdmlkZW9TdGFsbGVkO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5CdWZmZXJpbmcsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZVN0b3B9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyByZWNvdmVyZWQgZnJvbSBzdGFsbCBhZnRlciBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZVN0b3ApLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IG51bGw7XG4gIH1cblxuICBvblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMobmV3UmVzb2x1dGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3UmVzb2x1dGlvbn0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiB0aGlzLl92aWRlb1Jlc29sdXRpb24gPyB7c3RyaW5nOiB0aGlzLl92aWRlb1Jlc29sdXRpb259IDogdW5kZWZpbmVkLFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl92aWRlb1Jlc29sdXRpb24gPSBuZXdSZXNvbHV0aW9uO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgcnVudGltZSA9IChmdW5jdGlvbiAoZXhwb3J0cykge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIGV4cG9ydHMud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgZXhwb3J0cy5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvciwgUHJvbWlzZUltcGwpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgLy8gSWYgYSByZWplY3RlZCBQcm9taXNlIHdhcyB5aWVsZGVkLCB0aHJvdyB0aGUgcmVqZWN0aW9uIGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gc28gaXQgY2FuIGJlIGhhbmRsZWQgdGhlcmUuXG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0LCBQcm9taXNlSW1wbCkge1xuICAgIGlmIChQcm9taXNlSW1wbCA9PT0gdm9pZCAwKSBQcm9taXNlSW1wbCA9IFByb21pc2U7XG5cbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCksXG4gICAgICBQcm9taXNlSW1wbFxuICAgICk7XG5cbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgLy8gTm90ZTogW1wicmV0dXJuXCJdIG11c3QgYmUgdXNlZCBmb3IgRVMzIHBhcnNpbmcgY29tcGF0aWJpbGl0eS5cbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yW1wicmV0dXJuXCJdKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBleHBvcnRzLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlXG4gIC8vIG9yIG5vdCwgcmV0dXJuIHRoZSBydW50aW1lIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBkZWNsYXJlIHRoZSB2YXJpYWJsZVxuICAvLyByZWdlbmVyYXRvclJ1bnRpbWUgaW4gdGhlIG91dGVyIHNjb3BlLCB3aGljaCBhbGxvd3MgdGhpcyBtb2R1bGUgdG8gYmVcbiAgLy8gaW5qZWN0ZWQgZWFzaWx5IGJ5IGBiaW4vcmVnZW5lcmF0b3IgLS1pbmNsdWRlLXJ1bnRpbWUgc2NyaXB0LmpzYC5cbiAgcmV0dXJuIGV4cG9ydHM7XG5cbn0oXG4gIC8vIElmIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyBhcyBhIENvbW1vbkpTIG1vZHVsZSwgdXNlIG1vZHVsZS5leHBvcnRzXG4gIC8vIGFzIHRoZSByZWdlbmVyYXRvclJ1bnRpbWUgbmFtZXNwYWNlLiBPdGhlcndpc2UgY3JlYXRlIGEgbmV3IGVtcHR5XG4gIC8vIG9iamVjdC4gRWl0aGVyIHdheSwgdGhlIHJlc3VsdGluZyBvYmplY3Qgd2lsbCBiZSB1c2VkIHRvIGluaXRpYWxpemVcbiAgLy8gdGhlIHJlZ2VuZXJhdG9yUnVudGltZSB2YXJpYWJsZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS5cbiAgdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiA/IG1vZHVsZS5leHBvcnRzIDoge31cbikpO1xuXG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgLy8gVGhpcyBtb2R1bGUgc2hvdWxkIG5vdCBiZSBydW5uaW5nIGluIHN0cmljdCBtb2RlLCBzbyB0aGUgYWJvdmVcbiAgLy8gYXNzaWdubWVudCBzaG91bGQgYWx3YXlzIHdvcmsgdW5sZXNzIHNvbWV0aGluZyBpcyBtaXNjb25maWd1cmVkLiBKdXN0XG4gIC8vIGluIGNhc2UgcnVudGltZS5qcyBhY2NpZGVudGFsbHkgcnVucyBpbiBzdHJpY3QgbW9kZSwgd2UgY2FuIGVzY2FwZVxuICAvLyBzdHJpY3QgbW9kZSB1c2luZyBhIGdsb2JhbCBGdW5jdGlvbiBjYWxsLiBUaGlzIGNvdWxkIGNvbmNlaXZhYmx5IGZhaWxcbiAgLy8gaWYgYSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBmb3JiaWRzIHVzaW5nIEZ1bmN0aW9uLCBidXQgaW4gdGhhdCBjYXNlXG4gIC8vIHRoZSBwcm9wZXIgc29sdXRpb24gaXMgdG8gZml4IHRoZSBhY2NpZGVudGFsIHN0cmljdCBtb2RlIHByb2JsZW0uIElmXG4gIC8vIHlvdSd2ZSBtaXNjb25maWd1cmVkIHlvdXIgYnVuZGxlciB0byBmb3JjZSBzdHJpY3QgbW9kZSBhbmQgYXBwbGllZCBhXG4gIC8vIENTUCB0byBmb3JiaWQgRnVuY3Rpb24sIGFuZCB5b3UncmUgbm90IHdpbGxpbmcgdG8gZml4IGVpdGhlciBvZiB0aG9zZVxuICAvLyBwcm9ibGVtcywgcGxlYXNlIGRldGFpbCB5b3VyIHVuaXF1ZSBwcmVkaWNhbWVudCBpbiBhIEdpdEh1YiBpc3N1ZS5cbiAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdGlmKF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0pIHtcblx0XHRyZXR1cm4gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gbW9kdWxlWydkZWZhdWx0J10gOlxuXHRcdCgpID0+IG1vZHVsZTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLy8gbW9kdWxlIGV4cG9ydHMgbXVzdCBiZSByZXR1cm5lZCBmcm9tIHJ1bnRpbWUgc28gZW50cnkgaW5saW5pbmcgaXMgZGlzYWJsZWRcbi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xucmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9