@phenixrts/sdk 2024.0.5-beta.261 → 2024.0.6-beta.263

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 (35) hide show
  1. package/channels/debug/channels.js +58 -42
  2. package/channels/debug/package.json +1 -1
  3. package/channels/debug.private/channels.js +58 -42
  4. package/channels/debug.private/package.json +1 -1
  5. package/channels/es5.debug.private/channels.js +58 -42
  6. package/channels/es5.debug.private/package.json +1 -1
  7. package/channels/min/channels.js +1 -1
  8. package/channels/min/channels.js.map +1 -1
  9. package/channels/min/package.json +1 -1
  10. package/channels/min.private/channels.js +1 -1
  11. package/channels/min.private/channels.js.map +1 -1
  12. package/channels/min.private/package.json +1 -1
  13. package/channels/package.json +1 -1
  14. package/full/debug/full.js +58 -42
  15. package/full/debug/package.json +1 -1
  16. package/full/debug.private/full.js +58 -42
  17. package/full/debug.private/package.json +1 -1
  18. package/full/min/full.js +1 -1
  19. package/full/min/full.js.map +1 -1
  20. package/full/min/package.json +1 -1
  21. package/full/min.private/full.js +1 -1
  22. package/full/min.private/full.js.map +1 -1
  23. package/full/min.private/package.json +1 -1
  24. package/full/package.json +1 -1
  25. package/package.json +1 -1
  26. package/publish/debug/package.json +1 -1
  27. package/publish/debug/publish.js +1 -1
  28. package/publish/debug.private/package.json +1 -1
  29. package/publish/debug.private/publish.js +1 -1
  30. package/publish/min/package.json +1 -1
  31. package/publish/min/publish.js +1 -1
  32. package/publish/min.private/package.json +1 -1
  33. package/publish/min.private/publish.js +1 -1
  34. package/publish/package.json +1 -1
  35. package/types/sdk/streaming/RealTimeStream.d.ts +2 -0
@@ -8662,18 +8662,19 @@ var NetworkStates = /*#__PURE__*/function (NetworkStates) {
8662
8662
  /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./node_modules/@babel/runtime/regenerator/index.js */ "./node_modules/@babel/runtime/regenerator/index.js");
8663
8663
  /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5__);
8664
8664
  /* harmony import */ var _SDK__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../SDK */ "./src/sdk/SDK.ts");
8665
- /* harmony import */ var _dom_GarbageCollectorManager__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../dom/GarbageCollectorManager */ "./src/dom/GarbageCollectorManager.ts");
8666
- /* harmony import */ var _rtc_PeerConnectionService__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../rtc/PeerConnectionService */ "./src/rtc/PeerConnectionService.ts");
8667
- /* harmony import */ var _discovery_Discovery__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../discovery/Discovery */ "./src/sdk/discovery/Discovery.ts");
8668
- /* harmony import */ var _environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../environment/FeatureEnablement */ "./src/environment/FeatureEnablement.ts");
8669
- /* harmony import */ var _channels_ChannelState__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../channels/ChannelState */ "./src/sdk/channels/ChannelState.ts");
8670
- /* harmony import */ var _lang_assertUnreachable__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../lang/assertUnreachable */ "./src/lang/assertUnreachable.ts");
8671
- /* harmony import */ var _rtc_RtcConnectionMonitor__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../rtc/RtcConnectionMonitor */ "./src/rtc/RtcConnectionMonitor.ts");
8672
- /* harmony import */ var _time_Duration__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../time/Duration */ "./src/time/Duration.ts");
8673
- /* harmony import */ var _logger_LoggerFactory__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../logger/LoggerFactory */ "./src/logger/LoggerFactory.ts");
8674
- /* harmony import */ var _rtc_RtcConfigurationManager__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../rtc/RtcConfigurationManager */ "./src/rtc/RtcConfigurationManager.ts");
8675
- /* harmony import */ var _transformation_InsertableStreams__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../transformation/InsertableStreams */ "./src/sdk/transformation/InsertableStreams.ts");
8676
- /* harmony import */ var _rtc_SdpParser__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../rtc/SdpParser */ "./src/rtc/SdpParser.ts");
8665
+ /* harmony import */ var _lang_DisposableList__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../lang/DisposableList */ "./src/lang/DisposableList.ts");
8666
+ /* harmony import */ var _dom_GarbageCollectorManager__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../dom/GarbageCollectorManager */ "./src/dom/GarbageCollectorManager.ts");
8667
+ /* harmony import */ var _rtc_PeerConnectionService__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../rtc/PeerConnectionService */ "./src/rtc/PeerConnectionService.ts");
8668
+ /* harmony import */ var _discovery_Discovery__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../discovery/Discovery */ "./src/sdk/discovery/Discovery.ts");
8669
+ /* harmony import */ var _environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../environment/FeatureEnablement */ "./src/environment/FeatureEnablement.ts");
8670
+ /* harmony import */ var _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../channels/ChannelState */ "./src/sdk/channels/ChannelState.ts");
8671
+ /* harmony import */ var _lang_assertUnreachable__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../lang/assertUnreachable */ "./src/lang/assertUnreachable.ts");
8672
+ /* harmony import */ var _rtc_RtcConnectionMonitor__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../rtc/RtcConnectionMonitor */ "./src/rtc/RtcConnectionMonitor.ts");
8673
+ /* harmony import */ var _time_Duration__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../time/Duration */ "./src/time/Duration.ts");
8674
+ /* harmony import */ var _logger_LoggerFactory__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../logger/LoggerFactory */ "./src/logger/LoggerFactory.ts");
8675
+ /* harmony import */ var _rtc_RtcConfigurationManager__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../rtc/RtcConfigurationManager */ "./src/rtc/RtcConfigurationManager.ts");
8676
+ /* harmony import */ var _transformation_InsertableStreams__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../transformation/InsertableStreams */ "./src/sdk/transformation/InsertableStreams.ts");
8677
+ /* harmony import */ var _rtc_SdpParser__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../rtc/SdpParser */ "./src/rtc/SdpParser.ts");
8677
8678
  /* provided dependency */ var Promise = __webpack_require__(/*! ./src/promise/Promise */ "./src/promise/Promise.ts")["default"];
8678
8679
 
8679
8680
 
@@ -8700,27 +8701,31 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
8700
8701
 
8701
8702
 
8702
8703
 
8704
+
8703
8705
  var iceCandidateAccumulationInterval = 100;
8704
8706
  var defaultStreamSetupTimeout = 30000;
8705
8707
  var RealTimeStream = /*#__PURE__*/function () {
8706
8708
  function RealTimeStream(channelContext, peerConnectionContext, streamTransformContext, handleStreamFailure) {
8707
8709
  _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_2___default()(this, RealTimeStream);
8708
- _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_4___default()(this, "_logger", _logger_LoggerFactory__WEBPACK_IMPORTED_MODULE_15__.default.getLogger('RealTimeStream'));
8710
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_4___default()(this, "_logger", _logger_LoggerFactory__WEBPACK_IMPORTED_MODULE_16__.default.getLogger('RealTimeStream'));
8709
8711
  _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_4___default()(this, "_channelContext", void 0);
8710
8712
  _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_4___default()(this, "_peerConnectionContext", void 0);
8711
8713
  _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_4___default()(this, "_streamTransformContext", void 0);
8712
8714
  _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_4___default()(this, "_handleStreamFailure", void 0);
8715
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_4___default()(this, "_disposables", void 0);
8713
8716
  this._channelContext = channelContext;
8714
8717
  this._peerConnectionContext = peerConnectionContext;
8715
8718
  this._streamTransformContext = streamTransformContext;
8716
8719
  this._handleStreamFailure = handleStreamFailure;
8720
+ this._disposables = new _lang_DisposableList__WEBPACK_IMPORTED_MODULE_7__.default();
8721
+ this._channelContext.disposables.add(this);
8717
8722
  }
8718
8723
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_3___default()(RealTimeStream, [{
8719
8724
  key: "start",
8720
8725
  value: function start(uri, token, listenOnStreamSetup, playMediaStreamInVideoElement) {
8721
8726
  var _this = this;
8722
8727
  var encodedInsertableStreams = typeof this._streamTransformContext.encodedVideoStreamSink === 'function' || typeof this._streamTransformContext.encodedAudioStreamSink === 'function';
8723
- return Promise.all([_discovery_Discovery__WEBPACK_IMPORTED_MODULE_9__.default.discoverClosestEndPointWithCaching(uri), _rtc_PeerConnectionService__WEBPACK_IMPORTED_MODULE_8__.default.createPeerConnectionOffer('recvonly', encodedInsertableStreams).then(function (_ref) {
8728
+ return Promise.all([_discovery_Discovery__WEBPACK_IMPORTED_MODULE_10__.default.discoverClosestEndPointWithCaching(uri), _rtc_PeerConnectionService__WEBPACK_IMPORTED_MODULE_9__.default.createPeerConnectionOffer('recvonly', encodedInsertableStreams).then(function (_ref) {
8724
8729
  var localOffer = _ref.localOffer,
8725
8730
  peerConnection = _ref.peerConnection;
8726
8731
  _this._peerConnectionContext.peerConnection.value = peerConnection;
@@ -8738,11 +8743,11 @@ var RealTimeStream = /*#__PURE__*/function () {
8738
8743
  _this._channelContext.endPoint.value = endPoint;
8739
8744
  _this._logger.info('Connecting to [%s]', endPoint.toString());
8740
8745
  _this._logger.info('Local offer:\n' + localOffer.sdp);
8741
- if (_environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_10__.default.clientOfferDisabled || !peerConnection.supportsSetConfiguration || !peerConnection.supportsGetConfiguration) {
8746
+ if (_environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_11__.default.clientOfferDisabled || !peerConnection.supportsSetConfiguration || !peerConnection.supportsGetConfiguration) {
8742
8747
  peerConnection.close();
8743
8748
  peerConnection.dispose();
8744
- if (_SDK__WEBPACK_IMPORTED_MODULE_6__.default.forceGarbageCollectionOnRestart && !(_environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_10__.default.isMobile && _SDK__WEBPACK_IMPORTED_MODULE_6__.default.skipGarbageCollectionOnMobileDevices)) {
8745
- _dom_GarbageCollectorManager__WEBPACK_IMPORTED_MODULE_7__.default.forceGarbageCollection();
8749
+ if (_SDK__WEBPACK_IMPORTED_MODULE_6__.default.forceGarbageCollectionOnRestart && !(_environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_11__.default.isMobile && _SDK__WEBPACK_IMPORTED_MODULE_6__.default.skipGarbageCollectionOnMobileDevices)) {
8750
+ _dom_GarbageCollectorManager__WEBPACK_IMPORTED_MODULE_8__.default.forceGarbageCollection();
8746
8751
  }
8747
8752
  peerConnection = null;
8748
8753
  localOffer = null;
@@ -8827,7 +8832,7 @@ var RealTimeStream = /*#__PURE__*/function () {
8827
8832
  var retryCallback = function retryCallback() {
8828
8833
  // If we stop normally the peer connection is unregistered first.
8829
8834
  // Thus anytime we see a closed peer connection that is still valid, it is an error.
8830
- _this._channelContext.state.value = _channels_ChannelState__WEBPACK_IMPORTED_MODULE_11__.default.ConnectionError;
8835
+ _this._channelContext.state.value = _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__.default.ConnectionError;
8831
8836
  if (_this._channelContext.videoElement.value) {
8832
8837
  _this._channelContext.videoElement.value.pause();
8833
8838
  _this._channelContext.videoElement.value.srcObject = null;
@@ -8856,11 +8861,11 @@ var RealTimeStream = /*#__PURE__*/function () {
8856
8861
  retryCallback();
8857
8862
  return;
8858
8863
  default:
8859
- (0,_lang_assertUnreachable__WEBPACK_IMPORTED_MODULE_12__.default)(peerConnection.iceConnectionState);
8864
+ (0,_lang_assertUnreachable__WEBPACK_IMPORTED_MODULE_13__.default)(peerConnection.iceConnectionState);
8860
8865
  }
8861
8866
  };
8862
8867
  var mediaStreamPromise = new Promise(function (resolve, reject) {
8863
- if (!_environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_10__.default.onTrackDisabled) {
8868
+ if (!_environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_11__.default.onTrackDisabled) {
8864
8869
  var _timeoutId = setTimeout(function () {
8865
8870
  return reject(new Error('Stream setup timed out'));
8866
8871
  }, defaultStreamSetupTimeout);
@@ -8946,22 +8951,22 @@ var RealTimeStream = /*#__PURE__*/function () {
8946
8951
  return mediaStreamPromise;
8947
8952
  }).then(function (mediaStream) {
8948
8953
  if (_this._streamTransformContext.hasEncodedInsertableStreams.value) {
8949
- var parsedRemoteDescription = new _rtc_SdpParser__WEBPACK_IMPORTED_MODULE_18__.default(peerConnection.currentRemoteDescription.sdp);
8950
- var _InsertableStreams$ap = _transformation_InsertableStreams__WEBPACK_IMPORTED_MODULE_17__.default.applyEncodedStreamTransformation(mediaStream, peerConnection.getReceivers(), _this._streamTransformContext.encodedVideoStreamSink, _this._streamTransformContext.encodedAudioStreamSink, parsedRemoteDescription.videoCodec, parsedRemoteDescription.audioCodec),
8954
+ var parsedRemoteDescription = new _rtc_SdpParser__WEBPACK_IMPORTED_MODULE_19__.default(peerConnection.currentRemoteDescription.sdp);
8955
+ var _InsertableStreams$ap = _transformation_InsertableStreams__WEBPACK_IMPORTED_MODULE_18__.default.applyEncodedStreamTransformation(mediaStream, peerConnection.getReceivers(), _this._streamTransformContext.encodedVideoStreamSink, _this._streamTransformContext.encodedAudioStreamSink, parsedRemoteDescription.videoCodec, parsedRemoteDescription.audioCodec),
8951
8956
  disposables = _InsertableStreams$ap.disposables;
8952
- _this._channelContext.disposables.add(disposables);
8957
+ _this._disposables.add(disposables);
8953
8958
  }
8954
8959
  if (_this._streamTransformContext.hasInsertableStreams.value) {
8955
- var _InsertableStreams$ap2 = _transformation_InsertableStreams__WEBPACK_IMPORTED_MODULE_17__.default.applyInsertableStreamTransformation(mediaStream, _this._streamTransformContext.videoStreamTransformCallback, _this._streamTransformContext.audioStreamTransformCallback),
8960
+ var _InsertableStreams$ap2 = _transformation_InsertableStreams__WEBPACK_IMPORTED_MODULE_18__.default.applyInsertableStreamTransformation(mediaStream, _this._streamTransformContext.videoStreamTransformCallback, _this._streamTransformContext.audioStreamTransformCallback),
8956
8961
  transformedStream = _InsertableStreams$ap2.transformedStream,
8957
8962
  _disposables = _InsertableStreams$ap2.disposables;
8958
- _this._channelContext.disposables.add(_disposables);
8963
+ _this._disposables.add(_disposables);
8959
8964
  mediaStream = transformedStream;
8960
8965
  }
8961
8966
  _this._peerConnectionContext.mediaStream.value = mediaStream;
8962
- var rtcConnectionMonitor = new _rtc_RtcConnectionMonitor__WEBPACK_IMPORTED_MODULE_13__.default(peerConnection, mediaStream, _this._channelContext.endPoint.value.roundTripTime / 4);
8963
- _this._channelContext.disposables.add(rtcConnectionMonitor);
8964
- var ignored = rtcConnectionMonitor.rtcStatistic.subscribe(function (statistics) {
8967
+ var rtcConnectionMonitor = new _rtc_RtcConnectionMonitor__WEBPACK_IMPORTED_MODULE_14__.default(peerConnection, mediaStream, _this._channelContext.endPoint.value.roundTripTime / 4);
8968
+ _this._disposables.add(rtcConnectionMonitor);
8969
+ var rtcConnectionMonitorStatisticSubscription = rtcConnectionMonitor.rtcStatistic.subscribe(function (statistics) {
8965
8970
  _this._channelContext.rtcStatistics.value = statistics;
8966
8971
  if (!_this._channelContext.rtcVideoStatistic && !_this._channelContext.rtcAudioStatistic) {
8967
8972
  _this._channelContext.rtcAudioStatistic = statistics.audio;
@@ -8974,7 +8979,7 @@ var RealTimeStream = /*#__PURE__*/function () {
8974
8979
  if (_this._channelContext.rtcAudioStatistic && _this._channelContext.rtcAudioStatistic.timestamp !== statistics.audio.timestamp) {
8975
8980
  audioTrackFailed = _this._channelContext.rtcAudioStatistic && _this._channelContext.rtcAudioStatistic.bytesReceived === statistics.audio.bytesReceived;
8976
8981
  if (audioTrackFailed && navigator.onLine) {
8977
- _this._logger.info('[%s] Audio track failed with last bytesReceived [%s] is equal to previous bytesReceived [%s] within [%s]', _this._channelContext.streamId, statistics.audio.bytesReceived, _this._channelContext.rtcAudioStatistic.bytesReceived, new _time_Duration__WEBPACK_IMPORTED_MODULE_14__.default(statistics.audio.timestamp - _this._channelContext.rtcAudioStatistic.timestamp).toIsoString());
8982
+ _this._logger.info('[%s] Audio track failed with last bytesReceived [%s] is equal to previous bytesReceived [%s] within [%s]', _this._channelContext.streamId, statistics.audio.bytesReceived, _this._channelContext.rtcAudioStatistic.bytesReceived, new _time_Duration__WEBPACK_IMPORTED_MODULE_15__.default(statistics.audio.timestamp - _this._channelContext.rtcAudioStatistic.timestamp).toIsoString());
8978
8983
  }
8979
8984
  _this._channelContext.rtcAudioStatistic = statistics.audio;
8980
8985
  }
@@ -8983,14 +8988,14 @@ var RealTimeStream = /*#__PURE__*/function () {
8983
8988
  if (_this._channelContext.rtcVideoStatistic && _this._channelContext.rtcVideoStatistic.timestamp !== statistics.video.timestamp) {
8984
8989
  videoTrackFailed = _this._channelContext.rtcVideoStatistic && _this._channelContext.rtcVideoStatistic.bytesReceived === statistics.video.bytesReceived;
8985
8990
  if (videoTrackFailed && navigator.onLine) {
8986
- _this._logger.info('[%s] Video track failed with last bytesReceived [%s] is equal to previous bytesReceived [%s] within [%s]', _this._channelContext.streamId, statistics.video.bytesReceived, _this._channelContext.rtcVideoStatistic.bytesReceived, new _time_Duration__WEBPACK_IMPORTED_MODULE_14__.default(statistics.video.timestamp - _this._channelContext.rtcVideoStatistic.timestamp).toIsoString());
8991
+ _this._logger.info('[%s] Video track failed with last bytesReceived [%s] is equal to previous bytesReceived [%s] within [%s]', _this._channelContext.streamId, statistics.video.bytesReceived, _this._channelContext.rtcVideoStatistic.bytesReceived, new _time_Duration__WEBPACK_IMPORTED_MODULE_15__.default(statistics.video.timestamp - _this._channelContext.rtcVideoStatistic.timestamp).toIsoString());
8987
8992
  }
8988
8993
  _this._channelContext.rtcVideoStatistic = statistics.video;
8989
8994
  }
8990
8995
  }
8991
8996
  if ((videoTrackFailed || audioTrackFailed) && navigator.onLine) {
8992
8997
  var retryCallback = function retryCallback() {
8993
- _this._channelContext.state.value = _channels_ChannelState__WEBPACK_IMPORTED_MODULE_11__.default.ConnectionError;
8998
+ _this._channelContext.state.value = _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__.default.ConnectionError;
8994
8999
  if (_this._channelContext.videoElement.value) {
8995
9000
  _this._channelContext.videoElement.value.pause();
8996
9001
  _this._channelContext.videoElement.value.srcObject = null;
@@ -9005,14 +9010,20 @@ var RealTimeStream = /*#__PURE__*/function () {
9005
9010
  _this.reconnectPeerConnection(peerConnection, retryCallback);
9006
9011
  } else {
9007
9012
  _this._peerConnectionContext.peerConnectionReconnectAttempts = 0;
9013
+ if (_this._channelContext.state.value !== _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__.default.Reconnecting) {
9014
+ return;
9015
+ }
9016
+ _this._channelContext.state.value = _this._channelContext.playing.value ? _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__.default.Playing : _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__.default.Paused;
9017
+ _this._logger.info('Channel state restored to [%s] after reconnecting', _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__.default[_this._channelContext.state.value]);
9008
9018
  }
9009
9019
  });
9020
+ _this._disposables.add(rtcConnectionMonitorStatisticSubscription);
9010
9021
  if (!_SDK__WEBPACK_IMPORTED_MODULE_6__.default.automaticallyPlayMediaStream) {
9011
9022
  _this._channelContext.autoMuted.value = false;
9012
9023
  _this._channelContext.autoPaused.value = true;
9013
9024
  _this._channelContext.loading.value = false;
9014
9025
  _this._channelContext.playing.value = false;
9015
- _this._channelContext.state.value = _channels_ChannelState__WEBPACK_IMPORTED_MODULE_11__.default.Paused;
9026
+ _this._channelContext.state.value = _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__.default.Paused;
9016
9027
  return;
9017
9028
  }
9018
9029
  return playMediaStreamInVideoElement(mediaStream);
@@ -9032,7 +9043,7 @@ var RealTimeStream = /*#__PURE__*/function () {
9032
9043
  _context.next = 3;
9033
9044
  break;
9034
9045
  }
9035
- rtcConfiguration = _rtc_RtcConfigurationManager__WEBPACK_IMPORTED_MODULE_16__.default.truncateIceServers(rtcConfiguration);
9046
+ rtcConfiguration = _rtc_RtcConfigurationManager__WEBPACK_IMPORTED_MODULE_17__.default.truncateIceServers(rtcConfiguration);
9036
9047
  return _context.abrupt("return", _SDK__WEBPACK_IMPORTED_MODULE_6__.default.peerConnectionFactory.value.createPeerConnection(rtcConfiguration));
9037
9048
  case 3:
9038
9049
  newRtcConfiguration = _objectSpread(_objectSpread({}, optionalPeerConnection.getConfiguration()), rtcConfiguration);
@@ -9056,12 +9067,12 @@ var RealTimeStream = /*#__PURE__*/function () {
9056
9067
  if (peerConnection.iceConnectionState === 'closed') {
9057
9068
  return;
9058
9069
  }
9059
- this._channelContext.state.value = _channels_ChannelState__WEBPACK_IMPORTED_MODULE_11__.default.Reconnecting;
9070
+ this._channelContext.state.value = _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__.default.Reconnecting;
9060
9071
  if (this._peerConnectionContext.peerConnectionReconnectAttempts < _SDK__WEBPACK_IMPORTED_MODULE_6__.default.maximalNumberOfPeerConnectionReconnectAttempts || !_SDK__WEBPACK_IMPORTED_MODULE_6__.default.automaticallyReconnectPeerConnection) {
9061
9072
  var _peerConnection$curre;
9062
9073
  this._peerConnectionContext.peerConnectionReconnectAttempts++;
9063
9074
  var isClientOfferFlow = ((_peerConnection$curre = peerConnection.currentLocalDescription) === null || _peerConnection$curre === void 0 ? void 0 : _peerConnection$curre.type) === 'offer';
9064
- if (_environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_10__.default.clientOfferDisabled || !peerConnection.supportsSetConfiguration || !peerConnection.supportsGetConfiguration || !isClientOfferFlow) {
9075
+ if (_environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_11__.default.clientOfferDisabled || !peerConnection.supportsSetConfiguration || !peerConnection.supportsGetConfiguration || !isClientOfferFlow) {
9065
9076
  return;
9066
9077
  }
9067
9078
  this._logger.info('Reconnecting peer connection by restarting ICE');
@@ -9083,23 +9094,28 @@ var RealTimeStream = /*#__PURE__*/function () {
9083
9094
  this._peerConnectionContext.peerConnectionReconnectAttempts = 0;
9084
9095
  retryCallback();
9085
9096
  }
9097
+ }, {
9098
+ key: "dispose",
9099
+ value: function dispose() {
9100
+ this._disposables.dispose();
9101
+ }
9086
9102
  }, {
9087
9103
  key: "mapSetRemoteDescriptionStatusToChannelStatus",
9088
9104
  value: function mapSetRemoteDescriptionStatusToChannelStatus(status) {
9089
9105
  switch (status) {
9090
9106
  case 'ok':
9091
- return _channels_ChannelState__WEBPACK_IMPORTED_MODULE_11__.default.Starting;
9107
+ return _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__.default.Starting;
9092
9108
  case 'unauthorized':
9093
- return _channels_ChannelState__WEBPACK_IMPORTED_MODULE_11__.default.Unauthorized;
9109
+ return _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__.default.Unauthorized;
9094
9110
  case 'not-found':
9095
9111
  case 'capacity':
9096
9112
  case 'rate-limited':
9097
9113
  case 'timeout':
9098
- return _channels_ChannelState__WEBPACK_IMPORTED_MODULE_11__.default.Recovering;
9114
+ return _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__.default.Recovering;
9099
9115
  case 'failed':
9100
- return _channels_ChannelState__WEBPACK_IMPORTED_MODULE_11__.default.Error;
9116
+ return _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__.default.Error;
9101
9117
  default:
9102
- (0,_lang_assertUnreachable__WEBPACK_IMPORTED_MODULE_12__.default)(status);
9118
+ (0,_lang_assertUnreachable__WEBPACK_IMPORTED_MODULE_13__.default)(status);
9103
9119
  }
9104
9120
  }
9105
9121
  }]);
@@ -10116,7 +10132,7 @@ var VersionManager = /*#__PURE__*/function () {
10116
10132
  key: "sdkVersion",
10117
10133
  get: function get() {
10118
10134
  try {
10119
- return "2024-05-03T19:57:46.822Z (2024.0.5-beta.261)";
10135
+ return "2024-05-07T07:30:50.093Z (2024.0.6-beta.263)";
10120
10136
  } catch (e) {
10121
10137
  return this._defaultVersion;
10122
10138
  }
@@ -11123,4 +11139,4 @@ var VideoTelemetry = /*#__PURE__*/function () {
11123
11139
  /******/ })()
11124
11140
  ;
11125
11141
  });
11126
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vTmV0d29ya01vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZVRva2VuLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvUGFyYW1ldGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGVMaXN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL051bWJlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvU3RyaW5ncy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9hc3NlcnRVbnJlYWNoYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0FwcGVuZGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0NvbnNvbGVBcHBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckRlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nVGhyZXNob2xkLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZUhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvU2RwUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvUmVhZE9ubHlTdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9TdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvRW52aXJvbm1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9TREsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9UZWxlbWV0cnlVcmwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbFN0YXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvQ2hhbm5lbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvU3RhdGVDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9TdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9Ub2tlbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlTW9kZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZVN0YXRlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRW5kUG9pbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvQ2h1bmtlZFN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9DaHVua2VkU3RyZWFtaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0hsc1BsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9OZXR3b3JrU3RhdGVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1JlYWxUaW1lU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1NoYWthUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvV2ViUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9JbnNlcnRhYmxlU3RyZWFtcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9EaW1lbnNpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2dldCBqYXZhc2NyaXB0IGNodW5rIGZpbGVuYW1lIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2pzb25wIGNodW5rIGxvYWRpbmciLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6WyJkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCIsIkFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnR5IiwiRGlzcG9zYWJsZUxpc3QiLCJEYXRlIiwibm93IiwiX2lzRm9yZWdyb3VuZCIsIlN1YmplY3QiLCJfcmVhZE9ubHlJc0ZvcmVncm91bmQiLCJSZWFkT25seVN1YmplY3QiLCJkZXRlY3RUYWJGb2N1c0NoYW5nZSIsIl9jcmVhdGVDbGFzcyIsImtleSIsImdldCIsInZhbHVlIiwiZ2V0VGltZVNpbmNlTGFzdENoYW5nZSIsIl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2UiLCJkaXNwb3NlIiwiX2Rpc3Bvc2FibGVzIiwiX3RoaXMiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Q2hhbmdlIiwiZG9jdW1lbnQiLCJfdHlwZW9mIiwibXNIaWRkZW4iLCJ3ZWJraXRIaWRkZW4iLCJoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlIiwiaXNGb3JlZ3JvdW5kIiwic2V0Rm9jdXNTdGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJhZGQiLCJEaXNwb3NhYmxlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImxpc3RlbkZvckRvY3VtZW50Rm9jdXMiLCJjYWxsIiwiX3RoaXMyIiwiX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCIsIndpbmRvdyIsInNldEludGVydmFsIiwiaGFzRm9jdXMiLCJjbGVhckludGVydmFsIiwiQnJvd3NlckRldGVjdG9yIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIl9icm93c2VyTmFtZSIsIl9icm93c2VyTWFqb3JWZXJzaW9uIiwiX2lzQW5kcm9pZCIsIl9pc0Nocm9tZTY5IiwiX2lzQ2hyb21lNzAiLCJfaXNDaHJvbWU3MSIsIl9pc0Nocm9tZTcyIiwiX2lzQ2hyb21lNzQiLCJfaXNDaHJvbWU3NSIsIl9pc0Nocm9tZTc2IiwiX2lzQ2hyb21lNzciLCJpc01vYmlsZSIsIl9pc01vYmlsZSIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibWF0Y2giLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFIiwicGFyc2VCcm93c2VyTmFtZSIsImJyb3dzZXJOYW1lTGlzdCIsInNwbGl0IiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiYnJvd3NlclZlcnNpb25MaXN0IiwiZnVsbFZlcnNpb24iLCJOdW1iZXIiLCJtc2llIiwiaW5kZXhPZiIsImNvbmNhdCIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwidHJpZGVudCIsInZlcnNpb24iLCJfQnJvd3NlckRldGVjdG9yIiwidGVzdCIsIl9uYXZpZ2F0b3IiLCJfbmF2aWdhdG9yMiIsImluY2x1ZGVzIiwiQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsImdldFN0cmluZ1ZhbHVlIiwibmFtZSIsInJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlIiwiZGVmYXVsdFN0cmluZ1ZhbHVlIiwiZ2V0Qm9vbGVhblZhbHVlIiwidmFsdWVGcm9tVXJpIiwiZGVmYXVsdEJvb2xlYW5WYWx1ZSIsIlRlbGVtZXRyeUxldmVsTWFwcGluZyIsIlRlbGVtZXRyeURlZmF1bHQiLCJMb2dnaW5nTGV2ZWxNYXBwaW5nIiwiTG9nZ2VyRGVmYXVsdHMiLCJtZXRhVmFsdWUiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0QXR0cmlidXRlIiwidmFsdWVVUklQYXJhbWV0ZXJOYW1lIiwiVVJMU2VhcmNoUGFyYW1zIiwibG9jYXRpb24iLCJzZWFyY2giLCJ1bmRlZmluZWQiLCJHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciIsIkVycm9yIiwiZm9yY2VHYXJiYWdlQ29sbGVjdGlvbiIsIkZlYXR1cmVFbmFibGVtZW50IiwiZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbiIsInF1ZXVlTWljcm90YXNrIiwib3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uIiwic2V0VGltZW91dCIsImltZyIsImNyZWF0ZUVsZW1lbnQiLCJzcmMiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJCbG9iIiwiQXJyYXlCdWZmZXIiLCJvbmVycm9yIiwicmV2b2tlT2JqZWN0VVJMIiwiTmV0d29ya01vbml0b3IiLCJpc1N1cHBvcnRlZCIsInNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycyIsInVwZGF0ZVN0YXRpc3RpY3MiLCJfaXNTdXBwb3J0ZWQiLCJfcnR0IiwiX2VmZmVjdGl2ZVR5cGUiLCJfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImRvd25saW5rIiwiZG93bmxpbmtNYXgiLCJnZXRFZmZlY3RpdmVUeXBlIiwiZWZmZWN0aXZlVHlwZSIsInR5cGUiLCJnZXRSb3VuZFRyaXBUaW1lIiwicnR0IiwibGlzdGVuZXIiLCJTdHJlYW1TZXR1cExpc3RlbmVyIiwicGFnZUxvYWRUaW1lIiwiTG9nZ2VyRmFjdG9yeSIsIlNESyIsIl9zdGFydFRpbWUiLCJfcGFnZUxvYWRUaW1lIiwic3VjY2VzcyIsInN0cmVhbUlkIiwicmVjb3JkU3RyZWFtTWV0cmljIiwiTWV0cmljc1R5cGUiLCJmYWlsIiwibWV0cmljVHlwZSIsIl9tZXRyaWNTdWJtaXR0ZWQiLCJzZXR1cFRpbWUiLCJtZXRyaWNOYW1lIiwiTWV0cmljVHlwZSIsImdldE5hbWUiLCJtZXRyaWNzU2VydmljZSIsInB1c2giLCJydW50aW1lIiwidWludDY0IiwiX2xvZ2dlciIsImluZm8iLCJEdXJhdGlvbnMiLCJ0b0lzb1N0cmluZyIsImVkZ2VBdXRoVG9rZW5QcmVmaXgiLCJFZGdlQXV0aFBhcnNlciIsInBhcnNlVG9rZW4iLCJ0b2tlbiIsImlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkIiwiZXJyb3IiLCJFZGdlVG9rZW4iLCJkZWNvZGVkVG9rZW4iLCJhdG9iIiwic3Vic3RyIiwibGVuZ3RoIiwiZWRnZVRva2VuIiwiSlNPTiIsInBhcnNlIiwiZSIsInN0YXJ0c1dpdGgiLCJfZWRnZVRva2VuJHRva2VuIiwiX2VkZ2VUb2tlbiR0b2tlbjIiLCJfYXBwbGljYXRpb25JZCIsImFwcGxpY2F0aW9uSWQiLCJfdG9rZW4iLCJ1cmkiLCJjYXBhYmlsaXRpZXMiLCJCdWlsZEZlYXR1cmVzIiwiX3NlbmRMb2NhbENhbmRpZGF0ZXMiLCJfc2VuZExvZ3MiLCJfc2VuZE1ldHJpY3MiLCJfbG9nVG9Db25zb2xlIiwiYXBwbHlGZWF0dXJlcyIsImZlYXR1cmVzIiwiX19GRUFUVVJFU19fIiwic2VuZExvY2FsQ2FuZGlkYXRlcyIsInNlbmRMb2dzIiwic2VuZE1ldHJpY3MiLCJsb2dUb0NvbnNvbGUiLCJfZG9jdW1lbnQiLCJNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yIiwiTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciIsIlJUQ1J0cFJlY2VpdmVyIiwicHJvdG90eXBlIiwiY3JlYXRlRW5jb2RlZFN0cmVhbXMiLCJSVENSdHBTY3JpcHRUcmFuc2Zvcm0iLCJQYXJhbWV0ZXJzIiwiX2Rpc2NvdmVyeVBhcmFtZXRlcnMiLCJhcHBseVBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzIiwiX19QQVJBTUVURVJTX18iLCJkaXNjb3ZlcnkiLCJpbnRlbnRpb25zIiwiZGlzcG9zYWJsZSIsIl9kaXNwb3NlZCIsIl9kaXNwb3NhYmxlIiwiX2xpc3QiLCJmb3JFYWNoIiwidG9TdHJpbmciLCJtYXhEaWdpdHNJbkZsb2F0QWZ0ZXJEb3QiLCJOdW1iZXJzIiwiY291bnROdW1iZXJMZW5ndGgiLCJpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlIiwibnVtYmVyIiwiY291bnREaWdpdHNCZWZvcmVEZWNpbWFsIiwiTWF0aCIsImZsb29yIiwiY291bnREaWdpdHNBZnRlckRlY2ltYWwiLCJmaXhSb3VuZGluZyIsInByZWNpc2lvbiIsInBvd2VyIiwicG93Iiwicm91bmQiLCJkaWdpdHNCZWZvcmVEZWNpbWFsIiwib3JpZ2luYWxWYWx1ZSIsIm1vZGlmaWVkVmFsdWUiLCJjb3VudCIsIlN0cmluZ3MiLCJyYW5kb20iLCJyYW5kb20xM0NoYXJhY3RlcnMiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwiTG9nZ2VyIiwiYXBwZW5kZXJzIiwiX2NhdGVnb3J5IiwidHJhY2UiLCJUcmFjZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsImRlYnVnIiwiRGVidWciLCJfbGVuMiIsIl9rZXkyIiwiSW5mbyIsIl9sZW4zIiwiX2tleTMiLCJ3YXJuIiwiV2FybiIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiZmF0YWwiLCJGYXRhbCIsIl9sZW42IiwiX2tleTYiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJnZXRMb2dnZXIiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlIiwibG9nZ2luZ0xldmVsIiwiY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIlRlbGVtZXRyeUxldmVsIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwic2V0IiwidXJsIiwibWV0cmljc1VybCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc0ZhY3RvcnkiLCJnZXRNZXRyaWNzU2VydmljZSIsIm1ldHJpY3NTZXJ2aWNlcyIsIl9tZXRyaWNzU2VydmljZXMiLCJtZXRyaWNzQ29uZmlndXJhdGlvbiIsIlRlbGVtZXRyeVVybCIsIkVudmlyb25tZW50IiwiTWV0cmljc1NlcnZpY2UiLCJzZXRUZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwicmVxdWVzdFNpemVMaW1pdCIsIm1heEJ1ZmZlcmVkUmVjb3JkcyIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwiX2V4cG9uZW50aWFsQmFja29mZiIsIkV4cG9uZW50aWFsQmFja29mZiIsIm1ldHJpYyIsInByZXZpb3VzVmFsdWUiLCJyZXNvdXJjZSIsImtpbmQiLCJtZXRyaWNSZWNvcmQiLCJ0aW1lc3RhbXAiLCJmdWxsUXVhbGlmaWVkTmFtZSIsIl9kb21haW4iLCJWZXJzaW9uTWFuYWdlciIsImlnbm9yZWQiLCJzZW5kTWV0cmljc0lmQWJsZSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIl9jYWxsZWUiLCJtZXRyaWNzTWVzc2FnZXMiLCJmb3JtRGF0YSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIkZvcm1EYXRhIiwiYXBwZW5kIiwicmVjb3JkcyIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsImFicnVwdCIsInNlbnQiLCJzdG9wIiwiX3giLCJhcHBseSIsIl9zZW5kTWV0cmljc0lmQWJsZSIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiX2lzU2VuZGluZyIsInNsaWNlIiwidGhlbiIsInJlc3BvbnNlIiwiaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUiLCJfZmFpbHVyZUNvdW50IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCIsImNhdGNoIiwiX3JlZiIsInN0YXR1cyIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlIiwiY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbFR5cGUiLCJQcm9taXNlIiwiY2FsbGJhY2siLCJUeXBlRXJyb3IiLCJfc3RhdGUiLCJfaGFuZGxlZCIsIl92YWx1ZSIsIl9kZWZlcnJlZHMiLCJkb1Jlc29sdmUiLCJkb25lIiwicHJvbWlzZVJlc29sdmUiLCJyZWFzb24iLCJwcm9taXNlUmVqZWN0IiwibmV3VmFsdWUiLCJwcm9taXNlIiwiZmluYWxlIiwiX2ltbWVkaWF0ZSIsIl91bmhhbmRsZWRSZWplY3Rpb24iLCJpIiwibGVuIiwiaGFuZGxlIiwiZGVmZXJyZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyZXN1bHQiLCJhbGwiLCJhcnIiLCJyZXNvbHZlIiwicmVqZWN0IiwiaXNBcnJheSIsInJlbWFpbmluZyIsIm1hbmFnZVJlc3BvbnNlIiwiY29uc3RydWN0b3IiLCJfIiwicmFjZSIsIlByb21pc2VIYW5kbGVyIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhY2hlZCIsImRpcmVjdGlvbiIsInBlZXJDb25uZWN0aW9uIiwiY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhbGxlZTMiLCJlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJjb25maWd1cmF0aW9uIiwiX2FyZ3MzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJzdXBwb3J0c0FkZFRyYW5zY2VpdmVyIiwidmlkZW9UcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJvcHRpb25zIiwiYWRkVHJhbnNjZWl2ZXIiLCJ0MCIsInQxIiwidDIiLCJjcmVhdGVPZmZlciIsInQzIiwibG9jYWxPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwidDQiLCJ0NSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImljZVNlcnZlcnMiLCJ1cmxzIiwidXNlcm5hbWUiLCJjcmVkZW50aWFsIiwidXBkYXRlU3RhdGlzdGljVGltZW91dCIsIlJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwibWVkaWFTdHJlYW0iLCJlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3BlZXJDb25uZWN0aW9uIiwiX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfdHJhY2tzVG9Nb25pdG9yIiwiZ2V0VHJhY2tzIiwibWFwIiwidHJhY2siLCJwYXJzZWRTRFAiLCJTZHBQYXJzZXIiLCJjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24iLCJzZHAiLCJfZXN0aW1hdGVkQXVkaW9Db2RlYyIsImF1ZGlvQ29kZWMiLCJfZXN0aW1hdGVkVmlkZW9Db2RlYyIsInZpZGVvQ29kZWMiLCJ1cGRhdGVTdGF0aXN0aWMiLCJfcnRjU3RhdGlzdGljIiwiX2lzTW9uaXRvclJ1bm5pbmciLCJfdXBkYXRlVGltZW91dCIsImNsZWFyVGltZW91dCIsIl91cGRhdGVTdGF0aXN0aWMiLCJfaWdub3JlZCIsImdldEtpbmRGb3JTYWZhcmkxMSIsInVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImlkIiwiZ2V0U3RhdHMiLCJzdGF0cyIsInJ0Y1N0YXRpc3RpY3MiLCJyb3VuZFRyaXBUaW1lIiwibGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIiwicmVwb3J0IiwiY3VycmVudFJvdW5kVHJpcFRpbWUiLCJtZWRpYVR5cGUiLCJjb2RlYyIsImNvZGVjSWQiLCJtaW1lVHlwZSIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjIiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYzIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NCIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjUiLCJieXRlcyIsImJ5dGVzUmVjZWl2ZWQiLCJwcmV2aW91c0J5dGVzUmVjZWl2ZWQiLCJieXRlc0RlbHRhIiwidGltZURlbHRhIiwiYml0cmF0ZSIsInNzcmMiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwidmlkZW8iLCJmcmFtZXNEZWNvZGVkIiwiZnBzIiwiX3VwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImdldFN0YXRzTGVnYWN5IiwibmFtZXMiLCJzdGF0IiwiX3NkcCIsInNkcFNwbGl0QnlMaW5lcyIsInNkcFNwbGl0QnlUcmFja3MiLCJfYXVkaW9Db2RlYyIsImFwcGx5Q29kZWMiLCJfdmlkZW9Db2RlYyIsIl9pc0F1ZGlvVHJhY2tFbmFibGVkIiwiaXNUcmFja0J5VHlwZUVuYWJsZWQiLCJfaXNWaWRlb1RyYWNrRW5hYmxlZCIsInNkcFNlY3Rpb25Gb3JUeXBlIiwiZmluZCIsInNkcFRyYWNrIiwidXNlZENvZGVjTGluZSIsInNkcExpbmUiLCJ1c2VkQ29kZWMiLCJjb2RlY05hbWUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb24iLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiIsIlJUQ1BlZXJDb25uZWN0aW9uIiwiY3VycmVudExvY2FsRGVzY3JpcHRpb24iLCJjb25uZWN0aW9uU3RhdGUiLCJpY2VDb25uZWN0aW9uU3RhdGUiLCJnZXRDb25maWd1cmF0aW9uIiwic2V0Q29uZmlndXJhdGlvbiIsIl9jcmVhdGVPZmZlciIsIl9jcmVhdGVBbnN3ZXIiLCJjcmVhdGVBbnN3ZXIiLCJfeDIiLCJfc2V0TG9jYWxEZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwic2V0TG9jYWxEZXNjcmlwdGlvbiIsIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiIsIl94MyIsIl9zZXRSZW1vdGVEZXNjcmlwdGlvbiIsIl9jYWxsZWU0IiwiX2Rlc2NyaXB0aW9uJHNkcCIsImhhc0NyeXB0byIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsInNldFJlbW90ZURlc2NyaXB0aW9uIiwiX3g0IiwiZ2V0U2VuZGVycyIsImdldFJlY2VpdmVycyIsInNlbGVjdG9yIiwiX3RoaXMzIiwiYWRkU3RyZWFtIiwiX3RoaXM0IiwiYWRkVHJhY2siLCJvbnRyYWNrIiwiaGFuZGxlciIsIm9uaWNlY2FuZGlkYXRlIiwib25jb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsImNsb3NlIiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uIiwic3ViamVjdCIsIl9zdWJqZWN0Iiwic3Vic2NyaWJlIiwiRGlzcG9zYWJsZUxpc3RlbmVyIiwiX0Rpc3Bvc2FibGUiLCJsaXN0ZW5lcnMiLCJfY2FsbFN1cGVyIiwiaWR4IiwiX2luaGVyaXRzIiwiX2xpc3RlbmVycyIsImNoYW5nZWQiLCJjb21wYXJhYmxlIiwiZXF1YWxzIiwiZ2V0RW52aXJvbm1lbnRGcm9tVXJsIiwiYmFzZVVSTCIsIm9yaWdpbiIsIl9jbGllbnRTZXNzaW9uSWQiLCJfbG9hZGVkVGltZXN0YW1wIiwiX3JlYWRPbmx5SW5pdGlhbGl6ZWQiLCJfcmVhZE9ubHlEaXNjb3ZlcnlVcmkiLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlIiwiX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwiX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQiLCJfc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzIiwiX3dlYlBsYXllckxvYWRlciIsIl9zaGFrYVBsYXllckxvYWRlciIsIl9obHNKc0xvYWRlciIsIl9tZXRyaWNzU2VydmljZSIsIl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl90ZWxlbWV0cnlVcmwiLCJfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsInJldHJpZXNBbW91bnQiLCJfdGVsZW1ldHJ5TGV2ZWwiLCJhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJ0ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiY2xpZW50U2Vzc2lvbklkIiwiaWdub3JlZEVudmlyb25tZW50IiwiaWdub3JlZERpc2NvdmVyeVVyaSIsInRlbGVtZXRyeVVybCIsInRlbGVtZXRyeUFwcGVuZGVyIiwiaWdub3JlZFRlbmFuY3kiLCJhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uIiwiRGlzY292ZXJ5VXJpIiwiaWdub3JlZFRlbGVtZXRyeUxldmVsIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImRpc2NvdmVyeVVyaSIsImdldFRlbGVtZXRyeVVybCIsImNoYW5uZWxUb2tlbiIsInVyaVZhbHVlIiwiYmFzZVVSSVZhbHVlIiwiaW5pdCIsIl9pbml0aWFsaXplZCIsInBlZXJDb25uZWN0aW9uRmFjdG9yeSIsImNvbnNvbGVMb2dnaW5nTGV2ZWwiLCJjb25zb2xlQXBwZW5kZXIiLCJhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJ3ZWJQbGF5ZXJMb2FkZXIiLCJzaGFrYVBsYXllckxvYWRlciIsImhsc0pzTG9hZGVyIiwiX1NESyIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0IiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24iLCJmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIkNoYW5uZWwiLCJ2aWRlb0VsZW1lbnQiLCJjaGFubmVsQ29udGV4dE9wdGlvbnMiLCJ0YXJnZXRMYWciLCJzdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyIsImhhc0luc2VydGFibGVTdHJlYW1zIiwiaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zIiwidmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsImF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJlbmNvZGVkVmlkZW9TdHJlYW1TaW5rIiwiZW5jb2RlZEF1ZGlvU3RyZWFtU2luayIsIl90b2tlbkNvbnRleHQiLCJUb2tlbkNvbnRleHQiLCJfY2hhbm5lbENvbnRleHQiLCJDaGFubmVsQ29udGV4dCIsIl9wZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJQZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJfc3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIlN0cmVhbVRyYW5zZm9ybUNvbnRleHQiLCJfc3RhdGVDb250ZXh0IiwiU3RhdGVDb250ZXh0IiwiX2NoYW5uZWxTdGFydFRpbWUiLCJfcmVhZE9ubHlWaWRlb0VsZW1lbnQiLCJfcmVhZE9ubHlUb2tlbiIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uIiwiX3JlYWRPbmx5U3RhdGUiLCJzdGF0ZSIsIl9yZWFkT25seUF1dG9NdXRlZCIsImF1dG9NdXRlZCIsIl9yZWFkT25seUF1dG9QYXVzZWQiLCJhdXRvUGF1c2VkIiwiX3JlYWRPbmx5VG9rZW5FeHBpcmluZyIsInRva2VuRXhwaXJpbmciLCJfcmVhZE9ubHlBdXRob3JpemVkIiwiYXV0aG9yaXplZCIsIl9yZWFkT25seU9ubGluZSIsIm9ubGluZSIsIl9yZWFkT25seUxvYWRpbmciLCJsb2FkaW5nIiwiX3JlYWRPbmx5UGxheWluZyIsInBsYXlpbmciLCJfcmVhZE9ubHlTdGFuZGJ5Iiwic3RhbmRieSIsIl9yZWFkT25seVN0b3BwZWQiLCJzdG9wcGVkIiwiX3JlYWRPbmx5VGFyZ2V0TGFnIiwiX3JlYWRPbmx5TGFnIiwibGFnIiwiX3JlYWRPbmx5Qml0cmF0ZUxpbWl0IiwiYml0cmF0ZUxpbWl0IiwiX3JlYWRPbmx5UmVzb2x1dGlvbiIsInJlc29sdXRpb24iLCJfcmVhZE9ubHlGYWlsdXJlQ291bnQiLCJmYWlsdXJlQ291bnQiLCJfcmVhZE9ubHlFbmRQb2ludCIsImVuZFBvaW50IiwiX3JlYWRPbmx5U3RyZWFtIiwic3RyZWFtIiwiX3JlYWRPbmx5UnRjU3RhdGlzdGljcyIsIl9yZWFkT25seU1lZGlhU3RyZWFtIiwiX3Nlc3Npb25UZWxlbWV0cnkiLCJTZXNzaW9uVGVsZW1ldHJ5IiwiY2hhbm5lbERpc3Bvc2FibGVzIiwiX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlciIsImhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkIiwicmVuZGVyZXJEaXNwb3NhYmxlcyIsInZpZGVvVGVsZW1ldHJ5IiwiZGF0YXNldCIsIlZpZGVvVGVsZW1ldHJ5Iiwic2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSIsInNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyIsIkNoYW5uZWxTdGF0ZSIsInJlc3RhcnRBZnRlclN0b3AiLCJjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQiLCJvblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMiLCJlbGFwc2VkSW5NaWxsaXNlY29uZHMiLCJjaGFubmVsSW5pdGlhbGl6YXRpb24iLCJnZXRUaW1lIiwibGltaXRCaXRyYXRlIiwiZGVzdHJveVN0cmVhbU9uVW5tb3VudCIsInN0YXJ0IiwicGF1c2UiLCJzcmNPYmplY3QiLCJ3aWR0aCIsInZpZGVvV2lkdGgiLCJoZWlnaHQiLCJ2aWRlb0hlaWdodCIsIkRpbWVuc2lvbiIsImRpc3Bvc2FibGVzIiwic2V0Qml0cmF0ZUxpbWl0IiwiY2xlYXJCaXRyYXRlTGltaXQiLCJiaXRyYXRlSW5CaXRzUGVyU2Vjb25kIiwidXBkYXRlVGFyZ2V0TGFnIiwiX3N0b3AiLCJpc1N0YXJ0aW5nIiwicHJvY2Vzc1N0b3AiLCJjbGVhblVwUmVzb3VyY2VzIiwiX3Jlc3VtZSIsInBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50IiwicmVzdW1lIiwibXV0ZSIsIm11dGVkIiwidW5tdXRlIiwiX2Rpc3Bvc2UiLCJpc0Rpc3Bvc2VkIiwiZ2V0VXJpIiwiX3N0YXJ0IiwicHJvY2Vzc1N0YXJ0IiwiX3Byb2Nlc3NTdGFydCIsIl9jYWxsZWU1IiwiX3RoaXM1IiwibGlzdGVuT25TdHJlYW1TZXR1cCIsIl9TdHJlYW1UcmFja1RyYW5zZm9ybSIsInZhbGlkIiwidmFsaWRhdGlvblJlc3VsdCIsIl9TdHJlYW1UcmFja1RyYW5zZm9ybTIiLCJfdmFsaWQiLCJfdmFsaWRhdGlvblJlc3VsdCIsIl9FbmNvZGVkU3RyZWFtU2luayR2YSIsIl92YWxpZDIiLCJfdmFsaWRhdGlvblJlc3VsdDIiLCJfRW5jb2RlZFN0cmVhbVNpbmskdmEyIiwiX3ZhbGlkMyIsIl92YWxpZGF0aW9uUmVzdWx0MyIsImhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrIiwiaGFzRW5jb2RlZFN0cmVhbVNpbmsiLCJoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2siLCJzdHJlYW1QbGF5ZXIiLCJfY2FsbGVlNSQiLCJfY29udGV4dDUiLCJTdHJlYW1UcmFja1RyYW5zZm9ybSIsIkVuY29kZWRTdHJlYW1TaW5rIiwiRGlzY292ZXJ5IiwiaGFuZGxlU3RyZWFtRmFpbHVyZSIsIlN0cmVhbUZhY3RvcnkiLCJmaW5hbGx5IiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsIl9yZXN0YXJ0QWZ0ZXJTdG9wIiwiX2NhbGxlZTYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJfcGxheSIsIl9jYWxsZWU3IiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3IiwicGxheSIsIl9oYW5kbGVTdHJlYW1GYWlsdXJlIiwiX2NhbGxlZTgiLCJfY2FsbGVlOCQiLCJfY29udGV4dDgiLCJfdGhpczYiLCJkZXN0cm95U3RyZWFtIiwiX3JlZjIiLCJwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwiX3BsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50IiwiX2NhbGxlZTkiLCJfdGhpczciLCJwbGF5UHJvbWlzZSIsIl9jYWxsZWU5JCIsIl9jb250ZXh0OSIsImhhc0F1ZGlvVHJhY2siLCJmaWx0ZXIiLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiIsIkNoYW5uZWxzIiwiY3JlYXRlQ2hhbm5lbCIsImNoYW5uZWxPcHRpb25zIiwiZGVmYXVsdFRhcmdldExhZyIsIl9vcHRpb25zJHRhcmdldExhZyIsImFwcGx5U3RhdHVzIiwiYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50IiwibWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwiZGVmYXVsdERpc2NvdmVyeVVyaSIsIkJpdHJhdGVNb2RlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlIiwiYml0cmF0ZU1vZGUiLCJCaXRyYXRlU3RhdGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZSIsImJpdHJhdGVTdGF0ZSIsImRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwiLCJfcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwicHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkiLCJfZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsImRpc2NvdmVyeVNlcnZpY2UiLCJjYWNoZWRWYWx1ZSIsIl9jYWNoZSIsIkRpc2NvdmVyeVNlcnZpY2UiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsImNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50IiwiZGVmYXVsdFRpbWVvdXQiLCJfdXJpIiwiX2Rpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwidGltZW91dCIsImFzU3RyaW5nIiwiZW5kUG9pbnRzIiwib2siLCJ0ZXh0IiwiRW5kUG9pbnQiLCJkaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsImZhaWxlZFJlcXVlc3RzIiwicHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQiLCJfYXJnczIiLCJwaW5nIiwidGltZSIsIl9kaXNjb3ZlcnlVcmkiLCJidWlsZERpc2NvdmVyeVVybCIsInNka1ZlcnNpb24iLCJzZWFyY2hQYXJhbXMiLCJhcGlWZXJzaW9uIiwiX3RpbWVvdXQiLCJfcm91bmRUcmlwVGltZSIsIl9waW5nIiwiZmluaXNoZWQiLCJidWlsZFBpbmdVcmwiLCJfc3Vic2NyaWJlIiwibG9jYWxTZXNzaW9uRGVzY3JpcHRpb24iLCJjbGllbnRWZXJzaW9uIiwiYm9keVdpdGhPZmZlciIsImJvZHlXaXRob3V0T2ZmZXIiLCJodHRwUmVzcG9uc2UiLCJzdWJzY3JpYmVSZXNwb25zZSIsImJ1aWxkVXJsIiwiYmVhcmVyVG9rZW4iLCJodHRwUm91bmRUcmlwVGltZSIsInNlc3Npb25EZXNjcmlwdGlvbiIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbiIsIm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwiX3B1Ymxpc2giLCJtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwicHVibGlzaCIsIl94NSIsIl94NiIsIl94NyIsInNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJzaGFyZWRTZWNyZXQiLCJtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJfeDgiLCJfeDkiLCJfbGltaXRCaXRyYXRlIiwibWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3gxNCIsIl9hZGRJY2VDYW5kaWRhdGVzIiwiY2FuZGlkYXRlcyIsImRpc2NvdmVyeUNvbXBsZXRlZCIsImFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9hcmdzNiIsIm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJhZGRJY2VDYW5kaWRhdGVzIiwiX3gxNSIsIl94MTYiLCJfeDE3IiwiX2Rlc3Ryb3lTdHJlYW0iLCJkZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX3gxOCIsIl94MTkiLCJfZGVzdHJveVN0cmVhbU9uVW5tb3VudCIsInNlbmRCZWFjb24iLCJfeDIwIiwiX3gyMSIsInBhdGgiLCJwYXRoQXNBcnJheSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsImpzb24iLCJydGNDb25maWd1cmF0aW9uIiwiY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MjIiLCJfeDIzIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCIsInB1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCQiLCJfY29udGV4dDEwIiwiX3gyNCIsIl94MjUiLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVRyYW5zcG9ydFBvbGljeSIsInJ0Y3BNdXhQb2xpY3kiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl9jYWxsZWUxMSIsIl9jYWxsZWUxMSQiLCJfY29udGV4dDExIiwiX3gyNiIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfY2FsbGVlMTIiLCJfY2FsbGVlMTIkIiwiX2NvbnRleHQxMiIsIl94MjciLCJfY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTMiLCJfeDI4IiwiQ2h1bmtlZFN0cmVhbSIsImNoYW5uZWxDb250ZXh0Iiwib2ZmZXJTZHAiLCJvcmlnaW5TdGFydFRpbWUiLCJDaHVua2VkU3RyZWFtaW5nIiwicGxheWVyIiwibW9uaXRvciIsIl9tb25pdG9yRGlzcG9zYWJsZXMiLCJuZXdTdHJlYW1TdGF0aXN0aWNzIiwiX3N0cmVhbVN0YXRpc3RpY3MiLCJjdXJyZW50VGltZSIsImRhdGFCdWZmZXJlZCIsIl9tb25pdG9yRmFpbHVyZUNvdW50IiwicGF1c2VkIiwiX2hsc1BsYXllciIsIl9waGVuaXhXZWJQbGF5ZXIiLCJfc2hha2EiLCJfb3B0aW9ucyIsImxvYWRlZCIsIl9wZW5kaW5nIiwiX3BsYXllciIsIlBsYXllciIsImRhc2hNYW5pZmVzdFVybE1hdGNoIiwiaGxzTWFuaWZlc3RVcmxNYXRjaCIsIm1hbmlmZXN0VXJsIiwicGxheWxpc3RVcmwiLCJIbHNQbGF5ZXIiLCJfb2JqZWN0U3ByZWFkIiwicHJlZmVyTmF0aXZlIiwic2hvdWxkVXNlTmF0aXZlSGxzIiwiV2ViUGxheWVyIiwiU2hha2FQbGF5ZXIiLCJtYW5pZmVzdFVSSSIsIl92aWRlb0VsZW1lbnQiLCJfa2luZCIsIl9zdHJlYW1JZCIsIl9tYW5pZmVzdFVSSSIsImVuY29kZVVSSSIsInJlcGxhY2UiLCJlbmFibGVXb3JrZXIiLCJtYXhCdWZmZXJMZW5ndGgiLCJsaXZlQmFja0J1ZmZlckxlbmd0aCIsImxpdmVTeW5jRHVyYXRpb24iLCJsaXZlRHVyYXRpb25JbmZpbml0eSIsImxpdmVNYXhMYXRlbmN5RHVyYXRpb24iLCJJbmZpbml0eSIsImhpZ2hCdWZmZXJXYXRjaGRvZ1BlcmlvZCIsImxvYWRTb3VyY2UiLCJhdHRhY2hNZWRpYSIsImNhblBsYXlUeXBlIiwibmV0d29ya1N0YXRlIiwiTmV0d29ya1N0YXRlcyIsIk5ldHdvcmtOb1NvdXJjZSIsInN0YXRpc3RpY3MiLCJtZWRpYSIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiYnVmZmVyZWQiLCJlbmQiLCJzdHJlYW1Db250cm9sbGVyIiwidHJ1ZUN1cnJlbnRUaW1lIiwibWF4IiwiZGVzdHJveSIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwiZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCIsIlJlYWxUaW1lU3RyZWFtIiwicGVlckNvbm5lY3Rpb25Db250ZXh0Iiwic3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIl9yZWYzIiwiX3NsaWNlZFRvQXJyYXkiLCJfcmVmMyQiLCJzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24iLCJzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24iLCJfcmVmNCIsImFwcGx5UnRjQ29uZmlndXJhdGlvbiIsInN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0IiwiY2FuY2VsRGlzY292ZXJ5IiwiY2FuZGlkYXRlIiwiX3JlZjUiLCJyZXRyeUNhbGxiYWNrIiwib25MaW5lIiwicmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJtZWRpYVN0cmVhbVByb21pc2UiLCJzdHJlYW1zIiwidHJhY2tMaXN0ZW5lciIsImFuc3dlciIsIl9yZWY2IiwibWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbiIsIl9JbnNlcnRhYmxlU3RyZWFtcyRhcCIsIkluc2VydGFibGVTdHJlYW1zIiwiX0luc2VydGFibGVTdHJlYW1zJGFwMiIsInRyYW5zZm9ybWVkU3RyZWFtIiwicnRjQ29ubmVjdGlvbk1vbml0b3IiLCJydGNTdGF0aXN0aWMiLCJydGNWaWRlb1N0YXRpc3RpYyIsInJ0Y0F1ZGlvU3RhdGlzdGljIiwiYXVkaW8iLCJhdWRpb1RyYWNrRmFpbGVkIiwidmlkZW9UcmFja0ZhaWxlZCIsIl9hcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJvcHRpb25hbFBlZXJDb25uZWN0aW9uIiwibmV3UnRjQ29uZmlndXJhdGlvbiIsIl9wZWVyQ29ubmVjdGlvbiRjdXJyZSIsImlzQ2xpZW50T2ZmZXJGbG93IiwiaWNlUmVzdGFydCIsIm9mZmVyIiwicGxheWVyT3B0aW9ucyIsImFiciIsImRlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZSIsIm1hbmlmZXN0IiwicmV0cnlQYXJhbWV0ZXJzIiwic3RyZWFtaW5nIiwicmVidWZmZXJpbmdHb2FsIiwiYnVmZmVyaW5nR29hbCIsImJ1ZmZlckJlaGluZCIsIm1heEF0dGVtcHRzIiwiYmFja29mZkZhY3RvciIsImxvYWRQbGF5ZXIiLCJlc3RpbWF0ZWRCYW5kd2lkdGgiLCJwbGF5VGltZSIsInVubG9hZCIsInBsYXllckNvbmZpZyIsImNvbmZpZ3VyZSIsImxvYWQiLCJjb2RlIiwiY3JlYXRlIiwidG9rZW5DYXBhYmlsaXRpZXMiLCJiYW5kd2lkdGhUb1N0YXJ0QXQiLCJtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZCIsImVycm9yT2JqZWN0IiwiY2FuUmVsb2FkIiwic2V2ZXJpdHkiLCJyZWxvYWRJZkFibGUiLCJpc05hdGl2ZSIsImRlbGl2ZXJ5VHlwZSIsImhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkIiwiX2xhc3RSZWxvYWRUaW1lIiwicmVsb2FkIiwidmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luayIsIm1vZGUiLCJhcHBseUVuY29kZWRTdHJlYW1UcmFuc2Zvcm1hdGlvbiIsInJlY2VpdmVycyIsInJlY2VpdmVyIiwicmVjZWl2ZSIsIndvcmtlciIsIldvcmtlciIsIm9ubWVzc2FnZSIsImV2ZW50IiwiY2h1bmsiLCJwb3N0TWVzc2FnZSIsImZvcmNlSW52YWxpZEZyYW1lIiwidHJhbnNmb3JtIiwidGVybWluYXRlIiwiZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiY29udHJvbGxlciIsInN1cnJvZ2F0ZSIsIlN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIiLCJTa2lwRnJhbWUiLCJlbnF1ZXVlIiwidHJhbnNmb3JtZXIiLCJUcmFuc2Zvcm1TdHJlYW0iLCJyZWNlaXZlclN0cmVhbXMiLCJzb3VyY2UiLCJyZWFkYWJsZSIsInNpbmsiLCJ3cml0YWJsZSIsInBpcGVUaHJvdWdoIiwicGlwZVRvIiwiTWVkaWFTdHJlYW0iLCJhdWRpb1B1bXBlciIsIkF1ZGlvIiwiYXBwZW5kQ2hpbGQiLCJyZW1vdmVDaGlsZCIsImFwcGx5SW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybWF0aW9uIiwiaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwidmlkZW9UcmFjayIsInByb2Nlc3NvciIsImdlbmVyYXRvciIsInJlbW92ZVRyYWNrIiwiYXVkaW9UcmFjayIsInZhbGlkYXRlTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSIsIlN5bWJvbCIsImdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMiLCJ0b1VwcGVyQ2FzZSIsIl9kdW1teUF1ZGlvU2lsZW50UGVyQ29kZWMiLCJPUFVTIiwiYnVmZmVyIiwiZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSIsIl9zaW5nbGVaZXJvQnl0ZSIsImdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWMiLCJfdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciIsIl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyIiwiX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCIsIl9kdW1teTgyeDgySDI2NCIsIklGcmFtZSIsIl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMiLCJIMjY0IiwiVlA4IiwiVlA5IiwiZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvSUZyYW1lIiwiX2lzQW5kcm9pZENocm9tZSIsImdldFN1cnJvZ2F0ZVZpZGVvUEZyYW1lUGVyQ29kZWMiLCJnZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyIiwiX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYyIsImdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZSIsInNhdmVkU3Vycm9nYXRlRnJhbWVOdW1iZXIiLCJiaXRNYXNrMSIsImJpdE1hc2syIiwiYml0U2hpZnRSaWdodEJ5MSIsImJpdFNoaWZ0TGVmdEJ5NyIsImJ5dGUxIiwiYnl0ZTIiLCJjb3B5T2ZEdW1teVBGcmFtZXMiLCJQRnJhbWUiLCJidWZmZXJJbmRleCIsIl9kdW1teTgyeDgySDI2NFBGcmFtZUZyYW1lTnVtYmVySW5kZXgiLCJfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciIsIlVpbnQ4QXJyYXkiLCJfaXNNb2JpbGVDaHJvbWUiLCJfaXNTYWZhcmkiLCJfX0JVSUxEX1ZFUlNJT05fXyIsIl9kZWZhdWx0VmVyc2lvbiIsIl90ZWxlbWV0cnlTZXJ2aWNlIiwiVGVsZW1ldHJ5U2VydmljZSIsInZhbHVlT2YiLCJsb2dSZWNvcmQiLCJfbG9ncyIsInNlbmRMb2dzSWZBYmxlIiwibG9nTWVzc2FnZXMiLCJfc2VuZExvZ3NJZkFibGUiLCJudW1iZXJPZkxvZ3NUb1NlbmQiLCJzaXplT2ZMb2dzVG9TZW5kIiwiZ2V0SXRlbVNpemUiLCJnZXRMb2dTaXplIiwic3VtIiwiZHVyYXRpb24iLCJfZHVyYXRpb24iLCJpc05lZ2F0aXZlIiwiYWJzIiwib2Zmc2V0IiwibWlsbGlzZWNvbmRzIiwic2Vjb25kcyIsIm1pbnV0ZXMiLCJob3VycyIsInBhcnRzIiwiU3RyaW5nIiwicGFkU3RhcnQiLCJ0YXJnZXRMZW5ndGgiLCJwYWRTdHJpbmciLCJyZXBlYXQiLCJkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMiLCJyYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmIiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQiLCJtaW4iLCJvdGhlciIsIl9uZXR3b3JrTW9uaXRvciIsInJlY29yZEZvcmVncm91bmRDaGFuZ2UiLCJyZWNvcmROZXR3b3JrUlRUVXBkYXRlIiwicmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUiLCJkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsInJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSIsInRpbWVTaW5jZUxhc3RDaGFuZ2UiLCJuZXdSVFQiLCJvbGRSdHQiLCJfbGFzdE5ldHdvcmtTdGF0aXN0aWNzIiwibmV3TmV0d29ya1R5cGUiLCJvbGROZXR3b3JrVHlwZSIsIm5ld0NhcGFjaXR5Iiwib2xkQ2FwYWNpdHkiLCJmbG9hdCIsImNoYW5uZWxTdGFydFRpbWUiLCJfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lIiwiX2xpc3RlblRvRmlyc3RUaW1lIiwiY2FsbFRpbWVUb0ZpcnN0RnJhbWUiLCJfY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIiLCJfbGlzdGVuRm9yU3RhbGwiLCJvblN0YWxsIiwiX2xpc3RlbkZvckNvbnRpbnVhdGlvbiIsIm9uQ29udGludWF0aW9uIiwiX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciIsInB1c2hUaW1lVG9GaXJzdEZyYW1lIiwicHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdGltZVRvRmlyc3RGcmFtZSIsImR1cmF0aW9uU2luY2VQYWdlTG9hZCIsIl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3ZpZGVvU3RhbGxlZCIsImJ1ZmZlckxlbmd0aCIsImhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50IiwiX2xhc3RQcm9ncmVzcyIsInRpbWVTaW5jZVN0b3AiLCJuZXdSZXNvbHV0aW9uIiwiX3ZpZGVvUmVzb2x1dGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7OztBQ1ZBO0FBQ0E7QUFDQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBO0FBQ0Esb0NBQW9DLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0wvRjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDSDdGLHVCQUF1QixtQkFBTyxDQUFDLHdGQUF1QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDSmhHO0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0Es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RUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUFDLENBQUM7QUFBQW5yQywySUFBQSxDQUx2UnNuQyx5QkFBeUIsa0NBTVc7RUFDckR3QyxJQUFJLEVBQUUsSUFBSXFCLFVBQVUsQ0FBQyxDQUNuQixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7RUFBRTtFQUNwQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0VBQUU7RUFDeEssSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtFQUFFO0VBQzVEO0VBQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQUU7RUFDeExwQixHQUFHLEVBQUUsSUFBSW9CLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ3pTbkIsR0FBRyxFQUFFLElBQUltQixVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUs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QUdBOztXQUVBOztXQUVBOztXQUVBOztXQUVBOztXQUVBOztXQUVBLG9COzs7O1VDdEJBO1VBQ0E7VUFDQTtVQUNBIiwiZmlsZSI6ImNoYW5uZWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlMaWtlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aEhvbGVzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvciwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjaywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZShcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHRvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZUNsYXNzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiKTtcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5TGltaXQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiKTtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIH1cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICBcInVzZSBzdHJpY3RcIjsgLyohIHJlZ2VuZXJhdG9yLXJ1bnRpbWUgLS0gQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuIC0tIGxpY2Vuc2UgKE1JVCk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vTElDRU5TRSAqL1xuICBtb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUgPSBmdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICAgIHJldHVybiBlO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHZhciB0LFxuICAgIGUgPSB7fSxcbiAgICByID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICBuID0gci5oYXNPd25Qcm9wZXJ0eSxcbiAgICBvID0gT2JqZWN0LmRlZmluZVByb3BlcnR5IHx8IGZ1bmN0aW9uICh0LCBlLCByKSB7XG4gICAgICB0W2VdID0gci52YWx1ZTtcbiAgICB9LFxuICAgIGkgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCA/IFN5bWJvbCA6IHt9LFxuICAgIGEgPSBpLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiLFxuICAgIGMgPSBpLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIixcbiAgICB1ID0gaS50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcbiAgZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIGUsIHtcbiAgICAgIHZhbHVlOiByLFxuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgd3JpdGFibGU6ICEwXG4gICAgfSksIHRbZV07XG4gIH1cbiAgdHJ5IHtcbiAgICBkZWZpbmUoe30sIFwiXCIpO1xuICB9IGNhdGNoICh0KSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICAgIHJldHVybiB0W2VdID0gcjtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHdyYXAodCwgZSwgciwgbikge1xuICAgIHZhciBpID0gZSAmJiBlLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IGUgOiBHZW5lcmF0b3IsXG4gICAgICBhID0gT2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSksXG4gICAgICBjID0gbmV3IENvbnRleHQobiB8fCBbXSk7XG4gICAgcmV0dXJuIG8oYSwgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBtYWtlSW52b2tlTWV0aG9kKHQsIHIsIGMpXG4gICAgfSksIGE7XG4gIH1cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2godCwgZSwgcikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IHQuY2FsbChlLCByKVxuICAgICAgfTtcbiAgICB9IGNhdGNoICh0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRocm93XCIsXG4gICAgICAgIGFyZzogdFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZS53cmFwID0gd3JhcDtcbiAgdmFyIGggPSBcInN1c3BlbmRlZFN0YXJ0XCIsXG4gICAgbCA9IFwic3VzcGVuZGVkWWllbGRcIixcbiAgICBmID0gXCJleGVjdXRpbmdcIixcbiAgICBzID0gXCJjb21wbGV0ZWRcIixcbiAgICB5ID0ge307XG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuICB2YXIgcCA9IHt9O1xuICBkZWZpbmUocCwgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbiAgdmFyIGQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgdiA9IGQgJiYgZChkKHZhbHVlcyhbXSkpKTtcbiAgdiAmJiB2ICE9PSByICYmIG4uY2FsbCh2LCBhKSAmJiAocCA9IHYpO1xuICB2YXIgZyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9IEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHApO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHModCkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICBkZWZpbmUodCwgZSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShlLCB0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IodCwgZSkge1xuICAgIGZ1bmN0aW9uIGludm9rZShyLCBvLCBpLCBhKSB7XG4gICAgICB2YXIgYyA9IHRyeUNhdGNoKHRbcl0sIHQsIG8pO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gYy50eXBlKSB7XG4gICAgICAgIHZhciB1ID0gYy5hcmcsXG4gICAgICAgICAgaCA9IHUudmFsdWU7XG4gICAgICAgIHJldHVybiBoICYmIFwib2JqZWN0XCIgPT0gX3R5cGVvZihoKSAmJiBuLmNhbGwoaCwgXCJfX2F3YWl0XCIpID8gZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pIDogZS5yZXNvbHZlKGgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICB1LnZhbHVlID0gdCwgaSh1KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYShjLmFyZyk7XG4gICAgfVxuICAgIHZhciByO1xuICAgIG8odGhpcywgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh0LCBuKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgZShmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICAgICAgaW52b2tlKHQsIG4sIGUsIHIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByID0gciA/IHIudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGUsIHIsIG4pIHtcbiAgICB2YXIgbyA9IGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChpLCBhKSB7XG4gICAgICBpZiAobyA9PT0gZikgdGhyb3cgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKG8gPT09IHMpIHtcbiAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gaSkgdGhyb3cgYTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdCxcbiAgICAgICAgICBkb25lOiAhMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZm9yIChuLm1ldGhvZCA9IGksIG4uYXJnID0gYTs7KSB7XG4gICAgICAgIHZhciBjID0gbi5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGMpIHtcbiAgICAgICAgICB2YXIgdSA9IG1heWJlSW52b2tlRGVsZWdhdGUoYywgbik7XG4gICAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICAgIGlmICh1ID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiB1O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJuZXh0XCIgPT09IG4ubWV0aG9kKSBuLnNlbnQgPSBuLl9zZW50ID0gbi5hcmc7ZWxzZSBpZiAoXCJ0aHJvd1wiID09PSBuLm1ldGhvZCkge1xuICAgICAgICAgIGlmIChvID09PSBoKSB0aHJvdyBvID0gcywgbi5hcmc7XG4gICAgICAgICAgbi5kaXNwYXRjaEV4Y2VwdGlvbihuLmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBuLm1ldGhvZCAmJiBuLmFicnVwdChcInJldHVyblwiLCBuLmFyZyk7XG4gICAgICAgIG8gPSBmO1xuICAgICAgICB2YXIgcCA9IHRyeUNhdGNoKGUsIHIsIG4pO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcC50eXBlKSB7XG4gICAgICAgICAgaWYgKG8gPSBuLmRvbmUgPyBzIDogbCwgcC5hcmcgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcC5hcmcsXG4gICAgICAgICAgICBkb25lOiBuLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcC50eXBlICYmIChvID0gcywgbi5tZXRob2QgPSBcInRocm93XCIsIG4uYXJnID0gcC5hcmcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSB7XG4gICAgdmFyIG4gPSByLm1ldGhvZCxcbiAgICAgIG8gPSBlLml0ZXJhdG9yW25dO1xuICAgIGlmIChvID09PSB0KSByZXR1cm4gci5kZWxlZ2F0ZSA9IG51bGwsIFwidGhyb3dcIiA9PT0gbiAmJiBlLml0ZXJhdG9yW1wicmV0dXJuXCJdICYmIChyLm1ldGhvZCA9IFwicmV0dXJuXCIsIHIuYXJnID0gdCwgbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSwgXCJ0aHJvd1wiID09PSByLm1ldGhvZCkgfHwgXCJyZXR1cm5cIiAhPT0gbiAmJiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ1wiICsgbiArIFwiJyBtZXRob2RcIikpLCB5O1xuICAgIHZhciBpID0gdHJ5Q2F0Y2gobywgZS5pdGVyYXRvciwgci5hcmcpO1xuICAgIGlmIChcInRocm93XCIgPT09IGkudHlwZSkgcmV0dXJuIHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IGkuYXJnLCByLmRlbGVnYXRlID0gbnVsbCwgeTtcbiAgICB2YXIgYSA9IGkuYXJnO1xuICAgIHJldHVybiBhID8gYS5kb25lID8gKHJbZS5yZXN1bHROYW1lXSA9IGEudmFsdWUsIHIubmV4dCA9IGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gci5tZXRob2QgJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksIHIuZGVsZWdhdGUgPSBudWxsLCB5KSA6IGEgOiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLCByLmRlbGVnYXRlID0gbnVsbCwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgZSA9IHtcbiAgICAgIHRyeUxvYzogdFswXVxuICAgIH07XG4gICAgMSBpbiB0ICYmIChlLmNhdGNoTG9jID0gdFsxXSksIDIgaW4gdCAmJiAoZS5maW5hbGx5TG9jID0gdFsyXSwgZS5hZnRlckxvYyA9IHRbM10pLCB0aGlzLnRyeUVudHJpZXMucHVzaChlKTtcbiAgfVxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgZSA9IHQuY29tcGxldGlvbiB8fCB7fTtcbiAgICBlLnR5cGUgPSBcIm5vcm1hbFwiLCBkZWxldGUgZS5hcmcsIHQuY29tcGxldGlvbiA9IGU7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0KSB7XG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3tcbiAgICAgIHRyeUxvYzogXCJyb290XCJcbiAgICB9XSwgdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyksIHRoaXMucmVzZXQoITApO1xuICB9XG4gIGZ1bmN0aW9uIHZhbHVlcyhlKSB7XG4gICAgaWYgKGUgfHwgXCJcIiA9PT0gZSkge1xuICAgICAgdmFyIHIgPSBlW2FdO1xuICAgICAgaWYgKHIpIHJldHVybiByLmNhbGwoZSk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlLm5leHQpIHJldHVybiBlO1xuICAgICAgaWYgKCFpc05hTihlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIG8gPSAtMSxcbiAgICAgICAgICBpID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIGZvciAoOyArK28gPCBlLmxlbmd0aDspIGlmIChuLmNhbGwoZSwgbykpIHJldHVybiBuZXh0LnZhbHVlID0gZVtvXSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBpLm5leHQgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF90eXBlb2YoZSkgKyBcIiBpcyBub3QgaXRlcmFibGVcIik7XG4gIH1cbiAgcmV0dXJuIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBvKGcsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBvKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb24sXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHQgJiYgdC5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFlICYmIChlID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChlLmRpc3BsYXlOYW1lIHx8IGUubmFtZSkpO1xuICB9LCBlLm1hcmsgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YodCwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpIDogKHQuX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZSh0LCB1LCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGcpLCB0O1xuICB9LCBlLmF3cmFwID0gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogdFxuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYywgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZS5hc3luYyA9IGZ1bmN0aW9uICh0LCByLCBuLCBvLCBpKSB7XG4gICAgdm9pZCAwID09PSBpICYmIChpID0gUHJvbWlzZSk7XG4gICAgdmFyIGEgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKHQsIHIsIG4sIG8pLCBpKTtcbiAgICByZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpID8gYSA6IGEubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LmRvbmUgPyB0LnZhbHVlIDogYS5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhnKSwgZGVmaW5lKGcsIHUsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoZywgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZGVmaW5lKGcsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZS5rZXlzID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IE9iamVjdCh0KSxcbiAgICAgIHIgPSBbXTtcbiAgICBmb3IgKHZhciBuIGluIGUpIHIucHVzaChuKTtcbiAgICByZXR1cm4gci5yZXZlcnNlKCksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsgci5sZW5ndGg7KSB7XG4gICAgICAgIHZhciB0ID0gci5wb3AoKTtcbiAgICAgICAgaWYgKHQgaW4gZSkgcmV0dXJuIG5leHQudmFsdWUgPSB0LCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICB9O1xuICB9LCBlLnZhbHVlcyA9IHZhbHVlcywgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KGUpIHtcbiAgICAgIGlmICh0aGlzLnByZXYgPSAwLCB0aGlzLm5leHQgPSAwLCB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdCwgdGhpcy5kb25lID0gITEsIHRoaXMuZGVsZWdhdGUgPSBudWxsLCB0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLmFyZyA9IHQsIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpLCAhZSkgZm9yICh2YXIgciBpbiB0aGlzKSBcInRcIiA9PT0gci5jaGFyQXQoMCkgJiYgbi5jYWxsKHRoaXMsIHIpICYmICFpc05hTigrci5zbGljZSgxKSkgJiYgKHRoaXNbcl0gPSB0KTtcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB0aGlzLmRvbmUgPSAhMDtcbiAgICAgIHZhciB0ID0gdGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbiBkaXNwYXRjaEV4Y2VwdGlvbihlKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBlO1xuICAgICAgdmFyIHIgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKG4sIG8pIHtcbiAgICAgICAgcmV0dXJuIGEudHlwZSA9IFwidGhyb3dcIiwgYS5hcmcgPSBlLCByLm5leHQgPSBuLCBvICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCAhIW87XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBvID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IG8gPj0gMDsgLS1vKSB7XG4gICAgICAgIHZhciBpID0gdGhpcy50cnlFbnRyaWVzW29dLFxuICAgICAgICAgIGEgPSBpLmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gaS50cnlMb2MpIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIGlmIChpLnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgYyA9IG4uY2FsbChpLCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgdSA9IG4uY2FsbChpLCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGMgJiYgdSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYykge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXUpIHRocm93IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uIGFicnVwdCh0LCBlKSB7XG4gICAgICBmb3IgKHZhciByID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IHIgPj0gMDsgLS1yKSB7XG4gICAgICAgIHZhciBvID0gdGhpcy50cnlFbnRyaWVzW3JdO1xuICAgICAgICBpZiAoby50cnlMb2MgPD0gdGhpcy5wcmV2ICYmIG4uY2FsbChvLCBcImZpbmFsbHlMb2NcIikgJiYgdGhpcy5wcmV2IDwgby5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGkgPSBvO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpICYmIChcImJyZWFrXCIgPT09IHQgfHwgXCJjb250aW51ZVwiID09PSB0KSAmJiBpLnRyeUxvYyA8PSBlICYmIGUgPD0gaS5maW5hbGx5TG9jICYmIChpID0gbnVsbCk7XG4gICAgICB2YXIgYSA9IGkgPyBpLmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJldHVybiBhLnR5cGUgPSB0LCBhLmFyZyA9IGUsIGkgPyAodGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5uZXh0ID0gaS5maW5hbGx5TG9jLCB5KSA6IHRoaXMuY29tcGxldGUoYSk7XG4gICAgfSxcbiAgICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodCwgZSkge1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gdC50eXBlKSB0aHJvdyB0LmFyZztcbiAgICAgIHJldHVybiBcImJyZWFrXCIgPT09IHQudHlwZSB8fCBcImNvbnRpbnVlXCIgPT09IHQudHlwZSA/IHRoaXMubmV4dCA9IHQuYXJnIDogXCJyZXR1cm5cIiA9PT0gdC50eXBlID8gKHRoaXMucnZhbCA9IHRoaXMuYXJnID0gdC5hcmcsIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIiwgdGhpcy5uZXh0ID0gXCJlbmRcIikgOiBcIm5vcm1hbFwiID09PSB0LnR5cGUgJiYgZSAmJiAodGhpcy5uZXh0ID0gZSksIHk7XG4gICAgfSxcbiAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci5maW5hbGx5TG9jID09PSB0KSByZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sIHIuYWZ0ZXJMb2MpLCByZXNldFRyeUVudHJ5KHIpLCB5O1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godCkge1xuICAgICAgZm9yICh2YXIgZSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBlID49IDA7IC0tZSkge1xuICAgICAgICB2YXIgciA9IHRoaXMudHJ5RW50cmllc1tlXTtcbiAgICAgICAgaWYgKHIudHJ5TG9jID09PSB0KSB7XG4gICAgICAgICAgdmFyIG4gPSByLmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gbi50eXBlKSB7XG4gICAgICAgICAgICB2YXIgbyA9IG4uYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG87XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChlLCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcixcbiAgICAgICAgbmV4dExvYzogblxuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHQpLCB5O1xuICAgIH1cbiAgfSwgZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheVdpdGhIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aEhvbGVzLmpzXCIpO1xudmFyIGl0ZXJhYmxlVG9BcnJheUxpbWl0ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVJlc3QgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIik7XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfc2xpY2VkVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheVdpdGhvdXRIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCIpO1xudmFyIGl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIG5vbkl0ZXJhYmxlU3ByZWFkID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIik7XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9QcmltaXRpdmUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKFwiLi90b1ByaW1pdGl2ZS5qc1wiKTtcbmZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiO1xufVxubW9kdWxlLmV4cG9ydHMgPSB0b1Byb3BlcnR5S2V5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gKG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzKSwgX3R5cGVvZihvKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIi8vIFRPRE8oQmFiZWwgOCk6IFJlbW92ZSB0aGlzIGZpbGUuXG5cbnZhciBydW50aW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lXCIpKCk7XG5tb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG5cbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vcGFja2FnZXMvcnVudGltZS9ydW50aW1lLmpzI0w3MzY9XG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5jb25zdCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCA9IDMwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5SXNGb3JlZ3JvdW5kOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzRm9yZWdyb3VuZDogU3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSBfdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBwcml2YXRlIF9kb2N1bWVudEZvY3VzSW50ZXJ2YWw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9pc0ZvcmVncm91bmQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZCA9IG5ldyBSZWFkT25seVN1YmplY3QodGhpcy5faXNGb3JlZ3JvdW5kKTtcbiAgICB0aGlzLmRldGVjdFRhYkZvY3VzQ2hhbmdlKCk7XG4gIH1cblxuICBnZXQgaXNGb3JlZ3JvdW5kKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kO1xuICB9XG5cbiAgZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5fdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGRldGVjdFRhYkZvY3VzQ2hhbmdlKCk6IHZvaWQge1xuICAgIGxldCBoaWRkZW47XG4gICAgbGV0IHZpc2liaWxpdHlDaGFuZ2U7XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIER1ZSB0byB0eXBlc2NyaXB0IG5vdCBoYXZpbmcgYSBkZWZpbml0aW9uIGZvciAnbXNIaWRkZW4nIG9yICd3ZWJraXRIaWRkZW4nIHR5cGVzXG4gICAgLy8gUmVxdWlyZWQgdG8gQHRzLWlnbm9yZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQubXNIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnbXNIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICdtc3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LndlYmtpdEhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICd3ZWJraXRIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd3ZWJraXR2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC5oaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7IC8vIE9wZXJhIDEyLjEwIGFuZCBGaXJlZm94IDE4IGFuZCBsYXRlciBzdXBwb3J0XG4gICAgICBoaWRkZW4gPSAnaGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAndmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG5cbiAgICBjb25zdCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gIWRvY3VtZW50W2hpZGRlbl07XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudFtoaWRkZW5dICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG5cbiAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpc3RlbkZvckRvY3VtZW50Rm9jdXMuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvckRvY3VtZW50Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9IGRvY3VtZW50Lmhhc0ZvY3VzKCk7XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH0sIGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gbnVsbDtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzRm9yZWdyb3VuZCA9PT0gaXNGb3JlZ3JvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kLnZhbHVlID0gaXNGb3JlZ3JvdW5kO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCcm93c2VyRGV0ZWN0b3Ige1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXggPSAvKE1TSUV8KD8hR2Vja28uKylGaXJlZm94fCg/IUFwcGxlV2ViS2l0LitDaHJvbWUuKylTYWZhcml8KD8hQXBwbGVXZWJLaXQuKylDaHJvbWV8QXBwbGVXZWJLaXQoPyEuK0Nocm9tZXwuK1NhZmFyaSl8R2Vja28oPyEuK0ZpcmVmb3gpKSg/OiB8XFwvKShbXFxkLmFwcmVdKykvZztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWUgPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck1ham9yVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNNb2JpbGUgPSAoL0FuZHJvaWR8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fE9wZXJhIE1pbmkvaSkudGVzdChuYXZpZ2F0b3I/LnVzZXJBZ2VudCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0FuZHJvaWQgPSAoL0FuZHJvaWQvaSkudGVzdChuYXZpZ2F0b3I/LnVzZXJBZ2VudCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNjkgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzY5LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcxID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzIgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcyLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc1ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzYgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc2LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NyA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJyk7XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJNYWpvclZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQW5kcm9pZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0FuZHJvaWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNjkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU2OTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcwO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcxKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc0O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc1KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzTW9iaWxlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XG5cbiAgICBpZiAoYnJvd3Nlck5hbWVBbmRWZXJzaW9uICYmIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXSkge1xuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVMaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3Nlck5hbWVMaXN0WzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3NlclZlcnNpb25MaXN0IHx8ICFicm93c2VyVmVyc2lvbkxpc3RbMV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xuXG4gICAgaWYgKCFmdWxsVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcihmdWxsVmVyc2lvbi5zcGxpdCgnLicpWzBdKSB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XG5cbiAgICBpZiAobXNpZSA+IDApIHtcbiAgICAgIC8vIElFIDEwIG9yIG9sZGVyID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcobXNpZSArIDUsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCl9YDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XG5cbiAgICBpZiAodHJpZGVudCA+IDApIHtcbiAgICAgIC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgY29uc3QgdmVyc2lvbiA9IHVzZXJBZ2VudC5pbmRleE9mKCdydjonKTtcblxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcodmVyc2lvbiArIDMsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgdmVyc2lvbikpLCAxMCl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciB7XG4gIGdldFN0cmluZ1ZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKSB8fFxuICAgICAgdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKGAke25hbWV9LXVyaS1wYXJhbWV0ZXItbmFtZWApIHx8XG4gICAgICB0aGlzLmRlZmF1bHRTdHJpbmdWYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIGdldEJvb2xlYW5WYWx1ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJyB8fCB2YWx1ZSA9PT0gJ09uJztcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZUZyb21VcmkgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCk7XG5cbiAgICBpZiAodmFsdWVGcm9tVXJpKSB7XG4gICAgICByZXR1cm4gdmFsdWVGcm9tVXJpID09PSAndHJ1ZScgfHwgdmFsdWVGcm9tVXJpID09PSAnMScgfHwgdmFsdWVGcm9tVXJpID09PSAnT24nO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRCb29sZWFuVmFsdWVbbmFtZV0gPT09IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0U3RyaW5nVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtbWV0cmljcy1sZXZlbCc6IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCksXG4gICAgICAncGhlbml4LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNvbnNvbGUtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LXRlbGVtZXRyeS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jaGFubmVsLXRva2VuJzogJycsXG4gICAgICAncGhlbml4LXVyaSc6ICcnLFxuICAgICAgJ3BoZW5peC1iYXNlLXVyaSc6ICcnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRCb29sZWFuVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogYm9vbGVhbiB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nOiB0cnVlLFxuICAgICAgJ3BoZW5peC1mb3JjZS1nYXJiYWdlLWNvbGxlY3Rpb24tb24tcmVzdGFydCc6IHRydWUsXG4gICAgICAncGhlbml4LXNraXAtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLW1vYmlsZS1kZXZpY2VzJzogdHJ1ZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhVmFsdWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBtZXRhW25hbWU9JyR7bmFtZX0nXWApO1xuXG4gICAgaWYgKCFtZXRhVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG1ldGFWYWx1ZS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWVVUklQYXJhbWV0ZXJOYW1lID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpO1xuXG4gICAgaWYgKCF2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uc2VhcmNoKS5nZXQodmFsdWVVUklQYXJhbWV0ZXJOYW1lKSB8fCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciB7XG4gIHN0YXRpYyBmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc0ZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb25TdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5vdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5vdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG5cbiAgICBpbWcuc3JjID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW25ldyBBcnJheUJ1ZmZlcigxMGUrNyldKSk7IC8vIDEwME1iIG9yIGxlc3Mgb3IgbW9yZSBkZXBlbmRpbmcgb24gYXMgeW91IHdpc2ggdG8gZm9yY2UvaW52b2tlIEdDIGN5Y2xlIHJ1blxuICAgIGltZy5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLnNyYyk7XG5cbiAgICAgIGltZyA9IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzU3VwcG9ydGVkID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvclsnY29ubmVjdGlvbiddO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydHQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VmZmVjdGl2ZVR5cGU6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk7XG4gICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gIH1cblxuICBnZXQgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IHJ0dCgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9ydHQ7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlVHlwZSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9lZmZlY3RpdmVUeXBlO1xuICB9XG5cbiAgZ2V0IGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rTWF4O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZmZlY3RpdmVUeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gJ1Vua25vd24nO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5lZmZlY3RpdmVUeXBlIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnR5cGU7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucnR0O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgICB9O1xuXG4gICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRpc3RpY3MoKTogdm9pZCB7XG4gICAgdGhpcy5fcnR0LnZhbHVlID0gdGhpcy5nZXRSb3VuZFRyaXBUaW1lKCk7XG4gICAgdGhpcy5fZWZmZWN0aXZlVHlwZS52YWx1ZSA9IHRoaXMuZ2V0RWZmZWN0aXZlVHlwZSgpO1xuICAgIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnZhbHVlID0gdGhpcy5nZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuXG5leHBvcnQgY2xhc3MgU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1TZXR1cExpc3RlbmVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0cmljc1NlcnZpY2UgPSBTREsubWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWV0cmljU3VibWl0dGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN1Y2Nlc3Moc3RyZWFtSWQpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZCwgc3RyZWFtSWQpO1xuICB9XG5cbiAgZmFpbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZFN0cmVhbU1ldHJpYyhtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZSwgc3RyZWFtSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbWV0cmljU3VibWl0dGVkKSB7XG4gICAgICByZXR1cm4gO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY1N1Ym1pdHRlZCA9IHRydWU7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldHVwVGltZSA9IG5vdyAtIHRoaXMuX3N0YXJ0VGltZTtcbiAgICBjb25zdCBtZXRyaWNOYW1lID0gbmV3IE1ldHJpY1R5cGUobWV0cmljVHlwZSkuZ2V0TmFtZSgpO1xuXG4gICAgdGhpcy5tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogc2V0dXBUaW1lfSxcbiAgICAgIHN0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gU3RyZWFtIG1ldHJpYyBbJXNdIGluIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBuZXcgRHVyYXRpb25zKHNldHVwVGltZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRWRnZVRva2VuIGZyb20gJy4vRWRnZVRva2VuJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi9FbmNvZGVkRWRnZVRva2VuJztcblxuY29uc3QgZWRnZUF1dGhUb2tlblByZWZpeCA9ICdESUdFU1Q6JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZUF1dGhQYXJzZXIge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VkZ2VBdXRoUGFyc2VyJyk7XG5cbiAgc3RhdGljIHBhcnNlVG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBFZGdlVG9rZW4ge1xuICAgIGlmICghdGhpcy5pc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbikpIHtcbiAgICAgIEVkZ2VBdXRoUGFyc2VyLl9sb2dnZXIuZXJyb3IoJ1Rva2VuIGlzIG5vdCB2YWxpZCBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihudWxsKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb2RlZFRva2VuID0gYXRvYih0b2tlbi5zdWJzdHIoZWRnZUF1dGhUb2tlblByZWZpeC5sZW5ndGgpKTtcbiAgICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEpTT04ucGFyc2UoZGVjb2RlZFRva2VuKTtcblxuICAgICAgZWRnZVRva2VuLnRva2VuID0gSlNPTi5wYXJzZShlZGdlVG9rZW4udG9rZW4pO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihlZGdlVG9rZW4pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIEVkZ2VBdXRoUGFyc2VyLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBwYXJzZSB0b2tlbiB2YWx1ZScsIGUpO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihudWxsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0b2tlbiAmJiB0b2tlbi5zdGFydHNXaXRoKGVkZ2VBdXRoVG9rZW5QcmVmaXgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbnRlcmZhY2UgSVRva2VuIHtcbiAgdXJpOiBVUkwgfCBudWxsO1xuICBjYXBhYmlsaXRpZXM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSUVkZ2VUb2tlbiB7XG4gIGFwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgdG9rZW46IElUb2tlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZVRva2VuIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbjogSVRva2VuO1xuXG4gIGNvbnN0cnVjdG9yKGVkZ2VUb2tlbjogSUVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uSWQgPSBlZGdlVG9rZW4/LmFwcGxpY2F0aW9uSWQgfHwgJyc7XG4gICAgdGhpcy5fdG9rZW4gPSB7XG4gICAgICB1cmk6IGVkZ2VUb2tlbj8udG9rZW4/LnVyaSA/IG5ldyBVUkwoZWRnZVRva2VuLnRva2VuLnVyaSkgOiBudWxsLFxuICAgICAgY2FwYWJpbGl0aWVzOiBlZGdlVG9rZW4/LnRva2VuPy5jYXBhYmlsaXRpZXMgfHwgW11cbiAgICB9O1xuICB9XG5cbiAgZ2V0IHVyaSgpOiBVUkwgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW4udXJpO1xuICB9XG5cbiAgZ2V0IGNhcGFiaWxpdGllcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLmNhcGFiaWxpdGllcztcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uSWQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmRlY2xhcmUgY29uc3QgX19GRUFUVVJFU19fOiB7XG4gIHNlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHNlbmRMb2dzOiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBzZW5kTWV0cmljczogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZEZlYXR1cmVzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTG9nczogTG9nZ2luZ0xldmVsVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRNZXRyaWNzOiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9ncygpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvZ3M7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRNZXRyaWNzKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRNZXRyaWNzO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dUb0NvbnNvbGUoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ1RvQ29uc29sZTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUZlYXR1cmVzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IF9fRkVBVFVSRVNfXztcblxuICAgICAgdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcyA9ICdzZW5kTG9jYWxDYW5kaWRhdGVzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMgOiB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnc2VuZExvZ3MnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZExvZ3MgOiAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ3NlbmRNZXRyaWNzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRNZXRyaWNzIDogJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnbG9nVG9Db25zb2xlJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLmxvZ1RvQ29uc29sZSA6ICdBbGwnO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXMgPSB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnQWxsJztcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRGZWF0dXJlcy5hcHBseUZlYXR1cmVzKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlRW5hYmxlbWVudCB7XG4gIHN0YXRpYyBnZXQgY2xpZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDbGllbnQgb2ZmZXIgd29ya2Zsb3cgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vyc1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzUgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc2IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYWRkVHJhbmNlaXZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENocm9tZSA2OSwgNzAsIDcxLCA3MiBleHBvc2VzIGBhZGRUcmFuY2VpdmVyYCBidXQgaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHlcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcwIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldEN1cnJlbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb25UcmFja0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDYzIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU1O1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNob3VsZFVzZU5hdGl2ZUhscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2Ftc3VuZ0Jyb3dzZXInO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1ByZWNhY2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiB0eXBlb2YgZG9jdW1lbnQ/LmNyZWF0ZUVsZW1lbnQgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPj0gNzEgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uID49IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzTW9iaWxlKCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICB0eXBlb2YgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciA9PT0gJ3VuZGVmaW5lZCcpO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIFJUQ1J0cFJlY2VpdmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgUlRDUnRwUmVjZWl2ZXIucHJvdG90eXBlLmNyZWF0ZUVuY29kZWRTdHJlYW1zICE9PSAndW5kZWZpbmVkJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBSVENSdHBTY3JpcHRUcmFuc2Zvcm0gIT09ICd1bmRlZmluZWQnO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fUEFSQU1FVEVSU19fOiB7XG4gIGRpc2NvdmVyeTogSURpc2NvdmVyeVBhcmFtZXRlcjtcbn07XG5cbmludGVyZmFjZSBJRGlzY292ZXJ5UGFyYW1ldGVye1xuICBpbnRlbnRpb25zOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcmFtZXRlcnMge1xuICBwcml2YXRlIHN0YXRpYyBfZGlzY292ZXJ5UGFyYW1ldGVyczogSURpc2NvdmVyeVBhcmFtZXRlciA7XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlQYXJhbWV0ZXJzKCk6IElEaXNjb3ZlcnlQYXJhbWV0ZXIge1xuICAgIHJldHVybiB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5UGFyYW1ldGVycygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1ldGVycyA9IF9fUEFSQU1FVEVSU19fO1xuXG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0gJ2Rpc2NvdmVyeScgaW4gcGFyYW1ldGVycyA/IHBhcmFtZXRlcnMuZGlzY292ZXJ5IDoge2ludGVudGlvbnM6ICcnfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0ge2ludGVudGlvbnM6ICcnfTtcbiAgICB9XG4gIH1cbn1cblxuUGFyYW1ldGVycy5hcHBseVBhcmFtZXRlcnMoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rpc3Bvc2FibGU6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGlzcG9zYWJsZTogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGU7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLl9kaXNwb3NhYmxlLmNhbGwodGhpcyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZUxpc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0OiBJRGlzcG9zYWJsZVtdID0gW107XG5cbiAgYWRkKGRpc3Bvc2FibGU6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5wdXNoKGRpc3Bvc2FibGUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LmZvckVhY2goZGlzcG9zYWJsZSA9PiBkaXNwb3NhYmxlLmRpc3Bvc2UoKSk7XG4gICAgdGhpcy5fbGlzdC5sZW5ndGggPSAwO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYERpc3Bvc2FibGVMaXN0W2Rpc3Bvc2FibGVzPSR7dGhpcy5fbGlzdC5sZW5ndGh9XWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8vIEFzIGZsb2F0IGluIEVDTUFTY3JpcHQgdXNlIDY0LWJpdCBmb3JtYXQgaXQgY2Fubm90IGhhdmUvaGFuZGxlIG1vcmUgdGhhbiAxNSBzeW1ib2xzIGFmdGVyIGRvdC5cbmNvbnN0IG1heERpZ2l0c0luRmxvYXRBZnRlckRvdCA9IDE1O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOdW1iZXJzIHtcbiAgc3RhdGljIGNvdW50TnVtYmVyTGVuZ3RoKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlID0gMDtcbiAgICBsZXQgbnVtYmVyID0gdmFsdWU7XG5cbiAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgbnVtYmVyICo9IC0xO1xuICAgICAgaW5jcmVtZW50Rm9yTmVnYXRpdmVWYWx1ZSsrO1xuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXJzLmNvdW50RGlnaXRzQmVmb3JlRGVjaW1hbChudW1iZXIpICsgaW5jcmVtZW50Rm9yTmVnYXRpdmVWYWx1ZSArIChudW1iZXIgIT09IE1hdGguZmxvb3IobnVtYmVyKSA/IE51bWJlcnMuY291bnREaWdpdHNBZnRlckRlY2ltYWwobnVtYmVyKSArIDEgOiAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZpeFJvdW5kaW5nKHZhbHVlOiBudW1iZXIsIHByZWNpc2lvbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBwb3dlciA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24pO1xuXG4gICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBwb3dlcikgLyBwb3dlcjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvdW50RGlnaXRzQmVmb3JlRGVjaW1hbCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgZGlnaXRzQmVmb3JlRGVjaW1hbCA9IDE7XG4gICAgbGV0IG51bWJlciA9IHZhbHVlO1xuXG4gICAgd2hpbGUgKG51bWJlciA+PSAxMCkge1xuICAgICAgbnVtYmVyID0gbnVtYmVyIC8gMTA7XG4gICAgICBkaWdpdHNCZWZvcmVEZWNpbWFsKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpZ2l0c0JlZm9yZURlY2ltYWw7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb3VudERpZ2l0c0FmdGVyRGVjaW1hbCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG4gICAgbGV0IG1vZGlmaWVkVmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKTtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgd2hpbGUgKG1vZGlmaWVkVmFsdWUgIT09IG9yaWdpbmFsVmFsdWUgJiYgY291bnQgPCBtYXhEaWdpdHNJbkZsb2F0QWZ0ZXJEb3QpIHtcbiAgICAgIGNvdW50Kys7XG4gICAgICBtb2RpZmllZFZhbHVlID0gTnVtYmVycy5maXhSb3VuZGluZyhvcmlnaW5hbFZhbHVlLCBjb3VudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ051bWJlcnMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5cbmV4cG9ydCBlbnVtIExvZ2dpbmdMZXZlbCB7XG4gIEFsbCA9IC0xLFxuICBUcmFjZSA9IDEwLFxuICBEZWJ1ZyA9IDIwLFxuICBJbmZvID0gMzAsXG4gIFdhcm4gPSA0MCxcbiAgRXJyb3IgPSA1MCxcbiAgRmF0YWwgPSA2MCxcbiAgT2ZmID0gMTAwLFxufVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxUeXBlID0gJ09mZicgfCAnVHJhY2UnIHwgJ0RlYnVnJyB8ICdJbmZvJyB8ICdXYXJuJyB8ICdFcnJvcicgfCAnRmF0YWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhdGVnb3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGVuZGVyczogQXBwZW5kZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQ7XG5cbiAgZ2V0IGNhdGVnb3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGVnb3J5O1xuICB9XG5cbiAgZ2V0IGFwcGVuZGVycygpOiBBcHBlbmRlcnMge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdUaHJlc2hvbGQge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICB0cmFjZSguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuVHJhY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuVHJhY2UsIGFyZ3MpO1xuICB9XG5cbiAgZGVidWcoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkRlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkRlYnVnLCBhcmdzKTtcbiAgfVxuXG4gIGluZm8oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuSW5mbywgYXJncyk7XG4gIH1cblxuICB3YXJuKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLldhcm4sIGFyZ3MpO1xuICB9XG5cbiAgZXJyb3IoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkVycm9yLCBhcmdzKTtcbiAgfVxuXG4gIGZhdGFsKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5GYXRhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5GYXRhbCwgYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGxvZyhsZXZlbDogbnVtYmVyLCBhcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3MpO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLnZhbHVlLmZvckVhY2goKGFwcGVuZGVyOiBJQXBwZW5kZXIpID0+IHtcbiAgICAgIGFwcGVuZGVyLmxvZyhsZXZlbCwgbWVzc2FnZSwgdGhpcy5jYXRlZ29yeSwgZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQbGFjZWhvbGRlcnMoYXJnczogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IGFyZ3NbMF07XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YgJiYgYXJncy5sZW5ndGggPiAxICYmIGluZGV4ID49IDApIHtcbiAgICAgIGluZGV4ID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mKCclJywgaW5kZXgpO1xuXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIGluZGV4ICsgMik7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICAvLyBFc2NhcGVkICclJScgdHVybnMgaW50byAnJSdcbiAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICclZCcgb3IgJyVzJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy50b1N0cmluZyhhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICVqJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnkoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICBhcmdzID0gYXJncy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxID09PSBhcnJheS5sZW5ndGggJiYgY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGBbJHt0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZSl9XWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkoYXJnOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhY2hlID0gW107XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhcmcgaW5zdGFuY2VvZiBFcnJvciA/IHRoaXMudG9TdHJpbmcoYXJnKSA6IGFyZyxcbiAgICAgICAgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNhY2hlLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gJzxyZWN1cnNpdmU+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAyXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnW29iamVjdCBpbnZhbGlkIEpTT04uc3RyaW5naWZ5XSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXJndW1lbnQoYXJndW1lbnQ6IGFueSwgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgdGhpcy50b1N0cmluZyhhcmd1bWVudCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1N0cmluZyhkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGF0YSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgdG9TdHJpbmdTdHIgPSAnJztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gJ1tvYmplY3QgaW52YWxpZCB0b1N0cmluZygpXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9TdHJpbmdTdHI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBhcHBlbmRlcnM6IEFwcGVuZGVycywgdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkKSB7XG4gICAgdGhpcy5fY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSBhcHBlbmRlcnM7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRGVmYXVsdHMge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsW0J1aWxkRmVhdHVyZXMuc2VuZExvZ3NdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxbQnVpbGRGZWF0dXJlcy5sb2dUb0NvbnNvbGVdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4vTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXIsIHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2Vyczoge1tjYXRlZ29yeTogc3RyaW5nXTogSUxvZ2dlcn0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGVuZGVyczogQXBwZW5kZXJzID0gbmV3IEFwcGVuZGVycygpO1xuICBwcml2YXRlIHN0YXRpYyBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkID0gbmV3IExvZ2dpbmdUaHJlc2hvbGQoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBuZXcgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMb2dnZXIoY2F0ZWdvcnk6IHN0cmluZyk6IElMb2dnZXIge1xuICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjYXRlZ29yeSA9ICdTREsnO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV0gPSBuZXcgTG9nZ2VyKGNhdGVnb3J5LCB0aGlzLl9hcHBlbmRlcnMsIHRoaXMuX3RocmVzaG9sZCk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2luZ0xldmVsKCk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCdjb25zb2xlJywgTG9nZ2VyRmFjdG9yeS5hcHBseUNvbnNvbGVMb2dnZXIuYmluZCh0aGlzKSk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCd0ZWxlbWV0cnknLCBMb2dnZXJGYWN0b3J5LmFwcGx5VGVsZW1ldHJ5TG9nZ2VyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlMb2dnaW5nTGV2ZWwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbG9nZ2luZy1sZXZlbCcpO1xuXG4gICAgaWYgKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pIHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbChuYW1lOiBzdHJpbmcsIGFwcGx5QXBwZW5kZXI6IChsZXZlbDogTG9nZ2luZ0xldmVsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKGBwaGVuaXgtJHtuYW1lfS1sb2dnaW5nLWxldmVsYCk7XG5cbiAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09ICdPZmYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXBwbHlBcHBlbmRlcihMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5Q29uc29sZUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseVRlbGVtZXRyeUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkxvZ2dlckZhY3RvcnkuYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ0xldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKGxvZ2dpbmdMZXZlbDogTG9nZ2luZ0xldmVsKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWwpIHtcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuVHJhY2U6XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRGVidWc6XG4gICAgICAgIHJldHVybiAnRGVidWcnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuSW5mbzpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5XYXJuOlxuICAgICAgICByZXR1cm4gJ1dhcm4nO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRXJyb3I6XG4gICAgICAgIHJldHVybiAnRXJyb3InO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRmF0YWw6XG4gICAgICAgIHJldHVybiAnRmF0YWwnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKGxvZ2dpbmdMZXZlbFR5cGU6IExvZ2dpbmdMZXZlbFR5cGUpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5PZmY7XG4gICAgICBjYXNlICdUcmFjZSc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuVHJhY2U7XG4gICAgICBjYXNlICdEZWJ1Zyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRGVidWc7XG4gICAgICBjYXNlICdJbmZvJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICAgICAgY2FzZSAnV2Fybic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuV2FybjtcbiAgICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5FcnJvcjtcbiAgICAgIGNhc2UgJ0ZhdGFsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5GYXRhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nVGhyZXNob2xkIHtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB2YWx1ZSgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXRUaHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNUeXBlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc1R5cGU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljczogTWV0cmljc1R5cGUpIHtcbiAgICB0aGlzLl9tZXRyaWNzID0gbWV0cmljcztcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWV0cmljc1R5cGVbdGhpcy5fbWV0cmljc107XG4gIH1cblxuICBnZXRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlN0YWxsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkJ1ZmZlcmluZzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuTmV0d29ya1R5cGU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX21ldHJpY3MpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi9UZWxlbWV0cnlEZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGVsZW1ldHJ5TGV2ZWwge1xuICBPZmYgPSAxMDAsXG4gIEVzc2VudGlhbCA9IDEwLFxuICBBbGwgPSAtMVxufVxuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlMZXZlbFR5cGUgPSAnT2ZmJyB8ICdFc3NlbnRpYWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L21ldHJpY3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsID0gVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWV0cmljc1VybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIG1ldHJpY3NVcmwucGF0aG5hbWUgPSBtZXRyaWNzVXJsLnBhdGhuYW1lICsgJy9tZXRyaWNzJztcblxuICAgIHRoaXMuX3VybCA9IG1ldHJpY3NVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4vTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi4vc2RrL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vc2RrL0Vudmlyb25tZW50JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0ZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2VzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBNZXRyaWNzU2VydmljZX0gPSB7fTtcblxuICBzdGF0aWMgZ2V0TWV0cmljc1NlcnZpY2UodXJsOiBzdHJpbmcpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcykge1xuICAgICAgcmV0dXJuIG1ldHJpY3NTZXJ2aWNlcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG5ldyBNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwoU0RLLnRlbGVtZXRyeUxldmVsKTtcblxuICAgIHJldHVybiBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF0gPSBuZXcgTWV0cmljc1NlcnZpY2UobWV0cmljc0NvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc3RhdGljIHNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE9iamVjdC52YWx1ZXMoTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlcyk7XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzICYmIG1ldHJpY3NTZXJ2aWNlcy5sZW5ndGgpIHtcbiAgICAgIG1ldHJpY3NTZXJ2aWNlcy5mb3JFYWNoKG1ldHJpY3NTZXJ2aWNlID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgICAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSB0ZWxlbWV0cnlMZXZlbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFeHBvbmVudGlhbEJhY2tvZmYgZnJvbSAnLi4vdGltZS9FeHBvbmVudGlhbEJhY2tvZmYnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuY29uc3QgbWF4QnVmZmVyZWRSZWNvcmRzID0gMjA0ODtcblxuaW50ZXJmYWNlIElWYWx1ZSB7XG4gIHN0cmluZz86IHN0cmluZztcbiAgdWludDY0PzogbnVtYmVyO1xuICBmbG9hdD86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElNZXRyaWNSZWNvcmQge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgbWV0cmljOiBzdHJpbmc7XG4gIHZhbHVlOiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU6IElWYWx1ZTtcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpYyB7XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZTtcbiAgdmFsdWU/OiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU/OiBJVmFsdWU7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ01ldHJpY3NTZXJ2aWNlJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZmFpbHVyZUNvdW50ID0gMDtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgICB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYgPSBuZXcgRXhwb25lbnRpYWxCYWNrb2ZmKCk7XG4gIH1cblxuICBnZXQgbWV0cmljc0NvbmZpZ3VyYXRpb24oKTogTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobWV0cmljOiBJTWV0cmljKTogdm9pZCB7XG4gICAgY29uc3Qge3N0cmVhbUlkLCB2YWx1ZSwgcHJldmlvdXNWYWx1ZSwgcnVudGltZSwgcmVzb3VyY2UsIGtpbmR9ID0gbWV0cmljO1xuICAgIGNvbnN0IG1ldHJpY1R5cGUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWMubWV0cmljVHlwZSk7XG5cbiAgICBpZiAodGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID4gbWV0cmljVHlwZS5nZXRUZWxlbWV0cnlMZXZlbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpYzogbWV0cmljVHlwZS5nZXROYW1lKCksXG4gICAgICB2YWx1ZSxcbiAgICAgIHByZXZpb3VzVmFsdWUsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIHJ1bnRpbWUsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGtpbmRcbiAgICB9O1xuXG4gICAgdGhpcy5fbWV0cmljcy5wdXNoKG1ldHJpY1JlY29yZCk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXM6IEFycmF5PElNZXRyaWNSZWNvcmQ+KTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IG1ldHJpY3NNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgbWV0cmljc01lc3NhZ2VzID0gdGhpcy5fbWV0cmljcy5zbGljZSgwLCByZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHRoaXMuX21ldHJpY3MgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIGlmICh0aGlzLmlzUmVzcG9uc2VTdGF0dXNDb2RlUmV0cnlhYmxlKHJlc3BvbnNlKSkge1xuICAgICAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gbWF4QnVmZmVyZWRSZWNvcmRzKSB7XG4gICAgICAgICAgdGhpcy5fZmFpbHVyZUNvdW50Kys7XG5cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21ldHJpY3MgPSBbLi4ubWV0cmljc01lc3NhZ2VzLCAuLi50aGlzLl9tZXRyaWNzXTtcblxuICAgICAgICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgICAgICAgfSwgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmLmdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQodGhpcy5fZmFpbHVyZUNvdW50KSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RvbyBtYW55IGNhY2hlZCBtZXRyaWMgcmVjb3JkcyBbJXNdLCBkcm9wcGluZyBbJXNdIHJlY29yZHMnLCB0aGlzLl9tZXRyaWNzLmxlbmd0aCwgbWV0cmljc01lc3NhZ2VzLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fZmFpbHVyZUNvdW50ID0gMDtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1Jlc3BvbnNlU3RhdHVzQ29kZVJldHJ5YWJsZSh7c3RhdHVzfTogUmVzcG9uc2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL141XFxkezJ9JC8udGVzdChzdGF0dXMudG9TdHJpbmcoKSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gTWV0cmljc1R5cGUge1xuICBUaW1lVG9GaXJzdEZyYW1lLFxuICBDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICBTdGFsbGVkLFxuICBCdWZmZXJpbmcsXG4gIFNldHVwQ29tcGxldGVkLFxuICBTZXR1cEZhaWxlZCxcbiAgUm91bmRUcmlwVGltZSxcbiAgRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gIE5ldHdvcmtUeXBlLFxuICBSZXNvbHV0aW9uQ2hhbmdlZCxcbiAgQXBwbGljYXRpb25Gb3JlZ3JvdW5kLFxuICBBcHBsaWNhdGlvbkJhY2tncm91bmRcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWV0cmljc1R5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsKSB7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw6XG4gICAgICAgIHJldHVybiAnRXNzZW50aWFsJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsVHlwZTogVGVsZW1ldHJ5TGV2ZWxUeXBlKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnRXNzZW50aWFsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5RGVmYXVsdCB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTWV0cmljc107XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlSGFuZGxlciBmcm9tICcuL1Byb21pc2VIYW5kbGVyJztcblxuY2xhc3MgUHJvbWlzZSB7XG4gIF9zdGF0ZTogbnVtYmVyO1xuICBfaGFuZGxlZDogYm9vbGVhbjtcbiAgX3ZhbHVlOiBQcm9taXNlO1xuICBfZGVmZXJyZWRzOiBBcnJheTxQcm9taXNlSGFuZGxlcj47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICB0aGVuKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZDtcblxuICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSA9IDA7XG4gICAgdGhpcy5faGFuZGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RlZmVycmVkcyA9IFtdO1xuXG4gICAgdGhpcy5kb1Jlc29sdmUoY2FsbGJhY2spO1xuICB9XG5cbiAgZG9SZXNvbHZlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGxldCBkb25lID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY2FsbGJhY2soXG4gICAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICByZWFzb24gPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLnByb21pc2VSZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZXNvbHZlKG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBQcm9taXNlIFJlc29sdXRpb24gUHJvY2VkdXJlOiBodHRwczovL2dpdGh1Yi5jb20vUHJvbWlzZXMtYXBsdXMvUHJvbWlzZXMtc3BlYyN0aGUtUHJvbWlzZS1yZXNvbHV0aW9uLXByb2NlZHVyZVxuICAgICAgaWYgKG5ld1ZhbHVlID09PSBwcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0EgUHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdCBzZWxmLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUgJiYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG5ld1ZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICBjb25zdCB0aGVuID0gbmV3VmFsdWUudGhlbjtcblxuICAgICAgICBpZiAobmV3VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcHJvbWlzZS5fc3RhdGUgPSAzO1xuICAgICAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgcHJvbWlzZS5maW5hbGUoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHByb21pc2UuZG9SZXNvbHZlKGZ1bmN0aW9uKCk6IHZvaWQge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgICAgICAgdGhlbi5hcHBseShuZXdWYWx1ZSwgYXJndW1lbnRzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcm9taXNlLl9zdGF0ZSA9IDE7XG4gICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgcHJvbWlzZS5maW5hbGUoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBwcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlamVjdChuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXRlID0gMjtcbiAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuZmluYWxlKCk7XG4gIH1cblxuICBmaW5hbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAyICYmIHRoaXMuX2RlZmVycmVkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5faGFuZGxlZCkge1xuICAgICAgICAgIFByb21pc2UuX3VuaGFuZGxlZFJlamVjdGlvbih0aGlzLl92YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRoaXMuaGFuZGxlKHRoaXMuX2RlZmVycmVkc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVmZXJyZWRzID0gbnVsbDtcbiAgfVxuXG4gIGhhbmRsZShkZWZlcnJlZDogUHJvbWlzZUhhbmRsZXIpOiB2b2lkIHtcbiAgICBsZXQgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHdoaWxlIChwcm9taXNlLl9zdGF0ZSA9PT0gMykge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuX3ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMCkge1xuICAgICAgcHJvbWlzZS5fZGVmZXJyZWRzLnB1c2goZGVmZXJyZWQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvbWlzZS5faGFuZGxlZCA9IHRydWU7XG4gICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvbWlzZS5fc3RhdGUgPT09IDEgPyBkZWZlcnJlZC5vbkZ1bGZpbGxlZCA6IGRlZmVycmVkLm9uUmVqZWN0ZWQ7XG5cbiAgICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDEpIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhwcm9taXNlLl92YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhbGwoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoW10pO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVtYWluaW5nID0gYXJncy5sZW5ndGg7XG4gICAgICBjb25zdCBtYW5hZ2VSZXNwb25zZSA9IChpLCB2YWx1ZSk6IHZvaWQgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgICAgICBjb25zdCB0aGVuID0gdmFsdWUudGhlbjtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiBtYW5hZ2VSZXNwb25zZShpLCB2YWx1ZSksXG4gICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGFyZ3NbaV0gPSB2YWx1ZTtcblxuICAgICAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgcmVzb2x2ZShhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hbmFnZVJlc3BvbnNlKGksIGFyZ3NbaV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHJlc29sdmUodmFsdWUpOiBQcm9taXNlIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJlc29sdmUodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByZWplY3QodmFsdWUpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gcmVqZWN0KHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmFjZShhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5yYWNlIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGFycltpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIF9pbW1lZGlhdGUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICB9XG5cbiAgc3RhdGljIF91bmhhbmRsZWRSZWplY3Rpb24oZXJyb3IpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOicsIGVycm9yKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59XG5cblByb21pc2UucHJvdG90eXBlWydjYXRjaCddID0gZnVuY3Rpb24ob25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsndGhlbiddID0gZnVuY3Rpb24ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCgpID0+IG51bGwpO1xuXG4gIHRoaXMuaGFuZGxlKG5ldyBQcm9taXNlSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkpO1xuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXSA9IGZ1bmN0aW9uKGNhbGxiYWNrOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgdmFsdWUgPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IHZhbHVlKSxcbiAgICByZWFzb24gPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IGNvbnN0cnVjdG9yLnJlamVjdChyZWFzb24pKVxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvbWlzZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlIGZyb20gJy4vUHJvbWlzZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb21pc2VIYW5kbGVyIHtcbiAgb25GdWxmaWxsZWQ6IEZ1bmN0aW9uO1xuICBvblJlamVjdGVkOiBGdW5jdGlvbjtcbiAgcHJvbWlzZTogUHJvbWlzZTtcblxuICBjb25zdHJ1Y3RvcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IG51bGw7XG4gICAgdGhpcy5vblJlamVjdGVkID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicgPyBvblJlamVjdGVkIDogbnVsbDtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcblxuZXhwb3J0IGludGVyZmFjZSBJUGVlckNvbm5lY3Rpb25PZmZlckluaXQge1xuICBhdWRpb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHZpZGVvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgbG9jYWxPZmZlcjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uRmFjdG9yeTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5KCkpO1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGVkOiB7XG4gICAgZGlyZWN0aW9uPzogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb247XG4gICAgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PjtcbiAgfTtcblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNQcmVjYWNoaW5nRW5hYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHByZS1jYWNoZSBwZWVyIGNvbm5lY3Rpb24gb2ZmZXInLCBlKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpOiBQcm9taXNlPHsgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHwgdm9pZD47IGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gfT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IHtcbiAgICAgIGRpcmVjdGlvbjogJ3JlY3Zvbmx5JyxcbiAgICAgIHBlZXJDb25uZWN0aW9uOiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9KVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcihkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uID0gJ3JlY3Zvbmx5JywgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gZmFsc2UpOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4ge1xuICAgIGlmIChQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCAmJiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5kaXJlY3Rpb24gPT09IGRpcmVjdGlvbiAmJiAhZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLnBlZXJDb25uZWN0aW9uO1xuXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0gRmVhdHVyZUVuYWJsZW1lbnQuaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQgPyB7ZW5jb2RlZEluc2VydGFibGVTdHJlYW1zfSA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKVxuICAgICAgLnRoZW4oYXN5bmMgcGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNBZGRUcmFuc2NlaXZlcjtcbiAgICAgICAgbGV0IHZpZGVvVHJhbnNjZWl2ZXIsIGF1ZGlvVHJhbnNjZWl2ZXI7XG5cbiAgICAgICAgaWYgKHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIpIHtcbiAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ2F1ZGlvJywge2RpcmVjdGlvbn0pO1xuICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcigndmlkZW8nLCB7ZGlyZWN0aW9ufSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXVkaW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih1bmRlZmluZWQpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkaXJlY3Rpb24gPT09ICdyZWN2b25seScgPyB7XG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgIH0gOiB7fTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5QZWVyQ29ubmVjdGlvblNlcnZpY2UuaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIge1xuICBzdGF0aWMgdHJ1bmNhdGVJY2VTZXJ2ZXJzKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHVybHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAyOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XTtcblxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgdXJscy5wdXNoKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgdXJsczogdXJscyxcbiAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG5cbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSdGNDb25maWd1cmF0aW9uTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFNkcFBhcnNlciBmcm9tICcuL1NkcFBhcnNlcic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y01vbml0b3JTdGF0aXN0aWMge1xuICBba2luZDogc3RyaW5nXTogSVJ0Y1N0YXRpc3RpYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnQge1xuICByZXN1bHQ6ICgpID0+IElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtIGV4dGVuZHMgUlRDU3RhdHNSZXBvcnQge1xuICB0eXBlOiBzdHJpbmc7XG4gIG5hbWVzOiAoKSA9PiBzdHJpbmdbXTtcbiAgc3RhdDogKG5hbWUpID0+IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUnRjU3RhdGlzdGljIHtcbiAgc3NyYz86IHN0cmluZztcbiAgbWVkaWFUeXBlPzogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgYnl0ZXNSZWNlaXZlZD86IG51bWJlcjtcbiAgZnJhbWVzRGVjb2RlZD86IG51bWJlcjtcbiAgcGFja2V0c0xvc3Q/OiBudW1iZXI7XG4gIHBhY2tldHNSZWNlaXZlZD86IG51bWJlcjtcbiAgY29kZWM/OiBzdHJpbmc7XG4gIGZwcz86IG51bWJlcjtcbiAgcm91bmRUcmlwVGltZT86IG51bWJlcjtcbiAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wPzogbnVtYmVyO1xufVxuXG5jb25zdCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0ID0gMTAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29ubmVjdGlvbk1vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkVmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRBdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0Y1N0YXRpc3RpYzogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4gPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4oe30pO1xuICBwcml2YXRlIF9wZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBwcml2YXRlIF9pc01vbml0b3JSdW5uaW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfdXBkYXRlVGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF90cmFja3NUb01vbml0b3I6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSwgZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBwZWVyQ29ubmVjdGlvbjtcbiAgICB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lID0gZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICB0aGlzLl90cmFja3NUb01vbml0b3IgPSBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5tYXAodHJhY2sgPT4gdHJhY2sua2luZCkgfHwgW107XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkU0RQID0gbmV3IFNkcFBhcnNlcih0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjID0gcGFyc2VkU0RQLmF1ZGlvQ29kZWM7XG4gICAgICAgIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWMgPSBwYXJzZWRTRFAudmlkZW9Db2RlYztcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljKCk6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5fcnRjU3RhdGlzdGljO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc01vbml0b3JSdW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3VwZGF0ZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVUaW1lb3V0KTtcbiAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5nZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy51cGRhdGVTdGF0aXN0aWNMZWdhY3koKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNhZmFyaSAxMSBkb2VzbnQgaGF2ZSBraW5kIG9yIG1lZGlhVHlwZSBzbyB3ZSBuZWVkIHRvIHRha2UgaXQgZnJvbSB0aGUgaW5ib3VuZC1ydHAgb2JqZWN0IGlkXG4gICAgY29uc3QgZ2V0S2luZEZvclNhZmFyaTExID0gKGl0ZW0pOiBzdHJpbmcgPT4gaXRlbS5pZC5pbmNsdWRlcygnQXVkaW8nKSA/ICdhdWRpbycgOiBpdGVtLmlkLmluY2x1ZGVzKCdWaWRlbycpID8gJ3ZpZGVvJyA6ICcnO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhudWxsKVxuICAgICAgLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuXG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICAgICAgICBsZXQgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgc3RhdHMuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSkge1xuICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lICogMTAwMDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdpbmJvdW5kLXJ0cCcpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2luZCA9IHJlcG9ydC5raW5kIHx8IHJlcG9ydC5tZWRpYVR5cGUgfHwgZ2V0S2luZEZvclNhZmFyaTExKHJlcG9ydCk7XG4gICAgICAgICAgICAgIGxldCBjb2RlYyA9ICcnO1xuXG4gICAgICAgICAgICAgIHN0YXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHJlcG9ydC5jb2RlY0lkKSB7XG4gICAgICAgICAgICAgICAgICBjb2RlYyA9IGl0ZW0ubWltZVR5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoa2luZCAmJiB0aGlzLl90cmFja3NUb01vbml0b3IuaW5jbHVkZXMoa2luZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlcyA9IHJlcG9ydC5ieXRlc1JlY2VpdmVkIHx8IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNCeXRlc1JlY2VpdmVkID0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LmJ5dGVzUmVjZWl2ZWQgPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlc0RlbHRhID0gYnl0ZXMgLSBwcmV2aW91c0J5dGVzUmVjZWl2ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZURlbHRhID0gcmVwb3J0LnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy50aW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgY29uc3QgYml0cmF0ZSA9IGJ5dGVzRGVsdGEgJiYgdGltZURlbHRhID8gTWF0aC5mbG9vcig4ICogYnl0ZXNEZWx0YSAvXG4gICAgICAgICAgICAgICAgICB0aW1lRGVsdGEgKiAxMDAwKSA6IDA7XG5cbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdID0ge1xuICAgICAgICAgICAgICAgICAgc3NyYzogcmVwb3J0LnNzcmMsXG4gICAgICAgICAgICAgICAgICBtZWRpYVR5cGU6IGtpbmQsXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHJlcG9ydC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICBiaXRyYXRlLFxuICAgICAgICAgICAgICAgICAgYnl0ZXNSZWNlaXZlZDogcmVwb3J0LmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzTG9zdDogcmVwb3J0LnBhY2tldHNMb3N0LFxuICAgICAgICAgICAgICAgICAgcGFja2V0c1JlY2VpdmVkOiByZXBvcnQucGFja2V0c1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgY29kZWM6IGNvZGVjIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUoa2luZCksXG4gICAgICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChyZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuZnJhbWVzRGVjb2RlZDtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgZnBzID0gKHJlcG9ydC5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3Nba2luZF0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgICAgICAgICAxMDAwO1xuXG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcHMnXSA9IGZwcyA/IE1hdGgucm91bmQoZnBzICogMTAwKSAvIDEwMCA6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljTGVnYWN5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0c0xlZ2FjeSgpLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcbiAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgICAgc3RhdHMucmVzdWx0KCkuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICByZXBvcnQubmFtZXMoKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnZ29vZ1JUVCcpIHtcbiAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuc3RhdChuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ3NzcmMnKSB7XG4gICAgICAgICAgY29uc3QgbWVkaWFUeXBlID0gcmVwb3J0LnN0YXQoJ21lZGlhVHlwZScpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0gPSB7dGltZXN0YW1wOiBEYXRlLm5vdygpfTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3NzcmMnXSA9IHJlcG9ydC5zdGF0KCdzc3JjJykudG9TdHJpbmcoKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ21lZGlhVHlwZSddID0gbWVkaWFUeXBlO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnYnl0ZXNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ2J5dGVzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNMb3N0J10gPSByZXBvcnQuc3RhdCgncGFja2V0c0xvc3QnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnY29kZWMnXSA9IHJlcG9ydC5zdGF0KCdnb29nQ29kZWNOYW1lJykudG9TdHJpbmcoKSB8fCB0aGlzLmdldENvZGVjQnlUeXBlKG1lZGlhVHlwZSk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydyb3VuZFRyaXBUaW1lJ10gPSByb3VuZFRyaXBUaW1lO1xuXG4gICAgICAgICAgaWYgKG1lZGlhVHlwZSA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5zdGF0KCdmcmFtZXNEZWNvZGVkJyk7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZwcyddID0gKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAxMDAwIHx8IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvZGVjQnlUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjO1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNkcFBhcnNlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NkcDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNBdWRpb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNWaWRlb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzZHA6IHN0cmluZykge1xuICAgIHRoaXMuX3NkcCA9IHNkcDtcblxuICAgIGNvbnN0IHNkcFNwbGl0QnlMaW5lcyA9IHRoaXMuX3NkcC5zcGxpdCgvKFxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIGNvbnN0IHNkcFNwbGl0QnlUcmFja3MgPSB0aGlzLl9zZHAuc3BsaXQoLyg/Ol58W1xcclxcbl0pbT0vKTtcblxuICAgIHRoaXMuX2F1ZGlvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ2F1ZGlvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl92aWRlb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCd2aWRlbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ2F1ZGlvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gICAgdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ3ZpZGVvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gIH1cblxuICBnZXQgYXVkaW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hdWRpb0NvZGVjO1xuICB9XG5cbiAgZ2V0IHZpZGVvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmlkZW9Db2RlYztcbiAgfVxuXG4gIGdldCBpc0F1ZGlvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgZ2V0IGlzVmlkZW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzVHJhY2tCeVR5cGVFbmFibGVkKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeVRyYWNrczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBzZHBTZWN0aW9uRm9yVHlwZSA9IHNkcFNwbGl0QnlUcmFja3MuZmluZChzZHBUcmFjayA9PiBzZHBUcmFjay5zdGFydHNXaXRoKHR5cGUpKTtcblxuICAgIGlmICghc2RwU2VjdGlvbkZvclR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXNkcFNlY3Rpb25Gb3JUeXBlLmluY2x1ZGVzKGBhPWluYWN0aXZlYCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q29kZWModHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5TGluZXM6IHN0cmluZyBbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgdXNlZENvZGVjTGluZSA9IHNkcFNwbGl0QnlMaW5lcy5maW5kKHNkcExpbmUgPT4gc2RwTGluZS5pbmNsdWRlcyhgYT1ydHBtYXA6JHtzZHBTcGxpdEJ5TGluZXMuZmluZChpID0+IGkuaW5jbHVkZXMoYG09JHt0eXBlfWApKS5zcGxpdCgnICcpWzNdfWApKTtcbiAgICBjb25zdCB1c2VkQ29kZWMgPSB1c2VkQ29kZWNMaW5lLnNwbGl0KCcgJylbMV07XG4gICAgY29uc3QgY29kZWNOYW1lID0gdXNlZENvZGVjLnNwbGl0KCcvJylbMF07XG5cbiAgICByZXR1cm4gY29kZWNOYW1lO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uLCB7UGVlckNvbm5lY3Rpb25FdmVudHN9IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IHtJTGVnYWN5UlRDU3RhdHNSZXBvcnR9IGZyb20gJy4vUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb24gaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignVmFuaWxsYVBlZXJDb25uZWN0aW9uJyk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBSVENQZWVyQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC53ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIGNsYXNzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGdldCBuYXRpdmUoKTogUlRDUGVlckNvbm5lY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgY3VycmVudExvY2FsRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGNvbm5lY3Rpb25TdGF0ZSgpOiBSVENQZWVyQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IGljZUNvbm5lY3Rpb25TdGF0ZSgpOiBSVENJY2VDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFGZWF0dXJlRW5hYmxlbWVudC5hZGRUcmFuY2VpdmVyRGlzYWJsZWQgJiYgdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT2ZmZXIob3B0aW9ucz86IFJUQ09mZmVyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlT2ZmZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQW5zd2VyKG9wdGlvbnM/OiBSVENBbnN3ZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVBbnN3ZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBzZXRMb2NhbERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhhc0NyeXB0byA9IGRlc2NyaXB0aW9uLnNkcD8ubWF0Y2goL2E9Y3J5cHRvOi9pKTtcblxuICAgIGlmIChoYXNDcnlwdG8pIHtcbiAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdTRFAgYT1jcnlwdG8gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGdldFNlbmRlcnMoKTogUlRDUnRwU2VuZGVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTZW5kZXJzKCk7XG4gIH1cblxuICBnZXRSZWNlaXZlcnMoKTogUlRDUnRwUmVjZWl2ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFJlY2VpdmVycygpO1xuICB9XG5cbiAgZ2V0U3RhdHMoc2VsZWN0b3I/OiBNZWRpYVN0cmVhbVRyYWNrIHwgbnVsbCk6IFByb21pc2U8UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMoc2VsZWN0b3IpO1xuICB9XG5cbiAgZ2V0U3RhdHNMZWdhY3koKTogUHJvbWlzZTxJTGVnYWN5UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAvLyBJZ25vcmVkIGR1ZSB0byB0eXBlc2NyaXB0IG5vdCBoYXZpbmcgbGVnYWN5ICdnZXRTdGF0cycgbWV0aG9kIHR5cGUgZGVmaW5pdGlvblxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlICdnZXRTdGF0cycgbWV0aG9kIGZvclxuICAgICAgLy8gQ2hyb21lQDw9IDY2IGRldGFpbGVkIGhlcmU6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTYyNzgxNlxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhyZXNvbHZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICByZW1vdmVFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkVHJhbnNjZWl2ZXIobmFtZTogc3RyaW5nLCBvcHRpb25zOiBSVENSdHBUcmFuc2NlaXZlckluaXQpOiBSVENSdHBUcmFuc2NlaXZlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKG5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkU3RyZWFtKG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IHZvaWQge1xuICAgIG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhY2sodHJhY2spO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q29uZmlndXJhdGlvbigpOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpO1xuICB9XG5cbiAgc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHNldCBvbnRyYWNrKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbnRyYWNrKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrO1xuICB9XG5cbiAgc2V0IG9uaWNlY2FuZGlkYXRlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2VjYW5kaWRhdGUoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlO1xuICB9XG5cbiAgc2V0IG9uY29ubmVjdGlvbnN0YXRlY2hhbmdlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25jb25uZWN0aW9uc3RhdGVjaGFuZ2UoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgc2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmFuaWxsYVBlZXJDb25uZWN0aW9uOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGZyb20gJy4vVmFuaWxsYVBlZXJDb25uZWN0aW9uJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbkZhY3Rvcnkge1xuICBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi9TdWJqZWN0JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhZE9ubHlTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3ViamVjdDogU3ViamVjdDxUPjtcblxuICBjb25zdHJ1Y3RvcihzdWJqZWN0OiBTdWJqZWN0PFQ+KSB7XG4gICAgdGhpcy5fc3ViamVjdCA9IHN1YmplY3Q7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3QudmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6IChUKSA9PiB2b2lkKTogSURpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZShsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJQ29tcGFyYWJsZSBmcm9tICcuLi9sYW5nL0lDb21wYXJhYmxlJztcblxuY2xhc3MgRGlzcG9zYWJsZUxpc3RlbmVyPFQ+IGV4dGVuZHMgRGlzcG9zYWJsZSB7XG4gIGNvbnN0cnVjdG9yKGxpc3RlbmVyczogQXJyYXk8VD4sIGxpc3RlbmVyOiBUKSB7XG4gICAgc3VwZXIoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuXG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcnM6IEFycmF5PChUKSA9PiB2b2lkPjtcbiAgcHJpdmF0ZSBfdmFsdWU6IFQ7XG5cbiAgY29uc3RydWN0b3IodmFsdWU6IFQpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbXTtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBUKSB7XG4gICAgbGV0IGNoYW5nZWQgPSB0aGlzLl92YWx1ZSAhPT0gdmFsdWU7XG5cbiAgICBpZiAoY2hhbmdlZCAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgY29tcGFyYWJsZSA9IHZhbHVlIGFzIHVua25vd24gYXMgSUNvbXBhcmFibGU8VD47XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcGFyYWJsZS5lcXVhbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2hhbmdlZCA9ICFjb21wYXJhYmxlLmVxdWFscyh0aGlzLl92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgIHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IHtcbiAgICAgIGxpc3RlbmVyKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6IChUKSA9PiB2b2lkKTogSURpc3Bvc2FibGUge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcblxuICAgIGxpc3RlbmVyKHRoaXMuX3ZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgRGlzcG9zYWJsZUxpc3RlbmVyPChUKSA9PiB2b2lkPih0aGlzLl9saXN0ZW5lcnMsIGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIHN0YXRpYyBnZXRFbnZpcm9ubWVudEZyb21VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgICByZXR1cm4gYmFzZVVSTC5vcmlnaW47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IFN0cmluZ3MgZnJvbSAnLi4vbGFuZy9TdHJpbmdzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4uL2xvZ2dlci9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciBmcm9tICcuLi9kb20vQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3InO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi4vcnRjL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi9UZWxlbWV0cnlVcmwnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4vRW52aXJvbm1lbnQnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vc3RyZWFtaW5nL1N0cmVhbVR5cGVzJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5cbmNvbnN0IHBhZ2VMb2FkVGltZSA9IHdpbmRvd1snX19waGVuaXhQYWdlTG9hZFRpbWUnXSB8fCB3aW5kb3dbJ19fcGFnZUxvYWRUaW1lJ10gfHwgRGF0ZS5ub3coKTtcblxuaW50ZXJmYWNlIElJbml0T3B0aW9ucyB7XG4gIGRpc2NvdmVyeVVyaT86IHN0cmluZztcbiAgcGVlckNvbm5lY3Rpb25GYWN0b3J5PzogSVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgdGVsZW1ldHJ5TGV2ZWw/OiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIGxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbFR5cGU7XG4gIGNvbnNvbGVMb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtPzogYm9vbGVhbjtcbiAgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU/OiBib29sZWFuO1xuICB3ZWJQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkO1xuICBzaGFrYVBsYXllckxvYWRlcj86IChwbGF5ZXI6IFNoYWthVHlwZSkgPT4gdm9pZDtcbiAgaGxzSnNMb2FkZXI/OiAocGxheWVyOiBIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTREsge1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3dlYlBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYVBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9obHNKc0xvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgc3RhdGljIF9lbnZpcm9ubWVudDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlVcmw6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgc3RhdGljIF9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gODtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUxldmVsOiBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPiA9IG5ldyBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPihUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCk7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoQnVpbGRGZWF0dXJlcy5zZW5kTG9jYWxDYW5kaWRhdGVzKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3RlbmFuY3k6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfY2xpZW50U2Vzc2lvbklkOiBzdHJpbmcgPSBTdHJpbmdzLnJhbmRvbSgzMik7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2FkZWRUaW1lc3RhbXA6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NESycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaW5pdGlhbGl6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seUluaXRpYWxpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KFNESy5faW5pdGlhbGl6ZWQpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlEaXNjb3ZlcnlVcmk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KERpc2NvdmVyeVVyaS51cmkpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4oUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnBlZXJDb25uZWN0aW9uRmFjdG9yeSk7XG5cbiAgc3RhdGljIGdldCBwYWdlTG9hZFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IFN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZW5hbmN5KCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGNsaWVudFNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTREsuX2NsaWVudFNlc3Npb25JZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9hZGVkVGltZXN0YW1wKCk6IERhdGUge1xuICAgIHJldHVybiBTREsuX2xvYWRlZFRpbWVzdGFtcDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaW5pdGlhbGl6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seUluaXRpYWxpemVkO1xuICB9XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlVcmkoKTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5RGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGdldCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljUmV0cnlPbkZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCBmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0O1xuICB9XG5cbiAgc3RhdGljIGdldCBza2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2ViUGxheWVyTG9hZGVyKCk6IChXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2ViUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYVBsYXllckxvYWRlcigpOiAoU2hha2FUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGhsc0pzTG9hZGVyKCk6IChIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5faGxzSnNMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1ldHJpY3NTZXJ2aWNlKCk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICByZXR1cm4gU0RLLl9tZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5VXJsKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbGVtZXRyeVVybDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzO1xuICB9XG5cbiAgc3RhdGljIHNldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKHJldHJpZXNBbW91bnQ6IG51bWJlcikge1xuICAgIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSByZXRyaWVzQW1vdW50O1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSh0aGlzLl9sb2dnZXIudGhyZXNob2xkLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyRGV0ZWN0b3IoKTogQnJvd3NlckRldGVjdG9yIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gTG9nZ2VyRmFjdG9yeS50ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuXG4gICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ucGFnZUxvYWRUaW1lID0gU0RLLnBhZ2VMb2FkVGltZTtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJyk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKFRlbGVtZXRyeUxldmVsW3ZhbHVlXSk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZFRlbGVtZXRyeUxldmVsID0gU0RLLl90ZWxlbWV0cnlMZXZlbC5zdWJzY3JpYmUodGVsZW1ldHJ5TGV2ZWwgPT4ge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZXRyeSBvbiBmYWlsdXJlIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1mb3JjZS1nYXJiYWdlLWNvbGxlY3Rpb24tb24tcmVzdGFydCcpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0KTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnU2tpcCBnYXJiYWdlIGNvbGxlY3Rpb24gb24gbW9iaWxlIGRldmljZXMgb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIFNESy5kaXNjb3ZlcnlVcmkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy50ZWxlbWV0cnlVcmwudmFsdWUgPSBTREsuZ2V0VGVsZW1ldHJ5VXJsKHZhbHVlKTtcbiAgICAgIFNESy5fZW52aXJvbm1lbnQudmFsdWUgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodmFsdWUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2hhbm5lbFRva2VuID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWNoYW5uZWwtdG9rZW4nKTtcblxuICAgIGlmIChjaGFubmVsVG9rZW4pIHtcbiAgICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4oY2hhbm5lbFRva2VuKTtcblxuICAgICAgU0RLLl90ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3k7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXJpVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtdXJpJyk7XG5cbiAgICBpZiAodXJpVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmlWYWx1ZTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVVJJVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtYmFzZS11cmknKTtcblxuICAgIGlmIChiYXNlVVJJVmFsdWUpIHtcbiAgICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwoYmFzZVVSSVZhbHVlKTtcblxuICAgICAgdXJpLnBhdGhuYW1lID0gJy9wY2FzdC9lbmRQb2ludHMnO1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IHVyaS50b1N0cmluZygpO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtYmFzZS11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGluaXQob3B0aW9ucz86IElJbml0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbmV3IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpc2NvdmVyeVVyaSkge1xuICAgICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gb3B0aW9ucy5kaXNjb3ZlcnlVcmk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeSkge1xuICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlID0gb3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRlbGVtZXRyeUxldmVsICYmIFRlbGVtZXRyeUxldmVsW29wdGlvbnMudGVsZW1ldHJ5TGV2ZWxdKSB7XG4gICAgICAgIFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5sb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci50aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmxvZ2dpbmdMZXZlbCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICYmXG4gICAgICAgIExvZ2dpbmdMZXZlbFtvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIGNvbnN0IGNvbnNvbGVBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIENvbnNvbGVBcHBlbmRlcik7XG5cbiAgICAgICAgaWYgKGNvbnNvbGVBcHBlbmRlcikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKGNvbnNvbGVBcHBlbmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICE9PSAnT2ZmJykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3dlYlBsYXllckxvYWRlciA9IG9wdGlvbnMud2ViUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9zaGFrYVBsYXllckxvYWRlciA9IG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX2hsc0pzTG9hZGVyID0gb3B0aW9ucy5obHNKc0xvYWRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5kaXNwb3NlKCk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gIFNESy5kaXNwb3NlKCk7XG59KTtcblxuU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuaW5pdCgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlVcmwge1xuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYmFzZVVSTC5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgICBzd2l0Y2ggKGJhc2VVUkwucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnd3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHA6JztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3c3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHBzOic7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAyIHx8XG4gICAgICAgICAgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMyAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAyXS5sZW5ndGggPD0gMiAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5sZW5ndGggPD0gMylcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50cy51bnNoaWZ0KCd0ZWxlbWV0cnknKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnc3RnLScpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctc3RnJykgfHwgc2VnbWVudHNbMF0uaW5jbHVkZXMoJy1zdGctJykgfHwgc2VnbWVudHNbMF0gPT09ICdzdGcnKSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeS1zdGcnO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdsb2NhbCcpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctbG9jYWwnKSkge1xuICAgICAgICAvLyBMZWF2ZSBVUkwgdW5jaGFuZ2VkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnknO1xuICAgICAgfVxuXG4gICAgICBiYXNlVVJMLmhvc3RuYW1lID0gc2VnbWVudHMuam9pbignLicpO1xuXG4gICAgICByZXR1cm4gYCR7YmFzZVVSTC5vcmlnaW59L3RlbGVtZXRyeWA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0cmF0ZVN0YXRlVHlwZSA9ICdLZWVwJyB8ICdSZXNldCc7XG5leHBvcnQgdHlwZSBCaXRyYXRlTW9kZVR5cGUgPSAnTm9ybWFsJyB8ICdGb3JjZScgfCAnUmVzZXQnO1xuXG5leHBvcnQgZW51bSBCaXRyYXRlU3RhdGUge1xuICBLZWVwLFxuICBSZXNldFxufVxuXG5leHBvcnQgZW51bSBCaXRyYXRlTW9kZSB7XG4gIE5vcm1hbCxcbiAgRm9yY2UsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlIHtcbiAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IG51bWJlcjtcbiAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVUeXBlO1xuICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVUeXBlO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi8uLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCBUb2tlbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9Ub2tlbkNvbnRleHQnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0LCB7Q2hhbm5lbENvbnRleHRPcHRpb25zfSBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBFbmNvZGVkU3RyZWFtU2luaywge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuaW1wb3J0IFN0cmVhbVRyYWNrVHJhbnNmb3JtLCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCwge1N0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zfSBmcm9tICcuLi9jb250ZXh0L1N0cmVhbVRyYW5zZm9ybUNvbnRleHQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvU3RhdGVDb250ZXh0JztcbmltcG9ydCBTdHJlYW1GYWN0b3J5IGZyb20gJy4uL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5JztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcblxuY29uc3QgZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uID0gJ2NsaWVudDp0ZXJtaW5hdGlvbic7XG5jb25zdCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDA7XG5jb25zdCBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMgPSAxNTAwMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+O1xuICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT47XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWwgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaGFubmVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuQ29udGV4dDogVG9rZW5Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0OiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZUNvbnRleHQ6IFN0YXRlQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlWaWRlb0VsZW1lbnQ6IFJlYWRPbmx5U3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbjogUmVhZE9ubHlTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGF0ZTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b011dGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b1BhdXNlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuRXhwaXJpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRob3JpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5T25saW5lOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TG9hZGluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBsYXlpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGFuZGJ5OiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RvcHBlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRhcmdldExhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5Qml0cmF0ZUxpbWl0OiBSZWFkT25seVN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UmVzb2x1dGlvbjogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RmFpbHVyZUNvdW50OiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlFbmRQb2ludDogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSdGNTdGF0aXN0aWNzOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU1lZGlhU3RyZWFtOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuXG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvblRlbGVtZXRyeTogU2Vzc2lvblRlbGVtZXRyeTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIG9wdGlvbnM/OiBDaGFubmVsT3B0aW9ucykge1xuICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IGNoYW5uZWxDb250ZXh0T3B0aW9uczogQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge3RhcmdldExhZzogb3B0aW9ucz8udGFyZ2V0TGFnfTtcbiAgICBjb25zdCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9uczogU3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMgPSB7XG4gICAgICBoYXNJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJyksXG4gICAgICBoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2VuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zJyksXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zPy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogb3B0aW9ucz8uYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IG9wdGlvbnM/LmVuY29kZWRWaWRlb1N0cmVhbVNpbmssXG4gICAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBvcHRpb25zPy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rXG4gICAgfTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dCA9IG5ldyBUb2tlbkNvbnRleHQodG9rZW4pO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gbmV3IENoYW5uZWxDb250ZXh0KGNoYW5uZWxDb250ZXh0T3B0aW9ucyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gbmV3IFBlZXJDb25uZWN0aW9uQ29udGV4dCgpO1xuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQgPSBuZXcgU3RyZWFtVHJhbnNmb3JtQ29udGV4dChzdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyk7XG4gICAgdGhpcy5fc3RhdGVDb250ZXh0ID0gbmV3IFN0YXRlQ29udGV4dCgpO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVZpZGVvRWxlbWVudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50KTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhdGUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkKTtcbiAgICB0aGlzLl9yZWFkT25seU9ubGluZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lKTtcbiAgICB0aGlzLl9yZWFkT25seUxvYWRpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGxheWluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGFuZGJ5ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5KTtcbiAgICB0aGlzLl9yZWFkT25seVN0b3BwZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQubGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQpO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPih0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludCk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbSk7XG4gICAgdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4odGhpcy5fY2hhbm5lbENvbnRleHQucnRjU3RhdGlzdGljcyk7XG4gICAgdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbSk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5ID0gbmV3IFNlc3Npb25UZWxlbWV0cnkoU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fc2Vzc2lvblRlbGVtZXRyeSk7XG4gICAgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC5zdWJzY3JpYmUodmlkZW9FbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0uc3Vic2NyaWJlKHN0cmVhbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5kaXNwb3NlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMudmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5ID0gbmV3IFZpZGVvVGVsZW1ldHJ5KHRoaXMuc3RyZWFtSWQsIFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHRoaXMudmlkZW9FbGVtZW50KTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodGhpcy52aWRlb0VsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuU3RvcHBlZCkge1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMucmVzdGFydEFmdGVyU3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB9LCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24uc3Vic2NyaWJlKHJlc29sdXRpb24gPT4ge1xuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5vblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMocmVzb2x1dGlvbi50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQuc3Vic2NyaWJlKGJpdHJhdGVMaW1pdCA9PiB7XG4gICAgICAgIGlmIChiaXRyYXRlTGltaXQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGJpdHJhdGVMaW1pdCxcbiAgICAgICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICAgICAgQml0cmF0ZU1vZGUuTm9ybWFsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1PblVubW91bnQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtT25Vbm1vdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgJ2NsaWVudDp0ZXJtaW5hdGlvbi1vbi13aW5kb3ctdW5sb2FkJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuICAgIH0pKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCB2aWRlb0VsZW1lbnQoKTogSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHNldCB2aWRlb0VsZW1lbnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHV0aW9uLnZhbHVlLndpZHRoICE9PSB2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCB8fCB0aGlzLnJlc29sdXRpb24udmFsdWUuaGVpZ2h0ICE9PSB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IG5ldyBEaW1lbnNpb24odmlkZW9FbGVtZW50LnZpZGVvV2lkdGgsIHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBEaW1lbnNpb24uZW1wdHk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRva2VuKCk6IEVuY29kZWRFZGdlVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gIH1cblxuICBzZXQgdG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUgPSB0b2tlbjtcbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG5cbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlID0gZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJyk7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgPSBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcycpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHBlZXJDb25uZWN0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhdGU7XG4gIH1cblxuICBnZXQgYXV0b011dGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkO1xuICB9XG5cbiAgZ2V0IGF1dG9QYXVzZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkO1xuICB9XG5cbiAgZ2V0IHRva2VuRXhwaXJpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nO1xuICB9XG5cbiAgZ2V0IGF1dGhvcml6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkO1xuICB9XG5cbiAgZ2V0IG9ubGluZSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU9ubGluZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TG9hZGluZztcbiAgfVxuXG4gIGdldCBwbGF5aW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGxheWluZztcbiAgfVxuXG4gIGdldCBzdGFuZGJ5KCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhbmRieTtcbiAgfVxuXG4gIGdldCBzdG9wcGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RvcHBlZDtcbiAgfVxuXG4gIGdldCB0YXJnZXRMYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnO1xuICB9XG5cbiAgZ2V0IGxhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMYWc7XG4gIH1cblxuICBnZXQgYml0cmF0ZUxpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHJlc29sdXRpb24oKTogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJlc29sdXRpb247XG4gIH1cblxuICBnZXQgZmFpbHVyZUNvdW50KCk6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQ7XG4gIH1cblxuICBnZXQgZW5kUG9pbnQoKTogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQ7XG4gIH1cblxuICBnZXQgc3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RyZWFtO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkO1xuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpY3MoKTogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcztcbiAgfVxuXG4gIGdldCBtZWRpYVN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHNldEJpdHJhdGVMaW1pdChiaXRyYXRlTGltaXQ6IEJpdHNQZXJTZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSBiaXRyYXRlTGltaXQ7XG4gIH1cblxuICBjbGVhckJpdHJhdGVMaW1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kID0gMDtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgQml0cmF0ZU1vZGUuUmVzZXRcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVUYXJnZXRMYWcobGFnOiBNaWxsaXNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZy52YWx1ZSA9IGxhZztcbiAgfVxuXG4gIGFzeW5jIHN0b3AocmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy5zdWJzY3JpYmUoaXNTdGFydGluZyA9PiB7XG4gICAgICAgIGlmICghaXNTdGFydGluZykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0b3AocmVhc29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKHJlYXNvbik7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICB9XG5cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBtdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdW5tdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9wKCdjbGllbnQ6Y2hhbm5lbC1kaXNwb3NlJykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXJpKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogVVJMIHtcbiAgICBjb25zdCB1cmwgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS51cmk7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZGlzY292ZXIgVVJJIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHN0YXJ0Jyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzU3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuOiBFbmNvZGVkRWRnZVRva2VuID0gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGhQYXJzZXIuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBTdHJlYW1UcmFja1RyYW5zZm9ybS52YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0oJ3ZpZGVvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gU3RyZWFtVHJhY2tUcmFuc2Zvcm0udmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKCdhdWRpbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IEVuY29kZWRTdHJlYW1TaW5rLnZhbGlkYXRlRW5jb2RlZFN0cmVhbVNpbmsoJ3ZpZGVvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gRW5jb2RlZFN0cmVhbVNpbmsudmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luaygnYXVkaW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmspO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlICYmIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0JvdGggaW5zZXJ0YWJsZS1zdHJlYW1zIGFuZCBlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcyBhcmUgZW5hYmxlZCwgb25seSB1c2Ugb25lIG9yIHRoZSBvdGhlcicpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID09PSAnZnVuY3Rpb24nO1xuICAgIGNvbnN0IGhhc0VuY29kZWRTdHJlYW1TaW5rID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrICYmIGhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0JvdGggTWVkaWEgU3RyZWFtIFRyYWNrIHRyYW5zZm9ybSBjYWxsYmFjayBhbmQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIHNpbmsgZnVuY3Rpb24gZm91bmQsIG9ubHkgdXNlIG9uZSB0eXBlIG9yIHRoZSBvdGhlcicpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgTWVkaWEgU3RyZWFtIFRyYWNrIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gY2FsbGJhY2sgZnVuY3Rpb24gaXMgbWlzc2luZzsgaG93ZXZlciwgaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIGVuYWJsZWQnKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKGBDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gY2FsbGJhY2sgZnVuY3Rpb24gZm91bmQ7IGhvd2V2ZXIsIGluc2VydGFibGUtc3RyZWFtcyBpcyBub3QgZW5hYmxlZGApO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICBpZiAoIShGZWF0dXJlRW5hYmxlbWVudC5pc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCB8fCBGZWF0dXJlRW5hYmxlbWVudC5pc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCkpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gc2luayBmdW5jdGlvbiBpcyBtaXNzaW5nOyBob3dldmVyLCBlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcyBpcyBlbmFibGVkJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgdHJhbnNmb3JtIHNpbmsgZnVuY3Rpb24gZm91bmQ7IGhvd2V2ZXIsIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIG5vdCBlbmFibGVkYCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBDaGFubmVsU3RhdGUuRXJyb3IgfHwgc3RhdGUgPT09IENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nKSB7XG4gICAgICAgICAgRGlzY292ZXJ5LmNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtUGxheWVyID0gU3RyZWFtRmFjdG9yeS5jcmVhdGUodG9rZW4sIHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayk7XG5cbiAgICBpZiAoIXN0cmVhbVBsYXllcikge1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1QbGF5ZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAsXG4gICAgICB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50LmJpbmQodGhpcykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OmNsZWFudXAtYWZ0ZXItZmFpbGVkLXNldHVwJyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBjaGFubmVsJywgZSk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcgfHwgIVNESy5hdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRoaXMuZ2V0UmV0cnlJbnRlcnZhbCgpKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzdGFydEFmdGVyU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGxheSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZWRpYVN0cmVhbSA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghbWVkaWFTdHJlYW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXRyeUludGVydmFsKCk6IG51bWJlciB7XG4gICAgc3dpdGNoICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICAgIHJldHVybiBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHM7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5DbGllbnRTdGFydEVycm9yOlxuICAgICAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGF0dGVtcHQgZmFzdCwgYWZ0ZXIgdGhhdCBleHBvbmVudGlhbCB3aXRoIGJhY2tvZmYgaW50ZXJ2YWxcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1GYWlsdXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JldHJ5IHN0YXJ0IHdpdGggaW5pdGlhbCBzdGF0ZSBbJXNdIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSwgQ2hhbm5lbFN0YXRlW3RoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHVuYXV0aG9yaXplZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyByZXN0cmljdGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwbGF5aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGF1c2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIGludm9rZSBwbGF5KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gY29uZmlndXJhdGlvbiBlcnJvciwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbiA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZTtcblxuICAgIGlmIChwZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUuZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgcmVhc29uKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEZXN0cm95ZWQgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbScsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQgJiYgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG4gICAgfVxuXG4gICAgY29uc3QgcGxheVByb21pc2UgPSB2aWRlb0VsZW1lbnQucGxheSgpO1xuXG4gICAgaWYgKHBsYXlQcm9taXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsYXlQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICBjb25zdCBoYXNBdWRpb1RyYWNrID0gISFtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5maWx0ZXIodHJhY2sgPT4ge1xuICAgICAgICByZXR1cm4gdHJhY2sua2luZCA9PT0gJ2F1ZGlvJztcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgPSAhU0RLLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuXG4gICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgfHwgdmlkZW9FbGVtZW50Lm11dGVkIHx8ICFoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQYXVzZWQgdmlkZW8gYWZ0ZXIgcGxheSBmYWlsZWQuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbnVsbDtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IG11dGVkIHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdmlkZW9FbGVtZW50LnBsYXkoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGxheWVkIHZpZGVvIGFmdGVyIGF1dG8gbXV0aW5nLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQgdG8gdW5tdXRlLicsIHRoaXMuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBDaGFubmVsU3RhdGUge1xuICBPZmZsaW5lID0gMSxcbiAgU3RhcnRpbmcsXG4gIFBhdXNlZCxcbiAgUGxheWluZyxcbiAgUmVjb3ZlcmluZyxcbiAgUmVjb25uZWN0aW5nLFxuICBTdGFuZEJ5LFxuICBTdG9wcGVkLFxuICBVbmF1dGhvcml6ZWQsXG4gIEdlb1Jlc3RyaWN0ZWQsXG4gIEdlb0Jsb2NrZWQsXG4gIFVuc3VwcG9ydGVkRmVhdHVyZSxcbiAgQ29uZmlndXJhdGlvbkVycm9yLFxuICBUcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3IsXG4gIENvbm5lY3Rpb25FcnJvcixcbiAgQ2xpZW50U3RhcnRFcnJvcixcbiAgRXJyb3Jcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbFN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IENoYW5uZWwsIHtDaGFubmVsT3B0aW9uc30gZnJvbSAnLi9DaGFubmVsJztcbmltcG9ydCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCB7TWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxudHlwZSBDcmVhdGVDaGFubmVsT3B0aW9ucyA9IHtcbiAgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbjtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPjtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT47XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbHMge1xuICBzdGF0aWMgY3JlYXRlQ2hhbm5lbChvcHRpb25zOiBDcmVhdGVDaGFubmVsT3B0aW9ucyk6IENoYW5uZWwge1xuICAgIGlmICghU0RLLmluaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5uZWxPcHRpb25zOiBDaGFubmVsT3B0aW9ucyA9IHtcbiAgICAgIHRhcmdldExhZzogb3B0aW9ucy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRWaWRlb1N0cmVhbVNpbmssXG4gICAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBDaGFubmVsKG9wdGlvbnMudmlkZW9FbGVtZW50LCBvcHRpb25zLnRva2VuLCBjaGFubmVsT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbHMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtLCBTdWJzY3JpYmVTdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxDb250ZXh0T3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgc3RhdGU6IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgYXV0b011dGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRvUGF1c2VkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHBsYXlpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRhcmdldExhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGxhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGJpdHJhdGVMaW1pdDogU3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcmVzb2x1dGlvbjogU3ViamVjdDxEaW1lbnNpb24+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQ+O1xuICBzdHJlYW06IFN1YmplY3Q8SVN0cmVhbT47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENoYW5uZWxDb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucmVuZGVyZXJEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbEluaXRpYWxpemF0aW9uID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IG5ldyBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RhdGUgPSBuZXcgU3ViamVjdDxDaGFubmVsU3RhdGU+KENoYW5uZWxTdGF0ZS5TdGFydGluZyk7XG4gICAgdGhpcy5hdXRvTXV0ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRvUGF1c2VkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucGxheWluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMudGFyZ2V0TGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KG9wdGlvbnM/LnRhcmdldExhZyA/PyBkZWZhdWx0VGFyZ2V0TGFnKTtcbiAgICB0aGlzLmxhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPigwKTtcbiAgICB0aGlzLmJpdHJhdGVMaW1pdCA9IG5ldyBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+KDApO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG5ldyBTdWJqZWN0PERpbWVuc2lvbj4oRGltZW5zaW9uLmVtcHR5KTtcbiAgICB0aGlzLmZhaWx1cmVDb3VudCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgdGhpcy5lbmRQb2ludCA9IG5ldyBTdWJqZWN0PEVuZFBvaW50PihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPihudWxsKTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5zdHJlYW1JZDtcbiAgfVxuXG4gIGFwcGx5U3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogdm9pZCB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICB0aGlzLmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC52YWx1ZSAmJiB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICB9XG4gIH1cblxuICBtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFuZEJ5O1xuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDtcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmb3JiaWRkZW4tdGFnJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICBjYXNlICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uQ29udGV4dCB7XG4gIG1lZGlhU3RyZWFtOiBTdWJqZWN0PE1lZGlhU3RyZWFtPjtcbiAgcGVlckNvbm5lY3Rpb246IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubWVkaWFTdHJlYW0gPSBuZXcgU3ViamVjdDxNZWRpYVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvbiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRlQ29udGV4dCB7XG4gIGlzU3RhcnRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGlzRGlzcG9zZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pc1N0YXJ0aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuaXNEaXNwb3NlZCA9IGZhbHNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuXG5leHBvcnQgdHlwZSBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyA9IHtcbiAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IGJvb2xlYW47XG4gIGhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtczogYm9vbGVhbjtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPiB8IHVuZGVmaW5lZDtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbVRyYW5zZm9ybUNvbnRleHQge1xuICByZWFkb25seSBoYXNJbnNlcnRhYmxlU3RyZWFtczogU3ViamVjdDxib29sZWFuPjtcbiAgcmVhZG9ubHkgaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zOiBTdWJqZWN0PGJvb2xlYW4+O1xuICByZWFkb25seSB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+IHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+IHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zKSB7XG4gICAgdGhpcy5oYXNJbnNlcnRhYmxlU3RyZWFtcyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KG9wdGlvbnMuaGFzSW5zZXJ0YWJsZVN0cmVhbXMpO1xuICAgIHRoaXMuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4ob3B0aW9ucy5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpO1xuICAgIHRoaXMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9IG9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaztcbiAgICB0aGlzLmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPSBvcHRpb25zLmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s7XG4gICAgdGhpcy5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rID0gb3B0aW9ucy5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rO1xuICAgIHRoaXMuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayA9IG9wdGlvbnMuZW5jb2RlZEF1ZGlvU3RyZWFtU2luaztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbkNvbnRleHQge1xuICB0b2tlbjogU3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPjtcbiAgdG9rZW5FeHBpcmluZzogU3ViamVjdDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3Rvcih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMudG9rZW4gPSBuZXcgU3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPih0b2tlbik7XG4gICAgdGhpcy50b2tlbkV4cGlyaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHREaXNjb3ZlcnlVcmkgPSAnaHR0cHM6Ly9wY2FzdC5waGVuaXhydHMuY29tL3BjYXN0L2VuZFBvaW50cyc7XG5cbmV4cG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlTW9kZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVNb2RlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUpOiBCaXRyYXRlTW9kZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZU1vZGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuTm9ybWFsOlxuICAgICAgICByZXR1cm4gJ05vcm1hbCc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLkZvcmNlOlxuICAgICAgICByZXR1cm4gJ0ZvcmNlJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZU1vZGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlU3RhdGUsIEJpdHJhdGVTdGF0ZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVTdGF0ZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSk6IEJpdHJhdGVTdGF0ZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZVN0YXRlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5LZWVwOlxuICAgICAgICByZXR1cm4gJ0tlZXAnO1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZVN0YXRlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBEaXNjb3ZlcnlTZXJ2aWNlIGZyb20gJy4vRGlzY292ZXJ5U2VydmljZSc7XG5cbmNvbnN0IGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwgPSA2MDAwMDtcblxuaW50ZXJmYWNlIElQZXJVUklFbmRwb2ludCB7IFt4OiBzdHJpbmddOiBQcm9taXNlPEVuZFBvaW50PiB9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZTogSVBlclVSSUVuZHBvaW50ID0ge307XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5KCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmk6IFVSTCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIHJldHVybiBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuXG4gICAgY29uc3QgZGlzY292ZXJ5U2VydmljZSA9IG5ldyBEaXNjb3ZlcnlTZXJ2aWNlKHVyaSk7XG4gICAgY29uc3QgY2FjaGVkVmFsdWUgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPSBkaXNjb3ZlcnlTZXJ2aWNlLmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KCk7XG4gICAgY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9PT0gY2FjaGVkVmFsdWUpIHtcbiAgICAgICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgICAgICB9XG4gICAgICB9LCBkaXNjb3ZlcnlDYWNoZUludGVydmFsKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhY2hlZFZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaTogVVJMKTogdm9pZCB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdKSB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbmNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkucHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcblxuY29uc3QgZGVmYXVsdFRpbWVvdXQgPSAyMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5U2VydmljZSB7XG4gIHByaXZhdGUgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdEaXNjb3ZlcnknKTtcbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF91cmk6IFVSTDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IFVSTCkge1xuICAgIGlmICghdXJpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB1cmknKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKHVyaS50b1N0cmluZygpKTtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gIH1cblxuICBhc3luYyBkaXNjb3Zlck5lYXJieUVuZFBvaW50cyh1cmk6IFVSTCwgdGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxFbmRQb2ludFtdPiB7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB0aW1lb3V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpc2NvdmVyeSB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIHdpdGggbm8gZGF0YSBbJHt1cmx9XWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzU3RyaW5nID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGFzU3RyaW5nLnNwbGl0KCcsJyk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBuZXcgRW5kUG9pbnQoZW5kUG9pbnQsIHRpbWVvdXQpKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KHRpbWVvdXQ6IG51bWJlciA9IGRlZmF1bHRUaW1lb3V0KTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IERpc2NvdmVyeVVyaS5idWlsZERpc2NvdmVyeVVybCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGF3YWl0IHRoaXMuZGlzY292ZXJOZWFyYnlFbmRQb2ludHMobmV3IFVSTCh1cmwpLCB0aW1lb3V0KTtcbiAgICBsZXQgZmFpbGVkUmVxdWVzdHMgPSAwO1xuICAgIGNvbnN0IHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkID0gKCk6IFByb21pc2U8dm9pZD4gPT4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKGZhaWxlZFJlcXVlc3RzID49IGVuZFBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmVqZWN0KGBEaXNjb3Zlcnkgb2YgWyR7ZW5kUG9pbnRzLmxlbmd0aH1dIGVuZHBvaW50cyBmcm9tIFske3VybH1dIGZhaWxlZCwgcHJldmVudGluZyBpdCBmcm9tIGNvbXBsZXRpbmdgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBlbmRQb2ludCA9IGF3YWl0IFByb21pc2UucmFjZShlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IGVuZFBvaW50XG4gICAgICAucGluZygpXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdGYWlsZWQgdG8gcGluZyBlbmQgcG9pbnQgWyVzXScsIGVuZFBvaW50LCBlKTtcblxuICAgICAgICBmYWlsZWRSZXF1ZXN0cysrO1xuXG4gICAgICAgIHJldHVybiBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCgpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHRpbWUgPT4ge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcmVkIGVuZCBwb2ludCBbJXNdIHdpdGggdGltZSBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSwgdGltZSk7XG4gICAgICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICAgICAgcnVudGltZTogKG5vdyAtIFNESy5wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgICAgICB2YWx1ZToge3VpbnQ2NDogdGltZSB8fCAwfSxcbiAgICAgICAgICByZXNvdXJjZTogZW5kUG9pbnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBraW5kOiAncGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50O1xuICAgICAgfSkpKTtcblxuICAgIHJldHVybiBlbmRQb2ludDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9IGZyb20gJy4uL2RlZmF1bHRzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvUGFyYW1ldGVycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVVyaSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kaXNjb3ZlcnlVcmk6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oZGVmYXVsdERpc2NvdmVyeVVyaSk7XG5cbiAgc3RhdGljIGdldCB1cmkoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5VXJpLl9kaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGREaXNjb3ZlcnlVcmwodXJpOiBVUkwpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodXJpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCd2ZXJzaW9uJywgc2RrVmVyc2lvbik7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2ludGVudGlvbnMnLCBpbnRlbnRpb25zKTtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnXycsIGAke0RhdGUubm93KCl9YCk7XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lID09PSAnLycpIHtcbiAgICAgIHVybC5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5VXJpIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5pbXBvcnQge1xuICBJU3Vic2NyaWJlUmVzcG9uc2UsXG4gIElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdFxufSBmcm9tICcuLi9hcGkvU3Vic2NyaWJlJztcbmltcG9ydCB7SVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCwgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9TZXRSZW1vdGVEZXNjcmlwdGlvbic7XG5pbXBvcnQge0lEZXN0cm95U3RyZWFtUmVxdWVzdCwgSURlc3Ryb3lTdHJlYW1SZXNwb25zZX0gZnJvbSAnLi4vYXBpL0Rlc3Ryb3lTdHJlYW0nO1xuaW1wb3J0IHtJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QsIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9BZGRJY2VDYW5kaWRhdGVzJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBQYXJhbWV0ZXJzIGZyb20gJy4uLy4uL2Vudmlyb25tZW50L1BhcmFtZXRlcnMnO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlLCBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgQml0cmF0ZU1vZGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZU1vZGVNYXBwaW5nJztcbmltcG9ydCBCaXRyYXRlU3RhdGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZVN0YXRlTWFwcGluZyc7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQge1xuICBJUHVibGlzaFJlc3BvbnNlLFxuICBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QsXG4gIElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCxcbiAgUHVibGlzaFN0YXR1c1xufSBmcm9tICcuLi9hcGkvUHVibGlzaCc7XG5cbmNvbnN0IGFwaVZlcnNpb24gPSA3O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpYmVTdGF0dXMgPSAnb2snIHwgJ25vLXN0cmVhbScgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZm9yYmlkZGVuLXRhZycgfCAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBSZW1vdmVUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIERlc3Ryb3lTdHJlYW1TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtIHtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3Vic2NyaWJlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBJUHVibGlzaFJlc3BvbnNlSW5pdCA9IHtcbiAgc3RhdHVzOiBQdWJsaXNoU3RhdHVzO1xuICBzdHJlYW0/OiBJU3RyZWFtO1xuICBsYWc/OiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn07XG5cbmludGVyZmFjZSBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzO1xuICBzZXNzaW9uRGVzY3JpcHRpb24/OiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5pbnRlcmZhY2UgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXM7XG4gIG9wdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXM7XG59XG5cbmludGVyZmFjZSBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kUG9pbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRW5kUG9pbnQnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXJpOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcm91bmRUcmlwVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIpIHtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gICAgdGhpcy5fdGltZW91dCA9IHRpbWVvdXQ7XG5cbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW5kIHBvaW50IHJlcXVpcmVzIGEgdGltZW91dGApO1xuICAgIH1cbiAgfVxuXG4gIGdldCByb3VuZFRyaXBUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRW5kUG9pbnRbdXJpPSR7dGhpcy5fdXJpfV1gO1xuICB9XG5cbiAgYXN5bmMgcGluZygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRQaW5nVXJsKCk7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgfSksXG4gICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4oKF8sIHJlamVjdCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBQaW5nIHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGhpcy5fdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7IC8qIEhhbmRsZSAqL1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQaW5nIGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIHRoaXMuX3JvdW5kVHJpcFRpbWUgPSBmaW5pc2hlZCAtIHN0YXJ0O1xuXG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICBhc3luYyBzdWJzY3JpYmUodG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAnc3Vic2NyaWJlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYFN1YnNjcmliZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHN1YnNjcmliZSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBwdWJsaXNoKG5hbWU6IHN0cmluZywgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3B1Ymxpc2gnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHB1Ymxpc2gnLCBuZXcgRXJyb3IoYFB1Ymxpc2ggdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHB1Ymxpc2gnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFB1Ymxpc2hTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3QgcHVibGlzaCByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW06IElTdHJlYW0sIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXNjcmlwdGlvbicsICdyZW1vdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgIHR5cGU6IHNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICBzZHA6IHNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgbmV3IEVycm9yKGBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgbGltaXRCaXRyYXRlKFxuICAgIHN0cmVhbTogSVN0cmVhbSxcbiAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcixcbiAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBCaXRzUGVyU2Vjb25kLFxuICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlLFxuICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSxcbiAgKTogUHJvbWlzZTxJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2JpdHJhdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlKSxcbiAgICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZU1hcHBpbmcuY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGUpXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBuZXcgRXJyb3IoYFNldCBsaW1pdCBiaXRyYXRlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBzZXQgbGltaXQgYml0cmF0ZSByZXNwb25zZSBbJXNdIGluIFslc10gbXMnLCBzdGF0dXMsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHtzdGF0dXN9O1xuICB9XG5cbiAgYXN5bmMgYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW06IElTdHJlYW0sIGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdLCBkaXNjb3ZlcnlDb21wbGV0ZWQ6IGJvb2xlYW4sIG9wdGlvbnM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdpY2UnLCAnY2FuZGlkYXRlcyddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQsXG4gICAgICBvcHRpb25zXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgbmV3IEVycm9yKGBBZGQgaWNlIGNhbmRpZGF0ZXMgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBhZGQgSUNFIGNhbmRpZGF0ZXMgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtKHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYERlbGV0ZSBzdHJlYW0gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBzdHJlYW0nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgZGVzdHJveSBzdHJlYW0gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgZGVzdHJveVN0cmVhbVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtT25Vbm1vdW50KHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW5hdmlnYXRvcj8uc2VuZEJlYWNvbikge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNvbik7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIG5hdmlnYXRvci5zZW5kQmVhY29uKHVybCwgZm9ybURhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFVybChwYXRoOiBzdHJpbmdbXSk6IFVSTCB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHBhdGhBc0FycmF5ID0gdXJpLnBhdGhuYW1lLnNwbGl0KCcvJyk7XG5cbiAgICBwYXRoQXNBcnJheS5sZW5ndGggPSBwYXRoQXNBcnJheS5sZW5ndGggLSAxO1xuXG4gICAgdXJpLnBhdGhuYW1lID0gcGF0aEFzQXJyYXkuY29uY2F0KC4uLnBhdGgpLmpvaW4oJy8nKTtcblxuICAgIHJldHVybiB1cmk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGluZ1VybCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcbiAgICBjb25zdCBpbnRlbnRpb25zID0gUGFyYW1ldGVycy5kaXNjb3ZlcnlQYXJhbWV0ZXJzLmludGVudGlvbnM7XG5cbiAgICB1cmkuc2VhcmNoUGFyYW1zLnNldCgndHlwZScsICdodHRwJyk7XG4gICAgdXJpLnNlYXJjaFBhcmFtcy5zZXQoJ3ZlcnNpb24nLCBzZGtWZXJzaW9uKTtcbiAgICB1cmkuc2VhcmNoUGFyYW1zLnNldCgnaW50ZW50aW9ucycsIGludGVudGlvbnMpO1xuICAgIHVyaS5zZWFyY2hQYXJhbXMuc2V0KCdfJywgYCR7RGF0ZS5ub3coKX1gKTtcblxuICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBQdWJsaXNoU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwNjpcbiAgICAgICAgcmV0dXJuICdtaXNzaW5nLWNoYW5uZWwtb3Itcm9vbS1pZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNDA5OlxuICAgICAgICByZXR1cm4gJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJztcbiAgICAgIGNhc2UgNDE1OlxuICAgICAgICByZXR1cm4gJ2ZvcmJpZGRlbi10YWcnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTdWJzY3JpYmVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA0MDk6XG4gICAgICAgIHJldHVybiAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnO1xuICAgICAgY2FzZSA0MTU6XG4gICAgICAgIHJldHVybiAnZm9yYmlkZGVuLXRhZyc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogRGVzdHJveVN0cmVhbVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTdWJzY3JpYmVSZXNwb25zZTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZTogSVN1YnNjcmliZVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2UubGFnID0gZGF0YS5sYWc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJUHVibGlzaFJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVB1Ymxpc2hSZXNwb25zZTtcbiAgICBjb25zdCBwdWJsaXNoUmVzcG9uc2U6IElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgcHVibGlzaFJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHB1Ymxpc2hSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0ge2ljZVNlcnZlcnM6IFtdfTtcblxuICAgIGlmIChjb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kgPSBjb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPT09ICdudW1iZXInKSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID0gY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzKSB7XG4gICAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICAgIHVybHM6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzLFxuICAgICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSA9IGNvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5O1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSA9IGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnRjQ29uZmlndXJhdGlvbjtcbiAgfVxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U6IElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIGlmIChkYXRhICYmIGRhdGEuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiA9IGRhdGEuc2Vzc2lvbkRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U6IElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0ID0ge1xuICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1cyxcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5vcHRpb25zKSB7XG4gICAgICAgIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZS5vcHRpb25zID0gZGF0YS5vcHRpb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJRGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW06IElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaHVua2VkU3RyZWFtIGltcGxlbWVudHMgSVN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaHVua2VkU3RyZWFtJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfbW9uaXRvckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX3N0cmVhbVN0YXRpc3RpY3M6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzO1xuICBwcml2YXRlIF9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gY2hhbm5lbENvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHRoaXMpO1xuICB9XG5cbiAgc3RhcnQodXJpOiBVUkwsIHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQgfCBJRGlzcG9zYWJsZT4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpXG4gICAgICAudGhlbihlbmRQb2ludCA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQuc3Vic2NyaWJlKHRva2VuLCBudWxsLCB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCh7c3RhdHVzLCBzdHJlYW0sIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSwgbGFnfSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBzdHJlYW07XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxhZy52YWx1ZSA9IGxhZztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoXG4gICAgICAgICAgJ1slc10gU3Vic2NyaWJlIGNvbXBsZXRlZCBbJXNdIFslal0gWyVqXSBbJWpdIFslal0nLFxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvZmZlclNkcCA9IGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgIG9yaWdpblN0YXJ0VGltZTogRGF0ZS5ub3coKSAtIGxhZyArIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyAyLFxuICAgICAgICAgIGxhZ1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBDaHVua2VkU3RyZWFtaW5nLnN0YXJ0KHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSwgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIG9mZmVyU2RwLCBvcHRpb25zKVxuICAgICAgICAgIC50aGVuKHBsYXllciA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vbml0b3IocGxheWVyKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBsYXllcjtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2h1bmtlZFN0cmVhbWluZyBmYWlsZWQnLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbW9uaXRvcihwbGF5ZXI6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBuZXdTdHJlYW1TdGF0aXN0aWNzID0gQ2h1bmtlZFN0cmVhbWluZy5nZXRTdGF0cygpO1xuXG4gICAgICBpZiAodGhpcy5fc3RyZWFtU3RhdGlzdGljcyAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmN1cnJlbnRUaW1lID49IG5ld1N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgJiZcbiAgICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5kYXRhQnVmZmVyZWRcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50Kys7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPiA2KSB7XG4gICAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHBsYXllci5kaXNwb3NlKCk7XG4gICAgICAgICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZWQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzID0gbmV3U3RyZWFtU3RhdGlzdGljcztcbiAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuICAgIH0sIDEwMDApO1xuXG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgfSkpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFdlYlBsYXllciBmcm9tICcuL1dlYlBsYXllcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgU2hha2FQbGF5ZXIgZnJvbSAnLi9TaGFrYVBsYXllcic7XG5pbXBvcnQgSGxzUGxheWVyIGZyb20gJy4vSGxzUGxheWVyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMsIENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ2h1bmtlZFN0cmVhbWluZyB7XG4gIHByaXZhdGUgc3RhdGljIF9wZW5kaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgc3RhdGljIF9obHNQbGF5ZXI6IEhsc1BsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9waGVuaXhXZWJQbGF5ZXI6IFdlYlBsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYTogU2hha2FUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgc3RhdGljIF9wbGF5ZXI6IFNoYWthUGxheWVyIHwgV2ViUGxheWVyIHwgSGxzUGxheWVyO1xuXG4gIHN0YXRpYyBnZXQgaGxzUGxheWVyKCk6IEhsc1BsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9obHNQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBoZW5peFdlYlBsYXllcigpOiBXZWJQbGF5ZXJUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fcGhlbml4V2ViUGxheWVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYSgpOiBTaGFrYVR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBzdGFydCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKTogUHJvbWlzZTxJRGlzcG9zYWJsZT4ge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllciB8fCB0aGlzLl9zaGFrYSB8fCB0aGlzLl9waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCk7XG4gICAgfVxuXG4gICAgaWYgKCFTREsud2ViUGxheWVyTG9hZGVyICYmICFTREsuc2hha2FQbGF5ZXJMb2FkZXIgJiYgIVNESy5obHNKc0xvYWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwbGF5ZXIgaXMgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkLWZlYXR1cmUsIGFkZCBzdHJlYW0gcGxheWVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKFNESy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLmhsc0pzTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5faGxzUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsud2ViUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fcGhlbml4V2ViUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy5zaGFrYVBsYXllckxvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX3NoYWthID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBsYXkoUGxheWVyOiB0eXBlb2YgV2ViUGxheWVyIHwgdHlwZW9mIFNoYWthUGxheWVyIHwgdHlwZW9mIEhsc1BsYXllciwgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucyk6IElEaXNwb3NhYmxlIHtcbiAgICBjb25zdCBkYXNoTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tcGRcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgaGxzTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tM3U4XFw/P1teXFxzXSopL20pO1xuICAgIGNvbnN0IG1hbmlmZXN0VXJsID0gZGFzaE1hbmlmZXN0VXJsTWF0Y2ggJiYgZGFzaE1hbmlmZXN0VXJsTWF0Y2hbMV0gPyBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuICAgIGNvbnN0IHBsYXlsaXN0VXJsID0gaGxzTWFuaWZlc3RVcmxNYXRjaCAmJiBobHNNYW5pZmVzdFVybE1hdGNoWzFdID8gaGxzTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuXG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhscyB8fCAodGhpcy5faGxzUGxheWVyICYmIHRoaXMuX2hsc1BsYXllci5pc1N1cHBvcnRlZCgpKSkge1xuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IFBsYXllcih2aWRlb0VsZW1lbnQsICdobHMnLCBzdHJlYW1JZCwgcGxheWxpc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcjtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2Rhc2gnLCBzdHJlYW1JZCwgbWFuaWZlc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5fcGxheWVyLnN0YXJ0KCk7XG5cbiAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbG9hZGVkKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZyk6IElEaXNwb3NhYmxlIHtcbiAgICBpZiAoIXRoaXMuX3NoYWthICYmICF0aGlzLl9waGVuaXhXZWJQbGF5ZXIgJiYgIXRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9obHNQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShXZWJQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc2hha2EpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoU2hha2FQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ30gZnJvbSAnLi9DaHVua2VkU3RyZWFtaW5nJztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ09wdGlvbnMsIENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7SUhsc1BsYXllclR5cGV9IGZyb20gJy4vSUhsc1BsYXllcic7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhsc1BsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJSGxzUGxheWVyVHlwZTtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllcikge1xuICAgICAgaWYgKENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgICAgdGhpcy5fcGxheWVyID0gbmV3IENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyKHtcbiAgICAgICAgICBlbmFibGVXb3JrZXI6IHRydWUsXG4gICAgICAgICAgbWF4QnVmZmVyTGVuZ3RoOiAxLFxuICAgICAgICAgIGxpdmVCYWNrQnVmZmVyTGVuZ3RoOiAwLFxuICAgICAgICAgIGxpdmVTeW5jRHVyYXRpb246IDcsXG4gICAgICAgICAgbGl2ZUR1cmF0aW9uSW5maW5pdHk6IHRydWUsXG4gICAgICAgICAgbGl2ZU1heExhdGVuY3lEdXJhdGlvbjogSW5maW5pdHksXG4gICAgICAgICAgaGlnaEJ1ZmZlcldhdGNoZG9nUGVyaW9kOiAxXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9wbGF5ZXIubG9hZFNvdXJjZSh0aGlzLl9tYW5pZmVzdFVSSSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5hdHRhY2hNZWRpYSh0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuY2FuUGxheVR5cGUoJ2FwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsJykpIHtcbiAgICAgICAgdGhpcy5fdmlkZW9FbGVtZW50LnNyYyA9IHRoaXMuX21hbmlmZXN0VVJJO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllciAmJiBDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMC4wLFxuICAgICAgICBsYWc6IDAuMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0ge1xuICAgICAgd2lkdGg6IHRoaXMuX3BsYXllci5tZWRpYS5vZmZzZXRXaWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldEhlaWdodCxcbiAgICAgIGN1cnJlbnRUaW1lOiB0aGlzLl9wbGF5ZXIubWVkaWEuY3VycmVudFRpbWUsXG4gICAgICBsYWc6IDAuMCxcbiAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZSxcbiAgICAgIGRhdGFCdWZmZXJlZDogMC4wXG4gICAgfTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0lETEUnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0VSUk9SJyB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0VOREVEJykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlLmluY2x1ZGVzKCdMT0FESU5HJykgfHwgdGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ1dBSVRJTkcnKSkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuXG4gICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIChjdXJyZW50VGltZSArICh0aGlzLl9vcHRpb25zLmxhZyAvIDEwMDApKSAtIHRydWVDdXJyZW50VGltZSk7XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllciAmJiB0aGlzLl9wbGF5ZXIuZGVzdHJveSkge1xuICAgICAgdGhpcy5fcGxheWVyLmRlc3Ryb3koKTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGVudW0gTmV0d29ya1N0YXRlcyB7XG4gIE5ldHdvcmtFbXB0eSxcbiAgTmV0d29ya0lkbGUsXG4gIE5ldHdvcmtMb2FkaW5nLFxuICBOZXR3b3JrTm9Tb3VyY2Vcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCB7U2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uLy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgUnRjQ29ubmVjdGlvbk1vbml0b3IgZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlcic7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgSW5zZXJ0YWJsZVN0cmVhbXMgZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vSW5zZXJ0YWJsZVN0cmVhbXMnO1xuaW1wb3J0IFNkcFBhcnNlciBmcm9tICcuLi8uLi9ydGMvU2RwUGFyc2VyJztcblxuY29uc3QgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwgPSAxMDA7XG5jb25zdCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0ID0gMzAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWxUaW1lU3RyZWFtIGltcGxlbWVudHMgSVN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdSZWFsVGltZVN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0OiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIHN0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IHBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0ID0gc3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXJ0KHVyaSwgdG9rZW4sIGxpc3Rlbk9uU3RyZWFtU2V0dXAsIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSksXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigncmVjdm9ubHknLCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpXG4gICAgICAgIC50aGVuKCh7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259KSA9PiB7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9jYWxPZmZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICBdKVxuICAgICAgLnRoZW4oKFtlbmRQb2ludCwge2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufV0pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnTG9jYWwgb2ZmZXI6XFxuJyArIGxvY2FsT2ZmZXIuc2RwKTtcblxuICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgICAgICBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlci5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgIGxvY2FsT2ZmZXIgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBydGNDb25maWd1cmF0aW9uLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseVJ0Y0NvbmZpZ3VyYXRpb24odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgJ1slc10gRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlIGFmdGVyIHBlZXIgY29ubmVjdGlvbiBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHN3aXRjaCAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2hlY2tpbmcnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICduZXcnOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZGlzY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICAgICAgICAgICAgaWYgKG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCB0cnlpbmcgdG8gcmVjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAnY2xvc2VkJzpcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgcmV0cnlpbmcgdG8gY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuXG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub250cmFjayA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW1zWzBdKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgdHJhY2tMaXN0ZW5lciA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG5cbiAgICAgICAgICAgICAgICBpZiAoZS5zdHJlYW1zKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSk7XG4gICAgICAgICAgICAgIH0sIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IGxvY2FsIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IHJlbW90ZSBTRFAgYW5zd2VyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoe1xuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFuc3dlciA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIGFuc3dlciBbJWpdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGFuc3dlcik7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5zZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW0sIGFuc3dlcik7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoe3N0YXR1cywgc2Vzc2lvbkRlc2NyaXB0aW9ufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuc3VjY2Vzcyh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG1lZGlhU3RyZWFtUHJvbWlzZTtcbiAgICAgICAgICAgIH0pLnRoZW4obWVkaWFTdHJlYW0gPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbiA9IG5ldyBTZHBQYXJzZXIocGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG4gICAgICAgICAgICAgICAgY29uc3Qge2Rpc3Bvc2FibGVzfSA9IEluc2VydGFibGVTdHJlYW1zLmFwcGx5RW5jb2RlZFN0cmVhbVRyYW5zZm9ybWF0aW9uKG1lZGlhU3RyZWFtLCBwZWVyQ29ubmVjdGlvbi5nZXRSZWNlaXZlcnMoKSwgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmssIHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLnZpZGVvQ29kZWMsIHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLmF1ZGlvQ29kZWMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKGRpc3Bvc2FibGVzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge3RyYW5zZm9ybWVkU3RyZWFtLCBkaXNwb3NhYmxlc30gPSBJbnNlcnRhYmxlU3RyZWFtcy5hcHBseUluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1hdGlvbihtZWRpYVN0cmVhbSwgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKGRpc3Bvc2FibGVzKTtcbiAgICAgICAgICAgICAgICBtZWRpYVN0cmVhbSA9IHRyYW5zZm9ybWVkU3RyZWFtO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3IgPSBuZXcgUnRjQ29ubmVjdGlvbk1vbml0b3IocGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gNCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gVmlkZW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgodmlkZW9UcmFja0ZhaWxlZCB8fCBhdWRpb1RyYWNrRmFpbGVkKSAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBydGNDb25uZWN0aW9uTW9uaXRvci5kaXNwb3NlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlIGFmdGVyIHRyYWNrIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoIVNESy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXBwbHlSdGNDb25maWd1cmF0aW9uKFxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiB8IG51bGwsXG4gICAgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgaWYgKCFvcHRpb25hbFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uID0gUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHJ1bmNhdGVJY2VTZXJ2ZXJzKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm4gU0RLLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihydGNDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdSdGNDb25maWd1cmF0aW9uID0ge1xuICAgICAgLi4ub3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCksXG4gICAgICAuLi5ydGNDb25maWd1cmF0aW9uXG4gICAgfTtcblxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihuZXdSdGNDb25maWd1cmF0aW9uKTtcblxuICAgIHJldHVybiBvcHRpb25hbFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc7XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPCBTREsubWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyB8fCAhU0RLLmF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMrKztcblxuICAgICAgY29uc3QgaXNDbGllbnRPZmZlckZsb3cgPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbj8udHlwZSA9PT0gJ29mZmVyJztcblxuICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFpc0NsaWVudE9mZmVyRmxvd1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JlY29ubmVjdGluZyBwZWVyIGNvbm5lY3Rpb24gYnkgcmVzdGFydGluZyBJQ0UnKTtcblxuICAgICAgY29uc3QgY3VycmVudExvY2FsRGVzY3JpcHRpb24gPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih7aWNlUmVzdGFydDogdHJ1ZX0pLnRoZW4ob2ZmZXIgPT4ge1xuICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oY3VycmVudExvY2FsRGVzY3JpcHRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uJywgZSk7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gYWZ0ZXIgWyVzXSBhdHRlbXB0cywgcGVyZm9ybWluZyBmdWxsIHJlY292ZXJ5JywgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMpO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICByZXRyeUNhbGxiYWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ30gZnJvbSAnLi9DaHVua2VkU3RyZWFtaW5nJztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ09wdGlvbnMsIENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxudHlwZSBTaGFrYU9wdGlvbnMgPSB7XG4gIGFicjoge1xuICAgIGRlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZTogbnVtYmVyO1xuICB9O1xuICBtYW5pZmVzdDoge1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIHN0cmVhbWluZzoge1xuICAgIHJlYnVmZmVyaW5nR29hbDogbnVtYmVyO1xuICAgIGJ1ZmZlcmluZ0dvYWw6IG51bWJlcjtcbiAgICBidWZmZXJCZWhpbmQ6IG51bWJlcjtcbiAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgIHRpbWVvdXQ6IG51bWJlcjtcbiAgICAgIG1heEF0dGVtcHRzOiBudW1iZXI7XG4gICAgICBiYWNrb2ZmRmFjdG9yOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNoYWthIHtcbiAgY29uZmlndXJlOiAobzogU2hha2FPcHRpb25zKSA9PiB2b2lkO1xuICBsb2FkOiAodXJpOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIGdldFN0YXRzOiAoKSA9PiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcztcbiAgZGVzdHJveTogKCkgPT4gdm9pZDtcbiAgdW5sb2FkOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFrYVBsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTaGFrYVBsYXllcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSVNoYWthO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKENodW5rZWRTdHJlYW1pbmcuc2hha2EpIHtcbiAgICAgIGNvbnN0IHBsYXllck9wdGlvbnM6IFNoYWthT3B0aW9ucyA9IHtcbiAgICAgICAgYWJyOiB7ZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiAyMDAwMDAwfSxcbiAgICAgICAgbWFuaWZlc3Q6IHtyZXRyeVBhcmFtZXRlcnM6IHt0aW1lb3V0OiAxMDAwMH19LFxuICAgICAgICBzdHJlYW1pbmc6IHtcbiAgICAgICAgICByZWJ1ZmZlcmluZ0dvYWw6IDIsXG4gICAgICAgICAgYnVmZmVyaW5nR29hbDogMTAsXG4gICAgICAgICAgYnVmZmVyQmVoaW5kOiAzMCxcbiAgICAgICAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICAgICAgbWF4QXR0ZW1wdHM6IDEwLFxuICAgICAgICAgICAgYmFja29mZkZhY3RvcjogMS4xXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgQ2h1bmtlZFN0cmVhbWluZy5zaGFrYS5QbGF5ZXIodGhpcy5fdmlkZW9FbGVtZW50KTtcbiAgICAgIHRoaXMubG9hZFBsYXllcihwbGF5ZXJPcHRpb25zKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAsXG4gICAgICAgIGxhZzogMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0ge1xuICAgICAgLi4udGhpcy5fcGxheWVyLmdldFN0YXRzKCksXG4gICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgIGxhZzogMFxuICAgIH07XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ10gfHwgMDtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG4gICAgY29uc3QgbGFnID0gTWF0aC5tYXgoMC4wLCB0cnVlQ3VycmVudFRpbWUgLSBjdXJyZW50VGltZSk7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50KSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgICBzdGF0aXN0aWNzLmxhZyA9IGxhZztcblxuICAgICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLnVubG9hZCgpO1xuICAgICAgdGhpcy5fcGxheWVyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGxheWVyKHBsYXllckNvbmZpZzogU2hha2FPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGxheWVyLmNvbmZpZ3VyZShwbGF5ZXJDb25maWcpO1xuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BsYXllci5sb2FkKHRoaXMuX21hbmlmZXN0VVJJKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERBU0ggbGl2ZSBzdHJlYW0gaGFzIGJlZW4gbG9hZGVkJywgdGhpcy5fc3RyZWFtSWQpO1xuXG4gICAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LnBsYXkpIHtcbiAgICAgICAgdGhpcy5fdmlkZW9FbGVtZW50LnBsYXkoKTtcbiAgICAgIH1cbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBFcnJvciB3aGlsZSBsb2FkaW5nIERBU0ggbGl2ZSBzdHJlYW0gWyVzXScsIHRoaXMuX3N0cmVhbUlkLCBlLmNvZGUsIGUpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IENodW5rZWRTdHJlYW0gZnJvbSAnLi9DaHVua2VkU3RyZWFtJztcbmltcG9ydCBSZWFsVGltZVN0cmVhbSBmcm9tICcuL1JlYWxUaW1lU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbUZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbWluZycpO1xuXG4gIHN0YXRpYyBjcmVhdGUodG9rZW46IHN0cmluZywgY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgc3RyZWFtVHJhbnNmb3JtQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPik6IElTdHJlYW0ge1xuICAgIGNvbnN0IHRva2VuQ2FwYWJpbGl0aWVzID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikuY2FwYWJpbGl0aWVzO1xuXG4gICAgaWYgKHRva2VuQ2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdzdHJlYW1pbmcnKSB8fCB0b2tlbkNhcGFiaWxpdGllcy5pbmNsdWRlcygnb24tZGVtYW5kJykpIHtcbiAgICAgIHJldHVybiBuZXcgQ2h1bmtlZFN0cmVhbShjaGFubmVsQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZWFsVGltZVN0cmVhbShjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyZWFtRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdPcHRpb25zLCBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbmNvbnN0IGJhbmR3aWR0aFRvU3RhcnRBdCA9IDMwMDAwMDA7IC8vIENvcnJlc3BvbmRzIHRvIDcyMHAgaW4gbW9zdCBzZXR1cHNcbmNvbnN0IG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkID0gMTUwMDA7XG5cbnR5cGUgRXZlbnRMaXN0ZW5lckZvcldlYlBsYXllciA9IChldnQ6IFdlYlBsYXllckV2ZW50KSA9PiB2b2lkO1xudHlwZSBXZWJQbGF5ZXJFdmVudCA9IHtcbiAgY29kZTogbnVtYmVyO1xuICBzZXZlcml0eTogbnVtYmVyO1xuICBlcnJvcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJV2ViUGxheWVyIHtcbiAgc3RhcnQ6ICh1cmw6IHN0cmluZykgPT4gdm9pZDtcbiAgYWRkRXZlbnRMaXN0ZW5lcihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyRm9yV2ViUGxheWVyKTogdm9pZDtcbiAgZGlzcG9zZSgpOiB2b2lkO1xuICBlcnJvcnM6IHtcbiAgICBzZXZlcml0eToge1xuICAgICAgUkVDT1ZFUkFCTEU6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1dlYlBsYXllcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSVdlYlBsYXllcjtcbiAgcHJpdmF0ZSBfbGFzdFJlbG9hZFRpbWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllcikge1xuICAgICAgY29uc3QgcGxheWVyT3B0aW9ucyA9IHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgYmFuZHdpZHRoVG9TdGFydEF0XG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuV2ViUGxheWVyKHRoaXMuX2xvZ2dlciwgdGhpcy5fdmlkZW9FbGVtZW50LCBwbGF5ZXJPcHRpb25zKTtcbiAgICAgIHRoaXMuX3BsYXllci5zdGFydCh0aGlzLl9tYW5pZmVzdFVSSSk7XG5cbiAgICAgIHRoaXMuX3BsYXllci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9yT2JqZWN0ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2FuUmVsb2FkKCkgJiYgZXJyb3JPYmplY3QgJiYgKGVycm9yT2JqZWN0LmNvZGUgPT09IDMgfHwgZXJyb3JPYmplY3Quc2V2ZXJpdHkgPT09IENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLmVycm9ycy5zZXZlcml0eS5SRUNPVkVSQUJMRSkpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gYWZ0ZXIgZXJyb3IgZXZlbnQgWyVqXScsIGVycm9yT2JqZWN0KTtcbiAgICAgICAgICB0aGlzLnJlbG9hZElmQWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcmVsb2FkIHdpdGggZXJyb3IgWyVqXScsIGVycm9yT2JqZWN0KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyICYmIENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLmlzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMC4wLFxuICAgICAgICBsYWc6IDAuMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZSxcbiAgICAgICAgZGF0YUJ1ZmZlcmVkOiAwLjBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHRoaXMuX3BsYXllci5nZXRTdGF0cygpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gc3RhdGlzdGljcy5jdXJyZW50VGltZSB8fCB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ107XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuaXNOYXRpdmUgJiYgc3RhdGlzdGljcy5kZWxpdmVyeVR5cGUgPT09ICdIbHMnKSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgLSBzdGF0aXN0aWNzLmxhZztcbiAgICB9XG5cbiAgICBpZiAoIXN0YXRpc3RpY3MuY3VycmVudFRpbWUpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICB9XG5cbiAgICBpZiAoIXN0YXRpc3RpY3MuaXNOYXRpdmUpIHtcbiAgICAgIHN0YXRpc3RpY3MubGFnID0gTWF0aC5tYXgoMC4wLCB0cnVlQ3VycmVudFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5wbGF5VGltZSA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci5kaXNwb3NlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgY2FuUmVsb2FkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkID0gIXRoaXMuX2xhc3RSZWxvYWRUaW1lIHx8IERhdGUubm93KCkgLSB0aGlzLl9sYXN0UmVsb2FkVGltZSA+IG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkO1xuXG4gICAgcmV0dXJuIHRoaXMuX3ZpZGVvRWxlbWVudCAmJiB0aGlzLl9wbGF5ZXIgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCAhPT0gMCAmJiBoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkSWZBYmxlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5SZWxvYWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIFJlbG9hZGluZyB1bmhlYWx0aHkgc3RyZWFtIHRoYXQgd2FzIGFjdGl2ZSBmb3IgYXQgbGVhc3QgWyVzXSBzZWNvbmRzJywgdGhpcy5fc3RyZWFtSWQsIG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIC8gMTAwMCk7XG5cbiAgICB0aGlzLl9sYXN0UmVsb2FkVGltZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUVuY29kZWRTdHJlYW1TaW5rPFQgPSBSVENFbmNvZGVkQXVkaW9GcmFtZSB8IFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB7XG4gICAgKHRyYWNrOiBNZWRpYVN0cmVhbVRyYWNrLCBjaHVuazogVCk6IGJvb2xlYW4gfCBQcm9taXNlTGlrZTxib29sZWFuPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5jb2RlZFN0cmVhbVNpbmsge1xuICBzdGF0aWMgdmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luayhtb2RlOiAnYXVkaW8nIHwgJ3ZpZGVvJywgaXRlbTogSUVuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gRW5jb2RlZCBTdHJlYW0gU2luayBmdW5jdGlvbiB0eXBlLiBGb3VuZCBbJHt0eXBlb2YgaXRlbX1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBFbmNvZGVkIFN0cmVhbSBTaW5rIGZ1bmN0aW9uIHBhcmFtZXRlciBsZW5ndGguIEV4cGVjdGVkIDIuIEZvdW5kIFske2l0ZW0ubGVuZ3RofV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6ICdvaydcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvZGVkU3RyZWFtU2luayBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwge1N1cnJvZ2F0ZUZyYW1lVHlwZSwgU2tpcEZyYW1lfSBmcm9tICcuL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXInO1xuXG50eXBlIE1lZGlhU3RyZWFtVHJhY2tLaW5kID0gJ3ZpZGVvJyB8ICdhdWRpbyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluc2VydGFibGVTdHJlYW1zIHtcbiAgc3RhdGljIGFwcGx5RW5jb2RlZFN0cmVhbVRyYW5zZm9ybWF0aW9uKHN0cmVhbTogTWVkaWFTdHJlYW0sIHJlY2VpdmVyczogUlRDUnRwUmVjZWl2ZXJbXSwgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiwgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiwgdmlkZW9Db2RlYzogc3RyaW5nLCBhdWRpb0NvZGVjOiBzdHJpbmcpOiB7ZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0fSB7XG4gICAgY29uc3QgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICBjb25zdCByZWNlaXZlciA9IHJlY2VpdmVycy5maWx0ZXIocmVjZWl2ZSA9PiByZWNlaXZlLnRyYWNrID09PSB0cmFjaylbMF07XG4gICAgICBjb25zdCBraW5kOiBNZWRpYVN0cmVhbVRyYWNrS2luZCA9IHRyYWNrLmtpbmQgYXMgTWVkaWFTdHJlYW1UcmFja0tpbmQ7XG5cbiAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICBjYXNlICd2aWRlbyc6IHtcbiAgICAgICAgICBpZiAoZW5jb2RlZFZpZGVvU3RyZWFtU2luaykge1xuICAgICAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi9Xb3JrZXJUcmFuc2Zvcm1TdHJlYW0udHMnLCBpbXBvcnQubWV0YS51cmwpLCB7dHlwZTogJ2NsYXNzaWMnfSk7XG5cbiAgICAgICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IGFzeW5jIGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWF3YWl0IGVuY29kZWRWaWRlb1N0cmVhbVNpbmsodHJhY2ssIGV2ZW50LmRhdGEuY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe2ZvcmNlSW52YWxpZEZyYW1lOiB0cnVlfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHJlY2VpdmVyLnRyYW5zZm9ybSA9IG5ldyBSVENSdHBTY3JpcHRUcmFuc2Zvcm0od29ya2VyLCB7XG4gICAgICAgICAgICAgICAga2luZDogdHJhY2sua2luZCxcbiAgICAgICAgICAgICAgICBjb2RlYzogdmlkZW9Db2RlY1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFJUQ0VuY29kZWRWaWRlb0ZyYW1lLCBSVENFbmNvZGVkVmlkZW9GcmFtZT4gPSBhc3luYyhjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWF3YWl0IGVuY29kZWRWaWRlb1N0cmVhbVNpbmsodHJhY2ssIGNodW5rKSkge1xuICAgICAgICAgICAgICAgIGxldCBzdXJyb2dhdGU6IFN1cnJvZ2F0ZUZyYW1lVHlwZTtcblxuICAgICAgICAgICAgICAgIGlmIChjaHVuay50eXBlID09PSAna2V5Jykge1xuICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUodmlkZW9Db2RlYyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lKHZpZGVvQ29kZWMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdXJyb2dhdGUgPT09IFNraXBGcmFtZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBzdXJyb2dhdGUgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY2h1bmsudHlwZSA9PT0gJ2tleScpIHtcbiAgICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWModmlkZW9Db2RlYykgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyh2aWRlb0NvZGVjKSB8fCBjaHVuay5kYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuayk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgICBjb25zdCByZWNlaXZlclN0cmVhbXMgPSByZWNlaXZlci5jcmVhdGVFbmNvZGVkU3RyZWFtcygpO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcmVjZWl2ZXJTdHJlYW1zLnJlYWRhYmxlO1xuICAgICAgICAgICAgY29uc3Qgc2luayA9IHJlY2VpdmVyU3RyZWFtcy53cml0YWJsZTtcblxuICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgICAgLnBpcGVUbyhzaW5rKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ2F1ZGlvJzoge1xuICAgICAgICAgIGlmIChlbmNvZGVkQXVkaW9TdHJlYW1TaW5rKSB7XG4gICAgICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuL1dvcmtlclRyYW5zZm9ybVN0cmVhbS50cycsIGltcG9ydC5tZXRhLnVybCksIHt0eXBlOiAnY2xhc3NpYyd9KTtcblxuICAgICAgICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gYXN5bmMgZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYXdhaXQgZW5jb2RlZEF1ZGlvU3RyZWFtU2luayh0cmFjaywgZXZlbnQuZGF0YS5jaHVuaykpIHtcbiAgICAgICAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7Zm9yY2VJbnZhbGlkRnJhbWU6IHRydWV9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgcmVjZWl2ZXIudHJhbnNmb3JtID0gbmV3IFJUQ1J0cFNjcmlwdFRyYW5zZm9ybSh3b3JrZXIsIHtcbiAgICAgICAgICAgICAgICBraW5kOiB0cmFjay5raW5kLFxuICAgICAgICAgICAgICAgIGNvZGVjOiBhdWRpb0NvZGVjXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG4gICAgICAgICAgICAgIGNvbnN0IGF1ZGlvUHVtcGVyID0gbmV3IEF1ZGlvKCk7XG5cbiAgICAgICAgICAgICAgYXVkaW9QdW1wZXIuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYXVkaW9QdW1wZXIpO1xuXG4gICAgICAgICAgICAgIGRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYXVkaW9QdW1wZXIpO1xuICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxSVENFbmNvZGVkQXVkaW9GcmFtZSwgUlRDRW5jb2RlZEF1ZGlvRnJhbWU+ID0gYXN5bmMoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFhd2FpdCBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rKHRyYWNrLCBjaHVuaykpIHtcbiAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlQXVkaW9TaWxlbnRQZXJDb2RlYyhhdWRpb0NvZGVjKSB8fCBjaHVuay5kYXRhO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtOiBlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVyU3RyZWFtcyA9IHJlY2VpdmVyLmNyZWF0ZUVuY29kZWRTdHJlYW1zKCk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSByZWNlaXZlclN0cmVhbXMucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gcmVjZWl2ZXJTdHJlYW1zLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShraW5kKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7ZGlzcG9zYWJsZXN9O1xuICB9XG5cbiAgc3RhdGljIGFwcGx5SW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybWF0aW9uKHN0cmVhbTogTWVkaWFTdHJlYW0sIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPiwgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT4pOiB7dHJhbnNmb3JtZWRTdHJlYW06IE1lZGlhU3RyZWFtOyBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3R9IHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuICAgIGNvbnN0IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuXG4gICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgY29uc3Qga2luZDogTWVkaWFTdHJlYW1UcmFja0tpbmQgPSB0cmFjay5raW5kIGFzIE1lZGlhU3RyZWFtVHJhY2tLaW5kO1xuXG4gICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgY2FzZSAndmlkZW8nOiB7XG4gICAgICAgICAgaWYgKHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxWaWRlb0ZyYW1lLCBWaWRlb0ZyYW1lPiA9IChjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKHRyYWNrLCBjaHVuaywgY29udHJvbGxlcik7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCB2aWRlb1RyYWNrID0gdHJhY2sgYXMgTWVkaWFTdHJlYW1WaWRlb1RyYWNrO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc29yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3Ioe3RyYWNrOiB2aWRlb1RyYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvcih7a2luZDogdmlkZW9UcmFjay5raW5kfSk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBwcm9jZXNzb3IucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gZ2VuZXJhdG9yLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgICAgICAgZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0ucmVtb3ZlVHJhY2soZ2VuZXJhdG9yKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2sodHJhY2spO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnYXVkaW8nOiB7XG4gICAgICAgICAgaWYgKGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxBdWRpb0RhdGEsIEF1ZGlvRGF0YT4gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayh0cmFjaywgY2h1bmssIGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgYXVkaW9UcmFjayA9IHRyYWNrIGFzIE1lZGlhU3RyZWFtQXVkaW9UcmFjaztcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtOiBpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yKHt0cmFjazogYXVkaW9UcmFja30pO1xuICAgICAgICAgICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3Ioe2tpbmQ6IGF1ZGlvVHJhY2sua2luZH0pO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcHJvY2Vzc29yLnJlYWRhYmxlO1xuICAgICAgICAgICAgY29uc3Qgc2luayA9IGdlbmVyYXRvci53cml0YWJsZTtcblxuICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgICAgLnBpcGVUbyhzaW5rKTtcblxuICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2soZ2VuZXJhdG9yKTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcbiAgICAgICAgICAgIGNvbnN0IGF1ZGlvUHVtcGVyID0gbmV3IEF1ZGlvKCk7XG5cbiAgICAgICAgICAgIG1lZGlhU3RyZWFtLmFkZFRyYWNrKHRyYWNrKTtcbiAgICAgICAgICAgIGF1ZGlvUHVtcGVyLnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhdWRpb1B1bXBlcik7XG4gICAgICAgICAgICBkaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5yZW1vdmVUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGF1ZGlvUHVtcGVyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2sodHJhY2spO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShraW5kKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0cmFuc2Zvcm1lZFN0cmVhbSxcbiAgICAgIGRpc3Bvc2FibGVzXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5zZXJ0YWJsZVN0cmVhbXMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW1UcmFja1RyYW5zZm9ybTxUID0gQXVkaW9EYXRhIHwgVmlkZW9GcmFtZT4ge1xuICAgICh0cmFjazogTWVkaWFTdHJlYW1UcmFjaywgY2h1bms6IFQsIGNvbnRyb2xsZXI6IFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyPFQ+KTogdm9pZCB8IFByb21pc2VMaWtlPHZvaWQ+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1UcmFja1RyYW5zZm9ybSB7XG4gIHN0YXRpYyB2YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0obW9kZTogJ2F1ZGlvJyB8ICd2aWRlbycsIGl0ZW06IElTdHJlYW1UcmFja1RyYW5zZm9ybSkge1xuICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IE1lZGlhIFN0cmVhbSBUcmFjayB0cmFuc2Zvcm0gZnVuY3Rpb24gdHlwZS4gRm91bmQgWyR7dHlwZW9mIGl0ZW19XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoICE9PSAzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gTWVkaWEgU3RyZWFtIFRyYWNrIHRyYW5zZm9ybSBmdW5jdGlvbiBwYXJhbWV0ZXIgbGVuZ3RoLiBFeHBlY3RlZCAzLiBGb3VuZCBbJHtpdGVtLmxlbmd0aH1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICB2YWxpZGF0aW9uUmVzdWx0OiAnb2snXG4gICAgfTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uLy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgY29uc3QgU2tpcEZyYW1lID0gU3ltYm9sKCk7XG5cbmV4cG9ydCB0eXBlIFN1cnJvZ2F0ZUZyYW1lVHlwZSA9IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHwgdHlwZW9mIFNraXBGcmFtZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc1NhZmFyaSA9IEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc01vYmlsZUNocm9tZSA9IEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmlzTW9iaWxlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0FuZHJvaWRDaHJvbWUgPSBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5pc0FuZHJvaWQ7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zaW5nbGVaZXJvQnl0ZSA9IG5ldyBVaW50OEFycmF5KFsweDAwXSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teUF1ZGlvU2lsZW50UGVyQ29kZWMgPSB7T1BVUzogbmV3IFVpbnQ4QXJyYXkoWzB4NjgsIDB4MDcsIDB4ZDksIDB4YWIsIDB4YmMsIDB4NzksIDB4ODcsIDB4YWIsIDB4OGUsIDB4NGEsIDB4MTQsIDB4ZjMsIDB4YTcsIDB4MWMsIDB4ZjIsIDB4OWEsIDB4N2EsIDB4NDUsIDB4YTcsIDB4MmQsIDB4NDQsIDB4MjUsIDB4NzQsIDB4NGMsIDB4YWQsIDB4MTYsIDB4YjMsIDB4MGUsIDB4NTEsIDB4NTcsIDB4ZWEsIDB4ZTcsIDB4YWQsIDB4MmEsIDB4MzgsIDB4Y2UsIDB4MzNdKX07XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMgPSB7XG4gICAgSDI2NDogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOSwgMHhmMCwgLy8gQWNjZXNzIHVuaXQgZGVsaW1pdGVyXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweGY0LCAweDAwLCAweDBhLCAweDkxLCAweDliLCAweDJiLCAweGYxLCAweGYxLCAweGY4LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweDA3LCAweDg5LCAweDEyLCAweGNiLCAvLyBTZXF1ZW5jZSBwYXJhbWV0ZXIgc2V0XG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY4LCAweGViLCAweGUzLCAweGM0LCAweDQ4LCAweDQ0LCAvLyBQaWN0dXJlIHBhcmFtdGVyIHNldFxuICAgICAgLyogKi8gMHgwMCwgMHgwMCwgMHgwMSwgMHg2NSwgMHg4OCwgMHg4MiwgMHgwMCwgMHgzZiwgMHg3MCwgMHgyMywgMHg4NiwgMHhlNiwgMHhkMSwgMHg4MCwgMHgwOSwgMHhhZiwgMHgwYSwgMHg0MSwgMHg2NiwgMHg2YiwgMHg1NCwgMHg0NiwgMHhmYiwgMHg3MSwgMHhkOSwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmOV0pLCAvLyBTbGljZSBsYXllcjogaWRyIGRhdGFcbiAgICBWUDg6IG5ldyBVaW50OEFycmF5KFsweGIwLCAweDAyLCAweDAwLCAweDlkLCAweDAxLCAweDJhLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDM5LCAweDZiLCAweDAwLCAweDI3LCAweDFjLCAweDI0LCAweDBjLCAweDJjLCAweDJjLCAweDQ0LCAweGNjLCAweDI0LCAweDQxLCAweGE4LCAweDAwLCAweDEzLCAweGE3LCAweGEzLCAweDdhLCAweDUwLCAweDAwLCAweGZlLCAweGViLCAweGRlLCAweDJmLCAweDhhLCAweDFlLCAweDZiLCAweDdiLCAweDA3LCAweDcyLCAweDYzLCAweDA5LCAweGE0LCAweDhlLCAweGMwXSksXG4gICAgVlA5OiBuZXcgVWludDhBcnJheShbMHg4MiwgMHg0OSwgMHg4MywgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg3NiwgMHgzOCwgMHgyNCwgMHgxYywgMHgxOSwgMHhhMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgMHgwMCwgMHgxMSwgMHhiZiwgMHhkZCwgMHg3NywgMHhmZiwgMHg0MCwgMHg3ZiwgMHhiMSwgMHgwMF0pXG4gIH07XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMgPSB7XG4gICAgSDI2NDogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOSwgMHhmMCwgLy8gQWNjZXNzIHVuaXQgZGVsaW1pdGVyXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQxLCAweDlhLCAweDY4LCAweDQ5LCAweGE4LCAweDQxLCAweDY4LCAweDk5LCAweDRjLCAweDBmLCAweGZmLCAweDkyLCAweDgxXSksIC8vIFNsaWNlIGxheWVyOiBub24gaWRyIGRhdGFcbiAgICBWUDg6IG5ldyBVaW50OEFycmF5KFsweDMxLCAweDAzLCAweDAwLCAweGU0LCAweGUwLCAweGE4LCAweDliLCAweDM3LCAweGFmLCAweDEwLCAweDRmLCAweDRmLCAweGIxLCAweDBhLCAweDJmLCAweGU0LCAweDkyLCAweGMwLCAweDFmLCAweGU3LCAweDRmLCAweDQ2LCAweGZmLCAweGVlLCAweDUxLCAweGMxLCAweDVkLCAweDAwLCAweGZlLCAweGViLCAweGRlLCAweDJmLCAweDhhLCAweDFlLCAweDZiLCAweDdiLCAweDA3LCAweDcyLCAweDYzLCAweDA5LCAweGE0LCAweDhlLCAweGMwXSksXG4gICAgVlA5OiBuZXcgVWludDhBcnJheShbMHg4NiwgMHgwMCwgMHg0MCwgMHg5MiwgMHg5YywgMHgyNCwgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMywgMHg3MCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg0MF0pXG4gIH07XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teTgyeDgySDI2NCA9IHtcbiAgICBJRnJhbWU6IG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjcsIDB4NDIsIDB4YzAsIDB4MGQsIDB4ZGEsIDB4MTgsIDB4ZGUsIDB4MjIsIDB4MjIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDMsIDB4YzgsIDB4ZjEsIDB4NDIsIDB4YWEsIC8vIFNlcXVlbmNlIHBhcmFtZXRlciBzZXRcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjgsIDB4Y2UsIDB4MGYsIDB4YzgsIC8vIFBpY3R1cmUgcGFyYW1ldGVyIHNldFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNiwgMHgwMywgLi4ubmV3IFVpbnQ4QXJyYXkoNDApLmZpbGwoMHhmZiksIDB4NWYsIC4uLm5ldyBVaW50OEFycmF5KDEwMjk1KS5maWxsKDB4ZmYpLCAweDgwLCAvLyBTdXBwbGVtZW50YWwgZW5oYW5jZW1lbnQgaW5mb3JtYXRpb24gKFNFSSlcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjUsIDB4ODgsIDB4ODQsIDB4MDUsIC4uLm5ldyBVaW50OEFycmF5KDMpLmZpbGwoMHhmZiksIDB4MGYsIDB4NDUsIDB4MDAsIDB4MDEsIDB4NTcsIDB4OWYsIDB4MjcsIDB4MjcsIDB4MjcsIDB4MjcsIDB4MjcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzhdKSwgLy8gU2xpY2UgbGF5ZXI6IElkciBkYXRhXG4gICAgUEZyYW1lOiBuZXcgVWludDhBcnJheShbXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA2LCAweDAzLCAuLi5uZXcgVWludDhBcnJheSg0MCkuZmlsbCgweGZmKSwgMHhhNCwgLi4ubmV3IFVpbnQ4QXJyYXkoMTAzNjQpLmZpbGwoMHhmZiksIDB4ODAsIC8vIFNFSVxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0MSwgMHg5YSwgMHgyMCwgMHgxNSwgMHhmMCwgMHg0Yl0pIC8vIFNsaWNlIGxheWVyOiBub24gaWRyIGRhdGFcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15ODJ4ODJIMjY0UEZyYW1lRnJhbWVOdW1iZXJJbmRleCA9IDEwNDE4O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0ID0gMTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc01vYmlsZUNocm9tZSB8fCBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc1NhZmFyaTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XG5cbiAgc3RhdGljIGdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMoY29kZWM6IHN0cmluZyk6IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ09QVVMnOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teUF1ZGlvU2lsZW50UGVyQ29kZWMuT1BVUy5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSgpOiBBcnJheUJ1ZmZlciB7XG4gICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdXJyb2dhdGVWaWRlb0lGcmFtZVBlckNvZGVjKGNvZGVjOiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoIChjb2RlYy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdIMjY0Jzoge1xuICAgICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xuICAgICAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XG5cbiAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjQuSUZyYW1lLmJ1ZmZlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuSDI2NC5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1ZQOCc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5WUDguYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdWUDknOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuVlA5LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUoY29kZWM6IHN0cmluZyk6IFN1cnJvZ2F0ZUZyYW1lVHlwZSB7XG4gICAgaWYgKChjb2RlYy50b1VwcGVyQ2FzZSgpID09PSAnSDI2NCcpICYmIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcbiAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XG5cbiAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc0FuZHJvaWRDaHJvbWUpIHtcbiAgICAgICAgcmV0dXJuIFNraXBGcmFtZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICB9XG5cbiAgc3RhdGljIGdldFN1cnJvZ2F0ZVZpZGVvUEZyYW1lUGVyQ29kZWMoY29kZWM6IHN0cmluZyk6IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ0gyNjQnOiB7XG4gICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XG4gICAgICAgICAgY29uc3QgYnVmZmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyKCk7XG5cbiAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYy5IMjY0LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnVlA4Jzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLlZQOC5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1ZQOSc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYy5WUDkuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZShjb2RlYzogc3RyaW5nKTogU3Vycm9nYXRlRnJhbWVUeXBlIHtcbiAgICBpZiAoKGNvZGVjLnRvVXBwZXJDYXNlKCkgPT09ICdIMjY0JykgJiYgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xuICAgICAgY29uc3Qgc2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXI7XG4gICAgICBjb25zdCBidWZmZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTtcblxuICAgICAgaWYgKHNhdmVkU3Vycm9nYXRlRnJhbWVOdW1iZXIgPiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQpIHtcbiAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzQW5kcm9pZENocm9tZSkge1xuICAgICAgICAgIHJldHVybiBTa2lwRnJhbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKys7XG5cbiAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTogQXJyYXlCdWZmZXIge1xuICAgIGNvbnN0IGJpdE1hc2sxID0gMHgwZTtcbiAgICBjb25zdCBiaXRNYXNrMiA9IDB4MDE7XG4gICAgY29uc3QgYml0U2hpZnRSaWdodEJ5MSA9IDE7XG4gICAgY29uc3QgYml0U2hpZnRMZWZ0Qnk3ID0gNztcbiAgICBjb25zdCBieXRlMSA9ICgoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciAmIGJpdE1hc2sxKSA+PiBiaXRTaGlmdFJpZ2h0QnkxKTtcbiAgICBjb25zdCBieXRlMiA9ICgoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciAmIGJpdE1hc2syKSA8PCBiaXRTaGlmdExlZnRCeTcpO1xuICAgIGNvbnN0IGNvcHlPZkR1bW15UEZyYW1lcyA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15ODJ4ODJIMjY0LlBGcmFtZS5zbGljZSgpO1xuICAgIGNvbnN0IGJ1ZmZlciA9IGNvcHlPZkR1bW15UEZyYW1lcy5idWZmZXI7XG4gICAgY29uc3QgYnVmZmVySW5kZXggPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NFBGcmFtZUZyYW1lTnVtYmVySW5kZXg7XG5cbiAgICBidWZmZXJbYnVmZmVySW5kZXhdIHw9IGJ5dGUxO1xuICAgIGJ1ZmZlcltidWZmZXJJbmRleCArIDFdIHw9IGJ5dGUyO1xuICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIrKztcblxuICAgIHJldHVybiBidWZmZXI7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19CVUlMRF9WRVJTSU9OX186IHN0cmluZztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVyc2lvbk1hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBfZGVmYXVsdFZlcnNpb24gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgc3RhdGljIGdldCBzZGtWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBfX0JVSUxEX1ZFUlNJT05fXztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZlcnNpb247XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5U2VydmljZSBmcm9tICcuL1RlbGVtZXRyeVNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuLi9sb2dnZXIvSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5QXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZWxlbWV0cnlTZXJ2aWNlOiBUZWxlbWV0cnlTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeTtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZDtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZDtcbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlID0gbmV3IFRlbGVtZXRyeVNlcnZpY2UodGVsZW1ldHJ5Q29uZmlndXJhdGlvbik7XG4gIH1cblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZS5wdXNoKGxvZ0xldmVsLCBtZXNzYWdlLCBjYXRlZ29yeSwgZGF0ZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L2xvZ3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlVcmwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgPSB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgKyAnL2xvZ3MnO1xuXG4gICAgdGhpcy5fdXJsID0gdGVsZW1ldHJ5VXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHNldCBwYWdlTG9hZFRpbWUocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBOdW1iZXJzIGZyb20gJy4uL2xhbmcvTnVtYmVycyc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIF9sb2dzOiBBcnJheTxJTG9nSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgdGltZXN0YW1wOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgcnVudGltZSA9ICh0aW1lc3RhbXAudmFsdWVPZigpIC0gdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5wYWdlTG9hZFRpbWUpIC8gMTAwMDtcbiAgICBjb25zdCBsb2dSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcC50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgbGV2ZWw6IExvZ2dpbmdMZXZlbFtsb2dMZXZlbF0sXG4gICAgICBjYXRlZ29yeSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpbixcbiAgICAgIHJ1bnRpbWVcbiAgICB9O1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICB0aGlzLl9sb2dzLnB1c2gobG9nUmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9ncy51bnNoaWZ0KGxvZ1JlY29yZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3MobG9nTWVzc2FnZXM6IEFycmF5PElMb2dJdGVtPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbG9nTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZmV0Y2godGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbG9ncy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMDtcbiAgICBsZXQgc2l6ZU9mTG9nc1RvU2VuZCA9IDA7XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZ2V0SXRlbVNpemUgPSBpdGVtID0+IHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJyA/IE51bWJlcnMuY291bnROdW1iZXJMZW5ndGgoaXRlbSkgOiBpdGVtLmxlbmd0aDtcbiAgICBjb25zdCBnZXRMb2dTaXplID0gKGxvZzogSUxvZ0l0ZW0pOiBudW1iZXIgPT4gT2JqZWN0LnZhbHVlcyhsb2cpXG4gICAgICAucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIChpdGVtID8gZ2V0SXRlbVNpemUoaXRlbSkgOiAwKSwgMCk7XG5cbiAgICB3aGlsZSAodGhpcy5fbG9ncy5sZW5ndGggPiBudW1iZXJPZkxvZ3NUb1NlbmQgJiYgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgc2l6ZU9mTG9nc1RvU2VuZCA8IHJlcXVlc3RTaXplTGltaXQpIHtcbiAgICAgIHNpemVPZkxvZ3NUb1NlbmQgKz0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kKys7XG4gICAgfVxuXG4gICAgaWYgKCFudW1iZXJPZkxvZ3NUb1NlbmQpIHtcbiAgICAgIHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlID0gdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsXG4gICAgICAgIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIChyZXF1ZXN0U2l6ZUxpbWl0IC0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pKSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQgPSAxO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ01lc3NhZ2VzID0gdGhpcy5fbG9ncy5zbGljZSgwLCBudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgdGhpcy5fbG9ncyA9IHRoaXMuX2xvZ3Muc2xpY2UobnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRMb2dzKGxvZ01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHVyYXRpb25zIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZHVyYXRpb246IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihkdXJhdGlvbiA9IDApIHtcbiAgICB0aGlzLl9kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICB9XG5cbiAgdG9Jc29TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fZHVyYXRpb24gPT09IDApIHtcbiAgICAgIHJldHVybiAnUDBTJztcbiAgICB9XG5cbiAgICBjb25zdCBpc05lZ2F0aXZlID0gdGhpcy5fZHVyYXRpb24gPCAwO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gaXNOZWdhdGl2ZSA/IE1hdGguYWJzKHRoaXMuX2R1cmF0aW9uKSA6IHRoaXMuX2R1cmF0aW9uO1xuICAgIGxldCBvZmZzZXQgPSBNYXRoLmZsb29yKGR1cmF0aW9uKTtcbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBvZmZzZXQgJSAxMDAwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyAxMDAwKTtcblxuICAgIGNvbnN0IHNlY29uZHMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgbWludXRlcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBob3VycyA9IG9mZnNldCAlIDI0O1xuICAgIGNvbnN0IHBhcnRzID0gWydQVCddO1xuXG4gICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy0nKTtcbiAgICB9XG5cbiAgICBpZiAoaG91cnMpIHtcbiAgICAgIHBhcnRzLnB1c2goaG91cnMgKyAnSCcpO1xuICAgIH1cblxuICAgIGlmIChtaW51dGVzKSB7XG4gICAgICBwYXJ0cy5wdXNoKG1pbnV0ZXMgKyAnTScpO1xuICAgIH1cblxuICAgIGlmIChzZWNvbmRzIHx8IG1pbGxpc2Vjb25kcykge1xuICAgICAgcGFydHMucHVzaChTdHJpbmcoc2Vjb25kcykpO1xuXG4gICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgIHBhcnRzLnB1c2goJy4nICsgdGhpcy5wYWRTdGFydChtaWxsaXNlY29uZHMudG9TdHJpbmcoKSwgMywgJzAnKSk7XG4gICAgICB9XG5cbiAgICAgIHBhcnRzLnB1c2goJ1MnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydHMuam9pbignJyk7XG4gIH1cblxuICBwYWRTdGFydChpdGVtOiBzdHJpbmcsIHRhcmdldExlbmd0aDogbnVtYmVyLCBwYWRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoID4+IDA7XG4gICAgcGFkU3RyaW5nID0gU3RyaW5nKCh0eXBlb2YgcGFkU3RyaW5nICE9PSAndW5kZWZpbmVkJyA/IHBhZFN0cmluZyA6ICcgJykpO1xuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoID4gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggLSBpdGVtLmxlbmd0aDtcblxuICAgIGlmICh0YXJnZXRMZW5ndGggPiBwYWRTdHJpbmcubGVuZ3RoKSB7XG4gICAgICBwYWRTdHJpbmcgKz0gcGFkU3RyaW5nLnJlcGVhdCh0YXJnZXRMZW5ndGggLyBwYWRTdHJpbmcubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFkU3RyaW5nLnNsaWNlKDAsIHRhcmdldExlbmd0aCkgKyBpdGVtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMjAwMDtcbmNvbnN0IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMTtcbmNvbnN0IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMzAwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBvbmVudGlhbEJhY2tvZmYge1xuICBwcml2YXRlIHJlYWRvbmx5IF9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kXG4gICkge1xuICAgIHRoaXMuX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICB9XG5cbiAgZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudChmYWlsdXJlQ291bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYmFja29mZkludGVydmFsSW5TZWNvbmRzID0gdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCAvIDEwMDA7XG4gICAgY29uc3QgcmFuZG9taXphdGlvbiA9IDAuNSArICgwLjUgKiBNYXRoLnJhbmRvbSgpKTsgLy8gWzAuNSwgMSlcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmYgPSBNYXRoLnBvdyhiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMsIGZhaWx1cmVDb3VudCAtIDIpOyAvLyAgWzEvNCAxLzIgMSAyIDQgOCAuLi4uXVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uID0gTWF0aC5mbG9vcihleHBvbmVudGlhbEJhY2tvZmYpICogcmFuZG9taXphdGlvbjtcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQgPSBNYXRoLmNlaWwoTWF0aC5tYXgoZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gKiAxMDAwLCB0aGlzLl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKSk7XG5cbiAgICByZXR1cm4gTWF0aC5taW4oZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kLCB0aGlzLl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaW1lbnNpb24gaW1wbGVtZW50cyBJQ29tcGFyYWJsZTxEaW1lbnNpb24+IHtcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXI7XG5cbiAgc3RhdGljIGdldCBlbXB0eSgpOiBEaW1lbnNpb24ge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9uKDAsIDApO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IERpbWVuc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLndpZHRoID09PSBvdGhlci53aWR0aCAmJiB0aGlzLmhlaWdodCA9PT0gb3RoZXIuaGVpZ2h0O1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aH14JHt0aGlzLmhlaWdodH1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1N0cmVhbVNldHVwTGlzdGVuZXJ9IGZyb20gJy4uL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTmV0d29ya01vbml0b3IgZnJvbSAnLi4vZG9tL05ldHdvcmtNb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSU5ldHdvcmtTdGF0aXN0aWNzIHtcbiAgcnR0PzogbnVtYmVyO1xuICBlZmZlY3RpdmVUeXBlPzogc3RyaW5nO1xuICBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvblRlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1Nlc3Npb25UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IFNESy5hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29ya01vbml0b3I6IE5ldHdvcmtNb25pdG9yID0gbmV3IE5ldHdvcmtNb25pdG9yKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfbGFzdE5ldHdvcmtTdGF0aXN0aWNzOiBJTmV0d29ya1N0YXRpc3RpY3MgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvcik7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcblxuICAgIGlmICghdGhpcy5fbmV0d29ya01vbml0b3IuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuaXNGb3JlZ3JvdW5kLnN1YnNjcmliZShpc0ZvcmVncm91bmQgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5ydHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1JUVFVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5lZmZlY3RpdmVUeXBlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICB9XG5cbiAgbGlzdGVuT25TdHJlYW1TZXR1cCgpOiBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbVNldHVwTGlzdGVuZXIodGhpcy5fcGFnZUxvYWRUaW1lKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdENoYW5nZSA9IHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogaXNGb3JlZ3JvdW5kID8gTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kIDogTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZUxhc3RDaGFuZ2V9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdBcHBsaWNhdGlvbiBoYXMgZ29uZSBpbnRvIHRoZSBbJXNdIGFmdGVyIFslc10gbXMnLFxuICAgICAgaXNGb3JlZ3JvdW5kID8gJ2ZvcmVncm91bmQnIDogJ2JhY2tncm91bmQnLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VMYXN0Q2hhbmdlKS50b0lzb1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtSVFRVcGRhdGUobmV3UlRUOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZFJ0dCA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQ7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0ID0gbmV3UlRUO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IG5ld1JUVH0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRSdHQgPyB7dWludDY0OiBvbGRSdHR9IDogdW5kZWZpbmVkLFxuICAgICAgcmVzb3VyY2U6ICduYXZpZ2F0b3InXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgUlRUIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdSVFQsXG4gICAgICBvbGRSdHRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZShuZXdOZXR3b3JrVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGROZXR3b3JrVHlwZSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlO1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGUgPSBuZXdOZXR3b3JrVHlwZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuTmV0d29ya1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3TmV0d29ya1R5cGV9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkTmV0d29ya1R5cGUgPyB7c3RyaW5nOiBvbGROZXR3b3JrVHlwZX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBlZmZlY3RpdmUgdHlwZSBoYXMgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld05ldHdvcmtUeXBlLFxuICAgICAgb2xkTmV0d29ya1R5cGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUobmV3Q2FwYWNpdHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkQ2FwYWNpdHkgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkgPSBuZXdDYXBhY2l0eTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge2Zsb2F0OiBuZXdDYXBhY2l0eX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRDYXBhY2l0eSA/IHtmbG9hdDogb2xkQ2FwYWNpdHl9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZG93bmxpbmsgdGhyb3VnaHB1dCBjYXBhY2l0eSBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3Q2FwYWNpdHksXG4gICAgICBvbGRDYXBhY2l0eVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlkZW9UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfbGlzdGVuVG9GaXJzdFRpbWU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvclN0YWxsOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JDb250aW51YXRpb246IChldmVudCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1N0YWxsZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbGFzdFByb2dyZXNzOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvUmVzb2x1dGlvbjogc3RyaW5nO1xuICBwcml2YXRlIF9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcjogRGlzcG9zYWJsZTtcbiAgcHJpdmF0ZSBfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyOiBEaXNwb3NhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUlkOiBzdHJpbmcsIHBhZ2VMb2FkVGltZTogbnVtYmVyLCBjaGFubmVsU3RhcnRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBjaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUgPSAoKTogdm9pZCA9PiB0aGlzLmNhbGxUaW1lVG9GaXJzdEZyYW1lKCk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbkZvclN0YWxsID0gKCk6IHZvaWQgPT4gdGhpcy5vblN0YWxsKCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24gPSAoZXZlbnQpOiB2b2lkID0+IHRoaXMub25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG5cbiAgICB0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcik7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGR1cmF0aW9uU2luY2VQYWdlTG9hZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGxUaW1lVG9GaXJzdEZyYW1lKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG4gICAgdGhpcy5wdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl90aW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gRmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl90aW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX2NoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBDaGFubmVsIGNyZWF0aW9uIHRvIGZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uU3RhbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZpZGVvU3RhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuU3RhbGxlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyBzdGFsbGVkJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pOiB2b2lkIHtcbiAgICBpZiAoIXZpZGVvLmJ1ZmZlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdmlkZW8uYnVmZmVyZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ3BsYXlpbmcnXG4gICAgfHwgYnVmZmVyTGVuZ3RoID4gMCA/IChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnXG4gICAgICB8fCBldmVudC50eXBlID09PSAndGltZXVwZGF0ZScpXG4gICAgICAmJiB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSkgPT09IHRoaXMuX2xhc3RQcm9ncmVzcyA6IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX3ZpZGVvU3RhbGxlZCB8fCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlU3RvcCA9IERhdGUubm93KCkgLSB0aGlzLl92aWRlb1N0YWxsZWQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkJ1ZmZlcmluZyxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlU3RvcH0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHJlY292ZXJlZCBmcm9tIHN0YWxsIGFmdGVyIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlU3RvcCkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhuZXdSZXNvbHV0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdSZXNvbHV0aW9ufSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA/IHtzdHJpbmc6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbn0gOiB1bmRlZmluZWQsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA9IG5ld1Jlc29sdXRpb247XG4gIH1cbn0iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHRpZihfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdKSB7XG5cdFx0cmV0dXJuIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0uZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiBtb2R1bGVbJ2RlZmF1bHQnXSA6XG5cdFx0KCkgPT4gbW9kdWxlO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiLy8gVGhpcyBmdW5jdGlvbiBhbGxvdyB0byByZWZlcmVuY2UgYXN5bmMgY2h1bmtzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoY2h1bmtJZCkgPT4ge1xuXHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcblx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuanNcIjtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsInZhciBzY3JpcHRVcmw7XG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMpIHNjcmlwdFVybCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbiArIFwiXCI7XG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdClcblx0XHRzY3JpcHRVcmwgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyY1xuXHRpZiAoIXNjcmlwdFVybCkge1xuXHRcdHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG5cdFx0aWYoc2NyaXB0cy5sZW5ndGgpIHNjcmlwdFVybCA9IHNjcmlwdHNbc2NyaXB0cy5sZW5ndGggLSAxXS5zcmNcblx0fVxufVxuLy8gV2hlbiBzdXBwb3J0aW5nIGJyb3dzZXJzIHdoZXJlIGFuIGF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgeW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQucHVibGljUGF0aCBtYW51YWxseSB2aWEgY29uZmlndXJhdGlvblxuLy8gb3IgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpIGFuZCBzZXQgdGhlIF9fd2VicGFja19wdWJsaWNfcGF0aF9fIHZhcmlhYmxlIGZyb20geW91ciBjb2RlIHRvIHVzZSB5b3VyIG93biBsb2dpYy5cbmlmICghc2NyaXB0VXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbnNjcmlwdFVybCA9IHNjcmlwdFVybC5yZXBsYWNlKC8jLiokLywgXCJcIikucmVwbGFjZSgvXFw/LiokLywgXCJcIikucmVwbGFjZSgvXFwvW15cXC9dKyQvLCBcIi9cIik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBzY3JpcHRVcmw7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5iID0gZG9jdW1lbnQuYmFzZVVSSSB8fCBzZWxmLmxvY2F0aW9uLmhyZWY7XG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4vLyB1bmRlZmluZWQgPSBjaHVuayBub3QgbG9hZGVkLCBudWxsID0gY2h1bmsgcHJlbG9hZGVkL3ByZWZldGNoZWRcbi8vIFByb21pc2UgPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHRcImNoYW5uZWxzXCI6IDBcbn07XG5cblxuLy8gbm8gY2h1bmsgb24gZGVtYW5kIGxvYWRpbmdcblxuLy8gbm8gcHJlZmV0Y2hpbmdcblxuLy8gbm8gcHJlbG9hZGVkXG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3RcblxuLy8gbm8gZGVmZXJyZWQgc3RhcnR1cFxuXG4vLyBubyBqc29ucCBmdW5jdGlvbiIsIi8vIG1vZHVsZSBleHBvcnRzIG11c3QgYmUgcmV0dXJuZWQgZnJvbSBydW50aW1lIHNvIGVudHJ5IGlubGluaW5nIGlzIGRpc2FibGVkXG4vLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbnJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvc2RrL2NoYW5uZWxzL2luZGV4LnRzXCIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
11142
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vTmV0d29ya01vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZVRva2VuLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvUGFyYW1ldGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGVMaXN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL051bWJlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvU3RyaW5ncy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9hc3NlcnRVbnJlYWNoYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0FwcGVuZGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0NvbnNvbGVBcHBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckRlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nVGhyZXNob2xkLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZUhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvU2RwUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvUmVhZE9ubHlTdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9TdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvRW52aXJvbm1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9TREsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9UZWxlbWV0cnlVcmwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbFN0YXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvQ2hhbm5lbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvU3RhdGVDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9TdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9Ub2tlbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlTW9kZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZVN0YXRlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRW5kUG9pbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvQ2h1bmtlZFN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9DaHVua2VkU3RyZWFtaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0hsc1BsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9OZXR3b3JrU3RhdGVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1JlYWxUaW1lU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1NoYWthUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvV2ViUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9JbnNlcnRhYmxlU3RyZWFtcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9EaW1lbnNpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2dldCBqYXZhc2NyaXB0IGNodW5rIGZpbGVuYW1lIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2pzb25wIGNodW5rIGxvYWRpbmciLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6WyJkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCIsIkFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnR5IiwiRGlzcG9zYWJsZUxpc3QiLCJEYXRlIiwibm93IiwiX2lzRm9yZWdyb3VuZCIsIlN1YmplY3QiLCJfcmVhZE9ubHlJc0ZvcmVncm91bmQiLCJSZWFkT25seVN1YmplY3QiLCJkZXRlY3RUYWJGb2N1c0NoYW5nZSIsIl9jcmVhdGVDbGFzcyIsImtleSIsImdldCIsInZhbHVlIiwiZ2V0VGltZVNpbmNlTGFzdENoYW5nZSIsIl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2UiLCJkaXNwb3NlIiwiX2Rpc3Bvc2FibGVzIiwiX3RoaXMiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Q2hhbmdlIiwiZG9jdW1lbnQiLCJfdHlwZW9mIiwibXNIaWRkZW4iLCJ3ZWJraXRIaWRkZW4iLCJoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlIiwiaXNGb3JlZ3JvdW5kIiwic2V0Rm9jdXNTdGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJhZGQiLCJEaXNwb3NhYmxlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImxpc3RlbkZvckRvY3VtZW50Rm9jdXMiLCJjYWxsIiwiX3RoaXMyIiwiX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCIsIndpbmRvdyIsInNldEludGVydmFsIiwiaGFzRm9jdXMiLCJjbGVhckludGVydmFsIiwiQnJvd3NlckRldGVjdG9yIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIl9icm93c2VyTmFtZSIsIl9icm93c2VyTWFqb3JWZXJzaW9uIiwiX2lzQW5kcm9pZCIsIl9pc0Nocm9tZTY5IiwiX2lzQ2hyb21lNzAiLCJfaXNDaHJvbWU3MSIsIl9pc0Nocm9tZTcyIiwiX2lzQ2hyb21lNzQiLCJfaXNDaHJvbWU3NSIsIl9pc0Nocm9tZTc2IiwiX2lzQ2hyb21lNzciLCJpc01vYmlsZSIsIl9pc01vYmlsZSIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibWF0Y2giLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFIiwicGFyc2VCcm93c2VyTmFtZSIsImJyb3dzZXJOYW1lTGlzdCIsInNwbGl0IiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiYnJvd3NlclZlcnNpb25MaXN0IiwiZnVsbFZlcnNpb24iLCJOdW1iZXIiLCJtc2llIiwiaW5kZXhPZiIsImNvbmNhdCIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwidHJpZGVudCIsInZlcnNpb24iLCJfQnJvd3NlckRldGVjdG9yIiwidGVzdCIsIl9uYXZpZ2F0b3IiLCJfbmF2aWdhdG9yMiIsImluY2x1ZGVzIiwiQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsImdldFN0cmluZ1ZhbHVlIiwibmFtZSIsInJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlIiwiZGVmYXVsdFN0cmluZ1ZhbHVlIiwiZ2V0Qm9vbGVhblZhbHVlIiwidmFsdWVGcm9tVXJpIiwiZGVmYXVsdEJvb2xlYW5WYWx1ZSIsIlRlbGVtZXRyeUxldmVsTWFwcGluZyIsIlRlbGVtZXRyeURlZmF1bHQiLCJMb2dnaW5nTGV2ZWxNYXBwaW5nIiwiTG9nZ2VyRGVmYXVsdHMiLCJtZXRhVmFsdWUiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0QXR0cmlidXRlIiwidmFsdWVVUklQYXJhbWV0ZXJOYW1lIiwiVVJMU2VhcmNoUGFyYW1zIiwibG9jYXRpb24iLCJzZWFyY2giLCJ1bmRlZmluZWQiLCJHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciIsIkVycm9yIiwiZm9yY2VHYXJiYWdlQ29sbGVjdGlvbiIsIkZlYXR1cmVFbmFibGVtZW50IiwiZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbiIsInF1ZXVlTWljcm90YXNrIiwib3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uIiwic2V0VGltZW91dCIsImltZyIsImNyZWF0ZUVsZW1lbnQiLCJzcmMiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJCbG9iIiwiQXJyYXlCdWZmZXIiLCJvbmVycm9yIiwicmV2b2tlT2JqZWN0VVJMIiwiTmV0d29ya01vbml0b3IiLCJpc1N1cHBvcnRlZCIsInNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycyIsInVwZGF0ZVN0YXRpc3RpY3MiLCJfaXNTdXBwb3J0ZWQiLCJfcnR0IiwiX2VmZmVjdGl2ZVR5cGUiLCJfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImRvd25saW5rIiwiZG93bmxpbmtNYXgiLCJnZXRFZmZlY3RpdmVUeXBlIiwiZWZmZWN0aXZlVHlwZSIsInR5cGUiLCJnZXRSb3VuZFRyaXBUaW1lIiwicnR0IiwibGlzdGVuZXIiLCJTdHJlYW1TZXR1cExpc3RlbmVyIiwicGFnZUxvYWRUaW1lIiwiTG9nZ2VyRmFjdG9yeSIsIlNESyIsIl9zdGFydFRpbWUiLCJfcGFnZUxvYWRUaW1lIiwic3VjY2VzcyIsInN0cmVhbUlkIiwicmVjb3JkU3RyZWFtTWV0cmljIiwiTWV0cmljc1R5cGUiLCJmYWlsIiwibWV0cmljVHlwZSIsIl9tZXRyaWNTdWJtaXR0ZWQiLCJzZXR1cFRpbWUiLCJtZXRyaWNOYW1lIiwiTWV0cmljVHlwZSIsImdldE5hbWUiLCJtZXRyaWNzU2VydmljZSIsInB1c2giLCJydW50aW1lIiwidWludDY0IiwiX2xvZ2dlciIsImluZm8iLCJEdXJhdGlvbnMiLCJ0b0lzb1N0cmluZyIsImVkZ2VBdXRoVG9rZW5QcmVmaXgiLCJFZGdlQXV0aFBhcnNlciIsInBhcnNlVG9rZW4iLCJ0b2tlbiIsImlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkIiwiZXJyb3IiLCJFZGdlVG9rZW4iLCJkZWNvZGVkVG9rZW4iLCJhdG9iIiwic3Vic3RyIiwibGVuZ3RoIiwiZWRnZVRva2VuIiwiSlNPTiIsInBhcnNlIiwiZSIsInN0YXJ0c1dpdGgiLCJfZWRnZVRva2VuJHRva2VuIiwiX2VkZ2VUb2tlbiR0b2tlbjIiLCJfYXBwbGljYXRpb25JZCIsImFwcGxpY2F0aW9uSWQiLCJfdG9rZW4iLCJ1cmkiLCJjYXBhYmlsaXRpZXMiLCJCdWlsZEZlYXR1cmVzIiwiX3NlbmRMb2NhbENhbmRpZGF0ZXMiLCJfc2VuZExvZ3MiLCJfc2VuZE1ldHJpY3MiLCJfbG9nVG9Db25zb2xlIiwiYXBwbHlGZWF0dXJlcyIsImZlYXR1cmVzIiwiX19GRUFUVVJFU19fIiwic2VuZExvY2FsQ2FuZGlkYXRlcyIsInNlbmRMb2dzIiwic2VuZE1ldHJpY3MiLCJsb2dUb0NvbnNvbGUiLCJfZG9jdW1lbnQiLCJNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yIiwiTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciIsIlJUQ1J0cFJlY2VpdmVyIiwicHJvdG90eXBlIiwiY3JlYXRlRW5jb2RlZFN0cmVhbXMiLCJSVENSdHBTY3JpcHRUcmFuc2Zvcm0iLCJQYXJhbWV0ZXJzIiwiX2Rpc2NvdmVyeVBhcmFtZXRlcnMiLCJhcHBseVBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzIiwiX19QQVJBTUVURVJTX18iLCJkaXNjb3ZlcnkiLCJpbnRlbnRpb25zIiwiZGlzcG9zYWJsZSIsIl9kaXNwb3NlZCIsIl9kaXNwb3NhYmxlIiwiX2xpc3QiLCJmb3JFYWNoIiwidG9TdHJpbmciLCJtYXhEaWdpdHNJbkZsb2F0QWZ0ZXJEb3QiLCJOdW1iZXJzIiwiY291bnROdW1iZXJMZW5ndGgiLCJpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlIiwibnVtYmVyIiwiY291bnREaWdpdHNCZWZvcmVEZWNpbWFsIiwiTWF0aCIsImZsb29yIiwiY291bnREaWdpdHNBZnRlckRlY2ltYWwiLCJmaXhSb3VuZGluZyIsInByZWNpc2lvbiIsInBvd2VyIiwicG93Iiwicm91bmQiLCJkaWdpdHNCZWZvcmVEZWNpbWFsIiwib3JpZ2luYWxWYWx1ZSIsIm1vZGlmaWVkVmFsdWUiLCJjb3VudCIsIlN0cmluZ3MiLCJyYW5kb20iLCJyYW5kb20xM0NoYXJhY3RlcnMiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwiTG9nZ2VyIiwiYXBwZW5kZXJzIiwiX2NhdGVnb3J5IiwidHJhY2UiLCJUcmFjZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsImRlYnVnIiwiRGVidWciLCJfbGVuMiIsIl9rZXkyIiwiSW5mbyIsIl9sZW4zIiwiX2tleTMiLCJ3YXJuIiwiV2FybiIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiZmF0YWwiLCJGYXRhbCIsIl9sZW42IiwiX2tleTYiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJnZXRMb2dnZXIiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlIiwibG9nZ2luZ0xldmVsIiwiY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIlRlbGVtZXRyeUxldmVsIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwic2V0IiwidXJsIiwibWV0cmljc1VybCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc0ZhY3RvcnkiLCJnZXRNZXRyaWNzU2VydmljZSIsIm1ldHJpY3NTZXJ2aWNlcyIsIl9tZXRyaWNzU2VydmljZXMiLCJtZXRyaWNzQ29uZmlndXJhdGlvbiIsIlRlbGVtZXRyeVVybCIsIkVudmlyb25tZW50IiwiTWV0cmljc1NlcnZpY2UiLCJzZXRUZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwicmVxdWVzdFNpemVMaW1pdCIsIm1heEJ1ZmZlcmVkUmVjb3JkcyIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwiX2V4cG9uZW50aWFsQmFja29mZiIsIkV4cG9uZW50aWFsQmFja29mZiIsIm1ldHJpYyIsInByZXZpb3VzVmFsdWUiLCJyZXNvdXJjZSIsImtpbmQiLCJtZXRyaWNSZWNvcmQiLCJ0aW1lc3RhbXAiLCJmdWxsUXVhbGlmaWVkTmFtZSIsIl9kb21haW4iLCJWZXJzaW9uTWFuYWdlciIsImlnbm9yZWQiLCJzZW5kTWV0cmljc0lmQWJsZSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIl9jYWxsZWUiLCJtZXRyaWNzTWVzc2FnZXMiLCJmb3JtRGF0YSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIkZvcm1EYXRhIiwiYXBwZW5kIiwicmVjb3JkcyIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsImFicnVwdCIsInNlbnQiLCJzdG9wIiwiX3giLCJhcHBseSIsIl9zZW5kTWV0cmljc0lmQWJsZSIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiX2lzU2VuZGluZyIsInNsaWNlIiwidGhlbiIsInJlc3BvbnNlIiwiaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUiLCJfZmFpbHVyZUNvdW50IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCIsImNhdGNoIiwiX3JlZiIsInN0YXR1cyIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlIiwiY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbFR5cGUiLCJQcm9taXNlIiwiY2FsbGJhY2siLCJUeXBlRXJyb3IiLCJfc3RhdGUiLCJfaGFuZGxlZCIsIl92YWx1ZSIsIl9kZWZlcnJlZHMiLCJkb1Jlc29sdmUiLCJkb25lIiwicHJvbWlzZVJlc29sdmUiLCJyZWFzb24iLCJwcm9taXNlUmVqZWN0IiwibmV3VmFsdWUiLCJwcm9taXNlIiwiZmluYWxlIiwiX2ltbWVkaWF0ZSIsIl91bmhhbmRsZWRSZWplY3Rpb24iLCJpIiwibGVuIiwiaGFuZGxlIiwiZGVmZXJyZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyZXN1bHQiLCJhbGwiLCJhcnIiLCJyZXNvbHZlIiwicmVqZWN0IiwiaXNBcnJheSIsInJlbWFpbmluZyIsIm1hbmFnZVJlc3BvbnNlIiwiY29uc3RydWN0b3IiLCJfIiwicmFjZSIsIlByb21pc2VIYW5kbGVyIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhY2hlZCIsImRpcmVjdGlvbiIsInBlZXJDb25uZWN0aW9uIiwiY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhbGxlZTMiLCJlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJjb25maWd1cmF0aW9uIiwiX2FyZ3MzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJzdXBwb3J0c0FkZFRyYW5zY2VpdmVyIiwidmlkZW9UcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJvcHRpb25zIiwiYWRkVHJhbnNjZWl2ZXIiLCJ0MCIsInQxIiwidDIiLCJjcmVhdGVPZmZlciIsInQzIiwibG9jYWxPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwidDQiLCJ0NSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImljZVNlcnZlcnMiLCJ1cmxzIiwidXNlcm5hbWUiLCJjcmVkZW50aWFsIiwidXBkYXRlU3RhdGlzdGljVGltZW91dCIsIlJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwibWVkaWFTdHJlYW0iLCJlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3BlZXJDb25uZWN0aW9uIiwiX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfdHJhY2tzVG9Nb25pdG9yIiwiZ2V0VHJhY2tzIiwibWFwIiwidHJhY2siLCJwYXJzZWRTRFAiLCJTZHBQYXJzZXIiLCJjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24iLCJzZHAiLCJfZXN0aW1hdGVkQXVkaW9Db2RlYyIsImF1ZGlvQ29kZWMiLCJfZXN0aW1hdGVkVmlkZW9Db2RlYyIsInZpZGVvQ29kZWMiLCJ1cGRhdGVTdGF0aXN0aWMiLCJfcnRjU3RhdGlzdGljIiwiX2lzTW9uaXRvclJ1bm5pbmciLCJfdXBkYXRlVGltZW91dCIsImNsZWFyVGltZW91dCIsIl91cGRhdGVTdGF0aXN0aWMiLCJfaWdub3JlZCIsImdldEtpbmRGb3JTYWZhcmkxMSIsInVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImlkIiwiZ2V0U3RhdHMiLCJzdGF0cyIsInJ0Y1N0YXRpc3RpY3MiLCJyb3VuZFRyaXBUaW1lIiwibGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIiwicmVwb3J0IiwiY3VycmVudFJvdW5kVHJpcFRpbWUiLCJtZWRpYVR5cGUiLCJjb2RlYyIsImNvZGVjSWQiLCJtaW1lVHlwZSIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjIiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYzIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NCIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjUiLCJieXRlcyIsImJ5dGVzUmVjZWl2ZWQiLCJwcmV2aW91c0J5dGVzUmVjZWl2ZWQiLCJieXRlc0RlbHRhIiwidGltZURlbHRhIiwiYml0cmF0ZSIsInNzcmMiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwidmlkZW8iLCJmcmFtZXNEZWNvZGVkIiwiZnBzIiwiX3VwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImdldFN0YXRzTGVnYWN5IiwibmFtZXMiLCJzdGF0IiwiX3NkcCIsInNkcFNwbGl0QnlMaW5lcyIsInNkcFNwbGl0QnlUcmFja3MiLCJfYXVkaW9Db2RlYyIsImFwcGx5Q29kZWMiLCJfdmlkZW9Db2RlYyIsIl9pc0F1ZGlvVHJhY2tFbmFibGVkIiwiaXNUcmFja0J5VHlwZUVuYWJsZWQiLCJfaXNWaWRlb1RyYWNrRW5hYmxlZCIsInNkcFNlY3Rpb25Gb3JUeXBlIiwiZmluZCIsInNkcFRyYWNrIiwidXNlZENvZGVjTGluZSIsInNkcExpbmUiLCJ1c2VkQ29kZWMiLCJjb2RlY05hbWUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb24iLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiIsIlJUQ1BlZXJDb25uZWN0aW9uIiwiY3VycmVudExvY2FsRGVzY3JpcHRpb24iLCJjb25uZWN0aW9uU3RhdGUiLCJpY2VDb25uZWN0aW9uU3RhdGUiLCJnZXRDb25maWd1cmF0aW9uIiwic2V0Q29uZmlndXJhdGlvbiIsIl9jcmVhdGVPZmZlciIsIl9jcmVhdGVBbnN3ZXIiLCJjcmVhdGVBbnN3ZXIiLCJfeDIiLCJfc2V0TG9jYWxEZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwic2V0TG9jYWxEZXNjcmlwdGlvbiIsIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiIsIl94MyIsIl9zZXRSZW1vdGVEZXNjcmlwdGlvbiIsIl9jYWxsZWU0IiwiX2Rlc2NyaXB0aW9uJHNkcCIsImhhc0NyeXB0byIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsInNldFJlbW90ZURlc2NyaXB0aW9uIiwiX3g0IiwiZ2V0U2VuZGVycyIsImdldFJlY2VpdmVycyIsInNlbGVjdG9yIiwiX3RoaXMzIiwiYWRkU3RyZWFtIiwiX3RoaXM0IiwiYWRkVHJhY2siLCJvbnRyYWNrIiwiaGFuZGxlciIsIm9uaWNlY2FuZGlkYXRlIiwib25jb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsImNsb3NlIiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uIiwic3ViamVjdCIsIl9zdWJqZWN0Iiwic3Vic2NyaWJlIiwiRGlzcG9zYWJsZUxpc3RlbmVyIiwiX0Rpc3Bvc2FibGUiLCJsaXN0ZW5lcnMiLCJfY2FsbFN1cGVyIiwiaWR4IiwiX2luaGVyaXRzIiwiX2xpc3RlbmVycyIsImNoYW5nZWQiLCJjb21wYXJhYmxlIiwiZXF1YWxzIiwiZ2V0RW52aXJvbm1lbnRGcm9tVXJsIiwiYmFzZVVSTCIsIm9yaWdpbiIsIl9jbGllbnRTZXNzaW9uSWQiLCJfbG9hZGVkVGltZXN0YW1wIiwiX3JlYWRPbmx5SW5pdGlhbGl6ZWQiLCJfcmVhZE9ubHlEaXNjb3ZlcnlVcmkiLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlIiwiX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwiX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQiLCJfc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzIiwiX3dlYlBsYXllckxvYWRlciIsIl9zaGFrYVBsYXllckxvYWRlciIsIl9obHNKc0xvYWRlciIsIl9tZXRyaWNzU2VydmljZSIsIl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl90ZWxlbWV0cnlVcmwiLCJfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsInJldHJpZXNBbW91bnQiLCJfdGVsZW1ldHJ5TGV2ZWwiLCJhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJ0ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiY2xpZW50U2Vzc2lvbklkIiwiaWdub3JlZEVudmlyb25tZW50IiwiaWdub3JlZERpc2NvdmVyeVVyaSIsInRlbGVtZXRyeVVybCIsInRlbGVtZXRyeUFwcGVuZGVyIiwiaWdub3JlZFRlbmFuY3kiLCJhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uIiwiRGlzY292ZXJ5VXJpIiwiaWdub3JlZFRlbGVtZXRyeUxldmVsIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImRpc2NvdmVyeVVyaSIsImdldFRlbGVtZXRyeVVybCIsImNoYW5uZWxUb2tlbiIsInVyaVZhbHVlIiwiYmFzZVVSSVZhbHVlIiwiaW5pdCIsIl9pbml0aWFsaXplZCIsInBlZXJDb25uZWN0aW9uRmFjdG9yeSIsImNvbnNvbGVMb2dnaW5nTGV2ZWwiLCJjb25zb2xlQXBwZW5kZXIiLCJhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJ3ZWJQbGF5ZXJMb2FkZXIiLCJzaGFrYVBsYXllckxvYWRlciIsImhsc0pzTG9hZGVyIiwiX1NESyIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0IiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24iLCJmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIkNoYW5uZWwiLCJ2aWRlb0VsZW1lbnQiLCJjaGFubmVsQ29udGV4dE9wdGlvbnMiLCJ0YXJnZXRMYWciLCJzdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyIsImhhc0luc2VydGFibGVTdHJlYW1zIiwiaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zIiwidmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsImF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJlbmNvZGVkVmlkZW9TdHJlYW1TaW5rIiwiZW5jb2RlZEF1ZGlvU3RyZWFtU2luayIsIl90b2tlbkNvbnRleHQiLCJUb2tlbkNvbnRleHQiLCJfY2hhbm5lbENvbnRleHQiLCJDaGFubmVsQ29udGV4dCIsIl9wZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJQZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJfc3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIlN0cmVhbVRyYW5zZm9ybUNvbnRleHQiLCJfc3RhdGVDb250ZXh0IiwiU3RhdGVDb250ZXh0IiwiX2NoYW5uZWxTdGFydFRpbWUiLCJfcmVhZE9ubHlWaWRlb0VsZW1lbnQiLCJfcmVhZE9ubHlUb2tlbiIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uIiwiX3JlYWRPbmx5U3RhdGUiLCJzdGF0ZSIsIl9yZWFkT25seUF1dG9NdXRlZCIsImF1dG9NdXRlZCIsIl9yZWFkT25seUF1dG9QYXVzZWQiLCJhdXRvUGF1c2VkIiwiX3JlYWRPbmx5VG9rZW5FeHBpcmluZyIsInRva2VuRXhwaXJpbmciLCJfcmVhZE9ubHlBdXRob3JpemVkIiwiYXV0aG9yaXplZCIsIl9yZWFkT25seU9ubGluZSIsIm9ubGluZSIsIl9yZWFkT25seUxvYWRpbmciLCJsb2FkaW5nIiwiX3JlYWRPbmx5UGxheWluZyIsInBsYXlpbmciLCJfcmVhZE9ubHlTdGFuZGJ5Iiwic3RhbmRieSIsIl9yZWFkT25seVN0b3BwZWQiLCJzdG9wcGVkIiwiX3JlYWRPbmx5VGFyZ2V0TGFnIiwiX3JlYWRPbmx5TGFnIiwibGFnIiwiX3JlYWRPbmx5Qml0cmF0ZUxpbWl0IiwiYml0cmF0ZUxpbWl0IiwiX3JlYWRPbmx5UmVzb2x1dGlvbiIsInJlc29sdXRpb24iLCJfcmVhZE9ubHlGYWlsdXJlQ291bnQiLCJmYWlsdXJlQ291bnQiLCJfcmVhZE9ubHlFbmRQb2ludCIsImVuZFBvaW50IiwiX3JlYWRPbmx5U3RyZWFtIiwic3RyZWFtIiwiX3JlYWRPbmx5UnRjU3RhdGlzdGljcyIsIl9yZWFkT25seU1lZGlhU3RyZWFtIiwiX3Nlc3Npb25UZWxlbWV0cnkiLCJTZXNzaW9uVGVsZW1ldHJ5IiwiY2hhbm5lbERpc3Bvc2FibGVzIiwiX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlciIsImhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkIiwicmVuZGVyZXJEaXNwb3NhYmxlcyIsInZpZGVvVGVsZW1ldHJ5IiwiZGF0YXNldCIsIlZpZGVvVGVsZW1ldHJ5Iiwic2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSIsInNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyIsIkNoYW5uZWxTdGF0ZSIsInJlc3RhcnRBZnRlclN0b3AiLCJjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQiLCJvblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMiLCJlbGFwc2VkSW5NaWxsaXNlY29uZHMiLCJjaGFubmVsSW5pdGlhbGl6YXRpb24iLCJnZXRUaW1lIiwibGltaXRCaXRyYXRlIiwiZGVzdHJveVN0cmVhbU9uVW5tb3VudCIsInN0YXJ0IiwicGF1c2UiLCJzcmNPYmplY3QiLCJ3aWR0aCIsInZpZGVvV2lkdGgiLCJoZWlnaHQiLCJ2aWRlb0hlaWdodCIsIkRpbWVuc2lvbiIsImRpc3Bvc2FibGVzIiwic2V0Qml0cmF0ZUxpbWl0IiwiY2xlYXJCaXRyYXRlTGltaXQiLCJiaXRyYXRlSW5CaXRzUGVyU2Vjb25kIiwidXBkYXRlVGFyZ2V0TGFnIiwiX3N0b3AiLCJpc1N0YXJ0aW5nIiwicHJvY2Vzc1N0b3AiLCJjbGVhblVwUmVzb3VyY2VzIiwiX3Jlc3VtZSIsInBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50IiwicmVzdW1lIiwibXV0ZSIsIm11dGVkIiwidW5tdXRlIiwiX2Rpc3Bvc2UiLCJpc0Rpc3Bvc2VkIiwiZ2V0VXJpIiwiX3N0YXJ0IiwicHJvY2Vzc1N0YXJ0IiwiX3Byb2Nlc3NTdGFydCIsIl9jYWxsZWU1IiwiX3RoaXM1IiwibGlzdGVuT25TdHJlYW1TZXR1cCIsIl9TdHJlYW1UcmFja1RyYW5zZm9ybSIsInZhbGlkIiwidmFsaWRhdGlvblJlc3VsdCIsIl9TdHJlYW1UcmFja1RyYW5zZm9ybTIiLCJfdmFsaWQiLCJfdmFsaWRhdGlvblJlc3VsdCIsIl9FbmNvZGVkU3RyZWFtU2luayR2YSIsIl92YWxpZDIiLCJfdmFsaWRhdGlvblJlc3VsdDIiLCJfRW5jb2RlZFN0cmVhbVNpbmskdmEyIiwiX3ZhbGlkMyIsIl92YWxpZGF0aW9uUmVzdWx0MyIsImhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrIiwiaGFzRW5jb2RlZFN0cmVhbVNpbmsiLCJoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2siLCJzdHJlYW1QbGF5ZXIiLCJfY2FsbGVlNSQiLCJfY29udGV4dDUiLCJTdHJlYW1UcmFja1RyYW5zZm9ybSIsIkVuY29kZWRTdHJlYW1TaW5rIiwiRGlzY292ZXJ5IiwiaGFuZGxlU3RyZWFtRmFpbHVyZSIsIlN0cmVhbUZhY3RvcnkiLCJmaW5hbGx5IiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsIl9yZXN0YXJ0QWZ0ZXJTdG9wIiwiX2NhbGxlZTYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJfcGxheSIsIl9jYWxsZWU3IiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3IiwicGxheSIsIl9oYW5kbGVTdHJlYW1GYWlsdXJlIiwiX2NhbGxlZTgiLCJfY2FsbGVlOCQiLCJfY29udGV4dDgiLCJfdGhpczYiLCJkZXN0cm95U3RyZWFtIiwiX3JlZjIiLCJwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwiX3BsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50IiwiX2NhbGxlZTkiLCJfdGhpczciLCJwbGF5UHJvbWlzZSIsIl9jYWxsZWU5JCIsIl9jb250ZXh0OSIsImhhc0F1ZGlvVHJhY2siLCJmaWx0ZXIiLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiIsIkNoYW5uZWxzIiwiY3JlYXRlQ2hhbm5lbCIsImNoYW5uZWxPcHRpb25zIiwiZGVmYXVsdFRhcmdldExhZyIsIl9vcHRpb25zJHRhcmdldExhZyIsImFwcGx5U3RhdHVzIiwiYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50IiwibWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwiZGVmYXVsdERpc2NvdmVyeVVyaSIsIkJpdHJhdGVNb2RlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlIiwiYml0cmF0ZU1vZGUiLCJCaXRyYXRlU3RhdGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZSIsImJpdHJhdGVTdGF0ZSIsImRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwiLCJfcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwicHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkiLCJfZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsImRpc2NvdmVyeVNlcnZpY2UiLCJjYWNoZWRWYWx1ZSIsIl9jYWNoZSIsIkRpc2NvdmVyeVNlcnZpY2UiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsImNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50IiwiZGVmYXVsdFRpbWVvdXQiLCJfdXJpIiwiX2Rpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwidGltZW91dCIsImFzU3RyaW5nIiwiZW5kUG9pbnRzIiwib2siLCJ0ZXh0IiwiRW5kUG9pbnQiLCJkaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsImZhaWxlZFJlcXVlc3RzIiwicHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQiLCJfYXJnczIiLCJwaW5nIiwidGltZSIsIl9kaXNjb3ZlcnlVcmkiLCJidWlsZERpc2NvdmVyeVVybCIsInNka1ZlcnNpb24iLCJzZWFyY2hQYXJhbXMiLCJhcGlWZXJzaW9uIiwiX3RpbWVvdXQiLCJfcm91bmRUcmlwVGltZSIsIl9waW5nIiwiZmluaXNoZWQiLCJidWlsZFBpbmdVcmwiLCJfc3Vic2NyaWJlIiwibG9jYWxTZXNzaW9uRGVzY3JpcHRpb24iLCJjbGllbnRWZXJzaW9uIiwiYm9keVdpdGhPZmZlciIsImJvZHlXaXRob3V0T2ZmZXIiLCJodHRwUmVzcG9uc2UiLCJzdWJzY3JpYmVSZXNwb25zZSIsImJ1aWxkVXJsIiwiYmVhcmVyVG9rZW4iLCJodHRwUm91bmRUcmlwVGltZSIsInNlc3Npb25EZXNjcmlwdGlvbiIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbiIsIm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwiX3B1Ymxpc2giLCJtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwicHVibGlzaCIsIl94NSIsIl94NiIsIl94NyIsInNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJzaGFyZWRTZWNyZXQiLCJtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJfeDgiLCJfeDkiLCJfbGltaXRCaXRyYXRlIiwibWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3gxNCIsIl9hZGRJY2VDYW5kaWRhdGVzIiwiY2FuZGlkYXRlcyIsImRpc2NvdmVyeUNvbXBsZXRlZCIsImFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9hcmdzNiIsIm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJhZGRJY2VDYW5kaWRhdGVzIiwiX3gxNSIsIl94MTYiLCJfeDE3IiwiX2Rlc3Ryb3lTdHJlYW0iLCJkZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX3gxOCIsIl94MTkiLCJfZGVzdHJveVN0cmVhbU9uVW5tb3VudCIsInNlbmRCZWFjb24iLCJfeDIwIiwiX3gyMSIsInBhdGgiLCJwYXRoQXNBcnJheSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsImpzb24iLCJydGNDb25maWd1cmF0aW9uIiwiY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MjIiLCJfeDIzIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCIsInB1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCQiLCJfY29udGV4dDEwIiwiX3gyNCIsIl94MjUiLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVRyYW5zcG9ydFBvbGljeSIsInJ0Y3BNdXhQb2xpY3kiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl9jYWxsZWUxMSIsIl9jYWxsZWUxMSQiLCJfY29udGV4dDExIiwiX3gyNiIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfY2FsbGVlMTIiLCJfY2FsbGVlMTIkIiwiX2NvbnRleHQxMiIsIl94MjciLCJfY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTMiLCJfeDI4IiwiQ2h1bmtlZFN0cmVhbSIsImNoYW5uZWxDb250ZXh0Iiwib2ZmZXJTZHAiLCJvcmlnaW5TdGFydFRpbWUiLCJDaHVua2VkU3RyZWFtaW5nIiwicGxheWVyIiwibW9uaXRvciIsIl9tb25pdG9yRGlzcG9zYWJsZXMiLCJuZXdTdHJlYW1TdGF0aXN0aWNzIiwiX3N0cmVhbVN0YXRpc3RpY3MiLCJjdXJyZW50VGltZSIsImRhdGFCdWZmZXJlZCIsIl9tb25pdG9yRmFpbHVyZUNvdW50IiwicGF1c2VkIiwiX2hsc1BsYXllciIsIl9waGVuaXhXZWJQbGF5ZXIiLCJfc2hha2EiLCJfb3B0aW9ucyIsImxvYWRlZCIsIl9wZW5kaW5nIiwiX3BsYXllciIsIlBsYXllciIsImRhc2hNYW5pZmVzdFVybE1hdGNoIiwiaGxzTWFuaWZlc3RVcmxNYXRjaCIsIm1hbmlmZXN0VXJsIiwicGxheWxpc3RVcmwiLCJIbHNQbGF5ZXIiLCJfb2JqZWN0U3ByZWFkIiwicHJlZmVyTmF0aXZlIiwic2hvdWxkVXNlTmF0aXZlSGxzIiwiV2ViUGxheWVyIiwiU2hha2FQbGF5ZXIiLCJtYW5pZmVzdFVSSSIsIl92aWRlb0VsZW1lbnQiLCJfa2luZCIsIl9zdHJlYW1JZCIsIl9tYW5pZmVzdFVSSSIsImVuY29kZVVSSSIsInJlcGxhY2UiLCJlbmFibGVXb3JrZXIiLCJtYXhCdWZmZXJMZW5ndGgiLCJsaXZlQmFja0J1ZmZlckxlbmd0aCIsImxpdmVTeW5jRHVyYXRpb24iLCJsaXZlRHVyYXRpb25JbmZpbml0eSIsImxpdmVNYXhMYXRlbmN5RHVyYXRpb24iLCJJbmZpbml0eSIsImhpZ2hCdWZmZXJXYXRjaGRvZ1BlcmlvZCIsImxvYWRTb3VyY2UiLCJhdHRhY2hNZWRpYSIsImNhblBsYXlUeXBlIiwibmV0d29ya1N0YXRlIiwiTmV0d29ya1N0YXRlcyIsIk5ldHdvcmtOb1NvdXJjZSIsInN0YXRpc3RpY3MiLCJtZWRpYSIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiYnVmZmVyZWQiLCJlbmQiLCJzdHJlYW1Db250cm9sbGVyIiwidHJ1ZUN1cnJlbnRUaW1lIiwibWF4IiwiZGVzdHJveSIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwiZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCIsIlJlYWxUaW1lU3RyZWFtIiwicGVlckNvbm5lY3Rpb25Db250ZXh0Iiwic3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIl9yZWYzIiwiX3NsaWNlZFRvQXJyYXkiLCJfcmVmMyQiLCJzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24iLCJzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24iLCJfcmVmNCIsImFwcGx5UnRjQ29uZmlndXJhdGlvbiIsInN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0IiwiY2FuY2VsRGlzY292ZXJ5IiwiY2FuZGlkYXRlIiwiX3JlZjUiLCJyZXRyeUNhbGxiYWNrIiwib25MaW5lIiwicmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJtZWRpYVN0cmVhbVByb21pc2UiLCJzdHJlYW1zIiwidHJhY2tMaXN0ZW5lciIsImFuc3dlciIsIl9yZWY2IiwibWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbiIsIl9JbnNlcnRhYmxlU3RyZWFtcyRhcCIsIkluc2VydGFibGVTdHJlYW1zIiwiX0luc2VydGFibGVTdHJlYW1zJGFwMiIsInRyYW5zZm9ybWVkU3RyZWFtIiwicnRjQ29ubmVjdGlvbk1vbml0b3IiLCJydGNDb25uZWN0aW9uTW9uaXRvclN0YXRpc3RpY1N1YnNjcmlwdGlvbiIsInJ0Y1N0YXRpc3RpYyIsInJ0Y1ZpZGVvU3RhdGlzdGljIiwicnRjQXVkaW9TdGF0aXN0aWMiLCJhdWRpbyIsImF1ZGlvVHJhY2tGYWlsZWQiLCJ2aWRlb1RyYWNrRmFpbGVkIiwiX2FwcGx5UnRjQ29uZmlndXJhdGlvbiIsIm9wdGlvbmFsUGVlckNvbm5lY3Rpb24iLCJuZXdSdGNDb25maWd1cmF0aW9uIiwiX3BlZXJDb25uZWN0aW9uJGN1cnJlIiwiaXNDbGllbnRPZmZlckZsb3ciLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJwbGF5ZXJPcHRpb25zIiwiYWJyIiwiZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlIiwibWFuaWZlc3QiLCJyZXRyeVBhcmFtZXRlcnMiLCJzdHJlYW1pbmciLCJyZWJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJpbmdHb2FsIiwiYnVmZmVyQmVoaW5kIiwibWF4QXR0ZW1wdHMiLCJiYWNrb2ZmRmFjdG9yIiwibG9hZFBsYXllciIsImVzdGltYXRlZEJhbmR3aWR0aCIsInBsYXlUaW1lIiwidW5sb2FkIiwicGxheWVyQ29uZmlnIiwiY29uZmlndXJlIiwibG9hZCIsImNvZGUiLCJjcmVhdGUiLCJ0b2tlbkNhcGFiaWxpdGllcyIsImJhbmR3aWR0aFRvU3RhcnRBdCIsIm1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIiwiZXJyb3JPYmplY3QiLCJjYW5SZWxvYWQiLCJzZXZlcml0eSIsInJlbG9hZElmQWJsZSIsImlzTmF0aXZlIiwiZGVsaXZlcnlUeXBlIiwiaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQiLCJfbGFzdFJlbG9hZFRpbWUiLCJyZWxvYWQiLCJ2YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rIiwibW9kZSIsImFwcGx5RW5jb2RlZFN0cmVhbVRyYW5zZm9ybWF0aW9uIiwicmVjZWl2ZXJzIiwicmVjZWl2ZXIiLCJyZWNlaXZlIiwid29ya2VyIiwiV29ya2VyIiwib25tZXNzYWdlIiwiZXZlbnQiLCJjaHVuayIsInBvc3RNZXNzYWdlIiwiZm9yY2VJbnZhbGlkRnJhbWUiLCJ0cmFuc2Zvcm0iLCJ0ZXJtaW5hdGUiLCJlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJjb250cm9sbGVyIiwic3Vycm9nYXRlIiwiU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciIsIlNraXBGcmFtZSIsImVucXVldWUiLCJ0cmFuc2Zvcm1lciIsIlRyYW5zZm9ybVN0cmVhbSIsInJlY2VpdmVyU3RyZWFtcyIsInNvdXJjZSIsInJlYWRhYmxlIiwic2luayIsIndyaXRhYmxlIiwicGlwZVRocm91Z2giLCJwaXBlVG8iLCJNZWRpYVN0cmVhbSIsImF1ZGlvUHVtcGVyIiwiQXVkaW8iLCJhcHBlbmRDaGlsZCIsInJlbW92ZUNoaWxkIiwiYXBwbHlJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24iLCJpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJ2aWRlb1RyYWNrIiwicHJvY2Vzc29yIiwiZ2VuZXJhdG9yIiwicmVtb3ZlVHJhY2siLCJhdWRpb1RyYWNrIiwidmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtIiwiU3ltYm9sIiwiZ2V0U3Vycm9nYXRlQXVkaW9TaWxlbnRQZXJDb2RlYyIsInRvVXBwZXJDYXNlIiwiX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYyIsIk9QVVMiLCJidWZmZXIiLCJnZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhIiwiX3NpbmdsZVplcm9CeXRlIiwiZ2V0U3Vycm9nYXRlVmlkZW9JRnJhbWVQZXJDb2RlYyIsIl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyIiwiX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIiLCJfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0IiwiX2R1bW15ODJ4ODJIMjY0IiwiSUZyYW1lIiwiX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYyIsIkgyNjQiLCJWUDgiLCJWUDkiLCJnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUiLCJfaXNBbmRyb2lkQ2hyb21lIiwiZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyIsImdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIiLCJfZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjIiwiZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lIiwic2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciIsImJpdE1hc2sxIiwiYml0TWFzazIiLCJiaXRTaGlmdFJpZ2h0QnkxIiwiYml0U2hpZnRMZWZ0Qnk3IiwiYnl0ZTEiLCJieXRlMiIsImNvcHlPZkR1bW15UEZyYW1lcyIsIlBGcmFtZSIsImJ1ZmZlckluZGV4IiwiX2R1bW15ODJ4ODJIMjY0UEZyYW1lRnJhbWVOdW1iZXJJbmRleCIsIl9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIiwiVWludDhBcnJheSIsIl9pc01vYmlsZUNocm9tZSIsIl9pc1NhZmFyaSIsIl9fQlVJTERfVkVSU0lPTl9fIiwiX2RlZmF1bHRWZXJzaW9uIiwiX3RlbGVtZXRyeVNlcnZpY2UiLCJUZWxlbWV0cnlTZXJ2aWNlIiwidmFsdWVPZiIsImxvZ1JlY29yZCIsIl9sb2dzIiwic2VuZExvZ3NJZkFibGUiLCJsb2dNZXNzYWdlcyIsIl9zZW5kTG9nc0lmQWJsZSIsIm51bWJlck9mTG9nc1RvU2VuZCIsInNpemVPZkxvZ3NUb1NlbmQiLCJnZXRJdGVtU2l6ZSIsImdldExvZ1NpemUiLCJzdW0iLCJkdXJhdGlvbiIsIl9kdXJhdGlvbiIsImlzTmVnYXRpdmUiLCJhYnMiLCJvZmZzZXQiLCJtaWxsaXNlY29uZHMiLCJzZWNvbmRzIiwibWludXRlcyIsImhvdXJzIiwicGFydHMiLCJTdHJpbmciLCJwYWRTdGFydCIsInRhcmdldExlbmd0aCIsInBhZFN0cmluZyIsInJlcGVhdCIsImRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyIsInJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmYiLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCIsIm1pbiIsIm90aGVyIiwiX25ldHdvcmtNb25pdG9yIiwicmVjb3JkRm9yZWdyb3VuZENoYW5nZSIsInJlY29yZE5ldHdvcmtSVFRVcGRhdGUiLCJyZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSIsImRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwicmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlIiwidGltZVNpbmNlTGFzdENoYW5nZSIsIm5ld1JUVCIsIm9sZFJ0dCIsIl9sYXN0TmV0d29ya1N0YXRpc3RpY3MiLCJuZXdOZXR3b3JrVHlwZSIsIm9sZE5ldHdvcmtUeXBlIiwibmV3Q2FwYWNpdHkiLCJvbGRDYXBhY2l0eSIsImZsb2F0IiwiY2hhbm5lbFN0YXJ0VGltZSIsIl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUiLCJfbGlzdGVuVG9GaXJzdFRpbWUiLCJjYWxsVGltZVRvRmlyc3RGcmFtZSIsIl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciIsIl9saXN0ZW5Gb3JTdGFsbCIsIm9uU3RhbGwiLCJfbGlzdGVuRm9yQ29udGludWF0aW9uIiwib25Db250aW51YXRpb24iLCJfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyIiwicHVzaFRpbWVUb0ZpcnN0RnJhbWUiLCJwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl90aW1lVG9GaXJzdEZyYW1lIiwiZHVyYXRpb25TaW5jZVBhZ2VMb2FkIiwiX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdmlkZW9TdGFsbGVkIiwiYnVmZmVyTGVuZ3RoIiwiaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQiLCJfbGFzdFByb2dyZXNzIiwidGltZVNpbmNlU3RvcCIsIm5ld1Jlc29sdXRpb24iLCJfdmlkZW9SZXNvbHV0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTzs7Ozs7Ozs7O0FDVkE7QUFDQTtBQUNBLHdDQUF3QyxTQUFTO0FBQ2pEO0FBQ0E7QUFDQSxvQ0FBb0MseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDTC9GO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNIN0YsdUJBQXVCLG1CQUFPLENBQUMsd0ZBQXVCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLHFD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RUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQUMsQ0FBQztBQUFBcHJDLDJJQUFBLENBTHZSdW5DLHlCQUF5QixrQ0FNVztFQUNyRHdDLElBQUksRUFBRSxJQUFJcUIsVUFBVSxDQUFDLENBQ25CLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtFQUFFO0VBQ3BDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7RUFBRTtFQUN4SyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0VBQUU7RUFDNUQ7RUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFBRTtFQUN4THBCLEdBQUcsRUFBRSxJQUFJb0IsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDelNuQixHQUFHLEVBQUUsSUFBSW1CLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7QUFDcE0sQ0FBQztBQUFBcHJDLDJJQUFBLENBZGtCdW5DLHlCQUF5QixrQ0FlVztFQUNyRHdDLElBQUksRUFBRSxJQUFJcUIsVUFBVSxDQUFDLENBQ25CLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtFQUFFO0VBQ3BDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztFQUFFO0VBQzFHcEIsR0FBRyxFQUFFLElBQUlvQixVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztFQUN2Um5CLEdBQUcsRUFBRSxJQUFJbUIsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJ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RUFBRSxJQUFJLENBQUM4MkI7TUFDakIsQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDNlEsZ0JBQWdCLEdBQUdELGFBQWE7SUFDdkM7RUFBQztBQUFBOzs7Ozs7O1VDMU1IO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOztVQUVBO1VBQ0E7Ozs7O1dDeEJBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxnQ0FBZ0MsWUFBWTtXQUM1QztXQUNBLEU7Ozs7O1dDUEE7V0FDQTtXQUNBO1dBQ0E7V0FDQSx3Q0FBd0MseUNBQXlDO1dBQ2pGO1dBQ0E7V0FDQSxFOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsRTs7Ozs7V0NKQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLEVBQUU7V0FDRjtXQUNBO1dBQ0EsQ0FBQyxJOzs7OztXQ1BELHNGOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHNEQUFzRCxrQkFBa0I7V0FDeEU7V0FDQSwrQ0FBK0MsY0FBYztXQUM3RCxFOzs7OztXQ05BO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGtDOzs7OztXQ2ZBOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7O1dBR0E7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUEsb0I7Ozs7VUN0QkE7VUFDQTtVQUNBO1VBQ0EiLCJmaWxlIjoiY2hhbm5lbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mLmpzXCIpO1xuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkge1xuICB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSB0KSB7XG4gICAgdmFyIGUsXG4gICAgICBuLFxuICAgICAgaSxcbiAgICAgIHUsXG4gICAgICBhID0gW10sXG4gICAgICBmID0gITAsXG4gICAgICBvID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHtcbiAgICAgICAgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuO1xuICAgICAgICBmID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgbyA9ICEwLCBuID0gcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFmICYmIG51bGwgIT0gdFtcInJldHVyblwiXSAmJiAodSA9IHRbXCJyZXR1cm5cIl0oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKG8pIHRocm93IG47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXlMaW1pdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVJlc3QsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCIpO1xuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKHQsIGUsIHIpIHtcbiAgICAgIHRbZV0gPSByLnZhbHVlO1xuICAgIH0sXG4gICAgaSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sID8gU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgZSwge1xuICAgICAgdmFsdWU6IHIsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgdFtlXTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgICAgcmV0dXJuIHRbZV0gPSByO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcCh0LCBlLCByLCBuKSB7XG4gICAgdmFyIGkgPSBlICYmIGUucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gZSA6IEdlbmVyYXRvcixcbiAgICAgIGEgPSBPYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxcbiAgICAgIGMgPSBuZXcgQ29udGV4dChuIHx8IFtdKTtcbiAgICByZXR1cm4gbyhhLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QodCwgciwgYylcbiAgICB9KSwgYTtcbiAgfVxuICBmdW5jdGlvbiB0cnlDYXRjaCh0LCBlLCByKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogdC5jYWxsKGUsIHIpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgYXJnOiB0XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBlLndyYXAgPSB3cmFwO1xuICB2YXIgaCA9IFwic3VzcGVuZGVkU3RhcnRcIixcbiAgICBsID0gXCJzdXNwZW5kZWRZaWVsZFwiLFxuICAgIGYgPSBcImV4ZWN1dGluZ1wiLFxuICAgIHMgPSBcImNvbXBsZXRlZFwiLFxuICAgIHkgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBwID0ge307XG4gIGRlZmluZShwLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocCk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyh0KSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRlZmluZSh0LCBlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKGUsIHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcih0LCBlKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKHIsIG8sIGksIGEpIHtcbiAgICAgIHZhciBjID0gdHJ5Q2F0Y2godFtyXSwgdCwgbyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSBjLnR5cGUpIHtcbiAgICAgICAgdmFyIHUgPSBjLmFyZyxcbiAgICAgICAgICBoID0gdS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGggJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKGgpICYmIG4uY2FsbChoLCBcIl9fYXdhaXRcIikgPyBlLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB0LCBpLCBhKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSkgOiBlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHUudmFsdWUgPSB0LCBpKHUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhKGMuYXJnKTtcbiAgICB9XG4gICAgdmFyIHI7XG4gICAgbyh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHQsIG4pIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBlKGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBpbnZva2UodCwgbiwgZSwgcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHIgPSByID8gci50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoZSwgciwgbikge1xuICAgIHZhciBvID0gaDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGksIGEpIHtcbiAgICAgIGlmIChvID09PSBmKSB0aHJvdyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICBpZiAobyA9PT0gcykge1xuICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBpKSB0aHJvdyBhO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiB0LFxuICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmb3IgKG4ubWV0aG9kID0gaSwgbi5hcmcgPSBhOzspIHtcbiAgICAgICAgdmFyIGMgPSBuLmRlbGVnYXRlO1xuICAgICAgICBpZiAoYykge1xuICAgICAgICAgIHZhciB1ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShjLCBuKTtcbiAgICAgICAgICBpZiAodSkge1xuICAgICAgICAgICAgaWYgKHUgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIHU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gbi5tZXRob2QpIG4uc2VudCA9IG4uX3NlbnQgPSBuLmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IG4ubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKG8gPT09IGgpIHRocm93IG8gPSBzLCBuLmFyZztcbiAgICAgICAgICBuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKTtcbiAgICAgICAgfSBlbHNlIFwicmV0dXJuXCIgPT09IG4ubWV0aG9kICYmIG4uYWJydXB0KFwicmV0dXJuXCIsIG4uYXJnKTtcbiAgICAgICAgbyA9IGY7XG4gICAgICAgIHZhciBwID0gdHJ5Q2F0Y2goZSwgciwgbik7XG4gICAgICAgIGlmIChcIm5vcm1hbFwiID09PSBwLnR5cGUpIHtcbiAgICAgICAgICBpZiAobyA9IG4uZG9uZSA/IHMgOiBsLCBwLmFyZyA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiBwLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IG4uZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXCJ0aHJvd1wiID09PSBwLnR5cGUgJiYgKG8gPSBzLCBuLm1ldGhvZCA9IFwidGhyb3dcIiwgbi5hcmcgPSBwLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpIHtcbiAgICB2YXIgbiA9IHIubWV0aG9kLFxuICAgICAgbyA9IGUuaXRlcmF0b3Jbbl07XG4gICAgaWYgKG8gPT09IHQpIHJldHVybiByLmRlbGVnYXRlID0gbnVsbCwgXCJ0aHJvd1wiID09PSBuICYmIGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKHIubWV0aG9kID0gXCJyZXR1cm5cIiwgci5hcmcgPSB0LCBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpLCBcInRocm93XCIgPT09IHIubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBuICYmIChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBuICsgXCInIG1ldGhvZFwiKSksIHk7XG4gICAgdmFyIGkgPSB0cnlDYXRjaChvLCBlLml0ZXJhdG9yLCByLmFyZyk7XG4gICAgaWYgKFwidGhyb3dcIiA9PT0gaS50eXBlKSByZXR1cm4gci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gaS5hcmcsIHIuZGVsZWdhdGUgPSBudWxsLCB5O1xuICAgIHZhciBhID0gaS5hcmc7XG4gICAgcmV0dXJuIGEgPyBhLmRvbmUgPyAocltlLnJlc3VsdE5hbWVdID0gYS52YWx1ZSwgci5uZXh0ID0gZS5uZXh0TG9jLCBcInJldHVyblwiICE9PSByLm1ldGhvZCAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpIDogYSA6IChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIHIuZGVsZWdhdGUgPSBudWxsLCB5KTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkodCkge1xuICAgIHZhciBlID0ge1xuICAgICAgdHJ5TG9jOiB0WzBdXG4gICAgfTtcbiAgICAxIGluIHQgJiYgKGUuY2F0Y2hMb2MgPSB0WzFdKSwgMiBpbiB0ICYmIChlLmZpbmFsbHlMb2MgPSB0WzJdLCBlLmFmdGVyTG9jID0gdFszXSksIHRoaXMudHJ5RW50cmllcy5wdXNoKGUpO1xuICB9XG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkodCkge1xuICAgIHZhciBlID0gdC5jb21wbGV0aW9uIHx8IHt9O1xuICAgIGUudHlwZSA9IFwibm9ybWFsXCIsIGRlbGV0ZSBlLmFyZywgdC5jb21wbGV0aW9uID0gZTtcbiAgfVxuICBmdW5jdGlvbiBDb250ZXh0KHQpIHtcbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbe1xuICAgICAgdHJ5TG9jOiBcInJvb3RcIlxuICAgIH1dLCB0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGUpIHtcbiAgICBpZiAoZSB8fCBcIlwiID09PSBlKSB7XG4gICAgICB2YXIgciA9IGVbYV07XG4gICAgICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUubmV4dCkgcmV0dXJuIGU7XG4gICAgICBpZiAoIWlzTmFOKGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgbyA9IC0xLFxuICAgICAgICAgIGkgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsrbyA8IGUubGVuZ3RoOykgaWYgKG4uY2FsbChlLCBvKSkgcmV0dXJuIG5leHQudmFsdWUgPSBlW29dLCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGkubmV4dCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoX3R5cGVvZihlKSArIFwiIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIG8oZywgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIG8oR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdCAmJiB0LmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWUgJiYgKGUgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGUuZGlzcGxheU5hbWUgfHwgZS5uYW1lKSk7XG4gIH0sIGUubWFyayA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZih0LCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAodC5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKHQsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZyksIHQ7XG4gIH0sIGUuYXdyYXAgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB7XG4gICAgICBfX2F3YWl0OiB0XG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBjLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBlLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBlLmFzeW5jID0gZnVuY3Rpb24gKHQsIHIsIG4sIG8sIGkpIHtcbiAgICB2b2lkIDAgPT09IGkgJiYgKGkgPSBQcm9taXNlKTtcbiAgICB2YXIgYSA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAodCwgciwgbiwgbyksIGkpO1xuICAgIHJldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocikgPyBhIDogYS5uZXh0KCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuIHQuZG9uZSA/IHQudmFsdWUgOiBhLm5leHQoKTtcbiAgICB9KTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKGcpLCBkZWZpbmUoZywgdSwgXCJHZW5lcmF0b3JcIiksIGRlZmluZShnLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoZywgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH0pLCBlLmtleXMgPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBlID0gT2JqZWN0KHQpLFxuICAgICAgciA9IFtdO1xuICAgIGZvciAodmFyIG4gaW4gZSkgci5wdXNoKG4pO1xuICAgIHJldHVybiByLnJldmVyc2UoKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyByLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIHQgPSByLnBvcCgpO1xuICAgICAgICBpZiAodCBpbiBlKSByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGUudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoZSkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB0LCB0aGlzLmRvbmUgPSAhMSwgdGhpcy5kZWxlZ2F0ZSA9IG51bGwsIHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMuYXJnID0gdCwgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSksICFlKSBmb3IgKHZhciByIGluIHRoaXMpIFwidFwiID09PSByLmNoYXJBdCgwKSAmJiBuLmNhbGwodGhpcywgcikgJiYgIWlzTmFOKCtyLnNsaWNlKDEpKSAmJiAodGhpc1tyXSA9IHQpO1xuICAgIH0sXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgIHRoaXMuZG9uZSA9ICEwO1xuICAgICAgdmFyIHQgPSB0aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGUpIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHRocm93IGU7XG4gICAgICB2YXIgciA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobiwgbykge1xuICAgICAgICByZXR1cm4gYS50eXBlID0gXCJ0aHJvd1wiLCBhLmFyZyA9IGUsIHIubmV4dCA9IG4sIG8gJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksICEhbztcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIG8gPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgbyA+PSAwOyAtLW8pIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLnRyeUVudHJpZXNbb10sXG4gICAgICAgICAgYSA9IGkuY29tcGxldGlvbjtcbiAgICAgICAgaWYgKFwicm9vdFwiID09PSBpLnRyeUxvYykgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgaWYgKGkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBjID0gbi5jYWxsKGksIFwiY2F0Y2hMb2NcIiksXG4gICAgICAgICAgICB1ID0gbi5jYWxsKGksIFwiZmluYWxseUxvY1wiKTtcbiAgICAgICAgICBpZiAoYyAmJiB1KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdSkgdGhyb3cgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHQsIGUpIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLnRyeUVudHJpZXNbcl07XG4gICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBvLmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgaSA9IG87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgJiYgKFwiYnJlYWtcIiA9PT0gdCB8fCBcImNvbnRpbnVlXCIgPT09IHQpICYmIGkudHJ5TG9jIDw9IGUgJiYgZSA8PSBpLmZpbmFsbHlMb2MgJiYgKGkgPSBudWxsKTtcbiAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIGEudHlwZSA9IHQsIGEuYXJnID0gZSwgaSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBpLmZpbmFsbHlMb2MsIHkpIDogdGhpcy5jb21wbGV0ZShhKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh0LCBlKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gdC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gdC50eXBlID8gdGhpcy5uZXh0ID0gdC5hcmcgOiBcInJldHVyblwiID09PSB0LnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSB0LmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHQudHlwZSAmJiBlICYmICh0aGlzLm5leHQgPSBlKSwgeTtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLmZpbmFsbHlMb2MgPT09IHQpIHJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbiwgci5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkociksIHk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHtcbiAgICAgICAgICB2YXIgbiA9IHIuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvID0gbi5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGUsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGUpLFxuICAgICAgICByZXN1bHROYW1lOiByLFxuICAgICAgICBuZXh0TG9jOiBuXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdCksIHk7XG4gICAgfVxuICB9LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRoSG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5TGltaXQgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiKTtcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIG5vbkl0ZXJhYmxlUmVzdCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiKTtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiKTtcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSB0b1ByaW1pdGl2ZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoXCIuL3RvUHJpbWl0aXZlLmpzXCIpO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvUHJvcGVydHlLZXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMpLCBfdHlwZW9mKG8pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiLy8gVE9ETyhCYWJlbCA4KTogUmVtb3ZlIHRoaXMgZmlsZS5cblxudmFyIHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWVcIikoKTtcbm1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcblxuLy8gQ29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9wYWNrYWdlcy9ydW50aW1lL3J1bnRpbWUuanMjTDczNj1cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBnbG9iYWxUaGlzLnJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG4gIH0gZWxzZSB7XG4gICAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmNvbnN0IGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0ID0gMzAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlJc0ZvcmVncm91bmQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNGb3JlZ3JvdW5kOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIF90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U6IG51bWJlciA9IERhdGUubm93KCk7XG4gIHByaXZhdGUgX2RvY3VtZW50Rm9jdXNJbnRlcnZhbDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2lzRm9yZWdyb3VuZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kID0gbmV3IFJlYWRPbmx5U3ViamVjdCh0aGlzLl9pc0ZvcmVncm91bmQpO1xuICAgIHRoaXMuZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTtcbiAgfVxuXG4gIGdldCBpc0ZvcmVncm91bmQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQ7XG4gIH1cblxuICBnZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTogdm9pZCB7XG4gICAgbGV0IGhpZGRlbjtcbiAgICBsZXQgdmlzaWJpbGl0eUNoYW5nZTtcblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBhIGRlZmluaXRpb24gZm9yICdtc0hpZGRlbicgb3IgJ3dlYmtpdEhpZGRlbicgdHlwZXNcbiAgICAvLyBSZXF1aXJlZCB0byBAdHMtaWdub3JlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5tc0hpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICdtc0hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ21zdmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQud2Via2l0SGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ3dlYmtpdEhpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3dlYmtpdHZpc2liaWxpdHljaGFuZ2UnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LmhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gT3BlcmEgMTIuMTAgYW5kIEZpcmVmb3ggMTggYW5kIGxhdGVyIHN1cHBvcnRcbiAgICAgIGhpZGRlbiA9ICdoaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cblxuICAgIGNvbnN0IGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSAhZG9jdW1lbnRbaGlkZGVuXTtcblxuICAgICAgdGhpcy5zZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk7XG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50W2hpZGRlbl0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcblxuICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGlzdGVuRm9yRG9jdW1lbnRGb2N1cy5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRm9yRG9jdW1lbnRGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gZG9jdW1lbnQuaGFzRm9jdXMoKTtcblxuICAgICAgdGhpcy5zZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSwgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwgPSBudWxsO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXNGb3JlZ3JvdW5kID09PSBpc0ZvcmVncm91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0ZvcmVncm91bmQudmFsdWUgPSBpc0ZvcmVncm91bmQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJEZXRlY3RvciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCA9IC8oTVNJRXwoPyFHZWNrby4rKUZpcmVmb3h8KD8hQXBwbGVXZWJLaXQuK0Nocm9tZS4rKVNhZmFyaXwoPyFBcHBsZVdlYktpdC4rKUNocm9tZXxBcHBsZVdlYktpdCg/IS4rQ2hyb21lfC4rU2FmYXJpKXxHZWNrbyg/IS4rRmlyZWZveCkpKD86IHxcXC8pKFtcXGQuYXByZV0rKS9nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZSA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTWFqb3JWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc01vYmlsZSA9ICgvQW5kcm9pZHxpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8T3BlcmEgTWluaS9pKS50ZXN0KG5hdmlnYXRvcj8udXNlckFnZW50KTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQW5kcm9pZCA9ICgvQW5kcm9pZC9pKS50ZXN0KG5hdmlnYXRvcj8udXNlckFnZW50KTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU2OSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNjkuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcwID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzEgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzIuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzUgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzYuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc3ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ny4nKTtcblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck5hbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNBbmRyb2lkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQW5kcm9pZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU2OSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTY5O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc2O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgaXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNNb2JpbGU7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4KTtcblxuICAgIGlmIChicm93c2VyTmFtZUFuZFZlcnNpb24gJiYgYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdKSB7XG4gICAgICByZXR1cm4gYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyTmFtZUxpc3QgfHwgIWJyb3dzZXJOYW1lTGlzdFswXSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBicm93c2VyTmFtZUxpc3RbMF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyVmVyc2lvbkxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyVmVyc2lvbkxpc3QgfHwgIWJyb3dzZXJWZXJzaW9uTGlzdFsxXSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFZlcnNpb24gPSBicm93c2VyVmVyc2lvbkxpc3RbMV07XG5cbiAgICBpZiAoIWZ1bGxWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IG1zaWUgPSB1c2VyQWdlbnQuaW5kZXhPZignTVNJRSAnKTtcblxuICAgIGlmIChtc2llID4gMCkge1xuICAgICAgLy8gSUUgMTAgb3Igb2xkZXIgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKX1gO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWRlbnQgPSB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKTtcblxuICAgIGlmICh0cmlkZW50ID4gMCkge1xuICAgICAgLy8gSUUgMTEgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICBjb25zdCB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xuXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyh2ZXJzaW9uICsgMywgdXNlckFnZW50LmluZGV4T2YoJy4nLCB2ZXJzaW9uKSksIDEwKX1gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIHtcbiAgZ2V0U3RyaW5nVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpIHx8XG4gICAgICB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCkgfHxcbiAgICAgIHRoaXMuZGVmYXVsdFN0cmluZ1ZhbHVlW25hbWVdO1xuICB9XG5cbiAgZ2V0Qm9vbGVhblZhbHVlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJzEnIHx8IHZhbHVlID09PSAnT24nO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlRnJvbVVyaSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShgJHtuYW1lfS11cmktcGFyYW1ldGVyLW5hbWVgKTtcblxuICAgIGlmICh2YWx1ZUZyb21VcmkpIHtcbiAgICAgIHJldHVybiB2YWx1ZUZyb21VcmkgPT09ICd0cnVlJyB8fCB2YWx1ZUZyb21VcmkgPT09ICcxJyB8fCB2YWx1ZUZyb21VcmkgPT09ICdPbic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEJvb2xlYW5WYWx1ZVtuYW1lXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRTdHJpbmdWYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmd9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1tZXRyaWNzLWxldmVsJzogVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKSxcbiAgICAgICdwaGVuaXgtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY29uc29sZS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtdGVsZW1ldHJ5LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNoYW5uZWwtdG9rZW4nOiAnJyxcbiAgICAgICdwaGVuaXgtdXJpJzogJycsXG4gICAgICAncGhlbml4LWJhc2UtdXJpJzogJydcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEJvb2xlYW5WYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBib29sZWFuIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZSc6IHRydWUsXG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbic6IHRydWUsXG4gICAgICAncGhlbml4LWZvcmNlLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1yZXN0YXJ0JzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGFWYWx1ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYG1ldGFbbmFtZT0nJHtuYW1lfSddYCk7XG5cbiAgICBpZiAoIW1ldGFWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbWV0YVZhbHVlLmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZVVSSVBhcmFtZXRlck5hbWUgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAoIXZhbHVlVVJJUGFyYW1ldGVyTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpLmdldCh2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHx8IHVuZGVmaW5lZDtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIHtcbiAgc3RhdGljIGZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCkge1xuICAgICAgdGhpcy5mb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNRdWV1ZU1pY3JvdGFza1N1cHBvcnRlZCkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgb3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGxldCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcblxuICAgIGltZy5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbbmV3IEFycmF5QnVmZmVyKDEwZSs3KV0pKTsgLy8gMTAwTWIgb3IgbGVzcyBvciBtb3JlIGRlcGVuZGluZyBvbiBhcyB5b3Ugd2lzaCB0byBmb3JjZS9pbnZva2UgR0MgY3ljbGUgcnVuXG4gICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMuc3JjKTtcblxuICAgICAgaW1nID0gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNTdXBwb3J0ZWQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yWydjb25uZWN0aW9uJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0dDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWZmZWN0aXZlVHlwZTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgfVxuXG4gIGdldCBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgcnR0KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0dDtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVUeXBlKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVR5cGU7XG4gIH1cblxuICBnZXQgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmsgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmtNYXg7XG4gIH1cblxuICBwcml2YXRlIGdldEVmZmVjdGl2ZVR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAnVW5rbm93bic7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmVmZmVjdGl2ZVR5cGUgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10udHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5ydHQ7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuICAgIH07XG5cbiAgICBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGlzdGljcygpOiB2b2lkIHtcbiAgICB0aGlzLl9ydHQudmFsdWUgPSB0aGlzLmdldFJvdW5kVHJpcFRpbWUoKTtcbiAgICB0aGlzLl9lZmZlY3RpdmVUeXBlLnZhbHVlID0gdGhpcy5nZXRFZmZlY3RpdmVUeXBlKCk7XG4gICAgdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkudmFsdWUgPSB0aGlzLmdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5cbmV4cG9ydCBjbGFzcyBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVNldHVwTGlzdGVuZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXRyaWNzU2VydmljZSA9IFNESy5tZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIF9tZXRyaWNTdWJtaXR0ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3VjY2VzcyhzdHJlYW1JZCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkLCBzdHJlYW1JZCk7XG4gIH1cblxuICBmYWlsKCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkU3RyZWFtTWV0cmljKG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLCBzdHJlYW1JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tZXRyaWNTdWJtaXR0ZWQpIHtcbiAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljU3VibWl0dGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0dXBUaW1lID0gbm93IC0gdGhpcy5fc3RhcnRUaW1lO1xuICAgIGNvbnN0IG1ldHJpY05hbWUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWNUeXBlKS5nZXROYW1lKCk7XG5cbiAgICB0aGlzLm1ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBzZXR1cFRpbWV9LFxuICAgICAgc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBTdHJlYW0gbWV0cmljIFslc10gaW4gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5ldyBEdXJhdGlvbnMoc2V0dXBUaW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlVG9rZW4gZnJvbSAnLi9FZGdlVG9rZW4nO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5jb25zdCBlZGdlQXV0aFRva2VuUHJlZml4ID0gJ0RJR0VTVDonO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlQXV0aFBhcnNlciB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRWRnZUF1dGhQYXJzZXInKTtcblxuICBzdGF0aWMgcGFyc2VUb2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IEVkZ2VUb2tlbiB7XG4gICAgaWYgKCF0aGlzLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignVG9rZW4gaXMgbm90IHZhbGlkIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSBhdG9iKHRva2VuLnN1YnN0cihlZGdlQXV0aFRva2VuUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgY29uc3QgZWRnZVRva2VuID0gSlNPTi5wYXJzZShkZWNvZGVkVG9rZW4pO1xuXG4gICAgICBlZGdlVG9rZW4udG9rZW4gPSBKU09OLnBhcnNlKGVkZ2VUb2tlbi50b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKGVkZ2VUb2tlbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignQ2Fubm90IHBhcnNlIHRva2VuIHZhbHVlJywgZSk7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRva2VuICYmIHRva2VuLnN0YXJ0c1dpdGgoZWRnZUF1dGhUb2tlblByZWZpeCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmludGVyZmFjZSBJVG9rZW4ge1xuICB1cmk6IFVSTCB8IG51bGw7XG4gIGNhcGFiaWxpdGllczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJRWRnZVRva2VuIHtcbiAgYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICB0b2tlbjogSVRva2VuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlVG9rZW4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuOiBJVG9rZW47XG5cbiAgY29uc3RydWN0b3IoZWRnZVRva2VuOiBJRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fYXBwbGljYXRpb25JZCA9IGVkZ2VUb2tlbj8uYXBwbGljYXRpb25JZCB8fCAnJztcbiAgICB0aGlzLl90b2tlbiA9IHtcbiAgICAgIHVyaTogZWRnZVRva2VuPy50b2tlbj8udXJpID8gbmV3IFVSTChlZGdlVG9rZW4udG9rZW4udXJpKSA6IG51bGwsXG4gICAgICBjYXBhYmlsaXRpZXM6IGVkZ2VUb2tlbj8udG9rZW4/LmNhcGFiaWxpdGllcyB8fCBbXVxuICAgIH07XG4gIH1cblxuICBnZXQgdXJpKCk6IFVSTCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi51cmk7XG4gIH1cblxuICBnZXQgY2FwYWJpbGl0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW4uY2FwYWJpbGl0aWVzO1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25JZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZGVjbGFyZSBjb25zdCBfX0ZFQVRVUkVTX186IHtcbiAgc2VuZExvY2FsQ2FuZGlkYXRlczogYm9vbGVhbjtcbiAgc2VuZExvZ3M6IExvZ2dpbmdMZXZlbFR5cGU7XG4gIHNlbmRNZXRyaWNzOiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIGxvZ1RvQ29uc29sZTogTG9nZ2luZ0xldmVsVHlwZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkRmVhdHVyZXMge1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZExvY2FsQ2FuZGlkYXRlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRMb2dzOiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZE1ldHJpY3M6IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ1RvQ29uc29sZTogTG9nZ2luZ0xldmVsVHlwZTtcblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2dzKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9ncztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZE1ldHJpY3MoKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZE1ldHJpY3M7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvZ1RvQ29uc29sZSgpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nVG9Db25zb2xlO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RmVhdHVyZXMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZlYXR1cmVzID0gX19GRUFUVVJFU19fO1xuXG4gICAgICB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzID0gJ3NlbmRMb2NhbENhbmRpZGF0ZXMnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZExvY2FsQ2FuZGlkYXRlcyA6IHRydWU7XG4gICAgICB0aGlzLl9zZW5kTG9ncyA9ICdzZW5kTG9ncycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTG9ncyA6ICdBbGwnO1xuICAgICAgdGhpcy5fc2VuZE1ldHJpY3MgPSAnc2VuZE1ldHJpY3MnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZE1ldHJpY3MgOiAnQWxsJztcbiAgICAgIHRoaXMuX2xvZ1RvQ29uc29sZSA9ICdsb2dUb0NvbnNvbGUnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMubG9nVG9Db25zb2xlIDogJ0FsbCc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcyA9IHRydWU7XG4gICAgICB0aGlzLl9zZW5kTG9ncyA9ICdBbGwnO1xuICAgICAgdGhpcy5fc2VuZE1ldHJpY3MgPSAnQWxsJztcbiAgICAgIHRoaXMuX2xvZ1RvQ29uc29sZSA9ICdBbGwnO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZEZlYXR1cmVzLmFwcGx5RmVhdHVyZXMoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlYXR1cmVFbmFibGVtZW50IHtcbiAgc3RhdGljIGdldCBjbGllbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENsaWVudCBvZmZlciB3b3JrZmxvdyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSBpbiB0aGUgZm9sbG93aW5nIGJyb3dzZXJzXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc0IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzYgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGdldCBhZGRUcmFuY2VpdmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hyb21lIDY5LCA3MCwgNzEsIDcyIGV4cG9zZXMgYGFkZFRyYW5jZWl2ZXJgIGJ1dCBpdCBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseVxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzAgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU2O1xuICB9XG5cbiAgc3RhdGljIGdldCBvblRyYWNrRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjMgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hvdWxkVXNlTmF0aXZlSGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYW1zdW5nQnJvd3Nlcic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUHJlY2FjaGluZ0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ0lFJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIHR5cGVvZiBkb2N1bWVudD8uY3JlYXRlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNRdWV1ZU1pY3JvdGFza1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA+PSA3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPj0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNNb2JpbGUoKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISh0eXBlb2YgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgIHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yID09PSAndW5kZWZpbmVkJyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgUlRDUnRwUmVjZWl2ZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBSVENSdHBSZWNlaXZlci5wcm90b3R5cGUuY3JlYXRlRW5jb2RlZFN0cmVhbXMgIT09ICd1bmRlZmluZWQnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIFJUQ1J0cFNjcmlwdFRyYW5zZm9ybSAhPT0gJ3VuZGVmaW5lZCc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19QQVJBTUVURVJTX186IHtcbiAgZGlzY292ZXJ5OiBJRGlzY292ZXJ5UGFyYW1ldGVyO1xufTtcblxuaW50ZXJmYWNlIElEaXNjb3ZlcnlQYXJhbWV0ZXJ7XG4gIGludGVudGlvbnM6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyYW1ldGVycyB7XG4gIHByaXZhdGUgc3RhdGljIF9kaXNjb3ZlcnlQYXJhbWV0ZXJzOiBJRGlzY292ZXJ5UGFyYW1ldGVyIDtcblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVBhcmFtZXRlcnMoKTogSURpc2NvdmVyeVBhcmFtZXRlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnM7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlQYXJhbWV0ZXJzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gX19QQVJBTUVURVJTX187XG5cbiAgICAgIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnMgPSAnZGlzY292ZXJ5JyBpbiBwYXJhbWV0ZXJzID8gcGFyYW1ldGVycy5kaXNjb3ZlcnkgOiB7aW50ZW50aW9uczogJyd9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnMgPSB7aW50ZW50aW9uczogJyd9O1xuICAgIH1cbiAgfVxufVxuXG5QYXJhbWV0ZXJzLmFwcGx5UGFyYW1ldGVycygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4vSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNwb3NhYmxlIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIF9kaXNwb3NlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGlzcG9zYWJsZTogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihkaXNwb3NhYmxlOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5fZGlzcG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlID0gZGlzcG9zYWJsZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3Bvc2FibGUuY2FsbCh0aGlzKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4vSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNwb3NhYmxlTGlzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3Q6IElEaXNwb3NhYmxlW10gPSBbXTtcblxuICBhZGQoZGlzcG9zYWJsZTogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LnB1c2goZGlzcG9zYWJsZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QuZm9yRWFjaChkaXNwb3NhYmxlID0+IGRpc3Bvc2FibGUuZGlzcG9zZSgpKTtcbiAgICB0aGlzLl9saXN0Lmxlbmd0aCA9IDA7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRGlzcG9zYWJsZUxpc3RbZGlzcG9zYWJsZXM9JHt0aGlzLl9saXN0Lmxlbmd0aH1dYDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuLy8gQXMgZmxvYXQgaW4gRUNNQVNjcmlwdCB1c2UgNjQtYml0IGZvcm1hdCBpdCBjYW5ub3QgaGF2ZS9oYW5kbGUgbW9yZSB0aGFuIDE1IHN5bWJvbHMgYWZ0ZXIgZG90LlxuY29uc3QgbWF4RGlnaXRzSW5GbG9hdEFmdGVyRG90ID0gMTU7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE51bWJlcnMge1xuICBzdGF0aWMgY291bnROdW1iZXJMZW5ndGgodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGluY3JlbWVudEZvck5lZ2F0aXZlVmFsdWUgPSAwO1xuICAgIGxldCBudW1iZXIgPSB2YWx1ZTtcblxuICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICBudW1iZXIgKj0gLTE7XG4gICAgICBpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcnMuY291bnREaWdpdHNCZWZvcmVEZWNpbWFsKG51bWJlcikgKyBpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlICsgKG51bWJlciAhPT0gTWF0aC5mbG9vcihudW1iZXIpID8gTnVtYmVycy5jb3VudERpZ2l0c0FmdGVyRGVjaW1hbChudW1iZXIpICsgMSA6IDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZml4Um91bmRpbmcodmFsdWU6IG51bWJlciwgcHJlY2lzaW9uOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHBvd2VyID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbik7XG5cbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIHBvd2VyKSAvIHBvd2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY291bnREaWdpdHNCZWZvcmVEZWNpbWFsKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBkaWdpdHNCZWZvcmVEZWNpbWFsID0gMTtcbiAgICBsZXQgbnVtYmVyID0gdmFsdWU7XG5cbiAgICB3aGlsZSAobnVtYmVyID49IDEwKSB7XG4gICAgICBudW1iZXIgPSBudW1iZXIgLyAxMDtcbiAgICAgIGRpZ2l0c0JlZm9yZURlY2ltYWwrKztcbiAgICB9XG5cbiAgICByZXR1cm4gZGlnaXRzQmVmb3JlRGVjaW1hbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvdW50RGlnaXRzQWZ0ZXJEZWNpbWFsKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB2YWx1ZTtcbiAgICBsZXQgbW9kaWZpZWRWYWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpO1xuICAgIGxldCBjb3VudCA9IDA7XG5cbiAgICB3aGlsZSAobW9kaWZpZWRWYWx1ZSAhPT0gb3JpZ2luYWxWYWx1ZSAmJiBjb3VudCA8IG1heERpZ2l0c0luRmxvYXRBZnRlckRvdCkge1xuICAgICAgY291bnQrKztcbiAgICAgIG1vZGlmaWVkVmFsdWUgPSBOdW1iZXJzLmZpeFJvdW5kaW5nKG9yaWdpbmFsVmFsdWUsIGNvdW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTnVtYmVycyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ3Mge1xuICBzdGF0aWMgcmFuZG9tKGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCByYW5kb20xM0NoYXJhY3RlcnMgPSAoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMiwgMTUpO1xuICAgIH07XG5cbiAgICBjb25zdCBsb29wczogbnVtYmVyID0gTWF0aC5jZWlsKGxlbmd0aCAvIDEzKTtcblxuICAgIHJldHVybiBuZXcgQXJyYXkobG9vcHMpLmZpbGwocmFuZG9tMTNDaGFyYWN0ZXJzKS5yZWR1Y2UoKHN0cmluZywgZnVuYykgPT4ge1xuICAgICAgcmV0dXJuIHN0cmluZyArIGZ1bmMoKTtcbiAgICB9LCAnJykuc3Vic3RyaW5nKDAsIGxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5ncyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZSh4OiBuZXZlcik6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIFske3h9XS4gVGhpcyBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZGApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NlcnRVbnJlYWNoYWJsZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGVuZGVycyB7XG4gIHByaXZhdGUgX2FwcGVuZGVyczogQXJyYXk8SUFwcGVuZGVyPiA9IFtdO1xuXG4gIGdldCB2YWx1ZSgpOiBBcnJheTxJQXBwZW5kZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgYWRkKGFwcGVuZGVyOiBJQXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMucHVzaChhcHBlbmRlcik7XG4gIH1cblxuICByZW1vdmUoYXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSB0aGlzLl9hcHBlbmRlcnMucmVkdWNlKChpdGVtcywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCEoaXRlbSA9PT0gYXBwZW5kZXIpKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9LCBbXSBhcyBBcnJheTxJQXBwZW5kZXI+KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnNvbGVBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsTWVzc2FnZSA9IGAke2RhdGUudG9JU09TdHJpbmcoKX0gWyR7Y2F0ZWdvcnl9XSBbJHtMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdfV0gJHttZXNzYWdlfWA7XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgY29uc29sZS5sb2coZnVsbE1lc3NhZ2UpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihmdWxsTWVzc2FnZSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcblxuZXhwb3J0IGVudW0gTG9nZ2luZ0xldmVsIHtcbiAgQWxsID0gLTEsXG4gIFRyYWNlID0gMTAsXG4gIERlYnVnID0gMjAsXG4gIEluZm8gPSAzMCxcbiAgV2FybiA9IDQwLFxuICBFcnJvciA9IDUwLFxuICBGYXRhbCA9IDYwLFxuICBPZmYgPSAxMDAsXG59XG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdMZXZlbFR5cGUgPSAnT2ZmJyB8ICdUcmFjZScgfCAnRGVidWcnIHwgJ0luZm8nIHwgJ1dhcm4nIHwgJ0Vycm9yJyB8ICdGYXRhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2F0ZWdvcnk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwZW5kZXJzOiBBcHBlbmRlcnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZDtcblxuICBnZXQgY2F0ZWdvcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcnk7XG4gIH1cblxuICBnZXQgYXBwZW5kZXJzKCk6IEFwcGVuZGVycyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ1RocmVzaG9sZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHRyYWNlKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5UcmFjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5UcmFjZSwgYXJncyk7XG4gIH1cblxuICBkZWJ1ZyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRGVidWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRGVidWcsIGFyZ3MpO1xuICB9XG5cbiAgaW5mbyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5JbmZvLCBhcmdzKTtcbiAgfVxuXG4gIHdhcm4oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuV2FybiwgYXJncyk7XG4gIH1cblxuICBlcnJvciguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRXJyb3IsIGFyZ3MpO1xuICB9XG5cbiAgZmF0YWwoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkZhdGFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkZhdGFsLCBhcmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nKGxldmVsOiBudW1iZXIsIGFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnJlcGxhY2VQbGFjZWhvbGRlcnMoYXJncyk7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMudmFsdWUuZm9yRWFjaCgoYXBwZW5kZXI6IElBcHBlbmRlcikgPT4ge1xuICAgICAgYXBwZW5kZXIubG9nKGxldmVsLCBtZXNzYWdlLCB0aGlzLmNhdGVnb3J5LCBkYXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gYXJnc1swXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZiAmJiBhcmdzLmxlbmd0aCA+IDEgJiYgaW5kZXggPj0gMCkge1xuICAgICAgaW5kZXggPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YoJyUnLCBpbmRleCk7XG5cbiAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSwgaW5kZXggKyAyKTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgIC8vIEVzY2FwZWQgJyUlJyB0dXJucyBpbnRvICclJ1xuICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJyVkJyBvciAnJXMnIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nKGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJWonIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnN0cmluZ2lmeShhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MgPSBhcmdzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPT09IGFycmF5Lmxlbmd0aCAmJiBjdXJyZW50VmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUuc3RhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgYFske3RoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlKX1dYDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeShhcmc6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FjaGUgPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGFyZyBpbnN0YW5jZW9mIEVycm9yID8gdGhpcy50b1N0cmluZyhhcmcpIDogYXJnLFxuICAgICAgICAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoY2FjaGUuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnPHJlY3Vyc2l2ZT4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWNoZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIDJcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICdbb2JqZWN0IGludmFsaWQgSlNPTi5zdHJpbmdpZnldJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VBcmd1bWVudChhcmd1bWVudDogYW55LCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyB0aGlzLnRvU3RyaW5nKGFyZ3VtZW50KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMik7XG4gIH1cblxuICBwcml2YXRlIHRvU3RyaW5nKGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkYXRhID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCB0b1N0cmluZ1N0ciA9ICcnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSAnW29iamVjdCBpbnZhbGlkIHRvU3RyaW5nKCldJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1N0cmluZ1N0cjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIGFwcGVuZGVyczogQXBwZW5kZXJzLCB0aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQpIHtcbiAgICB0aGlzLl9jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IGFwcGVuZGVycztcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJEZWZhdWx0cyB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdExvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTG9nc107XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbFtCdWlsZEZlYXR1cmVzLmxvZ1RvQ29uc29sZV07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlciwge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXJzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBJTG9nZ2VyfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBfYXBwZW5kZXJzOiBBcHBlbmRlcnMgPSBuZXcgQXBwZW5kZXJzKCk7XG4gIHByaXZhdGUgc3RhdGljIF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQgPSBuZXcgTG9nZ2luZ1RocmVzaG9sZCgpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IG5ldyBUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll90ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldExvZ2dlcihjYXRlZ29yeTogc3RyaW5nKTogSUxvZ2dlciB7XG4gICAgaWYgKHR5cGVvZiBjYXRlZ29yeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNhdGVnb3J5ID0gJ1NESyc7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV07XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIH1cblxuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XSA9IG5ldyBMb2dnZXIoY2F0ZWdvcnksIHRoaXMuX2FwcGVuZGVycywgdGhpcy5fdGhyZXNob2xkKTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlMb2dnaW5nTGV2ZWwoKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ2NvbnNvbGUnLCBMb2dnZXJGYWN0b3J5LmFwcGx5Q29uc29sZUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ3RlbGVtZXRyeScsIExvZ2dlckZhY3RvcnkuYXBwbHlUZWxlbWV0cnlMb2dnZXIuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUxvZ2dpbmdMZXZlbCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1sb2dnaW5nLWxldmVsJyk7XG5cbiAgICBpZiAoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSkge1xuICAgICAgdGhpcy5fdGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKG5hbWU6IHN0cmluZywgYXBwbHlBcHBlbmRlcjogKGxldmVsOiBMb2dnaW5nTGV2ZWwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoYHBoZW5peC0ke25hbWV9LWxvZ2dpbmctbGV2ZWxgKTtcblxuICAgIGlmIChwYXJhbWV0ZXJWYWx1ZSA9PT0gJ09mZicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhcHBseUFwcGVuZGVyKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlDb25zb2xlTG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIobGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5VGVsZW1ldHJ5TG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9nZ2VyRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nTGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUobG9nZ2luZ0xldmVsOiBMb2dnaW5nTGV2ZWwpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbCkge1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5UcmFjZTpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5EZWJ1ZzpcbiAgICAgICAgcmV0dXJuICdEZWJ1Zyc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5JbmZvOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLldhcm46XG4gICAgICAgIHJldHVybiAnV2Fybic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5FcnJvcjpcbiAgICAgICAgcmV0dXJuICdFcnJvcic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5GYXRhbDpcbiAgICAgICAgcmV0dXJuICdGYXRhbCc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwobG9nZ2luZ0xldmVsVHlwZTogTG9nZ2luZ0xldmVsVHlwZSk6IExvZ2dpbmdMZXZlbCB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLk9mZjtcbiAgICAgIGNhc2UgJ1RyYWNlJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5UcmFjZTtcbiAgICAgIGNhc2UgJ0RlYnVnJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5EZWJ1ZztcbiAgICAgIGNhc2UgJ0luZm8nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gICAgICBjYXNlICdXYXJuJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5XYXJuO1xuICAgICAgY2FzZSAnRXJyb3InOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkVycm9yO1xuICAgICAgY2FzZSAnRmF0YWwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkZhdGFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdUaHJlc2hvbGQge1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHZhbHVlKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldFRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY1R5cGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzOiBNZXRyaWNzVHlwZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzOiBNZXRyaWNzVHlwZSkge1xuICAgIHRoaXMuX21ldHJpY3MgPSBtZXRyaWNzO1xuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBNZXRyaWNzVHlwZVt0aGlzLl9tZXRyaWNzXTtcbiAgfVxuXG4gIGdldFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICBzd2l0Y2ggKHRoaXMuX21ldHJpY3MpIHtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU3RhbGxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQnVmZmVyaW5nOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fbWV0cmljcyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5leHBvcnQgZW51bSBUZWxlbWV0cnlMZXZlbCB7XG4gIE9mZiA9IDEwMCxcbiAgRXNzZW50aWFsID0gMTAsXG4gIEFsbCA9IC0xXG59XG5cbmV4cG9ydCB0eXBlIFRlbGVtZXRyeUxldmVsVHlwZSA9ICdPZmYnIHwgJ0Vzc2VudGlhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbWV0cmljcyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwgPSBUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtZXRyaWNzVXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgbWV0cmljc1VybC5wYXRobmFtZSA9IG1ldHJpY3NVcmwucGF0aG5hbWUgKyAnL21ldHJpY3MnO1xuXG4gICAgdGhpcy5fdXJsID0gbWV0cmljc1VybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuLi9zZGsvVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi9zZGsvRW52aXJvbm1lbnQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZXM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IE1ldHJpY3NTZXJ2aWNlfSA9IHt9O1xuXG4gIHN0YXRpYyBnZXRNZXRyaWNzU2VydmljZSh1cmw6IHN0cmluZyk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF07XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzKSB7XG4gICAgICByZXR1cm4gbWV0cmljc1NlcnZpY2VzO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbmV3IE1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodXJsKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChTREsudGVsZW1ldHJ5TGV2ZWwpO1xuXG4gICAgcmV0dXJuIE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXSA9IG5ldyBNZXRyaWNzU2VydmljZShtZXRyaWNzQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogdm9pZCB7XG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gT2JqZWN0LnZhbHVlcyhNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzKTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMgJiYgbWV0cmljc1NlcnZpY2VzLmxlbmd0aCkge1xuICAgICAgbWV0cmljc1NlcnZpY2VzLmZvckVhY2gobWV0cmljc1NlcnZpY2UgPT4ge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IHRlbGVtZXRyeUxldmVsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uIGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi9NZXRyaWNUeXBlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDEwMjQ7XG5jb25zdCBtYXhCdWZmZXJlZFJlY29yZHMgPSAyMDQ4O1xuXG5pbnRlcmZhY2UgSVZhbHVlIHtcbiAgc3RyaW5nPzogc3RyaW5nO1xuICB1aW50NjQ/OiBudW1iZXI7XG4gIGZsb2F0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBtZXRyaWM6IHN0cmluZztcbiAgdmFsdWU6IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZTogSVZhbHVlO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJTWV0cmljIHtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlO1xuICB2YWx1ZT86IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZT86IElWYWx1ZTtcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignTWV0cmljc1NlcnZpY2UnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSBfbWV0cmljczogQXJyYXk8SU1ldHJpY1JlY29yZD4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9mYWlsdXJlQ291bnQgPSAwO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NDb25maWd1cmF0aW9uO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbWV0cmljc01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBtZXRyaWNzTWVzc2FnZXMgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKDAsIHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgdGhpcy5fbWV0cmljcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UocmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUocmVzcG9uc2UpKSB7XG4gICAgICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSBtYXhCdWZmZXJlZFJlY29yZHMpIHtcbiAgICAgICAgICB0aGlzLl9mYWlsdXJlQ291bnQrKztcblxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbWV0cmljcyA9IFsuLi5tZXRyaWNzTWVzc2FnZXMsIC4uLnRoaXMuX21ldHJpY3NdO1xuXG4gICAgICAgICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgICAgICAgICB9LCB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9mYWlsdXJlQ291bnQpKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignVG9vIG1hbnkgY2FjaGVkIG1ldHJpYyByZWNvcmRzIFslc10sIGRyb3BwaW5nIFslc10gcmVjb3JkcycsIHRoaXMuX21ldHJpY3MubGVuZ3RoLCBtZXRyaWNzTWVzc2FnZXMubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9mYWlsdXJlQ291bnQgPSAwO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzUmVzcG9uc2VTdGF0dXNDb2RlUmV0cnlhYmxlKHtzdGF0dXN9OiBSZXNwb25zZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXjVcXGR7Mn0kLy50ZXN0KHN0YXR1cy50b1N0cmluZygpKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBNZXRyaWNzVHlwZSB7XG4gIFRpbWVUb0ZpcnN0RnJhbWUsXG4gIENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gIFN0YWxsZWQsXG4gIEJ1ZmZlcmluZyxcbiAgU2V0dXBDb21wbGV0ZWQsXG4gIFNldHVwRmFpbGVkLFxuICBSb3VuZFRyaXBUaW1lLFxuICBEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgTmV0d29ya1R5cGUsXG4gIFJlc29sdXRpb25DaGFuZ2VkLFxuICBBcHBsaWNhdGlvbkZvcmVncm91bmQsXG4gIEFwcGxpY2F0aW9uQmFja2dyb3VuZFxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXRyaWNzVHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUxldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDpcbiAgICAgICAgcmV0dXJuICdFc3NlbnRpYWwnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWxUeXBlOiBUZWxlbWV0cnlMZXZlbFR5cGUpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5PZmY7XG4gICAgICBjYXNlICdFc3NlbnRpYWwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlEZWZhdWx0IHtcbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRNZXRyaWNzXTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2VIYW5kbGVyIGZyb20gJy4vUHJvbWlzZUhhbmRsZXInO1xuXG5jbGFzcyBQcm9taXNlIHtcbiAgX3N0YXRlOiBudW1iZXI7XG4gIF9oYW5kbGVkOiBib29sZWFuO1xuICBfdmFsdWU6IFByb21pc2U7XG4gIF9kZWZlcnJlZHM6IEFycmF5PFByb21pc2VIYW5kbGVyPjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIHRoZW4ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXcnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdub3QgYSBmdW5jdGlvbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlID0gMDtcbiAgICB0aGlzLl9oYW5kbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGVmZXJyZWRzID0gW107XG5cbiAgICB0aGlzLmRvUmVzb2x2ZShjYWxsYmFjayk7XG4gIH1cblxuICBkb1Jlc29sdmUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjYWxsYmFjayhcbiAgICAgICAgdmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbiA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZWplY3QocmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMucHJvbWlzZVJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlc29sdmUobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFByb21pc2UgUmVzb2x1dGlvbiBQcm9jZWR1cmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Qcm9taXNlcy1hcGx1cy9Qcm9taXNlcy1zcGVjI3RoZS1Qcm9taXNlLXJlc29sdXRpb24tcHJvY2VkdXJlXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHByb21pc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQSBQcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0IHNlbGYuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWYWx1ZSAmJiAodHlwZW9mIG5ld1ZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV3VmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgIGNvbnN0IHRoZW4gPSBuZXdWYWx1ZS50aGVuO1xuXG4gICAgICAgIGlmIChuZXdWYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICBwcm9taXNlLl9zdGF0ZSA9IDM7XG4gICAgICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICBwcm9taXNlLmZpbmFsZSgpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcHJvbWlzZS5kb1Jlc29sdmUoZnVuY3Rpb24oKTogdm9pZCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICB0aGVuLmFwcGx5KG5ld1ZhbHVlLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb21pc2UuX3N0YXRlID0gMTtcbiAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICBwcm9taXNlLmZpbmFsZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHByb21pc2UucHJvbWlzZVJlamVjdChlKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVqZWN0KG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUgPSAyO1xuICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy5maW5hbGUoKTtcbiAgfVxuXG4gIGZpbmFsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IDIgJiYgdGhpcy5fZGVmZXJyZWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9oYW5kbGVkKSB7XG4gICAgICAgICAgUHJvbWlzZS5fdW5oYW5kbGVkUmVqZWN0aW9uKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuX2RlZmVycmVkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGhpcy5oYW5kbGUodGhpcy5fZGVmZXJyZWRzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBudWxsO1xuICB9XG5cbiAgaGFuZGxlKGRlZmVycmVkOiBQcm9taXNlSGFuZGxlcik6IHZvaWQge1xuICAgIGxldCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgd2hpbGUgKHByb21pc2UuX3N0YXRlID09PSAzKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5fdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAwKSB7XG4gICAgICBwcm9taXNlLl9kZWZlcnJlZHMucHVzaChkZWZlcnJlZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9taXNlLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9taXNlLl9zdGF0ZSA9PT0gMSA/IGRlZmVycmVkLm9uRnVsZmlsbGVkIDogZGVmZXJyZWQub25SZWplY3RlZDtcblxuICAgICAgaWYgKGNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMSkge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCByZXN1bHQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShyZXN1bHQpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFsbChhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5hbGwgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycik7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShbXSk7XG4gICAgICB9XG5cbiAgICAgIGxldCByZW1haW5pbmcgPSBhcmdzLmxlbmd0aDtcbiAgICAgIGNvbnN0IG1hbmFnZVJlc3BvbnNlID0gKGksIHZhbHVlKTogdm9pZCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRoZW4gPSB2YWx1ZS50aGVuO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgdGhlbi5jYWxsKFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlID0+IG1hbmFnZVJlc3BvbnNlKGksIHZhbHVlKSxcbiAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXJnc1tpXSA9IHZhbHVlO1xuXG4gICAgICAgICAgaWYgKC0tcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKGFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFuYWdlUmVzcG9uc2UoaSwgYXJnc1tpXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZSh2YWx1ZSk6IFByb21pc2Uge1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcmVzb2x2ZSh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJlamVjdCh2YWx1ZSk6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiByZWplY3QodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByYWNlKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLnJhY2UgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoYXJyW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgX2ltbWVkaWF0ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dChjYWxsYmFjaywgMCk7XG4gIH1cblxuICBzdGF0aWMgX3VuaGFuZGxlZFJlamVjdGlvbihlcnJvcik6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZSkge1xuICAgICAgY29uc29sZS53YXJuKCdQb3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb246JywgZXJyb3IpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn1cblxuUHJvbWlzZS5wcm90b3R5cGVbJ2NhdGNoJ10gPSBmdW5jdGlvbihvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWyd0aGVuJ10gPSBmdW5jdGlvbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBwcm9taXNlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKCkgPT4gbnVsbCk7XG5cbiAgdGhpcy5oYW5kbGUobmV3IFByb21pc2VIYW5kbGVyKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSk7XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddID0gZnVuY3Rpb24oY2FsbGJhY2s6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICB2YWx1ZSA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gdmFsdWUpLFxuICAgIHJlYXNvbiA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gY29uc3RydWN0b3IucmVqZWN0KHJlYXNvbikpXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQcm9taXNlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2UgZnJvbSAnLi9Qcm9taXNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvbWlzZUhhbmRsZXIge1xuICBvbkZ1bGZpbGxlZDogRnVuY3Rpb247XG4gIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uO1xuICBwcm9taXNlOiBQcm9taXNlO1xuXG4gIGNvbnN0cnVjdG9yKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSB7XG4gICAgdGhpcy5vbkZ1bGZpbGxlZCA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogbnVsbDtcbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSB0eXBlb2Ygb25SZWplY3RlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uUmVqZWN0ZWQgOiBudWxsO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB7XG4gIGF1ZGlvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgdmlkZW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICBwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBsb2NhbE9mZmVyOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1BlZXJDb25uZWN0aW9uU2VydmljZScpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcGVlckNvbm5lY3Rpb25GYWN0b3J5OiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4obmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkoKSk7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWQ6IHtcbiAgICBkaXJlY3Rpb24/OiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjtcbiAgICBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+O1xuICB9O1xuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBpbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1ByZWNhY2hpbmdFbmFibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IFBlZXJDb25uZWN0aW9uU2VydmljZS5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHJlLWNhY2hlIHBlZXIgY29ubmVjdGlvbiBvZmZlcicsIGUpKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCk6IFByb21pc2U8eyBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQgfCB2b2lkPjsgZGlyZWN0aW9uOiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiB9PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0ge1xuICAgICAgZGlyZWN0aW9uOiAncmVjdm9ubHknLFxuICAgICAgcGVlckNvbm5lY3Rpb246IFBlZXJDb25uZWN0aW9uU2VydmljZS5jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gPSAncmVjdm9ubHknLCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgPSBmYWxzZSk6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PiB7XG4gICAgaWYgKFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkICYmIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLmRpcmVjdGlvbiA9PT0gZGlyZWN0aW9uICYmICFlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQucGVlckNvbm5lY3Rpb247XG5cbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gPSBGZWF0dXJlRW5hYmxlbWVudC5pc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCA/IHtlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXN9IDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fcGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pXG4gICAgICAudGhlbihhc3luYyBwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0FkZFRyYW5zY2VpdmVyO1xuICAgICAgICBsZXQgdmlkZW9UcmFuc2NlaXZlciwgYXVkaW9UcmFuc2NlaXZlcjtcblxuICAgICAgICBpZiAoc3VwcG9ydHNBZGRUcmFuc2NlaXZlcikge1xuICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcignYXVkaW8nLCB7ZGlyZWN0aW9ufSk7XG4gICAgICAgICAgdmlkZW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCd2aWRlbycsIHtkaXJlY3Rpb259KTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyLFxuICAgICAgICAgICAgdmlkZW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICAgIGxvY2FsT2ZmZXI6IGF3YWl0IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHVuZGVmaW5lZClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGRpcmVjdGlvbiA9PT0gJ3JlY3Zvbmx5JyA/IHtcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgIG9mZmVyVG9SZWNlaXZlVmlkZW86IHRydWVcbiAgICAgICAgfSA6IHt9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgIGxvY2FsT2ZmZXI6IGF3YWl0IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cblBlZXJDb25uZWN0aW9uU2VydmljZS5pbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25maWd1cmF0aW9uTWFuYWdlciB7XG4gIHN0YXRpYyB0cnVuY2F0ZUljZVNlcnZlcnMoY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdXJsczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDI7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgdXJsID0gY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdO1xuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICB1cmxzLnB1c2goY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICB1cmxzOiB1cmxzLFxuICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcblxuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU2RwUGFyc2VyIGZyb20gJy4vU2RwUGFyc2VyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGludGVyZmFjZSBJUnRjTW9uaXRvclN0YXRpc3RpYyB7XG4gIFtraW5kOiBzdHJpbmddOiBJUnRjU3RhdGlzdGljO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydCB7XG4gIHJlc3VsdDogKCkgPT4gSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW0gZXh0ZW5kcyBSVENTdGF0c1JlcG9ydCB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZXM6ICgpID0+IHN0cmluZ1tdO1xuICBzdGF0OiAobmFtZSkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNTdGF0aXN0aWMge1xuICBzc3JjPzogc3RyaW5nO1xuICBtZWRpYVR5cGU/OiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBieXRlc1JlY2VpdmVkPzogbnVtYmVyO1xuICBmcmFtZXNEZWNvZGVkPzogbnVtYmVyO1xuICBwYWNrZXRzTG9zdD86IG51bWJlcjtcbiAgcGFja2V0c1JlY2VpdmVkPzogbnVtYmVyO1xuICBjb2RlYz86IHN0cmluZztcbiAgZnBzPzogbnVtYmVyO1xuICByb3VuZFRyaXBUaW1lPzogbnVtYmVyO1xuICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbmNvbnN0IHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25uZWN0aW9uTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRWaWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZEF1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRjU3RhdGlzdGljOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RyYWNrc1RvTW9uaXRvcjogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IHBlZXJDb25uZWN0aW9uO1xuICAgIHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUgPSBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgIHRoaXMuX3RyYWNrc1RvTW9uaXRvciA9IG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLm1hcCh0cmFjayA9PiB0cmFjay5raW5kKSB8fCBbXTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5nZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCkge1xuICAgICAgICBjb25zdCBwYXJzZWRTRFAgPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRTRFAuYXVkaW9Db2RlYztcbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFNEUC52aWRlb0NvZGVjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWMoKTogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9ydGNTdGF0aXN0aWM7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXBkYXRlVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLnVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIDExIGRvZXNudCBoYXZlIGtpbmQgb3IgbWVkaWFUeXBlIHNvIHdlIG5lZWQgdG8gdGFrZSBpdCBmcm9tIHRoZSBpbmJvdW5kLXJ0cCBvYmplY3QgaWRcbiAgICBjb25zdCBnZXRLaW5kRm9yU2FmYXJpMTEgPSAoaXRlbSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKG51bGwpXG4gICAgICAudGhlbihzdGF0cyA9PiB7XG4gICAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG5cbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgICAgICAgIGxldCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICBzdGF0cy5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lKSB7XG4gICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUgKiAxMDAwO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2luYm91bmQtcnRwJykge1xuICAgICAgICAgICAgICBjb25zdCBraW5kID0gcmVwb3J0LmtpbmQgfHwgcmVwb3J0Lm1lZGlhVHlwZSB8fCBnZXRLaW5kRm9yU2FmYXJpMTEocmVwb3J0KTtcbiAgICAgICAgICAgICAgbGV0IGNvZGVjID0gJyc7XG5cbiAgICAgICAgICAgICAgc3RhdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gcmVwb3J0LmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX3RyYWNrc1RvTW9uaXRvci5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gcmVwb3J0LmJ5dGVzUmVjZWl2ZWQgfHwgMDtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0J5dGVzUmVjZWl2ZWQgPSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8uYnl0ZXNSZWNlaXZlZCA/PyAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzRGVsdGEgPSBieXRlcyAtIHByZXZpb3VzQnl0ZXNSZWNlaXZlZDtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lRGVsdGEgPSByZXBvcnQudGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LnRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICBjb25zdCBiaXRyYXRlID0gYnl0ZXNEZWx0YSAmJiB0aW1lRGVsdGEgPyBNYXRoLmZsb29yKDggKiBieXRlc0RlbHRhIC9cbiAgICAgICAgICAgICAgICAgIHRpbWVEZWx0YSAqIDEwMDApIDogMDtcblxuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0gPSB7XG4gICAgICAgICAgICAgICAgICBzc3JjOiByZXBvcnQuc3NyYyxcbiAgICAgICAgICAgICAgICAgIG1lZGlhVHlwZToga2luZCxcbiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogcmVwb3J0LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgIGJpdHJhdGUsXG4gICAgICAgICAgICAgICAgICBieXRlc1JlY2VpdmVkOiByZXBvcnQuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNMb3N0OiByZXBvcnQucGFja2V0c0xvc3QsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzUmVjZWl2ZWQ6IHJlcG9ydC5wYWNrZXRzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBjb2RlYzogY29kZWMgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShraW5kKSxcbiAgICAgICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5mcmFtZXNEZWNvZGVkO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBmcHMgPSAocmVwb3J0LmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAgICAgICAocnRjU3RhdGlzdGljc1traW5kXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAgICAgICAgIDEwMDA7XG5cbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZwcyddID0gZnBzID8gTWF0aC5yb3VuZChmcHMgKiAxMDApIC8gMTAwIDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWNMZWdhY3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzTGVnYWN5KCkudGhlbihzdGF0cyA9PiB7XG4gICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuXG4gICAgICBzdGF0cy5yZXN1bHQoKS5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgIHJlcG9ydC5uYW1lcygpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdnb29nUlRUJykge1xuICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5zdGF0KG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnc3NyYycpIHtcbiAgICAgICAgICBjb25zdCBtZWRpYVR5cGUgPSByZXBvcnQuc3RhdCgnbWVkaWFUeXBlJykudG9TdHJpbmcoKTtcblxuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXSA9IHt0aW1lc3RhbXA6IERhdGUubm93KCl9O1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnc3NyYyddID0gcmVwb3J0LnN0YXQoJ3NzcmMnKS50b1N0cmluZygpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnbWVkaWFUeXBlJ10gPSBtZWRpYVR5cGU7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydieXRlc1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgnYnl0ZXNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncGFja2V0c0xvc3QnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzTG9zdCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncGFja2V0c1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgncGFja2V0c1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydjb2RlYyddID0gcmVwb3J0LnN0YXQoJ2dvb2dDb2RlY05hbWUnKS50b1N0cmluZygpIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUobWVkaWFUeXBlKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3JvdW5kVHJpcFRpbWUnXSA9IHJvdW5kVHJpcFRpbWU7XG5cbiAgICAgICAgICBpZiAobWVkaWFUeXBlID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LnN0YXQoJ2ZyYW1lc0RlY29kZWQnKTtcbiAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnZnBzJ10gPSAocnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdLmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAocnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgIDEwMDAgfHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZWNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWM7XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2RwUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2RwOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0F1ZGlvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1ZpZGVvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNkcDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2RwID0gc2RwO1xuXG4gICAgY29uc3Qgc2RwU3BsaXRCeUxpbmVzID0gdGhpcy5fc2RwLnNwbGl0KC8oXFxyXFxufFxccnxcXG4pLyk7XG4gICAgY29uc3Qgc2RwU3BsaXRCeVRyYWNrcyA9IHRoaXMuX3NkcC5zcGxpdCgvKD86XnxbXFxyXFxuXSltPS8pO1xuXG4gICAgdGhpcy5fYXVkaW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygnYXVkaW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX3ZpZGVvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ3ZpZGVvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgnYXVkaW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgICB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgndmlkZW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgfVxuXG4gIGdldCBhdWRpb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ29kZWM7XG4gIH1cblxuICBnZXQgdmlkZW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92aWRlb0NvZGVjO1xuICB9XG5cbiAgZ2V0IGlzQXVkaW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBnZXQgaXNWaWRlb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNUcmFja0J5VHlwZUVuYWJsZWQodHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5VHJhY2tzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNkcFNlY3Rpb25Gb3JUeXBlID0gc2RwU3BsaXRCeVRyYWNrcy5maW5kKHNkcFRyYWNrID0+IHNkcFRyYWNrLnN0YXJ0c1dpdGgodHlwZSkpO1xuXG4gICAgaWYgKCFzZHBTZWN0aW9uRm9yVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhc2RwU2VjdGlvbkZvclR5cGUuaW5jbHVkZXMoYGE9aW5hY3RpdmVgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb2RlYyh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlMaW5lczogc3RyaW5nIFtdKTogc3RyaW5nIHtcbiAgICBjb25zdCB1c2VkQ29kZWNMaW5lID0gc2RwU3BsaXRCeUxpbmVzLmZpbmQoc2RwTGluZSA9PiBzZHBMaW5lLmluY2x1ZGVzKGBhPXJ0cG1hcDoke3NkcFNwbGl0QnlMaW5lcy5maW5kKGkgPT4gaS5pbmNsdWRlcyhgbT0ke3R5cGV9YCkpLnNwbGl0KCcgJylbM119YCkpO1xuICAgIGNvbnN0IHVzZWRDb2RlYyA9IHVzZWRDb2RlY0xpbmUuc3BsaXQoJyAnKVsxXTtcbiAgICBjb25zdCBjb2RlY05hbWUgPSB1c2VkQ29kZWMuc3BsaXQoJy8nKVswXTtcblxuICAgIHJldHVybiBjb2RlY05hbWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24sIHtQZWVyQ29ubmVjdGlvbkV2ZW50c30gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQge0lMZWdhY3lSVENTdGF0c1JlcG9ydH0gZnJvbSAnLi9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdWYW5pbGxhUGVlckNvbm5lY3Rpb24nKTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IFJUQ1BlZXJDb25uZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24gY2xhc3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgZ2V0IG5hdGl2ZSgpOiBSVENQZWVyQ29ubmVjdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgY29ubmVjdGlvblN0YXRlKCk6IFJUQ1BlZXJDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgaWNlQ29ubmVjdGlvblN0YXRlKCk6IFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZTtcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNBZGRUcmFuc2NlaXZlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIUZlYXR1cmVFbmFibGVtZW50LmFkZFRyYW5jZWl2ZXJEaXNhYmxlZCAmJiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBhc3luYyBjcmVhdGVPZmZlcihvcHRpb25zPzogUlRDT2ZmZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVPZmZlciBtZXRob2Qgd2l0aCBjYWxsYmFja3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVBbnN3ZXIob3B0aW9ucz86IFJUQ0Fuc3dlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZUFuc3dlciBtZXRob2Qgd2l0aCBjYWxsYmFja3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHNldExvY2FsRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaGFzQ3J5cHRvID0gZGVzY3JpcHRpb24uc2RwPy5tYXRjaCgvYT1jcnlwdG86L2kpO1xuXG4gICAgaWYgKGhhc0NyeXB0bykge1xuICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1NEUCBhPWNyeXB0byBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgZ2V0U2VuZGVycygpOiBSVENSdHBTZW5kZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFNlbmRlcnMoKTtcbiAgfVxuXG4gIGdldFJlY2VpdmVycygpOiBSVENSdHBSZWNlaXZlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0UmVjZWl2ZXJzKCk7XG4gIH1cblxuICBnZXRTdGF0cyhzZWxlY3Rvcj86IE1lZGlhU3RyZWFtVHJhY2sgfCBudWxsKTogUHJvbWlzZTxSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhzZWxlY3Rvcik7XG4gIH1cblxuICBnZXRTdGF0c0xlZ2FjeSgpOiBQcm9taXNlPElMZWdhY3lSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIC8vIElnbm9yZWQgZHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBsZWdhY3kgJ2dldFN0YXRzJyBtZXRob2QgdHlwZSBkZWZpbml0aW9uXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgJ2dldFN0YXRzJyBtZXRob2QgZm9yXG4gICAgICAvLyBDaHJvbWVAPD0gNjYgZGV0YWlsZWQgaGVyZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjI3ODE2XG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRUcmFuc2NlaXZlcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCk6IFJUQ1J0cFRyYW5zY2VpdmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIobmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRTdHJlYW0obWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogdm9pZCB7XG4gICAgbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFjayh0cmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb25maWd1cmF0aW9uKCk6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBzZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc2V0IG9udHJhY2soaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2sgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9udHJhY2soKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2s7XG4gIH1cblxuICBzZXQgb25pY2VjYW5kaWRhdGUoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNhbmRpZGF0ZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGU7XG4gIH1cblxuICBzZXQgb25jb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBzZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb247IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb24nO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSB7XG4gIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gbmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuL1N1YmplY3QnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkT25seVN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJqZWN0OiBTdWJqZWN0PFQ+O1xuXG4gIGNvbnN0cnVjdG9yKHN1YmplY3Q6IFN1YmplY3Q8VD4pIHtcbiAgICB0aGlzLl9zdWJqZWN0ID0gc3ViamVjdDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5jbGFzcyBEaXNwb3NhYmxlTGlzdGVuZXI8VD4gZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgY29uc3RydWN0b3IobGlzdGVuZXJzOiBBcnJheTxUPiwgbGlzdGVuZXI6IFQpIHtcbiAgICBzdXBlcigoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogQXJyYXk8KFQpID0+IHZvaWQ+O1xuICBwcml2YXRlIF92YWx1ZTogVDtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IFQpIHtcbiAgICBsZXQgY2hhbmdlZCA9IHRoaXMuX3ZhbHVlICE9PSB2YWx1ZTtcblxuICAgIGlmIChjaGFuZ2VkICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBjb21wYXJhYmxlID0gdmFsdWUgYXMgdW5rbm93biBhcyBJQ29tcGFyYWJsZTxUPjtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wYXJhYmxlLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjaGFuZ2VkID0gIWNvbXBhcmFibGUuZXF1YWxzKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgbGlzdGVuZXIodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgbGlzdGVuZXIodGhpcy5fdmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlTGlzdGVuZXI8KFQpID0+IHZvaWQ+KHRoaXMuX2xpc3RlbmVycywgbGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVudmlyb25tZW50IHtcbiAgc3RhdGljIGdldEVudmlyb25tZW50RnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICAgIHJldHVybiBiYXNlVVJMLm9yaWdpbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgU3RyaW5ncyBmcm9tICcuLi9sYW5nL1N0cmluZ3MnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi4vbG9nZ2VyL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5pbXBvcnQge0lDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyfSBmcm9tICcuLi9kb20vSUNvbmZpZ3VyYXRpb25QYXJhbWF0ZXJSZWFkZXInO1xuaW1wb3J0IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIGZyb20gJy4uL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuLi9ydGMvSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9FbnZpcm9ubWVudCc7XG5pbXBvcnQge0hsc1BsYXllclR5cGUsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9zdHJlYW1pbmcvU3RyZWFtVHlwZXMnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcblxuY29uc3QgcGFnZUxvYWRUaW1lID0gd2luZG93WydfX3BoZW5peFBhZ2VMb2FkVGltZSddIHx8IHdpbmRvd1snX19wYWdlTG9hZFRpbWUnXSB8fCBEYXRlLm5vdygpO1xuXG5pbnRlcmZhY2UgSUluaXRPcHRpb25zIHtcbiAgZGlzY292ZXJ5VXJpPzogc3RyaW5nO1xuICBwZWVyQ29ubmVjdGlvbkZhY3Rvcnk/OiBJUGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB0ZWxlbWV0cnlMZXZlbD86IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgY29uc29sZUxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbFR5cGU7XG4gIGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0/OiBib29sZWFuO1xuICBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZT86IGJvb2xlYW47XG4gIHdlYlBsYXllckxvYWRlcj86IChwbGF5ZXI6IFdlYlBsYXllclR5cGUpID0+IHZvaWQ7XG4gIHNoYWthUGxheWVyTG9hZGVyPzogKHBsYXllcjogU2hha2FUeXBlKSA9PiB2b2lkO1xuICBobHNKc0xvYWRlcj86IChwbGF5ZXI6IEhsc1BsYXllclR5cGUpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyB7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfd2ViUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc0pzTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Vudmlyb25tZW50OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeVVybDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSA4O1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5TGV2ZWw6IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+ID0gbmV3IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+KFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdChCdWlsZEZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdGVuYW5jeTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9jbGllbnRTZXNzaW9uSWQ6IHN0cmluZyA9IFN0cmluZ3MucmFuZG9tKDMyKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvYWRlZFRpbWVzdGFtcDogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU0RLJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pbml0aWFsaXplZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5SW5pdGlhbGl6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4oU0RLLl9pbml0aWFsaXplZCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seURpc2NvdmVyeVVyaTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4oRGlzY292ZXJ5VXJpLnVyaSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5KTtcblxuICBzdGF0aWMgZ2V0IHBhZ2VMb2FkVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogU3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbmFuY3koKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY2xpZW50U2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNESy5fY2xpZW50U2Vzc2lvbklkO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2FkZWRUaW1lc3RhbXAoKTogRGF0ZSB7XG4gICAgcmV0dXJuIFNESy5fbG9hZGVkVGltZXN0YW1wO1xuICB9XG5cbiAgc3RhdGljIGdldCBpbml0aWFsaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5SW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVVyaSgpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlEaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJQbGF5ZXJMb2FkZXIoKTogKFdlYlBsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93ZWJQbGF5ZXJMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthUGxheWVyTG9hZGVyKCk6IChTaGFrYVR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYVBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaGxzSnNMb2FkZXIoKTogKEhsc1BsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9obHNKc0xvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWV0cmljc1NlcnZpY2UoKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIHJldHVybiBTREsuX21ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlVcmwoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVsZW1ldHJ5VXJsO1xuICB9XG5cbiAgc3RhdGljIGdldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM7XG4gIH1cblxuICBzdGF0aWMgc2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMocmV0cmllc0Ftb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IHJldHJpZXNBbW91bnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKHRoaXMuX2xvZ2dlci50aHJlc2hvbGQudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJEZXRlY3RvcigpOiBCcm93c2VyRGV0ZWN0b3Ige1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3I7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBMb2dnZXJGYWN0b3J5LnRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5wYWdlTG9hZFRpbWUgPSBTREsucGFnZUxvYWRUaW1lO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyKSB7XG4gICAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUodGVsZW1ldHJ5QXBwZW5kZXIpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnVGVsZW1ldHJ5IFVSTCB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlciAmJiB0ZW5hbmN5KSB7XG4gICAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUodGVsZW1ldHJ5QXBwZW5kZXIpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnVGVsZW1ldHJ5IHRlbmFuY3kgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIFNESy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShEaXNjb3ZlcnlVcmkudXJpLnZhbHVlKTtcbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uID0gU0RLLl9tZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuICAgIH0pO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LW1ldHJpY3MtbGV2ZWwnKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwoVGVsZW1ldHJ5TGV2ZWxbdmFsdWVdKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkVGVsZW1ldHJ5TGV2ZWwgPSBTREsuX3RlbGVtZXRyeUxldmVsLnN1YnNjcmliZSh0ZWxlbWV0cnlMZXZlbCA9PiB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZScpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJldHJ5IG9uIGZhaWx1cmUgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5Rm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWZvcmNlLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1yZXN0YXJ0Jyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZvcmNlIGdhcmJhZ2UgY29sbGVjdGlvbiBvbiByZXN0YXJ0IGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1za2lwLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1tb2JpbGUtZGV2aWNlcycpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdTa2lwIGdhcmJhZ2UgY29sbGVjdGlvbiBvbiBtb2JpbGUgZGV2aWNlcyBvbiByZXN0YXJ0IGlzIHNldCB0bzogWyVzXScsIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLmRpc2NvdmVyeVVyaS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgU0RLLnRlbGVtZXRyeVVybC52YWx1ZSA9IFNESy5nZXRUZWxlbWV0cnlVcmwodmFsdWUpO1xuICAgICAgU0RLLl9lbnZpcm9ubWVudC52YWx1ZSA9IEVudmlyb25tZW50LmdldEVudmlyb25tZW50RnJvbVVybCh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjaGFubmVsVG9rZW4gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtY2hhbm5lbC10b2tlbicpO1xuXG4gICAgaWYgKGNoYW5uZWxUb2tlbikge1xuICAgICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbihjaGFubmVsVG9rZW4pO1xuXG4gICAgICBTREsuX3RlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeTtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cmlWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC11cmknKTtcblxuICAgIGlmICh1cmlWYWx1ZSkge1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IHVyaVZhbHVlO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtdXJpXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGFnIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2VVUklWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1iYXNlLXVyaScpO1xuXG4gICAgaWYgKGJhc2VVUklWYWx1ZSkge1xuICAgICAgY29uc3QgdXJpID0gbmV3IFVSTChiYXNlVVJJVmFsdWUpO1xuXG4gICAgICB1cmkucGF0aG5hbWUgPSAnL3BjYXN0L2VuZFBvaW50cyc7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC1iYXNlLXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaW5pdChvcHRpb25zPzogSUluaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBuZXcgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuZGlzY292ZXJ5VXJpKSB7XG4gICAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBvcHRpb25zLmRpc2NvdmVyeVVyaTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5KSB7XG4gICAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUgPSBvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwgJiYgVGVsZW1ldHJ5TGV2ZWxbb3B0aW9ucy50ZWxlbWV0cnlMZXZlbF0pIHtcbiAgICAgICAgU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChvcHRpb25zLnRlbGVtZXRyeUxldmVsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubG9nZ2luZ0xldmVsICYmIExvZ2dpbmdMZXZlbFtvcHRpb25zLmxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLnRocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMubG9nZ2luZ0xldmVsKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgJiZcbiAgICAgICAgTG9nZ2luZ0xldmVsW29wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgY29uc3QgY29uc29sZUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgQ29uc29sZUFwcGVuZGVyKTtcblxuICAgICAgICBpZiAoY29uc29sZUFwcGVuZGVyKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUoY29uc29sZUFwcGVuZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgIT09ICdPZmYnKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fd2ViUGxheWVyTG9hZGVyID0gb3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyID0gb3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuaGxzSnNMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5faGxzSnNMb2FkZXIgPSBvcHRpb25zLmhsc0pzTG9hZGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG51bGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsICgpID0+IHtcbiAgU0RLLmRpc3Bvc2UoKTtcbn0pO1xuXG5TREsuYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseU1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5pbml0KCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVVybCB7XG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IFVSTCh1cmwpO1xuICAgICAgY29uc3Qgc2VnbWVudHMgPSBiYXNlVVJMLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG5cbiAgICAgIHN3aXRjaCAoYmFzZVVSTC5wcm90b2NvbCkge1xuICAgICAgICBjYXNlICd3czonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cDonO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dzczonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cHM6JztcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDIgfHxcbiAgICAgICAgICAoc2VnbWVudHMubGVuZ3RoID09PSAzICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDJdLmxlbmd0aCA8PSAyICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdLmxlbmd0aCA8PSAzKVxuICAgICAgKSB7XG4gICAgICAgIHNlZ21lbnRzLnVuc2hpZnQoJ3RlbGVtZXRyeScpO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdzdGctJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1zdGcnKSB8fCBzZWdtZW50c1swXS5pbmNsdWRlcygnLXN0Zy0nKSB8fCBzZWdtZW50c1swXSA9PT0gJ3N0ZycpIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5LXN0Zyc7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ2xvY2FsJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1sb2NhbCcpKSB7XG4gICAgICAgIC8vIExlYXZlIFVSTCB1bmNoYW5nZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeSc7XG4gICAgICB9XG5cbiAgICAgIGJhc2VVUkwuaG9zdG5hbWUgPSBzZWdtZW50cy5qb2luKCcuJyk7XG5cbiAgICAgIHJldHVybiBgJHtiYXNlVVJMLm9yaWdpbn0vdGVsZW1ldHJ5YDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgdHlwZSBCaXRyYXRlU3RhdGVUeXBlID0gJ0tlZXAnIHwgJ1Jlc2V0JztcbmV4cG9ydCB0eXBlIEJpdHJhdGVNb2RlVHlwZSA9ICdOb3JtYWwnIHwgJ0ZvcmNlJyB8ICdSZXNldCc7XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVTdGF0ZSB7XG4gIEtlZXAsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVNb2RlIHtcbiAgTm9ybWFsLFxuICBGb3JjZSxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUge1xuICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgYml0cmF0ZUluQml0c1BlclNlY29uZDogbnVtYmVyO1xuICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZVR5cGU7XG4gIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZVR5cGU7XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRXhwb25lbnRpYWxCYWNrb2ZmIGZyb20gJy4uLy4uL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCBTZXNzaW9uVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IFRva2VuQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1Rva2VuQ29udGV4dCc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQsIHtDaGFubmVsQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IEVuY29kZWRTdHJlYW1TaW5rLCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQgU3RyZWFtVHJhY2tUcmFuc2Zvcm0sIHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCB7U3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5jb25zdCBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24gPSAnY2xpZW50OnRlcm1pbmF0aW9uJztcbmNvbnN0IGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMzAwMDtcbmNvbnN0IHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDE1MDAwO1xuXG5leHBvcnQgdHlwZSBDaGFubmVsT3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPjtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT47XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbCBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NoYW5uZWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW5Db250ZXh0OiBUb2tlbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQ6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlQ29udGV4dDogU3RhdGVDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVZpZGVvRWxlbWVudDogUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuOiBSZWFkT25seVN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb246IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YXRlOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvTXV0ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvUGF1c2VkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW5FeHBpcmluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dGhvcml6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlPbmxpbmU6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMb2FkaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGxheWluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YW5kYnk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdG9wcGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VGFyZ2V0TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlCaXRyYXRlTGltaXQ6IFJlYWRPbmx5U3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSZXNvbHV0aW9uOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlGYWlsdXJlQ291bnQ6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUVuZFBvaW50OiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJ0Y1N0YXRpc3RpY3M6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TWVkaWFTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT47XG5cbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uVGVsZW1ldHJ5OiBTZXNzaW9uVGVsZW1ldHJ5O1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXI6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgb3B0aW9ucz86IENoYW5uZWxPcHRpb25zKSB7XG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbENvbnRleHRPcHRpb25zOiBDaGFubmVsQ29udGV4dE9wdGlvbnMgPSB7dGFyZ2V0TGFnOiBvcHRpb25zPy50YXJnZXRMYWd9O1xuICAgIGNvbnN0IHN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zOiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyA9IHtcbiAgICAgIGhhc0luc2VydGFibGVTdHJlYW1zOiBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKSxcbiAgICAgIGhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMnKSxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zPy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogb3B0aW9ucz8uZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnM/LmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0ID0gbmV3IFRva2VuQ29udGV4dCh0b2tlbik7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBuZXcgQ2hhbm5lbENvbnRleHQoY2hhbm5lbENvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBuZXcgUGVlckNvbm5lY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dCA9IG5ldyBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0KHN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQgPSBuZXcgU3RhdGVDb250ZXh0KCk7XG4gICAgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmID0gbmV3IEV4cG9uZW50aWFsQmFja29mZigpO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3JlYWRPbmx5VmlkZW9FbGVtZW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxIVE1MVmlkZW9FbGVtZW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuKTtcbiAgICB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGF0ZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5T25saW5lID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUpO1xuICAgIHRoaXMuX3JlYWRPbmx5TG9hZGluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlQbGF5aW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YW5kYnkgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RvcHBlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUxhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdCk7XG4gICAgdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlFbmRQb2ludCA9IG5ldyBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50KTtcbiAgICB0aGlzLl9yZWFkT25seVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtKTtcbiAgICB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzKTtcbiAgICB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuICAgIHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkgPSBuZXcgU2Vzc2lvblRlbGVtZXRyeShTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5KTtcbiAgICB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIgPSB0aGlzLmhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkLmJpbmQodGhpcyk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnN1YnNjcmliZSh2aWRlb0VsZW1lbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS5zdWJzY3JpYmUoc3RyZWFtID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy52aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkgPSBuZXcgVmlkZW9UZWxlbWV0cnkodGhpcy5zdHJlYW1JZCwgU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodGhpcy52aWRlb0VsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh0aGlzLnZpZGVvRWxlbWVudCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5TdG9wcGVkKSB7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5yZXN0YXJ0QWZ0ZXJTdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIH0sIGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi5zdWJzY3JpYmUocmVzb2x1dGlvbiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSkge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5Lm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhyZXNvbHV0aW9uLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC5zdWJzY3JpYmUoYml0cmF0ZUxpbWl0ID0+IHtcbiAgICAgICAgaWYgKGJpdHJhdGVMaW1pdCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgYml0cmF0ZUxpbWl0LFxuICAgICAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgICAgICBCaXRyYXRlTW9kZS5Ob3JtYWxcbiAgICAgICAgICApXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZGVzdHJveVN0cmVhbU9uVW5tb3VudCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW1PblVubW91bnQodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCAnY2xpZW50OnRlcm1pbmF0aW9uLW9uLXdpbmRvdy11bmxvYWQnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHZpZGVvRWxlbWVudCgpOiBIVE1MVmlkZW9FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuICB9XG5cbiAgc2V0IHZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSA9IHZpZGVvRWxlbWVudDtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLnJlc29sdXRpb24udmFsdWUud2lkdGggIT09IHZpZGVvRWxlbWVudC52aWRlb1dpZHRoIHx8IHRoaXMucmVzb2x1dGlvbi52YWx1ZS5oZWlnaHQgIT09IHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gbmV3IERpbWVuc2lvbih2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCwgdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IERpbWVuc2lvbi5lbXB0eTtcbiAgICB9XG4gIH1cblxuICBnZXQgdG9rZW4oKTogRW5jb2RlZEVkZ2VUb2tlbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSA9IHRva2VuO1xuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSk7XG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3kgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcblxuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgPSBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKTtcbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSA9IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2VuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zJyk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgcGVlckNvbm5lY3Rpb24oKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGF0ZTtcbiAgfVxuXG4gIGdldCBhdXRvTXV0ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQ7XG4gIH1cblxuICBnZXQgYXV0b1BhdXNlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9QYXVzZWQ7XG4gIH1cblxuICBnZXQgdG9rZW5FeHBpcmluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmc7XG4gIH1cblxuICBnZXQgYXV0aG9yaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQ7XG4gIH1cblxuICBnZXQgb25saW5lKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5T25saW5lO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMb2FkaW5nO1xuICB9XG5cbiAgZ2V0IHBsYXlpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQbGF5aW5nO1xuICB9XG5cbiAgZ2V0IHN0YW5kYnkoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGFuZGJ5O1xuICB9XG5cbiAgZ2V0IHN0b3BwZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdG9wcGVkO1xuICB9XG5cbiAgZ2V0IHRhcmdldExhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWc7XG4gIH1cblxuICBnZXQgbGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxhZztcbiAgfVxuXG4gIGdldCBiaXRyYXRlTGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlCaXRyYXRlTGltaXQudmFsdWU7XG4gIH1cblxuICBnZXQgcmVzb2x1dGlvbigpOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbjtcbiAgfVxuXG4gIGdldCBmYWlsdXJlQ291bnQoKTogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudDtcbiAgfVxuXG4gIGdldCBlbmRQb2ludCgpOiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlFbmRQb2ludDtcbiAgfVxuXG4gIGdldCBzdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdHJlYW07XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQ7XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljcygpOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzO1xuICB9XG5cbiAgZ2V0IG1lZGlhU3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc2V0Qml0cmF0ZUxpbWl0KGJpdHJhdGVMaW1pdDogQml0c1BlclNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IGJpdHJhdGVMaW1pdDtcbiAgfVxuXG4gIGNsZWFyQml0cmF0ZUxpbWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQgPSAwO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICBCaXRyYXRlTW9kZS5SZXNldFxuICAgICAgKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRhcmdldExhZyhsYWc6IE1pbGxpc2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnLnZhbHVlID0gbGFnO1xuICB9XG5cbiAgYXN5bmMgc3RvcChyZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGlmICghdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuXG4gICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnN1YnNjcmliZShpc1N0YXJ0aW5nID0+IHtcbiAgICAgICAgaWYgKCFpc1N0YXJ0aW5nKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU3RvcChyZWFzb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMocmVhc29uKTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG4gIH1cblxuICBhc3luYyByZXN1bWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1bm11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnN0b3AoJ2NsaWVudDpjaGFubmVsLWRpc3Bvc2UnKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBnZXRVcmkodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBVUkwge1xuICAgIGNvbnN0IHVybCA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnVyaTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBkaXNjb3ZlciBVUkkgWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgc3RhcnQnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLnByb2Nlc3NTdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzU3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4gPSB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gICAgY29uc3QgbGlzdGVuT25TdHJlYW1TZXR1cCA9IHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkubGlzdGVuT25TdHJlYW1TZXR1cCgpO1xuXG4gICAgaWYgKCFFZGdlQXV0aFBhcnNlci5pc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbikpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IFN0cmVhbVRyYWNrVHJhbnNmb3JtLnZhbGlkYXRlTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSgndmlkZW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBTdHJlYW1UcmFja1RyYW5zZm9ybS52YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0oJ2F1ZGlvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gRW5jb2RlZFN0cmVhbVNpbmsudmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luaygndmlkZW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmspO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmspIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBFbmNvZGVkU3RyZWFtU2luay52YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rKCdhdWRpbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgJiYgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQm90aCBpbnNlcnRhYmxlLXN0cmVhbXMgYW5kIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGFyZSBlbmFibGVkLCBvbmx5IHVzZSBvbmUgb3IgdGhlIG90aGVyJyk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2sgPSB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPT09ICdmdW5jdGlvbic7XG4gICAgY29uc3QgaGFzRW5jb2RlZFN0cmVhbVNpbmsgPSB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmsgPT09ICdmdW5jdGlvbic7XG5cbiAgICBpZiAoaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2sgJiYgaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQm90aCBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGNhbGxiYWNrIGFuZCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgc2luayBmdW5jdGlvbiBmb3VuZCwgb25seSB1c2Ugb25lIHR5cGUgb3IgdGhlIG90aGVyJyk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYSBTdHJlYW0gVHJhY2sgQVBJJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0NyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbiBpcyBtaXNzaW5nOyBob3dldmVyLCBpbnNlcnRhYmxlLXN0cmVhbXMgaXMgZW5hYmxlZCcpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoYENyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbiBmb3VuZDsgaG93ZXZlciwgaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIG5vdCBlbmFibGVkYCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIGlmICghKEZlYXR1cmVFbmFibGVtZW50LmlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkIHx8IEZlYXR1cmVFbmFibGVtZW50LmlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKSkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgQVBJJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFoYXNFbmNvZGVkU3RyZWFtU2luaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0NyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBzaW5rIGZ1bmN0aW9uIGlzIG1pc3Npbmc7IGhvd2V2ZXIsIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIGVuYWJsZWQnKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKGBDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gc2luayBmdW5jdGlvbiBmb3VuZDsgaG93ZXZlciwgZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMgaXMgbm90IGVuYWJsZWRgKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OnN0YXJ0Jyk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICBjb25zdCB1cmkgPSB0aGlzLmdldFVyaSh0b2tlbik7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuICAgICAgICBpZiAoc3RhdGUgPT09IENoYW5uZWxTdGF0ZS5FcnJvciB8fCBzdGF0ZSA9PT0gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmcpIHtcbiAgICAgICAgICBEaXNjb3ZlcnkuY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQodXJpKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPHZvaWQ+ID0gKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICAgIC8vIE5lZWQgdG8gc2V0IGlzU3RhcnRpbmcgdG8gZmFsc2UgYW5kIGNhbGwgaGFuZGxlU3RyZWFtRmFpbHVyZSBpZiBzdHJlYW0gbW9uaXRvcnMgZm91bmQgYW4gaXNzdWVcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdHJlYW1QbGF5ZXIgPSBTdHJlYW1GYWN0b3J5LmNyZWF0ZSh0b2tlbiwgdGhpcy5fY2hhbm5lbENvbnRleHQsIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCwgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrKTtcblxuICAgIGlmICghc3RyZWFtUGxheWVyKSB7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbVBsYXllci5zdGFydChcbiAgICAgIHVyaSxcbiAgICAgIHRva2VuLFxuICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cCxcbiAgICAgIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQuYmluZCh0aGlzKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cC5mYWlsKCk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKys7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6Y2xlYW51cC1hZnRlci1mYWlsZWQtc2V0dXAnKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5DbGllbnRTdGFydEVycm9yO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IGNoYW5uZWwnLCBlKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZyB8fCAhU0RLLmF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgdGhpcy5nZXRSZXRyeUludGVydmFsKCkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN0YXJ0QWZ0ZXJTdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zdGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwbGF5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFtZWRpYVN0cmVhbSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJldHJ5SW50ZXJ2YWwoKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgICAgcmV0dXJuIHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNsaWVudFN0YXJ0RXJyb3I6XG4gICAgICAgIC8vIEZpcnN0IGFuZCBzZWNvbmQgYXR0ZW1wdCBmYXN0LCBhZnRlciB0aGF0IGV4cG9uZW50aWFsIHdpdGggYmFja29mZiBpbnRlcnZhbFxuICAgICAgICByZXR1cm4gdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmLmdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQodGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVN0cmVhbUZhaWx1cmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5DbGllbnRTdGFydEVycm9yOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmV0cnkgc3RhcnQgd2l0aCBpbml0aWFsIHN0YXRlIFslc10gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlLCBDaGFubmVsU3RhdGVbdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWVdKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgdW5hdXRob3JpemVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIHJlc3RyaWN0ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gYmxvY2tlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBsYXlpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwYXVzZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgaW52b2tlIHBsYXkoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gdW5zdXBwb3J0ZWQgZmVhdHVyZSwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byBjb25maWd1cmF0aW9uIGVycm9yLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcFJlc291cmNlcyhyZWFzb246IHN0cmluZyA9IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbik6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlO1xuXG4gICAgaWYgKHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgaWYgKFNESy5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ICYmICEoRmVhdHVyZUVuYWJsZW1lbnQuaXNNb2JpbGUgJiYgU0RLLnNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcykpIHtcbiAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW0odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCByZWFzb24pXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERlc3Ryb3llZCBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudCAmJiB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBtZWRpYVN0cmVhbTtcbiAgICB9XG5cbiAgICBjb25zdCBwbGF5UHJvbWlzZSA9IHZpZGVvRWxlbWVudC5wbGF5KCk7XG5cbiAgICBpZiAocGxheVByb21pc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gcGxheVByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIGNvbnN0IGhhc0F1ZGlvVHJhY2sgPSAhIW1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZpbHRlcih0cmFjayA9PiB7XG4gICAgICAgIHJldHVybiB0cmFjay5raW5kID09PSAnYXVkaW8nO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiA9ICFTREsuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG5cbiAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiB8fCB2aWRlb0VsZW1lbnQubXV0ZWQgfHwgIWhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBhdXNlZCB2aWRlbyBhZnRlciBwbGF5IGZhaWxlZC4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBudWxsO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgbXV0ZWQgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiB2aWRlb0VsZW1lbnQucGxheSgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQbGF5ZWQgdmlkZW8gYWZ0ZXIgYXV0byBtdXRpbmcuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZCB0byB1bm11dGUuJywgdGhpcy5zdHJlYW1JZCk7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIENoYW5uZWxTdGF0ZSB7XG4gIE9mZmxpbmUgPSAxLFxuICBTdGFydGluZyxcbiAgUGF1c2VkLFxuICBQbGF5aW5nLFxuICBSZWNvdmVyaW5nLFxuICBSZWNvbm5lY3RpbmcsXG4gIFN0YW5kQnksXG4gIFN0b3BwZWQsXG4gIFVuYXV0aG9yaXplZCxcbiAgR2VvUmVzdHJpY3RlZCxcbiAgR2VvQmxvY2tlZCxcbiAgVW5zdXBwb3J0ZWRGZWF0dXJlLFxuICBDb25maWd1cmF0aW9uRXJyb3IsXG4gIFRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcixcbiAgQ29ubmVjdGlvbkVycm9yLFxuICBDbGllbnRTdGFydEVycm9yLFxuICBFcnJvclxufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsU3RhdGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQ2hhbm5lbCwge0NoYW5uZWxPcHRpb25zfSBmcm9tICcuL0NoYW5uZWwnO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IHtNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG50eXBlIENyZWF0ZUNoYW5uZWxPcHRpb25zID0ge1xuICB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuO1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+O1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVscyB7XG4gIHN0YXRpYyBjcmVhdGVDaGFubmVsKG9wdGlvbnM6IENyZWF0ZUNoYW5uZWxPcHRpb25zKTogQ2hhbm5lbCB7XG4gICAgaWYgKCFTREsuaW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbm5lbE9wdGlvbnM6IENoYW5uZWxPcHRpb25zID0ge1xuICAgICAgdGFyZ2V0TGFnOiBvcHRpb25zLnRhcmdldExhZyxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IG9wdGlvbnMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnMuZW5jb2RlZEF1ZGlvU3RyZWFtU2lua1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IENoYW5uZWwob3B0aW9ucy52aWRlb0VsZW1lbnQsIG9wdGlvbnMudG9rZW4sIGNoYW5uZWxPcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVscyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IENoYW5uZWxzIGZyb20gJy4vQ2hhbm5lbHMnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5cbmV4cG9ydCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW0sIFN1YnNjcmliZVN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljLCBJUnRjU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG5jb25zdCBkZWZhdWx0VGFyZ2V0TGFnID0gMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsQ29udGV4dCB7XG4gIGNoYW5uZWxJbml0aWFsaXphdGlvbjogRGF0ZTtcbiAgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICBjaGFubmVsRGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICByZW5kZXJlckRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgdmlkZW9FbGVtZW50OiBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBzdGF0ZTogU3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBhdXRvTXV0ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dG9QYXVzZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dGhvcml6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIG9ubGluZTogU3ViamVjdDxib29sZWFuPjtcbiAgbG9hZGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgcGxheWluZzogU3ViamVjdDxib29sZWFuPjtcbiAgc3RhbmRieTogU3ViamVjdDxib29sZWFuPjtcbiAgc3RvcHBlZDogU3ViamVjdDxib29sZWFuPjtcbiAgdGFyZ2V0TGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgbGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgYml0cmF0ZUxpbWl0OiBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICByZXNvbHV0aW9uOiBTdWJqZWN0PERpbWVuc2lvbj47XG4gIGZhaWx1cmVDb3VudDogU3ViamVjdDxudW1iZXI+O1xuICBlbmRQb2ludDogU3ViamVjdDxFbmRQb2ludD47XG4gIHN0cmVhbTogU3ViamVjdDxJU3RyZWFtPjtcbiAgcnRjU3RhdGlzdGljczogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHZpZGVvVGVsZW1ldHJ5OiBWaWRlb1RlbGVtZXRyeTtcbiAgcnRjQXVkaW9TdGF0aXN0aWM6IElSdGNTdGF0aXN0aWM7XG4gIHJ0Y1ZpZGVvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQ2hhbm5lbENvbnRleHRPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbERpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5yZW5kZXJlckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsSW5pdGlhbGl6YXRpb24gPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gbmV3IFN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4obnVsbCk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdWJqZWN0PENoYW5uZWxTdGF0ZT4oQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nKTtcbiAgICB0aGlzLmF1dG9NdXRlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dG9QYXVzZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRob3JpemVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5vbmxpbmUgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5wbGF5aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RhbmRieSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0b3BwZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy50YXJnZXRMYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4ob3B0aW9ucz8udGFyZ2V0TGFnID8/IGRlZmF1bHRUYXJnZXRMYWcpO1xuICAgIHRoaXMubGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KDApO1xuICAgIHRoaXMuYml0cmF0ZUxpbWl0ID0gbmV3IFN1YmplY3Q8Qml0c1BlclNlY29uZD4oMCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gbmV3IFN1YmplY3Q8RGltZW5zaW9uPihEaW1lbnNpb24uZW1wdHkpO1xuICAgIHRoaXMuZmFpbHVyZUNvdW50ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICB0aGlzLmVuZFBvaW50ID0gbmV3IFN1YmplY3Q8RW5kUG9pbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RyZWFtID0gbmV3IFN1YmplY3Q8SVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5ydGNTdGF0aXN0aWNzID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KG51bGwpO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtLnN0cmVhbUlkO1xuICB9XG5cbiAgYXBwbHlTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHRoaXMuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlKys7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LnZhbHVlICYmIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgIH1cbiAgfVxuXG4gIG1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YW5kQnk7XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDtcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZvcmJpZGRlbi10YWcnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgIGNhc2UgJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25Db250ZXh0IHtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuICBwZWVyQ29ubmVjdGlvbjogU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tZWRpYVN0cmVhbSA9IG5ldyBTdWJqZWN0PE1lZGlhU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGVDb250ZXh0IHtcbiAgaXNTdGFydGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgaXNEaXNwb3NlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlzU3RhcnRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5pc0Rpc3Bvc2VkID0gZmFsc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5cbmV4cG9ydCB0eXBlIFN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zID0ge1xuICBoYXNJbnNlcnRhYmxlU3RyZWFtczogYm9vbGVhbjtcbiAgaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zOiBib29sZWFuO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+IHwgdW5kZWZpbmVkO1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+IHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCB7XG4gIHJlYWRvbmx5IGhhc0luc2VydGFibGVTdHJlYW1zOiBTdWJqZWN0PGJvb2xlYW4+O1xuICByZWFkb25seSBoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT4gfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogU3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLmhhc0luc2VydGFibGVTdHJlYW1zID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4ob3B0aW9ucy5oYXNJbnNlcnRhYmxlU3RyZWFtcyk7XG4gICAgdGhpcy5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgPSBuZXcgU3ViamVjdDxib29sZWFuPihvcHRpb25zLmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyk7XG4gICAgdGhpcy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID0gb3B0aW9ucy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrO1xuICAgIHRoaXMuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9IG9wdGlvbnMuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaztcbiAgICB0aGlzLmVuY29kZWRWaWRlb1N0cmVhbVNpbmsgPSBvcHRpb25zLmVuY29kZWRWaWRlb1N0cmVhbVNpbms7XG4gICAgdGhpcy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID0gb3B0aW9ucy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuQ29udGV4dCB7XG4gIHRva2VuOiBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+O1xuICB0b2tlbkV4cGlyaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKSB7XG4gICAgdGhpcy50b2tlbiA9IG5ldyBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+KHRva2VuKTtcbiAgICB0aGlzLnRva2VuRXhwaXJpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdERpc2NvdmVyeVVyaSA9ICdodHRwczovL3BjYXN0LnBoZW5peHJ0cy5jb20vcGNhc3QvZW5kUG9pbnRzJztcblxuZXhwb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVNb2RlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZU1vZGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSk6IEJpdHJhdGVNb2RlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlTW9kZSkge1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Ob3JtYWw6XG4gICAgICAgIHJldHVybiAnTm9ybWFsJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuRm9yY2U6XG4gICAgICAgIHJldHVybiAnRm9yY2UnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlTW9kZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVTdGF0ZSwgQml0cmF0ZVN0YXRlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZVN0YXRlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlKTogQml0cmF0ZVN0YXRlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlU3RhdGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLktlZXA6XG4gICAgICAgIHJldHVybiAnS2VlcCc7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlU3RhdGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IERpc2NvdmVyeVNlcnZpY2UgZnJvbSAnLi9EaXNjb3ZlcnlTZXJ2aWNlJztcblxuY29uc3QgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCA9IDYwMDAwO1xuXG5pbnRlcmZhY2UgSVBlclVSSUVuZHBvaW50IHsgW3g6IHN0cmluZ106IFByb21pc2U8RW5kUG9pbnQ+IH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBJUGVyVVJJRW5kcG9pbnQgPSB7fTtcblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaTogVVJMKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSkge1xuICAgICAgcmV0dXJuIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlTZXJ2aWNlID0gbmV3IERpc2NvdmVyeVNlcnZpY2UodXJpKTtcbiAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9IGRpc2NvdmVyeVNlcnZpY2UuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQoKTtcbiAgICBjb25zdCBpZ25vcmVkID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID09PSBjYWNoZWRWYWx1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgICAgIH1cbiAgICAgIH0sIGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwpO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FjaGVkVmFsdWU7XG4gIH1cblxuICBzdGF0aWMgY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQodXJpOiBVUkwpOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuXG5jb25zdCBkZWZhdWx0VGltZW91dCA9IDIwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0Rpc2NvdmVyeScpO1xuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX3VyaTogVVJMO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogVVJMKSB7XG4gICAgaWYgKCF1cmkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHVyaScpO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UodXJpLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKHVyaTogVVJMLCB0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPEVuZFBvaW50W10+IHtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHRpbWVvdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlzY292ZXJ5IHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5ib2R5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgd2l0aCBubyBkYXRhIFske3VybH1dYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNTdHJpbmcgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXNTdHJpbmcuc3BsaXQoJywnKTtcblxuICAgIHJldHVybiBlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IG5ldyBFbmRQb2ludChlbmRQb2ludCwgdGltZW91dCkpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQodGltZW91dDogbnVtYmVyID0gZGVmYXVsdFRpbWVvdXQpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gRGlzY292ZXJ5VXJpLmJ1aWxkRGlzY292ZXJ5VXJsKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXdhaXQgdGhpcy5kaXNjb3Zlck5lYXJieUVuZFBvaW50cyhuZXcgVVJMKHVybCksIHRpbWVvdXQpO1xuICAgIGxldCBmYWlsZWRSZXF1ZXN0cyA9IDA7XG4gICAgY29uc3QgcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoZmFpbGVkUmVxdWVzdHMgPj0gZW5kUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICByZWplY3QoYERpc2NvdmVyeSBvZiBbJHtlbmRQb2ludHMubGVuZ3RofV0gZW5kcG9pbnRzIGZyb20gWyR7dXJsfV0gZmFpbGVkLCBwcmV2ZW50aW5nIGl0IGZyb20gY29tcGxldGluZ2ApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGVuZFBvaW50ID0gYXdhaXQgUHJvbWlzZS5yYWNlKGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gZW5kUG9pbnRcbiAgICAgIC5waW5nKClcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBwaW5nIGVuZCBwb2ludCBbJXNdJywgZW5kUG9pbnQsIGUpO1xuXG4gICAgICAgIGZhaWxlZFJlcXVlc3RzKys7XG5cbiAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4odGltZSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyZWQgZW5kIHBvaW50IFslc10gd2l0aCB0aW1lIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpLCB0aW1lKTtcbiAgICAgICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgICAgICBydW50aW1lOiAobm93IC0gU0RLLnBhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lIHx8IDB9LFxuICAgICAgICAgIHJlc291cmNlOiBlbmRQb2ludC50b1N0cmluZygpLFxuICAgICAgICAgIGtpbmQ6ICdwaW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQ7XG4gICAgICB9KSkpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX0gZnJvbSAnLi4vZGVmYXVsdHMnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5VXJpIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Rpc2NvdmVyeVVyaTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPihkZWZhdWx0RGlzY292ZXJ5VXJpKTtcblxuICBzdGF0aWMgZ2V0IHVyaSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnlVcmkuX2Rpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZERpc2NvdmVyeVVybCh1cmk6IFVSTCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh1cmkudG9TdHJpbmcoKSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG4gICAgY29uc3QgaW50ZW50aW9ucyA9IFBhcmFtZXRlcnMuZGlzY292ZXJ5UGFyYW1ldGVycy5pbnRlbnRpb25zO1xuXG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3ZlcnNpb24nLCBzZGtWZXJzaW9uKTtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnaW50ZW50aW9ucycsIGludGVudGlvbnMpO1xuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdfJywgYCR7RGF0ZS5ub3coKX1gKTtcblxuICAgIGlmICh1cmwucGF0aG5hbWUgPT09ICcvJykge1xuICAgICAgdXJsLnBhdGhuYW1lID0gJy9wY2FzdC9lbmRQb2ludHMnO1xuICAgIH1cblxuICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnlVcmkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmltcG9ydCB7XG4gIElTdWJzY3JpYmVSZXNwb25zZSxcbiAgSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QsXG4gIElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0XG59IGZyb20gJy4uL2FwaS9TdWJzY3JpYmUnO1xuaW1wb3J0IHtJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0LCBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZX0gZnJvbSAnLi4vYXBpL1NldFJlbW90ZURlc2NyaXB0aW9uJztcbmltcG9ydCB7SURlc3Ryb3lTdHJlYW1SZXF1ZXN0LCBJRGVzdHJveVN0cmVhbVJlc3BvbnNlfSBmcm9tICcuLi9hcGkvRGVzdHJveVN0cmVhbSc7XG5pbXBvcnQge0lBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCwgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZX0gZnJvbSAnLi4vYXBpL0FkZEljZUNhbmRpZGF0ZXMnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvUGFyYW1ldGVycyc7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGUsIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBCaXRyYXRlTW9kZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlTW9kZU1hcHBpbmcnO1xuaW1wb3J0IEJpdHJhdGVTdGF0ZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlU3RhdGVNYXBwaW5nJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCB7XG4gIElQdWJsaXNoUmVzcG9uc2UsXG4gIElQdWJsaXNoV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVB1Ymxpc2hXaXRob3V0T2ZmZXJSZXF1ZXN0LFxuICBQdWJsaXNoU3RhdHVzXG59IGZyb20gJy4uL2FwaS9QdWJsaXNoJztcblxuY29uc3QgYXBpVmVyc2lvbiA9IDc7XG5cbmV4cG9ydCB0eXBlIFN1YnNjcmliZVN0YXR1cyA9ICdvaycgfCAnbm8tc3RyZWFtJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAnZ2VvLXJlc3RyaWN0ZWQnIHwgJ2dlby1ibG9ja2VkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmb3JiaWRkZW4tdGFnJyB8ICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFJlbW92ZVRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgRGVzdHJveVN0cmVhbVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW0ge1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpYmVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge1xuICBzdGF0dXM6IFB1Ymxpc2hTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufTtcblxuaW50ZXJmYWNlIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXM7XG4gIHNlc3Npb25EZXNjcmlwdGlvbj86IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmludGVyZmFjZSBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cztcbiAgb3B0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cztcbn1cblxuaW50ZXJmYWNlIElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRQb2ludCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFbmRQb2ludCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cmk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF9yb3VuZFRyaXBUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodXJpOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcikge1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICB0aGlzLl90aW1lb3V0ID0gdGltZW91dDtcblxuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmQgcG9pbnQgcmVxdWlyZXMgYSB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBFbmRQb2ludFt1cmk9JHt0aGlzLl91cml9XWA7XG4gIH1cblxuICBhc3luYyBwaW5nKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFBpbmdVcmwoKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYFBpbmcgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aGlzLl90aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdzdWJzY3JpYmUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgU3Vic2NyaWJlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc3Vic2NyaWJlIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHB1Ymxpc2gobmFtZTogc3RyaW5nLCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJUHVibGlzaFJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAncHVibGlzaCddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIGFwaVZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRob3V0T2ZmZXIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIG5ldyBFcnJvcihgUHVibGlzaCB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogUHVibGlzaFN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBwdWJsaXNoIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbTogSVN0cmVhbSwgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc2NyaXB0aW9uJywgJ3JlbW90ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZTogc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgIHNkcDogc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBuZXcgRXJyb3IoYFNldCByZW1vdGUgZGVzY3JpcHRpb24gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBsaW1pdEJpdHJhdGUoXG4gICAgc3RyZWFtOiBJU3RyZWFtLFxuICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyLFxuICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IEJpdHNQZXJTZWNvbmQsXG4gICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUsXG4gICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlLFxuICApOiBQcm9taXNlPElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnYml0cmF0ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZU1hcHBpbmcuY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGUpLFxuICAgICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZSlcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIG5ldyBFcnJvcihgU2V0IGxpbWl0IGJpdHJhdGUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IHNldCBsaW1pdCBiaXRyYXRlIHJlc3BvbnNlIFslc10gaW4gWyVzXSBtcycsIHN0YXR1cywgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4ge3N0YXR1c307XG4gIH1cblxuICBhc3luYyBhZGRJY2VDYW5kaWRhdGVzKHN0cmVhbTogSVN0cmVhbSwgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10sIGRpc2NvdmVyeUNvbXBsZXRlZDogYm9vbGVhbiwgb3B0aW9uczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2ljZScsICdjYW5kaWRhdGVzJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgY2FuZGlkYXRlcyxcbiAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBuZXcgRXJyb3IoYEFkZCBpY2UgY2FuZGlkYXRlcyB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGFkZCBJQ0UgY2FuZGlkYXRlcyByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW0oc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgRGVsZXRlIHN0cmVhbSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHN0cmVhbScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBkZXN0cm95IHN0cmVhbSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBkZXN0cm95U3RyZWFtUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW1PblVubW91bnQoc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghbmF2aWdhdG9yPy5zZW5kQmVhY29uKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5kZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVhc29uKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgbmF2aWdhdG9yLnNlbmRCZWFjb24odXJsLCBmb3JtRGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVXJsKHBhdGg6IHN0cmluZ1tdKTogVVJMIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgcGF0aEFzQXJyYXkgPSB1cmkucGF0aG5hbWUuc3BsaXQoJy8nKTtcblxuICAgIHBhdGhBc0FycmF5Lmxlbmd0aCA9IHBhdGhBc0FycmF5Lmxlbmd0aCAtIDE7XG5cbiAgICB1cmkucGF0aG5hbWUgPSBwYXRoQXNBcnJheS5jb25jYXQoLi4ucGF0aCkuam9pbignLycpO1xuXG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQaW5nVXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVyaS5zZWFyY2hQYXJhbXMuc2V0KCd0eXBlJywgJ2h0dHAnKTtcbiAgICB1cmkuc2VhcmNoUGFyYW1zLnNldCgndmVyc2lvbicsIHNka1ZlcnNpb24pO1xuICAgIHVyaS5zZWFyY2hQYXJhbXMuc2V0KCdpbnRlbnRpb25zJywgaW50ZW50aW9ucyk7XG4gICAgdXJpLnNlYXJjaFBhcmFtcy5zZXQoJ18nLCBgJHtEYXRlLm5vdygpfWApO1xuXG4gICAgcmV0dXJuIHVyaS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFB1Ymxpc2hTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA2OlxuICAgICAgICByZXR1cm4gJ21pc3NpbmctY2hhbm5lbC1vci1yb29tLWlkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA0MDk6XG4gICAgICAgIHJldHVybiAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnO1xuICAgICAgY2FzZSA0MTU6XG4gICAgICAgIHJldHVybiAnZm9yYmlkZGVuLXRhZyc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFN1YnNjcmliZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDQwOTpcbiAgICAgICAgcmV0dXJuICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc7XG4gICAgICBjYXNlIDQxNTpcbiAgICAgICAgcmV0dXJuICdmb3JiaWRkZW4tdGFnJztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBEZXN0cm95U3RyZWFtU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVN1YnNjcmliZVJlc3BvbnNlO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlOiBJU3Vic2NyaWJlUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5sYWcgPSBkYXRhLmxhZztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElQdWJsaXNoUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJUHVibGlzaFJlc3BvbnNlO1xuICAgIGNvbnN0IHB1Ymxpc2hSZXNwb25zZTogSVB1Ymxpc2hSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBwdWJsaXNoUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHVibGlzaFJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gPSB7aWNlU2VydmVyczogW119O1xuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9IGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgdXJsczogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHMsXG4gICAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5ID0gY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5O1xuICAgIH1cblxuICAgIHJldHVybiBydGNDb25maWd1cmF0aW9uO1xuICB9XG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uID0gZGF0YS5zZXNzaW9uRGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTogSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLm9wdGlvbnMpIHtcbiAgICAgICAgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElEZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbTogSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENodW5rZWRTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NodW5rZWRTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb25pdG9yRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfc3RyZWFtU3RhdGlzdGljczogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIHByaXZhdGUgX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcyk7XG4gIH1cblxuICBzdGFydCh1cmk6IFVSTCwgdG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZCB8IElEaXNwb3NhYmxlPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSlcbiAgICAgIC50aGVuKGVuZFBvaW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIG51bGwsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZmVyU2RwID0gY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHA7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgb3JpZ2luU3RhcnRUaW1lOiBEYXRlLm5vdygpIC0gbGFnICsgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDIsXG4gICAgICAgICAgbGFnXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIENodW5rZWRTdHJlYW1pbmcuc3RhcnQodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgb2ZmZXJTZHAsIG9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4ocGxheWVyID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGxheWVyO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDaHVua2VkU3RyZWFtaW5nIGZhaWxlZCcsIGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb25pdG9yKHBsYXllcjogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0cmVhbVN0YXRpc3RpY3MgPSBDaHVua2VkU3RyZWFtaW5nLmdldFN0YXRzKCk7XG5cbiAgICAgIGlmICh0aGlzLl9zdHJlYW1TdGF0aXN0aWNzICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQrKztcblxuICAgICAgICBpZiAodGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA+IDYpIHtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgcGxheWVyLmRpc3Bvc2UoKTtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZWQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MgPSBuZXdTdHJlYW1TdGF0aXN0aWNzO1xuICAgICAgdGhpcy5tb25pdG9yKHBsYXllcik7XG4gICAgfSwgMTAwMCk7XG5cbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB9KSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgV2ViUGxheWVyIGZyb20gJy4vV2ViUGxheWVyJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBTaGFrYVBsYXllciBmcm9tICcuL1NoYWthUGxheWVyJztcbmltcG9ydCBIbHNQbGF5ZXIgZnJvbSAnLi9IbHNQbGF5ZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3MsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDaHVua2VkU3RyZWFtaW5nIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BlbmRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc1BsYXllcjogSGxzUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BoZW5peFdlYlBsYXllcjogV2ViUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthOiBTaGFrYVR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBzdGF0aWMgX3BsYXllcjogU2hha2FQbGF5ZXIgfCBXZWJQbGF5ZXIgfCBIbHNQbGF5ZXI7XG5cbiAgc3RhdGljIGdldCBobHNQbGF5ZXIoKTogSGxzUGxheWVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc1BsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGhlbml4V2ViUGxheWVyKCk6IFdlYlBsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9waGVuaXhXZWJQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthKCk6IFNoYWthVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHN0YXJ0KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyIHx8IHRoaXMuX3NoYWthIHx8IHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBsYXllciBpcyBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICghU0RLLndlYlBsYXllckxvYWRlciAmJiAhU0RLLnNoYWthUGxheWVyTG9hZGVyICYmICFTREsuaGxzSnNMb2FkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQtZmVhdHVyZSwgYWRkIHN0cmVhbSBwbGF5ZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsuaGxzSnNMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9obHNQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy53ZWJQbGF5ZXJMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9waGVuaXhXZWJQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLnNoYWthUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fc2hha2EgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllci5nZXRTdGF0cygpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGxheShQbGF5ZXI6IHR5cGVvZiBXZWJQbGF5ZXIgfCB0eXBlb2YgU2hha2FQbGF5ZXIgfCB0eXBlb2YgSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKTogSURpc3Bvc2FibGUge1xuICAgIGNvbnN0IGRhc2hNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW1wZFxcPz9bXlxcc10qKS9tKTtcbiAgICBjb25zdCBobHNNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW0zdThcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgbWFuaWZlc3RVcmwgPSBkYXNoTWFuaWZlc3RVcmxNYXRjaCAmJiBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA/IGRhc2hNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG4gICAgY29uc3QgcGxheWxpc3RVcmwgPSBobHNNYW5pZmVzdFVybE1hdGNoICYmIGhsc01hbmlmZXN0VXJsTWF0Y2hbMV0gPyBobHNNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG5cbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzIHx8ICh0aGlzLl9obHNQbGF5ZXIgJiYgdGhpcy5faGxzUGxheWVyLmlzU3VwcG9ydGVkKCkpKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2hscycsIHN0cmVhbUlkLCBwbGF5bGlzdFVybCwgb3B0aW9ucyk7XG5cbiAgICAgIHRoaXMuX3BsYXllci5zdGFydCgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG5ldyBQbGF5ZXIodmlkZW9FbGVtZW50LCAnZGFzaCcsIHN0cmVhbUlkLCBtYW5pZmVzdFVybCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgIHJldHVybiB0aGlzLl9wbGF5ZXI7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBsb2FkZWQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nKTogSURpc3Bvc2FibGUge1xuICAgIGlmICghdGhpcy5fc2hha2EgJiYgIXRoaXMuX3BoZW5peFdlYlBsYXllciAmJiAhdGhpcy5faGxzUGxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShIbHNQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGhlbml4V2ViUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KFdlYlBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaGFrYSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShTaGFrYVBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtJSGxzUGxheWVyVHlwZX0gZnJvbSAnLi9JSGxzUGxheWVyJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGxzUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElIbHNQbGF5ZXJUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyKSB7XG4gICAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIoe1xuICAgICAgICAgIGVuYWJsZVdvcmtlcjogdHJ1ZSxcbiAgICAgICAgICBtYXhCdWZmZXJMZW5ndGg6IDEsXG4gICAgICAgICAgbGl2ZUJhY2tCdWZmZXJMZW5ndGg6IDAsXG4gICAgICAgICAgbGl2ZVN5bmNEdXJhdGlvbjogNyxcbiAgICAgICAgICBsaXZlRHVyYXRpb25JbmZpbml0eTogdHJ1ZSxcbiAgICAgICAgICBsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uOiBJbmZpbml0eSxcbiAgICAgICAgICBoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2Q6IDFcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5sb2FkU291cmNlKHRoaXMuX21hbmlmZXN0VVJJKTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmF0dGFjaE1lZGlhKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5jYW5QbGF5VHlwZSgnYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwnKSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQuc3JjID0gdGhpcy5fbWFuaWZlc3RVUkk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyICYmIENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyLmlzU3VwcG9ydGVkKCk7XG4gIH1cblxuICBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICB3aWR0aDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldFdpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0SGVpZ2h0LFxuICAgICAgY3VycmVudFRpbWU6IHRoaXMuX3BsYXllci5tZWRpYS5jdXJyZW50VGltZSxcbiAgICAgIGxhZzogMC4wLFxuICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlLFxuICAgICAgZGF0YUJ1ZmZlcmVkOiAwLjBcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnSURMRScpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRVJST1InIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRU5ERUQnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ0xPQURJTkcnKSB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnV0FJVElORycpKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ10gfHwgMDtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgKGN1cnJlbnRUaW1lICsgKHRoaXMuX29wdGlvbnMubGFnIC8gMTAwMCkpIC0gdHJ1ZUN1cnJlbnRUaW1lKTtcblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyICYmIHRoaXMuX3BsYXllci5kZXN0cm95KSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZW51bSBOZXR3b3JrU3RhdGVzIHtcbiAgTmV0d29ya0VtcHR5LFxuICBOZXR3b3JrSWRsZSxcbiAgTmV0d29ya0xvYWRpbmcsXG4gIE5ldHdvcmtOb1NvdXJjZVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciBmcm9tICcuLi8uLi9kb20vR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXInO1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IHtTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBSdGNDb25uZWN0aW9uTW9uaXRvciBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi8uLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgZnJvbSAnLi4vLi4vcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyJztcbmltcG9ydCBQZWVyQ29ubmVjdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdHJlYW1UcmFuc2Zvcm1Db250ZXh0JztcbmltcG9ydCBJbnNlcnRhYmxlU3RyZWFtcyBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9JbnNlcnRhYmxlU3RyZWFtcyc7XG5pbXBvcnQgU2RwUGFyc2VyIGZyb20gJy4uLy4uL3J0Yy9TZHBQYXJzZXInO1xuXG5jb25zdCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCA9IDEwMDtcbmNvbnN0IGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQgPSAzMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhbFRpbWVTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1JlYWxUaW1lU3RyZWFtJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQ6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBwZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dCA9IHN0cmVhbVRyYW5zZm9ybUNvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcyk7XG4gIH1cblxuICBzdGFydCh1cmksIHRva2VuLCBsaXN0ZW5PblN0cmVhbVNldHVwLCBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmsgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoJ3JlY3Zvbmx5JywgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKVxuICAgICAgICAudGhlbigoe2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvY2FsT2ZmZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvblxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgXSlcbiAgICAgIC50aGVuKChbZW5kUG9pbnQsIHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn1dKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0xvY2FsIG9mZmVyOlxcbicgKyBsb2NhbE9mZmVyLnNkcCk7XG5cbiAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBpZiAoU0RLLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgJiYgIShGZWF0dXJlRW5hYmxlbWVudC5pc01vYmlsZSAmJiBTREsuc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKSkge1xuICAgICAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICBsb2NhbE9mZmVyID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIGxvY2FsT2ZmZXIsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgcnRjQ29uZmlndXJhdGlvbiwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlSdGNDb25maWd1cmF0aW9uKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSwgcnRjQ29uZmlndXJhdGlvbilcbiAgICAgICAgICAudGhlbihwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgICAgICBsZXQgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQ7XG4gICAgICAgICAgICBsZXQgY2FuY2VsRGlzY292ZXJ5ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZGlzY292ZXJ5Q29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIVNESy5zZW5kTG9jYWxDYW5kaWRhdGVzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGUuY2FuZGlkYXRlICYmIGUuY2FuZGlkYXRlLmNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChlLmNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlzY292ZXJ5Q29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRDYW5kaWRhdGVzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5hZGRJY2VDYW5kaWRhdGVzKHN0cmVhbSwgY2FuZGlkYXRlcywgZGlzY292ZXJ5Q29tcGxldGVkKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoe3N0YXR1cywgb3B0aW9uc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVzKCdjYW5jZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBBZGRlZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdIGFuZCBvcHRpb25zIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2Ugc3RvcCBub3JtYWxseSB0aGUgcGVlciBjb25uZWN0aW9uIGlzIHVucmVnaXN0ZXJlZCBmaXJzdC5cbiAgICAgICAgICAgICAgICAvLyBUaHVzIGFueXRpbWUgd2Ugc2VlIGEgY2xvc2VkIHBlZXIgY29ubmVjdGlvbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpdCBpcyBhbiBlcnJvci5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciBwZWVyIGNvbm5lY3Rpb24gc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNraW5nJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3JzpcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgdHJ5aW5nIHRvIHJlY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlZCc6XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHJldHJ5aW5nIHRvIGNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcblxuICAgICAgICAgICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IG1lZGlhU3RyZWFtUHJvbWlzZSA9IG5ldyBQcm9taXNlPE1lZGlhU3RyZWFtPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQub25UcmFja0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpLCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9udHJhY2sgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24gPSBuZXcgU2RwUGFyc2VyKHBlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHtkaXNwb3NhYmxlc30gPSBJbnNlcnRhYmxlU3RyZWFtcy5hcHBseUVuY29kZWRTdHJlYW1UcmFuc2Zvcm1hdGlvbihtZWRpYVN0cmVhbSwgcGVlckNvbm5lY3Rpb24uZ2V0UmVjZWl2ZXJzKCksIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luaywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rLCBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbi52aWRlb0NvZGVjLCBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbi5hdWRpb0NvZGVjKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChkaXNwb3NhYmxlcyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHt0cmFuc2Zvcm1lZFN0cmVhbSwgZGlzcG9zYWJsZXN9ID0gSW5zZXJ0YWJsZVN0cmVhbXMuYXBwbHlJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24obWVkaWFTdHJlYW0sIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChkaXNwb3NhYmxlcyk7XG4gICAgICAgICAgICAgICAgbWVkaWFTdHJlYW0gPSB0cmFuc2Zvcm1lZFN0cmVhbTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSA9IG1lZGlhU3RyZWFtO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yID0gbmV3IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKHBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbSwgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDQpO1xuXG4gICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChydGNDb25uZWN0aW9uTW9uaXRvcik7XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3JTdGF0aXN0aWNTdWJzY3JpcHRpb24gPSBydGNDb25uZWN0aW9uTW9uaXRvci5ydGNTdGF0aXN0aWMuc3Vic2NyaWJlKHN0YXRpc3RpY3MgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MudmFsdWUgPSBzdGF0aXN0aWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiAhdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhdWRpb1RyYWNrRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHZpZGVvVHJhY2tGYWlsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLmF1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICBhdWRpb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpb1RyYWNrRmFpbGVkICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEF1ZGlvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MuYXVkaW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBWaWRlbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCh2aWRlb1RyYWNrRmFpbGVkIHx8IGF1ZGlvVHJhY2tGYWlsZWQpICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcblxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID8gQ2hhbm5lbFN0YXRlLlBsYXlpbmcgOiBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgc3RhdGUgcmVzdG9yZWQgdG8gWyVzXSBhZnRlciByZWNvbm5lY3RpbmcnLCBDaGFubmVsU3RhdGVbdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWVdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChydGNDb25uZWN0aW9uTW9uaXRvclN0YXRpc3RpY1N1YnNjcmlwdGlvbik7XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFwcGx5UnRjQ29uZmlndXJhdGlvbihcbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24gfCBudWxsLFxuICAgIHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIGlmICghb3B0aW9uYWxQZWVyQ29ubmVjdGlvbikge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbiA9IFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRydW5jYXRlSWNlU2VydmVycyhydGNDb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuIFNESy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUuY3JlYXRlUGVlckNvbm5lY3Rpb24ocnRjQ29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UnRjQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIC4uLm9wdGlvbmFsUGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpLFxuICAgICAgLi4ucnRjQ29uZmlndXJhdGlvblxuICAgIH07XG5cbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24obmV3UnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICByZXR1cm4gb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGlmIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIDwgU0RLLm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgfHwgIVNESy5hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKys7XG5cbiAgICAgIGNvbnN0IGlzQ2xpZW50T2ZmZXJGbG93ID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb24/LnR5cGUgPT09ICdvZmZlcic7XG5cbiAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhaXNDbGllbnRPZmZlckZsb3dcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZWNvbm5lY3RpbmcgcGVlciBjb25uZWN0aW9uIGJ5IHJlc3RhcnRpbmcgSUNFJyk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gICAgICBjb25zdCBpZ25vcmVkID0gcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIoe2ljZVJlc3RhcnQ6IHRydWV9KS50aGVuKG9mZmVyID0+IHtcbiAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24ob2ZmZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbicsIGUpO1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGFmdGVyIFslc10gYXR0ZW1wdHMsIHBlcmZvcm1pbmcgZnVsbCByZWNvdmVyeScsIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgcmV0cnlDYWxsYmFjaygpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ30gZnJvbSAnLi9DaHVua2VkU3RyZWFtaW5nJztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ09wdGlvbnMsIENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxudHlwZSBTaGFrYU9wdGlvbnMgPSB7XG4gIGFicjoge1xuICAgIGRlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZTogbnVtYmVyO1xuICB9O1xuICBtYW5pZmVzdDoge1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIHN0cmVhbWluZzoge1xuICAgIHJlYnVmZmVyaW5nR29hbDogbnVtYmVyO1xuICAgIGJ1ZmZlcmluZ0dvYWw6IG51bWJlcjtcbiAgICBidWZmZXJCZWhpbmQ6IG51bWJlcjtcbiAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgIHRpbWVvdXQ6IG51bWJlcjtcbiAgICAgIG1heEF0dGVtcHRzOiBudW1iZXI7XG4gICAgICBiYWNrb2ZmRmFjdG9yOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNoYWthIHtcbiAgY29uZmlndXJlOiAobzogU2hha2FPcHRpb25zKSA9PiB2b2lkO1xuICBsb2FkOiAodXJpOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIGdldFN0YXRzOiAoKSA9PiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcztcbiAgZGVzdHJveTogKCkgPT4gdm9pZDtcbiAgdW5sb2FkOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFrYVBsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTaGFrYVBsYXllcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSVNoYWthO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKENodW5rZWRTdHJlYW1pbmcuc2hha2EpIHtcbiAgICAgIGNvbnN0IHBsYXllck9wdGlvbnM6IFNoYWthT3B0aW9ucyA9IHtcbiAgICAgICAgYWJyOiB7ZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiAyMDAwMDAwfSxcbiAgICAgICAgbWFuaWZlc3Q6IHtyZXRyeVBhcmFtZXRlcnM6IHt0aW1lb3V0OiAxMDAwMH19LFxuICAgICAgICBzdHJlYW1pbmc6IHtcbiAgICAgICAgICByZWJ1ZmZlcmluZ0dvYWw6IDIsXG4gICAgICAgICAgYnVmZmVyaW5nR29hbDogMTAsXG4gICAgICAgICAgYnVmZmVyQmVoaW5kOiAzMCxcbiAgICAgICAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICAgICAgbWF4QXR0ZW1wdHM6IDEwLFxuICAgICAgICAgICAgYmFja29mZkZhY3RvcjogMS4xXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgQ2h1bmtlZFN0cmVhbWluZy5zaGFrYS5QbGF5ZXIodGhpcy5fdmlkZW9FbGVtZW50KTtcbiAgICAgIHRoaXMubG9hZFBsYXllcihwbGF5ZXJPcHRpb25zKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAsXG4gICAgICAgIGxhZzogMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0ge1xuICAgICAgLi4udGhpcy5fcGxheWVyLmdldFN0YXRzKCksXG4gICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgIGxhZzogMFxuICAgIH07XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ10gfHwgMDtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG4gICAgY29uc3QgbGFnID0gTWF0aC5tYXgoMC4wLCB0cnVlQ3VycmVudFRpbWUgLSBjdXJyZW50VGltZSk7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50KSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgICBzdGF0aXN0aWNzLmxhZyA9IGxhZztcblxuICAgICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLnVubG9hZCgpO1xuICAgICAgdGhpcy5fcGxheWVyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGxheWVyKHBsYXllckNvbmZpZzogU2hha2FPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGxheWVyLmNvbmZpZ3VyZShwbGF5ZXJDb25maWcpO1xuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BsYXllci5sb2FkKHRoaXMuX21hbmlmZXN0VVJJKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERBU0ggbGl2ZSBzdHJlYW0gaGFzIGJlZW4gbG9hZGVkJywgdGhpcy5fc3RyZWFtSWQpO1xuXG4gICAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LnBsYXkpIHtcbiAgICAgICAgdGhpcy5fdmlkZW9FbGVtZW50LnBsYXkoKTtcbiAgICAgIH1cbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBFcnJvciB3aGlsZSBsb2FkaW5nIERBU0ggbGl2ZSBzdHJlYW0gWyVzXScsIHRoaXMuX3N0cmVhbUlkLCBlLmNvZGUsIGUpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IENodW5rZWRTdHJlYW0gZnJvbSAnLi9DaHVua2VkU3RyZWFtJztcbmltcG9ydCBSZWFsVGltZVN0cmVhbSBmcm9tICcuL1JlYWxUaW1lU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbUZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbWluZycpO1xuXG4gIHN0YXRpYyBjcmVhdGUodG9rZW46IHN0cmluZywgY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgc3RyZWFtVHJhbnNmb3JtQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPik6IElTdHJlYW0ge1xuICAgIGNvbnN0IHRva2VuQ2FwYWJpbGl0aWVzID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikuY2FwYWJpbGl0aWVzO1xuXG4gICAgaWYgKHRva2VuQ2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdzdHJlYW1pbmcnKSB8fCB0b2tlbkNhcGFiaWxpdGllcy5pbmNsdWRlcygnb24tZGVtYW5kJykpIHtcbiAgICAgIHJldHVybiBuZXcgQ2h1bmtlZFN0cmVhbShjaGFubmVsQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZWFsVGltZVN0cmVhbShjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyZWFtRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdPcHRpb25zLCBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbmNvbnN0IGJhbmR3aWR0aFRvU3RhcnRBdCA9IDMwMDAwMDA7IC8vIENvcnJlc3BvbmRzIHRvIDcyMHAgaW4gbW9zdCBzZXR1cHNcbmNvbnN0IG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkID0gMTUwMDA7XG5cbnR5cGUgRXZlbnRMaXN0ZW5lckZvcldlYlBsYXllciA9IChldnQ6IFdlYlBsYXllckV2ZW50KSA9PiB2b2lkO1xudHlwZSBXZWJQbGF5ZXJFdmVudCA9IHtcbiAgY29kZTogbnVtYmVyO1xuICBzZXZlcml0eTogbnVtYmVyO1xuICBlcnJvcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJV2ViUGxheWVyIHtcbiAgc3RhcnQ6ICh1cmw6IHN0cmluZykgPT4gdm9pZDtcbiAgYWRkRXZlbnRMaXN0ZW5lcihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyRm9yV2ViUGxheWVyKTogdm9pZDtcbiAgZGlzcG9zZSgpOiB2b2lkO1xuICBlcnJvcnM6IHtcbiAgICBzZXZlcml0eToge1xuICAgICAgUkVDT1ZFUkFCTEU6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1dlYlBsYXllcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSVdlYlBsYXllcjtcbiAgcHJpdmF0ZSBfbGFzdFJlbG9hZFRpbWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllcikge1xuICAgICAgY29uc3QgcGxheWVyT3B0aW9ucyA9IHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgYmFuZHdpZHRoVG9TdGFydEF0XG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuV2ViUGxheWVyKHRoaXMuX2xvZ2dlciwgdGhpcy5fdmlkZW9FbGVtZW50LCBwbGF5ZXJPcHRpb25zKTtcbiAgICAgIHRoaXMuX3BsYXllci5zdGFydCh0aGlzLl9tYW5pZmVzdFVSSSk7XG5cbiAgICAgIHRoaXMuX3BsYXllci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9yT2JqZWN0ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2FuUmVsb2FkKCkgJiYgZXJyb3JPYmplY3QgJiYgKGVycm9yT2JqZWN0LmNvZGUgPT09IDMgfHwgZXJyb3JPYmplY3Quc2V2ZXJpdHkgPT09IENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLmVycm9ycy5zZXZlcml0eS5SRUNPVkVSQUJMRSkpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gYWZ0ZXIgZXJyb3IgZXZlbnQgWyVqXScsIGVycm9yT2JqZWN0KTtcbiAgICAgICAgICB0aGlzLnJlbG9hZElmQWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcmVsb2FkIHdpdGggZXJyb3IgWyVqXScsIGVycm9yT2JqZWN0KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyICYmIENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLmlzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMC4wLFxuICAgICAgICBsYWc6IDAuMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZSxcbiAgICAgICAgZGF0YUJ1ZmZlcmVkOiAwLjBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHRoaXMuX3BsYXllci5nZXRTdGF0cygpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gc3RhdGlzdGljcy5jdXJyZW50VGltZSB8fCB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ107XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuaXNOYXRpdmUgJiYgc3RhdGlzdGljcy5kZWxpdmVyeVR5cGUgPT09ICdIbHMnKSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgLSBzdGF0aXN0aWNzLmxhZztcbiAgICB9XG5cbiAgICBpZiAoIXN0YXRpc3RpY3MuY3VycmVudFRpbWUpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICB9XG5cbiAgICBpZiAoIXN0YXRpc3RpY3MuaXNOYXRpdmUpIHtcbiAgICAgIHN0YXRpc3RpY3MubGFnID0gTWF0aC5tYXgoMC4wLCB0cnVlQ3VycmVudFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5wbGF5VGltZSA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci5kaXNwb3NlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgY2FuUmVsb2FkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkID0gIXRoaXMuX2xhc3RSZWxvYWRUaW1lIHx8IERhdGUubm93KCkgLSB0aGlzLl9sYXN0UmVsb2FkVGltZSA+IG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkO1xuXG4gICAgcmV0dXJuIHRoaXMuX3ZpZGVvRWxlbWVudCAmJiB0aGlzLl9wbGF5ZXIgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCAhPT0gMCAmJiBoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkSWZBYmxlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5SZWxvYWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIFJlbG9hZGluZyB1bmhlYWx0aHkgc3RyZWFtIHRoYXQgd2FzIGFjdGl2ZSBmb3IgYXQgbGVhc3QgWyVzXSBzZWNvbmRzJywgdGhpcy5fc3RyZWFtSWQsIG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIC8gMTAwMCk7XG5cbiAgICB0aGlzLl9sYXN0UmVsb2FkVGltZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUVuY29kZWRTdHJlYW1TaW5rPFQgPSBSVENFbmNvZGVkQXVkaW9GcmFtZSB8IFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB7XG4gICAgKHRyYWNrOiBNZWRpYVN0cmVhbVRyYWNrLCBjaHVuazogVCk6IGJvb2xlYW4gfCBQcm9taXNlTGlrZTxib29sZWFuPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5jb2RlZFN0cmVhbVNpbmsge1xuICBzdGF0aWMgdmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luayhtb2RlOiAnYXVkaW8nIHwgJ3ZpZGVvJywgaXRlbTogSUVuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gRW5jb2RlZCBTdHJlYW0gU2luayBmdW5jdGlvbiB0eXBlLiBGb3VuZCBbJHt0eXBlb2YgaXRlbX1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBFbmNvZGVkIFN0cmVhbSBTaW5rIGZ1bmN0aW9uIHBhcmFtZXRlciBsZW5ndGguIEV4cGVjdGVkIDIuIEZvdW5kIFske2l0ZW0ubGVuZ3RofV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6ICdvaydcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvZGVkU3RyZWFtU2luayBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwge1N1cnJvZ2F0ZUZyYW1lVHlwZSwgU2tpcEZyYW1lfSBmcm9tICcuL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXInO1xuXG50eXBlIE1lZGlhU3RyZWFtVHJhY2tLaW5kID0gJ3ZpZGVvJyB8ICdhdWRpbyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluc2VydGFibGVTdHJlYW1zIHtcbiAgc3RhdGljIGFwcGx5RW5jb2RlZFN0cmVhbVRyYW5zZm9ybWF0aW9uKHN0cmVhbTogTWVkaWFTdHJlYW0sIHJlY2VpdmVyczogUlRDUnRwUmVjZWl2ZXJbXSwgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiwgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiwgdmlkZW9Db2RlYzogc3RyaW5nLCBhdWRpb0NvZGVjOiBzdHJpbmcpOiB7ZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0fSB7XG4gICAgY29uc3QgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICBjb25zdCByZWNlaXZlciA9IHJlY2VpdmVycy5maWx0ZXIocmVjZWl2ZSA9PiByZWNlaXZlLnRyYWNrID09PSB0cmFjaylbMF07XG4gICAgICBjb25zdCBraW5kOiBNZWRpYVN0cmVhbVRyYWNrS2luZCA9IHRyYWNrLmtpbmQgYXMgTWVkaWFTdHJlYW1UcmFja0tpbmQ7XG5cbiAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICBjYXNlICd2aWRlbyc6IHtcbiAgICAgICAgICBpZiAoZW5jb2RlZFZpZGVvU3RyZWFtU2luaykge1xuICAgICAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi9Xb3JrZXJUcmFuc2Zvcm1TdHJlYW0udHMnLCBpbXBvcnQubWV0YS51cmwpLCB7dHlwZTogJ2NsYXNzaWMnfSk7XG5cbiAgICAgICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IGFzeW5jIGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWF3YWl0IGVuY29kZWRWaWRlb1N0cmVhbVNpbmsodHJhY2ssIGV2ZW50LmRhdGEuY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe2ZvcmNlSW52YWxpZEZyYW1lOiB0cnVlfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHJlY2VpdmVyLnRyYW5zZm9ybSA9IG5ldyBSVENSdHBTY3JpcHRUcmFuc2Zvcm0od29ya2VyLCB7XG4gICAgICAgICAgICAgICAga2luZDogdHJhY2sua2luZCxcbiAgICAgICAgICAgICAgICBjb2RlYzogdmlkZW9Db2RlY1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFJUQ0VuY29kZWRWaWRlb0ZyYW1lLCBSVENFbmNvZGVkVmlkZW9GcmFtZT4gPSBhc3luYyhjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWF3YWl0IGVuY29kZWRWaWRlb1N0cmVhbVNpbmsodHJhY2ssIGNodW5rKSkge1xuICAgICAgICAgICAgICAgIGxldCBzdXJyb2dhdGU6IFN1cnJvZ2F0ZUZyYW1lVHlwZTtcblxuICAgICAgICAgICAgICAgIGlmIChjaHVuay50eXBlID09PSAna2V5Jykge1xuICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUodmlkZW9Db2RlYyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lKHZpZGVvQ29kZWMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdXJyb2dhdGUgPT09IFNraXBGcmFtZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBzdXJyb2dhdGUgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY2h1bmsudHlwZSA9PT0gJ2tleScpIHtcbiAgICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWModmlkZW9Db2RlYykgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyh2aWRlb0NvZGVjKSB8fCBjaHVuay5kYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuayk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgICBjb25zdCByZWNlaXZlclN0cmVhbXMgPSByZWNlaXZlci5jcmVhdGVFbmNvZGVkU3RyZWFtcygpO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcmVjZWl2ZXJTdHJlYW1zLnJlYWRhYmxlO1xuICAgICAgICAgICAgY29uc3Qgc2luayA9IHJlY2VpdmVyU3RyZWFtcy53cml0YWJsZTtcblxuICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgICAgLnBpcGVUbyhzaW5rKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ2F1ZGlvJzoge1xuICAgICAgICAgIGlmIChlbmNvZGVkQXVkaW9TdHJlYW1TaW5rKSB7XG4gICAgICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuL1dvcmtlclRyYW5zZm9ybVN0cmVhbS50cycsIGltcG9ydC5tZXRhLnVybCksIHt0eXBlOiAnY2xhc3NpYyd9KTtcblxuICAgICAgICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gYXN5bmMgZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYXdhaXQgZW5jb2RlZEF1ZGlvU3RyZWFtU2luayh0cmFjaywgZXZlbnQuZGF0YS5jaHVuaykpIHtcbiAgICAgICAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7Zm9yY2VJbnZhbGlkRnJhbWU6IHRydWV9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgcmVjZWl2ZXIudHJhbnNmb3JtID0gbmV3IFJUQ1J0cFNjcmlwdFRyYW5zZm9ybSh3b3JrZXIsIHtcbiAgICAgICAgICAgICAgICBraW5kOiB0cmFjay5raW5kLFxuICAgICAgICAgICAgICAgIGNvZGVjOiBhdWRpb0NvZGVjXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG4gICAgICAgICAgICAgIGNvbnN0IGF1ZGlvUHVtcGVyID0gbmV3IEF1ZGlvKCk7XG5cbiAgICAgICAgICAgICAgYXVkaW9QdW1wZXIuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYXVkaW9QdW1wZXIpO1xuXG4gICAgICAgICAgICAgIGRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYXVkaW9QdW1wZXIpO1xuICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxSVENFbmNvZGVkQXVkaW9GcmFtZSwgUlRDRW5jb2RlZEF1ZGlvRnJhbWU+ID0gYXN5bmMoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFhd2FpdCBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rKHRyYWNrLCBjaHVuaykpIHtcbiAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlQXVkaW9TaWxlbnRQZXJDb2RlYyhhdWRpb0NvZGVjKSB8fCBjaHVuay5kYXRhO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtOiBlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVyU3RyZWFtcyA9IHJlY2VpdmVyLmNyZWF0ZUVuY29kZWRTdHJlYW1zKCk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSByZWNlaXZlclN0cmVhbXMucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gcmVjZWl2ZXJTdHJlYW1zLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShraW5kKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7ZGlzcG9zYWJsZXN9O1xuICB9XG5cbiAgc3RhdGljIGFwcGx5SW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybWF0aW9uKHN0cmVhbTogTWVkaWFTdHJlYW0sIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPiwgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT4pOiB7dHJhbnNmb3JtZWRTdHJlYW06IE1lZGlhU3RyZWFtOyBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3R9IHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuICAgIGNvbnN0IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuXG4gICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgY29uc3Qga2luZDogTWVkaWFTdHJlYW1UcmFja0tpbmQgPSB0cmFjay5raW5kIGFzIE1lZGlhU3RyZWFtVHJhY2tLaW5kO1xuXG4gICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgY2FzZSAndmlkZW8nOiB7XG4gICAgICAgICAgaWYgKHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxWaWRlb0ZyYW1lLCBWaWRlb0ZyYW1lPiA9IChjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKHRyYWNrLCBjaHVuaywgY29udHJvbGxlcik7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCB2aWRlb1RyYWNrID0gdHJhY2sgYXMgTWVkaWFTdHJlYW1WaWRlb1RyYWNrO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc29yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3Ioe3RyYWNrOiB2aWRlb1RyYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvcih7a2luZDogdmlkZW9UcmFjay5raW5kfSk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBwcm9jZXNzb3IucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gZ2VuZXJhdG9yLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgICAgICAgZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0ucmVtb3ZlVHJhY2soZ2VuZXJhdG9yKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2sodHJhY2spO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnYXVkaW8nOiB7XG4gICAgICAgICAgaWYgKGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxBdWRpb0RhdGEsIEF1ZGlvRGF0YT4gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayh0cmFjaywgY2h1bmssIGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgYXVkaW9UcmFjayA9IHRyYWNrIGFzIE1lZGlhU3RyZWFtQXVkaW9UcmFjaztcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtOiBpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yKHt0cmFjazogYXVkaW9UcmFja30pO1xuICAgICAgICAgICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3Ioe2tpbmQ6IGF1ZGlvVHJhY2sua2luZH0pO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcHJvY2Vzc29yLnJlYWRhYmxlO1xuICAgICAgICAgICAgY29uc3Qgc2luayA9IGdlbmVyYXRvci53cml0YWJsZTtcblxuICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgICAgLnBpcGVUbyhzaW5rKTtcblxuICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2soZ2VuZXJhdG9yKTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcbiAgICAgICAgICAgIGNvbnN0IGF1ZGlvUHVtcGVyID0gbmV3IEF1ZGlvKCk7XG5cbiAgICAgICAgICAgIG1lZGlhU3RyZWFtLmFkZFRyYWNrKHRyYWNrKTtcbiAgICAgICAgICAgIGF1ZGlvUHVtcGVyLnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhdWRpb1B1bXBlcik7XG4gICAgICAgICAgICBkaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5yZW1vdmVUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGF1ZGlvUHVtcGVyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2sodHJhY2spO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShraW5kKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0cmFuc2Zvcm1lZFN0cmVhbSxcbiAgICAgIGRpc3Bvc2FibGVzXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5zZXJ0YWJsZVN0cmVhbXMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW1UcmFja1RyYW5zZm9ybTxUID0gQXVkaW9EYXRhIHwgVmlkZW9GcmFtZT4ge1xuICAgICh0cmFjazogTWVkaWFTdHJlYW1UcmFjaywgY2h1bms6IFQsIGNvbnRyb2xsZXI6IFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyPFQ+KTogdm9pZCB8IFByb21pc2VMaWtlPHZvaWQ+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1UcmFja1RyYW5zZm9ybSB7XG4gIHN0YXRpYyB2YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0obW9kZTogJ2F1ZGlvJyB8ICd2aWRlbycsIGl0ZW06IElTdHJlYW1UcmFja1RyYW5zZm9ybSkge1xuICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IE1lZGlhIFN0cmVhbSBUcmFjayB0cmFuc2Zvcm0gZnVuY3Rpb24gdHlwZS4gRm91bmQgWyR7dHlwZW9mIGl0ZW19XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoICE9PSAzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gTWVkaWEgU3RyZWFtIFRyYWNrIHRyYW5zZm9ybSBmdW5jdGlvbiBwYXJhbWV0ZXIgbGVuZ3RoLiBFeHBlY3RlZCAzLiBGb3VuZCBbJHtpdGVtLmxlbmd0aH1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICB2YWxpZGF0aW9uUmVzdWx0OiAnb2snXG4gICAgfTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uLy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgY29uc3QgU2tpcEZyYW1lID0gU3ltYm9sKCk7XG5cbmV4cG9ydCB0eXBlIFN1cnJvZ2F0ZUZyYW1lVHlwZSA9IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHwgdHlwZW9mIFNraXBGcmFtZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc1NhZmFyaSA9IEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc01vYmlsZUNocm9tZSA9IEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmlzTW9iaWxlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0FuZHJvaWRDaHJvbWUgPSBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5pc0FuZHJvaWQ7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zaW5nbGVaZXJvQnl0ZSA9IG5ldyBVaW50OEFycmF5KFsweDAwXSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teUF1ZGlvU2lsZW50UGVyQ29kZWMgPSB7T1BVUzogbmV3IFVpbnQ4QXJyYXkoWzB4NjgsIDB4MDcsIDB4ZDksIDB4YWIsIDB4YmMsIDB4NzksIDB4ODcsIDB4YWIsIDB4OGUsIDB4NGEsIDB4MTQsIDB4ZjMsIDB4YTcsIDB4MWMsIDB4ZjIsIDB4OWEsIDB4N2EsIDB4NDUsIDB4YTcsIDB4MmQsIDB4NDQsIDB4MjUsIDB4NzQsIDB4NGMsIDB4YWQsIDB4MTYsIDB4YjMsIDB4MGUsIDB4NTEsIDB4NTcsIDB4ZWEsIDB4ZTcsIDB4YWQsIDB4MmEsIDB4MzgsIDB4Y2UsIDB4MzNdKX07XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMgPSB7XG4gICAgSDI2NDogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOSwgMHhmMCwgLy8gQWNjZXNzIHVuaXQgZGVsaW1pdGVyXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweGY0LCAweDAwLCAweDBhLCAweDkxLCAweDliLCAweDJiLCAweGYxLCAweGYxLCAweGY4LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweDA3LCAweDg5LCAweDEyLCAweGNiLCAvLyBTZXF1ZW5jZSBwYXJhbWV0ZXIgc2V0XG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY4LCAweGViLCAweGUzLCAweGM0LCAweDQ4LCAweDQ0LCAvLyBQaWN0dXJlIHBhcmFtdGVyIHNldFxuICAgICAgLyogKi8gMHgwMCwgMHgwMCwgMHgwMSwgMHg2NSwgMHg4OCwgMHg4MiwgMHgwMCwgMHgzZiwgMHg3MCwgMHgyMywgMHg4NiwgMHhlNiwgMHhkMSwgMHg4MCwgMHgwOSwgMHhhZiwgMHgwYSwgMHg0MSwgMHg2NiwgMHg2YiwgMHg1NCwgMHg0NiwgMHhmYiwgMHg3MSwgMHhkOSwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmOV0pLCAvLyBTbGljZSBsYXllcjogaWRyIGRhdGFcbiAgICBWUDg6IG5ldyBVaW50OEFycmF5KFsweGIwLCAweDAyLCAweDAwLCAweDlkLCAweDAxLCAweDJhLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDM5LCAweDZiLCAweDAwLCAweDI3LCAweDFjLCAweDI0LCAweDBjLCAweDJjLCAweDJjLCAweDQ0LCAweGNjLCAweDI0LCAweDQxLCAweGE4LCAweDAwLCAweDEzLCAweGE3LCAweGEzLCAweDdhLCAweDUwLCAweDAwLCAweGZlLCAweGViLCAweGRlLCAweDJmLCAweDhhLCAweDFlLCAweDZiLCAweDdiLCAweDA3LCAweDcyLCAweDYzLCAweDA5LCAweGE0LCAweDhlLCAweGMwXSksXG4gICAgVlA5OiBuZXcgVWludDhBcnJheShbMHg4MiwgMHg0OSwgMHg4MywgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg3NiwgMHgzOCwgMHgyNCwgMHgxYywgMHgxOSwgMHhhMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgMHgwMCwgMHgxMSwgMHhiZiwgMHhkZCwgMHg3NywgMHhmZiwgMHg0MCwgMHg3ZiwgMHhiMSwgMHgwMF0pXG4gIH07XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMgPSB7XG4gICAgSDI2NDogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOSwgMHhmMCwgLy8gQWNjZXNzIHVuaXQgZGVsaW1pdGVyXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQxLCAweDlhLCAweDY4LCAweDQ5LCAweGE4LCAweDQxLCAweDY4LCAweDk5LCAweDRjLCAweDBmLCAweGZmLCAweDkyLCAweDgxXSksIC8vIFNsaWNlIGxheWVyOiBub24gaWRyIGRhdGFcbiAgICBWUDg6IG5ldyBVaW50OEFycmF5KFsweDMxLCAweDAzLCAweDAwLCAweGU0LCAweGUwLCAweGE4LCAweDliLCAweDM3LCAweGFmLCAweDEwLCAweDRmLCAweDRmLCAweGIxLCAweDBhLCAweDJmLCAweGU0LCAweDkyLCAweGMwLCAweDFmLCAweGU3LCAweDRmLCAweDQ2LCAweGZmLCAweGVlLCAweDUxLCAweGMxLCAweDVkLCAweDAwLCAweGZlLCAweGViLCAweGRlLCAweDJmLCAweDhhLCAweDFlLCAweDZiLCAweDdiLCAweDA3LCAweDcyLCAweDYzLCAweDA5LCAweGE0LCAweDhlLCAweGMwXSksXG4gICAgVlA5OiBuZXcgVWludDhBcnJheShbMHg4NiwgMHgwMCwgMHg0MCwgMHg5MiwgMHg5YywgMHgyNCwgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMywgMHg3MCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg0MF0pXG4gIH07XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teTgyeDgySDI2NCA9IHtcbiAgICBJRnJhbWU6IG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjcsIDB4NDIsIDB4YzAsIDB4MGQsIDB4ZGEsIDB4MTgsIDB4ZGUsIDB4MjIsIDB4MjIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDMsIDB4YzgsIDB4ZjEsIDB4NDIsIDB4YWEsIC8vIFNlcXVlbmNlIHBhcmFtZXRlciBzZXRcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjgsIDB4Y2UsIDB4MGYsIDB4YzgsIC8vIFBpY3R1cmUgcGFyYW1ldGVyIHNldFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNiwgMHgwMywgLi4ubmV3IFVpbnQ4QXJyYXkoNDApLmZpbGwoMHhmZiksIDB4NWYsIC4uLm5ldyBVaW50OEFycmF5KDEwMjk1KS5maWxsKDB4ZmYpLCAweDgwLCAvLyBTdXBwbGVtZW50YWwgZW5oYW5jZW1lbnQgaW5mb3JtYXRpb24gKFNFSSlcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjUsIDB4ODgsIDB4ODQsIDB4MDUsIC4uLm5ldyBVaW50OEFycmF5KDMpLmZpbGwoMHhmZiksIDB4MGYsIDB4NDUsIDB4MDAsIDB4MDEsIDB4NTcsIDB4OWYsIDB4MjcsIDB4MjcsIDB4MjcsIDB4MjcsIDB4MjcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzhdKSwgLy8gU2xpY2UgbGF5ZXI6IElkciBkYXRhXG4gICAgUEZyYW1lOiBuZXcgVWludDhBcnJheShbXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA2LCAweDAzLCAuLi5uZXcgVWludDhBcnJheSg0MCkuZmlsbCgweGZmKSwgMHhhNCwgLi4ubmV3IFVpbnQ4QXJyYXkoMTAzNjQpLmZpbGwoMHhmZiksIDB4ODAsIC8vIFNFSVxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0MSwgMHg5YSwgMHgyMCwgMHgxNSwgMHhmMCwgMHg0Yl0pIC8vIFNsaWNlIGxheWVyOiBub24gaWRyIGRhdGFcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15ODJ4ODJIMjY0UEZyYW1lRnJhbWVOdW1iZXJJbmRleCA9IDEwNDE4O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0ID0gMTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc01vYmlsZUNocm9tZSB8fCBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc1NhZmFyaTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XG5cbiAgc3RhdGljIGdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMoY29kZWM6IHN0cmluZyk6IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ09QVVMnOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teUF1ZGlvU2lsZW50UGVyQ29kZWMuT1BVUy5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSgpOiBBcnJheUJ1ZmZlciB7XG4gICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdXJyb2dhdGVWaWRlb0lGcmFtZVBlckNvZGVjKGNvZGVjOiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoIChjb2RlYy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdIMjY0Jzoge1xuICAgICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xuICAgICAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XG5cbiAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjQuSUZyYW1lLmJ1ZmZlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuSDI2NC5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1ZQOCc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5WUDguYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdWUDknOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuVlA5LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUoY29kZWM6IHN0cmluZyk6IFN1cnJvZ2F0ZUZyYW1lVHlwZSB7XG4gICAgaWYgKChjb2RlYy50b1VwcGVyQ2FzZSgpID09PSAnSDI2NCcpICYmIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcbiAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XG5cbiAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc0FuZHJvaWRDaHJvbWUpIHtcbiAgICAgICAgcmV0dXJuIFNraXBGcmFtZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICB9XG5cbiAgc3RhdGljIGdldFN1cnJvZ2F0ZVZpZGVvUEZyYW1lUGVyQ29kZWMoY29kZWM6IHN0cmluZyk6IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ0gyNjQnOiB7XG4gICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XG4gICAgICAgICAgY29uc3QgYnVmZmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyKCk7XG5cbiAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYy5IMjY0LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnVlA4Jzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLlZQOC5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1ZQOSc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYy5WUDkuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZShjb2RlYzogc3RyaW5nKTogU3Vycm9nYXRlRnJhbWVUeXBlIHtcbiAgICBpZiAoKGNvZGVjLnRvVXBwZXJDYXNlKCkgPT09ICdIMjY0JykgJiYgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xuICAgICAgY29uc3Qgc2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXI7XG4gICAgICBjb25zdCBidWZmZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTtcblxuICAgICAgaWYgKHNhdmVkU3Vycm9nYXRlRnJhbWVOdW1iZXIgPiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQpIHtcbiAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzQW5kcm9pZENocm9tZSkge1xuICAgICAgICAgIHJldHVybiBTa2lwRnJhbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKys7XG5cbiAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTogQXJyYXlCdWZmZXIge1xuICAgIGNvbnN0IGJpdE1hc2sxID0gMHgwZTtcbiAgICBjb25zdCBiaXRNYXNrMiA9IDB4MDE7XG4gICAgY29uc3QgYml0U2hpZnRSaWdodEJ5MSA9IDE7XG4gICAgY29uc3QgYml0U2hpZnRMZWZ0Qnk3ID0gNztcbiAgICBjb25zdCBieXRlMSA9ICgoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciAmIGJpdE1hc2sxKSA+PiBiaXRTaGlmdFJpZ2h0QnkxKTtcbiAgICBjb25zdCBieXRlMiA9ICgoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciAmIGJpdE1hc2syKSA8PCBiaXRTaGlmdExlZnRCeTcpO1xuICAgIGNvbnN0IGNvcHlPZkR1bW15UEZyYW1lcyA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15ODJ4ODJIMjY0LlBGcmFtZS5zbGljZSgpO1xuICAgIGNvbnN0IGJ1ZmZlciA9IGNvcHlPZkR1bW15UEZyYW1lcy5idWZmZXI7XG4gICAgY29uc3QgYnVmZmVySW5kZXggPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NFBGcmFtZUZyYW1lTnVtYmVySW5kZXg7XG5cbiAgICBidWZmZXJbYnVmZmVySW5kZXhdIHw9IGJ5dGUxO1xuICAgIGJ1ZmZlcltidWZmZXJJbmRleCArIDFdIHw9IGJ5dGUyO1xuICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIrKztcblxuICAgIHJldHVybiBidWZmZXI7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19CVUlMRF9WRVJTSU9OX186IHN0cmluZztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVyc2lvbk1hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBfZGVmYXVsdFZlcnNpb24gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgc3RhdGljIGdldCBzZGtWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBfX0JVSUxEX1ZFUlNJT05fXztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZlcnNpb247XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5U2VydmljZSBmcm9tICcuL1RlbGVtZXRyeVNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuLi9sb2dnZXIvSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5QXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZWxlbWV0cnlTZXJ2aWNlOiBUZWxlbWV0cnlTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeTtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZDtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZDtcbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlID0gbmV3IFRlbGVtZXRyeVNlcnZpY2UodGVsZW1ldHJ5Q29uZmlndXJhdGlvbik7XG4gIH1cblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZS5wdXNoKGxvZ0xldmVsLCBtZXNzYWdlLCBjYXRlZ29yeSwgZGF0ZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L2xvZ3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlVcmwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgPSB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgKyAnL2xvZ3MnO1xuXG4gICAgdGhpcy5fdXJsID0gdGVsZW1ldHJ5VXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHNldCBwYWdlTG9hZFRpbWUocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBOdW1iZXJzIGZyb20gJy4uL2xhbmcvTnVtYmVycyc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIF9sb2dzOiBBcnJheTxJTG9nSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgdGltZXN0YW1wOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgcnVudGltZSA9ICh0aW1lc3RhbXAudmFsdWVPZigpIC0gdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5wYWdlTG9hZFRpbWUpIC8gMTAwMDtcbiAgICBjb25zdCBsb2dSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcC50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgbGV2ZWw6IExvZ2dpbmdMZXZlbFtsb2dMZXZlbF0sXG4gICAgICBjYXRlZ29yeSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpbixcbiAgICAgIHJ1bnRpbWVcbiAgICB9O1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICB0aGlzLl9sb2dzLnB1c2gobG9nUmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9ncy51bnNoaWZ0KGxvZ1JlY29yZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3MobG9nTWVzc2FnZXM6IEFycmF5PElMb2dJdGVtPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbG9nTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZmV0Y2godGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbG9ncy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMDtcbiAgICBsZXQgc2l6ZU9mTG9nc1RvU2VuZCA9IDA7XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZ2V0SXRlbVNpemUgPSBpdGVtID0+IHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJyA/IE51bWJlcnMuY291bnROdW1iZXJMZW5ndGgoaXRlbSkgOiBpdGVtLmxlbmd0aDtcbiAgICBjb25zdCBnZXRMb2dTaXplID0gKGxvZzogSUxvZ0l0ZW0pOiBudW1iZXIgPT4gT2JqZWN0LnZhbHVlcyhsb2cpXG4gICAgICAucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIChpdGVtID8gZ2V0SXRlbVNpemUoaXRlbSkgOiAwKSwgMCk7XG5cbiAgICB3aGlsZSAodGhpcy5fbG9ncy5sZW5ndGggPiBudW1iZXJPZkxvZ3NUb1NlbmQgJiYgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgc2l6ZU9mTG9nc1RvU2VuZCA8IHJlcXVlc3RTaXplTGltaXQpIHtcbiAgICAgIHNpemVPZkxvZ3NUb1NlbmQgKz0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kKys7XG4gICAgfVxuXG4gICAgaWYgKCFudW1iZXJPZkxvZ3NUb1NlbmQpIHtcbiAgICAgIHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlID0gdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsXG4gICAgICAgIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIChyZXF1ZXN0U2l6ZUxpbWl0IC0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pKSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQgPSAxO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ01lc3NhZ2VzID0gdGhpcy5fbG9ncy5zbGljZSgwLCBudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgdGhpcy5fbG9ncyA9IHRoaXMuX2xvZ3Muc2xpY2UobnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRMb2dzKGxvZ01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHVyYXRpb25zIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZHVyYXRpb246IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihkdXJhdGlvbiA9IDApIHtcbiAgICB0aGlzLl9kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICB9XG5cbiAgdG9Jc29TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fZHVyYXRpb24gPT09IDApIHtcbiAgICAgIHJldHVybiAnUDBTJztcbiAgICB9XG5cbiAgICBjb25zdCBpc05lZ2F0aXZlID0gdGhpcy5fZHVyYXRpb24gPCAwO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gaXNOZWdhdGl2ZSA/IE1hdGguYWJzKHRoaXMuX2R1cmF0aW9uKSA6IHRoaXMuX2R1cmF0aW9uO1xuICAgIGxldCBvZmZzZXQgPSBNYXRoLmZsb29yKGR1cmF0aW9uKTtcbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBvZmZzZXQgJSAxMDAwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyAxMDAwKTtcblxuICAgIGNvbnN0IHNlY29uZHMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgbWludXRlcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBob3VycyA9IG9mZnNldCAlIDI0O1xuICAgIGNvbnN0IHBhcnRzID0gWydQVCddO1xuXG4gICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy0nKTtcbiAgICB9XG5cbiAgICBpZiAoaG91cnMpIHtcbiAgICAgIHBhcnRzLnB1c2goaG91cnMgKyAnSCcpO1xuICAgIH1cblxuICAgIGlmIChtaW51dGVzKSB7XG4gICAgICBwYXJ0cy5wdXNoKG1pbnV0ZXMgKyAnTScpO1xuICAgIH1cblxuICAgIGlmIChzZWNvbmRzIHx8IG1pbGxpc2Vjb25kcykge1xuICAgICAgcGFydHMucHVzaChTdHJpbmcoc2Vjb25kcykpO1xuXG4gICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgIHBhcnRzLnB1c2goJy4nICsgdGhpcy5wYWRTdGFydChtaWxsaXNlY29uZHMudG9TdHJpbmcoKSwgMywgJzAnKSk7XG4gICAgICB9XG5cbiAgICAgIHBhcnRzLnB1c2goJ1MnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydHMuam9pbignJyk7XG4gIH1cblxuICBwYWRTdGFydChpdGVtOiBzdHJpbmcsIHRhcmdldExlbmd0aDogbnVtYmVyLCBwYWRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoID4+IDA7XG4gICAgcGFkU3RyaW5nID0gU3RyaW5nKCh0eXBlb2YgcGFkU3RyaW5nICE9PSAndW5kZWZpbmVkJyA/IHBhZFN0cmluZyA6ICcgJykpO1xuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoID4gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggLSBpdGVtLmxlbmd0aDtcblxuICAgIGlmICh0YXJnZXRMZW5ndGggPiBwYWRTdHJpbmcubGVuZ3RoKSB7XG4gICAgICBwYWRTdHJpbmcgKz0gcGFkU3RyaW5nLnJlcGVhdCh0YXJnZXRMZW5ndGggLyBwYWRTdHJpbmcubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFkU3RyaW5nLnNsaWNlKDAsIHRhcmdldExlbmd0aCkgKyBpdGVtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMjAwMDtcbmNvbnN0IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMTtcbmNvbnN0IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMzAwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBvbmVudGlhbEJhY2tvZmYge1xuICBwcml2YXRlIHJlYWRvbmx5IF9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kXG4gICkge1xuICAgIHRoaXMuX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICB9XG5cbiAgZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudChmYWlsdXJlQ291bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYmFja29mZkludGVydmFsSW5TZWNvbmRzID0gdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCAvIDEwMDA7XG4gICAgY29uc3QgcmFuZG9taXphdGlvbiA9IDAuNSArICgwLjUgKiBNYXRoLnJhbmRvbSgpKTsgLy8gWzAuNSwgMSlcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmYgPSBNYXRoLnBvdyhiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMsIGZhaWx1cmVDb3VudCAtIDIpOyAvLyAgWzEvNCAxLzIgMSAyIDQgOCAuLi4uXVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uID0gTWF0aC5mbG9vcihleHBvbmVudGlhbEJhY2tvZmYpICogcmFuZG9taXphdGlvbjtcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQgPSBNYXRoLmNlaWwoTWF0aC5tYXgoZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gKiAxMDAwLCB0aGlzLl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKSk7XG5cbiAgICByZXR1cm4gTWF0aC5taW4oZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kLCB0aGlzLl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaW1lbnNpb24gaW1wbGVtZW50cyBJQ29tcGFyYWJsZTxEaW1lbnNpb24+IHtcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXI7XG5cbiAgc3RhdGljIGdldCBlbXB0eSgpOiBEaW1lbnNpb24ge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9uKDAsIDApO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IERpbWVuc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLndpZHRoID09PSBvdGhlci53aWR0aCAmJiB0aGlzLmhlaWdodCA9PT0gb3RoZXIuaGVpZ2h0O1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aH14JHt0aGlzLmhlaWdodH1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1N0cmVhbVNldHVwTGlzdGVuZXJ9IGZyb20gJy4uL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTmV0d29ya01vbml0b3IgZnJvbSAnLi4vZG9tL05ldHdvcmtNb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSU5ldHdvcmtTdGF0aXN0aWNzIHtcbiAgcnR0PzogbnVtYmVyO1xuICBlZmZlY3RpdmVUeXBlPzogc3RyaW5nO1xuICBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvblRlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1Nlc3Npb25UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IFNESy5hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29ya01vbml0b3I6IE5ldHdvcmtNb25pdG9yID0gbmV3IE5ldHdvcmtNb25pdG9yKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfbGFzdE5ldHdvcmtTdGF0aXN0aWNzOiBJTmV0d29ya1N0YXRpc3RpY3MgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvcik7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcblxuICAgIGlmICghdGhpcy5fbmV0d29ya01vbml0b3IuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuaXNGb3JlZ3JvdW5kLnN1YnNjcmliZShpc0ZvcmVncm91bmQgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5ydHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1JUVFVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5lZmZlY3RpdmVUeXBlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICB9XG5cbiAgbGlzdGVuT25TdHJlYW1TZXR1cCgpOiBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbVNldHVwTGlzdGVuZXIodGhpcy5fcGFnZUxvYWRUaW1lKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdENoYW5nZSA9IHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogaXNGb3JlZ3JvdW5kID8gTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kIDogTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZUxhc3RDaGFuZ2V9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdBcHBsaWNhdGlvbiBoYXMgZ29uZSBpbnRvIHRoZSBbJXNdIGFmdGVyIFslc10gbXMnLFxuICAgICAgaXNGb3JlZ3JvdW5kID8gJ2ZvcmVncm91bmQnIDogJ2JhY2tncm91bmQnLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VMYXN0Q2hhbmdlKS50b0lzb1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtSVFRVcGRhdGUobmV3UlRUOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZFJ0dCA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQ7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0ID0gbmV3UlRUO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IG5ld1JUVH0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRSdHQgPyB7dWludDY0OiBvbGRSdHR9IDogdW5kZWZpbmVkLFxuICAgICAgcmVzb3VyY2U6ICduYXZpZ2F0b3InXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgUlRUIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdSVFQsXG4gICAgICBvbGRSdHRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZShuZXdOZXR3b3JrVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGROZXR3b3JrVHlwZSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlO1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGUgPSBuZXdOZXR3b3JrVHlwZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuTmV0d29ya1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3TmV0d29ya1R5cGV9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkTmV0d29ya1R5cGUgPyB7c3RyaW5nOiBvbGROZXR3b3JrVHlwZX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBlZmZlY3RpdmUgdHlwZSBoYXMgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld05ldHdvcmtUeXBlLFxuICAgICAgb2xkTmV0d29ya1R5cGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUobmV3Q2FwYWNpdHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkQ2FwYWNpdHkgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkgPSBuZXdDYXBhY2l0eTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge2Zsb2F0OiBuZXdDYXBhY2l0eX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRDYXBhY2l0eSA/IHtmbG9hdDogb2xkQ2FwYWNpdHl9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZG93bmxpbmsgdGhyb3VnaHB1dCBjYXBhY2l0eSBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3Q2FwYWNpdHksXG4gICAgICBvbGRDYXBhY2l0eVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlkZW9UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfbGlzdGVuVG9GaXJzdFRpbWU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvclN0YWxsOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JDb250aW51YXRpb246IChldmVudCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1N0YWxsZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbGFzdFByb2dyZXNzOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvUmVzb2x1dGlvbjogc3RyaW5nO1xuICBwcml2YXRlIF9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcjogRGlzcG9zYWJsZTtcbiAgcHJpdmF0ZSBfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyOiBEaXNwb3NhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUlkOiBzdHJpbmcsIHBhZ2VMb2FkVGltZTogbnVtYmVyLCBjaGFubmVsU3RhcnRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBjaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUgPSAoKTogdm9pZCA9PiB0aGlzLmNhbGxUaW1lVG9GaXJzdEZyYW1lKCk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbkZvclN0YWxsID0gKCk6IHZvaWQgPT4gdGhpcy5vblN0YWxsKCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24gPSAoZXZlbnQpOiB2b2lkID0+IHRoaXMub25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG5cbiAgICB0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcik7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGR1cmF0aW9uU2luY2VQYWdlTG9hZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGxUaW1lVG9GaXJzdEZyYW1lKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG4gICAgdGhpcy5wdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl90aW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gRmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl90aW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX2NoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBDaGFubmVsIGNyZWF0aW9uIHRvIGZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uU3RhbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZpZGVvU3RhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuU3RhbGxlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyBzdGFsbGVkJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pOiB2b2lkIHtcbiAgICBpZiAoIXZpZGVvLmJ1ZmZlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdmlkZW8uYnVmZmVyZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ3BsYXlpbmcnXG4gICAgfHwgYnVmZmVyTGVuZ3RoID4gMCA/IChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnXG4gICAgICB8fCBldmVudC50eXBlID09PSAndGltZXVwZGF0ZScpXG4gICAgICAmJiB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSkgPT09IHRoaXMuX2xhc3RQcm9ncmVzcyA6IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX3ZpZGVvU3RhbGxlZCB8fCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlU3RvcCA9IERhdGUubm93KCkgLSB0aGlzLl92aWRlb1N0YWxsZWQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkJ1ZmZlcmluZyxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlU3RvcH0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHJlY292ZXJlZCBmcm9tIHN0YWxsIGFmdGVyIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlU3RvcCkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhuZXdSZXNvbHV0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdSZXNvbHV0aW9ufSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA/IHtzdHJpbmc6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbn0gOiB1bmRlZmluZWQsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA9IG5ld1Jlc29sdXRpb247XG4gIH1cbn0iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHRpZihfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdKSB7XG5cdFx0cmV0dXJuIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0uZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiBtb2R1bGVbJ2RlZmF1bHQnXSA6XG5cdFx0KCkgPT4gbW9kdWxlO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiLy8gVGhpcyBmdW5jdGlvbiBhbGxvdyB0byByZWZlcmVuY2UgYXN5bmMgY2h1bmtzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoY2h1bmtJZCkgPT4ge1xuXHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcblx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuanNcIjtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsInZhciBzY3JpcHRVcmw7XG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMpIHNjcmlwdFVybCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbiArIFwiXCI7XG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdClcblx0XHRzY3JpcHRVcmwgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyY1xuXHRpZiAoIXNjcmlwdFVybCkge1xuXHRcdHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG5cdFx0aWYoc2NyaXB0cy5sZW5ndGgpIHNjcmlwdFVybCA9IHNjcmlwdHNbc2NyaXB0cy5sZW5ndGggLSAxXS5zcmNcblx0fVxufVxuLy8gV2hlbiBzdXBwb3J0aW5nIGJyb3dzZXJzIHdoZXJlIGFuIGF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgeW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQucHVibGljUGF0aCBtYW51YWxseSB2aWEgY29uZmlndXJhdGlvblxuLy8gb3IgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpIGFuZCBzZXQgdGhlIF9fd2VicGFja19wdWJsaWNfcGF0aF9fIHZhcmlhYmxlIGZyb20geW91ciBjb2RlIHRvIHVzZSB5b3VyIG93biBsb2dpYy5cbmlmICghc2NyaXB0VXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbnNjcmlwdFVybCA9IHNjcmlwdFVybC5yZXBsYWNlKC8jLiokLywgXCJcIikucmVwbGFjZSgvXFw/LiokLywgXCJcIikucmVwbGFjZSgvXFwvW15cXC9dKyQvLCBcIi9cIik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBzY3JpcHRVcmw7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5iID0gZG9jdW1lbnQuYmFzZVVSSSB8fCBzZWxmLmxvY2F0aW9uLmhyZWY7XG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4vLyB1bmRlZmluZWQgPSBjaHVuayBub3QgbG9hZGVkLCBudWxsID0gY2h1bmsgcHJlbG9hZGVkL3ByZWZldGNoZWRcbi8vIFByb21pc2UgPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHRcImNoYW5uZWxzXCI6IDBcbn07XG5cblxuLy8gbm8gY2h1bmsgb24gZGVtYW5kIGxvYWRpbmdcblxuLy8gbm8gcHJlZmV0Y2hpbmdcblxuLy8gbm8gcHJlbG9hZGVkXG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3RcblxuLy8gbm8gZGVmZXJyZWQgc3RhcnR1cFxuXG4vLyBubyBqc29ucCBmdW5jdGlvbiIsIi8vIG1vZHVsZSBleHBvcnRzIG11c3QgYmUgcmV0dXJuZWQgZnJvbSBydW50aW1lIHNvIGVudHJ5IGlubGluaW5nIGlzIGRpc2FibGVkXG4vLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbnJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvc2RrL2NoYW5uZWxzL2luZGV4LnRzXCIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==