@agilemotion/oui-react-js 2.0.16 → 2.0.18

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 (36) hide show
  1. package/dist/components/Calender.css +1 -1
  2. package/dist/components/TableCellContent.js +9 -18
  3. package/dist/components/dashboard/FoldingSideTabDashboard.css +1 -1
  4. package/dist/components/dashboard/FoldingSideTabDashboard.js +10 -7
  5. package/dist/components/form/LookupField.js +27 -3
  6. package/dist/components/layout/Layout.js +15 -3
  7. package/dist/components/layout/ViewPort.js +2 -2
  8. package/dist/components/layout/Window.css +4 -1
  9. package/dist/components/layout/Window.js +147 -29
  10. package/dist/components/layout/WindowDialog.js +8 -5
  11. package/dist/components/layout/WindowViewPort.js +8 -2
  12. package/dist/components/media/Chat.js +4 -2
  13. package/dist/components/media/ClosablePanel.js +55 -27
  14. package/dist/components/media/MediaSoupHelper.js +13 -1
  15. package/dist/components/media/SideBarContent.js +22 -8
  16. package/dist/components/media/TrainingRoom.js +141 -46
  17. package/dist/components/media/VCEventType.js +3 -1
  18. package/dist/components/media/VCParticipantList.js +53 -27
  19. package/dist/components/media/VCRoom.css +22 -0
  20. package/dist/components/media/VCRoom.js +34 -15
  21. package/dist/components/media/VCRoomParticipant.css +3 -2
  22. package/dist/components/media/VCRoomParticipant.js +140 -48
  23. package/dist/components/media/VCRoomRecorder.js +117 -40
  24. package/dist/components/media/VCRoomWorkspace.css +0 -1
  25. package/dist/components/media/VCRoomWorkspace.js +158 -23
  26. package/dist/components/media/VCSettings.js +462 -0
  27. package/dist/components/media/VideoPlayer.js +4 -1
  28. package/dist/components/media/audioLevelMeter.js +96 -0
  29. package/dist/components/media/chat/ChatRoom.js +13 -9
  30. package/dist/components/media/chat/ChatRoomItem.js +3 -2
  31. package/dist/components/media/chat/ChatRoomWrapper.js +4 -1
  32. package/dist/components/media/chat/ChatRooms.scss +5 -3
  33. package/dist/hooks/useContainerWidth.js +44 -0
  34. package/dist/js/Media.js +11 -2
  35. package/dist/view/security/RegisterInteractionPortal.js +101 -3
  36. package/package.json +2 -2
@@ -26,6 +26,7 @@ var _Event = _interopRequireDefault(require("../../event/Event"));
26
26
  var _Observable = _interopRequireDefault(require("../../event/Observable"));
27
27
  var _EventType = _interopRequireDefault(require("../../event/EventType"));
28
28
  var _uuid = require("uuid");
29
+ var _useContainerWidth = _interopRequireDefault(require("../../hooks/useContainerWidth"));
29
30
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
30
31
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
31
32
  /* eslint-disable react-hooks/exhaustive-deps */
@@ -84,6 +85,7 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
84
85
  const [shareScreenConsumer, setShareScreenConsumer] = _react.default.useState(null);
85
86
  const [grid, setGrid] = _react.default.useState(null);
86
87
  const [eventHandler] = (0, _react.useState)({});
88
+ const [galleryRef, galleryWidth, galleryHeight] = (0, _useContainerWidth.default)();
87
89
  const [minutesShown, setMinutesShown] = _react.default.useState(false);
88
90
  const [showMinutes, setShowMinutes] = _react.default.useState(false);
89
91
  const [meetingViewHandler, setMeetingViewHandler] = _react.default.useState(null);
@@ -101,6 +103,11 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
101
103
  const transports = (0, _react.useRef)(new _Transports.default());
102
104
  const shareScreenVideoRef = (0, _react.useRef)();
103
105
  const shareScreenStream = (0, _react.useRef)();
106
+ // Producer-transport recovery guards: prevent overlapping recreations and
107
+ // give up after a few attempts so a permanently-down network can't spin.
108
+ const producerRecovering = (0, _react.useRef)(false);
109
+ const producerRecoveryAttempts = (0, _react.useRef)(0);
110
+ const producerRecoveryFailed = (0, _react.useRef)(false);
104
111
  const {
105
112
  waitingList,
106
113
  roomStatus,
@@ -389,6 +396,9 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
389
396
  setShowSharedScreen(false);
390
397
  }
391
398
  break;
399
+ case _VCEventType.VCEventType.PRODUCER_TRANSPORT_FAILED:
400
+ recreateProducerTransport();
401
+ break;
392
402
  }
393
403
  }
394
404
  };
@@ -401,11 +411,15 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
401
411
  inViewParticipants.splice(inViewParticipants.length - 1, 1);
402
412
  offViewParticipant.inView = false;
403
413
  }
404
- let participant = props.participants.find(p => p.userId === payload.userId);
405
- inViewParticipants.push(participant);
406
414
 
407
- // Refresh the list
408
- setInViewParticipants([].concat(inViewParticipants));
415
+ // Guard against pushing undefined (participant not in the list) — a
416
+ // stray PARTICIPANT_IN_VIEW for an unknown user otherwise crashed the grid render.
417
+ let participant = props.participants.find(p => p.userId === payload.userId);
418
+ if (participant) {
419
+ inViewParticipants.push(participant);
420
+ // Refresh the list
421
+ setInViewParticipants([].concat(inViewParticipants));
422
+ }
409
423
  }
410
424
  };
411
425
  const removeFromView = participant => {
@@ -423,6 +437,51 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
423
437
  transports.current.setConsumerTransport(consumerTransport);
424
438
  transports.current.setProducerTransport(producerTransport);
425
439
  };
440
+
441
+ // Recover from a producer-transport failure by recreating it. Unlike a
442
+ // consumer failure (which hangs up — you can't see/hear anyone), losing the
443
+ // producer only stops YOUR media, so we rebuild it and let the self tile
444
+ // re-produce on the new transport (it syncs producerTransport via props).
445
+ const recreateProducerTransport = async () => {
446
+ if (producerRecovering.current) {
447
+ return;
448
+ }
449
+ if (!device) {
450
+ console.error('Cannot recover producer transport: no device');
451
+ return;
452
+ }
453
+ if (producerRecoveryAttempts.current >= 3) {
454
+ console.error('Producer transport recovery gave up after 3 attempts');
455
+ // Tell the user once — their outgoing media can't be restored.
456
+ if (!producerRecoveryFailed.current) {
457
+ producerRecoveryFailed.current = true;
458
+ _VCEventManager.default.fireEvent(_VCEventType.VCEventType.SYSTEM_ALERT, {
459
+ payload: {
460
+ message: "Couldn't reconnect your audio/video. Please leave and rejoin the meeting."
461
+ }
462
+ });
463
+ }
464
+ return;
465
+ }
466
+ producerRecovering.current = true;
467
+ producerRecoveryAttempts.current += 1;
468
+ try {
469
+ console.log('Recreating producer transport (attempt ' + producerRecoveryAttempts.current + ')');
470
+ const newProducerTransport = await _MediaSoupHelper.default.initProducerTransport(device, meetingId, _ApplicationManager.default.getUserDetails().username);
471
+ if (newProducerTransport) {
472
+ // The screen-share producer (if any) was on the dead transport.
473
+ setShareScreenProducer(null);
474
+ setProducerTransport(newProducerTransport);
475
+ transports.current.setProducerTransport(newProducerTransport);
476
+ producerRecoveryAttempts.current = 0; // success resets the counter
477
+ producerRecoveryFailed.current = false;
478
+ }
479
+ } catch (e) {
480
+ console.error('Failed to recreate producer transport', e);
481
+ } finally {
482
+ producerRecovering.current = false;
483
+ }
484
+ };
426
485
  (0, _react.useEffect)(() => {
427
486
  eventHandler.api = handler();
428
487
  });
@@ -520,7 +579,7 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
520
579
  }
521
580
  }, [props.screenShared]);
522
581
  (0, _react.useEffect)(() => {
523
- _VCEventManager.default.addSubscriptions(eventHandler, _VCEventType.VCEventType.NEW_PRODUCERS, _VCEventType.VCEventType.CONSUMER_CLOSED, _VCEventType.VCEventType.PARTICIPANT_IN_VIEW);
582
+ _VCEventManager.default.addSubscriptions(eventHandler, _VCEventType.VCEventType.NEW_PRODUCERS, _VCEventType.VCEventType.CONSUMER_CLOSED, _VCEventType.VCEventType.PARTICIPANT_IN_VIEW, _VCEventType.VCEventType.PRODUCER_TRANSPORT_FAILED);
524
583
  setupSelfDevices();
525
584
  return () => {
526
585
  _VCEventManager.default.removeSubscriptions(eventHandler);
@@ -679,37 +738,113 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
679
738
  function getMeetingDocument() {
680
739
  return meetingViewHandler.value;
681
740
  }
741
+ const GALLERY_GAP = 8;
742
+
743
+ // Proportional fill layout: 1 person fills the whole area; each join
744
+ // subdivides the space. Pick the row split that maximises the smaller tile
745
+ // dimension (so faces stay big), tie-breaking toward cells shaped like the
746
+ // container — which naturally splits along the longer axis. Returns the
747
+ // participant count per row (extras land on the top rows).
748
+ function computeRowSplit(count, width, height) {
749
+ if (count <= 1) return [count || 1];
750
+ const w = width > 0 ? width : 16;
751
+ const h = height > 0 ? height : 9;
752
+ const containerAspect = w / h;
753
+ let bestRows = 1,
754
+ bestMin = -1,
755
+ bestPenalty = Infinity;
756
+ for (let rows = 1; rows <= count; rows++) {
757
+ const cols = Math.ceil(count / rows);
758
+ const cellW = w / cols;
759
+ const cellH = h / rows;
760
+ const minDim = Math.min(cellW, cellH);
761
+ const penalty = Math.abs(cellW / cellH - containerAspect);
762
+ if (minDim > bestMin + 1 || Math.abs(minDim - bestMin) <= 1 && penalty < bestPenalty) {
763
+ bestRows = rows;
764
+ bestMin = minDim;
765
+ bestPenalty = penalty;
766
+ }
767
+ }
768
+ const base = Math.floor(count / bestRows);
769
+ let extra = count % bestRows;
770
+ const perRow = [];
771
+ for (let i = 0; i < bestRows; i++) {
772
+ perRow.push(base + (extra-- > 0 ? 1 : 0));
773
+ }
774
+ return perRow;
775
+ }
682
776
  function renderParticipantGrid() {
777
+ const count = inViewParticipants.length;
778
+ const perRow = computeRowSplit(count, galleryWidth, galleryHeight);
779
+ // Pre-slice participants into their rows.
780
+ const rows = [];
781
+ let idx = 0;
782
+ for (const n of perRow) {
783
+ rows.push(inViewParticipants.slice(idx, idx + n));
784
+ idx += n;
785
+ }
786
+ // Every tile is the same width (a 1/maxCols slice). A short last row keeps
787
+ // that width and centres, instead of one lone tile stretching full-width.
788
+ const maxCols = perRow.length ? Math.max(...perRow) : 1;
789
+ const tileWidth = 'calc((100% - ' + (maxCols - 1) * GALLERY_GAP + 'px) / ' + maxCols + ')';
683
790
  return (!screenShared && !whiteBoardShown && !minutesShown || screenShared && !showSharedScreen && !someoneSharing && !minutesShown) && /*#__PURE__*/_react.default.createElement(_Box.default, {
684
791
  style: {
685
792
  flexGrow: 1,
686
793
  height: displayState === 'MAXIMIZED' ? 'calc(100% - 232px)' : '100%',
687
794
  width: '100%',
688
- justifyContent: 'center',
689
- alignItems: 'center',
690
- display: 'flex'
795
+ display: 'flex',
796
+ boxSizing: 'border-box',
797
+ padding: GALLERY_GAP + 'px'
691
798
  }
692
- }, /*#__PURE__*/_react.default.createElement(_Grid.default, {
693
- container: true,
694
- spacing: 1,
799
+ }, /*#__PURE__*/_react.default.createElement("div", {
800
+ ref: galleryRef,
695
801
  style: {
696
- width: '100%',
697
802
  display: 'flex',
698
- alignItems: 'center',
699
- maxHeight: '100%',
803
+ flexDirection: 'column',
804
+ width: '100%',
700
805
  height: '100%',
701
- overflowY: 'auto',
702
- overflowX: 'hidden'
806
+ gap: GALLERY_GAP + 'px',
807
+ minWidth: 0,
808
+ minHeight: 0
703
809
  }
704
- }, grid.map((row, index) => {
810
+ }, rows.map((rowParticipants, r) => {
705
811
  return /*#__PURE__*/_react.default.createElement("div", {
812
+ key: r,
706
813
  style: {
707
- width: '100%',
708
- height: '280px'
814
+ display: 'flex',
815
+ flexDirection: 'row',
816
+ flex: 1,
817
+ gap: GALLERY_GAP + 'px',
818
+ justifyContent: 'center',
819
+ minWidth: 0,
820
+ minHeight: 0
709
821
  }
710
- }, /*#__PURE__*/_react.default.createElement(_react.Fragment, {
711
- key: index
712
- }, renderRow(row, index)));
822
+ }, rowParticipants.map(participant => {
823
+ return /*#__PURE__*/_react.default.createElement("div", {
824
+ key: participant.userId,
825
+ style: {
826
+ flex: '0 0 auto',
827
+ width: tileWidth,
828
+ minWidth: 0,
829
+ minHeight: 0
830
+ }
831
+ }, /*#__PURE__*/_react.default.createElement(_VCRoomParticipant.default, {
832
+ data: participant,
833
+ device: device,
834
+ meetingId: meetingId,
835
+ sizing: displayState === 'MINIMIZED' ? 'sm' : 'md',
836
+ audioMuted: participant.audioMuted,
837
+ videoMuted: participant.videoMuted,
838
+ onRemoveFromView: participant => removeFromView(participant),
839
+ consumerTransport: consumerTransport,
840
+ numberOfInViewParticipants: inViewParticipants.length,
841
+ participants: participants,
842
+ rtpCapabilities: rtpCapabilities,
843
+ onHostAudioMute: () => props.onHostAudioMute(participant),
844
+ onHostVideoMute: () => props.onHostVideoMute(participant),
845
+ isHost: isHost
846
+ }));
847
+ }));
713
848
  })));
714
849
  }
715
850
  return device ? /*#__PURE__*/_react.default.createElement("div", {
@@ -837,4 +972,4 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
837
972
  }))) : null;
838
973
  });
839
974
  var _default = exports.default = VCRoomWorkspace;
840
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfR3JpZCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfVkNSb29tUGFydGljaXBhbnQiLCJfQm94IiwiX1ZDRXZlbnRNYW5hZ2VyIiwiX01lZGlhU291cEhlbHBlciIsIl9UcmFuc3BvcnRzIiwiX1ZDRXZlbnRUeXBlIiwiX0ljb24iLCJfU29ja2V0TWFuYWdlciIsIl9Mb2JieVdhaXRpbmdMaXN0IiwiX1ZDUm9vbSIsIl9TaWRlQmFyQ29udGVudCIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfV29yZERvY3VtZW50Vmlld2VyIiwiX1V0aWxzIiwiX0RvY3VtZW50Vmlld2VyIiwiX0V2ZW50IiwiX09ic2VydmFibGUiLCJfRXZlbnRUeXBlIiwiX3V1aWQiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJNQVhfQ09MUyIsIk1BWF9ST1dTIiwibWVldGluZ1ZpZXdDb25maWcyIiwiVkNSb29tV29ya3NwYWNlIiwiUmVhY3QiLCJmb3J3YXJkUmVmIiwicHJvcHMiLCJyZWYiLCJjdXJyZW50VXNlclBhcnRpY2lwYW50Iiwic2V0Q3VycmVudFVzZXJQYXJ0aWNpcGFudCIsInVzZVN0YXRlIiwiaW5WaWV3UGFydGljaXBhbnRzIiwic2V0SW5WaWV3UGFydGljaXBhbnRzIiwiY29uc3VtZXJUcmFuc3BvcnQiLCJzZXRDb25zdW1lclRyYW5zcG9ydCIsImRldmljZSIsInNldERldmljZSIsInNoYXJlU2NyZWVuUHJvZHVjZXIiLCJzZXRTaGFyZVNjcmVlblByb2R1Y2VyIiwicHJvZHVjZXJUcmFuc3BvcnQiLCJzZXRQcm9kdWNlclRyYW5zcG9ydCIsInNjcmVlblNoYXJlZCIsInNldFNjcmVlblNoYXJlZCIsInNvbWVvbmVTaGFyaW5nIiwic2V0U29tZW9uZVNoYXJpbmciLCJzaG93U2hhcmVkU2NyZWVuIiwic2V0U2hvd1NoYXJlZFNjcmVlbiIsIm1lc3NhZ2UiLCJzZXRNZXNzYWdlIiwic2hhcmVTY3JlZW5Db25zdW1lciIsInNldFNoYXJlU2NyZWVuQ29uc3VtZXIiLCJncmlkIiwic2V0R3JpZCIsImV2ZW50SGFuZGxlciIsIm1pbnV0ZXNTaG93biIsInNldE1pbnV0ZXNTaG93biIsInNob3dNaW51dGVzIiwic2V0U2hvd01pbnV0ZXMiLCJtZWV0aW5nVmlld0hhbmRsZXIiLCJzZXRNZWV0aW5nVmlld0hhbmRsZXIiLCJtaW51dGVzRG9jdW1lbnQiLCJzZXRNaW51dGVzRG9jdW1lbnQiLCJtZWV0aW5nVmlld0NvbmZpZyIsInNldE1lZXRpbmdWaWV3Q29uZmlnIiwiaGFzTG9hZGVkTWludXRlcyIsInNldEhhc0xvYWRlZE1pbnV0ZXMiLCJ1c2VFZmZlY3QiLCJ3b3JkRWRpdG9yVmFsdWVIYW5kbGVyIiwidXNlUmVmIiwidHJhbnNwb3J0cyIsIlRyYW5zcG9ydHMiLCJzaGFyZVNjcmVlblZpZGVvUmVmIiwic2hhcmVTY3JlZW5TdHJlYW0iLCJ3YWl0aW5nTGlzdCIsInJvb21TdGF0dXMiLCJtZWV0aW5nSWQiLCJtaW51dGVzRG9jdW1lbnRJZCIsImV2ZW50S2V5IiwibWVldGluZ0NoYXQiLCJzaWRlQmFyVGFiIiwibWVldGluZ1RpdGxlIiwid2hpdGVCb2FyZFNob3duIiwidmlkZW9NdXRlZCIsImF1ZGlvTXV0ZWQiLCJpc0hvc3QiLCJpc0NoYWlyUGVyc29uIiwicnRwQ2FwYWJpbGl0aWVzIiwib25sb2FkU2NyZWVuU2hhcmVEYXRhIiwiZGlzcGxheVN0YXRlIiwic3RhcnRTY3JlZW5TaGFyaW5nIiwicGFydGljaXBhbnRzIiwic3RhcnRTaG93aW5nTWludXRlcyIsIm9uU3RhcnRTaG93aW5nTWludXRlcyIsIm9uU3RvcFNob3dpbmdNaW51dGVzIiwibWludXRlc1Nob3duUHJvcCIsInNhdmVNaW51dGVzIiwiYXBpIiwiY29uc29sZSIsImVycm9yIiwiZmlsZSIsImdldERvY3VtZW50VmFsdWUiLCJuZXdEb2N1bWVudElkIiwidXVpZHY0IiwibWV0YWRhdGEiLCJkb2N1bWVudFJlcG9zaXRvcnlDYWNoZUlkIiwiY29ycmVsYXRpb25JZCIsInZpZXdJZCIsIm5hbWUiLCJ0eXBlIiwiYWNjZXNzVG9rZW4iLCJzZXNzaW9uU3RvcmFnZSIsImdldEl0ZW0iLCJpZFRva2VuIiwibG9jYXRpb24iLCJ3aW5kb3ciLCJwcm90b2NvbCIsImhvc3RuYW1lIiwiZGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiSlNPTiIsInN0cmluZ2lmeSIsImZldGNoQ29uZmlnIiwibWV0aG9kIiwiaGVhZGVycyIsImFwcGxpY2F0aW9uTWFuYWdlciIsImdldEFjdGl2ZVRlbmFudCIsImJvZHkiLCJ1cGxvYWRVcmwiLCJnZXRDb250ZXh0Um9vdCIsInVwbG9hZFJlc3BvbnNlIiwiZmV0Y2giLCJlbmNvZGVVUkkiLCJvayIsIkVycm9yIiwidXBkYXRlUGF5bG9hZCIsImlkIiwidXBkYXRlRmV0Y2hDb25maWciLCJ1cGRhdGVVcmwiLCJ1cGRhdGVSZXNwb25zZSIsImxvZyIsIm1lc3NhZ2VUeXBlIiwiZXZlbnQiLCJFdmVudCIsImV2ZW50TWFuYWdlciIsImZpcmVFdmVudCIsIkV2ZW50VHlwZSIsIk1FU1NBR0VfQVJSSVZFRCIsInVzZUltcGVyYXRpdmVIYW5kbGUiLCJzdGFydFNoYXJlU2NyZWVuIiwicHJvZHVjZVNjcmVlblNoYXJlIiwic3RvcFNoYXJlU2NyZWVuIiwiY3VycmVudCIsInRyYWNrIiwiZ2V0VHJhY2tzIiwic3RvcCIsInJlbW92ZVNoYXJlU2NyZWVuRWxlbWVudCIsIm9uU3RvcFNoYXJpbmciLCJjYW5Qcm9kdWNlIiwidmlkZW9Db25zdHJhaW50cyIsImN1cnNvciIsImF1ZGlvIiwidmlkZW8iLCJtYW5kYXRvcnkiLCJ3aWR0aCIsIm1pbiIsImlkZWFsIiwibWF4IiwiaGVpZ2h0IiwiZnJhbWVSYXRlIiwiZ29vZ0NwdU92ZXJ1c2VEZXRlY3Rpb24iLCJnb29nQ3B1T3ZlcnVzZUVuY29kZVVzYWdlIiwiZ29vZ0NwdU92ZXJ1c2VUaHJlc2hvbGQiLCJwcmVmZXJDdXJyZW50VGFiIiwic2VsZkJyb3dzZXJTdXJmYWNlIiwic3lzdGVtQXVkaW8iLCJzdXJmYWNlU3dpdGNoaW5nIiwibW9uaXRvclR5cGVTdXJmYWNlcyIsInNvY2tldE1hbmFnZXIiLCJlbWl0RXZlbnQiLCJWQ0V2ZW50VHlwZSIsIkNBTkNFTF9TQ1JFRU5fU0hBUkUiLCJyb29tSWQiLCJ0aGVuIiwicmVzdWx0IiwibmF2aWdhdG9yIiwibWVkaWFEZXZpY2VzIiwiZ2V0RGlzcGxheU1lZGlhIiwic3RyZWFtIiwiZ2V0VmlkZW9UcmFja3MiLCJvbmVuZGVkIiwicGFyYW1zIiwiYXBwRGF0YSIsInNjcmVlblNoYXJpbmciLCJwcm9kdWNlciIsInByb2R1Y2UiLCJzcmNPYmplY3QiLCJvbiIsImZvckVhY2giLCJvblN0YXJ0U2hhcmluZyIsImNhdGNoIiwic3RvcFByb2R1Y2luZ1NjcmVlblNoYXJlIiwicHJvZHVjZXJJZCIsIlBST0RVQ0VSX0NMT1NFRCIsInVzZXJJZCIsImdldFVzZXJEZXRhaWxzIiwidXNlcm5hbWUiLCJjbG9zZSIsIm9uTmV3UHJvZHVjZXJzIiwicHJvZHVjZXJzIiwic2NyZWVuU2hhcmVQcm9kdWNlciIsImZpbmQiLCJwIiwiY29uc3VtZSIsImVsIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsIm1lZGlhU291cEhlbHBlciIsImdldENvbnN1bWVTdHJlYW0iLCJfcmVmIiwiY29uc3VtZXIiLCJraW5kIiwic2hhcmluZ0hhbmRsZXIiLCJoYW5kbGVyIiwiZXZlbnRUeXBlIiwiYmUiLCJQQVJUSUNJUEFOVF9JTl9WSUVXIiwib25CcmluZ1RvVmlldyIsIk5FV19QUk9EVUNFUlMiLCJwYXlsb2FkIiwiQ09OU1VNRVJfQ0xPU0VEIiwiY29uc3VtZXJJZCIsImxlbmd0aCIsIm9mZlZpZXdQYXJ0aWNpcGFudCIsInZjRXZlbnRNYW5hZ2VyIiwiUEFSVElDSVBBTlRfT0ZGX1ZJRVciLCJzcGxpY2UiLCJpblZpZXciLCJwYXJ0aWNpcGFudCIsInB1c2giLCJjb25jYXQiLCJyZW1vdmVGcm9tVmlldyIsImZpbHRlciIsInNldHVwU2VsZkRldmljZXMiLCJnZXRQYXJ0aWNpcGFudERldmljZSIsImluaXRDb25zdW1lclRyYW5zcG9ydCIsImluaXRQcm9kdWNlclRyYW5zcG9ydCIsInNldHVwR3JpZCIsIm5ld0NvbmZpZyIsImxvYWREYXRhIiwicmVmcmVzaCIsImFkZFN1YnNjcmlwdGlvbnMiLCJyZW1vdmVTdWJzY3JpcHRpb25zIiwiY2xvc2VDb25zdW1lclRyYW5zcG9ydCIsImNsb3NlUHJvZHVjZXJUcmFuc3BvcnQiLCJvbkdyaWRTZXR1cCIsImN1cnJlbnRVc2VyRnVsbE5hbWUiLCJpc0N1cnJlbnRVc2VyIiwicGVlciIsImF2YXRhcklkIiwiY291bnRlciIsImluVmlld0dyaWQiLCJudW1Sb3dzIiwicm93cyIsImN1cnJlbnRSb3dJbmRleCIsInJlbmRlclN0cmlwIiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwib3ZlcmZsb3dYIiwibWF4V2lkdGgiLCJib3JkZXJSYWRpdXMiLCJvdmVyZmxvd1kiLCJhbGlnbkl0ZW1zIiwiY2xhc3NOYW1lIiwibWFwIiwiaW5kZXgiLCJrZXkiLCJtaW5XaWR0aCIsInBhZGRpbmciLCJvblJlbW92ZUZyb21WaWV3IiwibnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHMiLCJzaXppbmciLCJvbkhvc3RBdWRpb011dGUiLCJvbkhvc3RWaWRlb011dGUiLCJyZW5kZXJSb3ciLCJyb3ciLCJqdXN0aWZ5Q29udGVudCIsImRpcmVjdGlvbiIsImNvbnRhaW5lciIsIml0ZW0iLCJzcGFjaW5nIiwiRnJhZ21lbnQiLCJmbGV4QmFzaXMiLCJyZW5kZXJDdXJyZW50UGFydGljaXBhbnQiLCJvbkF1ZGlvRGV2aWNlQ2hhbmdlIiwiZ2V0TWVldGluZ0RvY3VtZW50IiwidmFsdWUiLCJyZW5kZXJQYXJ0aWNpcGFudEdyaWQiLCJmbGV4R3JvdyIsImRpc3BsYXkiLCJtYXhIZWlnaHQiLCJhbGxVc2VyUGFydGljaXBhbnRzTGVmdCIsImZvbnRTaXplIiwidGV4dEFsaWduIiwiV0FJVElOR19GT1JfT1RIRVJTX1RPX0pPSU5fTUVTU0FHRSIsInRhYiIsImF1dG9QbGF5IiwibXV0ZWQiLCJ6SW5kZXgiLCJiYWNrZ3JvdW5kQ29sb3IiLCJvdmVyZmxvdyIsImNvbmZpZyIsImhhbmRsZSIsIm1hcmdpblJpZ2h0IiwidmVydGljYWxBbGlnbiIsImJvdHRvbSIsInJpZ2h0IiwicGFkZGluZ0xlZnQiLCJtYXJnaW5MZWZ0IiwicG9zaXRpb24iLCJ0b3AiLCJhdXRvSGVpZ2h0IiwicmVqZWN0VXNlckhhbmRsZXIiLCJhY2NlcHRVc2VySGFuZGxlciIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tZWRpYS9WQ1Jvb21Xb3Jrc3BhY2UuanN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAqL1xuaW1wb3J0IFJlYWN0LCB7RnJhZ21lbnQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0ICcuL1ZDUm9vbVdvcmtzcGFjZS5jc3MnO1xuaW1wb3J0IEdyaWQgZnJvbSAnQG11aS9tYXRlcmlhbC9HcmlkJztcbmltcG9ydCBWQ1Jvb21QYXJ0aWNpcGFudCBmcm9tICcuL1ZDUm9vbVBhcnRpY2lwYW50JztcbmltcG9ydCBCb3ggZnJvbSAnQG11aS9tYXRlcmlhbC9Cb3gnO1xuaW1wb3J0IHZjRXZlbnRNYW5hZ2VyIGZyb20gJy4vVkNFdmVudE1hbmFnZXInO1xuaW1wb3J0IG1lZGlhU291cEhlbHBlciBmcm9tICcuL01lZGlhU291cEhlbHBlcic7XG5pbXBvcnQgVHJhbnNwb3J0cyBmcm9tICcuL1RyYW5zcG9ydHMnO1xuaW1wb3J0IHtWQ0V2ZW50VHlwZX0gZnJvbSAnLi9WQ0V2ZW50VHlwZSc7XG5pbXBvcnQgSWNvbiBmcm9tICcuLi9JY29uJztcbmltcG9ydCBzb2NrZXRNYW5hZ2VyIGZyb20gJy4uL1NvY2tldE1hbmFnZXInO1xuaW1wb3J0IExvYmJ5V2FpdGluZ0xpc3QgZnJvbSAnLi9Mb2JieVdhaXRpbmdMaXN0JztcbmltcG9ydCB7V0FJVElOR19GT1JfT1RIRVJTX1RPX0pPSU5fTUVTU0FHRX0gZnJvbSAnLi9WQ1Jvb20nO1xuaW1wb3J0IFNpZGVCYXJDb250ZW50IGZyb20gXCIuL1NpZGVCYXJDb250ZW50XCI7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gXCIuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXJcIjtcbmltcG9ydCBXb3JkRG9jdW1lbnRWaWV3ZXIgZnJvbSAnLi4vV29yZERvY3VtZW50Vmlld2VyJztcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vLi4vVXRpbHNcIjtcbmltcG9ydCBEb2N1bWVudFZpZXdlciBmcm9tIFwiLi4vRG9jdW1lbnRWaWV3ZXJcIjtcbmltcG9ydCBFdmVudCBmcm9tIFwiLi4vLi4vZXZlbnQvRXZlbnRcIjtcbmltcG9ydCBldmVudE1hbmFnZXIgZnJvbSBcIi4uLy4uL2V2ZW50L09ic2VydmFibGVcIjtcbmltcG9ydCBFdmVudFR5cGUgZnJvbSBcIi4uLy4uL2V2ZW50L0V2ZW50VHlwZVwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSBcInV1aWRcIjtcblxuY29uc3QgTUFYX0NPTFMgPSAzO1xuY29uc3QgTUFYX1JPV1MgPSAyO1xuXG5jb25zdCBtZWV0aW5nVmlld0NvbmZpZzIgPSB7XG4gICAgXCJ0eXBlXCI6IFwiZG9jdW1lbnRWaWV3ZXJcIixcbiAgICBcImlkXCI6IFwibWVldGluZ01pbnV0ZVwiLFxuICAgIFwiZmlsZVR5cGVcIjogXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudFwiLFxuICAgIFwiYXR0cmlidXRlc1wiOiB7XG4gICAgICAgIFwic3R5bGVcIjoge1xuICAgICAgICAgICAgXCJ3aWR0aFwiOiBcIjEwMCVcIixcbiAgICAgICAgICAgIFwibWluSGVpZ2h0XCI6IFwiMTAwJVwiLFxuICAgICAgICAgICAgXCJoZWlnaHRcIjogXCIxMDAlXCIsXG4gICAgICAgICAgICBcInBhZGRpbmdcIjogXCIyNHB4XCJcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJ0cmFja0NoYW5nZXNcIjogZmFsc2UsXG4gICAgXCJyZWFkT25seVwiOiBmYWxzZSxcbiAgICBcImNvbW1lbnRzT25seVwiOiBmYWxzZSxcbiAgICBcImV2ZW50SGFuZGxpbmdDb25maWdcIjoge1xuICAgICAgICBcInN1YnNjcmlwdGlvbnNcIjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwicHVibGlzaGVyXCI6IFwidmNSb29tXCIsXG4gICAgICAgICAgICAgICAgXCJldmVudFR5cGVcIjogXCJEQVRBX0FSUklWRURcIixcbiAgICAgICAgICAgICAgICBcImFjdGlvbnNcIjogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImFjdGlvblR5cGVcIjogXCJsb2FkRGF0YVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9LFxuICAgIFwiZGF0YVNlcnZpY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJyZXN0XCIsXG4gICAgICAgIFwidXJsXCI6IFwiL2RvY3MvYXBpL3YxL21hbmFnZXIvZmluZFwiLFxuICAgICAgICBcIm1ldGhvZFwiOiBcIkdFVFwiLFxuICAgICAgICBcInBhcmFtZXRlcnNcIjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImRvY3VtZW50SWRcIixcbiAgICAgICAgICAgICAgICBcImh0dHBQYXJhbWV0ZXJUeXBlXCI6IFwiUEFUSF9WQVJJQUJMRVwiLFxuICAgICAgICAgICAgICAgIFwidmFsdWVcIjogXCJjMjhhNGE1Ni02ZmMwLTQ4ODctYmNhMC0yOWY0M2RhMGIzYjJcIlxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfVxufVxuXG4vLyBUT0RPIDogQ2xlYW4tdXAgYWxsIHRyYWNrcyBhbmQgcHJvZHVjZXJzIGFuZCBjb25zdW1lcnMgd2hlbiB0aGUgY29tcG9uZW50IGNsb3Nlc1xuY29uc3QgVkNSb29tV29ya3NwYWNlID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xuICAgIGNvbnN0IFtjdXJyZW50VXNlclBhcnRpY2lwYW50LCBzZXRDdXJyZW50VXNlclBhcnRpY2lwYW50XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtpblZpZXdQYXJ0aWNpcGFudHMsIHNldEluVmlld1BhcnRpY2lwYW50c10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW2NvbnN1bWVyVHJhbnNwb3J0LCBzZXRDb25zdW1lclRyYW5zcG9ydF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICAvL2NvbnN0IFt2aWRlb1JlZnJlc2hlciwgc2V0VmlkZW9SZWZyZXNoZXJdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtkZXZpY2UsIHNldERldmljZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbc2hhcmVTY3JlZW5Qcm9kdWNlciwgc2V0U2hhcmVTY3JlZW5Qcm9kdWNlcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbcHJvZHVjZXJUcmFuc3BvcnQsIHNldFByb2R1Y2VyVHJhbnNwb3J0XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtzY3JlZW5TaGFyZWQsIHNldFNjcmVlblNoYXJlZF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbc29tZW9uZVNoYXJpbmcsIHNldFNvbWVvbmVTaGFyaW5nXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtzaG93U2hhcmVkU2NyZWVuLCBzZXRTaG93U2hhcmVkU2NyZWVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbbWVzc2FnZSwgc2V0TWVzc2FnZV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gICAgY29uc3QgW3NoYXJlU2NyZWVuQ29uc3VtZXIsIHNldFNoYXJlU2NyZWVuQ29uc3VtZXJdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2dyaWQsIHNldEdyaWRdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2V2ZW50SGFuZGxlcl0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW21pbnV0ZXNTaG93biwgc2V0TWludXRlc1Nob3duXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbc2hvd01pbnV0ZXMsIHNldFNob3dNaW51dGVzXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbbWVldGluZ1ZpZXdIYW5kbGVyLCBzZXRNZWV0aW5nVmlld0hhbmRsZXJdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW21pbnV0ZXNEb2N1bWVudCwgc2V0TWludXRlc0RvY3VtZW50XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFttZWV0aW5nVmlld0NvbmZpZywgc2V0TWVldGluZ1ZpZXdDb25maWddID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2hhc0xvYWRlZE1pbnV0ZXMsIHNldEhhc0xvYWRlZE1pbnV0ZXNdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgLy8gQ3JlYXRlIGhhbmRsZXIgb25jZSBvbiBtb3VudFxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghbWVldGluZ1ZpZXdIYW5kbGVyKSB7XG4gICAgICAgICAgICBzZXRNZWV0aW5nVmlld0hhbmRsZXIoe30pO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3Qgd29yZEVkaXRvclZhbHVlSGFuZGxlciA9IHVzZVJlZih7fSk7XG4gICAgY29uc3QgdHJhbnNwb3J0cyA9IHVzZVJlZihuZXcgVHJhbnNwb3J0cygpKTtcbiAgICBjb25zdCBzaGFyZVNjcmVlblZpZGVvUmVmID0gdXNlUmVmKCk7XG4gICAgY29uc3Qgc2hhcmVTY3JlZW5TdHJlYW0gPSB1c2VSZWYoKTtcbiAgICBjb25zdCB7XG4gICAgICAgIHdhaXRpbmdMaXN0LFxuICAgICAgICByb29tU3RhdHVzLFxuICAgICAgICBtZWV0aW5nSWQsXG4gICAgICAgIG1pbnV0ZXNEb2N1bWVudElkLFxuICAgICAgICBldmVudEtleSxcbiAgICAgICAgbWVldGluZ0NoYXQsXG4gICAgICAgIHNpZGVCYXJUYWIsXG4gICAgICAgIG1lZXRpbmdUaXRsZSxcbiAgICAgICAgd2hpdGVCb2FyZFNob3duLFxuICAgICAgICB2aWRlb011dGVkLFxuICAgICAgICBhdWRpb011dGVkLFxuICAgICAgICBpc0hvc3QsXG4gICAgICAgIGlzQ2hhaXJQZXJzb24sXG4gICAgICAgIHJ0cENhcGFiaWxpdGllcyxcbiAgICAgICAgb25sb2FkU2NyZWVuU2hhcmVEYXRhLFxuICAgICAgICBkaXNwbGF5U3RhdGUsXG4gICAgICAgIHN0YXJ0U2NyZWVuU2hhcmluZyxcbiAgICAgICAgcGFydGljaXBhbnRzLFxuICAgICAgICBzdGFydFNob3dpbmdNaW51dGVzLFxuICAgICAgICBvblN0YXJ0U2hvd2luZ01pbnV0ZXMsXG4gICAgICAgIG9uU3RvcFNob3dpbmdNaW51dGVzLFxuICAgICAgICBtaW51dGVzU2hvd246IG1pbnV0ZXNTaG93blByb3BcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBzYXZlTWludXRlcyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICghbWVldGluZ1ZpZXdIYW5kbGVyIHx8ICFtZWV0aW5nVmlld0hhbmRsZXIuYXBpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk1lZXRpbmcgdmlldyBoYW5kbGVyIG5vdCBhdmFpbGFibGVcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgbWVldGluZ1ZpZXdIYW5kbGVyLmFwaS5nZXREb2N1bWVudFZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTm8gZG9jdW1lbnQgdG8gc2F2ZVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0RvY3VtZW50SWQgPSB1dWlkdjQoKTtcblxuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRSZXBvc2l0b3J5Q2FjaGVJZDogbmV3RG9jdW1lbnRJZCxcbiAgICAgICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBwcm9wcy52aWV3SWQgKyBcIi5taW51dGVzRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJhY2Nlc3NUb2tlblwiKTtcbiAgICAgICAgICAgIGNvbnN0IGlkVG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiaWRUb2tlblwiKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gICAgICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgZGF0YS5hcHBlbmQoXCJtZXRhZGF0YVwiLCBKU09OLnN0cmluZ2lmeShtZXRhZGF0YSkpO1xuICAgICAgICAgICAgZGF0YS5hcHBlbmQoXCJmaWxlXCIsIGZpbGUpO1xuXG4gICAgICAgICAgICBsZXQgZmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAnaWRUb2tlbic6IGlkVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICd0ZW5hbnQnOiBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QWN0aXZlVGVuYW50KClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCB1cGxvYWRVcmwgPSBsb2NhdGlvbiArIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgXCIvZG9jcy9hcGkvdjEvbWFuYWdlci91cGxvYWQvc2F2ZVwiO1xuXG4gICAgICAgICAgICBjb25zdCB1cGxvYWRSZXNwb25zZSA9IGF3YWl0IGZldGNoKGVuY29kZVVSSSh1cGxvYWRVcmwpLCBmZXRjaENvbmZpZyk7XG4gICAgICAgICAgICBpZiAoIXVwbG9hZFJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IGV2ZW50S2V5LFxuICAgICAgICAgICAgICAgIG1pbnV0ZXNEb2N1bWVudElkOiBuZXdEb2N1bWVudElkXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgdXBkYXRlRmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAnaWRUb2tlbic6IGlkVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICd0ZW5hbnQnOiBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QWN0aXZlVGVuYW50KClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHVwZGF0ZVBheWxvYWQpXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgdXBkYXRlVXJsID0gbG9jYXRpb24gKyBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0Q29udGV4dFJvb3QoKSArIFwiL3RlbmRlci9hcGkvdjEvZXZhbHVhdGlvbi9tZWV0aW5nL21pbnV0ZURvY3VtZW50XCI7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVSZXNwb25zZSA9IGF3YWl0IGZldGNoKGVuY29kZVVSSSh1cGRhdGVVcmwpLCB1cGRhdGVGZXRjaENvbmZpZyk7XG5cbiAgICAgICAgICAgIGlmICghdXBkYXRlUmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byB1cGRhdGUgbWVldGluZyBtaW51dGVzIGRvY3VtZW50Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTWludXRlcyBzYXZlZCBzdWNjZXNzZnVsbHlcIik7XG5cbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VUeXBlOiAnU1VDQ0VTUycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ01lZXRpbmcgbWludXRlcyBzYXZlZCBzdWNjZXNzZnVsbHknXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KG1lZXRpbmdWaWV3SGFuZGxlciwgcHJvcHMudmlld0lkLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBzYXZpbmcgbWludXRlczpcIiwgZSk7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogJ0VSUk9SJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRmFpbGVkIHRvIHNhdmUgbWVldGluZyBtaW51dGVzJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChtZWV0aW5nVmlld0hhbmRsZXIsIHByb3BzLnZpZXdJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICAgICAgc2F2ZU1pbnV0ZXNcbiAgICB9KSk7XG5cbiAgICBjb25zdCBzdGFydFNoYXJlU2NyZWVuID0gKCkgPT4ge1xuICAgICAgICBwcm9kdWNlU2NyZWVuU2hhcmUoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RvcFNoYXJlU2NyZWVuID0gKCkgPT4ge1xuICAgICAgICBpZiAoc2hhcmVTY3JlZW5TdHJlYW0uY3VycmVudCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB0cmFjayBvZiBzaGFyZVNjcmVlblN0cmVhbS5jdXJyZW50LmdldFRyYWNrcygpKSB7XG4gICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzaGFyZVNjcmVlblN0cmVhbS5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHJlbW92ZVNoYXJlU2NyZWVuRWxlbWVudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvcHMub25TdG9wU2hhcmluZygpO1xuICAgIH07XG5cbiAgICBjb25zdCBwcm9kdWNlU2NyZWVuU2hhcmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghZGV2aWNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBhdmFpbGFibGUgZGV2aWNlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXByb2R1Y2VyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBwcm9kdWNlciB0cmFuc3BvcnQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGV2aWNlLmNhblByb2R1Y2UoJ3ZpZGVvJykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBwcm9kdWNlIHNjcmVlbiBzaGFyZScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNoYXJlU2NyZWVuUHJvZHVjZXIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTaGFyZSBzY3JlZW4gcHJvZHVjZXIgYWxyZWFkeSBleGlzdCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmlkZW9Db25zdHJhaW50cyA9IHtcbiAgICAgICAgICAgIGN1cnNvcjogdHJ1ZSxcbiAgICAgICAgICAgIGF1ZGlvOiBmYWxzZSxcbiAgICAgICAgICAgIHZpZGVvOiB7XG4gICAgICAgICAgICAgICAgbWFuZGF0b3J5OiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDE2MCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkZWFsOiAzMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg6IDY0MFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMTIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWRlYWw6IDI0MCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heDogNDgwXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGZyYW1lUmF0ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAxNSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heDogMTVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZ29vZ0NwdU92ZXJ1c2VEZXRlY3Rpb246IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGdvb2dDcHVPdmVydXNlRW5jb2RlVXNhZ2U6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGdvb2dDcHVPdmVydXNlVGhyZXNob2xkOiA3MFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmVmZXJDdXJyZW50VGFiOiBmYWxzZSxcbiAgICAgICAgICAgIHNlbGZCcm93c2VyU3VyZmFjZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgc3lzdGVtQXVkaW86ICdleGNsdWRlJyxcbiAgICAgICAgICAgIHN1cmZhY2VTd2l0Y2hpbmc6ICdleGNsdWRlJyxcbiAgICAgICAgICAgIG1vbml0b3JUeXBlU3VyZmFjZXM6ICdpbmNsdWRlJ1xuXG4gICAgICAgIH07XG5cbiAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuQ0FOQ0VMX1NDUkVFTl9TSEFSRSwge1xuICAgICAgICAgICAgcm9vbUlkOiBtZWV0aW5nSWRcbiAgICAgICAgfSkudGhlbihhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldERpc3BsYXlNZWRpYSh2aWRlb0NvbnN0cmFpbnRzKVxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIChzdHJlYW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhY2sgPSBzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXTtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2sub25lbmRlZCA9IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFNoYXJlU2NyZWVuKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuU2hhcmluZzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9kdWNlciA9IGF3YWl0IHByb2R1Y2VyVHJhbnNwb3J0LnByb2R1Y2UocGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2hhcmVTY3JlZW5Qcm9kdWNlcihwcm9kdWNlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgc2hhcmVTY3JlZW5TdHJlYW0uY3VycmVudCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dTaGFyZWRTY3JlZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlU2NyZWVuVmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwcm9kdWNlci5vbigndHJhbnNwb3J0Y2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc3JjT2JqZWN0LmdldFRyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hhcmVTY3JlZW5Qcm9kdWNlcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXIub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNoYXJlU2NyZWVuUHJvZHVjZXIobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm9uU3RhcnRTaGFyaW5nKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMub25TdG9wU2hhcmluZygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KS5jYXRjaCgoZSkgPT4gY29uc29sZS5sb2coJ0VSUk9SIENBTkNFTExJTkcgU0NSRUVOIFNIQVJFIDogJywgZSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBzdG9wUHJvZHVjaW5nU2NyZWVuU2hhcmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghc2hhcmVTY3JlZW5Qcm9kdWNlcikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RoZXJlIGlzIG5vIHNoYXJlIHNjcmVlbiBwcm9kdWNlcicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb2R1Y2VySWQgPSBzaGFyZVNjcmVlblByb2R1Y2VyLmlkO1xuICAgICAgICBjb25zb2xlLmxvZygnQ2xvc2UgcHJvZHVjZXInLCBwcm9kdWNlcklkKTtcbiAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuUFJPRFVDRVJfQ0xPU0VELCB7XG4gICAgICAgICAgICB1c2VySWQ6IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lLFxuICAgICAgICAgICAgcHJvZHVjZXJJZCxcbiAgICAgICAgICAgIHJvb21JZDogbWVldGluZ0lkXG4gICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IGNvbnNvbGUubG9nKCdQUk9EVUNFUl9DTE9TRUQgRVJST1IgOiAnLCBlKSk7XG5cbiAgICAgICAgc2hhcmVTY3JlZW5Qcm9kdWNlci5jbG9zZSgpO1xuICAgICAgICBzdG9wU2hhcmVTY3JlZW4oKTtcbiAgICAgICAgc2V0U2hhcmVTY3JlZW5Qcm9kdWNlcihudWxsKTtcbiAgICAgICAgLy9zZXRTb21lb25lU2hhcmluZyhmYWxzZSk7XG4gICAgICAgIHNldFNjcmVlblNoYXJlZChmYWxzZSk7XG5cbiAgICAgICAgaWYgKHNoYXJlU2NyZWVuU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdHJhY2sgb2Ygc2hhcmVTY3JlZW5TdHJlYW0uY3VycmVudC5nZXRUcmFja3MoKSkge1xuICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvbk5ld1Byb2R1Y2VycyA9IChwcm9kdWNlcnMpID0+IHtcbiAgICAgICAgbGV0IHNjcmVlblNoYXJlUHJvZHVjZXIgPSBwcm9kdWNlcnMuZmluZCgocCkgPT4gcC5zY3JlZW5TaGFyaW5nKTtcbiAgICAgICAgaWYgKHNjcmVlblNoYXJlUHJvZHVjZXIpIHtcbiAgICAgICAgICAgIGNvbnN1bWUoc2NyZWVuU2hhcmVQcm9kdWNlcik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlU2hhcmVTY3JlZW5FbGVtZW50ID0gKCkgPT4ge1xuICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hhcmUtc2NyZWVuLXZpZGVvJyk7XG4gICAgICAgIGlmIChlbCkge1xuICAgICAgICAgICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY29uc3VtZSA9IGFzeW5jIChwcm9kdWNlcikgPT4ge1xuICAgICAgICBtZWRpYVNvdXBIZWxwZXIuZ2V0Q29uc3VtZVN0cmVhbShwcm9kdWNlci5wcm9kdWNlcklkLCBkZXZpY2UucnRwQ2FwYWJpbGl0aWVzLCBjb25zdW1lclRyYW5zcG9ydCxcbiAgICAgICAgICAgIG1lZXRpbmdJZCwgYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUsICd2aWRlbycpXG4gICAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXIsXG4gICAgICAgICAgICAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICBraW5kXG4gICAgICAgICAgICAgICAgIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN1bWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRTaGFyZVNjcmVlbkNvbnN1bWVyKGNvbnN1bWVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1TSEFSSU5HIENPTlNVTUU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5zaGFyaW5nSGFuZGxlcih0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNjcmVlblNoYXJlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNvbWVvbmVTaGFyaW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9zZXRTaG93U2hhcmVkU2NyZWVuKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWVzc2FnZShwcm9kdWNlci51c2VybmFtZSArICcgaXMgc2hhcmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVTY3JlZW5WaWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlU2NyZWVuU3RyZWFtLmN1cnJlbnQgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAvL3NldFZpZGVvUmVmcmVzaGVyKCF2aWRlb1JlZnJlc2hlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLm9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFja2VuZGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNoYXJlU2NyZWVuRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLm9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc3BvcnRjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTaGFyZVNjcmVlbkVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21lZXRpbmctcGFydGljaXBhbnQtZ3JpZCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IChldmVudFR5cGUsIGJlKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5QQVJUSUNJUEFOVF9JTl9WSUVXOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25CcmluZ1RvVmlldyhiZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5ORVdfUFJPRFVDRVJTOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5DT05TVU1FUl9DTE9TRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hhcmVTY3JlZW5Db25zdW1lciAmJiBzaGFyZVNjcmVlbkNvbnN1bWVyLmlkID09PSBiZS5wYXlsb2FkLmNvbnN1bWVySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTaGFyZVNjcmVlbkVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNZXNzYWdlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLnNoYXJpbmdIYW5kbGVyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTb21lb25lU2hhcmluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2NyZWVuU2hhcmVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93U2hhcmVkU2NyZWVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25CcmluZ1RvVmlldyA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmICghaW5WaWV3UGFydGljaXBhbnRzLmZpbmQoKChwKSA9PiBwLnVzZXJJZCA9PT0gcGF5bG9hZC51c2VySWQpKSkge1xuICAgICAgICAgICAgaWYgKGluVmlld1BhcnRpY2lwYW50cy5sZW5ndGggPT09IE1BWF9DT0xTICogTUFYX1JPV1MpIHtcbiAgICAgICAgICAgICAgICBsZXQgb2ZmVmlld1BhcnRpY2lwYW50ID0gaW5WaWV3UGFydGljaXBhbnRzW2luVmlld1BhcnRpY2lwYW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB2Y0V2ZW50TWFuYWdlci5maXJlRXZlbnQoVkNFdmVudFR5cGUuUEFSVElDSVBBTlRfT0ZGX1ZJRVcsIG9mZlZpZXdQYXJ0aWNpcGFudCk7XG5cbiAgICAgICAgICAgICAgICBpblZpZXdQYXJ0aWNpcGFudHMuc3BsaWNlKGluVmlld1BhcnRpY2lwYW50cy5sZW5ndGggLSAxLCAxKTtcbiAgICAgICAgICAgICAgICBvZmZWaWV3UGFydGljaXBhbnQuaW5WaWV3ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBwYXJ0aWNpcGFudCA9IHByb3BzLnBhcnRpY2lwYW50cy5maW5kKCgocCkgPT4gcC51c2VySWQgPT09IHBheWxvYWQudXNlcklkKSk7XG4gICAgICAgICAgICBpblZpZXdQYXJ0aWNpcGFudHMucHVzaChwYXJ0aWNpcGFudCk7XG5cbiAgICAgICAgICAgIC8vIFJlZnJlc2ggdGhlIGxpc3RcbiAgICAgICAgICAgIHNldEluVmlld1BhcnRpY2lwYW50cyhbXS5jb25jYXQoaW5WaWV3UGFydGljaXBhbnRzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlRnJvbVZpZXcgPSAocGFydGljaXBhbnQpID0+IHtcbiAgICAgICAgcGFydGljaXBhbnQuaW5WaWV3ID0gZmFsc2U7XG4gICAgICAgIHNldEluVmlld1BhcnRpY2lwYW50cyhpblZpZXdQYXJ0aWNpcGFudHMuZmlsdGVyKChwKSA9PiBwLnVzZXJJZCAhPT0gcGFydGljaXBhbnQudXNlcklkKSk7XG4gICAgICAgIHZjRXZlbnRNYW5hZ2VyLmZpcmVFdmVudChWQ0V2ZW50VHlwZS5QQVJUSUNJUEFOVF9PRkZfVklFVywgcGFydGljaXBhbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cFNlbGZEZXZpY2VzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgZGV2aWNlID0gYXdhaXQgbWVkaWFTb3VwSGVscGVyLmdldFBhcnRpY2lwYW50RGV2aWNlKHJ0cENhcGFiaWxpdGllcyk7XG4gICAgICAgIHNldERldmljZShkZXZpY2UpO1xuXG4gICAgICAgIGxldCBjb25zdW1lclRyYW5zcG9ydCA9IGF3YWl0IG1lZGlhU291cEhlbHBlci5pbml0Q29uc3VtZXJUcmFuc3BvcnQoZGV2aWNlLCBtZWV0aW5nSWQsIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lKTtcbiAgICAgICAgbGV0IHByb2R1Y2VyVHJhbnNwb3J0ID0gYXdhaXQgbWVkaWFTb3VwSGVscGVyLmluaXRQcm9kdWNlclRyYW5zcG9ydChkZXZpY2UsIG1lZXRpbmdJZCwgYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUpO1xuXG4gICAgICAgIHNldENvbnN1bWVyVHJhbnNwb3J0KGNvbnN1bWVyVHJhbnNwb3J0KTtcbiAgICAgICAgc2V0UHJvZHVjZXJUcmFuc3BvcnQocHJvZHVjZXJUcmFuc3BvcnQpO1xuXG4gICAgICAgIHRyYW5zcG9ydHMuY3VycmVudC5zZXRDb25zdW1lclRyYW5zcG9ydChjb25zdW1lclRyYW5zcG9ydCk7XG4gICAgICAgIHRyYW5zcG9ydHMuY3VycmVudC5zZXRQcm9kdWNlclRyYW5zcG9ydChwcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGV2ZW50SGFuZGxlci5hcGkgPSBoYW5kbGVyKCk7XG4gICAgfSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuXG4gICAgfSwgW3Byb3BzLmF1ZGlvTXV0ZWRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldHVwR3JpZCgpO1xuICAgIH0sIFtpblZpZXdQYXJ0aWNpcGFudHNdKTtcblxuICAgIC8qdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmKGdyaWQgPT09IG51bGwpIHtcbiAgICAgICAgc2V0dXBHcmlkKCk7XG4gICAgICB9XG4gICAgfSwgW2dyaWRdKTsqL1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFzY3JlZW5TaGFyZWQpIHtcbiAgICAgICAgICAgIHN0b3BQcm9kdWNpbmdTY3JlZW5TaGFyZSgpO1xuICAgICAgICB9XG4gICAgfSwgW3NjcmVlblNoYXJlZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHN0YXJ0U2NyZWVuU2hhcmluZykge1xuICAgICAgICAgICAgcHJvZHVjZVNjcmVlblNoYXJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBbc3RhcnRTY3JlZW5TaGFyaW5nXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoc3RhcnRTaG93aW5nTWludXRlcykge1xuICAgICAgICAgICAgc2V0U2hvd01pbnV0ZXModHJ1ZSk7XG4gICAgICAgICAgICBzZXRNaW51dGVzU2hvd24odHJ1ZSk7XG4gICAgICAgICAgICBvblN0YXJ0U2hvd2luZ01pbnV0ZXMoKTtcbiAgICAgICAgfVxuICAgIH0sIFtzdGFydFNob3dpbmdNaW51dGVzXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAvLyBTeW5jIHdpdGggcGFyZW50J3MgbWludXRlc1Nob3duIHN0YXRlXG4gICAgICAgIGlmIChtaW51dGVzU2hvd25Qcm9wID09PSBmYWxzZSAmJiBtaW51dGVzU2hvd24gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHNldFNob3dNaW51dGVzKGZhbHNlKTtcbiAgICAgICAgICAgIHNldE1pbnV0ZXNTaG93bihmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9LCBbbWludXRlc1Nob3duUHJvcF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKG1pbnV0ZXNEb2N1bWVudElkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiZG9jdW1lbnRWaWV3ZXJcIixcbiAgICAgICAgICAgICAgICBcImlkXCI6IFwibWVldGluZ01pbnV0ZVwiLFxuICAgICAgICAgICAgICAgIFwiZmlsZVR5cGVcIjogXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudFwiLFxuICAgICAgICAgICAgICAgIFwiYXR0cmlidXRlc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiBcImNhbGMoMTAwJSAtIDQzNnB4KVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5IZWlnaHRcIjogXCIxMDAlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhlaWdodFwiOiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGFkZGluZ1wiOiBcIjI0cHhcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcImxhYmVsXCI6IFwiTWVldGluZyBNaW51dGVzXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwidHJhY2tDaGFuZ2VzXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgXCJyZWFkT25seVwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBcImNvbW1lbnRzT25seVwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBcImV2ZW50SGFuZGxpbmdDb25maWdcIjoge1xuICAgICAgICAgICAgICAgICAgICBcInN1YnNjcmlwdGlvbnNcIjogW11cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiZGF0YVNlcnZpY2VcIjoge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJyZXN0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwidXJsXCI6IFwiL2RvY3MvYXBpL3YxL21hbmFnZXIvZmluZFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm1ldGhvZFwiOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICBcInBhcmFtZXRlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImRvY3VtZW50SWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0dHBQYXJhbWV0ZXJUeXBlXCI6IFwiUEFUSF9WQVJJQUJMRVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsdWVcIjogbWludXRlc0RvY3VtZW50SWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZXRNZWV0aW5nVmlld0NvbmZpZyhuZXdDb25maWcpO1xuICAgICAgICB9XG4gICAgfSwgW21pbnV0ZXNEb2N1bWVudElkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAobWVldGluZ1ZpZXdIYW5kbGVyICYmIG1lZXRpbmdWaWV3SGFuZGxlci5hcGkpIHtcbiAgICAgICAgICAgIG1lZXRpbmdWaWV3SGFuZGxlci5hcGkubG9hZERhdGEoKTtcbiAgICAgICAgfVxuICAgIH0sIFttZWV0aW5nVmlld0hhbmRsZXJdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChtZWV0aW5nVmlld0NvbmZpZzIgJiYgbWludXRlc0RvY3VtZW50SWQgJiYgbWVldGluZ1ZpZXdIYW5kbGVyICYmIG1lZXRpbmdWaWV3SGFuZGxlci5hcGkgJiYgc2hvd01pbnV0ZXMpIHtcbiAgICAgICAgICAgIG1lZXRpbmdWaWV3SGFuZGxlci5hcGkucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgfSwgW21pbnV0ZXNEb2N1bWVudElkLCBtZWV0aW5nVmlld0NvbmZpZzIsIG1lZXRpbmdWaWV3SGFuZGxlciwgc2hvd01pbnV0ZXNdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChvbmxvYWRTY3JlZW5TaGFyZURhdGEgJiYgZGV2aWNlICYmIGNvbnN1bWVyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICBjb25zdW1lKG9ubG9hZFNjcmVlblNoYXJlRGF0YSk7XG4gICAgICAgIH1cbiAgICB9LCBbb25sb2FkU2NyZWVuU2hhcmVEYXRhLCBkZXZpY2UsIGNvbnN1bWVyVHJhbnNwb3J0XSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRTY3JlZW5TaGFyZWQocHJvcHMuc2NyZWVuU2hhcmVkKTtcbiAgICAgICAgaWYgKHByb3BzLnNjcmVlblNoYXJlZCkge1xuICAgICAgICAgICAgc3RhcnRTaGFyZVNjcmVlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RvcFNoYXJlU2NyZWVuKCk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMuc2NyZWVuU2hhcmVkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2Y0V2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlciwgVkNFdmVudFR5cGUuTkVXX1BST0RVQ0VSUywgVkNFdmVudFR5cGUuQ09OU1VNRVJfQ0xPU0VELCBWQ0V2ZW50VHlwZS5QQVJUSUNJUEFOVF9JTl9WSUVXKTtcbiAgICAgICAgc2V0dXBTZWxmRGV2aWNlcygpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIucmVtb3ZlU3Vic2NyaXB0aW9ucyhldmVudEhhbmRsZXIpO1xuICAgICAgICAgICAgdHJhbnNwb3J0cy5jdXJyZW50LmNsb3NlQ29uc3VtZXJUcmFuc3BvcnQoKTtcbiAgICAgICAgICAgIHRyYW5zcG9ydHMuY3VycmVudC5jbG9zZVByb2R1Y2VyVHJhbnNwb3J0KCk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGdyaWQpIHtcbiAgICAgICAgICAgIHByb3BzLm9uR3JpZFNldHVwKCk7XG4gICAgICAgIH1cbiAgICB9LCBbZ3JpZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLnBhcnRpY2lwYW50cyAmJiBwcm9wcy5jdXJyZW50VXNlckZ1bGxOYW1lKSB7XG4gICAgICAgICAgICBzZXRDdXJyZW50VXNlclBhcnRpY2lwYW50KHtcbiAgICAgICAgICAgICAgICBpc0N1cnJlbnRVc2VyOiB0cnVlLFxuICAgICAgICAgICAgICAgIHVzZXJJZDogYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgcGVlcjogbnVsbCxcbiAgICAgICAgICAgICAgICBuYW1lOiBwcm9wcy5jdXJyZW50VXNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgICAgIGF2YXRhcklkOiBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1c2VyQXZhdGFySWQnKSxcbiAgICAgICAgICAgICAgICB2aWRlb011dGVkLFxuICAgICAgICAgICAgICAgIGF1ZGlvTXV0ZWRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICBpblZpZXdQYXJ0aWNpcGFudHMuc3BsaWNlKDAsIGluVmlld1BhcnRpY2lwYW50cy5sZW5ndGgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXJ0aWNpcGFudCBvZiBwcm9wcy5wYXJ0aWNpcGFudHMpIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudC5pblZpZXcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGluVmlld1BhcnRpY2lwYW50cy5wdXNoKHBhcnRpY2lwYW50KTtcbiAgICAgICAgICAgICAgICBpZiAoKytjb3VudGVyID49IE1BWF9ST1dTICogTUFYX0NPTFMpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZXR1cEdyaWQoaW5WaWV3UGFydGljaXBhbnRzKTtcbiAgICAgICAgfVxuICAgIH0sIFtwcm9wcy5wYXJ0aWNpcGFudHMsIHByb3BzLmN1cnJlbnRVc2VyRnVsbE5hbWUsIHByb3BzLmRpc3BsYXlTdGF0ZV0pO1xuXG4gICAgY29uc3Qgc2V0dXBHcmlkID0gKCkgPT4ge1xuICAgICAgICBsZXQgaW5WaWV3R3JpZCA9IFtdO1xuICAgICAgICBsZXQgbnVtUm93cyA9IGluVmlld1BhcnRpY2lwYW50cy5sZW5ndGggPCBNQVhfUk9XUyA/IGluVmlld1BhcnRpY2lwYW50cy5sZW5ndGggOiBNQVhfUk9XUztcbiAgICAgICAgbGV0IHJvd3MgPSBpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoID09PSAyID8gMSA6IG51bVJvd3M7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAgIGluVmlld0dyaWQucHVzaChbXSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY3VycmVudFJvd0luZGV4ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGluVmlld0dyaWRbY3VycmVudFJvd0luZGV4XS5wdXNoKGluVmlld1BhcnRpY2lwYW50c1tpXSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudFJvd0luZGV4KysgPT09IHJvd3MgLSAxKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFJvd0luZGV4ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNldEdyaWQoaW5WaWV3R3JpZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJlbmRlclN0cmlwKCkge1xuICAgICAgICByZXR1cm4gaW5WaWV3UGFydGljaXBhbnRzICYmIGluVmlld1BhcnRpY2lwYW50cy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dYOiAnYXV0bycsXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzE0OHB4JyxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcidcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdyBmbGV4LXJvdyBmbGV4LW5vd3JhcCBuby1tYXJnaW4gbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgIHtpblZpZXdQYXJ0aWNpcGFudHMubWFwKChwYXJ0aWNpcGFudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXsnY29sLSotKid9IGtleT17aW5kZXggKyAnLScgKyBwYXJ0aWNpcGFudC51c2VySWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzE0OHB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxWQ1Jvb21QYXJ0aWNpcGFudCBkYXRhPXtwYXJ0aWNpcGFudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2U9e2RldmljZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWV0aW5nSWQ9e21lZXRpbmdJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5U3RhdGU9e2Rpc3BsYXlTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb011dGVkPXtwYXJ0aWNpcGFudC5hdWRpb011dGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvTXV0ZWQ9e3BhcnRpY2lwYW50LnZpZGVvTXV0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25SZW1vdmVGcm9tVmlldz17KHBhcnRpY2lwYW50KSA9PiByZW1vdmVGcm9tVmlldyhwYXJ0aWNpcGFudCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJUcmFuc3BvcnQ9e2NvbnN1bWVyVHJhbnNwb3J0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0cENhcGFiaWxpdGllcz17cnRwQ2FwYWJpbGl0aWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mSW5WaWV3UGFydGljaXBhbnRzPXtpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50cz17cGFydGljaXBhbnRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemluZz17J3NtJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkhvc3RBdWRpb011dGU9eygpID0+IHByb3BzLm9uSG9zdEF1ZGlvTXV0ZShwYXJ0aWNpcGFudCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0VmlkZW9NdXRlPXsoKSA9PiBwcm9wcy5vbkhvc3RWaWRlb011dGUocGFydGljaXBhbnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSG9zdD17aXNIb3N0fS8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PjtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvZGl2PjtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJSb3cgPSAocm93LCBpbmRleCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEdyaWRcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJ1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBkaXJlY3Rpb249XCJyb3dcIlxuICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50PVwiY2VudGVyXCJcbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCIgY29udGFpbmVyIGl0ZW0gc3BhY2luZz17Mn0+XG4gICAgICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICB7cm93Lm1hcCgocGFydGljaXBhbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPEdyaWQgaXRlbSBrZXk9e2luZGV4ICsgJy0nICsgcGFydGljaXBhbnQudXNlcklkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17J21lZXRpbmdQYXJ0aWNpcGFudENvbnRhaW5lcid9IHN0eWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4QmFzaXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxWQ1Jvb21QYXJ0aWNpcGFudCBkYXRhPXtwYXJ0aWNpcGFudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlPXtkZXZpY2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZXRpbmdJZD17bWVldGluZ0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXppbmc9e2Rpc3BsYXlTdGF0ZSA9PT0gJ01JTklNSVpFRCcgPyAnc20nIDogJ21kJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9NdXRlZD17cGFydGljaXBhbnQuYXVkaW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9NdXRlZD17cGFydGljaXBhbnQudmlkZW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25SZW1vdmVGcm9tVmlldz17KHBhcnRpY2lwYW50KSA9PiByZW1vdmVGcm9tVmlldyhwYXJ0aWNpcGFudCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyVHJhbnNwb3J0PXtjb25zdW1lclRyYW5zcG9ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHM9e2luVmlld1BhcnRpY2lwYW50cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50cz17cGFydGljaXBhbnRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydHBDYXBhYmlsaXRpZXM9e3J0cENhcGFiaWxpdGllc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0QXVkaW9NdXRlPXsoKSA9PiBwcm9wcy5vbkhvc3RBdWRpb011dGUocGFydGljaXBhbnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkhvc3RWaWRlb011dGU9eygpID0+IHByb3BzLm9uSG9zdFZpZGVvTXV0ZShwYXJ0aWNpcGFudCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSG9zdD17aXNIb3N0fS8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWQ+O1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgPC9HcmlkPlxuICAgICAgICApO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZW5kZXJDdXJyZW50UGFydGljaXBhbnQoKSB7XG4gICAgICAgIHJldHVybiA8PlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRVc2VyUGFydGljaXBhbnQgJiZcbiAgICAgICAgICAgICAgICA8VkNSb29tUGFydGljaXBhbnQgZGF0YT17Y3VycmVudFVzZXJQYXJ0aWNpcGFudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlPXtkZXZpY2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZXRpbmdJZD17bWVldGluZ0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWV0aW5nVGl0bGU9e21lZXRpbmdUaXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRwQ2FwYWJpbGl0aWVzPXtydHBDYXBhYmlsaXRpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQXVkaW9EZXZpY2VDaGFuZ2U9e3Byb3BzLm9uQXVkaW9EZXZpY2VDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyVHJhbnNwb3J0PXtjb25zdW1lclRyYW5zcG9ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXJUcmFuc3BvcnQ9e3Byb2R1Y2VyVHJhbnNwb3J0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb011dGVkPXthdWRpb011dGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb011dGVkPXt2aWRlb011dGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkluVmlld1BhcnRpY2lwYW50cz17aW5WaWV3UGFydGljaXBhbnRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRzPXtwYXJ0aWNpcGFudHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSG9zdEF1ZGlvTXV0ZT17KCkgPT4gcHJvcHMub25Ib3N0QXVkaW9NdXRlKGN1cnJlbnRVc2VyUGFydGljaXBhbnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkhvc3RWaWRlb011dGU9eygpID0+IHByb3BzLm9uSG9zdFZpZGVvTXV0ZShjdXJyZW50VXNlclBhcnRpY2lwYW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNIb3N0PXtpc0hvc3R9Lz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC8+O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldE1lZXRpbmdEb2N1bWVudCgpIHtcbiAgICAgICAgcmV0dXJuIG1lZXRpbmdWaWV3SGFuZGxlci52YWx1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW5kZXJQYXJ0aWNpcGFudEdyaWQoKSB7XG4gICAgICAgIHJldHVybiAoIXNjcmVlblNoYXJlZCAmJiAhd2hpdGVCb2FyZFNob3duICYmICFtaW51dGVzU2hvd24gfHwgKHNjcmVlblNoYXJlZCAmJiAhc2hvd1NoYXJlZFNjcmVlbikgJiYgIXNvbWVvbmVTaGFyaW5nICYmICFtaW51dGVzU2hvd24pICYmXG4gICAgICAgICAgICA8Qm94IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgZmxleEdyb3c6IDEsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBkaXNwbGF5U3RhdGUgPT09ICdNQVhJTUlaRUQnID8gJ2NhbGMoMTAwJSAtIDIzMnB4KScgOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnXG4gICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICA8R3JpZCBjb250YWluZXIgc3BhY2luZz17MX0gc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dYOiAnaGlkZGVuJ1xuICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICB7Z3JpZC5tYXAoKHJvdywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcyODBweCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZyYWdtZW50IGtleT17aW5kZXh9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclJvdyhyb3csIGluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9HcmlkPlxuICAgICAgICAgICAgPC9Cb3g+O1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIGRldmljZSA/XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J3Jvdy0qLSogZ3JpZCd9XG4gICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGRpc3BsYXlTdGF0ZSA9PT0gJ01BWElNSVpFRCcgPyAnMTAwJScgOiBkaXNwbGF5U3RhdGUgPT09ICdNSU5JTUlaRUQnID8gJ2NhbGMoMTAwJSAtIDEwMHB4KScgOiAnY2FsYygxMDAlIC0gMjAwcHgpJyxcbiAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBkaXNwbGF5U3RhdGUgPT09ICdNQVhJTUlaRUQnID8gbnVsbCA6ICd0YWJsZScsXG4gICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgKHJvb21TdGF0dXMgPT09ICdMT0JCWScgfHwgcHJvcHMuYWxsVXNlclBhcnRpY2lwYW50c0xlZnQpICYmXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogZGlzcGxheVN0YXRlID09PSAnTUFYSU1JWkVEJyA/ICdjYWxjKDEwMCUgLSAyMzJweCknIDogJ2NhbGMoMTAwJSAtIDEyMHB4KScsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzI4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJ1xuICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQUlUSU5HX0ZPUl9PVEhFUlNfVE9fSk9JTl9NRVNTQUdFXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdyaWQgJiYgcm9vbVN0YXR1cyAhPT0gJ0xPQkJZJyAmJlxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlTdGF0ZSA9PT0gJ01BWElNSVpFRCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJQYXJ0aWNpcGFudEdyaWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheVN0YXRlID09PSAnTUlOSU1JWkVEJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICdjYWxjKDEwMCUgLSAyMDBweCknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAndGFibGUtY2VsbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyUGFydGljaXBhbnRHcmlkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlTdGF0ZSA9PT0gJ1BJTk5FRCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNpZGVCYXJDb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWV0aW5nQ2hhdD17bWVldGluZ0NoYXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0hvc3Q9e2lzSG9zdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hhaXJQZXJzb249e2lzQ2hhaXJQZXJzb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWI9eydQZW9wbGUnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVldGluZ0lkPXttZWV0aW5nSWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudHM9e3Byb3BzLnBhcnRpY2lwYW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSG9zdEF1ZGlvTXV0ZT17cHJvcHMub25Ib3N0QXVkaW9NdXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0VmlkZW9NdXRlPXtwcm9wcy5vbkhvc3RWaWRlb011dGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydjb250ZW50LWJveCd9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICghKChzY3JlZW5TaGFyZWQgJiYgc2hvd1NoYXJlZFNjcmVlbikgfHwgc29tZW9uZVNoYXJpbmcpKSA/ICdub25lJyA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogJzEwMCUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9eydzY3JlZW4tc2hhcmUtdmlkZW8nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5IHJlZj17c2hhcmVTY3JlZW5WaWRlb1JlZn0gbXV0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAnMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydjb250ZW50LWJveCd9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICghKG1pbnV0ZXNTaG93biAmJiBzaG93TWludXRlcykpID8gJ25vbmUnIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnYXV0bydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogJzEwMCUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPERvY3VtZW50Vmlld2VyIGNvbmZpZz17bWVldGluZ1ZpZXdDb25maWcyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZT17bWVldGluZ1ZpZXdIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZD17cHJvcHMudmlld0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7ZGlzcGxheVN0YXRlID09PSAnTUFYSU1JWkVEJyA/ICdyb3ctKi0qJyA6ICcnfWB9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBkaXNwbGF5U3RhdGUgPT09ICdNQVhJTUlaRUQnID8gJzEwMCUnIDogJzIwMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBkaXNwbGF5U3RhdGUgPT09ICdNQVhJTUlaRUQnID8gJzE1MnB4JyA6IGRpc3BsYXlTdGF0ZSA9PT0gJ01JTklNSVpFRCcgPyAnMTAwJScgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogJzAnLFxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAoKHNjcmVlblNoYXJlZCAmJiBzaG93U2hhcmVkU2NyZWVuKSB8fCBzb21lb25lU2hhcmluZyB8fCAobWludXRlc1Nob3duICYmIHNob3dNaW51dGVzKSkgPyAnbm9uZScgOiBkaXNwbGF5U3RhdGUgPT09ICdNQVhJTUlaRUQnID8gJ2ZsZXgnIDogZGlzcGxheVN0YXRlID09PSAnTUlOSU1JWkVEJyA/ICd0YWJsZS1jZWxsJyA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogJ3RvcCcsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogJzhweCcsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAnOHB4J1xuICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17JyBzdHJpcC1wYXJ0aWNpcGFudHMnfSBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGRpc3BsYXlTdGF0ZSA9PT0gJ01BWElNSVpFRCcgPyAnY2FsYygxMDAlIC0gMjMycHgpJyA6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzE0OHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogJzE2cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcxNnB4J1xuICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHdoaXRlQm9hcmRTaG93biB8fCByb29tU3RhdHVzID09PSAnTE9CQlknKSAmJiBncmlkKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3RyaXAoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7KGRpc3BsYXlTdGF0ZSA9PT0gJ01BWElNSVpFRCcgPyAnY29sICcgOiAnJyl9YH0gc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjAwcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTQ4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICcxNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAnMCcsXG4gICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlckN1cnJlbnRQYXJ0aWNpcGFudCgpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICgod2FpdGluZ0xpc3QgJiYgd2FpdGluZ0xpc3QubGVuZ3RoID4gMCkpICYmXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnbm8tc2lkZS1tYXJnaW4gbm8tc2lkZS1wYWRkaW5nIGdyaWQtc2lkZS1iYXInfSBzdHlsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAnMTZweCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0aW5nTGlzdCAmJiB3YWl0aW5nTGlzdC5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExvYmJ5V2FpdGluZ0xpc3Qgd2FpdGluZ0xpc3Q9e3dhaXRpbmdMaXN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9IZWlnaHQ9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0VXNlckhhbmRsZXI9e3Byb3BzLnJlamVjdFVzZXJIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdFVzZXJIYW5kbGVyPXtwcm9wcy5hY2NlcHRVc2VySGFuZGxlcn0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDpcbiAgICAgICAgICAgIG51bGxcbiAgICApO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFZDUm9vbVdvcmtzcGFjZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0FBLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxrQkFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksSUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssZUFBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sZ0JBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLFdBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLFlBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLEtBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFVLGNBQUEsR0FBQVIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFXLGlCQUFBLEdBQUFULHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBWSxPQUFBLEdBQUFaLE9BQUE7QUFDQSxJQUFBYSxlQUFBLEdBQUFYLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBYyxtQkFBQSxHQUFBWixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQWUsbUJBQUEsR0FBQWIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFnQixNQUFBLEdBQUFkLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBaUIsZUFBQSxHQUFBZixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFB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
975
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfR3JpZCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfVkNSb29tUGFydGljaXBhbnQiLCJfQm94IiwiX1ZDRXZlbnRNYW5hZ2VyIiwiX01lZGlhU291cEhlbHBlciIsIl9UcmFuc3BvcnRzIiwiX1ZDRXZlbnRUeXBlIiwiX0ljb24iLCJfU29ja2V0TWFuYWdlciIsIl9Mb2JieVdhaXRpbmdMaXN0IiwiX1ZDUm9vbSIsIl9TaWRlQmFyQ29udGVudCIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfV29yZERvY3VtZW50Vmlld2VyIiwiX1V0aWxzIiwiX0RvY3VtZW50Vmlld2VyIiwiX0V2ZW50IiwiX09ic2VydmFibGUiLCJfRXZlbnRUeXBlIiwiX3V1aWQiLCJfdXNlQ29udGFpbmVyV2lkdGgiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJNQVhfQ09MUyIsIk1BWF9ST1dTIiwibWVldGluZ1ZpZXdDb25maWcyIiwiVkNSb29tV29ya3NwYWNlIiwiUmVhY3QiLCJmb3J3YXJkUmVmIiwicHJvcHMiLCJyZWYiLCJjdXJyZW50VXNlclBhcnRpY2lwYW50Iiwic2V0Q3VycmVudFVzZXJQYXJ0aWNpcGFudCIsInVzZVN0YXRlIiwiaW5WaWV3UGFydGljaXBhbnRzIiwic2V0SW5WaWV3UGFydGljaXBhbnRzIiwiY29uc3VtZXJUcmFuc3BvcnQiLCJzZXRDb25zdW1lclRyYW5zcG9ydCIsImRldmljZSIsInNldERldmljZSIsInNoYXJlU2NyZWVuUHJvZHVjZXIiLCJzZXRTaGFyZVNjcmVlblByb2R1Y2VyIiwicHJvZHVjZXJUcmFuc3BvcnQiLCJzZXRQcm9kdWNlclRyYW5zcG9ydCIsInNjcmVlblNoYXJlZCIsInNldFNjcmVlblNoYXJlZCIsInNvbWVvbmVTaGFyaW5nIiwic2V0U29tZW9uZVNoYXJpbmciLCJzaG93U2hhcmVkU2NyZWVuIiwic2V0U2hvd1NoYXJlZFNjcmVlbiIsIm1lc3NhZ2UiLCJzZXRNZXNzYWdlIiwic2hhcmVTY3JlZW5Db25zdW1lciIsInNldFNoYXJlU2NyZWVuQ29uc3VtZXIiLCJncmlkIiwic2V0R3JpZCIsImV2ZW50SGFuZGxlciIsImdhbGxlcnlSZWYiLCJnYWxsZXJ5V2lkdGgiLCJnYWxsZXJ5SGVpZ2h0IiwidXNlQ29udGFpbmVyV2lkdGgiLCJtaW51dGVzU2hvd24iLCJzZXRNaW51dGVzU2hvd24iLCJzaG93TWludXRlcyIsInNldFNob3dNaW51dGVzIiwibWVldGluZ1ZpZXdIYW5kbGVyIiwic2V0TWVldGluZ1ZpZXdIYW5kbGVyIiwibWludXRlc0RvY3VtZW50Iiwic2V0TWludXRlc0RvY3VtZW50IiwibWVldGluZ1ZpZXdDb25maWciLCJzZXRNZWV0aW5nVmlld0NvbmZpZyIsImhhc0xvYWRlZE1pbnV0ZXMiLCJzZXRIYXNMb2FkZWRNaW51dGVzIiwidXNlRWZmZWN0Iiwid29yZEVkaXRvclZhbHVlSGFuZGxlciIsInVzZVJlZiIsInRyYW5zcG9ydHMiLCJUcmFuc3BvcnRzIiwic2hhcmVTY3JlZW5WaWRlb1JlZiIsInNoYXJlU2NyZWVuU3RyZWFtIiwicHJvZHVjZXJSZWNvdmVyaW5nIiwicHJvZHVjZXJSZWNvdmVyeUF0dGVtcHRzIiwicHJvZHVjZXJSZWNvdmVyeUZhaWxlZCIsIndhaXRpbmdMaXN0Iiwicm9vbVN0YXR1cyIsIm1lZXRpbmdJZCIsIm1pbnV0ZXNEb2N1bWVudElkIiwiZXZlbnRLZXkiLCJtZWV0aW5nQ2hhdCIsInNpZGVCYXJUYWIiLCJtZWV0aW5nVGl0bGUiLCJ3aGl0ZUJvYXJkU2hvd24iLCJ2aWRlb011dGVkIiwiYXVkaW9NdXRlZCIsImlzSG9zdCIsImlzQ2hhaXJQZXJzb24iLCJydHBDYXBhYmlsaXRpZXMiLCJvbmxvYWRTY3JlZW5TaGFyZURhdGEiLCJkaXNwbGF5U3RhdGUiLCJzdGFydFNjcmVlblNoYXJpbmciLCJwYXJ0aWNpcGFudHMiLCJzdGFydFNob3dpbmdNaW51dGVzIiwib25TdGFydFNob3dpbmdNaW51dGVzIiwib25TdG9wU2hvd2luZ01pbnV0ZXMiLCJtaW51dGVzU2hvd25Qcm9wIiwic2F2ZU1pbnV0ZXMiLCJhcGkiLCJjb25zb2xlIiwiZXJyb3IiLCJmaWxlIiwiZ2V0RG9jdW1lbnRWYWx1ZSIsIm5ld0RvY3VtZW50SWQiLCJ1dWlkdjQiLCJtZXRhZGF0YSIsImRvY3VtZW50UmVwb3NpdG9yeUNhY2hlSWQiLCJjb3JyZWxhdGlvbklkIiwidmlld0lkIiwibmFtZSIsInR5cGUiLCJhY2Nlc3NUb2tlbiIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsImlkVG9rZW4iLCJsb2NhdGlvbiIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJkYXRhIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJKU09OIiwic3RyaW5naWZ5IiwiZmV0Y2hDb25maWciLCJtZXRob2QiLCJoZWFkZXJzIiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiZ2V0QWN0aXZlVGVuYW50IiwiYm9keSIsInVwbG9hZFVybCIsImdldENvbnRleHRSb290IiwidXBsb2FkUmVzcG9uc2UiLCJmZXRjaCIsImVuY29kZVVSSSIsIm9rIiwiRXJyb3IiLCJ1cGRhdGVQYXlsb2FkIiwiaWQiLCJ1cGRhdGVGZXRjaENvbmZpZyIsInVwZGF0ZVVybCIsInVwZGF0ZVJlc3BvbnNlIiwibG9nIiwibWVzc2FnZVR5cGUiLCJldmVudCIsIkV2ZW50IiwiZXZlbnRNYW5hZ2VyIiwiZmlyZUV2ZW50IiwiRXZlbnRUeXBlIiwiTUVTU0FHRV9BUlJJVkVEIiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInN0YXJ0U2hhcmVTY3JlZW4iLCJwcm9kdWNlU2NyZWVuU2hhcmUiLCJzdG9wU2hhcmVTY3JlZW4iLCJjdXJyZW50IiwidHJhY2siLCJnZXRUcmFja3MiLCJzdG9wIiwicmVtb3ZlU2hhcmVTY3JlZW5FbGVtZW50Iiwib25TdG9wU2hhcmluZyIsImNhblByb2R1Y2UiLCJ2aWRlb0NvbnN0cmFpbnRzIiwiY3Vyc29yIiwiYXVkaW8iLCJ2aWRlbyIsIm1hbmRhdG9yeSIsIndpZHRoIiwibWluIiwiaWRlYWwiLCJtYXgiLCJoZWlnaHQiLCJmcmFtZVJhdGUiLCJnb29nQ3B1T3ZlcnVzZURldGVjdGlvbiIsImdvb2dDcHVPdmVydXNlRW5jb2RlVXNhZ2UiLCJnb29nQ3B1T3ZlcnVzZVRocmVzaG9sZCIsInByZWZlckN1cnJlbnRUYWIiLCJzZWxmQnJvd3NlclN1cmZhY2UiLCJzeXN0ZW1BdWRpbyIsInN1cmZhY2VTd2l0Y2hpbmciLCJtb25pdG9yVHlwZVN1cmZhY2VzIiwic29ja2V0TWFuYWdlciIsImVtaXRFdmVudCIsIlZDRXZlbnRUeXBlIiwiQ0FOQ0VMX1NDUkVFTl9TSEFSRSIsInJvb21JZCIsInRoZW4iLCJyZXN1bHQiLCJuYXZpZ2F0b3IiLCJtZWRpYURldmljZXMiLCJnZXREaXNwbGF5TWVkaWEiLCJzdHJlYW0iLCJnZXRWaWRlb1RyYWNrcyIsIm9uZW5kZWQiLCJwYXJhbXMiLCJhcHBEYXRhIiwic2NyZWVuU2hhcmluZyIsInByb2R1Y2VyIiwicHJvZHVjZSIsInNyY09iamVjdCIsIm9uIiwiZm9yRWFjaCIsIm9uU3RhcnRTaGFyaW5nIiwiY2F0Y2giLCJzdG9wUHJvZHVjaW5nU2NyZWVuU2hhcmUiLCJwcm9kdWNlcklkIiwiUFJPRFVDRVJfQ0xPU0VEIiwidXNlcklkIiwiZ2V0VXNlckRldGFpbHMiLCJ1c2VybmFtZSIsImNsb3NlIiwib25OZXdQcm9kdWNlcnMiLCJwcm9kdWNlcnMiLCJzY3JlZW5TaGFyZVByb2R1Y2VyIiwiZmluZCIsInAiLCJjb25zdW1lIiwiZWwiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwibWVkaWFTb3VwSGVscGVyIiwiZ2V0Q29uc3VtZVN0cmVhbSIsIl9yZWYiLCJjb25zdW1lciIsImtpbmQiLCJzaGFyaW5nSGFuZGxlciIsImhhbmRsZXIiLCJldmVudFR5cGUiLCJiZSIsIlBBUlRJQ0lQQU5UX0lOX1ZJRVciLCJvbkJyaW5nVG9WaWV3IiwiTkVXX1BST0RVQ0VSUyIsInBheWxvYWQiLCJDT05TVU1FUl9DTE9TRUQiLCJjb25zdW1lcklkIiwiUFJPRFVDRVJfVFJBTlNQT1JUX0ZBSUxFRCIsInJlY3JlYXRlUHJvZHVjZXJUcmFuc3BvcnQiLCJsZW5ndGgiLCJvZmZWaWV3UGFydGljaXBhbnQiLCJ2Y0V2ZW50TWFuYWdlciIsIlBBUlRJQ0lQQU5UX09GRl9WSUVXIiwic3BsaWNlIiwiaW5WaWV3IiwicGFydGljaXBhbnQiLCJwdXNoIiwiY29uY2F0IiwicmVtb3ZlRnJvbVZpZXciLCJmaWx0ZXIiLCJzZXR1cFNlbGZEZXZpY2VzIiwiZ2V0UGFydGljaXBhbnREZXZpY2UiLCJpbml0Q29uc3VtZXJUcmFuc3BvcnQiLCJpbml0UHJvZHVjZXJUcmFuc3BvcnQiLCJTWVNURU1fQUxFUlQiLCJuZXdQcm9kdWNlclRyYW5zcG9ydCIsInNldHVwR3JpZCIsIm5ld0NvbmZpZyIsImxvYWREYXRhIiwicmVmcmVzaCIsImFkZFN1YnNjcmlwdGlvbnMiLCJyZW1vdmVTdWJzY3JpcHRpb25zIiwiY2xvc2VDb25zdW1lclRyYW5zcG9ydCIsImNsb3NlUHJvZHVjZXJUcmFuc3BvcnQiLCJvbkdyaWRTZXR1cCIsImN1cnJlbnRVc2VyRnVsbE5hbWUiLCJpc0N1cnJlbnRVc2VyIiwicGVlciIsImF2YXRhcklkIiwiY291bnRlciIsImluVmlld0dyaWQiLCJudW1Sb3dzIiwicm93cyIsImN1cnJlbnRSb3dJbmRleCIsInJlbmRlclN0cmlwIiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwib3ZlcmZsb3dYIiwibWF4V2lkdGgiLCJib3JkZXJSYWRpdXMiLCJvdmVyZmxvd1kiLCJhbGlnbkl0ZW1zIiwiY2xhc3NOYW1lIiwibWFwIiwiaW5kZXgiLCJrZXkiLCJtaW5XaWR0aCIsInBhZGRpbmciLCJvblJlbW92ZUZyb21WaWV3IiwibnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHMiLCJzaXppbmciLCJvbkhvc3RBdWRpb011dGUiLCJvbkhvc3RWaWRlb011dGUiLCJyZW5kZXJSb3ciLCJyb3ciLCJqdXN0aWZ5Q29udGVudCIsImRpcmVjdGlvbiIsImNvbnRhaW5lciIsIml0ZW0iLCJzcGFjaW5nIiwiRnJhZ21lbnQiLCJmbGV4QmFzaXMiLCJyZW5kZXJDdXJyZW50UGFydGljaXBhbnQiLCJvbkF1ZGlvRGV2aWNlQ2hhbmdlIiwiZ2V0TWVldGluZ0RvY3VtZW50IiwidmFsdWUiLCJHQUxMRVJZX0dBUCIsImNvbXB1dGVSb3dTcGxpdCIsImNvdW50IiwidyIsImgiLCJjb250YWluZXJBc3BlY3QiLCJiZXN0Um93cyIsImJlc3RNaW4iLCJiZXN0UGVuYWx0eSIsIkluZmluaXR5IiwiY29scyIsIk1hdGgiLCJjZWlsIiwiY2VsbFciLCJjZWxsSCIsIm1pbkRpbSIsInBlbmFsdHkiLCJhYnMiLCJiYXNlIiwiZmxvb3IiLCJleHRyYSIsInBlclJvdyIsInJlbmRlclBhcnRpY2lwYW50R3JpZCIsImlkeCIsInNsaWNlIiwibWF4Q29scyIsInRpbGVXaWR0aCIsImZsZXhHcm93IiwiZGlzcGxheSIsImJveFNpemluZyIsImZsZXhEaXJlY3Rpb24iLCJnYXAiLCJtaW5IZWlnaHQiLCJyb3dQYXJ0aWNpcGFudHMiLCJmbGV4IiwiYWxsVXNlclBhcnRpY2lwYW50c0xlZnQiLCJmb250U2l6ZSIsInRleHRBbGlnbiIsIldBSVRJTkdfRk9SX09USEVSU19UT19KT0lOX01FU1NBR0UiLCJ0YWIiLCJtYXhIZWlnaHQiLCJhdXRvUGxheSIsIm11dGVkIiwiekluZGV4IiwiYmFja2dyb3VuZENvbG9yIiwib3ZlcmZsb3ciLCJjb25maWciLCJoYW5kbGUiLCJtYXJnaW5SaWdodCIsInZlcnRpY2FsQWxpZ24iLCJib3R0b20iLCJyaWdodCIsInBhZGRpbmdMZWZ0IiwibWFyZ2luTGVmdCIsInBvc2l0aW9uIiwidG9wIiwiYXV0b0hlaWdodCIsInJlamVjdFVzZXJIYW5kbGVyIiwiYWNjZXB0VXNlckhhbmRsZXIiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbWVkaWEvVkNSb29tV29ya3NwYWNlLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMgKi9cbmltcG9ydCBSZWFjdCwge0ZyYWdtZW50LCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCAnLi9WQ1Jvb21Xb3Jrc3BhY2UuY3NzJztcbmltcG9ydCBHcmlkIGZyb20gJ0BtdWkvbWF0ZXJpYWwvR3JpZCc7XG5pbXBvcnQgVkNSb29tUGFydGljaXBhbnQgZnJvbSAnLi9WQ1Jvb21QYXJ0aWNpcGFudCc7XG5pbXBvcnQgQm94IGZyb20gJ0BtdWkvbWF0ZXJpYWwvQm94JztcbmltcG9ydCB2Y0V2ZW50TWFuYWdlciBmcm9tICcuL1ZDRXZlbnRNYW5hZ2VyJztcbmltcG9ydCBtZWRpYVNvdXBIZWxwZXIgZnJvbSAnLi9NZWRpYVNvdXBIZWxwZXInO1xuaW1wb3J0IFRyYW5zcG9ydHMgZnJvbSAnLi9UcmFuc3BvcnRzJztcbmltcG9ydCB7VkNFdmVudFR5cGV9IGZyb20gJy4vVkNFdmVudFR5cGUnO1xuaW1wb3J0IEljb24gZnJvbSAnLi4vSWNvbic7XG5pbXBvcnQgc29ja2V0TWFuYWdlciBmcm9tICcuLi9Tb2NrZXRNYW5hZ2VyJztcbmltcG9ydCBMb2JieVdhaXRpbmdMaXN0IGZyb20gJy4vTG9iYnlXYWl0aW5nTGlzdCc7XG5pbXBvcnQge1dBSVRJTkdfRk9SX09USEVSU19UT19KT0lOX01FU1NBR0V9IGZyb20gJy4vVkNSb29tJztcbmltcG9ydCBTaWRlQmFyQ29udGVudCBmcm9tIFwiLi9TaWRlQmFyQ29udGVudFwiO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tIFwiLi4vLi4vQXBwbGljYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgV29yZERvY3VtZW50Vmlld2VyIGZyb20gJy4uL1dvcmREb2N1bWVudFZpZXdlcic7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uLy4uL1V0aWxzXCI7XG5pbXBvcnQgRG9jdW1lbnRWaWV3ZXIgZnJvbSBcIi4uL0RvY3VtZW50Vmlld2VyXCI7XG5pbXBvcnQgRXZlbnQgZnJvbSBcIi4uLy4uL2V2ZW50L0V2ZW50XCI7XG5pbXBvcnQgZXZlbnRNYW5hZ2VyIGZyb20gXCIuLi8uLi9ldmVudC9PYnNlcnZhYmxlXCI7XG5pbXBvcnQgRXZlbnRUeXBlIGZyb20gXCIuLi8uLi9ldmVudC9FdmVudFR5cGVcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgdXNlQ29udGFpbmVyV2lkdGggZnJvbSAnLi4vLi4vaG9va3MvdXNlQ29udGFpbmVyV2lkdGgnO1xuXG5jb25zdCBNQVhfQ09MUyA9IDM7XG5jb25zdCBNQVhfUk9XUyA9IDI7XG5cbmNvbnN0IG1lZXRpbmdWaWV3Q29uZmlnMiA9IHtcbiAgICBcInR5cGVcIjogXCJkb2N1bWVudFZpZXdlclwiLFxuICAgIFwiaWRcIjogXCJtZWV0aW5nTWludXRlXCIsXG4gICAgXCJmaWxlVHlwZVwiOiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50XCIsXG4gICAgXCJhdHRyaWJ1dGVzXCI6IHtcbiAgICAgICAgXCJzdHlsZVwiOiB7XG4gICAgICAgICAgICBcIndpZHRoXCI6IFwiMTAwJVwiLFxuICAgICAgICAgICAgXCJtaW5IZWlnaHRcIjogXCIxMDAlXCIsXG4gICAgICAgICAgICBcImhlaWdodFwiOiBcIjEwMCVcIixcbiAgICAgICAgICAgIFwicGFkZGluZ1wiOiBcIjI0cHhcIlxuICAgICAgICB9XG4gICAgfSxcbiAgICBcInRyYWNrQ2hhbmdlc1wiOiBmYWxzZSxcbiAgICBcInJlYWRPbmx5XCI6IGZhbHNlLFxuICAgIFwiY29tbWVudHNPbmx5XCI6IGZhbHNlLFxuICAgIFwiZXZlbnRIYW5kbGluZ0NvbmZpZ1wiOiB7XG4gICAgICAgIFwic3Vic2NyaXB0aW9uc1wiOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJwdWJsaXNoZXJcIjogXCJ2Y1Jvb21cIixcbiAgICAgICAgICAgICAgICBcImV2ZW50VHlwZVwiOiBcIkRBVEFfQVJSSVZFRFwiLFxuICAgICAgICAgICAgICAgIFwiYWN0aW9uc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWN0aW9uVHlwZVwiOiBcImxvYWREYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH0sXG4gICAgXCJkYXRhU2VydmljZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcInJlc3RcIixcbiAgICAgICAgXCJ1cmxcIjogXCIvZG9jcy9hcGkvdjEvbWFuYWdlci9maW5kXCIsXG4gICAgICAgIFwibWV0aG9kXCI6IFwiR0VUXCIsXG4gICAgICAgIFwicGFyYW1ldGVyc1wiOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiZG9jdW1lbnRJZFwiLFxuICAgICAgICAgICAgICAgIFwiaHR0cFBhcmFtZXRlclR5cGVcIjogXCJQQVRIX1ZBUklBQkxFXCIsXG4gICAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcImMyOGE0YTU2LTZmYzAtNDg4Ny1iY2EwLTI5ZjQzZGEwYjNiMlwiXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9XG59XG5cbi8vIFRPRE8gOiBDbGVhbi11cCBhbGwgdHJhY2tzIGFuZCBwcm9kdWNlcnMgYW5kIGNvbnN1bWVycyB3aGVuIHRoZSBjb21wb25lbnQgY2xvc2VzXG5jb25zdCBWQ1Jvb21Xb3Jrc3BhY2UgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XG4gICAgY29uc3QgW2N1cnJlbnRVc2VyUGFydGljaXBhbnQsIHNldEN1cnJlbnRVc2VyUGFydGljaXBhbnRdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2luVmlld1BhcnRpY2lwYW50cywgc2V0SW5WaWV3UGFydGljaXBhbnRzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbY29uc3VtZXJUcmFuc3BvcnQsIHNldENvbnN1bWVyVHJhbnNwb3J0XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIC8vY29uc3QgW3ZpZGVvUmVmcmVzaGVyLCBzZXRWaWRlb1JlZnJlc2hlcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2RldmljZSwgc2V0RGV2aWNlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtzaGFyZVNjcmVlblByb2R1Y2VyLCBzZXRTaGFyZVNjcmVlblByb2R1Y2VyXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtwcm9kdWNlclRyYW5zcG9ydCwgc2V0UHJvZHVjZXJUcmFuc3BvcnRdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW3NjcmVlblNoYXJlZCwgc2V0U2NyZWVuU2hhcmVkXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtzb21lb25lU2hhcmluZywgc2V0U29tZW9uZVNoYXJpbmddID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW3Nob3dTaGFyZWRTY3JlZW4sIHNldFNob3dTaGFyZWRTY3JlZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFttZXNzYWdlLCBzZXRNZXNzYWdlXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbc2hhcmVTY3JlZW5Db25zdW1lciwgc2V0U2hhcmVTY3JlZW5Db25zdW1lcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbZ3JpZCwgc2V0R3JpZF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbZXZlbnRIYW5kbGVyXSA9IHVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBbZ2FsbGVyeVJlZiwgZ2FsbGVyeVdpZHRoLCBnYWxsZXJ5SGVpZ2h0XSA9IHVzZUNvbnRhaW5lcldpZHRoKCk7XG4gICAgY29uc3QgW21pbnV0ZXNTaG93biwgc2V0TWludXRlc1Nob3duXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbc2hvd01pbnV0ZXMsIHNldFNob3dNaW51dGVzXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbbWVldGluZ1ZpZXdIYW5kbGVyLCBzZXRNZWV0aW5nVmlld0hhbmRsZXJdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW21pbnV0ZXNEb2N1bWVudCwgc2V0TWludXRlc0RvY3VtZW50XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFttZWV0aW5nVmlld0NvbmZpZywgc2V0TWVldGluZ1ZpZXdDb25maWddID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2hhc0xvYWRlZE1pbnV0ZXMsIHNldEhhc0xvYWRlZE1pbnV0ZXNdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgLy8gQ3JlYXRlIGhhbmRsZXIgb25jZSBvbiBtb3VudFxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghbWVldGluZ1ZpZXdIYW5kbGVyKSB7XG4gICAgICAgICAgICBzZXRNZWV0aW5nVmlld0hhbmRsZXIoe30pO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3Qgd29yZEVkaXRvclZhbHVlSGFuZGxlciA9IHVzZVJlZih7fSk7XG4gICAgY29uc3QgdHJhbnNwb3J0cyA9IHVzZVJlZihuZXcgVHJhbnNwb3J0cygpKTtcbiAgICBjb25zdCBzaGFyZVNjcmVlblZpZGVvUmVmID0gdXNlUmVmKCk7XG4gICAgY29uc3Qgc2hhcmVTY3JlZW5TdHJlYW0gPSB1c2VSZWYoKTtcbiAgICAvLyBQcm9kdWNlci10cmFuc3BvcnQgcmVjb3ZlcnkgZ3VhcmRzOiBwcmV2ZW50IG92ZXJsYXBwaW5nIHJlY3JlYXRpb25zIGFuZFxuICAgIC8vIGdpdmUgdXAgYWZ0ZXIgYSBmZXcgYXR0ZW1wdHMgc28gYSBwZXJtYW5lbnRseS1kb3duIG5ldHdvcmsgY2FuJ3Qgc3Bpbi5cbiAgICBjb25zdCBwcm9kdWNlclJlY292ZXJpbmcgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IHByb2R1Y2VyUmVjb3ZlcnlBdHRlbXB0cyA9IHVzZVJlZigwKTtcbiAgICBjb25zdCBwcm9kdWNlclJlY292ZXJ5RmFpbGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCB7XG4gICAgICAgIHdhaXRpbmdMaXN0LFxuICAgICAgICByb29tU3RhdHVzLFxuICAgICAgICBtZWV0aW5nSWQsXG4gICAgICAgIG1pbnV0ZXNEb2N1bWVudElkLFxuICAgICAgICBldmVudEtleSxcbiAgICAgICAgbWVldGluZ0NoYXQsXG4gICAgICAgIHNpZGVCYXJUYWIsXG4gICAgICAgIG1lZXRpbmdUaXRsZSxcbiAgICAgICAgd2hpdGVCb2FyZFNob3duLFxuICAgICAgICB2aWRlb011dGVkLFxuICAgICAgICBhdWRpb011dGVkLFxuICAgICAgICBpc0hvc3QsXG4gICAgICAgIGlzQ2hhaXJQZXJzb24sXG4gICAgICAgIHJ0cENhcGFiaWxpdGllcyxcbiAgICAgICAgb25sb2FkU2NyZWVuU2hhcmVEYXRhLFxuICAgICAgICBkaXNwbGF5U3RhdGUsXG4gICAgICAgIHN0YXJ0U2NyZWVuU2hhcmluZyxcbiAgICAgICAgcGFydGljaXBhbnRzLFxuICAgICAgICBzdGFydFNob3dpbmdNaW51dGVzLFxuICAgICAgICBvblN0YXJ0U2hvd2luZ01pbnV0ZXMsXG4gICAgICAgIG9uU3RvcFNob3dpbmdNaW51dGVzLFxuICAgICAgICBtaW51dGVzU2hvd246IG1pbnV0ZXNTaG93blByb3BcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBzYXZlTWludXRlcyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICghbWVldGluZ1ZpZXdIYW5kbGVyIHx8ICFtZWV0aW5nVmlld0hhbmRsZXIuYXBpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk1lZXRpbmcgdmlldyBoYW5kbGVyIG5vdCBhdmFpbGFibGVcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgbWVldGluZ1ZpZXdIYW5kbGVyLmFwaS5nZXREb2N1bWVudFZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTm8gZG9jdW1lbnQgdG8gc2F2ZVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0RvY3VtZW50SWQgPSB1dWlkdjQoKTtcblxuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRSZXBvc2l0b3J5Q2FjaGVJZDogbmV3RG9jdW1lbnRJZCxcbiAgICAgICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBwcm9wcy52aWV3SWQgKyBcIi5taW51dGVzRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJhY2Nlc3NUb2tlblwiKTtcbiAgICAgICAgICAgIGNvbnN0IGlkVG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiaWRUb2tlblwiKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gICAgICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgZGF0YS5hcHBlbmQoXCJtZXRhZGF0YVwiLCBKU09OLnN0cmluZ2lmeShtZXRhZGF0YSkpO1xuICAgICAgICAgICAgZGF0YS5hcHBlbmQoXCJmaWxlXCIsIGZpbGUpO1xuXG4gICAgICAgICAgICBsZXQgZmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAnaWRUb2tlbic6IGlkVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICd0ZW5hbnQnOiBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QWN0aXZlVGVuYW50KClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCB1cGxvYWRVcmwgPSBsb2NhdGlvbiArIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgXCIvZG9jcy9hcGkvdjEvbWFuYWdlci91cGxvYWQvc2F2ZVwiO1xuXG4gICAgICAgICAgICBjb25zdCB1cGxvYWRSZXNwb25zZSA9IGF3YWl0IGZldGNoKGVuY29kZVVSSSh1cGxvYWRVcmwpLCBmZXRjaENvbmZpZyk7XG4gICAgICAgICAgICBpZiAoIXVwbG9hZFJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IGV2ZW50S2V5LFxuICAgICAgICAgICAgICAgIG1pbnV0ZXNEb2N1bWVudElkOiBuZXdEb2N1bWVudElkXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgdXBkYXRlRmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAnaWRUb2tlbic6IGlkVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICd0ZW5hbnQnOiBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QWN0aXZlVGVuYW50KClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHVwZGF0ZVBheWxvYWQpXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgdXBkYXRlVXJsID0gbG9jYXRpb24gKyBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0Q29udGV4dFJvb3QoKSArIFwiL3RlbmRlci9hcGkvdjEvZXZhbHVhdGlvbi9tZWV0aW5nL21pbnV0ZURvY3VtZW50XCI7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVSZXNwb25zZSA9IGF3YWl0IGZldGNoKGVuY29kZVVSSSh1cGRhdGVVcmwpLCB1cGRhdGVGZXRjaENvbmZpZyk7XG5cbiAgICAgICAgICAgIGlmICghdXBkYXRlUmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byB1cGRhdGUgbWVldGluZyBtaW51dGVzIGRvY3VtZW50Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTWludXRlcyBzYXZlZCBzdWNjZXNzZnVsbHlcIik7XG5cbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VUeXBlOiAnU1VDQ0VTUycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ01lZXRpbmcgbWludXRlcyBzYXZlZCBzdWNjZXNzZnVsbHknXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KG1lZXRpbmdWaWV3SGFuZGxlciwgcHJvcHMudmlld0lkLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBzYXZpbmcgbWludXRlczpcIiwgZSk7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogJ0VSUk9SJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRmFpbGVkIHRvIHNhdmUgbWVldGluZyBtaW51dGVzJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChtZWV0aW5nVmlld0hhbmRsZXIsIHByb3BzLnZpZXdJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICAgICAgc2F2ZU1pbnV0ZXNcbiAgICB9KSk7XG5cbiAgICBjb25zdCBzdGFydFNoYXJlU2NyZWVuID0gKCkgPT4ge1xuICAgICAgICBwcm9kdWNlU2NyZWVuU2hhcmUoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RvcFNoYXJlU2NyZWVuID0gKCkgPT4ge1xuICAgICAgICBpZiAoc2hhcmVTY3JlZW5TdHJlYW0uY3VycmVudCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB0cmFjayBvZiBzaGFyZVNjcmVlblN0cmVhbS5jdXJyZW50LmdldFRyYWNrcygpKSB7XG4gICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzaGFyZVNjcmVlblN0cmVhbS5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHJlbW92ZVNoYXJlU2NyZWVuRWxlbWVudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvcHMub25TdG9wU2hhcmluZygpO1xuICAgIH07XG5cbiAgICBjb25zdCBwcm9kdWNlU2NyZWVuU2hhcmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghZGV2aWNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBhdmFpbGFibGUgZGV2aWNlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXByb2R1Y2VyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBwcm9kdWNlciB0cmFuc3BvcnQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGV2aWNlLmNhblByb2R1Y2UoJ3ZpZGVvJykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBwcm9kdWNlIHNjcmVlbiBzaGFyZScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNoYXJlU2NyZWVuUHJvZHVjZXIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTaGFyZSBzY3JlZW4gcHJvZHVjZXIgYWxyZWFkeSBleGlzdCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmlkZW9Db25zdHJhaW50cyA9IHtcbiAgICAgICAgICAgIGN1cnNvcjogdHJ1ZSxcbiAgICAgICAgICAgIGF1ZGlvOiBmYWxzZSxcbiAgICAgICAgICAgIHZpZGVvOiB7XG4gICAgICAgICAgICAgICAgbWFuZGF0b3J5OiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDE2MCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkZWFsOiAzMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg6IDY0MFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMTIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWRlYWw6IDI0MCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heDogNDgwXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGZyYW1lUmF0ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAxNSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heDogMTVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZ29vZ0NwdU92ZXJ1c2VEZXRlY3Rpb246IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGdvb2dDcHVPdmVydXNlRW5jb2RlVXNhZ2U6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGdvb2dDcHVPdmVydXNlVGhyZXNob2xkOiA3MFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmVmZXJDdXJyZW50VGFiOiBmYWxzZSxcbiAgICAgICAgICAgIHNlbGZCcm93c2VyU3VyZmFjZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgc3lzdGVtQXVkaW86ICdleGNsdWRlJyxcbiAgICAgICAgICAgIHN1cmZhY2VTd2l0Y2hpbmc6ICdleGNsdWRlJyxcbiAgICAgICAgICAgIG1vbml0b3JUeXBlU3VyZmFjZXM6ICdpbmNsdWRlJ1xuXG4gICAgICAgIH07XG5cbiAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuQ0FOQ0VMX1NDUkVFTl9TSEFSRSwge1xuICAgICAgICAgICAgcm9vbUlkOiBtZWV0aW5nSWRcbiAgICAgICAgfSkudGhlbihhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldERpc3BsYXlNZWRpYSh2aWRlb0NvbnN0cmFpbnRzKVxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIChzdHJlYW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhY2sgPSBzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXTtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2sub25lbmRlZCA9IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFNoYXJlU2NyZWVuKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuU2hhcmluZzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9kdWNlciA9IGF3YWl0IHByb2R1Y2VyVHJhbnNwb3J0LnByb2R1Y2UocGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2hhcmVTY3JlZW5Qcm9kdWNlcihwcm9kdWNlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgc2hhcmVTY3JlZW5TdHJlYW0uY3VycmVudCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dTaGFyZWRTY3JlZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlU2NyZWVuVmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwcm9kdWNlci5vbigndHJhbnNwb3J0Y2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc3JjT2JqZWN0LmdldFRyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hhcmVTY3JlZW5Qcm9kdWNlcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXIub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNoYXJlU2NyZWVuUHJvZHVjZXIobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm9uU3RhcnRTaGFyaW5nKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMub25TdG9wU2hhcmluZygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KS5jYXRjaCgoZSkgPT4gY29uc29sZS5sb2coJ0VSUk9SIENBTkNFTExJTkcgU0NSRUVOIFNIQVJFIDogJywgZSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBzdG9wUHJvZHVjaW5nU2NyZWVuU2hhcmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghc2hhcmVTY3JlZW5Qcm9kdWNlcikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RoZXJlIGlzIG5vIHNoYXJlIHNjcmVlbiBwcm9kdWNlcicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb2R1Y2VySWQgPSBzaGFyZVNjcmVlblByb2R1Y2VyLmlkO1xuICAgICAgICBjb25zb2xlLmxvZygnQ2xvc2UgcHJvZHVjZXInLCBwcm9kdWNlcklkKTtcbiAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuUFJPRFVDRVJfQ0xPU0VELCB7XG4gICAgICAgICAgICB1c2VySWQ6IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lLFxuICAgICAgICAgICAgcHJvZHVjZXJJZCxcbiAgICAgICAgICAgIHJvb21JZDogbWVldGluZ0lkXG4gICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IGNvbnNvbGUubG9nKCdQUk9EVUNFUl9DTE9TRUQgRVJST1IgOiAnLCBlKSk7XG5cbiAgICAgICAgc2hhcmVTY3JlZW5Qcm9kdWNlci5jbG9zZSgpO1xuICAgICAgICBzdG9wU2hhcmVTY3JlZW4oKTtcbiAgICAgICAgc2V0U2hhcmVTY3JlZW5Qcm9kdWNlcihudWxsKTtcbiAgICAgICAgLy9zZXRTb21lb25lU2hhcmluZyhmYWxzZSk7XG4gICAgICAgIHNldFNjcmVlblNoYXJlZChmYWxzZSk7XG5cbiAgICAgICAgaWYgKHNoYXJlU2NyZWVuU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdHJhY2sgb2Ygc2hhcmVTY3JlZW5TdHJlYW0uY3VycmVudC5nZXRUcmFja3MoKSkge1xuICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvbk5ld1Byb2R1Y2VycyA9IChwcm9kdWNlcnMpID0+IHtcbiAgICAgICAgbGV0IHNjcmVlblNoYXJlUHJvZHVjZXIgPSBwcm9kdWNlcnMuZmluZCgocCkgPT4gcC5zY3JlZW5TaGFyaW5nKTtcbiAgICAgICAgaWYgKHNjcmVlblNoYXJlUHJvZHVjZXIpIHtcbiAgICAgICAgICAgIGNvbnN1bWUoc2NyZWVuU2hhcmVQcm9kdWNlcik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlU2hhcmVTY3JlZW5FbGVtZW50ID0gKCkgPT4ge1xuICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hhcmUtc2NyZWVuLXZpZGVvJyk7XG4gICAgICAgIGlmIChlbCkge1xuICAgICAgICAgICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY29uc3VtZSA9IGFzeW5jIChwcm9kdWNlcikgPT4ge1xuICAgICAgICBtZWRpYVNvdXBIZWxwZXIuZ2V0Q29uc3VtZVN0cmVhbShwcm9kdWNlci5wcm9kdWNlcklkLCBkZXZpY2UucnRwQ2FwYWJpbGl0aWVzLCBjb25zdW1lclRyYW5zcG9ydCxcbiAgICAgICAgICAgIG1lZXRpbmdJZCwgYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUsICd2aWRlbycpXG4gICAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXIsXG4gICAgICAgICAgICAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICBraW5kXG4gICAgICAgICAgICAgICAgIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN1bWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRTaGFyZVNjcmVlbkNvbnN1bWVyKGNvbnN1bWVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1TSEFSSU5HIENPTlNVTUU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5zaGFyaW5nSGFuZGxlcih0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNjcmVlblNoYXJlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNvbWVvbmVTaGFyaW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9zZXRTaG93U2hhcmVkU2NyZWVuKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWVzc2FnZShwcm9kdWNlci51c2VybmFtZSArICcgaXMgc2hhcmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVTY3JlZW5WaWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlU2NyZWVuU3RyZWFtLmN1cnJlbnQgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAvL3NldFZpZGVvUmVmcmVzaGVyKCF2aWRlb1JlZnJlc2hlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLm9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFja2VuZGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNoYXJlU2NyZWVuRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLm9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc3BvcnRjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTaGFyZVNjcmVlbkVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21lZXRpbmctcGFydGljaXBhbnQtZ3JpZCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IChldmVudFR5cGUsIGJlKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5QQVJUSUNJUEFOVF9JTl9WSUVXOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25CcmluZ1RvVmlldyhiZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5ORVdfUFJPRFVDRVJTOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5DT05TVU1FUl9DTE9TRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hhcmVTY3JlZW5Db25zdW1lciAmJiBzaGFyZVNjcmVlbkNvbnN1bWVyLmlkID09PSBiZS5wYXlsb2FkLmNvbnN1bWVySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTaGFyZVNjcmVlbkVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNZXNzYWdlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLnNoYXJpbmdIYW5kbGVyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTb21lb25lU2hhcmluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2NyZWVuU2hhcmVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93U2hhcmVkU2NyZWVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLlBST0RVQ0VSX1RSQU5TUE9SVF9GQUlMRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IG9uQnJpbmdUb1ZpZXcgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAoIWluVmlld1BhcnRpY2lwYW50cy5maW5kKCgocCkgPT4gcC51c2VySWQgPT09IHBheWxvYWQudXNlcklkKSkpIHtcbiAgICAgICAgICAgIGlmIChpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoID09PSBNQVhfQ09MUyAqIE1BWF9ST1dTKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9mZlZpZXdQYXJ0aWNpcGFudCA9IGluVmlld1BhcnRpY2lwYW50c1tpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLlBBUlRJQ0lQQU5UX09GRl9WSUVXLCBvZmZWaWV3UGFydGljaXBhbnQpO1xuXG4gICAgICAgICAgICAgICAgaW5WaWV3UGFydGljaXBhbnRzLnNwbGljZShpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgICAgICAgICAgb2ZmVmlld1BhcnRpY2lwYW50LmluVmlldyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IHB1c2hpbmcgdW5kZWZpbmVkIChwYXJ0aWNpcGFudCBub3QgaW4gdGhlIGxpc3QpIOKAlCBhXG4gICAgICAgICAgICAvLyBzdHJheSBQQVJUSUNJUEFOVF9JTl9WSUVXIGZvciBhbiB1bmtub3duIHVzZXIgb3RoZXJ3aXNlIGNyYXNoZWQgdGhlIGdyaWQgcmVuZGVyLlxuICAgICAgICAgICAgbGV0IHBhcnRpY2lwYW50ID0gcHJvcHMucGFydGljaXBhbnRzLmZpbmQoKHApID0+IHAudXNlcklkID09PSBwYXlsb2FkLnVzZXJJZCk7XG4gICAgICAgICAgICBpZiAocGFydGljaXBhbnQpIHtcbiAgICAgICAgICAgICAgICBpblZpZXdQYXJ0aWNpcGFudHMucHVzaChwYXJ0aWNpcGFudCk7XG4gICAgICAgICAgICAgICAgLy8gUmVmcmVzaCB0aGUgbGlzdFxuICAgICAgICAgICAgICAgIHNldEluVmlld1BhcnRpY2lwYW50cyhbXS5jb25jYXQoaW5WaWV3UGFydGljaXBhbnRzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlRnJvbVZpZXcgPSAocGFydGljaXBhbnQpID0+IHtcbiAgICAgICAgcGFydGljaXBhbnQuaW5WaWV3ID0gZmFsc2U7XG4gICAgICAgIHNldEluVmlld1BhcnRpY2lwYW50cyhpblZpZXdQYXJ0aWNpcGFudHMuZmlsdGVyKChwKSA9PiBwLnVzZXJJZCAhPT0gcGFydGljaXBhbnQudXNlcklkKSk7XG4gICAgICAgIHZjRXZlbnRNYW5hZ2VyLmZpcmVFdmVudChWQ0V2ZW50VHlwZS5QQVJUSUNJUEFOVF9PRkZfVklFVywgcGFydGljaXBhbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cFNlbGZEZXZpY2VzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgZGV2aWNlID0gYXdhaXQgbWVkaWFTb3VwSGVscGVyLmdldFBhcnRpY2lwYW50RGV2aWNlKHJ0cENhcGFiaWxpdGllcyk7XG4gICAgICAgIHNldERldmljZShkZXZpY2UpO1xuXG4gICAgICAgIGxldCBjb25zdW1lclRyYW5zcG9ydCA9IGF3YWl0IG1lZGlhU291cEhlbHBlci5pbml0Q29uc3VtZXJUcmFuc3BvcnQoZGV2aWNlLCBtZWV0aW5nSWQsIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lKTtcbiAgICAgICAgbGV0IHByb2R1Y2VyVHJhbnNwb3J0ID0gYXdhaXQgbWVkaWFTb3VwSGVscGVyLmluaXRQcm9kdWNlclRyYW5zcG9ydChkZXZpY2UsIG1lZXRpbmdJZCwgYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUpO1xuXG4gICAgICAgIHNldENvbnN1bWVyVHJhbnNwb3J0KGNvbnN1bWVyVHJhbnNwb3J0KTtcbiAgICAgICAgc2V0UHJvZHVjZXJUcmFuc3BvcnQocHJvZHVjZXJUcmFuc3BvcnQpO1xuXG4gICAgICAgIHRyYW5zcG9ydHMuY3VycmVudC5zZXRDb25zdW1lclRyYW5zcG9ydChjb25zdW1lclRyYW5zcG9ydCk7XG4gICAgICAgIHRyYW5zcG9ydHMuY3VycmVudC5zZXRQcm9kdWNlclRyYW5zcG9ydChwcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgfTtcblxuICAgIC8vIFJlY292ZXIgZnJvbSBhIHByb2R1Y2VyLXRyYW5zcG9ydCBmYWlsdXJlIGJ5IHJlY3JlYXRpbmcgaXQuIFVubGlrZSBhXG4gICAgLy8gY29uc3VtZXIgZmFpbHVyZSAod2hpY2ggaGFuZ3MgdXAg4oCUIHlvdSBjYW4ndCBzZWUvaGVhciBhbnlvbmUpLCBsb3NpbmcgdGhlXG4gICAgLy8gcHJvZHVjZXIgb25seSBzdG9wcyBZT1VSIG1lZGlhLCBzbyB3ZSByZWJ1aWxkIGl0IGFuZCBsZXQgdGhlIHNlbGYgdGlsZVxuICAgIC8vIHJlLXByb2R1Y2Ugb24gdGhlIG5ldyB0cmFuc3BvcnQgKGl0IHN5bmNzIHByb2R1Y2VyVHJhbnNwb3J0IHZpYSBwcm9wcykuXG4gICAgY29uc3QgcmVjcmVhdGVQcm9kdWNlclRyYW5zcG9ydCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKHByb2R1Y2VyUmVjb3ZlcmluZy5jdXJyZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZXZpY2UpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCByZWNvdmVyIHByb2R1Y2VyIHRyYW5zcG9ydDogbm8gZGV2aWNlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2R1Y2VyUmVjb3ZlcnlBdHRlbXB0cy5jdXJyZW50ID49IDMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Byb2R1Y2VyIHRyYW5zcG9ydCByZWNvdmVyeSBnYXZlIHVwIGFmdGVyIDMgYXR0ZW1wdHMnKTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgb25jZSDigJQgdGhlaXIgb3V0Z29pbmcgbWVkaWEgY2FuJ3QgYmUgcmVzdG9yZWQuXG4gICAgICAgICAgICBpZiAoIXByb2R1Y2VyUmVjb3ZlcnlGYWlsZWQuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIHByb2R1Y2VyUmVjb3ZlcnlGYWlsZWQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLlNZU1RFTV9BTEVSVCwge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIkNvdWxkbid0IHJlY29ubmVjdCB5b3VyIGF1ZGlvL3ZpZGVvLiBQbGVhc2UgbGVhdmUgYW5kIHJlam9pbiB0aGUgbWVldGluZy5cIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwcm9kdWNlclJlY292ZXJpbmcuY3VycmVudCA9IHRydWU7XG4gICAgICAgIHByb2R1Y2VyUmVjb3ZlcnlBdHRlbXB0cy5jdXJyZW50ICs9IDE7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUmVjcmVhdGluZyBwcm9kdWNlciB0cmFuc3BvcnQgKGF0dGVtcHQgJyArIHByb2R1Y2VyUmVjb3ZlcnlBdHRlbXB0cy5jdXJyZW50ICsgJyknKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1Byb2R1Y2VyVHJhbnNwb3J0ID0gYXdhaXQgbWVkaWFTb3VwSGVscGVyLmluaXRQcm9kdWNlclRyYW5zcG9ydChcbiAgICAgICAgICAgICAgICBkZXZpY2UsIG1lZXRpbmdJZCwgYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUpO1xuICAgICAgICAgICAgaWYgKG5ld1Byb2R1Y2VyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHNjcmVlbi1zaGFyZSBwcm9kdWNlciAoaWYgYW55KSB3YXMgb24gdGhlIGRlYWQgdHJhbnNwb3J0LlxuICAgICAgICAgICAgICAgIHNldFNoYXJlU2NyZWVuUHJvZHVjZXIobnVsbCk7XG4gICAgICAgICAgICAgICAgc2V0UHJvZHVjZXJUcmFuc3BvcnQobmV3UHJvZHVjZXJUcmFuc3BvcnQpO1xuICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuY3VycmVudC5zZXRQcm9kdWNlclRyYW5zcG9ydChuZXdQcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgICAgICAgICAgICAgcHJvZHVjZXJSZWNvdmVyeUF0dGVtcHRzLmN1cnJlbnQgPSAwOyAvLyBzdWNjZXNzIHJlc2V0cyB0aGUgY291bnRlclxuICAgICAgICAgICAgICAgIHByb2R1Y2VyUmVjb3ZlcnlGYWlsZWQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcmVjcmVhdGUgcHJvZHVjZXIgdHJhbnNwb3J0JywgZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBwcm9kdWNlclJlY292ZXJpbmcuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGV2ZW50SGFuZGxlci5hcGkgPSBoYW5kbGVyKCk7XG4gICAgfSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuXG4gICAgfSwgW3Byb3BzLmF1ZGlvTXV0ZWRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldHVwR3JpZCgpO1xuICAgIH0sIFtpblZpZXdQYXJ0aWNpcGFudHNdKTtcblxuICAgIC8qdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmKGdyaWQgPT09IG51bGwpIHtcbiAgICAgICAgc2V0dXBHcmlkKCk7XG4gICAgICB9XG4gICAgfSwgW2dyaWRdKTsqL1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFzY3JlZW5TaGFyZWQpIHtcbiAgICAgICAgICAgIHN0b3BQcm9kdWNpbmdTY3JlZW5TaGFyZSgpO1xuICAgICAgICB9XG4gICAgfSwgW3NjcmVlblNoYXJlZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHN0YXJ0U2NyZWVuU2hhcmluZykge1xuICAgICAgICAgICAgcHJvZHVjZVNjcmVlblNoYXJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBbc3RhcnRTY3JlZW5TaGFyaW5nXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoc3RhcnRTaG93aW5nTWludXRlcykge1xuICAgICAgICAgICAgc2V0U2hvd01pbnV0ZXModHJ1ZSk7XG4gICAgICAgICAgICBzZXRNaW51dGVzU2hvd24odHJ1ZSk7XG4gICAgICAgICAgICBvblN0YXJ0U2hvd2luZ01pbnV0ZXMoKTtcbiAgICAgICAgfVxuICAgIH0sIFtzdGFydFNob3dpbmdNaW51dGVzXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAvLyBTeW5jIHdpdGggcGFyZW50J3MgbWludXRlc1Nob3duIHN0YXRlXG4gICAgICAgIGlmIChtaW51dGVzU2hvd25Qcm9wID09PSBmYWxzZSAmJiBtaW51dGVzU2hvd24gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHNldFNob3dNaW51dGVzKGZhbHNlKTtcbiAgICAgICAgICAgIHNldE1pbnV0ZXNTaG93bihmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9LCBbbWludXRlc1Nob3duUHJvcF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKG1pbnV0ZXNEb2N1bWVudElkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiZG9jdW1lbnRWaWV3ZXJcIixcbiAgICAgICAgICAgICAgICBcImlkXCI6IFwibWVldGluZ01pbnV0ZVwiLFxuICAgICAgICAgICAgICAgIFwiZmlsZVR5cGVcIjogXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudFwiLFxuICAgICAgICAgICAgICAgIFwiYXR0cmlidXRlc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiBcImNhbGMoMTAwJSAtIDQzNnB4KVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5IZWlnaHRcIjogXCIxMDAlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhlaWdodFwiOiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGFkZGluZ1wiOiBcIjI0cHhcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcImxhYmVsXCI6IFwiTWVldGluZyBNaW51dGVzXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwidHJhY2tDaGFuZ2VzXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgXCJyZWFkT25seVwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBcImNvbW1lbnRzT25seVwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBcImV2ZW50SGFuZGxpbmdDb25maWdcIjoge1xuICAgICAgICAgICAgICAgICAgICBcInN1YnNjcmlwdGlvbnNcIjogW11cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiZGF0YVNlcnZpY2VcIjoge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJyZXN0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwidXJsXCI6IFwiL2RvY3MvYXBpL3YxL21hbmFnZXIvZmluZFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm1ldGhvZFwiOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICBcInBhcmFtZXRlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImRvY3VtZW50SWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0dHBQYXJhbWV0ZXJUeXBlXCI6IFwiUEFUSF9WQVJJQUJMRVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsdWVcIjogbWludXRlc0RvY3VtZW50SWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZXRNZWV0aW5nVmlld0NvbmZpZyhuZXdDb25maWcpO1xuICAgICAgICB9XG4gICAgfSwgW21pbnV0ZXNEb2N1bWVudElkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAobWVldGluZ1ZpZXdIYW5kbGVyICYmIG1lZXRpbmdWaWV3SGFuZGxlci5hcGkpIHtcbiAgICAgICAgICAgIG1lZXRpbmdWaWV3SGFuZGxlci5hcGkubG9hZERhdGEoKTtcbiAgICAgICAgfVxuICAgIH0sIFttZWV0aW5nVmlld0hhbmRsZXJdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChtZWV0aW5nVmlld0NvbmZpZzIgJiYgbWludXRlc0RvY3VtZW50SWQgJiYgbWVldGluZ1ZpZXdIYW5kbGVyICYmIG1lZXRpbmdWaWV3SGFuZGxlci5hcGkgJiYgc2hvd01pbnV0ZXMpIHtcbiAgICAgICAgICAgIG1lZXRpbmdWaWV3SGFuZGxlci5hcGkucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgfSwgW21pbnV0ZXNEb2N1bWVudElkLCBtZWV0aW5nVmlld0NvbmZpZzIsIG1lZXRpbmdWaWV3SGFuZGxlciwgc2hvd01pbnV0ZXNdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChvbmxvYWRTY3JlZW5TaGFyZURhdGEgJiYgZGV2aWNlICYmIGNvbnN1bWVyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICBjb25zdW1lKG9ubG9hZFNjcmVlblNoYXJlRGF0YSk7XG4gICAgICAgIH1cbiAgICB9LCBbb25sb2FkU2NyZWVuU2hhcmVEYXRhLCBkZXZpY2UsIGNvbnN1bWVyVHJhbnNwb3J0XSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRTY3JlZW5TaGFyZWQocHJvcHMuc2NyZWVuU2hhcmVkKTtcbiAgICAgICAgaWYgKHByb3BzLnNjcmVlblNoYXJlZCkge1xuICAgICAgICAgICAgc3RhcnRTaGFyZVNjcmVlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RvcFNoYXJlU2NyZWVuKCk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMuc2NyZWVuU2hhcmVkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2Y0V2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlciwgVkNFdmVudFR5cGUuTkVXX1BST0RVQ0VSUywgVkNFdmVudFR5cGUuQ09OU1VNRVJfQ0xPU0VELFxuICAgICAgICAgICAgVkNFdmVudFR5cGUuUEFSVElDSVBBTlRfSU5fVklFVywgVkNFdmVudFR5cGUuUFJPRFVDRVJfVFJBTlNQT1JUX0ZBSUxFRCk7XG4gICAgICAgIHNldHVwU2VsZkRldmljZXMoKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLnJlbW92ZVN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgICAgIHRyYW5zcG9ydHMuY3VycmVudC5jbG9zZUNvbnN1bWVyVHJhbnNwb3J0KCk7XG4gICAgICAgICAgICB0cmFuc3BvcnRzLmN1cnJlbnQuY2xvc2VQcm9kdWNlclRyYW5zcG9ydCgpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChncmlkKSB7XG4gICAgICAgICAgICBwcm9wcy5vbkdyaWRTZXR1cCgpO1xuICAgICAgICB9XG4gICAgfSwgW2dyaWRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5wYXJ0aWNpcGFudHMgJiYgcHJvcHMuY3VycmVudFVzZXJGdWxsTmFtZSkge1xuICAgICAgICAgICAgc2V0Q3VycmVudFVzZXJQYXJ0aWNpcGFudCh7XG4gICAgICAgICAgICAgICAgaXNDdXJyZW50VXNlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB1c2VySWQ6IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lLFxuICAgICAgICAgICAgICAgIHBlZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgbmFtZTogcHJvcHMuY3VycmVudFVzZXJGdWxsTmFtZSxcbiAgICAgICAgICAgICAgICBhdmF0YXJJZDogc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlckF2YXRhcklkJyksXG4gICAgICAgICAgICAgICAgdmlkZW9NdXRlZCxcbiAgICAgICAgICAgICAgICBhdWRpb011dGVkXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgaW5WaWV3UGFydGljaXBhbnRzLnNwbGljZSgwLCBpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFydGljaXBhbnQgb2YgcHJvcHMucGFydGljaXBhbnRzKSB7XG4gICAgICAgICAgICAgICAgcGFydGljaXBhbnQuaW5WaWV3ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpblZpZXdQYXJ0aWNpcGFudHMucHVzaChwYXJ0aWNpcGFudCk7XG4gICAgICAgICAgICAgICAgaWYgKCsrY291bnRlciA+PSBNQVhfUk9XUyAqIE1BWF9DT0xTKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0dXBHcmlkKGluVmlld1BhcnRpY2lwYW50cyk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMucGFydGljaXBhbnRzLCBwcm9wcy5jdXJyZW50VXNlckZ1bGxOYW1lLCBwcm9wcy5kaXNwbGF5U3RhdGVdKTtcblxuICAgIGNvbnN0IHNldHVwR3JpZCA9ICgpID0+IHtcbiAgICAgICAgbGV0IGluVmlld0dyaWQgPSBbXTtcbiAgICAgICAgbGV0IG51bVJvd3MgPSBpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoIDwgTUFYX1JPV1MgPyBpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoIDogTUFYX1JPV1M7XG4gICAgICAgIGxldCByb3dzID0gaW5WaWV3UGFydGljaXBhbnRzLmxlbmd0aCA9PT0gMiA/IDEgOiBudW1Sb3dzO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBpblZpZXdHcmlkLnB1c2goW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGN1cnJlbnRSb3dJbmRleCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5WaWV3UGFydGljaXBhbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpblZpZXdHcmlkW2N1cnJlbnRSb3dJbmRleF0ucHVzaChpblZpZXdQYXJ0aWNpcGFudHNbaV0pO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRSb3dJbmRleCsrID09PSByb3dzIC0gMSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRSb3dJbmRleCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzZXRHcmlkKGluVmlld0dyaWQpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZW5kZXJTdHJpcCgpIHtcbiAgICAgICAgcmV0dXJuIGluVmlld1BhcnRpY2lwYW50cyAmJiBpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93WDogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxNDhweCcsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93WTogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3cgZmxleC1yb3cgZmxleC1ub3dyYXAgbm8tbWFyZ2luIG5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICB7aW5WaWV3UGFydGljaXBhbnRzLm1hcCgocGFydGljaXBhbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17J2NvbC0qLSonfSBrZXk9e2luZGV4ICsgJy0nICsgcGFydGljaXBhbnQudXNlcklkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMjAwcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxNDhweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VkNSb29tUGFydGljaXBhbnQgZGF0YT17cGFydGljaXBhbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlPXtkZXZpY2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVldGluZ0lkPXttZWV0aW5nSWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheVN0YXRlPXtkaXNwbGF5U3RhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9NdXRlZD17cGFydGljaXBhbnQuYXVkaW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb011dGVkPXtwYXJ0aWNpcGFudC52aWRlb011dGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVtb3ZlRnJvbVZpZXc9eyhwYXJ0aWNpcGFudCkgPT4gcmVtb3ZlRnJvbVZpZXcocGFydGljaXBhbnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyVHJhbnNwb3J0PXtjb25zdW1lclRyYW5zcG9ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydHBDYXBhYmlsaXRpZXM9e3J0cENhcGFiaWxpdGllc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkluVmlld1BhcnRpY2lwYW50cz17aW5WaWV3UGFydGljaXBhbnRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudHM9e3BhcnRpY2lwYW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXppbmc9eydzbSd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0QXVkaW9NdXRlPXsoKSA9PiBwcm9wcy5vbkhvc3RBdWRpb011dGUocGFydGljaXBhbnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSG9zdFZpZGVvTXV0ZT17KCkgPT4gcHJvcHMub25Ib3N0VmlkZW9NdXRlKHBhcnRpY2lwYW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0hvc3Q9e2lzSG9zdH0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj47XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj47XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyUm93ID0gKHJvdywgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxHcmlkXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcidcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uPVwicm93XCJcbiAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudD1cImNlbnRlclwiXG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiIGNvbnRhaW5lciBpdGVtIHNwYWNpbmc9ezJ9PlxuICAgICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAge3Jvdy5tYXAoKHBhcnRpY2lwYW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxHcmlkIGl0ZW0ga2V5PXtpbmRleCArICctJyArIHBhcnRpY2lwYW50LnVzZXJJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9eydtZWV0aW5nUGFydGljaXBhbnRDb250YWluZXInfSBzdHlsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleEJhc2lzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VkNSb29tUGFydGljaXBhbnQgZGF0YT17cGFydGljaXBhbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZT17ZGV2aWNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWV0aW5nSWQ9e21lZXRpbmdJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6aW5nPXtkaXNwbGF5U3RhdGUgPT09ICdNSU5JTUlaRUQnID8gJ3NtJyA6ICdtZCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvTXV0ZWQ9e3BhcnRpY2lwYW50LmF1ZGlvTXV0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvTXV0ZWQ9e3BhcnRpY2lwYW50LnZpZGVvTXV0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVtb3ZlRnJvbVZpZXc9eyhwYXJ0aWNpcGFudCkgPT4gcmVtb3ZlRnJvbVZpZXcocGFydGljaXBhbnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lclRyYW5zcG9ydD17Y29uc3VtZXJUcmFuc3BvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mSW5WaWV3UGFydGljaXBhbnRzPXtpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudHM9e3BhcnRpY2lwYW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRwQ2FwYWJpbGl0aWVzPXtydHBDYXBhYmlsaXRpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSG9zdEF1ZGlvTXV0ZT17KCkgPT4gcHJvcHMub25Ib3N0QXVkaW9NdXRlKHBhcnRpY2lwYW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0VmlkZW9NdXRlPXsoKSA9PiBwcm9wcy5vbkhvc3RWaWRlb011dGUocGFydGljaXBhbnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0hvc3Q9e2lzSG9zdH0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9HcmlkPjtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgIDwvR3JpZD5cbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVuZGVyQ3VycmVudFBhcnRpY2lwYW50KCkge1xuICAgICAgICByZXR1cm4gPD5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50VXNlclBhcnRpY2lwYW50ICYmXG4gICAgICAgICAgICAgICAgPFZDUm9vbVBhcnRpY2lwYW50IGRhdGE9e2N1cnJlbnRVc2VyUGFydGljaXBhbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZT17ZGV2aWNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWV0aW5nSWQ9e21lZXRpbmdJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVldGluZ1RpdGxlPXttZWV0aW5nVGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0cENhcGFiaWxpdGllcz17cnRwQ2FwYWJpbGl0aWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkF1ZGlvRGV2aWNlQ2hhbmdlPXtwcm9wcy5vbkF1ZGlvRGV2aWNlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lclRyYW5zcG9ydD17Y29uc3VtZXJUcmFuc3BvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyVHJhbnNwb3J0PXtwcm9kdWNlclRyYW5zcG9ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9NdXRlZD17YXVkaW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9NdXRlZD17dmlkZW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHM9e2luVmlld1BhcnRpY2lwYW50cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50cz17cGFydGljaXBhbnRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkhvc3RBdWRpb011dGU9eygpID0+IHByb3BzLm9uSG9zdEF1ZGlvTXV0ZShjdXJyZW50VXNlclBhcnRpY2lwYW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0VmlkZW9NdXRlPXsoKSA9PiBwcm9wcy5vbkhvc3RWaWRlb011dGUoY3VycmVudFVzZXJQYXJ0aWNpcGFudCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSG9zdD17aXNIb3N0fS8+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvPjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRNZWV0aW5nRG9jdW1lbnQoKSB7XG4gICAgICAgIHJldHVybiBtZWV0aW5nVmlld0hhbmRsZXIudmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgR0FMTEVSWV9HQVAgPSA4O1xuXG4gICAgLy8gUHJvcG9ydGlvbmFsIGZpbGwgbGF5b3V0OiAxIHBlcnNvbiBmaWxscyB0aGUgd2hvbGUgYXJlYTsgZWFjaCBqb2luXG4gICAgLy8gc3ViZGl2aWRlcyB0aGUgc3BhY2UuIFBpY2sgdGhlIHJvdyBzcGxpdCB0aGF0IG1heGltaXNlcyB0aGUgc21hbGxlciB0aWxlXG4gICAgLy8gZGltZW5zaW9uIChzbyBmYWNlcyBzdGF5IGJpZyksIHRpZS1icmVha2luZyB0b3dhcmQgY2VsbHMgc2hhcGVkIGxpa2UgdGhlXG4gICAgLy8gY29udGFpbmVyIOKAlCB3aGljaCBuYXR1cmFsbHkgc3BsaXRzIGFsb25nIHRoZSBsb25nZXIgYXhpcy4gUmV0dXJucyB0aGVcbiAgICAvLyBwYXJ0aWNpcGFudCBjb3VudCBwZXIgcm93IChleHRyYXMgbGFuZCBvbiB0aGUgdG9wIHJvd3MpLlxuICAgIGZ1bmN0aW9uIGNvbXB1dGVSb3dTcGxpdChjb3VudCwgd2lkdGgsIGhlaWdodCkge1xuICAgICAgICBpZiAoY291bnQgPD0gMSkgcmV0dXJuIFtjb3VudCB8fCAxXTtcbiAgICAgICAgY29uc3QgdyA9IHdpZHRoID4gMCA/IHdpZHRoIDogMTY7XG4gICAgICAgIGNvbnN0IGggPSBoZWlnaHQgPiAwID8gaGVpZ2h0IDogOTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyQXNwZWN0ID0gdyAvIGg7XG4gICAgICAgIGxldCBiZXN0Um93cyA9IDEsIGJlc3RNaW4gPSAtMSwgYmVzdFBlbmFsdHkgPSBJbmZpbml0eTtcbiAgICAgICAgZm9yIChsZXQgcm93cyA9IDE7IHJvd3MgPD0gY291bnQ7IHJvd3MrKykge1xuICAgICAgICAgICAgY29uc3QgY29scyA9IE1hdGguY2VpbChjb3VudCAvIHJvd3MpO1xuICAgICAgICAgICAgY29uc3QgY2VsbFcgPSB3IC8gY29scztcbiAgICAgICAgICAgIGNvbnN0IGNlbGxIID0gaCAvIHJvd3M7XG4gICAgICAgICAgICBjb25zdCBtaW5EaW0gPSBNYXRoLm1pbihjZWxsVywgY2VsbEgpO1xuICAgICAgICAgICAgY29uc3QgcGVuYWx0eSA9IE1hdGguYWJzKChjZWxsVyAvIGNlbGxIKSAtIGNvbnRhaW5lckFzcGVjdCk7XG4gICAgICAgICAgICBpZiAobWluRGltID4gYmVzdE1pbiArIDEgfHwgKE1hdGguYWJzKG1pbkRpbSAtIGJlc3RNaW4pIDw9IDEgJiYgcGVuYWx0eSA8IGJlc3RQZW5hbHR5KSkge1xuICAgICAgICAgICAgICAgIGJlc3RSb3dzID0gcm93cztcbiAgICAgICAgICAgICAgICBiZXN0TWluID0gbWluRGltO1xuICAgICAgICAgICAgICAgIGJlc3RQZW5hbHR5ID0gcGVuYWx0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiYXNlID0gTWF0aC5mbG9vcihjb3VudCAvIGJlc3RSb3dzKTtcbiAgICAgICAgbGV0IGV4dHJhID0gY291bnQgJSBiZXN0Um93cztcbiAgICAgICAgY29uc3QgcGVyUm93ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmVzdFJvd3M7IGkrKykge1xuICAgICAgICAgICAgcGVyUm93LnB1c2goYmFzZSArIChleHRyYS0tID4gMCA/IDEgOiAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBlclJvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW5kZXJQYXJ0aWNpcGFudEdyaWQoKSB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gaW5WaWV3UGFydGljaXBhbnRzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcGVyUm93ID0gY29tcHV0ZVJvd1NwbGl0KGNvdW50LCBnYWxsZXJ5V2lkdGgsIGdhbGxlcnlIZWlnaHQpO1xuICAgICAgICAvLyBQcmUtc2xpY2UgcGFydGljaXBhbnRzIGludG8gdGhlaXIgcm93cy5cbiAgICAgICAgY29uc3Qgcm93cyA9IFtdO1xuICAgICAgICBsZXQgaWR4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIHBlclJvdykge1xuICAgICAgICAgICAgcm93cy5wdXNoKGluVmlld1BhcnRpY2lwYW50cy5zbGljZShpZHgsIGlkeCArIG4pKTtcbiAgICAgICAgICAgIGlkeCArPSBuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEV2ZXJ5IHRpbGUgaXMgdGhlIHNhbWUgd2lkdGggKGEgMS9tYXhDb2xzIHNsaWNlKS4gQSBzaG9ydCBsYXN0IHJvdyBrZWVwc1xuICAgICAgICAvLyB0aGF0IHdpZHRoIGFuZCBjZW50cmVzLCBpbnN0ZWFkIG9mIG9uZSBsb25lIHRpbGUgc3RyZXRjaGluZyBmdWxsLXdpZHRoLlxuICAgICAgICBjb25zdCBtYXhDb2xzID0gcGVyUm93Lmxlbmd0aCA/IE1hdGgubWF4KC4uLnBlclJvdykgOiAxO1xuICAgICAgICBjb25zdCB0aWxlV2lkdGggPSAnY2FsYygoMTAwJSAtICcgKyAoKG1heENvbHMgLSAxKSAqIEdBTExFUllfR0FQKSArICdweCkgLyAnICsgbWF4Q29scyArICcpJztcbiAgICAgICAgcmV0dXJuICghc2NyZWVuU2hhcmVkICYmICF3aGl0ZUJvYXJkU2hvd24gJiYgIW1pbnV0ZXNTaG93biB8fCAoc2NyZWVuU2hhcmVkICYmICFzaG93U2hhcmVkU2NyZWVuKSAmJiAhc29tZW9uZVNoYXJpbmcgJiYgIW1pbnV0ZXNTaG93bikgJiZcbiAgICAgICAgICAgIDxCb3ggc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBmbGV4R3JvdzogMSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGRpc3BsYXlTdGF0ZSA9PT0gJ01BWElNSVpFRCcgPyAnY2FsYygxMDAlIC0gMjMycHgpJyA6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBHQUxMRVJZX0dBUCArICdweCdcbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgcmVmPXtnYWxsZXJ5UmVmfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICBnYXA6IEdBTExFUllfR0FQICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiAwXG4gICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICB7cm93cy5tYXAoKHJvd1BhcnRpY2lwYW50cywgcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYga2V5PXtyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleDogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXA6IEdBTExFUllfR0FQICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cm93UGFydGljaXBhbnRzLm1hcCgocGFydGljaXBhbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYga2V5PXtwYXJ0aWNpcGFudC51c2VySWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7ZmxleDogJzAgMCBhdXRvJywgd2lkdGg6IHRpbGVXaWR0aCwgbWluV2lkdGg6IDAsIG1pbkhlaWdodDogMH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZDUm9vbVBhcnRpY2lwYW50IGRhdGE9e3BhcnRpY2lwYW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZT17ZGV2aWNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZXRpbmdJZD17bWVldGluZ0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemluZz17ZGlzcGxheVN0YXRlID09PSAnTUlOSU1JWkVEJyA/ICdzbScgOiAnbWQnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvTXV0ZWQ9e3BhcnRpY2lwYW50LmF1ZGlvTXV0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9NdXRlZD17cGFydGljaXBhbnQudmlkZW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblJlbW92ZUZyb21WaWV3PXsocGFydGljaXBhbnQpID0+IHJlbW92ZUZyb21WaWV3KHBhcnRpY2lwYW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lclRyYW5zcG9ydD17Y29uc3VtZXJUcmFuc3BvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHM9e2luVmlld1BhcnRpY2lwYW50cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRzPXtwYXJ0aWNpcGFudHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRwQ2FwYWJpbGl0aWVzPXtydHBDYXBhYmlsaXRpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0QXVkaW9NdXRlPXsoKSA9PiBwcm9wcy5vbkhvc3RBdWRpb011dGUocGFydGljaXBhbnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSG9zdFZpZGVvTXV0ZT17KCkgPT4gcHJvcHMub25Ib3N0VmlkZW9NdXRlKHBhcnRpY2lwYW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0hvc3Q9e2lzSG9zdH0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj47XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9Cb3g+O1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIGRldmljZSA/XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J3Jvdy0qLSogZ3JpZCd9XG4gICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGRpc3BsYXlTdGF0ZSA9PT0gJ01BWElNSVpFRCcgPyAnMTAwJScgOiBkaXNwbGF5U3RhdGUgPT09ICdNSU5JTUlaRUQnID8gJ2NhbGMoMTAwJSAtIDEwMHB4KScgOiAnY2FsYygxMDAlIC0gMjAwcHgpJyxcbiAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBkaXNwbGF5U3RhdGUgPT09ICdNQVhJTUlaRUQnID8gbnVsbCA6ICd0YWJsZScsXG4gICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgKHJvb21TdGF0dXMgPT09ICdMT0JCWScgfHwgcHJvcHMuYWxsVXNlclBhcnRpY2lwYW50c0xlZnQpICYmXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogZGlzcGxheVN0YXRlID09PSAnTUFYSU1JWkVEJyA/ICdjYWxjKDEwMCUgLSAyMzJweCknIDogJ2NhbGMoMTAwJSAtIDEyMHB4KScsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzI4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJ1xuICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQUlUSU5HX0ZPUl9PVEhFUlNfVE9fSk9JTl9NRVNTQUdFXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdyaWQgJiYgcm9vbVN0YXR1cyAhPT0gJ0xPQkJZJyAmJlxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlTdGF0ZSA9PT0gJ01BWElNSVpFRCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJQYXJ0aWNpcGFudEdyaWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheVN0YXRlID09PSAnTUlOSU1JWkVEJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICdjYWxjKDEwMCUgLSAyMDBweCknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAndGFibGUtY2VsbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyUGFydGljaXBhbnRHcmlkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlTdGF0ZSA9PT0gJ1BJTk5FRCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNpZGVCYXJDb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWV0aW5nQ2hhdD17bWVldGluZ0NoYXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0hvc3Q9e2lzSG9zdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hhaXJQZXJzb249e2lzQ2hhaXJQZXJzb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWI9eydQZW9wbGUnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVldGluZ0lkPXttZWV0aW5nSWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudHM9e3Byb3BzLnBhcnRpY2lwYW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSG9zdEF1ZGlvTXV0ZT17cHJvcHMub25Ib3N0QXVkaW9NdXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0VmlkZW9NdXRlPXtwcm9wcy5vbkhvc3RWaWRlb011dGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydjb250ZW50LWJveCd9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICghKChzY3JlZW5TaGFyZWQgJiYgc2hvd1NoYXJlZFNjcmVlbikgfHwgc29tZW9uZVNoYXJpbmcpKSA/ICdub25lJyA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogJzEwMCUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9eydzY3JlZW4tc2hhcmUtdmlkZW8nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5IHJlZj17c2hhcmVTY3JlZW5WaWRlb1JlZn0gbXV0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAnMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydjb250ZW50LWJveCd9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICghKG1pbnV0ZXNTaG93biAmJiBzaG93TWludXRlcykpID8gJ25vbmUnIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnYXV0bydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogJzEwMCUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPERvY3VtZW50Vmlld2VyIGNvbmZpZz17bWVldGluZ1ZpZXdDb25maWcyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZT17bWVldGluZ1ZpZXdIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZD17cHJvcHMudmlld0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7ZGlzcGxheVN0YXRlID09PSAnTUFYSU1JWkVEJyA/ICdyb3ctKi0qJyA6ICcnfWB9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBkaXNwbGF5U3RhdGUgPT09ICdNQVhJTUlaRUQnID8gJzEwMCUnIDogJzIwMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBkaXNwbGF5U3RhdGUgPT09ICdNQVhJTUlaRUQnID8gJzE1MnB4JyA6IGRpc3BsYXlTdGF0ZSA9PT0gJ01JTklNSVpFRCcgPyAnMTAwJScgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogJzAnLFxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAoKHNjcmVlblNoYXJlZCAmJiBzaG93U2hhcmVkU2NyZWVuKSB8fCBzb21lb25lU2hhcmluZyB8fCAobWludXRlc1Nob3duICYmIHNob3dNaW51dGVzKSkgPyAnbm9uZScgOiBkaXNwbGF5U3RhdGUgPT09ICdNQVhJTUlaRUQnID8gJ2ZsZXgnIDogZGlzcGxheVN0YXRlID09PSAnTUlOSU1JWkVEJyA/ICd0YWJsZS1jZWxsJyA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogJ3RvcCcsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogJzhweCcsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAnOHB4J1xuICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17JyBzdHJpcC1wYXJ0aWNpcGFudHMnfSBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGRpc3BsYXlTdGF0ZSA9PT0gJ01BWElNSVpFRCcgPyAnY2FsYygxMDAlIC0gMjMycHgpJyA6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzE0OHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogJzE2cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcxNnB4J1xuICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHdoaXRlQm9hcmRTaG93biB8fCByb29tU3RhdHVzID09PSAnTE9CQlknKSAmJiBncmlkKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3RyaXAoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7KGRpc3BsYXlTdGF0ZSA9PT0gJ01BWElNSVpFRCcgPyAnY29sICcgOiAnJyl9YH0gc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjAwcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTQ4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICcxNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAnMCcsXG4gICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlckN1cnJlbnRQYXJ0aWNpcGFudCgpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICgod2FpdGluZ0xpc3QgJiYgd2FpdGluZ0xpc3QubGVuZ3RoID4gMCkpICYmXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnbm8tc2lkZS1tYXJnaW4gbm8tc2lkZS1wYWRkaW5nIGdyaWQtc2lkZS1iYXInfSBzdHlsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAnMTZweCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0aW5nTGlzdCAmJiB3YWl0aW5nTGlzdC5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExvYmJ5V2FpdGluZ0xpc3Qgd2FpdGluZ0xpc3Q9e3dhaXRpbmdMaXN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9IZWlnaHQ9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0VXNlckhhbmRsZXI9e3Byb3BzLnJlamVjdFVzZXJIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdFVzZXJIYW5kbGVyPXtwcm9wcy5hY2NlcHRVc2VySGFuZGxlcn0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDpcbiAgICAgICAgICAgIG51bGxcbiAgICApO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFZDUm9vbVdvcmtzcGFjZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0FBLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxrQkFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksSUFBQSxHQUFB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