botframework-directlinejs 0.15.9 → 0.15.10-master.a5ebd79

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.
@@ -116,7 +116,6 @@ var StreamHandler = /*#__PURE__*/function () {
116
116
  key: "flush",
117
117
  value: function flush() {
118
118
  var _this = this;
119
- this.connectionStatus$.subscribe(function () {});
120
119
  this.activityQueue.forEach(function (a) {
121
120
  return _this.subscriber.next(a);
122
121
  });
@@ -136,6 +135,7 @@ var DirectLineStreaming = exports.DirectLineStreaming = /*#__PURE__*/function ()
136
135
  (0, _classCallCheck2["default"])(this, DirectLineStreaming);
137
136
  (0, _defineProperty2["default"])(this, "connectionStatus$", new _BehaviorSubject.BehaviorSubject(_directLine.ConnectionStatus.Uninitialized));
138
137
  (0, _defineProperty2["default"])(this, "_botAgent", '');
138
+ (0, _defineProperty2["default"])(this, "_endAbortController", new AbortController());
139
139
  _classPrivateFieldInitSpec(this, _networkInformation, void 0);
140
140
  // Rectifies `options.networkInformation`.
141
141
  var networkInformation = options === null || options === void 0 ? void 0 : options.networkInformation;
@@ -196,6 +196,7 @@ var DirectLineStreaming = exports.DirectLineStreaming = /*#__PURE__*/function ()
196
196
  key: "end",
197
197
  value: function end() {
198
198
  // Once end() is called, no reconnection can be made.
199
+ this._endAbortController.abort();
199
200
  this.activitySubscriber.complete();
200
201
  this.connectionStatus$.next(_directLine.ConnectionStatus.Ended);
201
202
  this.connectionStatus$.complete();
@@ -242,71 +243,101 @@ var DirectLineStreaming = exports.DirectLineStreaming = /*#__PURE__*/function ()
242
243
  numberOfAttempts = 0;
243
244
  case 2:
244
245
  if (!(numberOfAttempts < MAX_RETRY_COUNT)) {
245
- _context3.next = 10;
246
+ _context3.next = 13;
246
247
  break;
247
248
  }
248
- numberOfAttempts++;
249
- _context3.next = 3;
250
- return new Promise(function (r) {
251
- return setTimeout(r, refreshTokenInterval);
252
- });
249
+ if (!this._endAbortController.signal.aborted) {
250
+ _context3.next = 3;
251
+ break;
252
+ }
253
+ return _context3.abrupt("return");
253
254
  case 3:
254
- _context3.prev = 3;
255
+ numberOfAttempts++;
255
256
  _context3.next = 4;
257
+ return this.sleep(refreshTokenInterval);
258
+ case 4:
259
+ if (!this._endAbortController.signal.aborted) {
260
+ _context3.next = 5;
261
+ break;
262
+ }
263
+ return _context3.abrupt("return");
264
+ case 5:
265
+ _context3.prev = 5;
266
+ _context3.next = 6;
256
267
  return (0, _crossFetch["default"])("".concat(this.domain, "/tokens/refresh"), {
257
268
  method: 'POST',
258
269
  headers: this.commonHeaders()
259
270
  });
260
- case 4:
271
+ case 6:
261
272
  res = _context3.sent;
262
273
  if (!res.ok) {
263
- _context3.next = 6;
274
+ _context3.next = 8;
264
275
  break;
265
276
  }
266
277
  numberOfAttempts = 0;
267
- _context3.next = 5;
278
+ _context3.next = 7;
268
279
  return res.json();
269
- case 5:
280
+ case 7:
270
281
  _yield$res$json = _context3.sent;
271
282
  token = _yield$res$json.token;
272
283
  this.token = token;
273
- _context3.next = 7;
284
+ _context3.next = 10;
274
285
  break;
275
- case 6:
276
- if (res.status === 403 || res.status === 403) {
277
- console.error("Fatal error while refreshing the token: ".concat(res.status, " ").concat(res.statusText));
278
- this.streamConnection.disconnect();
279
- } else {
280
- console.warn("Refresh attempt #".concat(numberOfAttempts, " failed: ").concat(res.status, " ").concat(res.statusText));
286
+ case 8:
287
+ if (!(res.status === 403 || res.status === 403)) {
288
+ _context3.next = 9;
289
+ break;
281
290
  }
282
- case 7:
283
- _context3.next = 9;
291
+ console.error("Fatal error while refreshing the token: ".concat(res.status, " ").concat(res.statusText));
292
+ this.streamConnection.disconnect();
293
+ return _context3.abrupt("return");
294
+ case 9:
295
+ console.warn("Refresh attempt #".concat(numberOfAttempts, " failed: ").concat(res.status, " ").concat(res.statusText));
296
+ case 10:
297
+ _context3.next = 12;
284
298
  break;
285
- case 8:
286
- _context3.prev = 8;
287
- _t = _context3["catch"](3);
299
+ case 11:
300
+ _context3.prev = 11;
301
+ _t = _context3["catch"](5);
288
302
  console.warn("Refresh attempt #".concat(numberOfAttempts, " threw an exception: ").concat(_t));
289
- case 9:
303
+ case 12:
290
304
  _context3.next = 2;
291
305
  break;
292
- case 10:
306
+ case 13:
293
307
  console.error('Retries exhausted');
294
308
  this.streamConnection.disconnect();
295
- case 11:
309
+ case 14:
296
310
  case "end":
297
311
  return _context3.stop();
298
312
  }
299
- }, _callee3, this, [[3, 8]]);
313
+ }, _callee3, this, [[5, 11]]);
300
314
  }));
301
315
  function refreshToken() {
302
316
  return _refreshToken.apply(this, arguments);
303
317
  }
304
318
  return refreshToken;
305
319
  }()
320
+ }, {
321
+ key: "sleep",
322
+ value: function sleep(ms) {
323
+ var _this3 = this;
324
+ if (this._endAbortController.signal.aborted) {
325
+ return Promise.resolve();
326
+ }
327
+ return new Promise(function (resolve) {
328
+ var timer = setTimeout(resolve, ms);
329
+ _this3._endAbortController.signal.addEventListener('abort', function () {
330
+ clearTimeout(timer);
331
+ resolve();
332
+ }, {
333
+ once: true
334
+ });
335
+ });
336
+ }
306
337
  }, {
307
338
  key: "postActivity",
308
339
  value: function postActivity(activity) {
309
- var _this3 = this;
340
+ var _this4 = this;
310
341
  if (this.connectionStatus$.value === _directLine.ConnectionStatus.Ended || this.connectionStatus$.value === _directLine.ConnectionStatus.FailedToConnect) {
311
342
  return _Observable.Observable["throw"](new Error('Connection is closed'));
312
343
  }
@@ -319,11 +350,11 @@ var DirectLineStreaming = exports.DirectLineStreaming = /*#__PURE__*/function ()
319
350
  return _regenerator["default"].wrap(function (_context4) {
320
351
  while (1) switch (_context4.prev = _context4.next) {
321
352
  case 0:
322
- request = BFSE.StreamingRequest.create('POST', '/v3/directline/conversations/' + _this3.conversationId + '/activities');
353
+ request = BFSE.StreamingRequest.create('POST', '/v3/directline/conversations/' + _this4.conversationId + '/activities');
323
354
  request.setBody(JSON.stringify(activity));
324
355
  _context4.prev = 1;
325
356
  _context4.next = 2;
326
- return _this3.streamConnection.send(request);
357
+ return _this4.streamConnection.send(request);
327
358
  case 2:
328
359
  resp = _context4.sent;
329
360
  if (!(resp.statusCode !== 200)) {
@@ -353,7 +384,7 @@ var DirectLineStreaming = exports.DirectLineStreaming = /*#__PURE__*/function ()
353
384
  // the disconnectionHandler. Everything else can
354
385
  // be retried
355
386
  console.warn(_t2);
356
- _this3.streamConnection.disconnect();
387
+ _this4.streamConnection.disconnect();
357
388
  return _context4.abrupt("return", subscriber.error(_t2));
358
389
  case 7:
359
390
  case "end":
@@ -370,7 +401,7 @@ var DirectLineStreaming = exports.DirectLineStreaming = /*#__PURE__*/function ()
370
401
  }, {
371
402
  key: "postMessageWithAttachments",
372
403
  value: function postMessageWithAttachments(message) {
373
- var _this4 = this;
404
+ var _this5 = this;
374
405
  var attachments = message.attachments,
375
406
  messageWithoutAttachments = (0, _objectWithoutProperties2["default"])(message, _excluded);
376
407
  return _Observable.Observable.create(function (subscriber) {
@@ -432,7 +463,7 @@ var DirectLineStreaming = exports.DirectLineStreaming = /*#__PURE__*/function ()
432
463
  }, stream);
433
464
  httpContentList.push(httpContent);
434
465
  });
435
- url = "/v3/directline/conversations/".concat(_this4.conversationId, "/users/").concat(messageWithoutAttachments.from.id, "/upload");
466
+ url = "/v3/directline/conversations/".concat(_this5.conversationId, "/users/").concat(messageWithoutAttachments.from.id, "/upload");
436
467
  request = BFSE.StreamingRequest.create('PUT', url);
437
468
  activityStream = new BFSE.SubscribableStream();
438
469
  activityStream.write(JSON.stringify(messageWithoutAttachments), 'utf-8');
@@ -444,7 +475,7 @@ var DirectLineStreaming = exports.DirectLineStreaming = /*#__PURE__*/function ()
444
475
  return request.addStream(e);
445
476
  });
446
477
  _context6.next = 2;
447
- return _this4.streamConnection.send(request);
478
+ return _this5.streamConnection.send(request);
448
479
  case 2:
449
480
  resp = _context6.sent;
450
481
  if (!(resp.streams && resp.streams.length !== 1)) {
@@ -481,18 +512,29 @@ var DirectLineStreaming = exports.DirectLineStreaming = /*#__PURE__*/function ()
481
512
  key: "waitUntilOnline",
482
513
  value: function () {
483
514
  var _waitUntilOnline = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee7() {
484
- var _this5 = this;
515
+ var _this6 = this;
485
516
  return _regenerator["default"].wrap(function (_context7) {
486
517
  while (1) switch (_context7.prev = _context7.next) {
487
518
  case 0:
488
519
  return _context7.abrupt("return", new Promise(function (resolve, reject) {
489
- _this5.connectionStatus$.subscribe(function (cs) {
520
+ var done = false;
521
+ var subscription;
522
+ subscription = _this6.connectionStatus$.subscribe(function (cs) {
490
523
  if (cs === _directLine.ConnectionStatus.Online) {
524
+ var _subscription;
525
+ done = true;
526
+ (_subscription = subscription) === null || _subscription === void 0 || _subscription.unsubscribe();
491
527
  return resolve();
492
528
  }
493
529
  }, function (e) {
494
- return reject(e);
530
+ var _subscription2;
531
+ done = true;
532
+ (_subscription2 = subscription) === null || _subscription2 === void 0 || _subscription2.unsubscribe();
533
+ reject(e);
495
534
  });
535
+ if (done) {
536
+ subscription.unsubscribe();
537
+ }
496
538
  }));
497
539
  case 1:
498
540
  case "end":
@@ -509,18 +551,24 @@ var DirectLineStreaming = exports.DirectLineStreaming = /*#__PURE__*/function ()
509
551
  key: "connectAsync",
510
552
  value: function () {
511
553
  var _connectAsync = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee9() {
512
- var _this6 = this;
554
+ var _this7 = this;
513
555
  var re, params, abortController, urlSearchParams, wsUrl;
514
556
  return _regenerator["default"].wrap(function (_context9) {
515
557
  while (1) switch (_context9.prev = _context9.next) {
516
558
  case 0:
559
+ if (!this._endAbortController.signal.aborted) {
560
+ _context9.next = 1;
561
+ break;
562
+ }
563
+ throw new Error('Connection has ended.');
564
+ case 1:
517
565
  re = new RegExp('^http(s?)');
518
566
  if (re.test(this.domain)) {
519
- _context9.next = 1;
567
+ _context9.next = 2;
520
568
  break;
521
569
  }
522
570
  throw 'Domain must begin with http or https';
523
- case 1:
571
+ case 2:
524
572
  params = {
525
573
  token: this.token
526
574
  };
@@ -537,9 +585,15 @@ var DirectLineStreaming = exports.DirectLineStreaming = /*#__PURE__*/function ()
537
585
  while (1) switch (_context8.prev = _context8.next) {
538
586
  case 0:
539
587
  _context8.prev = 0;
540
- _this6.streamConnection = new _WebSocketClientWithNetworkInformation["default"]({
588
+ if (!_this7._endAbortController.signal.aborted) {
589
+ _context8.next = 1;
590
+ break;
591
+ }
592
+ return _context8.abrupt("return", reject(new Error('Connection has ended.')));
593
+ case 1:
594
+ _this7.streamConnection = new _WebSocketClientWithNetworkInformation["default"]({
541
595
  disconnectionHandler: resolve,
542
- networkInformation: _classPrivateFieldGet(_networkInformation, _this6),
596
+ networkInformation: _classPrivateFieldGet(_networkInformation, _this7),
543
597
  requestHandler: {
544
598
  processRequest: function processRequest(streamingRequest) {
545
599
  // If `streamConnection` is still current, allow call to `processRequest()`, otherwise, ignore calls to `processRequest()`.
@@ -547,59 +601,59 @@ var DirectLineStreaming = exports.DirectLineStreaming = /*#__PURE__*/function ()
547
601
  if (abortController.signal.aborted) {
548
602
  throw new Error('Cannot process streaming request, `streamingConnection` should be disconnected.');
549
603
  }
550
- return _this6.theStreamHandler.processRequest(streamingRequest);
604
+ return _this7.theStreamHandler.processRequest(streamingRequest);
551
605
  }
552
606
  },
553
607
  url: wsUrl
554
608
  });
555
- _this6.queueActivities = true;
556
- _context8.next = 1;
557
- return _this6.streamConnection.connect();
558
- case 1:
559
- request = BFSE.StreamingRequest.create('POST', '/v3/directline/conversations');
609
+ _this7.queueActivities = true;
560
610
  _context8.next = 2;
561
- return _this6.streamConnection.send(request);
611
+ return _this7.streamConnection.connect();
562
612
  case 2:
613
+ request = BFSE.StreamingRequest.create('POST', '/v3/directline/conversations');
614
+ _context8.next = 3;
615
+ return _this7.streamConnection.send(request);
616
+ case 3:
563
617
  response = _context8.sent;
564
618
  if (!(response.statusCode !== 200)) {
565
- _context8.next = 3;
619
+ _context8.next = 4;
566
620
  break;
567
621
  }
568
622
  throw new Error('Connection response code ' + response.statusCode);
569
- case 3:
623
+ case 4:
570
624
  if (!(response.streams.length !== 1)) {
571
- _context8.next = 4;
625
+ _context8.next = 5;
572
626
  break;
573
627
  }
574
628
  throw new Error('Expected 1 stream but got ' + response.streams.length);
575
- case 4:
576
- _context8.next = 5;
577
- return response.streams[0].readAsString();
578
629
  case 5:
630
+ _context8.next = 6;
631
+ return response.streams[0].readAsString();
632
+ case 6:
579
633
  responseString = _context8.sent;
580
634
  conversation = JSON.parse(responseString);
581
- _this6.conversationId = conversation.conversationId;
582
- _this6.connectionStatus$.next(_directLine.ConnectionStatus.Online);
635
+ _this7.conversationId = conversation.conversationId;
636
+ _this7.connectionStatus$.next(_directLine.ConnectionStatus.Online);
583
637
 
584
638
  // Wait until DL consumers have had a chance to be notified
585
639
  // of the connection status change.
586
640
  // This is specific to RxJS implementation of observable, which calling subscribe() after next() will still get the value.
587
- _context8.next = 6;
588
- return _this6.waitUntilOnline();
589
- case 6:
590
- _this6.theStreamHandler.flush();
591
- _this6.queueActivities = false;
592
- _context8.next = 8;
593
- break;
641
+ _context8.next = 7;
642
+ return _this7.waitUntilOnline();
594
643
  case 7:
595
- _context8.prev = 7;
644
+ _this7.theStreamHandler.flush();
645
+ _this7.queueActivities = false;
646
+ _context8.next = 9;
647
+ break;
648
+ case 8:
649
+ _context8.prev = 8;
596
650
  _t6 = _context8["catch"](0);
597
651
  reject(_t6);
598
- case 8:
652
+ case 9:
599
653
  case "end":
600
654
  return _context8.stop();
601
655
  }
602
- }, _callee8, null, [[0, 7]]);
656
+ }, _callee8, null, [[0, 8]]);
603
657
  }));
604
658
  return function (_x6, _x7) {
605
659
  return _ref7.apply(this, arguments);
@@ -607,7 +661,7 @@ var DirectLineStreaming = exports.DirectLineStreaming = /*#__PURE__*/function ()
607
661
  }())["finally"](function () {
608
662
  return abortController.abort();
609
663
  }));
610
- case 2:
664
+ case 3:
611
665
  case "end":
612
666
  return _context9.stop();
613
667
  }
@@ -622,7 +676,6 @@ var DirectLineStreaming = exports.DirectLineStreaming = /*#__PURE__*/function ()
622
676
  key: "connectWithRetryAsync",
623
677
  value: function () {
624
678
  var _connectWithRetryAsync = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee0() {
625
- var _this7 = this;
626
679
  var numRetries, start, _t7;
627
680
  return _regenerator["default"].wrap(function (_context0) {
628
681
  while (1) switch (_context0.prev = _context0.next) {
@@ -634,28 +687,40 @@ var DirectLineStreaming = exports.DirectLineStreaming = /*#__PURE__*/function ()
634
687
  this.connectionStatus$.next(_directLine.ConnectionStatus.Connecting);
635
688
  case 2:
636
689
  if (!(numRetries > 0)) {
637
- _context0.next = 10;
690
+ _context0.next = 13;
638
691
  break;
639
692
  }
640
693
  numRetries--;
694
+ if (!this._endAbortController.signal.aborted) {
695
+ _context0.next = 3;
696
+ break;
697
+ }
698
+ return _context0.abrupt("return");
699
+ case 3:
641
700
  start = Date.now();
642
- _context0.prev = 3;
643
- _context0.next = 4;
701
+ _context0.prev = 4;
702
+ _context0.next = 5;
644
703
  return this.connectAsync();
645
- case 4:
646
- _context0.next = 6;
647
- break;
648
704
  case 5:
649
- _context0.prev = 5;
650
- _t7 = _context0["catch"](3);
651
- console.error(_t7);
705
+ _context0.next = 8;
706
+ break;
652
707
  case 6:
653
- if (!(this.connectionStatus$.getValue() === _directLine.ConnectionStatus.Ended)) {
708
+ _context0.prev = 6;
709
+ _t7 = _context0["catch"](4);
710
+ if (!this._endAbortController.signal.aborted) {
654
711
  _context0.next = 7;
655
712
  break;
656
713
  }
657
714
  return _context0.abrupt("return");
658
715
  case 7:
716
+ console.error(_t7);
717
+ case 8:
718
+ if (!(this.connectionStatus$.getValue() === _directLine.ConnectionStatus.Ended)) {
719
+ _context0.next = 9;
720
+ break;
721
+ }
722
+ return _context0.abrupt("return");
723
+ case 9:
659
724
  // Make sure we don't signal ConnectionStatus.Connecting twice or more without an actual connection.
660
725
  // Subsequent retries should be transparent.
661
726
  if (this.connectionStatus$.getValue() !== _directLine.ConnectionStatus.Connecting) {
@@ -666,36 +731,40 @@ var DirectLineStreaming = exports.DirectLineStreaming = /*#__PURE__*/function ()
666
731
  // - we should reset the retry counter, and;
667
732
  // - we should reconnect immediately.
668
733
  if (!(60000 < Date.now() - start)) {
669
- _context0.next = 8;
734
+ _context0.next = 10;
670
735
  break;
671
736
  }
672
737
  numRetries = MAX_RETRY_COUNT;
673
- _context0.next = 9;
738
+ _context0.next = 12;
674
739
  break;
675
- case 8:
740
+ case 10:
676
741
  if (!(numRetries > 0)) {
677
- _context0.next = 9;
742
+ _context0.next = 12;
678
743
  break;
679
744
  }
680
- _context0.next = 9;
681
- return new Promise(function (r) {
682
- return setTimeout(r, _this7.getRetryDelay());
683
- });
684
- case 9:
745
+ _context0.next = 11;
746
+ return this.sleep(this.getRetryDelay());
747
+ case 11:
748
+ if (!this._endAbortController.signal.aborted) {
749
+ _context0.next = 12;
750
+ break;
751
+ }
752
+ return _context0.abrupt("return");
753
+ case 12:
685
754
  _context0.next = 2;
686
755
  break;
687
- case 10:
756
+ case 13:
688
757
  // TODO: [TEST] Make sure FailedToConnect is reported immediately after last disconnection, should be no getRetryDelay().
689
758
  // Failed to reconnect after multiple retries.
690
759
  this.connectionStatus$.next(_directLine.ConnectionStatus.FailedToConnect);
691
- case 11:
760
+ case 14:
692
761
  _context0.next = 0;
693
762
  break;
694
- case 12:
763
+ case 15:
695
764
  case "end":
696
765
  return _context0.stop();
697
766
  }
698
- }, _callee0, this, [[3, 5]]);
767
+ }, _callee0, this, [[4, 6]]);
699
768
  }));
700
769
  function connectWithRetryAsync() {
701
770
  return _connectWithRetryAsync.apply(this, arguments);
@@ -709,4 +778,4 @@ var DirectLineStreaming = exports.DirectLineStreaming = /*#__PURE__*/function ()
709
778
  }
710
779
  }]);
711
780
  }();
712
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQmVoYXZpb3JTdWJqZWN0IiwicmVxdWlyZSIsIl9idWZmZXIiLCJfT2JzZXJ2YWJsZSIsIkJGU0UiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9jcmVhdGVEZWZlcnJlZCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY3Jvc3NGZXRjaCIsIl9kaXJlY3RMaW5lIiwiX1dlYlNvY2tldENsaWVudFdpdGhOZXR3b3JrSW5mb3JtYXRpb24iLCJfZXhjbHVkZWQiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3Q4IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyIsImEiLCJfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbiIsIlR5cGVFcnJvciIsIl9jbGFzc1ByaXZhdGVGaWVsZEdldCIsInMiLCJfYXNzZXJ0Q2xhc3NCcmFuZCIsIl9jbGFzc1ByaXZhdGVGaWVsZFNldCIsImFyZ3VtZW50cyIsImxlbmd0aCIsIkRJUkVDVF9MSU5FX1ZFUlNJT04iLCJNQVhfUkVUUllfQ09VTlQiLCJyZWZyZXNoVG9rZW5MaWZldGltZSIsInJlZnJlc2hUb2tlbkludGVydmFsIiwiU3RyZWFtSGFuZGxlciIsImMkIiwic3EiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2RlZmluZVByb3BlcnR5MiIsInN1YnNjcmliZXIiLCJjb25uZWN0aW9uU3RhdHVzJCIsInNob3VsZFF1ZXVlIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwic2V0U3Vic2NyaWJlciIsIl9wcm9jZXNzUmVxdWVzdCIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwicmVxdWVzdCIsImxvZ2dlciIsInN0cmVhbXMiLCJzdHJlYW0wIiwiYWN0aXZpdHlTZXRKc29uIiwiYWN0aXZpdHlTZXQiLCJhY3Rpdml0eSIsImF0dGFjaG1lbnRzIiwic3RyZWFtIiwiYXR0YWNobWVudCIsImRhdGFVcmkiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJzaGlmdCIsInJlYWRBc1N0cmluZyIsInNlbnQiLCJKU09OIiwicGFyc2UiLCJhY3Rpdml0aWVzIiwiZXJyb3IiLCJFcnJvciIsImFicnVwdCIsIlN0cmVhbWluZ1Jlc3BvbnNlIiwiY3JlYXRlIiwicHVzaCIsImNvbnRlbnRUeXBlIiwiY29udGVudFVybCIsImFjdGl2aXR5UXVldWUiLCJzdG9wIiwicHJvY2Vzc1JlcXVlc3QiLCJfeCIsIl94MiIsImFwcGx5IiwiZmx1c2giLCJfdGhpcyIsInN1YnNjcmliZSIsImZvckVhY2giLCJlbmQiLCJjb21wbGV0ZSIsIl9uZXR3b3JrSW5mb3JtYXRpb24iLCJEaXJlY3RMaW5lU3RyZWFtaW5nIiwiZXhwb3J0cyIsIm9wdGlvbnMiLCJfdGhpczIiLCJCZWhhdmlvclN1YmplY3QiLCJDb25uZWN0aW9uU3RhdHVzIiwiVW5pbml0aWFsaXplZCIsIm5ldHdvcmtJbmZvcm1hdGlvbiIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidHlwZSIsImNvbnNvbGUiLCJ3YXJuIiwidG9rZW4iLCJyZWZyZXNoVG9rZW4iLCJFeHBpcmVkVG9rZW4iLCJkb21haW4iLCJjb252ZXJzYXRpb25JZCIsIl9ib3RBZ2VudCIsImdldEJvdEFnZW50IiwiYm90QWdlbnQiLCJxdWV1ZUFjdGl2aXRpZXMiLCJhY3Rpdml0eSQiLCJPYnNlcnZhYmxlIiwiX3JlZiIsIl9jYWxsZWUyIiwiX2NvbnRleHQyIiwiYWN0aXZpdHlTdWJzY3JpYmVyIiwidGhlU3RyZWFtSGFuZGxlciIsImNvbm5lY3REZWZlcnJlZCIsInJlc29sdmUiLCJfeDMiLCJzaGFyZSIsImNvbm5lY3RXaXRoUmV0cnlBc3luYyIsInJlY29ubmVjdCIsIl9yZWYyIiwiZ2V0VmFsdWUiLCJFbmRlZCIsInN0cmVhbUNvbm5lY3Rpb24iLCJkaXNjb25uZWN0IiwiY29tbW9uSGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJjb25jYXQiLCJjdXN0b21BZ2VudCIsInVuZGVmaW5lZCIsImNsaWVudEFnZW50IiwiX3JlZnJlc2hUb2tlbiIsIl9jYWxsZWUzIiwiZmlyc3RDYWxsIiwicmV0cnlDb3VudCIsIm51bWJlck9mQXR0ZW1wdHMiLCJyZXMiLCJfeWllbGQkcmVzJGpzb24iLCJfYXJnczMiLCJfdCIsIl9jb250ZXh0MyIsIndhaXRVbnRpbE9ubGluZSIsIlByb21pc2UiLCJzZXRUaW1lb3V0IiwiZmV0Y2giLCJtZXRob2QiLCJoZWFkZXJzIiwib2siLCJqc29uIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInBvc3RBY3Rpdml0eSIsIl90aGlzMyIsIkZhaWxlZFRvQ29ubmVjdCIsInBvc3RNZXNzYWdlV2l0aEF0dGFjaG1lbnRzIiwicmVzcCQiLCJfcmVmMyIsIl9jYWxsZWU0IiwicmVzcCIsIm51bWJlck9mU3RyZWFtcyIsImlkU3RyaW5nIiwiX0pTT04kcGFyc2UiLCJpZCIsIl90MiIsIl9jb250ZXh0NCIsIlN0cmVhbWluZ1JlcXVlc3QiLCJzZXRCb2R5Iiwic3RyaW5naWZ5Iiwic2VuZCIsInN0YXR1c0NvZGUiLCJJZCIsIl94NCIsIm1lc3NhZ2UiLCJfdGhpczQiLCJtZXNzYWdlV2l0aG91dEF0dGFjaG1lbnRzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsImh0dHBDb250ZW50TGlzdCIsIl9jYWxsZWU2IiwiYXJyYXlCdWZmZXJzIiwidXJsIiwiYWN0aXZpdHlTdHJlYW0iLCJfeWllbGQkcmVzcCRzdHJlYW1zJCIsIl90NSIsIl9jb250ZXh0NiIsImFsbCIsIm1hcCIsIl9yZWY1IiwiX2NhbGxlZTUiLCJtZWRpYSIsIl90MyIsIl90NCIsIl9jb250ZXh0NSIsImFycmF5QnVmZmVyIiwiX3g1IiwiX3JlZjYiLCJidWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiU3Vic2NyaWJhYmxlU3RyZWFtIiwid3JpdGUiLCJodHRwQ29udGVudCIsIkh0dHBDb250ZW50IiwiY29udGVudExlbmd0aCIsImFkZFN0cmVhbSIsInJlYWRBc0pzb24iLCJfd2FpdFVudGlsT25saW5lIiwiX2NhbGxlZTciLCJfdGhpczUiLCJfY29udGV4dDciLCJyZWplY3QiLCJjcyIsIk9ubGluZSIsIl9jb25uZWN0QXN5bmMiLCJfY2FsbGVlOSIsIl90aGlzNiIsInJlIiwicGFyYW1zIiwiYWJvcnRDb250cm9sbGVyIiwidXJsU2VhcmNoUGFyYW1zIiwid3NVcmwiLCJfY29udGV4dDkiLCJSZWdFeHAiLCJ0ZXN0IiwiQWJvcnRDb250cm9sbGVyIiwiVVJMU2VhcmNoUGFyYW1zIiwidG9TdHJpbmciLCJyZXBsYWNlIiwiX3JlZjciLCJfY2FsbGVlOCIsInJlc3BvbnNlIiwicmVzcG9uc2VTdHJpbmciLCJjb252ZXJzYXRpb24iLCJfdDYiLCJfY29udGV4dDgiLCJXZWJTb2NrZXRDbGllbnRXaXRoTmV0d29ya0luZm9ybWF0aW9uIiwiZGlzY29ubmVjdGlvbkhhbmRsZXIiLCJyZXF1ZXN0SGFuZGxlciIsInN0cmVhbWluZ1JlcXVlc3QiLCJzaWduYWwiLCJhYm9ydGVkIiwiY29ubmVjdCIsIl94NiIsIl94NyIsImFib3J0IiwiY29ubmVjdEFzeW5jIiwiX2Nvbm5lY3RXaXRoUmV0cnlBc3luYyIsIl9jYWxsZWUwIiwiX3RoaXM3IiwibnVtUmV0cmllcyIsInN0YXJ0IiwiX3Q3IiwiX2NvbnRleHQwIiwiY3JlYXRlRGVmZXJyZWQiLCJwcm9taXNlIiwiQ29ubmVjdGluZyIsIkRhdGUiLCJub3ciLCJnZXRSZXRyeURlbGF5IiwiTWF0aCIsImZsb29yIiwicmFuZG9tIl0sInNvdXJjZXMiOlsiLi4vc3JjL2RpcmVjdExpbmVTdHJlYW1pbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW4gb3JkZXIgdG8ga2VlcCBmaWxlIHNpemUgZG93biwgb25seSBpbXBvcnQgdGhlIHBhcnRzIG9mIHJ4anMgdGhhdCB3ZSB1c2VcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcy9CZWhhdmlvclN1YmplY3QnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzL09ic2VydmFibGUnO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJ3J4anMvU3Vic2NyaWJlcic7XG5pbXBvcnQgKiBhcyBCRlNFIGZyb20gJ2JvdGZyYW1ld29yay1zdHJlYW1pbmcnO1xuaW1wb3J0IGNyZWF0ZURlZmVycmVkIGZyb20gJy4vY3JlYXRlRGVmZXJyZWQnO1xuaW1wb3J0IGZldGNoIGZyb20gJ2Nyb3NzLWZldGNoJztcblxuaW1wb3J0IHsgQWN0aXZpdHksIENvbm5lY3Rpb25TdGF0dXMsIENvbnZlcnNhdGlvbiwgRGlyZWN0TGluZSwgSUJvdENvbm5lY3Rpb24sIE1lZGlhLCBNZXNzYWdlIH0gZnJvbSAnLi9kaXJlY3RMaW5lJztcbmltcG9ydCBXZWJTb2NrZXRDbGllbnRXaXRoTmV0d29ya0luZm9ybWF0aW9uIGZyb20gJy4vc3RyZWFtaW5nL1dlYlNvY2tldENsaWVudFdpdGhOZXR3b3JrSW5mb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBEZWZlcnJlZCB9IGZyb20gJy4vY3JlYXRlRGVmZXJyZWQnO1xuXG5jb25zdCBESVJFQ1RfTElORV9WRVJTSU9OID0gJ0RpcmVjdExpbmUvMy4wJztcbmNvbnN0IE1BWF9SRVRSWV9DT1VOVCA9IDM7XG5jb25zdCByZWZyZXNoVG9rZW5MaWZldGltZSA9IDMwICogNjAgKiAxMDAwO1xuLy9jb25zdCByZWZyZXNoVG9rZW5MaWZldGltZSA9IDUwMDA7XG4vLyBjb25zdCB0aW1lb3V0ID0gMjAgKiAxMDAwO1xuY29uc3QgcmVmcmVzaFRva2VuSW50ZXJ2YWwgPSByZWZyZXNoVG9rZW5MaWZldGltZSAvIDI7XG5cbmludGVyZmFjZSBEaXJlY3RMaW5lU3RyZWFtaW5nT3B0aW9ucyB7XG4gIHRva2VuOiBzdHJpbmc7XG4gIGNvbnZlcnNhdGlvbklkPzogc3RyaW5nO1xuICBkb21haW46IHN0cmluZztcbiAgLy8gQXR0YWNoZWQgdG8gYWxsIHJlcXVlc3RzIHRvIGlkZW50aWZ5IHJlcXVlc3RpbmcgYWdlbnQuXG4gIGJvdEFnZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBbYE5ldHdvcmtJbmZvcm1hdGlvbmAgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTmV0d29ya19JbmZvcm1hdGlvbl9BUEkpLlxuICAgKiBXaGVuIHRoZSBgTmV0d29ya0luZm9ybWF0aW9uYCBkZXRlY3QgbmV0d29yayBjaGFuZ2VzIG9yIG9mZmxpbmUsIGl0IHdpbGwgZGlzY29ubmVjdCB0aGUgV2ViIFNvY2tldCBhbmQgcmVjb25uZWN0IGl0LlxuICAgKi9cbiAgbmV0d29ya0luZm9ybWF0aW9uPzogTmV0d29ya0luZm9ybWF0aW9uO1xufVxuXG5jbGFzcyBTdHJlYW1IYW5kbGVyIGltcGxlbWVudHMgQkZTRS5SZXF1ZXN0SGFuZGxlciB7XG4gIHByaXZhdGUgY29ubmVjdGlvblN0YXR1cyQ7XG4gIHByaXZhdGUgc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxBY3Rpdml0eT47XG4gIHByaXZhdGUgc2hvdWxkUXVldWU6ICgpID0+IGJvb2xlYW47XG4gIHByaXZhdGUgYWN0aXZpdHlRdWV1ZTogQXJyYXk8QWN0aXZpdHk+ID0gW107XG5cbiAgY29uc3RydWN0b3IoczogU3Vic2NyaWJlcjxBY3Rpdml0eT4sIGMkOiBPYnNlcnZhYmxlPENvbm5lY3Rpb25TdGF0dXM+LCBzcTogKCkgPT4gYm9vbGVhbikge1xuICAgIHRoaXMuc3Vic2NyaWJlciA9IHM7XG4gICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJCA9IGMkO1xuICAgIHRoaXMuc2hvdWxkUXVldWUgPSBzcTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdWJzY3JpYmVyKHM6IFN1YnNjcmliZXI8QWN0aXZpdHk+KSB7XG4gICAgdGhpcy5zdWJzY3JpYmVyID0gcztcbiAgfVxuXG4gIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IEJGU0UuSVJlY2VpdmVSZXF1ZXN0LCBsb2dnZXI/OiBhbnkpOiBQcm9taXNlPEJGU0UuU3RyZWFtaW5nUmVzcG9uc2U+IHtcbiAgICBjb25zdCBzdHJlYW1zID0gWy4uLnJlcXVlc3Quc3RyZWFtc107XG4gICAgY29uc3Qgc3RyZWFtMCA9IHN0cmVhbXMuc2hpZnQoKTtcbiAgICBjb25zdCBhY3Rpdml0eVNldEpzb24gPSBhd2FpdCBzdHJlYW0wLnJlYWRBc1N0cmluZygpO1xuICAgIGNvbnN0IGFjdGl2aXR5U2V0ID0gSlNPTi5wYXJzZShhY3Rpdml0eVNldEpzb24pO1xuXG4gICAgaWYgKGFjdGl2aXR5U2V0LmFjdGl2aXRpZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAvLyBPbmx5IG9uZSBhY3Rpdml0eSBpcyBleHBlY3RlZCBpbiBhIHNldCBpbiBzdHJlYW1pbmdcbiAgICAgIHRoaXMuc3Vic2NyaWJlci5lcnJvcihuZXcgRXJyb3IoJ3RoZXJlIHNob3VsZCBiZSBleGFjdGx5IG9uZSBhY3Rpdml0eScpKTtcbiAgICAgIHJldHVybiBCRlNFLlN0cmVhbWluZ1Jlc3BvbnNlLmNyZWF0ZSg1MDApO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2aXR5ID0gYWN0aXZpdHlTZXQuYWN0aXZpdGllc1swXTtcblxuICAgIGlmIChzdHJlYW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gWy4uLmFjdGl2aXR5LmF0dGFjaG1lbnRzXTtcblxuICAgICAgbGV0IHN0cmVhbTogQkZTRS5Db250ZW50U3RyZWFtO1xuICAgICAgd2hpbGUgKChzdHJlYW0gPSBzdHJlYW1zLnNoaWZ0KCkpKSB7XG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBhd2FpdCBzdHJlYW0ucmVhZEFzU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGRhdGFVcmkgPSAnZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwnICsgYXR0YWNobWVudDtcbiAgICAgICAgYXR0YWNobWVudHMucHVzaCh7IGNvbnRlbnRUeXBlOiBzdHJlYW0uY29udGVudFR5cGUsIGNvbnRlbnRVcmw6IGRhdGFVcmkgfSk7XG4gICAgICB9XG5cbiAgICAgIGFjdGl2aXR5LmF0dGFjaG1lbnRzID0gYXR0YWNobWVudHM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hvdWxkUXVldWUoKSkge1xuICAgICAgdGhpcy5hY3Rpdml0eVF1ZXVlLnB1c2goYWN0aXZpdHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1YnNjcmliZXIubmV4dChhY3Rpdml0eSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEJGU0UuU3RyZWFtaW5nUmVzcG9uc2UuY3JlYXRlKDIwMCk7XG4gIH1cblxuICBwdWJsaWMgZmx1c2goKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5zdWJzY3JpYmUoKCkgPT4ge30pO1xuICAgIHRoaXMuYWN0aXZpdHlRdWV1ZS5mb3JFYWNoKGEgPT4gdGhpcy5zdWJzY3JpYmVyLm5leHQoYSkpO1xuICAgIHRoaXMuYWN0aXZpdHlRdWV1ZSA9IFtdO1xuICB9XG5cbiAgcHVibGljIGVuZCgpIHtcbiAgICB0aGlzLnN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGlyZWN0TGluZVN0cmVhbWluZyBpbXBsZW1lbnRzIElCb3RDb25uZWN0aW9uIHtcbiAgcHVibGljIGNvbm5lY3Rpb25TdGF0dXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChDb25uZWN0aW9uU3RhdHVzLlVuaW5pdGlhbGl6ZWQpO1xuICBwdWJsaWMgYWN0aXZpdHkkOiBPYnNlcnZhYmxlPEFjdGl2aXR5PjtcblxuICBwcml2YXRlIGFjdGl2aXR5U3Vic2NyaWJlcjogU3Vic2NyaWJlcjxBY3Rpdml0eT47XG4gIHByaXZhdGUgY29ubmVjdERlZmVycmVkOiBEZWZlcnJlZDx2b2lkPjtcbiAgcHJpdmF0ZSB0aGVTdHJlYW1IYW5kbGVyOiBTdHJlYW1IYW5kbGVyO1xuXG4gIHByaXZhdGUgZG9tYWluOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHRva2VuOiBzdHJpbmc7XG4gIHByaXZhdGUgc3RyZWFtQ29ubmVjdGlvbjogQkZTRS5XZWJTb2NrZXRDbGllbnQ7XG4gIHByaXZhdGUgcXVldWVBY3Rpdml0aWVzOiBib29sZWFuO1xuXG4gIHByaXZhdGUgX2JvdEFnZW50ID0gJyc7XG5cbiAgI25ldHdvcmtJbmZvcm1hdGlvbjogTmV0d29ya0luZm9ybWF0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IERpcmVjdExpbmVTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgLy8gUmVjdGlmaWVzIGBvcHRpb25zLm5ldHdvcmtJbmZvcm1hdGlvbmAuXG4gICAgY29uc3QgbmV0d29ya0luZm9ybWF0aW9uID0gb3B0aW9ucz8ubmV0d29ya0luZm9ybWF0aW9uO1xuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG5ldHdvcmtJbmZvcm1hdGlvbiA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgICh0eXBlb2YgbmV0d29ya0luZm9ybWF0aW9uLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgdHlwZW9mIG5ldHdvcmtJbmZvcm1hdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIHR5cGVvZiBuZXR3b3JrSW5mb3JtYXRpb24udHlwZSA9PT0gJ3N0cmluZycpXG4gICAgKSB7XG4gICAgICB0aGlzLiNuZXR3b3JrSW5mb3JtYXRpb24gPSBuZXR3b3JrSW5mb3JtYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ2JvdGZyYW1ld29yay1kaXJlY3RsaW5lanM6IFwibmV0d29ya0luZm9ybWF0aW9uXCIgb3B0aW9uIHNwZWNpZmllZCBtdXN0IGJlIGEgYE5ldHdvcmtJbmZvcm1hdGlvbmAtbGlrZSBpbnN0YW5jZSBleHRlbmRpbmcgYEV2ZW50VGFyZ2V0YCBpbnRlcmZhY2Ugd2l0aCBhIGB0eXBlYCBwcm9wZXJ0eSByZXR1cm5pbmcgYSBzdHJpbmcuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnRva2VuID0gb3B0aW9ucy50b2tlbjtcblxuICAgIHRoaXMucmVmcmVzaFRva2VuKCkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuRXhwaXJlZFRva2VuKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZG9tYWluID0gb3B0aW9ucy5kb21haW47XG5cbiAgICBpZiAob3B0aW9ucy5jb252ZXJzYXRpb25JZCkge1xuICAgICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IG9wdGlvbnMuY29udmVyc2F0aW9uSWQ7XG4gICAgfVxuXG4gICAgdGhpcy5fYm90QWdlbnQgPSB0aGlzLmdldEJvdEFnZW50KG9wdGlvbnMuYm90QWdlbnQpO1xuXG4gICAgdGhpcy5xdWV1ZUFjdGl2aXRpZXMgPSB0cnVlO1xuICAgIHRoaXMuYWN0aXZpdHkkID0gT2JzZXJ2YWJsZS5jcmVhdGUoYXN5bmMgKHN1YnNjcmliZXI6IFN1YnNjcmliZXI8QWN0aXZpdHk+KSA9PiB7XG4gICAgICB0aGlzLmFjdGl2aXR5U3Vic2NyaWJlciA9IHN1YnNjcmliZXI7XG4gICAgICB0aGlzLnRoZVN0cmVhbUhhbmRsZXIgPSBuZXcgU3RyZWFtSGFuZGxlcihzdWJzY3JpYmVyLCB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLCAoKSA9PiB0aGlzLnF1ZXVlQWN0aXZpdGllcyk7XG5cbiAgICAgIC8vIFJlc29sdmluZyBjb25uZWN0RGVmZXJyZWQgd2lsbCBraWNrLW9mZiB0aGUgY29ubmVjdGlvbi5cbiAgICAgIHRoaXMuY29ubmVjdERlZmVycmVkLnJlc29sdmUoKTtcbiAgICB9KS5zaGFyZSgpO1xuXG4gICAgLy8gY29ubmVjdFdpdGhSZXRyeUFzeW5jKCkgd2lsbCBjcmVhdGUgdGhlIGNvbm5lY3REZWZlcnJlZCBvYmplY3QgcmVxdWlyZWQgaW4gYWN0aXZpdHkkLlxuICAgIHRoaXMuY29ubmVjdFdpdGhSZXRyeUFzeW5jKCk7XG4gIH1cblxuICBwdWJsaWMgcmVjb25uZWN0KHsgY29udmVyc2F0aW9uSWQsIHRva2VuIH06IENvbnZlcnNhdGlvbikge1xuICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLmdldFZhbHVlKCkgPT09IENvbm5lY3Rpb25TdGF0dXMuRW5kZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29ubmVjdGlvbiBoYXMgZW5kZWQuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IGNvbnZlcnNhdGlvbklkO1xuICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcblxuICAgIHRoaXMuY29ubmVjdERlZmVycmVkLnJlc29sdmUoKTtcbiAgfVxuXG4gIGVuZCgpIHtcbiAgICAvLyBPbmNlIGVuZCgpIGlzIGNhbGxlZCwgbm8gcmVjb25uZWN0aW9uIGNhbiBiZSBtYWRlLlxuICAgIHRoaXMuYWN0aXZpdHlTdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5FbmRlZCk7XG4gICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy5zdHJlYW1Db25uZWN0aW9uLmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tbW9uSGVhZGVycygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMudG9rZW59YCxcbiAgICAgICd4LW1zLWJvdC1hZ2VudCc6IHRoaXMuX2JvdEFnZW50XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Qm90QWdlbnQoY3VzdG9tQWdlbnQ6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgICBsZXQgY2xpZW50QWdlbnQgPSAnZGlyZWN0bGluZVN0cmVhbWluZyc7XG5cbiAgICBpZiAoY3VzdG9tQWdlbnQpIHtcbiAgICAgIGNsaWVudEFnZW50ICs9IGA7ICR7Y3VzdG9tQWdlbnR9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7RElSRUNUX0xJTkVfVkVSU0lPTn0gKCR7Y2xpZW50QWdlbnR9KWA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlZnJlc2hUb2tlbihmaXJzdENhbGwgPSB0cnVlLCByZXRyeUNvdW50ID0gMCkge1xuICAgIGF3YWl0IHRoaXMud2FpdFVudGlsT25saW5lKCk7XG5cbiAgICBsZXQgbnVtYmVyT2ZBdHRlbXB0cyA9IDA7XG4gICAgd2hpbGUgKG51bWJlck9mQXR0ZW1wdHMgPCBNQVhfUkVUUllfQ09VTlQpIHtcbiAgICAgIG51bWJlck9mQXR0ZW1wdHMrKztcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCByZWZyZXNoVG9rZW5JbnRlcnZhbCkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7dGhpcy5kb21haW59L3Rva2Vucy9yZWZyZXNoYCwgeyBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogdGhpcy5jb21tb25IZWFkZXJzKCkgfSk7XG4gICAgICAgIGlmIChyZXMub2spIHtcbiAgICAgICAgICBudW1iZXJPZkF0dGVtcHRzID0gMDtcbiAgICAgICAgICBjb25zdCB7IHRva2VuIH0gPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gNDAzIHx8IHJlcy5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmF0YWwgZXJyb3Igd2hpbGUgcmVmcmVzaGluZyB0aGUgdG9rZW46ICR7cmVzLnN0YXR1c30gJHtyZXMuc3RhdHVzVGV4dH1gKTtcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtQ29ubmVjdGlvbi5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgUmVmcmVzaCBhdHRlbXB0ICMke251bWJlck9mQXR0ZW1wdHN9IGZhaWxlZDogJHtyZXMuc3RhdHVzfSAke3Jlcy5zdGF0dXNUZXh0fWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFJlZnJlc2ggYXR0ZW1wdCAjJHtudW1iZXJPZkF0dGVtcHRzfSB0aHJldyBhbiBleGNlcHRpb246ICR7ZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKCdSZXRyaWVzIGV4aGF1c3RlZCcpO1xuICAgIHRoaXMuc3RyZWFtQ29ubmVjdGlvbi5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBwb3N0QWN0aXZpdHkoYWN0aXZpdHk6IEFjdGl2aXR5KSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC52YWx1ZSA9PT0gQ29ubmVjdGlvblN0YXR1cy5FbmRlZCB8fFxuICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC52YWx1ZSA9PT0gQ29ubmVjdGlvblN0YXR1cy5GYWlsZWRUb0Nvbm5lY3RcbiAgICApIHtcbiAgICAgIHJldHVybiBPYnNlcnZhYmxlLnRocm93KG5ldyBFcnJvcignQ29ubmVjdGlvbiBpcyBjbG9zZWQnKSk7XG4gICAgfVxuXG4gICAgaWYgKGFjdGl2aXR5LnR5cGUgPT09ICdtZXNzYWdlJyAmJiBhY3Rpdml0eS5hdHRhY2htZW50cyAmJiBhY3Rpdml0eS5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5wb3N0TWVzc2FnZVdpdGhBdHRhY2htZW50cyhhY3Rpdml0eSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcCQgPSBPYnNlcnZhYmxlLmNyZWF0ZShhc3luYyBzdWJzY3JpYmVyID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBCRlNFLlN0cmVhbWluZ1JlcXVlc3QuY3JlYXRlKFxuICAgICAgICAnUE9TVCcsXG4gICAgICAgICcvdjMvZGlyZWN0bGluZS9jb252ZXJzYXRpb25zLycgKyB0aGlzLmNvbnZlcnNhdGlvbklkICsgJy9hY3Rpdml0aWVzJ1xuICAgICAgKTtcbiAgICAgIHJlcXVlc3Quc2V0Qm9keShKU09OLnN0cmluZ2lmeShhY3Rpdml0eSkpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5zdHJlYW1Db25uZWN0aW9uLnNlbmQocmVxdWVzdCk7XG4gICAgICAgIGlmIChyZXNwLnN0YXR1c0NvZGUgIT09IDIwMCkgdGhyb3cgbmV3IEVycm9yKCdQb3N0QWN0aXZpdHkgcmV0dXJuZWQgJyArIHJlc3Auc3RhdHVzQ29kZSk7XG4gICAgICAgIGNvbnN0IG51bWJlck9mU3RyZWFtcyA9IHJlc3Auc3RyZWFtcy5sZW5ndGg7XG4gICAgICAgIGlmIChudW1iZXJPZlN0cmVhbXMgIT09IDEpIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgb25lIHN0cmVhbSBidXQgZ290ICcgKyBudW1iZXJPZlN0cmVhbXMpO1xuICAgICAgICBjb25zdCBpZFN0cmluZyA9IGF3YWl0IHJlc3Auc3RyZWFtc1swXS5yZWFkQXNTdHJpbmcoKTtcbiAgICAgICAgY29uc3QgeyBJZDogaWQgfSA9IEpTT04ucGFyc2UoaWRTdHJpbmcpO1xuICAgICAgICBzdWJzY3JpYmVyLm5leHQoaWQpO1xuICAgICAgICByZXR1cm4gc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIG5ldHdvcmsgaXNzdWUgdGhlbiBpdHMgaGFuZGxlZCBieVxuICAgICAgICAvLyB0aGUgZGlzY29ubmVjdGlvbkhhbmRsZXIuIEV2ZXJ5dGhpbmcgZWxzZSBjYW5cbiAgICAgICAgLy8gYmUgcmV0cmllZFxuICAgICAgICBjb25zb2xlLndhcm4oZSk7XG4gICAgICAgIHRoaXMuc3RyZWFtQ29ubmVjdGlvbi5kaXNjb25uZWN0KCk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXNwJDtcbiAgfVxuXG4gIHByaXZhdGUgcG9zdE1lc3NhZ2VXaXRoQXR0YWNobWVudHMobWVzc2FnZTogTWVzc2FnZSkge1xuICAgIGNvbnN0IHsgYXR0YWNobWVudHMsIC4uLm1lc3NhZ2VXaXRob3V0QXR0YWNobWVudHMgfSA9IG1lc3NhZ2U7XG5cbiAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoc3Vic2NyaWJlciA9PiB7XG4gICAgICBjb25zdCBodHRwQ29udGVudExpc3QgPSBbXTtcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXJzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBhdHRhY2htZW50cy5tYXAoYXN5bmMgYXR0YWNobWVudCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG1lZGlhID0gYXR0YWNobWVudCBhcyBNZWRpYTtcbiAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2gobWVkaWEuY29udGVudFVybCk7XG4gICAgICAgICAgICAgIGlmIChyZXMub2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBhcnJheUJ1ZmZlcjogYXdhaXQgcmVzLmFycmF5QnVmZmVyKCksIG1lZGlhIH07XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCcuLi4nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgYXJyYXlCdWZmZXJzLmZvckVhY2goKHsgYXJyYXlCdWZmZXIsIG1lZGlhIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyKTtcbiAgICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBCRlNFLlN1YnNjcmliYWJsZVN0cmVhbSgpO1xuICAgICAgICAgICAgc3RyZWFtLndyaXRlKGJ1ZmZlcik7XG4gICAgICAgICAgICBjb25zdCBodHRwQ29udGVudCA9IG5ldyBCRlNFLkh0dHBDb250ZW50KHsgdHlwZTogbWVkaWEuY29udGVudFR5cGUsIGNvbnRlbnRMZW5ndGg6IGJ1ZmZlci5sZW5ndGggfSwgc3RyZWFtKTtcbiAgICAgICAgICAgIGh0dHBDb250ZW50TGlzdC5wdXNoKGh0dHBDb250ZW50KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHVybCA9IGAvdjMvZGlyZWN0bGluZS9jb252ZXJzYXRpb25zLyR7dGhpcy5jb252ZXJzYXRpb25JZH0vdXNlcnMvJHttZXNzYWdlV2l0aG91dEF0dGFjaG1lbnRzLmZyb20uaWR9L3VwbG9hZGA7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IEJGU0UuU3RyZWFtaW5nUmVxdWVzdC5jcmVhdGUoJ1BVVCcsIHVybCk7XG4gICAgICAgICAgY29uc3QgYWN0aXZpdHlTdHJlYW0gPSBuZXcgQkZTRS5TdWJzY3JpYmFibGVTdHJlYW0oKTtcbiAgICAgICAgICBhY3Rpdml0eVN0cmVhbS53cml0ZShKU09OLnN0cmluZ2lmeShtZXNzYWdlV2l0aG91dEF0dGFjaG1lbnRzKSwgJ3V0Zi04Jyk7XG4gICAgICAgICAgcmVxdWVzdC5hZGRTdHJlYW0oXG4gICAgICAgICAgICBuZXcgQkZTRS5IdHRwQ29udGVudChcbiAgICAgICAgICAgICAgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5hY3Rpdml0eScsIGNvbnRlbnRMZW5ndGg6IGFjdGl2aXR5U3RyZWFtLmxlbmd0aCB9LFxuICAgICAgICAgICAgICBhY3Rpdml0eVN0cmVhbVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaHR0cENvbnRlbnRMaXN0LmZvckVhY2goZSA9PiByZXF1ZXN0LmFkZFN0cmVhbShlKSk7XG5cbiAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5zdHJlYW1Db25uZWN0aW9uLnNlbmQocmVxdWVzdCk7XG4gICAgICAgICAgaWYgKHJlc3Auc3RyZWFtcyAmJiByZXNwLnN0cmVhbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKG5ldyBFcnJvcihgSW52YWxpZCBzdHJlYW0gY291bnQgJHtyZXNwLnN0cmVhbXMubGVuZ3RofWApKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBJZDogaWQgfSA9IGF3YWl0IHJlc3Auc3RyZWFtc1swXS5yZWFkQXNKc29uPHsgSWQ6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGlkKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWl0VW50aWxPbmxpbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQuc3Vic2NyaWJlKFxuICAgICAgICBjcyA9PiB7XG4gICAgICAgICAgaWYgKGNzID09PSBDb25uZWN0aW9uU3RhdHVzLk9ubGluZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGUgPT4gcmVqZWN0KGUpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb25uZWN0QXN5bmMoKSB7XG4gICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKCdeaHR0cChzPyknKTtcblxuICAgIGlmICghcmUudGVzdCh0aGlzLmRvbWFpbikpIHtcbiAgICAgIHRocm93ICdEb21haW4gbXVzdCBiZWdpbiB3aXRoIGh0dHAgb3IgaHR0cHMnO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgdG9rZW46IHRoaXMudG9rZW4gfTtcblxuICAgIGlmICh0aGlzLmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICBwYXJhbXNbJ2NvbnZlcnNhdGlvbklkJ10gPSB0aGlzLmNvbnZlcnNhdGlvbklkO1xuICAgIH1cblxuICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCB1cmxTZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykudG9TdHJpbmcoKTtcbiAgICBjb25zdCB3c1VybCA9IGAke3RoaXMuZG9tYWluLnJlcGxhY2UocmUsICd3cyQxJyl9L2NvbnZlcnNhdGlvbnMvY29ubmVjdD8ke3VybFNlYXJjaFBhcmFtc31gO1xuXG4gICAgLy8gVGhpcyBwcm9taXNlIHdpbGwgcmVzb2x2ZSB3aGVuIGl0IGlzIGRpc2Nvbm5lY3RlZC5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdHJlYW1Db25uZWN0aW9uID0gbmV3IFdlYlNvY2tldENsaWVudFdpdGhOZXR3b3JrSW5mb3JtYXRpb24oe1xuICAgICAgICAgIGRpc2Nvbm5lY3Rpb25IYW5kbGVyOiByZXNvbHZlLFxuICAgICAgICAgIG5ldHdvcmtJbmZvcm1hdGlvbjogdGhpcy4jbmV0d29ya0luZm9ybWF0aW9uLFxuICAgICAgICAgIHJlcXVlc3RIYW5kbGVyOiB7XG4gICAgICAgICAgICBwcm9jZXNzUmVxdWVzdDogc3RyZWFtaW5nUmVxdWVzdCA9PiB7XG4gICAgICAgICAgICAgIC8vIElmIGBzdHJlYW1Db25uZWN0aW9uYCBpcyBzdGlsbCBjdXJyZW50LCBhbGxvdyBjYWxsIHRvIGBwcm9jZXNzUmVxdWVzdCgpYCwgb3RoZXJ3aXNlLCBpZ25vcmUgY2FsbHMgdG8gYHByb2Nlc3NSZXF1ZXN0KClgLlxuICAgICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHpvbWJpZSBjb25uZWN0aW9ucyBmcm9tIHNlbmRpbmcgdXMgcmVxdWVzdHMuXG4gICAgICAgICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwcm9jZXNzIHN0cmVhbWluZyByZXF1ZXN0LCBgc3RyZWFtaW5nQ29ubmVjdGlvbmAgc2hvdWxkIGJlIGRpc2Nvbm5lY3RlZC4nKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnRoZVN0cmVhbUhhbmRsZXIucHJvY2Vzc1JlcXVlc3Qoc3RyZWFtaW5nUmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB1cmw6IHdzVXJsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucXVldWVBY3Rpdml0aWVzID0gdHJ1ZTtcblxuICAgICAgICBhd2FpdCB0aGlzLnN0cmVhbUNvbm5lY3Rpb24uY29ubmVjdCgpO1xuXG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBCRlNFLlN0cmVhbWluZ1JlcXVlc3QuY3JlYXRlKCdQT1NUJywgJy92My9kaXJlY3RsaW5lL2NvbnZlcnNhdGlvbnMnKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnN0cmVhbUNvbm5lY3Rpb24uc2VuZChyZXF1ZXN0KTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25uZWN0aW9uIHJlc3BvbnNlIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1c0NvZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0cmVhbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCAxIHN0cmVhbSBidXQgZ290ICcgKyByZXNwb25zZS5zdHJlYW1zLmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNwb25zZVN0cmluZyA9IGF3YWl0IHJlc3BvbnNlLnN0cmVhbXNbMF0ucmVhZEFzU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IEpTT04ucGFyc2UocmVzcG9uc2VTdHJpbmcpO1xuXG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uSWQgPSBjb252ZXJzYXRpb24uY29udmVyc2F0aW9uSWQ7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLk9ubGluZSk7XG5cbiAgICAgICAgLy8gV2FpdCB1bnRpbCBETCBjb25zdW1lcnMgaGF2ZSBoYWQgYSBjaGFuY2UgdG8gYmUgbm90aWZpZWRcbiAgICAgICAgLy8gb2YgdGhlIGNvbm5lY3Rpb24gc3RhdHVzIGNoYW5nZS5cbiAgICAgICAgLy8gVGhpcyBpcyBzcGVjaWZpYyB0byBSeEpTIGltcGxlbWVudGF0aW9uIG9mIG9ic2VydmFibGUsIHdoaWNoIGNhbGxpbmcgc3Vic2NyaWJlKCkgYWZ0ZXIgbmV4dCgpIHdpbGwgc3RpbGwgZ2V0IHRoZSB2YWx1ZS5cbiAgICAgICAgYXdhaXQgdGhpcy53YWl0VW50aWxPbmxpbmUoKTtcblxuICAgICAgICB0aGlzLnRoZVN0cmVhbUhhbmRsZXIuZmx1c2goKTtcbiAgICAgICAgdGhpcy5xdWV1ZUFjdGl2aXRpZXMgPSBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH0pLmZpbmFsbHkoKCkgPT4gYWJvcnRDb250cm9sbGVyLmFib3J0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb25uZWN0V2l0aFJldHJ5QXN5bmMoKSB7XG4gICAgLy8gVGhpcyBmb3ItbG9vcCB3aWxsIGJyZWFrIHdoZW4gc29tZW9uZSBjYWxsIGVuZCgpIGFuZCBpdCB3aWxsIHNpZ25hbCBDb25uZWN0aW9uU3RhdHVzLkVuZGVkLlxuICAgIGZvciAoOzspIHtcbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBzaWduYWwgYW5kIHdhaXQgZm9yIHNvbWVvbmUga2lja2luZyBvZmYgdGhlIGNvbm5lY3Rpb246XG4gICAgICAvLyAtIHN1YnNjcmliZSB0byBhY3Rpdml0eSQsIG9yO1xuICAgICAgLy8gLSByZXRyaWVzIGV4aGF1c3RlZCAoRmFpbGVkVG9Db25uZWN0KSwgdGhlbiwgc29tZW9uZSBjYWxsIHJlY29ubmVjdCgpXG4gICAgICBhd2FpdCAodGhpcy5jb25uZWN0RGVmZXJyZWQgPSBjcmVhdGVEZWZlcnJlZCgpKS5wcm9taXNlO1xuXG4gICAgICBsZXQgbnVtUmV0cmllcyA9IE1BWF9SRVRSWV9DT1VOVDtcblxuICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuQ29ubmVjdGluZyk7XG5cbiAgICAgIHdoaWxlIChudW1SZXRyaWVzID4gMCkge1xuICAgICAgICBudW1SZXRyaWVzLS07XG5cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBwcm9taXNlIHdpbGwgcmVqZWN0L3Jlc29sdmUgd2hlbiBkaXNjb25uZWN0ZWQuXG4gICAgICAgICAgYXdhaXQgdGhpcy5jb25uZWN0QXN5bmMoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgc29tZW9uZSBjYWxsIGVuZCgpIHRvIGJyZWFrIHRoZSBjb25uZWN0aW9uLCB3ZSB3aWxsIG5ldmVyIGxpc3RlbiB0byBhbnkgcmVjb25uZWN0KCkuXG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLmdldFZhbHVlKCkgPT09IENvbm5lY3Rpb25TdGF0dXMuRW5kZWQpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHRoZSBsb29wIGluIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBicm9rZS5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3Qgc2lnbmFsIENvbm5lY3Rpb25TdGF0dXMuQ29ubmVjdGluZyB0d2ljZSBvciBtb3JlIHdpdGhvdXQgYW4gYWN0dWFsIGNvbm5lY3Rpb24uXG4gICAgICAgIC8vIFN1YnNlcXVlbnQgcmV0cmllcyBzaG91bGQgYmUgdHJhbnNwYXJlbnQuXG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLmdldFZhbHVlKCkgIT09IENvbm5lY3Rpb25TdGF0dXMuQ29ubmVjdGluZykge1xuICAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLkNvbm5lY3RpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBsYXN0ZWQgZm9yIG1vcmUgdGhhbiBhIG1pbnV0ZSwgdGhlIHByZXZpb3VzIGNvbm5lY3Rpb24gaXMgZ29vZCwgd2hpY2ggbWVhbnM6XG4gICAgICAgIC8vIC0gd2Ugc2hvdWxkIHJlc2V0IHRoZSByZXRyeSBjb3VudGVyLCBhbmQ7XG4gICAgICAgIC8vIC0gd2Ugc2hvdWxkIHJlY29ubmVjdCBpbW1lZGlhdGVseS5cbiAgICAgICAgaWYgKDYwMDAwIDwgRGF0ZS5ub3coKSAtIHN0YXJ0KSB7XG4gICAgICAgICAgbnVtUmV0cmllcyA9IE1BWF9SRVRSWV9DT1VOVDtcbiAgICAgICAgfSBlbHNlIGlmIChudW1SZXRyaWVzID4gMCkge1xuICAgICAgICAgIC8vIFNsZWVwIG9ubHkgaWYgd2UgYXJlIGRvaW5nIHJldHJ5LiBPdGhlcndpc2UsIHdlIGFyZSBnb2luZyB0byBicmVhayB0aGUgbG9vcCBhbmQgc2lnbmFsIEZhaWxlZFRvQ29ubmVjdC5cbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgdGhpcy5nZXRSZXRyeURlbGF5KCkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBbVEVTVF0gTWFrZSBzdXJlIEZhaWxlZFRvQ29ubmVjdCBpcyByZXBvcnRlZCBpbW1lZGlhdGVseSBhZnRlciBsYXN0IGRpc2Nvbm5lY3Rpb24sIHNob3VsZCBiZSBubyBnZXRSZXRyeURlbGF5KCkuXG4gICAgICAvLyBGYWlsZWQgdG8gcmVjb25uZWN0IGFmdGVyIG11bHRpcGxlIHJldHJpZXMuXG4gICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5GYWlsZWRUb0Nvbm5lY3QpO1xuICAgIH1cblxuICAgIC8vIE5vdGU6IE5vIGNvZGUgd2lsbCBoaXQgdGhpcyBsaW5lLlxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgZGVsYXkgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzXG4gIHByaXZhdGUgZ2V0UmV0cnlEZWxheSgpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcigzMDAwICsgTWF0aC5yYW5kb20oKSAqIDEyMDAwKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFBQSxnQkFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsSUFBQSxHQUFBQyx1QkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQUssZUFBQSxHQUFBQyxzQkFBQSxDQUFBTixPQUFBO0FBQ0EsSUFBQU8sV0FBQSxHQUFBRCxzQkFBQSxDQUFBTixPQUFB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
781
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQmVoYXZpb3JTdWJqZWN0IiwicmVxdWlyZSIsIl9idWZmZXIiLCJfT2JzZXJ2YWJsZSIsIkJGU0UiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9jcmVhdGVEZWZlcnJlZCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY3Jvc3NGZXRjaCIsIl9kaXJlY3RMaW5lIiwiX1dlYlNvY2tldENsaWVudFdpdGhOZXR3b3JrSW5mb3JtYXRpb24iLCJfZXhjbHVkZWQiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3Q4IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyIsImEiLCJfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbiIsIlR5cGVFcnJvciIsIl9jbGFzc1ByaXZhdGVGaWVsZEdldCIsInMiLCJfYXNzZXJ0Q2xhc3NCcmFuZCIsIl9jbGFzc1ByaXZhdGVGaWVsZFNldCIsImFyZ3VtZW50cyIsImxlbmd0aCIsIkRJUkVDVF9MSU5FX1ZFUlNJT04iLCJNQVhfUkVUUllfQ09VTlQiLCJyZWZyZXNoVG9rZW5MaWZldGltZSIsInJlZnJlc2hUb2tlbkludGVydmFsIiwiU3RyZWFtSGFuZGxlciIsImMkIiwic3EiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2RlZmluZVByb3BlcnR5MiIsInN1YnNjcmliZXIiLCJjb25uZWN0aW9uU3RhdHVzJCIsInNob3VsZFF1ZXVlIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwic2V0U3Vic2NyaWJlciIsIl9wcm9jZXNzUmVxdWVzdCIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwicmVxdWVzdCIsImxvZ2dlciIsInN0cmVhbXMiLCJzdHJlYW0wIiwiYWN0aXZpdHlTZXRKc29uIiwiYWN0aXZpdHlTZXQiLCJhY3Rpdml0eSIsImF0dGFjaG1lbnRzIiwic3RyZWFtIiwiYXR0YWNobWVudCIsImRhdGFVcmkiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJzaGlmdCIsInJlYWRBc1N0cmluZyIsInNlbnQiLCJKU09OIiwicGFyc2UiLCJhY3Rpdml0aWVzIiwiZXJyb3IiLCJFcnJvciIsImFicnVwdCIsIlN0cmVhbWluZ1Jlc3BvbnNlIiwiY3JlYXRlIiwicHVzaCIsImNvbnRlbnRUeXBlIiwiY29udGVudFVybCIsImFjdGl2aXR5UXVldWUiLCJzdG9wIiwicHJvY2Vzc1JlcXVlc3QiLCJfeCIsIl94MiIsImFwcGx5IiwiZmx1c2giLCJfdGhpcyIsImZvckVhY2giLCJlbmQiLCJjb21wbGV0ZSIsIl9uZXR3b3JrSW5mb3JtYXRpb24iLCJEaXJlY3RMaW5lU3RyZWFtaW5nIiwiZXhwb3J0cyIsIm9wdGlvbnMiLCJfdGhpczIiLCJCZWhhdmlvclN1YmplY3QiLCJDb25uZWN0aW9uU3RhdHVzIiwiVW5pbml0aWFsaXplZCIsIkFib3J0Q29udHJvbGxlciIsIm5ldHdvcmtJbmZvcm1hdGlvbiIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidHlwZSIsImNvbnNvbGUiLCJ3YXJuIiwidG9rZW4iLCJyZWZyZXNoVG9rZW4iLCJFeHBpcmVkVG9rZW4iLCJkb21haW4iLCJjb252ZXJzYXRpb25JZCIsIl9ib3RBZ2VudCIsImdldEJvdEFnZW50IiwiYm90QWdlbnQiLCJxdWV1ZUFjdGl2aXRpZXMiLCJhY3Rpdml0eSQiLCJPYnNlcnZhYmxlIiwiX3JlZiIsIl9jYWxsZWUyIiwiX2NvbnRleHQyIiwiYWN0aXZpdHlTdWJzY3JpYmVyIiwidGhlU3RyZWFtSGFuZGxlciIsImNvbm5lY3REZWZlcnJlZCIsInJlc29sdmUiLCJfeDMiLCJzaGFyZSIsImNvbm5lY3RXaXRoUmV0cnlBc3luYyIsInJlY29ubmVjdCIsIl9yZWYyIiwiZ2V0VmFsdWUiLCJFbmRlZCIsIl9lbmRBYm9ydENvbnRyb2xsZXIiLCJhYm9ydCIsInN0cmVhbUNvbm5lY3Rpb24iLCJkaXNjb25uZWN0IiwiY29tbW9uSGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJjb25jYXQiLCJjdXN0b21BZ2VudCIsInVuZGVmaW5lZCIsImNsaWVudEFnZW50IiwiX3JlZnJlc2hUb2tlbiIsIl9jYWxsZWUzIiwiZmlyc3RDYWxsIiwicmV0cnlDb3VudCIsIm51bWJlck9mQXR0ZW1wdHMiLCJyZXMiLCJfeWllbGQkcmVzJGpzb24iLCJfYXJnczMiLCJfdCIsIl9jb250ZXh0MyIsIndhaXRVbnRpbE9ubGluZSIsInNpZ25hbCIsImFib3J0ZWQiLCJzbGVlcCIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsIm9rIiwianNvbiIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJtcyIsIl90aGlzMyIsIlByb21pc2UiLCJ0aW1lciIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJvbmNlIiwicG9zdEFjdGl2aXR5IiwiX3RoaXM0IiwiRmFpbGVkVG9Db25uZWN0IiwicG9zdE1lc3NhZ2VXaXRoQXR0YWNobWVudHMiLCJyZXNwJCIsIl9yZWYzIiwiX2NhbGxlZTQiLCJyZXNwIiwibnVtYmVyT2ZTdHJlYW1zIiwiaWRTdHJpbmciLCJfSlNPTiRwYXJzZSIsImlkIiwiX3QyIiwiX2NvbnRleHQ0IiwiU3RyZWFtaW5nUmVxdWVzdCIsInNldEJvZHkiLCJzdHJpbmdpZnkiLCJzZW5kIiwic3RhdHVzQ29kZSIsIklkIiwiX3g0IiwibWVzc2FnZSIsIl90aGlzNSIsIm1lc3NhZ2VXaXRob3V0QXR0YWNobWVudHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiaHR0cENvbnRlbnRMaXN0IiwiX2NhbGxlZTYiLCJhcnJheUJ1ZmZlcnMiLCJ1cmwiLCJhY3Rpdml0eVN0cmVhbSIsIl95aWVsZCRyZXNwJHN0cmVhbXMkIiwiX3Q1IiwiX2NvbnRleHQ2IiwiYWxsIiwibWFwIiwiX3JlZjUiLCJfY2FsbGVlNSIsIm1lZGlhIiwiX3QzIiwiX3Q0IiwiX2NvbnRleHQ1IiwiYXJyYXlCdWZmZXIiLCJfeDUiLCJfcmVmNiIsImJ1ZmZlciIsIkJ1ZmZlciIsImZyb20iLCJTdWJzY3JpYmFibGVTdHJlYW0iLCJ3cml0ZSIsImh0dHBDb250ZW50IiwiSHR0cENvbnRlbnQiLCJjb250ZW50TGVuZ3RoIiwiYWRkU3RyZWFtIiwicmVhZEFzSnNvbiIsIl93YWl0VW50aWxPbmxpbmUiLCJfY2FsbGVlNyIsIl90aGlzNiIsIl9jb250ZXh0NyIsInJlamVjdCIsImRvbmUiLCJzdWJzY3JpcHRpb24iLCJzdWJzY3JpYmUiLCJjcyIsIk9ubGluZSIsIl9zdWJzY3JpcHRpb24iLCJ1bnN1YnNjcmliZSIsIl9zdWJzY3JpcHRpb24yIiwiX2Nvbm5lY3RBc3luYyIsIl9jYWxsZWU5IiwiX3RoaXM3IiwicmUiLCJwYXJhbXMiLCJhYm9ydENvbnRyb2xsZXIiLCJ1cmxTZWFyY2hQYXJhbXMiLCJ3c1VybCIsIl9jb250ZXh0OSIsIlJlZ0V4cCIsInRlc3QiLCJVUkxTZWFyY2hQYXJhbXMiLCJ0b1N0cmluZyIsInJlcGxhY2UiLCJfcmVmNyIsIl9jYWxsZWU4IiwicmVzcG9uc2UiLCJyZXNwb25zZVN0cmluZyIsImNvbnZlcnNhdGlvbiIsIl90NiIsIl9jb250ZXh0OCIsIldlYlNvY2tldENsaWVudFdpdGhOZXR3b3JrSW5mb3JtYXRpb24iLCJkaXNjb25uZWN0aW9uSGFuZGxlciIsInJlcXVlc3RIYW5kbGVyIiwic3RyZWFtaW5nUmVxdWVzdCIsImNvbm5lY3QiLCJfeDYiLCJfeDciLCJjb25uZWN0QXN5bmMiLCJfY29ubmVjdFdpdGhSZXRyeUFzeW5jIiwiX2NhbGxlZTAiLCJudW1SZXRyaWVzIiwic3RhcnQiLCJfdDciLCJfY29udGV4dDAiLCJjcmVhdGVEZWZlcnJlZCIsInByb21pc2UiLCJDb25uZWN0aW5nIiwiRGF0ZSIsIm5vdyIsImdldFJldHJ5RGVsYXkiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iXSwic291cmNlcyI6WyIuLi9zcmMvZGlyZWN0TGluZVN0cmVhbWluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbiBvcmRlciB0byBrZWVwIGZpbGUgc2l6ZSBkb3duLCBvbmx5IGltcG9ydCB0aGUgcGFydHMgb2YgcnhqcyB0aGF0IHdlIHVzZVxuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzL0JlaGF2aW9yU3ViamVjdCc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAncnhqcy9TdWJzY3JpYmVyJztcbmltcG9ydCAqIGFzIEJGU0UgZnJvbSAnYm90ZnJhbWV3b3JrLXN0cmVhbWluZyc7XG5pbXBvcnQgY3JlYXRlRGVmZXJyZWQgZnJvbSAnLi9jcmVhdGVEZWZlcnJlZCc7XG5pbXBvcnQgZmV0Y2ggZnJvbSAnY3Jvc3MtZmV0Y2gnO1xuXG5pbXBvcnQgeyBBY3Rpdml0eSwgQ29ubmVjdGlvblN0YXR1cywgQ29udmVyc2F0aW9uLCBEaXJlY3RMaW5lLCBJQm90Q29ubmVjdGlvbiwgTWVkaWEsIE1lc3NhZ2UgfSBmcm9tICcuL2RpcmVjdExpbmUnO1xuaW1wb3J0IFdlYlNvY2tldENsaWVudFdpdGhOZXR3b3JrSW5mb3JtYXRpb24gZnJvbSAnLi9zdHJlYW1pbmcvV2ViU29ja2V0Q2xpZW50V2l0aE5ldHdvcmtJbmZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7IERlZmVycmVkIH0gZnJvbSAnLi9jcmVhdGVEZWZlcnJlZCc7XG5cbmNvbnN0IERJUkVDVF9MSU5FX1ZFUlNJT04gPSAnRGlyZWN0TGluZS8zLjAnO1xuY29uc3QgTUFYX1JFVFJZX0NPVU5UID0gMztcbmNvbnN0IHJlZnJlc2hUb2tlbkxpZmV0aW1lID0gMzAgKiA2MCAqIDEwMDA7XG4vL2NvbnN0IHJlZnJlc2hUb2tlbkxpZmV0aW1lID0gNTAwMDtcbi8vIGNvbnN0IHRpbWVvdXQgPSAyMCAqIDEwMDA7XG5jb25zdCByZWZyZXNoVG9rZW5JbnRlcnZhbCA9IHJlZnJlc2hUb2tlbkxpZmV0aW1lIC8gMjtcblxuaW50ZXJmYWNlIERpcmVjdExpbmVTdHJlYW1pbmdPcHRpb25zIHtcbiAgdG9rZW46IHN0cmluZztcbiAgY29udmVyc2F0aW9uSWQ/OiBzdHJpbmc7XG4gIGRvbWFpbjogc3RyaW5nO1xuICAvLyBBdHRhY2hlZCB0byBhbGwgcmVxdWVzdHMgdG8gaWRlbnRpZnkgcmVxdWVzdGluZyBhZ2VudC5cbiAgYm90QWdlbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIFtgTmV0d29ya0luZm9ybWF0aW9uYCBBUEldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9OZXR3b3JrX0luZm9ybWF0aW9uX0FQSSkuXG4gICAqIFdoZW4gdGhlIGBOZXR3b3JrSW5mb3JtYXRpb25gIGRldGVjdCBuZXR3b3JrIGNoYW5nZXMgb3Igb2ZmbGluZSwgaXQgd2lsbCBkaXNjb25uZWN0IHRoZSBXZWIgU29ja2V0IGFuZCByZWNvbm5lY3QgaXQuXG4gICAqL1xuICBuZXR3b3JrSW5mb3JtYXRpb24/OiBOZXR3b3JrSW5mb3JtYXRpb247XG59XG5cbmNsYXNzIFN0cmVhbUhhbmRsZXIgaW1wbGVtZW50cyBCRlNFLlJlcXVlc3RIYW5kbGVyIHtcbiAgcHJpdmF0ZSBjb25uZWN0aW9uU3RhdHVzJDtcbiAgcHJpdmF0ZSBzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPEFjdGl2aXR5PjtcbiAgcHJpdmF0ZSBzaG91bGRRdWV1ZTogKCkgPT4gYm9vbGVhbjtcbiAgcHJpdmF0ZSBhY3Rpdml0eVF1ZXVlOiBBcnJheTxBY3Rpdml0eT4gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzOiBTdWJzY3JpYmVyPEFjdGl2aXR5PiwgYyQ6IE9ic2VydmFibGU8Q29ubmVjdGlvblN0YXR1cz4sIHNxOiAoKSA9PiBib29sZWFuKSB7XG4gICAgdGhpcy5zdWJzY3JpYmVyID0gcztcbiAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkID0gYyQ7XG4gICAgdGhpcy5zaG91bGRRdWV1ZSA9IHNxO1xuICB9XG5cbiAgcHVibGljIHNldFN1YnNjcmliZXIoczogU3Vic2NyaWJlcjxBY3Rpdml0eT4pIHtcbiAgICB0aGlzLnN1YnNjcmliZXIgPSBzO1xuICB9XG5cbiAgYXN5bmMgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdDogQkZTRS5JUmVjZWl2ZVJlcXVlc3QsIGxvZ2dlcj86IGFueSk6IFByb21pc2U8QkZTRS5TdHJlYW1pbmdSZXNwb25zZT4ge1xuICAgIGNvbnN0IHN0cmVhbXMgPSBbLi4ucmVxdWVzdC5zdHJlYW1zXTtcbiAgICBjb25zdCBzdHJlYW0wID0gc3RyZWFtcy5zaGlmdCgpO1xuICAgIGNvbnN0IGFjdGl2aXR5U2V0SnNvbiA9IGF3YWl0IHN0cmVhbTAucmVhZEFzU3RyaW5nKCk7XG4gICAgY29uc3QgYWN0aXZpdHlTZXQgPSBKU09OLnBhcnNlKGFjdGl2aXR5U2V0SnNvbik7XG5cbiAgICBpZiAoYWN0aXZpdHlTZXQuYWN0aXZpdGllcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIC8vIE9ubHkgb25lIGFjdGl2aXR5IGlzIGV4cGVjdGVkIGluIGEgc2V0IGluIHN0cmVhbWluZ1xuICAgICAgdGhpcy5zdWJzY3JpYmVyLmVycm9yKG5ldyBFcnJvcigndGhlcmUgc2hvdWxkIGJlIGV4YWN0bHkgb25lIGFjdGl2aXR5JykpO1xuICAgICAgcmV0dXJuIEJGU0UuU3RyZWFtaW5nUmVzcG9uc2UuY3JlYXRlKDUwMCk7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZpdHkgPSBhY3Rpdml0eVNldC5hY3Rpdml0aWVzWzBdO1xuXG4gICAgaWYgKHN0cmVhbXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBbLi4uYWN0aXZpdHkuYXR0YWNobWVudHNdO1xuXG4gICAgICBsZXQgc3RyZWFtOiBCRlNFLkNvbnRlbnRTdHJlYW07XG4gICAgICB3aGlsZSAoKHN0cmVhbSA9IHN0cmVhbXMuc2hpZnQoKSkpIHtcbiAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGF3YWl0IHN0cmVhbS5yZWFkQXNTdHJpbmcoKTtcbiAgICAgICAgY29uc3QgZGF0YVVyaSA9ICdkYXRhOnRleHQvcGxhaW47YmFzZTY0LCcgKyBhdHRhY2htZW50O1xuICAgICAgICBhdHRhY2htZW50cy5wdXNoKHsgY29udGVudFR5cGU6IHN0cmVhbS5jb250ZW50VHlwZSwgY29udGVudFVybDogZGF0YVVyaSB9KTtcbiAgICAgIH1cblxuICAgICAgYWN0aXZpdHkuYXR0YWNobWVudHMgPSBhdHRhY2htZW50cztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaG91bGRRdWV1ZSgpKSB7XG4gICAgICB0aGlzLmFjdGl2aXR5UXVldWUucHVzaChhY3Rpdml0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3Vic2NyaWJlci5uZXh0KGFjdGl2aXR5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gQkZTRS5TdHJlYW1pbmdSZXNwb25zZS5jcmVhdGUoMjAwKTtcbiAgfVxuXG4gIHB1YmxpYyBmbHVzaCgpIHtcbiAgICB0aGlzLmFjdGl2aXR5UXVldWUuZm9yRWFjaChhID0+IHRoaXMuc3Vic2NyaWJlci5uZXh0KGEpKTtcbiAgICB0aGlzLmFjdGl2aXR5UXVldWUgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyBlbmQoKSB7XG4gICAgdGhpcy5zdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERpcmVjdExpbmVTdHJlYW1pbmcgaW1wbGVtZW50cyBJQm90Q29ubmVjdGlvbiB7XG4gIHB1YmxpYyBjb25uZWN0aW9uU3RhdHVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoQ29ubmVjdGlvblN0YXR1cy5VbmluaXRpYWxpemVkKTtcbiAgcHVibGljIGFjdGl2aXR5JDogT2JzZXJ2YWJsZTxBY3Rpdml0eT47XG5cbiAgcHJpdmF0ZSBhY3Rpdml0eVN1YnNjcmliZXI6IFN1YnNjcmliZXI8QWN0aXZpdHk+O1xuICBwcml2YXRlIGNvbm5lY3REZWZlcnJlZDogRGVmZXJyZWQ8dm9pZD47XG4gIHByaXZhdGUgdGhlU3RyZWFtSGFuZGxlcjogU3RyZWFtSGFuZGxlcjtcblxuICBwcml2YXRlIGRvbWFpbjogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSB0b2tlbjogc3RyaW5nO1xuICBwcml2YXRlIHN0cmVhbUNvbm5lY3Rpb246IEJGU0UuV2ViU29ja2V0Q2xpZW50O1xuICBwcml2YXRlIHF1ZXVlQWN0aXZpdGllczogYm9vbGVhbjtcblxuICBwcml2YXRlIF9ib3RBZ2VudCA9ICcnO1xuICBwcml2YXRlIF9lbmRBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgI25ldHdvcmtJbmZvcm1hdGlvbjogTmV0d29ya0luZm9ybWF0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IERpcmVjdExpbmVTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgLy8gUmVjdGlmaWVzIGBvcHRpb25zLm5ldHdvcmtJbmZvcm1hdGlvbmAuXG4gICAgY29uc3QgbmV0d29ya0luZm9ybWF0aW9uID0gb3B0aW9ucz8ubmV0d29ya0luZm9ybWF0aW9uO1xuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG5ldHdvcmtJbmZvcm1hdGlvbiA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgICh0eXBlb2YgbmV0d29ya0luZm9ybWF0aW9uLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgdHlwZW9mIG5ldHdvcmtJbmZvcm1hdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIHR5cGVvZiBuZXR3b3JrSW5mb3JtYXRpb24udHlwZSA9PT0gJ3N0cmluZycpXG4gICAgKSB7XG4gICAgICB0aGlzLiNuZXR3b3JrSW5mb3JtYXRpb24gPSBuZXR3b3JrSW5mb3JtYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ2JvdGZyYW1ld29yay1kaXJlY3RsaW5lanM6IFwibmV0d29ya0luZm9ybWF0aW9uXCIgb3B0aW9uIHNwZWNpZmllZCBtdXN0IGJlIGEgYE5ldHdvcmtJbmZvcm1hdGlvbmAtbGlrZSBpbnN0YW5jZSBleHRlbmRpbmcgYEV2ZW50VGFyZ2V0YCBpbnRlcmZhY2Ugd2l0aCBhIGB0eXBlYCBwcm9wZXJ0eSByZXR1cm5pbmcgYSBzdHJpbmcuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnRva2VuID0gb3B0aW9ucy50b2tlbjtcblxuICAgIHRoaXMucmVmcmVzaFRva2VuKCkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuRXhwaXJlZFRva2VuKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZG9tYWluID0gb3B0aW9ucy5kb21haW47XG5cbiAgICBpZiAob3B0aW9ucy5jb252ZXJzYXRpb25JZCkge1xuICAgICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IG9wdGlvbnMuY29udmVyc2F0aW9uSWQ7XG4gICAgfVxuXG4gICAgdGhpcy5fYm90QWdlbnQgPSB0aGlzLmdldEJvdEFnZW50KG9wdGlvbnMuYm90QWdlbnQpO1xuXG4gICAgdGhpcy5xdWV1ZUFjdGl2aXRpZXMgPSB0cnVlO1xuICAgIHRoaXMuYWN0aXZpdHkkID0gT2JzZXJ2YWJsZS5jcmVhdGUoYXN5bmMgKHN1YnNjcmliZXI6IFN1YnNjcmliZXI8QWN0aXZpdHk+KSA9PiB7XG4gICAgICB0aGlzLmFjdGl2aXR5U3Vic2NyaWJlciA9IHN1YnNjcmliZXI7XG4gICAgICB0aGlzLnRoZVN0cmVhbUhhbmRsZXIgPSBuZXcgU3RyZWFtSGFuZGxlcihzdWJzY3JpYmVyLCB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLCAoKSA9PiB0aGlzLnF1ZXVlQWN0aXZpdGllcyk7XG5cbiAgICAgIC8vIFJlc29sdmluZyBjb25uZWN0RGVmZXJyZWQgd2lsbCBraWNrLW9mZiB0aGUgY29ubmVjdGlvbi5cbiAgICAgIHRoaXMuY29ubmVjdERlZmVycmVkLnJlc29sdmUoKTtcbiAgICB9KS5zaGFyZSgpO1xuXG4gICAgLy8gY29ubmVjdFdpdGhSZXRyeUFzeW5jKCkgd2lsbCBjcmVhdGUgdGhlIGNvbm5lY3REZWZlcnJlZCBvYmplY3QgcmVxdWlyZWQgaW4gYWN0aXZpdHkkLlxuICAgIHRoaXMuY29ubmVjdFdpdGhSZXRyeUFzeW5jKCk7XG4gIH1cblxuICBwdWJsaWMgcmVjb25uZWN0KHsgY29udmVyc2F0aW9uSWQsIHRva2VuIH06IENvbnZlcnNhdGlvbikge1xuICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLmdldFZhbHVlKCkgPT09IENvbm5lY3Rpb25TdGF0dXMuRW5kZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29ubmVjdGlvbiBoYXMgZW5kZWQuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IGNvbnZlcnNhdGlvbklkO1xuICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcblxuICAgIHRoaXMuY29ubmVjdERlZmVycmVkLnJlc29sdmUoKTtcbiAgfVxuXG4gIGVuZCgpIHtcbiAgICAvLyBPbmNlIGVuZCgpIGlzIGNhbGxlZCwgbm8gcmVjb25uZWN0aW9uIGNhbiBiZSBtYWRlLlxuICAgIHRoaXMuX2VuZEFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuXG4gICAgdGhpcy5hY3Rpdml0eVN1YnNjcmliZXIuY29tcGxldGUoKTtcblxuICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLkVuZGVkKTtcbiAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLnN0cmVhbUNvbm5lY3Rpb24uZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21tb25IZWFkZXJzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy50b2tlbn1gLFxuICAgICAgJ3gtbXMtYm90LWFnZW50JzogdGhpcy5fYm90QWdlbnRcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCb3RBZ2VudChjdXN0b21BZ2VudDogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgIGxldCBjbGllbnRBZ2VudCA9ICdkaXJlY3RsaW5lU3RyZWFtaW5nJztcblxuICAgIGlmIChjdXN0b21BZ2VudCkge1xuICAgICAgY2xpZW50QWdlbnQgKz0gYDsgJHtjdXN0b21BZ2VudH1gO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtESVJFQ1RfTElORV9WRVJTSU9OfSAoJHtjbGllbnRBZ2VudH0pYDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaFRva2VuKGZpcnN0Q2FsbCA9IHRydWUsIHJldHJ5Q291bnQgPSAwKSB7XG4gICAgYXdhaXQgdGhpcy53YWl0VW50aWxPbmxpbmUoKTtcblxuICAgIGxldCBudW1iZXJPZkF0dGVtcHRzID0gMDtcbiAgICB3aGlsZSAobnVtYmVyT2ZBdHRlbXB0cyA8IE1BWF9SRVRSWV9DT1VOVCkge1xuICAgICAgaWYgKHRoaXMuX2VuZEFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG51bWJlck9mQXR0ZW1wdHMrKztcbiAgICAgIGF3YWl0IHRoaXMuc2xlZXAocmVmcmVzaFRva2VuSW50ZXJ2YWwpO1xuXG4gICAgICBpZiAodGhpcy5fZW5kQWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7dGhpcy5kb21haW59L3Rva2Vucy9yZWZyZXNoYCwgeyBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogdGhpcy5jb21tb25IZWFkZXJzKCkgfSk7XG4gICAgICAgIGlmIChyZXMub2spIHtcbiAgICAgICAgICBudW1iZXJPZkF0dGVtcHRzID0gMDtcbiAgICAgICAgICBjb25zdCB7IHRva2VuIH0gPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gNDAzIHx8IHJlcy5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmF0YWwgZXJyb3Igd2hpbGUgcmVmcmVzaGluZyB0aGUgdG9rZW46ICR7cmVzLnN0YXR1c30gJHtyZXMuc3RhdHVzVGV4dH1gKTtcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtQ29ubmVjdGlvbi5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgUmVmcmVzaCBhdHRlbXB0ICMke251bWJlck9mQXR0ZW1wdHN9IGZhaWxlZDogJHtyZXMuc3RhdHVzfSAke3Jlcy5zdGF0dXNUZXh0fWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFJlZnJlc2ggYXR0ZW1wdCAjJHtudW1iZXJPZkF0dGVtcHRzfSB0aHJldyBhbiBleGNlcHRpb246ICR7ZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKCdSZXRyaWVzIGV4aGF1c3RlZCcpO1xuICAgIHRoaXMuc3RyZWFtQ29ubmVjdGlvbi5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBwcml2YXRlIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZW5kQWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKTtcbiAgICAgIHRoaXMuX2VuZEFib3J0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHBvc3RBY3Rpdml0eShhY3Rpdml0eTogQWN0aXZpdHkpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLnZhbHVlID09PSBDb25uZWN0aW9uU3RhdHVzLkVuZGVkIHx8XG4gICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLnZhbHVlID09PSBDb25uZWN0aW9uU3RhdHVzLkZhaWxlZFRvQ29ubmVjdFxuICAgICkge1xuICAgICAgcmV0dXJuIE9ic2VydmFibGUudGhyb3cobmV3IEVycm9yKCdDb25uZWN0aW9uIGlzIGNsb3NlZCcpKTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZpdHkudHlwZSA9PT0gJ21lc3NhZ2UnICYmIGFjdGl2aXR5LmF0dGFjaG1lbnRzICYmIGFjdGl2aXR5LmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnBvc3RNZXNzYWdlV2l0aEF0dGFjaG1lbnRzKGFjdGl2aXR5KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwJCA9IE9ic2VydmFibGUuY3JlYXRlKGFzeW5jIHN1YnNjcmliZXIgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IEJGU0UuU3RyZWFtaW5nUmVxdWVzdC5jcmVhdGUoXG4gICAgICAgICdQT1NUJyxcbiAgICAgICAgJy92My9kaXJlY3RsaW5lL2NvbnZlcnNhdGlvbnMvJyArIHRoaXMuY29udmVyc2F0aW9uSWQgKyAnL2FjdGl2aXRpZXMnXG4gICAgICApO1xuICAgICAgcmVxdWVzdC5zZXRCb2R5KEpTT04uc3RyaW5naWZ5KGFjdGl2aXR5KSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLnN0cmVhbUNvbm5lY3Rpb24uc2VuZChyZXF1ZXN0KTtcbiAgICAgICAgaWYgKHJlc3Auc3RhdHVzQ29kZSAhPT0gMjAwKSB0aHJvdyBuZXcgRXJyb3IoJ1Bvc3RBY3Rpdml0eSByZXR1cm5lZCAnICsgcmVzcC5zdGF0dXNDb2RlKTtcbiAgICAgICAgY29uc3QgbnVtYmVyT2ZTdHJlYW1zID0gcmVzcC5zdHJlYW1zLmxlbmd0aDtcbiAgICAgICAgaWYgKG51bWJlck9mU3RyZWFtcyAhPT0gMSkgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBvbmUgc3RyZWFtIGJ1dCBnb3QgJyArIG51bWJlck9mU3RyZWFtcyk7XG4gICAgICAgIGNvbnN0IGlkU3RyaW5nID0gYXdhaXQgcmVzcC5zdHJlYW1zWzBdLnJlYWRBc1N0cmluZygpO1xuICAgICAgICBjb25zdCB7IElkOiBpZCB9ID0gSlNPTi5wYXJzZShpZFN0cmluZyk7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dChpZCk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgbmV0d29yayBpc3N1ZSB0aGVuIGl0cyBoYW5kbGVkIGJ5XG4gICAgICAgIC8vIHRoZSBkaXNjb25uZWN0aW9uSGFuZGxlci4gRXZlcnl0aGluZyBlbHNlIGNhblxuICAgICAgICAvLyBiZSByZXRyaWVkXG4gICAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICAgICAgdGhpcy5zdHJlYW1Db25uZWN0aW9uLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3AkO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3N0TWVzc2FnZVdpdGhBdHRhY2htZW50cyhtZXNzYWdlOiBNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBhdHRhY2htZW50cywgLi4ubWVzc2FnZVdpdGhvdXRBdHRhY2htZW50cyB9ID0gbWVzc2FnZTtcblxuICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZShzdWJzY3JpYmVyID0+IHtcbiAgICAgIGNvbnN0IGh0dHBDb250ZW50TGlzdCA9IFtdO1xuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBhcnJheUJ1ZmZlcnMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzLm1hcChhc3luYyBhdHRhY2htZW50ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbWVkaWEgPSBhdHRhY2htZW50IGFzIE1lZGlhO1xuICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChtZWRpYS5jb250ZW50VXJsKTtcbiAgICAgICAgICAgICAgaWYgKHJlcy5vaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGFycmF5QnVmZmVyOiBhd2FpdCByZXMuYXJyYXlCdWZmZXIoKSwgbWVkaWEgfTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJy4uLicpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBhcnJheUJ1ZmZlcnMuZm9yRWFjaCgoeyBhcnJheUJ1ZmZlciwgbWVkaWEgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYXJyYXlCdWZmZXIpO1xuICAgICAgICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IEJGU0UuU3Vic2NyaWJhYmxlU3RyZWFtKCk7XG4gICAgICAgICAgICBzdHJlYW0ud3JpdGUoYnVmZmVyKTtcbiAgICAgICAgICAgIGNvbnN0IGh0dHBDb250ZW50ID0gbmV3IEJGU0UuSHR0cENvbnRlbnQoeyB0eXBlOiBtZWRpYS5jb250ZW50VHlwZSwgY29udGVudExlbmd0aDogYnVmZmVyLmxlbmd0aCB9LCBzdHJlYW0pO1xuICAgICAgICAgICAgaHR0cENvbnRlbnRMaXN0LnB1c2goaHR0cENvbnRlbnQpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgdXJsID0gYC92My9kaXJlY3RsaW5lL2NvbnZlcnNhdGlvbnMvJHt0aGlzLmNvbnZlcnNhdGlvbklkfS91c2Vycy8ke21lc3NhZ2VXaXRob3V0QXR0YWNobWVudHMuZnJvbS5pZH0vdXBsb2FkYDtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gQkZTRS5TdHJlYW1pbmdSZXF1ZXN0LmNyZWF0ZSgnUFVUJywgdXJsKTtcbiAgICAgICAgICBjb25zdCBhY3Rpdml0eVN0cmVhbSA9IG5ldyBCRlNFLlN1YnNjcmliYWJsZVN0cmVhbSgpO1xuICAgICAgICAgIGFjdGl2aXR5U3RyZWFtLndyaXRlKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VXaXRob3V0QXR0YWNobWVudHMpLCAndXRmLTgnKTtcbiAgICAgICAgICByZXF1ZXN0LmFkZFN0cmVhbShcbiAgICAgICAgICAgIG5ldyBCRlNFLkh0dHBDb250ZW50KFxuICAgICAgICAgICAgICB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmFjdGl2aXR5JywgY29udGVudExlbmd0aDogYWN0aXZpdHlTdHJlYW0ubGVuZ3RoIH0sXG4gICAgICAgICAgICAgIGFjdGl2aXR5U3RyZWFtXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBodHRwQ29udGVudExpc3QuZm9yRWFjaChlID0+IHJlcXVlc3QuYWRkU3RyZWFtKGUpKTtcblxuICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLnN0cmVhbUNvbm5lY3Rpb24uc2VuZChyZXF1ZXN0KTtcbiAgICAgICAgICBpZiAocmVzcC5zdHJlYW1zICYmIHJlc3Auc3RyZWFtcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IobmV3IEVycm9yKGBJbnZhbGlkIHN0cmVhbSBjb3VudCAke3Jlc3Auc3RyZWFtcy5sZW5ndGh9YCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7IElkOiBpZCB9ID0gYXdhaXQgcmVzcC5zdHJlYW1zWzBdLnJlYWRBc0pzb248eyBJZDogc3RyaW5nIH0+KCk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoaWQpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgIH0pKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdhaXRVbnRpbE9ubGluZSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICAgIGxldCBzdWJzY3JpcHRpb246IHsgdW5zdWJzY3JpYmUoKTogdm9pZCB9O1xuICAgICAgc3Vic2NyaXB0aW9uID0gdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5zdWJzY3JpYmUoXG4gICAgICAgIGNzID0+IHtcbiAgICAgICAgICBpZiAoY3MgPT09IENvbm5lY3Rpb25TdGF0dXMuT25saW5lKSB7XG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlID0+IHtcbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbm5lY3RBc3luYygpIHtcbiAgICBpZiAodGhpcy5fZW5kQWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nvbm5lY3Rpb24gaGFzIGVuZGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cCgnXmh0dHAocz8pJyk7XG5cbiAgICBpZiAoIXJlLnRlc3QodGhpcy5kb21haW4pKSB7XG4gICAgICB0aHJvdyAnRG9tYWluIG11c3QgYmVnaW4gd2l0aCBodHRwIG9yIGh0dHBzJztcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7IHRva2VuOiB0aGlzLnRva2VuIH07XG5cbiAgICBpZiAodGhpcy5jb252ZXJzYXRpb25JZCkge1xuICAgICAgcGFyYW1zWydjb252ZXJzYXRpb25JZCddID0gdGhpcy5jb252ZXJzYXRpb25JZDtcbiAgICB9XG5cbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgY29uc3QgdXJsU2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXJhbXMpLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgd3NVcmwgPSBgJHt0aGlzLmRvbWFpbi5yZXBsYWNlKHJlLCAnd3MkMScpfS9jb252ZXJzYXRpb25zL2Nvbm5lY3Q/JHt1cmxTZWFyY2hQYXJhbXN9YDtcblxuICAgIC8vIFRoaXMgcHJvbWlzZSB3aWxsIHJlc29sdmUgd2hlbiBpdCBpcyBkaXNjb25uZWN0ZWQuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0aGlzLl9lbmRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignQ29ubmVjdGlvbiBoYXMgZW5kZWQuJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdHJlYW1Db25uZWN0aW9uID0gbmV3IFdlYlNvY2tldENsaWVudFdpdGhOZXR3b3JrSW5mb3JtYXRpb24oe1xuICAgICAgICAgIGRpc2Nvbm5lY3Rpb25IYW5kbGVyOiByZXNvbHZlLFxuICAgICAgICAgIG5ldHdvcmtJbmZvcm1hdGlvbjogdGhpcy4jbmV0d29ya0luZm9ybWF0aW9uLFxuICAgICAgICAgIHJlcXVlc3RIYW5kbGVyOiB7XG4gICAgICAgICAgICBwcm9jZXNzUmVxdWVzdDogc3RyZWFtaW5nUmVxdWVzdCA9PiB7XG4gICAgICAgICAgICAgIC8vIElmIGBzdHJlYW1Db25uZWN0aW9uYCBpcyBzdGlsbCBjdXJyZW50LCBhbGxvdyBjYWxsIHRvIGBwcm9jZXNzUmVxdWVzdCgpYCwgb3RoZXJ3aXNlLCBpZ25vcmUgY2FsbHMgdG8gYHByb2Nlc3NSZXF1ZXN0KClgLlxuICAgICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHpvbWJpZSBjb25uZWN0aW9ucyBmcm9tIHNlbmRpbmcgdXMgcmVxdWVzdHMuXG4gICAgICAgICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwcm9jZXNzIHN0cmVhbWluZyByZXF1ZXN0LCBgc3RyZWFtaW5nQ29ubmVjdGlvbmAgc2hvdWxkIGJlIGRpc2Nvbm5lY3RlZC4nKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnRoZVN0cmVhbUhhbmRsZXIucHJvY2Vzc1JlcXVlc3Qoc3RyZWFtaW5nUmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB1cmw6IHdzVXJsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucXVldWVBY3Rpdml0aWVzID0gdHJ1ZTtcblxuICAgICAgICBhd2FpdCB0aGlzLnN0cmVhbUNvbm5lY3Rpb24uY29ubmVjdCgpO1xuXG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBCRlNFLlN0cmVhbWluZ1JlcXVlc3QuY3JlYXRlKCdQT1NUJywgJy92My9kaXJlY3RsaW5lL2NvbnZlcnNhdGlvbnMnKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnN0cmVhbUNvbm5lY3Rpb24uc2VuZChyZXF1ZXN0KTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25uZWN0aW9uIHJlc3BvbnNlIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1c0NvZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0cmVhbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCAxIHN0cmVhbSBidXQgZ290ICcgKyByZXNwb25zZS5zdHJlYW1zLmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNwb25zZVN0cmluZyA9IGF3YWl0IHJlc3BvbnNlLnN0cmVhbXNbMF0ucmVhZEFzU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IEpTT04ucGFyc2UocmVzcG9uc2VTdHJpbmcpO1xuXG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uSWQgPSBjb252ZXJzYXRpb24uY29udmVyc2F0aW9uSWQ7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLk9ubGluZSk7XG5cbiAgICAgICAgLy8gV2FpdCB1bnRpbCBETCBjb25zdW1lcnMgaGF2ZSBoYWQgYSBjaGFuY2UgdG8gYmUgbm90aWZpZWRcbiAgICAgICAgLy8gb2YgdGhlIGNvbm5lY3Rpb24gc3RhdHVzIGNoYW5nZS5cbiAgICAgICAgLy8gVGhpcyBpcyBzcGVjaWZpYyB0byBSeEpTIGltcGxlbWVudGF0aW9uIG9mIG9ic2VydmFibGUsIHdoaWNoIGNhbGxpbmcgc3Vic2NyaWJlKCkgYWZ0ZXIgbmV4dCgpIHdpbGwgc3RpbGwgZ2V0IHRoZSB2YWx1ZS5cbiAgICAgICAgYXdhaXQgdGhpcy53YWl0VW50aWxPbmxpbmUoKTtcblxuICAgICAgICB0aGlzLnRoZVN0cmVhbUhhbmRsZXIuZmx1c2goKTtcbiAgICAgICAgdGhpcy5xdWV1ZUFjdGl2aXRpZXMgPSBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH0pLmZpbmFsbHkoKCkgPT4gYWJvcnRDb250cm9sbGVyLmFib3J0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb25uZWN0V2l0aFJldHJ5QXN5bmMoKSB7XG4gICAgLy8gVGhpcyBmb3ItbG9vcCB3aWxsIGJyZWFrIHdoZW4gc29tZW9uZSBjYWxsIGVuZCgpIGFuZCBpdCB3aWxsIHNpZ25hbCBDb25uZWN0aW9uU3RhdHVzLkVuZGVkLlxuICAgIGZvciAoOzspIHtcbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBzaWduYWwgYW5kIHdhaXQgZm9yIHNvbWVvbmUga2lja2luZyBvZmYgdGhlIGNvbm5lY3Rpb246XG4gICAgICAvLyAtIHN1YnNjcmliZSB0byBhY3Rpdml0eSQsIG9yO1xuICAgICAgLy8gLSByZXRyaWVzIGV4aGF1c3RlZCAoRmFpbGVkVG9Db25uZWN0KSwgdGhlbiwgc29tZW9uZSBjYWxsIHJlY29ubmVjdCgpXG4gICAgICBhd2FpdCAodGhpcy5jb25uZWN0RGVmZXJyZWQgPSBjcmVhdGVEZWZlcnJlZCgpKS5wcm9taXNlO1xuXG4gICAgICBsZXQgbnVtUmV0cmllcyA9IE1BWF9SRVRSWV9DT1VOVDtcblxuICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuQ29ubmVjdGluZyk7XG5cbiAgICAgIHdoaWxlIChudW1SZXRyaWVzID4gMCkge1xuICAgICAgICBudW1SZXRyaWVzLS07XG5cbiAgICAgICAgaWYgKHRoaXMuX2VuZEFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgcHJvbWlzZSB3aWxsIHJlamVjdC9yZXNvbHZlIHdoZW4gZGlzY29ubmVjdGVkLlxuICAgICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdEFzeW5jKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmICh0aGlzLl9lbmRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgc29tZW9uZSBjYWxsIGVuZCgpIHRvIGJyZWFrIHRoZSBjb25uZWN0aW9uLCB3ZSB3aWxsIG5ldmVyIGxpc3RlbiB0byBhbnkgcmVjb25uZWN0KCkuXG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLmdldFZhbHVlKCkgPT09IENvbm5lY3Rpb25TdGF0dXMuRW5kZWQpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHRoZSBsb29wIGluIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBicm9rZS5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3Qgc2lnbmFsIENvbm5lY3Rpb25TdGF0dXMuQ29ubmVjdGluZyB0d2ljZSBvciBtb3JlIHdpdGhvdXQgYW4gYWN0dWFsIGNvbm5lY3Rpb24uXG4gICAgICAgIC8vIFN1YnNlcXVlbnQgcmV0cmllcyBzaG91bGQgYmUgdHJhbnNwYXJlbnQuXG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLmdldFZhbHVlKCkgIT09IENvbm5lY3Rpb25TdGF0dXMuQ29ubmVjdGluZykge1xuICAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLkNvbm5lY3RpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBsYXN0ZWQgZm9yIG1vcmUgdGhhbiBhIG1pbnV0ZSwgdGhlIHByZXZpb3VzIGNvbm5lY3Rpb24gaXMgZ29vZCwgd2hpY2ggbWVhbnM6XG4gICAgICAgIC8vIC0gd2Ugc2hvdWxkIHJlc2V0IHRoZSByZXRyeSBjb3VudGVyLCBhbmQ7XG4gICAgICAgIC8vIC0gd2Ugc2hvdWxkIHJlY29ubmVjdCBpbW1lZGlhdGVseS5cbiAgICAgICAgaWYgKDYwMDAwIDwgRGF0ZS5ub3coKSAtIHN0YXJ0KSB7XG4gICAgICAgICAgbnVtUmV0cmllcyA9IE1BWF9SRVRSWV9DT1VOVDtcbiAgICAgICAgfSBlbHNlIGlmIChudW1SZXRyaWVzID4gMCkge1xuICAgICAgICAgIC8vIFNsZWVwIG9ubHkgaWYgd2UgYXJlIGRvaW5nIHJldHJ5LiBPdGhlcndpc2UsIHdlIGFyZSBnb2luZyB0byBicmVhayB0aGUgbG9vcCBhbmQgc2lnbmFsIEZhaWxlZFRvQ29ubmVjdC5cbiAgICAgICAgICBhd2FpdCB0aGlzLnNsZWVwKHRoaXMuZ2V0UmV0cnlEZWxheSgpKTtcblxuICAgICAgICAgIGlmICh0aGlzLl9lbmRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogW1RFU1RdIE1ha2Ugc3VyZSBGYWlsZWRUb0Nvbm5lY3QgaXMgcmVwb3J0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgbGFzdCBkaXNjb25uZWN0aW9uLCBzaG91bGQgYmUgbm8gZ2V0UmV0cnlEZWxheSgpLlxuICAgICAgLy8gRmFpbGVkIHRvIHJlY29ubmVjdCBhZnRlciBtdWx0aXBsZSByZXRyaWVzLlxuICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuRmFpbGVkVG9Db25uZWN0KTtcbiAgICB9XG5cbiAgICAvLyBOb3RlOiBObyBjb2RlIHdpbGwgaGl0IHRoaXMgbGluZS5cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGRlbGF5IGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kc1xuICBwcml2YXRlIGdldFJldHJ5RGVsYXkoKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoMzAwMCArIE1hdGgucmFuZG9tKCkgKiAxMjAwMCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBQUEsZ0JBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFdBQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLElBQUEsR0FBQUMsdUJBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLGVBQUEsR0FBQUMsc0JBQUEsQ0FBQU4sT0FBQTtBQUNBLElBQUFPLFdBQUEsR0FBQUQsc0JBQUEsQ0FBQU4sT0FBQTtBQUVBLElBQUFRLFdBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLHNDQUFBLEdBQUFILHNCQUFBLENBQUFOLE9BQUE7QUFBc0csSUFBQVUsU0FBQTtBQUFBLFNBQUFOLHdCQUFBTyxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBVCx1QkFBQSxZQUFBQSx3QkFBQU8sQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVB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