@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
@@ -20,10 +20,12 @@ var _material = require("@mui/material");
20
20
  var _SocketManager = _interopRequireDefault(require("../SocketManager"));
21
21
  var _Button = _interopRequireDefault(require("@mui/material/Button"));
22
22
  var _ApplicationManager = _interopRequireDefault(require("../../ApplicationManager"));
23
+ var _audioLevelMeter = require("./audioLevelMeter");
23
24
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
24
25
  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); }
25
26
  /* eslint-disable react-hooks/exhaustive-deps */
26
27
 
28
+ const SPEAKING_LEVEL = 6;
27
29
  const VIDEO_CODEC_OPTIONS = exports.VIDEO_CODEC_OPTIONS = {
28
30
  videoGoogleStartBitrate: 1000
29
31
  };
@@ -73,6 +75,13 @@ const VCRoomParticipant = props => {
73
75
  const audioRef = (0, _react.useRef)();
74
76
  const tracks = (0, _react.useRef)(new _Tracks.default());
75
77
  const soundLevelCounter = (0, _react.useRef)(0);
78
+ // Active-speaker meters: this (self) tile is the audio hub — it consumes
79
+ // every participant's audio + produces the local mic — so it runs the level
80
+ // meters and broadcasts {userId, level} for each tile to highlight itself.
81
+ const meters = (0, _react.useRef)(new Map());
82
+ // Set on unmount so the recursive consume/retry setTimeout loops stop
83
+ // re-scheduling (otherwise they poll/retry forever after the tile is gone).
84
+ const unmountedRef = (0, _react.useRef)(false);
76
85
  const showVideo = true;
77
86
  const {
78
87
  consumerTransport,
@@ -109,6 +118,11 @@ const VCRoomParticipant = props => {
109
118
  removeConsumer(be.payload.consumerId, be.payload.kind);
110
119
  }
111
120
  break;
121
+ case _VCEventType.VCEventType.AUDIO_LEVEL:
122
+ if (be.payload && be.payload.userId === props.data.userId) {
123
+ setSoundLevel(be.payload.level);
124
+ }
125
+ break;
112
126
  }
113
127
  }
114
128
  };
@@ -195,14 +209,16 @@ const VCRoomParticipant = props => {
195
209
  }, [props.videoMuted]);
196
210
  (0, _react.useEffect)(() => {
197
211
  if (producerTransport) {
198
- if (props.videoMuted) {
199
- stopProducing('video');
200
- } else {
212
+ // A (re)assigned transport means existing producers lived on the old
213
+ // (now-closed) transport. Tear them down properly — close + stop the
214
+ // local tracks + notify the server — so produce() recreates them on the
215
+ // new transport instead of early-returning. No-op on first mount.
216
+ stopProducing('video');
217
+ stopProducing('audio');
218
+ if (!props.videoMuted) {
201
219
  produce('video');
202
220
  }
203
- if (props.audioMuted) {
204
- stopProducing('audio');
205
- } else {
221
+ if (!props.audioMuted) {
206
222
  produce('audio');
207
223
  }
208
224
  }
@@ -267,7 +283,7 @@ const VCRoomParticipant = props => {
267
283
  };
268
284
  (0, _react.useEffect)(() => {
269
285
  _VCEventManager.default.removeSubscriptions(eventHandler);
270
- _VCEventManager.default.addSubscriptions(eventHandler, _VCEventType.VCEventType.AUDIO_VISUAL_SETTINGS_CHANGED, _VCEventType.VCEventType.RAISE_HAND, _VCEventType.VCEventType.LOWER_HAND, _VCEventType.VCEventType.NEW_PRODUCERS, _VCEventType.VCEventType.CONSUMER_CLOSED);
286
+ _VCEventManager.default.addSubscriptions(eventHandler, _VCEventType.VCEventType.AUDIO_VISUAL_SETTINGS_CHANGED, _VCEventType.VCEventType.RAISE_HAND, _VCEventType.VCEventType.LOWER_HAND, _VCEventType.VCEventType.NEW_PRODUCERS, _VCEventType.VCEventType.CONSUMER_CLOSED, _VCEventType.VCEventType.AUDIO_LEVEL);
271
287
  if (props.isCurrentUser) {
272
288
  navigator.mediaDevices.ondevicechange = () => {
273
289
  navigator.mediaDevices.enumerateDevices().then(devices => {
@@ -283,16 +299,46 @@ const VCRoomParticipant = props => {
283
299
  }
284
300
  return () => {
285
301
  console.log('======================DESTROYING PARTICIPANT========================= : ' + props.data.userId);
302
+ unmountedRef.current = true;
286
303
  if (props.isCurrentUser) {
304
+ // Release the global devicechange handler this component installed —
305
+ // otherwise it survives unmount and fires into stale component state.
306
+ navigator.mediaDevices.ondevicechange = null;
287
307
  stopProducing('audio');
288
308
  stopProducing('video');
289
309
  }
290
310
  for (let [key, value] of consumers) {
291
311
  removeConsumer(key, 'video');
292
312
  }
313
+
314
+ // Stop every audio-level meter (self mic + all consumed streams).
315
+ meters.current.forEach(stop => stop());
316
+ meters.current.clear();
293
317
  _VCEventManager.default.removeSubscriptions(eventHandler);
294
318
  };
295
319
  }, []);
320
+
321
+ // Meter a stream and broadcast its level under `userId`. Keyed so we can
322
+ // stop/replace it when the consumer closes or the producer restarts.
323
+ const startMeter = (key, stream, userId) => {
324
+ stopMeter(key);
325
+ const stop = (0, _audioLevelMeter.startAudioLevelMeter)(stream, level => {
326
+ _VCEventManager.default.fireEvent(_VCEventType.VCEventType.AUDIO_LEVEL, {
327
+ payload: {
328
+ userId,
329
+ level
330
+ }
331
+ });
332
+ });
333
+ meters.current.set(key, stop);
334
+ };
335
+ const stopMeter = key => {
336
+ const stop = meters.current.get(key);
337
+ if (stop) {
338
+ stop();
339
+ meters.current.delete(key);
340
+ }
341
+ };
296
342
  const produce = async type => {
297
343
  if (!device) {
298
344
  console.error('No available device');
@@ -331,6 +377,10 @@ const VCRoomParticipant = props => {
331
377
  track
332
378
  };
333
379
  audioRef.current = stream;
380
+ if (type === 'audio') {
381
+ // Meter the local mic so the self tile highlights when you speak.
382
+ startMeter('self-audio', stream, props.data.userId);
383
+ }
334
384
  if (props.isHost && type === 'audio') {
335
385
  _VCRoomRecorder.default.addTrack(props.data.userId, track);
336
386
  tracks.current.setAudioTrack(track);
@@ -371,6 +421,7 @@ const VCRoomParticipant = props => {
371
421
  };
372
422
  const consumeFailedProducers = () => {
373
423
  setTimeout(function () {
424
+ if (unmountedRef.current) return;
374
425
  if (consumerTransport) {
375
426
  onNewProducers(failedProducersDueToNullTransport, true);
376
427
  failedProducersDueToNullTransport.splice(0, failedProducersDueToNullTransport.length);
@@ -428,6 +479,8 @@ const VCRoomParticipant = props => {
428
479
  console.log("====== PRODUCERS THAT COULD NOT BE CONSUMES : [ " + JSON.stringify(failedProducersDueToNullTransport) + " ] =======");
429
480
  };
430
481
  const removeConsumer = (consumerId, kind, userId) => {
482
+ // Stop any active-speaker meter attached to this consumer's stream.
483
+ stopMeter(consumerId);
431
484
  if (kind === 'video') {
432
485
  if (videoStream.current) {
433
486
  if (videoStream.current) {
@@ -459,6 +512,7 @@ const VCRoomParticipant = props => {
459
512
  if (retries < 10) {
460
513
  console.log('RE-TRYING [' + retries + ']');
461
514
  setTimeout(function () {
515
+ if (unmountedRef.current) return;
462
516
  consume(producerId, kind, loading, userId, retries);
463
517
  }, 5000);
464
518
  } else {
@@ -492,6 +546,9 @@ const VCRoomParticipant = props => {
492
546
  audioElement.playsinline = false;
493
547
  audioElement.autoplay = true;
494
548
  document.getElementById('meeting-audio-el-container').appendChild(audioElement);
549
+
550
+ // Meter this participant's audio for active-speaker highlight.
551
+ startMeter(consumer.id, stream, userId);
495
552
  if (props.isHost) {
496
553
  _VCRoomRecorder.default.addTrack(userId, stream.getAudioTracks()[0]);
497
554
  }
@@ -500,9 +557,10 @@ const VCRoomParticipant = props => {
500
557
  consumer.on('trackended', () => {
501
558
  console.log(kind + " CONSUMER TRACK ENDED FOR " + userId);
502
559
  removeConsumer(consumer.id, kind, userId);
503
- let participantVideoMuted = participants.find(p => p.userId === userId).videoMuted;
504
- let participantAudioMuted = participants.find(p => p.userId === userId).audioMuted;
505
- if (kind === 'video' && !participantVideoMuted || kind === 'audio' && !participantAudioMuted) {
560
+ // Guard: the participant may have left, so find() can be undefined
561
+ // reading .videoMuted/.audioMuted on it threw. No participant → no retry.
562
+ const trackEndedParticipant = participants.find(p => p.userId === userId);
563
+ if (trackEndedParticipant && (kind === 'video' && !trackEndedParticipant.videoMuted || kind === 'audio' && !trackEndedParticipant.audioMuted)) {
506
564
  retryConsume(kind, userId, new Error('trackended while ' + kind + ' is NOT muted'), retries, producerId, loading);
507
565
  }
508
566
  });
@@ -526,8 +584,18 @@ const VCRoomParticipant = props => {
526
584
  className: "".concat('col-*-* ' + (props.isCurrentUser ? 'meeting-participant-container-current-user' : 'meeting-participant-container')),
527
585
  style: {
528
586
  padding: props.padding ? props.padding : null,
529
- height: props.height ? props.height : null,
530
- position: 'relative'
587
+ height: props.height ? props.height : '100%',
588
+ width: '100%',
589
+ position: 'relative',
590
+ borderRadius: '12px',
591
+ overflow: 'hidden',
592
+ boxSizing: 'border-box',
593
+ backgroundColor: props.isCurrentUser ? '#1f2937' : null,
594
+ border: props.isCurrentUser ? '2px solid ' + (_ApplicationManager.default.getApplicationPrimaryColor() || '#1a3c5e') : '1px solid rgba(255,255,255,0.06)',
595
+ // Active-speaker highlight: an inset ring (the tile clips
596
+ // overflow, so an outset shadow would be cut off).
597
+ boxShadow: !audioMuted && soundLevel > SPEAKING_LEVEL ? 'inset 0 0 0 3px ' + (_ApplicationManager.default.getApplicationPrimaryColor() || '#22c55e') : 'none',
598
+ transition: 'box-shadow 120ms ease-out'
531
599
  }
532
600
  }, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, (videoMuted || !videoRef.current || !videoRef.current.srcObject) && /*#__PURE__*/_react.default.createElement("div", {
533
601
  className: 'centered-flex-box',
@@ -539,10 +607,12 @@ const VCRoomParticipant = props => {
539
607
  }, /*#__PURE__*/_react.default.createElement("div", {
540
608
  className: props.sizing === 'sm' ? 'avatar-wrapper-sm' : 'avatar-wrapper',
541
609
  style: {
542
- width: (props.sizing === 'sm' ? 72 : 112) + soundLevel / 10 + 'px',
543
- height: (props.sizing === 'sm' ? 72 : 112) + soundLevel / 10 + 'px',
544
- border: !audioMuted && soundLevel > 3 ? (props.sizing === 'sm' ? 2 : 4) + 'px solid #00476a' : 'none',
545
- backgroundColor: '#e9e9e9'
610
+ width: (props.sizing === 'sm' ? 72 : 112) + 'px',
611
+ height: (props.sizing === 'sm' ? 72 : 112) + 'px',
612
+ boxShadow: !audioMuted && soundLevel > 3 ? '0 0 0 ' + (3 + soundLevel / 12) + 'px ' + (_ApplicationManager.default.getApplicationPrimaryColor() || '#00476a') : 'none',
613
+ transition: 'box-shadow 90ms linear',
614
+ backgroundColor: '#3a4654',
615
+ color: '#fff'
546
616
  }
547
617
  }, /*#__PURE__*/_react.default.createElement("div", {
548
618
  className: props.sizing === 'md' ? 'avatar avatar-md' : props.sizing === 'sm' ? 'avatar avatar-sm' : 'avatar',
@@ -570,6 +640,8 @@ const VCRoomParticipant = props => {
570
640
  style: {
571
641
  width: '100%',
572
642
  height: '100%',
643
+ objectFit: 'cover',
644
+ transform: props.isCurrentUser ? 'scaleX(-1)' : 'none',
573
645
  zIndex: '0',
574
646
  display: videoMuted || !videoRef.current || !videoRef.current.srcObject ? 'none' : null
575
647
  }
@@ -587,80 +659,100 @@ const VCRoomParticipant = props => {
587
659
  style: {
588
660
  display: 'flex',
589
661
  position: 'absolute',
662
+ left: 0,
590
663
  width: '100%',
591
- bottom: props.isCurrentUser ? '12px' : '0',
592
- padding: props.isCurrentUser ? '4px 16px' : props.sizing !== 'sm' ? '4px' : '4px'
664
+ bottom: '0',
665
+ padding: props.sizing === 'sm' ? '6px' : '8px',
666
+ boxSizing: 'border-box',
667
+ alignItems: 'flex-end',
668
+ gap: '4px'
593
669
  }
594
670
  }, /*#__PURE__*/_react.default.createElement("div", {
595
671
  style: {
596
- width: '50%',
597
- display: 'flex',
598
- justifyContent: 'flex-start',
599
- marginLeft: '4px'
672
+ display: 'inline-flex',
673
+ alignItems: 'center',
674
+ maxWidth: '70%',
675
+ padding: props.sizing === 'sm' ? '1px 8px' : '2px 10px',
676
+ borderRadius: '6px',
677
+ backgroundColor: 'rgba(0,0,0,0.55)',
678
+ color: '#fff',
679
+ fontSize: props.sizing === 'sm' ? '11px' : '13px',
680
+ fontWeight: 500,
681
+ lineHeight: 1.4,
682
+ whiteSpace: 'nowrap',
683
+ overflow: 'hidden',
684
+ textOverflow: 'ellipsis',
685
+ marginLeft: 0,
686
+ marginRight: 'auto'
600
687
  }
601
688
  }, !props.isCurrentUser && getParticipantName(), props.isCurrentUser && 'You'), !props.isCurrentUser && /*#__PURE__*/_react.default.createElement("div", {
602
689
  style: {
603
690
  marginLeft: '4px',
604
691
  display: 'flex',
692
+ alignItems: 'center',
605
693
  justifyContent: 'flex-end',
606
- width: '50%'
694
+ gap: '4px'
607
695
  }
608
696
  }, props.isHost && !audioMuted ? /*#__PURE__*/_react.default.createElement(_IconButton.default, {
609
697
  onClick: e => {
610
698
  props.onHostAudioMute(props.data);
611
699
  },
612
700
  style: {
613
- marginRight: '4px',
614
- width: '16px',
615
- height: '16px',
616
- color: 'rgb(40, 40, 43)'
701
+ width: '24px',
702
+ height: '24px',
703
+ color: '#fff',
704
+ backgroundColor: 'rgba(0,0,0,0.55)',
705
+ borderRadius: '6px'
617
706
  }
618
707
  }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
619
708
  id: 'MIC'
620
- })) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, audioMuted ? /*#__PURE__*/_react.default.createElement(_Icon.default, {
709
+ })) : /*#__PURE__*/_react.default.createElement("span", {
710
+ style: {
711
+ display: audioMuted ? 'inline-flex' : 'none',
712
+ alignItems: 'center',
713
+ color: '#fff',
714
+ backgroundColor: 'rgba(0,0,0,0.55)',
715
+ borderRadius: '6px',
716
+ padding: '2px'
717
+ }
718
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
621
719
  id: 'MIC_OFF'
622
- }) : /*#__PURE__*/_react.default.createElement(_Icon.default, {
623
- id: 'MIC'
624
720
  })), props.isHost && !videoMuted && /*#__PURE__*/_react.default.createElement(_IconButton.default, {
625
721
  onClick: e => {
626
722
  props.onHostVideoMute(props.data);
627
723
  },
628
724
  style: {
629
- marginRight: '4px',
630
- width: '16px',
631
- height: '16px',
632
- color: 'white'
725
+ width: '24px',
726
+ height: '24px',
727
+ color: '#fff',
728
+ backgroundColor: 'rgba(0,0,0,0.55)',
729
+ borderRadius: '6px'
633
730
  }
634
731
  }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
635
732
  id: 'CAMERA'
636
733
  }))), props.isCurrentUser && /*#__PURE__*/_react.default.createElement("div", {
637
- className: 'row no-margin no-padding',
638
734
  style: {
639
- width: '100%'
640
- }
641
- }, /*#__PURE__*/_react.default.createElement("div", {
642
- className: 'col no-margin no-padding',
643
- style: {
644
- width: '50%',
645
735
  display: 'flex',
736
+ alignItems: 'center',
646
737
  justifyContent: 'flex-end'
647
738
  }
648
- }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
739
+ }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
649
740
  title: "My devices"
650
741
  }, /*#__PURE__*/_react.default.createElement(_IconButton.default, {
651
742
  onClick: handleClickDevicesIcon,
652
- sx: {
653
- ml: 1
654
- },
655
743
  "aria-controls": openMoreActions ? 'device-menu' : undefined,
656
744
  "aria-haspopup": "true",
657
745
  "aria-expanded": openMoreActions ? 'true' : undefined,
658
746
  style: {
659
- height: '8px'
747
+ width: '24px',
748
+ height: '24px',
749
+ color: '#fff',
750
+ backgroundColor: 'rgba(0,0,0,0.55)',
751
+ borderRadius: '6px'
660
752
  }
661
753
  }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
662
754
  id: 'SETTINGS'
663
- }))))))), !props.isCurrentUser && /*#__PURE__*/_react.default.createElement("span", {
755
+ })))), !props.isCurrentUser && /*#__PURE__*/_react.default.createElement("span", {
664
756
  style: {
665
757
  marginLeft: '4px'
666
758
  }
@@ -727,4 +819,4 @@ const VCRoomParticipant = props => {
727
819
  })));
728
820
  };
729
821
  var _default = exports.default = VCRoomParticipant;
730
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX1ZDRXZlbnRUeXBlIiwiX1ZDRXZlbnRNYW5hZ2VyIiwiX1ZDUm9vbVJlY29yZGVyIiwiX01lZGlhU291cEhlbHBlciIsIl9UcmFja3MiLCJfSWNvbkJ1dHRvbiIsIl9JY29uIiwiX2ljb25zTWF0ZXJpYWwiLCJfVG9vbHRpcCIsIl9tYXRlcmlhbCIsIl9Tb2NrZXRNYW5hZ2VyIiwiX0J1dHRvbiIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJWSURFT19DT0RFQ19PUFRJT05TIiwiZXhwb3J0cyIsInZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlIiwiVklERU9fQ09OU1RSQUlOVFMiLCJhdWRpbyIsInZpZGVvIiwid2lkdGgiLCJtaW4iLCJpZGVhbCIsImhlaWdodCIsIlZJREVPX0VOQ09ESU5HUyIsInJpZCIsIm1heEJpdHJhdGUiLCJzY2FsYWJpbGl0eU1vZGUiLCJsb2NhdGlvbiIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJWQ1Jvb21QYXJ0aWNpcGFudCIsInByb3BzIiwiaGFuZFJhaXNlZCIsInNldEhhbmRSYWlzZWQiLCJSZWFjdCIsInVzZVN0YXRlIiwidmlkZW9NdXRlZCIsInNldFZpZGVvTXV0ZWQiLCJhdWRpb011dGVkIiwic2V0QXVkaW9NdXRlZCIsInByb2R1Y2VyVHJhbnNwb3J0Iiwic2V0UHJvZHVjZXJUcmFuc3BvcnQiLCJ2aWRlb1JlZnJlc2hlciIsInNldFZpZGVvUmVmcmVzaGVyIiwicHJvZHVjZXJzIiwiTWFwIiwiZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0IiwiYXVkaW9EZXZpY2VzIiwic2V0QXVkaW9EZXZpY2VzIiwic2VsZWN0ZWRBdWRpb0RldmljZSIsInNldFNlbGVjdGVkQXVkaW9EZXZpY2UiLCJjb25zdW1lcnMiLCJzb3VuZExldmVsIiwic2V0U291bmRMZXZlbCIsImV2ZW50SGFuZGxlciIsInZpZGVvUmVmIiwidXNlUmVmIiwidmlkZW9TdHJlYW0iLCJhdWRpb1JlZiIsInRyYWNrcyIsIlRyYWNrcyIsInNvdW5kTGV2ZWxDb3VudGVyIiwic2hvd1ZpZGVvIiwiY29uc3VtZXJUcmFuc3BvcnQiLCJkZXZpY2UiLCJwYXJ0aWNpcGFudHMiLCJudW1iZXJPZkluVmlld1BhcnRpY2lwYW50cyIsImFuY2hvckVsIiwic2V0QW5jaG9yRWwiLCJvcGVuTW9yZUFjdGlvbnMiLCJCb29sZWFuIiwiZG93bmxvYWRVcmwiLCJzZXREb3dubG9hZFVybCIsImhhbmRsZXIiLCJpZCIsImRhdGEiLCJ1c2VySWQiLCJvbiIsImV2ZW50VHlwZSIsImJlIiwiVkNFdmVudFR5cGUiLCJBVURJT19WSVNVQUxfU0VUVElOR1NfQ0hBTkdFRCIsIm9uQVZTZXR0aW5nc0NoYW5nZSIsInBheWxvYWQiLCJSQUlTRV9IQU5EIiwib25SYWlzZUhhbmQiLCJMT1dFUl9IQU5EIiwib25Mb3dlckhhbmQiLCJORVdfUFJPRFVDRVJTIiwib25OZXdQcm9kdWNlcnMiLCJDT05TVU1FUl9DTE9TRUQiLCJjb25zdW1lcklkIiwicmVtb3ZlQ29uc3VtZXIiLCJraW5kIiwiaGFuZGxlQ2xpY2tEZXZpY2VzSWNvbiIsImV2ZW50IiwiY3VycmVudFRhcmdldCIsImNoYW5nZUF1ZGlvRGV2aWNlIiwidXNlRWZmZWN0IiwiYXBpIiwiY3VycmVudCIsInNyY09iamVjdCIsInNvdW5kTW9uaXRvciIsImluVmlldyIsImhhbmRsZUNsb3NlRGV2aWNlTWVudSIsImlzQ3VycmVudFVzZXIiLCJzdG9wUHJvZHVjaW5nIiwicHJvZHVjZSIsIlV0aWxzIiwiaXNOdWxsIiwiYXZhdGFySWQiLCJhcHBsaWNhdGlvbk1hbmFnZXIiLCJnZXRDb250ZXh0Um9vdCIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsIm9uQXVkaW9EZXZpY2VDaGFuZ2UiLCJjcmVhdGVQcm9kdWNlclRyYW5zcG9ydCIsImNvbnNvbGUiLCJsb2ciLCJzcGxpY2UiLCJsZW5ndGgiLCJrZXkiLCJ2YWx1ZSIsImZpbmQiLCJwIiwicHJvZHVjZXJJZCIsImNvbnN1bWUiLCJtZWRpYVNvdXBIZWxwZXIiLCJpbml0UHJvZHVjZXJUcmFuc3BvcnQiLCJtZWV0aW5nSWQiLCJnZXRVc2VyRGV0YWlscyIsInVzZXJuYW1lIiwiaGFuZGxlRGV2aWNlc0NoYW5nZWQiLCJkZXZpY2VzIiwiYXVkaW9EZXZpY2VMaXN0IiwiZm9yRWFjaCIsInB1c2giLCJkZXZpY2VJZCIsImxhYmVsIiwidmNFdmVudE1hbmFnZXIiLCJyZW1vdmVTdWJzY3JpcHRpb25zIiwiYWRkU3Vic2NyaXB0aW9ucyIsIm5hdmlnYXRvciIsIm1lZGlhRGV2aWNlcyIsIm9uZGV2aWNlY2hhbmdlIiwiZW51bWVyYXRlRGV2aWNlcyIsInRoZW4iLCJjb25zdW1lRmFpbGVkUHJvZHVjZXJzIiwidHlwZSIsImVycm9yIiwiY2FuUHJvZHVjZSIsIm1lZGlhQ29uc3RyYWludHMiLCJzdHJlYW0iLCJnZXRVc2VyTWVkaWEiLCJ0cmFjayIsImdldEF1ZGlvVHJhY2tzIiwiZ2V0VmlkZW9UcmFja3MiLCJwYXJhbXMiLCJpc0hvc3QiLCJtZWRpYVJlY29yZGVyIiwiYWRkVHJhY2siLCJzZXRBdWRpb1RyYWNrIiwiZW5jb2RpbmdzIiwiY29kZWNPcHRpb25zIiwic2V0VmlkZW9UcmFjayIsInByb2R1Y2VyIiwiZ2V0U3RhdHMiLCJnZXRUcmFja3MiLCJzdG9wIiwiZGVsZXRlIiwic2V0VGltZW91dCIsImNhbGxiYWNrIiwiY2xvc2UiLCJzdG9wVmlkZW9UcmFjayIsInN0b3BBdWRpb1RyYWNrIiwic29ja2V0TWFuYWdlciIsImVtaXRFdmVudCIsIlBST0RVQ0VSX0NMT1NFRCIsInJvb21JZCIsImNhdGNoIiwibG9hZGluZyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzY3JlZW5TaGFyaW5nIiwiYXVkaW9FbGVtZW50IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInJlbW92ZVRyYWNrIiwiZWxlbWVudEJ5SWQiLCJyZW1vdmVDaGlsZCIsInJldHJ5Q29uc3VtZSIsInJldHJpZXMiLCJnZXRDb25zdW1lU3RyZWFtIiwicnRwQ2FwYWJpbGl0aWVzIiwiX3JlZiIsImNvbnN1bWVyIiwiY3JlYXRlRWxlbWVudCIsInBsYXlzaW5saW5lIiwiYXV0b3BsYXkiLCJhcHBlbmRDaGlsZCIsInBhcnRpY2lwYW50VmlkZW9NdXRlZCIsInBhcnRpY2lwYW50QXVkaW9NdXRlZCIsIkVycm9yIiwiZ2V0UGFydGljaXBhbnROYW1lIiwibmFtZSIsImNvbmNhdCIsIkZyYWdtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJwYWRkaW5nIiwicG9zaXRpb24iLCJtYXJnaW5Cb3R0b20iLCJzaXppbmciLCJib3JkZXIiLCJiYWNrZ3JvdW5kQ29sb3IiLCJmb250U2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRQb3NpdGlvbiIsImJvcmRlclJhZGl1cyIsImJhY2tncm91bmRJbWFnZSIsImdldEluaXRpYWxzIiwiYXV0b1BsYXkiLCJyZWYiLCJtdXRlZCIsInpJbmRleCIsImRpc3BsYXkiLCJib3R0b20iLCJqdXN0aWZ5Q29udGVudCIsIm1hcmdpbkxlZnQiLCJvbkNsaWNrIiwib25Ib3N0QXVkaW9NdXRlIiwibWFyZ2luUmlnaHQiLCJjb2xvciIsIm9uSG9zdFZpZGVvTXV0ZSIsInRpdGxlIiwic3giLCJtbCIsIlBhblRvb2wiLCJNZW51Iiwib3BlbiIsIm9uQ2xvc2UiLCJQYXBlclByb3BzIiwiZWxldmF0aW9uIiwib3ZlcmZsb3ciLCJmaWx0ZXIiLCJtdCIsIm1yIiwiY29udGVudCIsInRvcCIsInJpZ2h0IiwiYmdjb2xvciIsInRyYW5zZm9ybSIsInRyYW5zZm9ybU9yaWdpbiIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsImFuY2hvck9yaWdpbiIsIm1hcCIsImluZGV4IiwiTWVudUl0ZW0iLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tZWRpYS9WQ1Jvb21QYXJ0aWNpcGFudC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzICovXG5pbXBvcnQgUmVhY3QsIHt1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCAnLi9WQ1Jvb21QYXJ0aWNpcGFudC5jc3MnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL1V0aWxzJztcbmltcG9ydCB7VkNFdmVudFR5cGV9IGZyb20gJy4vVkNFdmVudFR5cGUnO1xuaW1wb3J0IHZjRXZlbnRNYW5hZ2VyIGZyb20gJy4vVkNFdmVudE1hbmFnZXInO1xuaW1wb3J0IG1lZGlhUmVjb3JkZXIgZnJvbSAnLi9WQ1Jvb21SZWNvcmRlcic7XG5pbXBvcnQgbWVkaWFTb3VwSGVscGVyIGZyb20gJy4vTWVkaWFTb3VwSGVscGVyJztcbmltcG9ydCBUcmFja3MgZnJvbSAnLi9UcmFja3MnO1xuaW1wb3J0IEljb25CdXR0b24gZnJvbSAnQG11aS9tYXRlcmlhbC9JY29uQnV0dG9uJztcbmltcG9ydCBJY29uIGZyb20gJy4uL0ljb24nO1xuaW1wb3J0IHtQYW5Ub29sfSBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsJztcbmltcG9ydCBUb29sdGlwIGZyb20gJ0BtdWkvbWF0ZXJpYWwvVG9vbHRpcCc7XG5pbXBvcnQge01lbnUsIE1lbnVJdGVtfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCBzb2NrZXRNYW5hZ2VyIGZyb20gJy4uL1NvY2tldE1hbmFnZXInO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAbXVpL21hdGVyaWFsL0J1dHRvbic7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL0FwcGxpY2F0aW9uTWFuYWdlcic7XG5cbmV4cG9ydCBjb25zdCBWSURFT19DT0RFQ19PUFRJT05TID0ge1xuICAgIHZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlOiAxMDAwXG59O1xuXG5leHBvcnQgY29uc3QgVklERU9fQ09OU1RSQUlOVFMgPSB7XG4gICAgYXVkaW86IGZhbHNlLFxuICAgIHZpZGVvOiB7XG4gICAgICAgIHdpZHRoOiB7XG4gICAgICAgICAgICBtaW46IDY0MCxcbiAgICAgICAgICAgIGlkZWFsOiAxOTIwXG4gICAgICAgIH0sXG4gICAgICAgIGhlaWdodDoge1xuICAgICAgICAgICAgbWluOiA0MDAsXG4gICAgICAgICAgICBpZGVhbDogMTA4MFxuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IFZJREVPX0VOQ09ESU5HUyA9IFtcbiAgICB7XG4gICAgICAgIHJpZDogJ3IwJyxcbiAgICAgICAgbWF4Qml0cmF0ZTogMjAwMDAsXG4gICAgICAgIC8vc2NhbGVSZXNvbHV0aW9uRG93bkJ5OiAxMC4wLFxuICAgICAgICBzY2FsYWJpbGl0eU1vZGU6ICdTMVQzJ1xuICAgIH0sXG4gICAge1xuICAgICAgICByaWQ6ICdyMScsXG4gICAgICAgIG1heEJpdHJhdGU6IDE1MDAwMCxcbiAgICAgICAgc2NhbGFiaWxpdHlNb2RlOiAnUzFUMydcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcmlkOiAncjInLFxuICAgICAgICBtYXhCaXRyYXRlOiA0NTAwMDAsXG4gICAgICAgIHNjYWxhYmlsaXR5TW9kZTogJ1MxVDMnXG4gICAgfVxuXTtcblxuY29uc3QgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuY29uc3QgVkNSb29tUGFydGljaXBhbnQgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCBbaGFuZFJhaXNlZCwgc2V0SGFuZFJhaXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3ZpZGVvTXV0ZWQsIHNldFZpZGVvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMudmlkZW9NdXRlZCk7XG4gICAgY29uc3QgW2F1ZGlvTXV0ZWQsIHNldEF1ZGlvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMuYXVkaW9NdXRlZCk7XG4gICAgY29uc3QgW3Byb2R1Y2VyVHJhbnNwb3J0LCBzZXRQcm9kdWNlclRyYW5zcG9ydF0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy5wcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgY29uc3QgW3ZpZGVvUmVmcmVzaGVyLCBzZXRWaWRlb1JlZnJlc2hlcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3Byb2R1Y2Vyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnRdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFthdWRpb0RldmljZXMsIHNldEF1ZGlvRGV2aWNlc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW3NlbGVjdGVkQXVkaW9EZXZpY2UsIHNldFNlbGVjdGVkQXVkaW9EZXZpY2VdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2NvbnN1bWVyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtzb3VuZExldmVsLCBzZXRTb3VuZExldmVsXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtldmVudEhhbmRsZXJdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IHZpZGVvUmVmID0gdXNlUmVmKCk7XG4gICAgY29uc3QgdmlkZW9TdHJlYW0gPSB1c2VSZWYoKTtcbiAgICBjb25zdCBhdWRpb1JlZiA9IHVzZVJlZigpO1xuICAgIGNvbnN0IHRyYWNrcyA9IHVzZVJlZihuZXcgVHJhY2tzKCkpO1xuICAgIGNvbnN0IHNvdW5kTGV2ZWxDb3VudGVyID0gdXNlUmVmKDApO1xuICAgIGNvbnN0IHNob3dWaWRlbyA9IHRydWU7XG4gICAgY29uc3Qge1xuICAgICAgICBjb25zdW1lclRyYW5zcG9ydCxcbiAgICAgICAgZGV2aWNlLFxuICAgICAgICBwYXJ0aWNpcGFudHNcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qge251bWJlck9mSW5WaWV3UGFydGljaXBhbnRzfSA9IHByb3BzO1xuICAgIGNvbnN0IFthbmNob3JFbCwgc2V0QW5jaG9yRWxdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3Qgb3Blbk1vcmVBY3Rpb25zID0gQm9vbGVhbihhbmNob3JFbCk7XG5cbiAgICBjb25zdCBbZG93bmxvYWRVcmwsIHNldERvd25sb2FkVXJsXSA9IHVzZVN0YXRlKG51bGwpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21lZXRpbmctcGFydGljaXBhbnQtJyArIHByb3BzLmRhdGEudXNlcklkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiAoZXZlbnRUeXBlLCBiZSkgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkFWU2V0dGluZ3NDaGFuZ2UoYmUucGF5bG9hZCA/IGJlLnBheWxvYWQgOiBiZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5SQUlTRV9IQU5EOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25SYWlzZUhhbmQoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5MT1dFUl9IQU5EOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25Mb3dlckhhbmQoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5ORVdfUFJPRFVDRVJTOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5DT05TVU1FUl9DTE9TRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3VtZXJzLmhhcyhiZS5wYXlsb2FkLmNvbnN1bWVySWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoYmUucGF5bG9hZC5jb25zdW1lcklkLCBiZS5wYXlsb2FkLmtpbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVDbGlja0RldmljZXNJY29uID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHNldEFuY2hvckVsKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIH07XG5cbiAgICBjb25zdCBjaGFuZ2VBdWRpb0RldmljZSA9IChkZXZpY2UpID0+IHtcbiAgICAgICAgc2V0U2VsZWN0ZWRBdWRpb0RldmljZShkZXZpY2UpO1xuICAgIH07XG5cbiAgICBjb25zdCBvblJhaXNlSGFuZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWQudXNlcklkID09PSBwcm9wcy5kYXRhLnVzZXJJZCkge1xuICAgICAgICAgICAgc2V0SGFuZFJhaXNlZCh0cnVlKTtcbiAgICAgICAgICAgIHByb3BzLmRhdGEuaGFuZFJhaXNlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25Mb3dlckhhbmQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgIHNldEhhbmRSYWlzZWQoZmFsc2UpO1xuICAgICAgICAgICAgcHJvcHMuZGF0YS5oYW5kUmFpc2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZXZlbnRIYW5kbGVyLmFwaSA9IGhhbmRsZXIoKTtcbiAgICB9KTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICh2aWRlb1JlZi5jdXJyZW50ICYmIHZpZGVvU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHZpZGVvUmVmLmN1cnJlbnQuc3JjT2JqZWN0ID0gdmlkZW9TdHJlYW0uY3VycmVudDtcbiAgICAgICAgfVxuICAgIH0sIFt2aWRlb1JlZi5jdXJyZW50XSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuc291bmRNb25pdG9yICYmICFwcm9wcy5pblZpZXcpIHtcbiAgICAgICAgICAgIGlmIChzb3VuZExldmVsID4gMykge1xuICAgICAgICAgICAgICAgIHNvdW5kTGV2ZWxDb3VudGVyLmN1cnJlbnQgPSAxMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc291bmRMZXZlbENvdW50ZXIuY3VycmVudCA+IDApIHtcbiAgICAgICAgICAgICAgICBzb3VuZExldmVsQ291bnRlci5jdXJyZW50LS07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb3BzLnNvdW5kTW9uaXRvcihwcm9wcy5kYXRhLnVzZXJJZCwgc291bmRMZXZlbENvdW50ZXIuY3VycmVudCA9PT0gMCB8fCBhdWRpb011dGVkKTtcbiAgICAgICAgfVxuICAgIH0sIFtzb3VuZExldmVsXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgc2V0U291bmRMZXZlbCgwKTtcbiAgICAgICAgICAgIGlmIChwcm9wcy5zb3VuZE1vbml0b3IgJiYgIXByb3BzLmluVmlldykge1xuICAgICAgICAgICAgICAgIHByb3BzLnNvdW5kTW9uaXRvcihwcm9wcy5kYXRhLnVzZXJJZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbYXVkaW9NdXRlZF0pO1xuXG4gICAgY29uc3QgaGFuZGxlQ2xvc2VEZXZpY2VNZW51ID0gKCkgPT4ge1xuICAgICAgICBzZXRBbmNob3JFbChudWxsKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25BVlNldHRpbmdzQ2hhbmdlID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLmRhdGEudXNlcklkID09PSBwYXlsb2FkLnVzZXJJZCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5hdWRpb011dGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRldmljZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZSgnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnZpZGVvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcFByb2R1Y2luZygndmlkZW8nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlKCd2aWRlbycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZXRBdWRpb011dGVkKHBheWxvYWQuYXVkaW9NdXRlZCk7XG4gICAgICAgICAgICBzZXRWaWRlb011dGVkKHBheWxvYWQudmlkZW9NdXRlZCk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG5cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuZGF0YSAmJiAhVXRpbHMuaXNOdWxsKHByb3BzLmRhdGEuYXZhdGFySWQpXG4gICAgICAgICAgICAmJiBwcm9wcy5kYXRhLmF2YXRhcklkICE9PSAndW5kZWZpbmVkJyAmJiBwcm9wcy5kYXRhLmF2YXRhcklkICE9PSAnbnVsbCcpIHtcbiAgICAgICAgICAgIHNldERvd25sb2FkVXJsKGxvY2F0aW9uICsgYXBwbGljYXRpb25NYW5hZ2VyLmdldENvbnRleHRSb290KCkgKyAnL2RvY3MvYXBpL3YxL21hbmFnZXIvZG93bmxvYWQvJyArIHByb3BzLmRhdGEuYXZhdGFySWQgK1xuICAgICAgICAgICAgICAgICc/YWNjZXNzX3Rva2VuPScgKyBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhY2Nlc3NUb2tlbicpICsgJyZpZFRva2VuPScgKyBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpZFRva2VuJykpO1xuICAgICAgICB9XG4gICAgfSwgW3Byb3BzLmRhdGFdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldEF1ZGlvTXV0ZWQocHJvcHMuYXVkaW9NdXRlZCk7XG4gICAgfSwgW3Byb3BzLmF1ZGlvTXV0ZWRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldFZpZGVvTXV0ZWQocHJvcHMudmlkZW9NdXRlZCk7XG4gICAgfSwgW3Byb3BzLnZpZGVvTXV0ZWRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9kdWNlclRyYW5zcG9ydCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLnZpZGVvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCd2aWRlbycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcm9kdWNlKCd2aWRlbycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocHJvcHMuYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ2F1ZGlvJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb2R1Y2UoJ2F1ZGlvJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbcHJvZHVjZXJUcmFuc3BvcnRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldFByb2R1Y2VyVHJhbnNwb3J0KHByb3BzLnByb2R1Y2VyVHJhbnNwb3J0KTtcbiAgICB9LCBbcHJvcHMucHJvZHVjZXJUcmFuc3BvcnRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBwcm9wcy5vbkF1ZGlvRGV2aWNlQ2hhbmdlKHNlbGVjdGVkQXVkaW9EZXZpY2UpO1xuICAgICAgICAgICAgc3RvcFByb2R1Y2luZygnYXVkaW8nLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkQXVkaW9EZXZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9kdWNlclRyYW5zcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlUHJvZHVjZXJUcmFuc3BvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZSgnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW3NlbGVjdGVkQXVkaW9EZXZpY2VdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChjb25zdW1lclRyYW5zcG9ydCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RSQU5TSSBBUlJJVkVEIFdJVEggUFJPRFVDRVJTIDogJywgcHJvcHMuZGF0YS5wcm9kdWNlcnMpO1xuICAgICAgICAgICAgaWYgKHByb3BzLmRhdGEucHJvZHVjZXJzKSB7XG4gICAgICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMocHJvcHMuZGF0YS5wcm9kdWNlcnMsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvbk5ld1Byb2R1Y2VycyhmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQsIHRydWUpO1xuICAgICAgICAgICAgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LnNwbGljZSgwLCBmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQubGVuZ3RoKTtcblxuICAgICAgICAgICAgaWYgKHByb2R1Y2Vycykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSRS1JTlNUQVRJTkcgQ09OU1VNRVJTJyk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIHByb2R1Y2Vycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUFJPQ0VTU0lORyBQUk9EVUNFUiBPRiBUWVBFIDogJyArIGtleSArICcgOiAnICsgdmFsdWUuaWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShwcm9wcy5kYXRhLnByb2R1Y2VycyAmJiB0aGlzLnByb3BzLmRhdGEucHJvZHVjZXJzLmZpbmQoKHApID0+IHAucHJvZHVjZXJJZCA9PT0gdmFsdWUuaWQpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSh2YWx1ZS5pZCwga2V5LCB0cnVlLCB2YWx1ZS51c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1BST0RVQ0VSIEFMUkVBRFkgUFJPQ0VTU0VEJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbY29uc3VtZXJUcmFuc3BvcnRdKTtcblxuICAgIGNvbnN0IGNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBzZXRQcm9kdWNlclRyYW5zcG9ydChhd2FpdCBtZWRpYVNvdXBIZWxwZXIuaW5pdFByb2R1Y2VyVHJhbnNwb3J0KHByb3BzLmRldmljZSwgcHJvcHMubWVldGluZ0lkLFxuICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlRGV2aWNlc0NoYW5nZWQgPSAoZGV2aWNlcykgPT4ge1xuICAgICAgICBsZXQgYXVkaW9EZXZpY2VMaXN0ID0gW107XG4gICAgICAgIGRldmljZXMuZm9yRWFjaCgoZGV2aWNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoJ2F1ZGlvaW5wdXQnID09PSBkZXZpY2Uua2luZCkge1xuICAgICAgICAgICAgICAgIGF1ZGlvRGV2aWNlTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGRldmljZS5kZXZpY2VJZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGRldmljZS5sYWJlbFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzZXRBdWRpb0RldmljZXMoYXVkaW9EZXZpY2VMaXN0KTtcblxuICAgICAgICBpZiAoYXVkaW9EZXZpY2VMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkQXVkaW9EZXZpY2UoYXVkaW9EZXZpY2VMaXN0WzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkQXVkaW9EZXZpY2UobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgdmNFdmVudE1hbmFnZXIucmVtb3ZlU3Vic2NyaXB0aW9ucyhldmVudEhhbmRsZXIpO1xuICAgICAgICB2Y0V2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlciwgVkNFdmVudFR5cGUuQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQsXG4gICAgICAgICAgICBWQ0V2ZW50VHlwZS5SQUlTRV9IQU5ELCBWQ0V2ZW50VHlwZS5MT1dFUl9IQU5ELCBWQ0V2ZW50VHlwZS5ORVdfUFJPRFVDRVJTLCBWQ0V2ZW50VHlwZS5DT05TVU1FUl9DTE9TRUQpO1xuXG4gICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLm9uZGV2aWNlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChkZXZpY2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRGV2aWNlc0NoYW5nZWQoZGV2aWNlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKVxuICAgICAgICAgICAgICAgIC50aGVuKChkZXZpY2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEZXZpY2VzQ2hhbmdlZChkZXZpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgY29uc3VtZUZhaWxlZFByb2R1Y2VycygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCc9PT09PT09PT09PT09PT09PT09PT09REVTVFJPWUlORyBQQVJUSUNJUEFOVD09PT09PT09PT09PT09PT09PT09PT09PT0gOiAnICsgcHJvcHMuZGF0YS51c2VySWQpO1xuXG4gICAgICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgc3RvcFByb2R1Y2luZygndmlkZW8nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIGNvbnN1bWVycykge1xuICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGtleSwgJ3ZpZGVvJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLnJlbW92ZVN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBwcm9kdWNlID0gYXN5bmMgKHR5cGUpID0+IHtcbiAgICAgICAgaWYgKCFkZXZpY2UpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGF2YWlsYWJsZSBkZXZpY2UnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGV2aWNlLmNhblByb2R1Y2UoJ3ZpZGVvJykgJiYgdHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IHByb2R1Y2UgdmlkZW8nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2VsZWN0ZWRBdWRpb0RldmljZSAmJiB0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBhdWRpbyBkZXZpY2Ugc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9kdWNlcnMuaGFzKHR5cGUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUHJvZHVjZXIgYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgdHlwZSAnICsgdHlwZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWVkaWFDb25zdHJhaW50cztcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgICAgICAgICAgbWVkaWFDb25zdHJhaW50cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGV2aWNlSWQ6IHNlbGVjdGVkQXVkaW9EZXZpY2UuaWQsXG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB2aWRlbzogZmFsc2VcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgICAgICAgICAgbWVkaWFDb25zdHJhaW50cyA9IFZJREVPX0NPTlNUUkFJTlRTO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RyZWFtID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEobWVkaWFDb25zdHJhaW50cyk7XG4gICAgICAgIGNvbnN0IHRyYWNrID0gdHlwZSA9PT0gJ2F1ZGlvJyA/IHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdIDogc3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF07XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIHRyYWNrXG4gICAgICAgIH07XG5cbiAgICAgICAgYXVkaW9SZWYuY3VycmVudCA9IHN0cmVhbTtcbiAgICAgICAgaWYgKHByb3BzLmlzSG9zdCAmJiB0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICBtZWRpYVJlY29yZGVyLmFkZFRyYWNrKHByb3BzLmRhdGEudXNlcklkLCB0cmFjayk7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zZXRBdWRpb1RyYWNrKHRyYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICBwYXJhbXMuZW5jb2RpbmdzID0gVklERU9fRU5DT0RJTkdTO1xuICAgICAgICAgICAgcGFyYW1zLmNvZGVjT3B0aW9ucyA9IFZJREVPX0NPREVDX09QVElPTlM7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zZXRWaWRlb1RyYWNrKHRyYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcm9kdWNlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb2R1Y2VyID0gYXdhaXQgcHJvZHVjZXJUcmFuc3BvcnQucHJvZHVjZShwYXJhbXMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9kdWNlcikge1xuICAgICAgICAgICAgcHJvZHVjZXJUcmFuc3BvcnQuZ2V0U3RhdHMoKVxuICAgICAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiBjb25zb2xlLmxvZyhkYXRhKSk7XG4gICAgICAgICAgICBwcm9kdWNlcnMuc2V0KHR5cGUsIHByb2R1Y2VyKTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50ID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgIHNldFZpZGVvUmVmcmVzaGVyKCF2aWRlb1JlZnJlc2hlcik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coc3RyZWFtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvZHVjZXIub24oJ3RyYW5zcG9ydGNsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5zcmNPYmplY3QuZ2V0VHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcHJvZHVjZXJzLmRlbGV0ZSh0eXBlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBwcm9kdWNlci5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBwcm9kdWNlcnMuZGVsZXRlKHR5cGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY29uc3VtZUZhaWxlZFByb2R1Y2VycyA9ICgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoY29uc3VtZXJUcmFuc3BvcnQpIHtcbiAgICAgICAgICAgICAgICBvbk5ld1Byb2R1Y2VycyhmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5zcGxpY2UoMCwgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgY29uc3VtZUZhaWxlZFByb2R1Y2VycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCA1MDAwKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9wUHJvZHVjaW5nID0gKHR5cGUsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmICghcHJvZHVjZXJzLmhhcyh0eXBlKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RoZXJlIGlzIG5vIHByb2R1Y2VyIGZvciB0aGlzIHR5cGUgJyArIHR5cGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb2R1Y2VySWQgPSBwcm9kdWNlcnMuZ2V0KHR5cGUpLmlkO1xuICAgICAgICBjb25zb2xlLmxvZygnQ2xvc2UgcHJvZHVjZXInLCBwcm9kdWNlcklkKTtcblxuICAgICAgICBwcm9kdWNlcnMuZ2V0KHR5cGUpXG4gICAgICAgICAgICAuY2xvc2UoKTtcbiAgICAgICAgcHJvZHVjZXJzLmRlbGV0ZSh0eXBlKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgIHRyYWNrcy5jdXJyZW50LnN0b3BWaWRlb1RyYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc3RvcEF1ZGlvVHJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKCdDTE9TSU5HIFBST0RVQ0VSIE9GIElEIDogJyArIHByb2R1Y2VySWQpO1xuICAgICAgICBzb2NrZXRNYW5hZ2VyLmVtaXRFdmVudChWQ0V2ZW50VHlwZS5QUk9EVUNFUl9DTE9TRUQsIHtcbiAgICAgICAgICAgIHVzZXJJZDogcHJvcHMuZGF0YS51c2VySWQsXG4gICAgICAgICAgICBwcm9kdWNlcklkLFxuICAgICAgICAgICAgcm9vbUlkOiBwcm9wcy5tZWV0aW5nSWRcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiBjb25zb2xlLmxvZygnUFJPRFVDRVJfQ0xPU0VEIEVSUk9SIDogJywgZSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBvbk5ld1Byb2R1Y2VycyA9IChwcm9kdWNlcnMsIGxvYWRpbmcgPSBmYWxzZSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcIj09PT09PSBQUk9EVUNFUlMgUkVDRUlWRUQgOiBbIFwiICsgSlNPTi5zdHJpbmdpZnkocHJvZHVjZXJzKSArIFwiIF0gPT09PT09PVwiKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9kdWNlciBvZiBwcm9kdWNlcnMpIHtcbiAgICAgICAgICAgIGlmIChjb25zdW1lclRyYW5zcG9ydCkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9kdWNlci51c2VySWQgPT09IHByb3BzLmRhdGEudXNlcklkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWNlci5raW5kID09PSAndmlkZW8nICYmICFwcm9kdWNlci5zY3JlZW5TaGFyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ0FMTElORyBDT05TVU1FIEZST00gT04gTkVXIFBST0RVQ0VSUyBGT1IgOiAnICsgcHJvcHMuZGF0YS51c2VySWQgKyAnIC0gJyArIHByb2R1Y2VyLnByb2R1Y2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZShwcm9kdWNlci5wcm9kdWNlcklkLCBwcm9kdWNlci5raW5kLCBsb2FkaW5nLCBwcm9kdWNlci51c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIgfHwgbG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc21hbGwgcGFydGljaXBhbnQgYm94IGF0IHRoZSBib3R0b20gYmVsb25naW5nIHRvIHRoZSBjdXJyZW50IHVzZXIgbXVzdCBjb25zdW1lIGFsbCBhdWRpb1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGJlY2F1c2Ugd2UgZG8gbm90IHdhbnQgdG8gZGlzdHVyYiB0aGUgYXVkaW8gZHVlIHRvIGFueSByZW5kZXJpbmcgc3VjaCBhcyBCcmluZyB0byB2aWV3XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWNlci5raW5kID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKHByb2R1Y2VyLnByb2R1Y2VySWQsIHByb2R1Y2VyLmtpbmQsIGxvYWRpbmcsIHByb2R1Y2VyLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5wdXNoKHByb2R1Y2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhcIj09PT09PSBQUk9EVUNFUlMgVEhBVCBDT1VMRCBOT1QgQkUgQ09OU1VNRVMgOiBbIFwiICsgSlNPTi5zdHJpbmdpZnkoZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0KSArIFwiIF0gPT09PT09PVwiKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlQ29uc3VtZXIgPSAoY29uc3VtZXJJZCwga2luZCwgdXNlcklkKSA9PiB7XG4gICAgICAgIGlmIChraW5kID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICBpZiAodmlkZW9TdHJlYW0uY3VycmVudCkge1xuICAgICAgICAgICAgICAgIGlmICh2aWRlb1N0cmVhbS5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvU3RyZWFtLmN1cnJlbnQuZ2V0VHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICBsZXQgYXVkaW9FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29uc3VtZXJJZCk7XG4gICAgICAgICAgICBpZiAoYXVkaW9FbGVtZW50ICYmIGF1ZGlvRWxlbWVudC5zcmNPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBhdWRpb0VsZW1lbnQuc3JjT2JqZWN0LmdldFRyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmICh1c2VySWQgJiYgbWVkaWFSZWNvcmRlcikge1xuICAgICAgICAgICAgICAgICAgICBtZWRpYVJlY29yZGVyLnJlbW92ZVRyYWNrKHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50QnlJZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLmRhdGEudXNlcklkICsgJy1hdWRpby1lbC1jb250YWluZXInKTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudEJ5SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudEJ5SWQucmVtb3ZlQ2hpbGQoYXVkaW9FbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdW1lcnMuZGVsZXRlKGNvbnN1bWVySWQpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZXRyeUNvbnN1bWUoa2luZCwgdXNlcklkLCBlLCByZXRyaWVzLCBwcm9kdWNlcklkLCBsb2FkaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdGQUlMRUQgVE8gQ09OU1VNRSAnICsga2luZCArICcgRlJPTSAnICsgdXNlcklkKTtcbiAgICAgICAgY29uc29sZS5sb2coZSk7XG5cbiAgICAgICAgaWYgKHJldHJpZXMgPCAxMCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1JFLVRSWUlORyBbJyArIHJldHJpZXMgKyAnXScpO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3VtZShwcm9kdWNlcklkLCBraW5kLCBsb2FkaW5nLCB1c2VySWQsIHJldHJpZXMpO1xuICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQ09NUExFVEVMWSBGQUlMRUQgVE8gQ09OU1VNRSAnICsga2luZCArICcgRlJPTSAnICsgdXNlcklkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnN1bWUgPSBhc3luYyAocHJvZHVjZXJJZCwga2luZCwgbG9hZGluZywgdXNlcklkLCByZXRyaWVzID0gMCkgPT4ge1xuICAgICAgICBtZWRpYVNvdXBIZWxwZXIuZ2V0Q29uc3VtZVN0cmVhbShwcm9kdWNlcklkLCBkZXZpY2UucnRwQ2FwYWJpbGl0aWVzLCBjb25zdW1lclRyYW5zcG9ydCwgcHJvcHMubWVldGluZ0lkLFxuICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUsIGtpbmQpXG4gICAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXIsXG4gICAgICAgICAgICAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICBraW5kXG4gICAgICAgICAgICAgICAgIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN1bWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lcnMuc2V0KGNvbnN1bWVyLmlkLCBjb25zdW1lcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Q09OU1VNRT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gOiAnICsga2luZCArICcgRk9SIDogJyArIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWRlb1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvUmVmLmN1cnJlbnQuc3JjT2JqZWN0ID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvU3RyZWFtLmN1cnJlbnQgPSBzdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWaWRlb011dGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWaWRlb1JlZnJlc2hlcighdmlkZW9SZWZyZXNoZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrcy5jdXJyZW50LnNldFZpZGVvVHJhY2soc3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlciB8fCBsb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhdWRpb0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0VsZW1lbnQuc3JjT2JqZWN0ID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0VsZW1lbnQuaWQgPSBjb25zdW1lci5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LnBsYXlzaW5saW5lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5hdXRvcGxheSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZWV0aW5nLWF1ZGlvLWVsLWNvbnRhaW5lcicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kQ2hpbGQoYXVkaW9FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHMuaXNIb3N0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVJlY29yZGVyLmFkZFRyYWNrKHVzZXJJZCwgc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lci5vbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhY2tlbmRlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhraW5kICsgXCIgQ09OU1VNRVIgVFJBQ0sgRU5ERUQgRk9SIFwiICsgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoY29uc3VtZXIuaWQsIGtpbmQsIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJ0aWNpcGFudFZpZGVvTXV0ZWQgPSBwYXJ0aWNpcGFudHMuZmluZCgocCkgPT4gcC51c2VySWQgPT09IHVzZXJJZCkudmlkZW9NdXRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnRpY2lwYW50QXVkaW9NdXRlZCA9IHBhcnRpY2lwYW50cy5maW5kKChwKSA9PiBwLnVzZXJJZCA9PT0gdXNlcklkKS5hdWRpb011dGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGtpbmQgPT09ICd2aWRlbycgJiYgIXBhcnRpY2lwYW50VmlkZW9NdXRlZCkgfHwgKGtpbmQgPT09ICdhdWRpbycgJiYgIXBhcnRpY2lwYW50QXVkaW9NdXRlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5Q29uc3VtZShraW5kLCB1c2VySWQsIG5ldyBFcnJvcigndHJhY2tlbmRlZCB3aGlsZSAnICsga2luZCArICcgaXMgTk9UIG11dGVkJyksIHJldHJpZXMsIHByb2R1Y2VySWQsIGxvYWRpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXIub24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYW5zcG9ydGNsb3NlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGtpbmQgKyBcIiBDT05TVU1FUiBDTE9TRUQgRk9SIFwiICsgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoY29uc3VtZXIuaWQsIGtpbmQsIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIHJldHJ5Q29uc3VtZShraW5kLCB1c2VySWQsIGUsIHJldHJpZXMsIHByb2R1Y2VySWQsIGxvYWRpbmcpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0UGFydGljaXBhbnROYW1lID0gKCkgPT4ge1xuICAgICAgICBsZXQgbmFtZSA9IHByb3BzLmRhdGEubmFtZTtcblxuICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHByb3BzLmRhdGEudXNlcklkKSkge1xuICAgICAgICAgICAgbmFtZSA9IGAke25hbWV9IChHdWVzdClgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Akeydjb2wtKi0qICcgKyAocHJvcHMuaXNDdXJyZW50VXNlciA/ICdtZWV0aW5nLXBhcnRpY2lwYW50LWNvbnRhaW5lci1jdXJyZW50LXVzZXInIDogJ21lZXRpbmctcGFydGljaXBhbnQtY29udGFpbmVyJyl9YH1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHByb3BzLnBhZGRpbmcgPyBwcm9wcy5wYWRkaW5nIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogcHJvcHMuaGVpZ2h0ID8gcHJvcHMuaGVpZ2h0IDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnXG4gICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZpZGVvTXV0ZWQgfHwgIXZpZGVvUmVmLmN1cnJlbnQgfHwgIXZpZGVvUmVmLmN1cnJlbnQuc3JjT2JqZWN0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J2NlbnRlcmVkLWZsZXgtYm94J31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luQm90dG9tOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnOHB4JyA6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cHJvcHMuc2l6aW5nID09PSAnc20nID8gJ2F2YXRhci13cmFwcGVyLXNtJyA6ICdhdmF0YXItd3JhcHBlcid9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAoKHByb3BzLnNpemluZyA9PT0gJ3NtJyA/IDcyIDogMTEyKSArIHNvdW5kTGV2ZWwgLyAxMCkgKyAncHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogKChwcm9wcy5zaXppbmcgPT09ICdzbScgPyA3MiA6IDExMikgKyBzb3VuZExldmVsIC8gMTApICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6ICFhdWRpb011dGVkICYmIHNvdW5kTGV2ZWwgPiAzID8gKHByb3BzLnNpemluZyA9PT0gJ3NtJyA/IDIgOiA0KSArICdweCBzb2xpZCAjMDA0NzZhJyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZTllOWU5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17cHJvcHMuc2l6aW5nID09PSAnbWQnID8gJ2F2YXRhciBhdmF0YXItbWQnIDogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJ2F2YXRhciBhdmF0YXItc20nIDogJ2F2YXRhcid9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzIwcHgnIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZFVybCA/IDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRSZXBlYXQ6ICduby1yZXBlYXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRTaXplOiAnY292ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlOiBgdXJsKCR7ZG93bmxvYWRVcmx9KWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPiA6IFV0aWxzLmdldEluaXRpYWxzKHByb3BzLmRhdGEubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtwcm9wcy5kYXRhLnVzZXJJZCArICctdmlkZW8nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezY0MH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MzIwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgcmVmPXt2aWRlb1JlZn0gbXV0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg6ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAodmlkZW9NdXRlZCB8fCAhdmlkZW9SZWYuY3VycmVudCB8fCAhdmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QpID8gJ25vbmUnIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKldlIG5lZWQgdGhpcyBlbGVtZW50IHRvIGNhcHR1cmUgcmVjb3JkaW5nIHNvdW5kKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuaXNIb3N0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhdWRpb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3Byb3BzLmRhdGEudXNlcklkICsgJy1hdWRpbyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUGxheSByZWY9e2F1ZGlvUmVmfSBtdXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnbm9uZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnbmFtZS1sYWJlbC1zbScgOiAnbmFtZS1sYWJlbCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b206IHByb3BzLmlzQ3VycmVudFVzZXIgPyAnMTJweCcgOiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHByb3BzLmlzQ3VycmVudFVzZXIgPyAnNHB4IDE2cHgnIDogcHJvcHMuc2l6aW5nICE9PSAnc20nID8gJzRweCcgOiAnNHB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3t3aWR0aDogJzUwJScsIGRpc3BsYXk6ICdmbGV4JywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LXN0YXJ0JywgbWFyZ2luTGVmdDogJzRweCd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshcHJvcHMuaXNDdXJyZW50VXNlciAmJiBnZXRQYXJ0aWNpcGFudE5hbWUoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcy5pc0N1cnJlbnRVc2VyICYmICdZb3UnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXByb3BzLmlzQ3VycmVudFVzZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5MZWZ0OiAnNHB4JywgZGlzcGxheTogJ2ZsZXgnLCBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJywgd2lkdGg6ICc1MCUnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0hvc3QgJiYgIWF1ZGlvTXV0ZWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbkhvc3RBdWRpb011dGUocHJvcHMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzE2cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYig0MCwgNDAsIDQzKSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnTUlDJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YXVkaW9NdXRlZCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydNSUNfT0ZGJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnTUlDJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0hvc3QgJiYgIXZpZGVvTXV0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMub25Ib3N0VmlkZW9NdXRlKHByb3BzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICc0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICd3aGl0ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnQ0FNRVJBJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuaXNDdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydyb3cgbm8tbWFyZ2luIG5vLXBhZGRpbmcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e3dpZHRoOiAnMTAwJSd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J2NvbCBuby1tYXJnaW4gbm8tcGFkZGluZyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT1cIk15IGRldmljZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrRGV2aWNlc0ljb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeD17e21sOiAxfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9e29wZW5Nb3JlQWN0aW9ucyA/ICdkZXZpY2UtbWVudScgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPXtvcGVuTW9yZUFjdGlvbnMgPyAndHJ1ZScgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzhweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnU0VUVElOR1MnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvcHMuaXNDdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3ttYXJnaW5MZWZ0OiAnNHB4J319PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7aGFuZFJhaXNlZCAmJiA8UGFuVG9vbCBmb250U2l6ZT17J3NtYWxsJ30gc3R5bGU9e3tjb2xvcjogJyNlMmIwMzAnfX0vPn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuaXNDdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPXsnbWVldGluZy1hdWRpby1lbC1jb250YWluZXInfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICAgICAgYW5jaG9yRWw9e2FuY2hvckVsfVxuICAgICAgICAgICAgICAgIGlkPVwiZGV2aWNlcy1tZW51XCJcbiAgICAgICAgICAgICAgICBvcGVuPXtvcGVuTW9yZUFjdGlvbnN9XG4gICAgICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VEZXZpY2VNZW51fVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsb3NlRGV2aWNlTWVudX1cbiAgICAgICAgICAgICAgICBQYXBlclByb3BzPXt7XG4gICAgICAgICAgICAgICAgICAgIGVsZXZhdGlvbjogMCxcbiAgICAgICAgICAgICAgICAgICAgc3g6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6ICdkcm9wLXNoYWRvdygwcHggMnB4IDhweCByZ2JhKDAsMCwwLDAuMzIpKScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtdDogMS41LFxuICAgICAgICAgICAgICAgICAgICAgICAgJyYgLk11aUxpc3Qtcm9vdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI2UxZTFlMScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcmIC5NdWlBdmF0YXItcm9vdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbDogLTAuNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnJjpiZWZvcmUnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ1wiXCInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAxNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yOiAncHJpbWFyeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtNTAlKSByb3RhdGUoNDVkZWcpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luPXt7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWw6IDIwLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogMTM2XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBhbmNob3JPcmlnaW49e3tcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogJ3JpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWw6ICd0b3AnXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvRGV2aWNlcy5tYXAoKGRldmljZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TWVudUl0ZW0gb25DbGljaz17KCkgPT4gY2hhbmdlQXVkaW9EZXZpY2UoZGV2aWNlKX0ga2V5PXtpbmRleH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tjb2xvcjogc2VsZWN0ZWRBdWRpb0RldmljZSAmJiBzZWxlY3RlZEF1ZGlvRGV2aWNlLmlkID09PSBkZXZpY2UuaWQgPyAnIzE5ODc1NCcgOiBudWxsfX0+XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgZGV2aWNlLmxhYmVsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTWVudUl0ZW0+O1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvTWVudT5cbiAgICAgICAgPC8+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFZDUm9vbVBhcnRpY2lwYW50O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQUEsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFlBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGVBQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFLLGVBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLGdCQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUSxXQUFBLEdBQUFOLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUyxLQUFBLEdBQUFQLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBVSxjQUFBLEdBQUFWLE9BQUE7QUFDQSxJQUFBVyxRQUFBLEdBQUFULHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBWSxTQUFBLEdBQUFaLE9BQUE7QUFDQSxJQUFBYSxjQUFBLEdBQUFYLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBYyxPQUFBLEdBQUFaLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBZSxtQkFBQSxHQUFBYixzQkFBQSxDQUFBRixPQUFBO0FBQTBELFNBQUFFLHVCQUFBYyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFE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
822
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX1ZDRXZlbnRUeXBlIiwiX1ZDRXZlbnRNYW5hZ2VyIiwiX1ZDUm9vbVJlY29yZGVyIiwiX01lZGlhU291cEhlbHBlciIsIl9UcmFja3MiLCJfSWNvbkJ1dHRvbiIsIl9JY29uIiwiX2ljb25zTWF0ZXJpYWwiLCJfVG9vbHRpcCIsIl9tYXRlcmlhbCIsIl9Tb2NrZXRNYW5hZ2VyIiwiX0J1dHRvbiIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfYXVkaW9MZXZlbE1ldGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidCIsIldlYWtNYXAiLCJyIiwibiIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiU1BFQUtJTkdfTEVWRUwiLCJWSURFT19DT0RFQ19PUFRJT05TIiwiZXhwb3J0cyIsInZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlIiwiVklERU9fQ09OU1RSQUlOVFMiLCJhdWRpbyIsInZpZGVvIiwid2lkdGgiLCJtaW4iLCJpZGVhbCIsImhlaWdodCIsIlZJREVPX0VOQ09ESU5HUyIsInJpZCIsIm1heEJpdHJhdGUiLCJzY2FsYWJpbGl0eU1vZGUiLCJsb2NhdGlvbiIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJWQ1Jvb21QYXJ0aWNpcGFudCIsInByb3BzIiwiaGFuZFJhaXNlZCIsInNldEhhbmRSYWlzZWQiLCJSZWFjdCIsInVzZVN0YXRlIiwidmlkZW9NdXRlZCIsInNldFZpZGVvTXV0ZWQiLCJhdWRpb011dGVkIiwic2V0QXVkaW9NdXRlZCIsInByb2R1Y2VyVHJhbnNwb3J0Iiwic2V0UHJvZHVjZXJUcmFuc3BvcnQiLCJ2aWRlb1JlZnJlc2hlciIsInNldFZpZGVvUmVmcmVzaGVyIiwicHJvZHVjZXJzIiwiTWFwIiwiZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0IiwiYXVkaW9EZXZpY2VzIiwic2V0QXVkaW9EZXZpY2VzIiwic2VsZWN0ZWRBdWRpb0RldmljZSIsInNldFNlbGVjdGVkQXVkaW9EZXZpY2UiLCJjb25zdW1lcnMiLCJzb3VuZExldmVsIiwic2V0U291bmRMZXZlbCIsImV2ZW50SGFuZGxlciIsInZpZGVvUmVmIiwidXNlUmVmIiwidmlkZW9TdHJlYW0iLCJhdWRpb1JlZiIsInRyYWNrcyIsIlRyYWNrcyIsInNvdW5kTGV2ZWxDb3VudGVyIiwibWV0ZXJzIiwidW5tb3VudGVkUmVmIiwic2hvd1ZpZGVvIiwiY29uc3VtZXJUcmFuc3BvcnQiLCJkZXZpY2UiLCJwYXJ0aWNpcGFudHMiLCJudW1iZXJPZkluVmlld1BhcnRpY2lwYW50cyIsImFuY2hvckVsIiwic2V0QW5jaG9yRWwiLCJvcGVuTW9yZUFjdGlvbnMiLCJCb29sZWFuIiwiZG93bmxvYWRVcmwiLCJzZXREb3dubG9hZFVybCIsImhhbmRsZXIiLCJpZCIsImRhdGEiLCJ1c2VySWQiLCJvbiIsImV2ZW50VHlwZSIsImJlIiwiVkNFdmVudFR5cGUiLCJBVURJT19WSVNVQUxfU0VUVElOR1NfQ0hBTkdFRCIsIm9uQVZTZXR0aW5nc0NoYW5nZSIsInBheWxvYWQiLCJSQUlTRV9IQU5EIiwib25SYWlzZUhhbmQiLCJMT1dFUl9IQU5EIiwib25Mb3dlckhhbmQiLCJORVdfUFJPRFVDRVJTIiwib25OZXdQcm9kdWNlcnMiLCJDT05TVU1FUl9DTE9TRUQiLCJjb25zdW1lcklkIiwicmVtb3ZlQ29uc3VtZXIiLCJraW5kIiwiQVVESU9fTEVWRUwiLCJsZXZlbCIsImhhbmRsZUNsaWNrRGV2aWNlc0ljb24iLCJldmVudCIsImN1cnJlbnRUYXJnZXQiLCJjaGFuZ2VBdWRpb0RldmljZSIsInVzZUVmZmVjdCIsImFwaSIsImN1cnJlbnQiLCJzcmNPYmplY3QiLCJzb3VuZE1vbml0b3IiLCJpblZpZXciLCJoYW5kbGVDbG9zZURldmljZU1lbnUiLCJpc0N1cnJlbnRVc2VyIiwic3RvcFByb2R1Y2luZyIsInByb2R1Y2UiLCJVdGlscyIsImlzTnVsbCIsImF2YXRhcklkIiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiZ2V0Q29udGV4dFJvb3QiLCJzZXNzaW9uU3RvcmFnZSIsImdldEl0ZW0iLCJvbkF1ZGlvRGV2aWNlQ2hhbmdlIiwiY3JlYXRlUHJvZHVjZXJUcmFuc3BvcnQiLCJjb25zb2xlIiwibG9nIiwic3BsaWNlIiwibGVuZ3RoIiwia2V5IiwidmFsdWUiLCJmaW5kIiwicCIsInByb2R1Y2VySWQiLCJjb25zdW1lIiwibWVkaWFTb3VwSGVscGVyIiwiaW5pdFByb2R1Y2VyVHJhbnNwb3J0IiwibWVldGluZ0lkIiwiZ2V0VXNlckRldGFpbHMiLCJ1c2VybmFtZSIsImhhbmRsZURldmljZXNDaGFuZ2VkIiwiZGV2aWNlcyIsImF1ZGlvRGV2aWNlTGlzdCIsImZvckVhY2giLCJwdXNoIiwiZGV2aWNlSWQiLCJsYWJlbCIsInZjRXZlbnRNYW5hZ2VyIiwicmVtb3ZlU3Vic2NyaXB0aW9ucyIsImFkZFN1YnNjcmlwdGlvbnMiLCJuYXZpZ2F0b3IiLCJtZWRpYURldmljZXMiLCJvbmRldmljZWNoYW5nZSIsImVudW1lcmF0ZURldmljZXMiLCJ0aGVuIiwiY29uc3VtZUZhaWxlZFByb2R1Y2VycyIsInN0b3AiLCJjbGVhciIsInN0YXJ0TWV0ZXIiLCJzdHJlYW0iLCJzdG9wTWV0ZXIiLCJzdGFydEF1ZGlvTGV2ZWxNZXRlciIsImZpcmVFdmVudCIsImRlbGV0ZSIsInR5cGUiLCJlcnJvciIsImNhblByb2R1Y2UiLCJtZWRpYUNvbnN0cmFpbnRzIiwiZ2V0VXNlck1lZGlhIiwidHJhY2siLCJnZXRBdWRpb1RyYWNrcyIsImdldFZpZGVvVHJhY2tzIiwicGFyYW1zIiwiaXNIb3N0IiwibWVkaWFSZWNvcmRlciIsImFkZFRyYWNrIiwic2V0QXVkaW9UcmFjayIsImVuY29kaW5ncyIsImNvZGVjT3B0aW9ucyIsInNldFZpZGVvVHJhY2siLCJwcm9kdWNlciIsImdldFN0YXRzIiwiZ2V0VHJhY2tzIiwic2V0VGltZW91dCIsImNhbGxiYWNrIiwiY2xvc2UiLCJzdG9wVmlkZW9UcmFjayIsInN0b3BBdWRpb1RyYWNrIiwic29ja2V0TWFuYWdlciIsImVtaXRFdmVudCIsIlBST0RVQ0VSX0NMT1NFRCIsInJvb21JZCIsImNhdGNoIiwibG9hZGluZyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzY3JlZW5TaGFyaW5nIiwiYXVkaW9FbGVtZW50IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInJlbW92ZVRyYWNrIiwiZWxlbWVudEJ5SWQiLCJyZW1vdmVDaGlsZCIsInJldHJ5Q29uc3VtZSIsInJldHJpZXMiLCJnZXRDb25zdW1lU3RyZWFtIiwicnRwQ2FwYWJpbGl0aWVzIiwiX3JlZiIsImNvbnN1bWVyIiwiY3JlYXRlRWxlbWVudCIsInBsYXlzaW5saW5lIiwiYXV0b3BsYXkiLCJhcHBlbmRDaGlsZCIsInRyYWNrRW5kZWRQYXJ0aWNpcGFudCIsIkVycm9yIiwiZ2V0UGFydGljaXBhbnROYW1lIiwibmFtZSIsImNvbmNhdCIsIkZyYWdtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJwYWRkaW5nIiwicG9zaXRpb24iLCJib3JkZXJSYWRpdXMiLCJvdmVyZmxvdyIsImJveFNpemluZyIsImJhY2tncm91bmRDb2xvciIsImJvcmRlciIsImdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yIiwiYm94U2hhZG93IiwidHJhbnNpdGlvbiIsIm1hcmdpbkJvdHRvbSIsInNpemluZyIsImNvbG9yIiwiZm9udFNpemUiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kSW1hZ2UiLCJnZXRJbml0aWFscyIsImF1dG9QbGF5IiwicmVmIiwibXV0ZWQiLCJvYmplY3RGaXQiLCJ0cmFuc2Zvcm0iLCJ6SW5kZXgiLCJkaXNwbGF5IiwibGVmdCIsImJvdHRvbSIsImFsaWduSXRlbXMiLCJnYXAiLCJtYXhXaWR0aCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Iiwid2hpdGVTcGFjZSIsInRleHRPdmVyZmxvdyIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsImp1c3RpZnlDb250ZW50Iiwib25DbGljayIsIm9uSG9zdEF1ZGlvTXV0ZSIsIm9uSG9zdFZpZGVvTXV0ZSIsInRpdGxlIiwiUGFuVG9vbCIsIk1lbnUiLCJvcGVuIiwib25DbG9zZSIsIlBhcGVyUHJvcHMiLCJlbGV2YXRpb24iLCJzeCIsImZpbHRlciIsIm10IiwibWwiLCJtciIsImNvbnRlbnQiLCJ0b3AiLCJyaWdodCIsImJnY29sb3IiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJhbmNob3JPcmlnaW4iLCJtYXAiLCJpbmRleCIsIk1lbnVJdGVtIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbWVkaWEvVkNSb29tUGFydGljaXBhbnQuanN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAqL1xuaW1wb3J0IFJlYWN0LCB7dXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgJy4vVkNSb29tUGFydGljaXBhbnQuY3NzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5pbXBvcnQge1ZDRXZlbnRUeXBlfSBmcm9tICcuL1ZDRXZlbnRUeXBlJztcbmltcG9ydCB2Y0V2ZW50TWFuYWdlciBmcm9tICcuL1ZDRXZlbnRNYW5hZ2VyJztcbmltcG9ydCBtZWRpYVJlY29yZGVyIGZyb20gJy4vVkNSb29tUmVjb3JkZXInO1xuaW1wb3J0IG1lZGlhU291cEhlbHBlciBmcm9tICcuL01lZGlhU291cEhlbHBlcic7XG5pbXBvcnQgVHJhY2tzIGZyb20gJy4vVHJhY2tzJztcbmltcG9ydCBJY29uQnV0dG9uIGZyb20gJ0BtdWkvbWF0ZXJpYWwvSWNvbkJ1dHRvbic7XG5pbXBvcnQgSWNvbiBmcm9tICcuLi9JY29uJztcbmltcG9ydCB7UGFuVG9vbH0gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbCc7XG5pbXBvcnQgVG9vbHRpcCBmcm9tICdAbXVpL21hdGVyaWFsL1Rvb2x0aXAnO1xuaW1wb3J0IHtNZW51LCBNZW51SXRlbX0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgc29ja2V0TWFuYWdlciBmcm9tICcuLi9Tb2NrZXRNYW5hZ2VyJztcbmltcG9ydCBCdXR0b24gZnJvbSAnQG11aS9tYXRlcmlhbC9CdXR0b24nO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IHtzdGFydEF1ZGlvTGV2ZWxNZXRlcn0gZnJvbSAnLi9hdWRpb0xldmVsTWV0ZXInO1xuXG5jb25zdCBTUEVBS0lOR19MRVZFTCA9IDY7XG5cbmV4cG9ydCBjb25zdCBWSURFT19DT0RFQ19PUFRJT05TID0ge1xuICAgIHZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlOiAxMDAwXG59O1xuXG5leHBvcnQgY29uc3QgVklERU9fQ09OU1RSQUlOVFMgPSB7XG4gICAgYXVkaW86IGZhbHNlLFxuICAgIHZpZGVvOiB7XG4gICAgICAgIHdpZHRoOiB7XG4gICAgICAgICAgICBtaW46IDY0MCxcbiAgICAgICAgICAgIGlkZWFsOiAxOTIwXG4gICAgICAgIH0sXG4gICAgICAgIGhlaWdodDoge1xuICAgICAgICAgICAgbWluOiA0MDAsXG4gICAgICAgICAgICBpZGVhbDogMTA4MFxuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IFZJREVPX0VOQ09ESU5HUyA9IFtcbiAgICB7XG4gICAgICAgIHJpZDogJ3IwJyxcbiAgICAgICAgbWF4Qml0cmF0ZTogMjAwMDAsXG4gICAgICAgIC8vc2NhbGVSZXNvbHV0aW9uRG93bkJ5OiAxMC4wLFxuICAgICAgICBzY2FsYWJpbGl0eU1vZGU6ICdTMVQzJ1xuICAgIH0sXG4gICAge1xuICAgICAgICByaWQ6ICdyMScsXG4gICAgICAgIG1heEJpdHJhdGU6IDE1MDAwMCxcbiAgICAgICAgc2NhbGFiaWxpdHlNb2RlOiAnUzFUMydcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcmlkOiAncjInLFxuICAgICAgICBtYXhCaXRyYXRlOiA0NTAwMDAsXG4gICAgICAgIHNjYWxhYmlsaXR5TW9kZTogJ1MxVDMnXG4gICAgfVxuXTtcblxuY29uc3QgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuY29uc3QgVkNSb29tUGFydGljaXBhbnQgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCBbaGFuZFJhaXNlZCwgc2V0SGFuZFJhaXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3ZpZGVvTXV0ZWQsIHNldFZpZGVvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMudmlkZW9NdXRlZCk7XG4gICAgY29uc3QgW2F1ZGlvTXV0ZWQsIHNldEF1ZGlvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMuYXVkaW9NdXRlZCk7XG4gICAgY29uc3QgW3Byb2R1Y2VyVHJhbnNwb3J0LCBzZXRQcm9kdWNlclRyYW5zcG9ydF0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy5wcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgY29uc3QgW3ZpZGVvUmVmcmVzaGVyLCBzZXRWaWRlb1JlZnJlc2hlcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3Byb2R1Y2Vyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnRdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFthdWRpb0RldmljZXMsIHNldEF1ZGlvRGV2aWNlc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW3NlbGVjdGVkQXVkaW9EZXZpY2UsIHNldFNlbGVjdGVkQXVkaW9EZXZpY2VdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2NvbnN1bWVyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtzb3VuZExldmVsLCBzZXRTb3VuZExldmVsXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtldmVudEhhbmRsZXJdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IHZpZGVvUmVmID0gdXNlUmVmKCk7XG4gICAgY29uc3QgdmlkZW9TdHJlYW0gPSB1c2VSZWYoKTtcbiAgICBjb25zdCBhdWRpb1JlZiA9IHVzZVJlZigpO1xuICAgIGNvbnN0IHRyYWNrcyA9IHVzZVJlZihuZXcgVHJhY2tzKCkpO1xuICAgIGNvbnN0IHNvdW5kTGV2ZWxDb3VudGVyID0gdXNlUmVmKDApO1xuICAgIC8vIEFjdGl2ZS1zcGVha2VyIG1ldGVyczogdGhpcyAoc2VsZikgdGlsZSBpcyB0aGUgYXVkaW8gaHViIOKAlCBpdCBjb25zdW1lc1xuICAgIC8vIGV2ZXJ5IHBhcnRpY2lwYW50J3MgYXVkaW8gKyBwcm9kdWNlcyB0aGUgbG9jYWwgbWljIOKAlCBzbyBpdCBydW5zIHRoZSBsZXZlbFxuICAgIC8vIG1ldGVycyBhbmQgYnJvYWRjYXN0cyB7dXNlcklkLCBsZXZlbH0gZm9yIGVhY2ggdGlsZSB0byBoaWdobGlnaHQgaXRzZWxmLlxuICAgIGNvbnN0IG1ldGVycyA9IHVzZVJlZihuZXcgTWFwKCkpO1xuICAgIC8vIFNldCBvbiB1bm1vdW50IHNvIHRoZSByZWN1cnNpdmUgY29uc3VtZS9yZXRyeSBzZXRUaW1lb3V0IGxvb3BzIHN0b3BcbiAgICAvLyByZS1zY2hlZHVsaW5nIChvdGhlcndpc2UgdGhleSBwb2xsL3JldHJ5IGZvcmV2ZXIgYWZ0ZXIgdGhlIHRpbGUgaXMgZ29uZSkuXG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBzaG93VmlkZW8gPSB0cnVlO1xuICAgIGNvbnN0IHtcbiAgICAgICAgY29uc3VtZXJUcmFuc3BvcnQsXG4gICAgICAgIGRldmljZSxcbiAgICAgICAgcGFydGljaXBhbnRzXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHtudW1iZXJPZkluVmlld1BhcnRpY2lwYW50c30gPSBwcm9wcztcbiAgICBjb25zdCBbYW5jaG9yRWwsIHNldEFuY2hvckVsXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IG9wZW5Nb3JlQWN0aW9ucyA9IEJvb2xlYW4oYW5jaG9yRWwpO1xuXG4gICAgY29uc3QgW2Rvd25sb2FkVXJsLCBzZXREb3dubG9hZFVybF0gPSB1c2VTdGF0ZShudWxsKTtcblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXQgaWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtZWV0aW5nLXBhcnRpY2lwYW50LScgKyBwcm9wcy5kYXRhLnVzZXJJZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjogKGV2ZW50VHlwZSwgYmUpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkFVRElPX1ZJU1VBTF9TRVRUSU5HU19DSEFOR0VEOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25BVlNldHRpbmdzQ2hhbmdlKGJlLnBheWxvYWQgPyBiZS5wYXlsb2FkIDogYmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuUkFJU0VfSEFORDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUmFpc2VIYW5kKGJlLnBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuTE9XRVJfSEFORDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTG93ZXJIYW5kKGJlLnBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuTkVXX1BST0RVQ0VSUzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTmV3UHJvZHVjZXJzKGJlLnBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuQ09OU1VNRVJfQ0xPU0VEOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN1bWVycy5oYXMoYmUucGF5bG9hZC5jb25zdW1lcklkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGJlLnBheWxvYWQuY29uc3VtZXJJZCwgYmUucGF5bG9hZC5raW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkFVRElPX0xFVkVMOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJlLnBheWxvYWQgJiYgYmUucGF5bG9hZC51c2VySWQgPT09IHByb3BzLmRhdGEudXNlcklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U291bmRMZXZlbChiZS5wYXlsb2FkLmxldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlQ2xpY2tEZXZpY2VzSWNvbiA9IChldmVudCkgPT4ge1xuICAgICAgICBzZXRBbmNob3JFbChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hhbmdlQXVkaW9EZXZpY2UgPSAoZGV2aWNlKSA9PiB7XG4gICAgICAgIHNldFNlbGVjdGVkQXVkaW9EZXZpY2UoZGV2aWNlKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25SYWlzZUhhbmQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgIHNldEhhbmRSYWlzZWQodHJ1ZSk7XG4gICAgICAgICAgICBwcm9wcy5kYXRhLmhhbmRSYWlzZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTG93ZXJIYW5kID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC51c2VySWQgPT09IHByb3BzLmRhdGEudXNlcklkKSB7XG4gICAgICAgICAgICBzZXRIYW5kUmFpc2VkKGZhbHNlKTtcbiAgICAgICAgICAgIHByb3BzLmRhdGEuaGFuZFJhaXNlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGV2ZW50SGFuZGxlci5hcGkgPSBoYW5kbGVyKCk7XG4gICAgfSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAodmlkZW9SZWYuY3VycmVudCAmJiB2aWRlb1N0cmVhbS5jdXJyZW50KSB7XG4gICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHZpZGVvU3RyZWFtLmN1cnJlbnQ7XG4gICAgICAgIH1cbiAgICB9LCBbdmlkZW9SZWYuY3VycmVudF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLnNvdW5kTW9uaXRvciAmJiAhcHJvcHMuaW5WaWV3KSB7XG4gICAgICAgICAgICBpZiAoc291bmRMZXZlbCA+IDMpIHtcbiAgICAgICAgICAgICAgICBzb3VuZExldmVsQ291bnRlci5jdXJyZW50ID0gMTA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNvdW5kTGV2ZWxDb3VudGVyLmN1cnJlbnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgc291bmRMZXZlbENvdW50ZXIuY3VycmVudC0tO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9wcy5zb3VuZE1vbml0b3IocHJvcHMuZGF0YS51c2VySWQsIHNvdW5kTGV2ZWxDb3VudGVyLmN1cnJlbnQgPT09IDAgfHwgYXVkaW9NdXRlZCk7XG4gICAgICAgIH1cbiAgICB9LCBbc291bmRMZXZlbF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGF1ZGlvTXV0ZWQpIHtcbiAgICAgICAgICAgIHNldFNvdW5kTGV2ZWwoMCk7XG4gICAgICAgICAgICBpZiAocHJvcHMuc291bmRNb25pdG9yICYmICFwcm9wcy5pblZpZXcpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5zb3VuZE1vbml0b3IocHJvcHMuZGF0YS51c2VySWQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW2F1ZGlvTXV0ZWRdKTtcblxuICAgIGNvbnN0IGhhbmRsZUNsb3NlRGV2aWNlTWVudSA9ICgpID0+IHtcbiAgICAgICAgc2V0QW5jaG9yRWwobnVsbCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uQVZTZXR0aW5nc0NoYW5nZSA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5kYXRhLnVzZXJJZCA9PT0gcGF5bG9hZC51c2VySWQpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCdhdWRpbycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC52aWRlb011dGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ3ZpZGVvJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRldmljZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZSgndmlkZW8nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0QXVkaW9NdXRlZChwYXlsb2FkLmF1ZGlvTXV0ZWQpO1xuICAgICAgICAgICAgc2V0VmlkZW9NdXRlZChwYXlsb2FkLnZpZGVvTXV0ZWQpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLmRhdGEgJiYgIVV0aWxzLmlzTnVsbChwcm9wcy5kYXRhLmF2YXRhcklkKVxuICAgICAgICAgICAgJiYgcHJvcHMuZGF0YS5hdmF0YXJJZCAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvcHMuZGF0YS5hdmF0YXJJZCAhPT0gJ251bGwnKSB7XG4gICAgICAgICAgICBzZXREb3dubG9hZFVybChsb2NhdGlvbiArIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgJy9kb2NzL2FwaS92MS9tYW5hZ2VyL2Rvd25sb2FkLycgKyBwcm9wcy5kYXRhLmF2YXRhcklkICtcbiAgICAgICAgICAgICAgICAnP2FjY2Vzc190b2tlbj0nICsgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWNjZXNzVG9rZW4nKSArICcmaWRUb2tlbj0nICsgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaWRUb2tlbicpKTtcbiAgICAgICAgfVxuICAgIH0sIFtwcm9wcy5kYXRhXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRBdWRpb011dGVkKHByb3BzLmF1ZGlvTXV0ZWQpO1xuICAgIH0sIFtwcm9wcy5hdWRpb011dGVkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRWaWRlb011dGVkKHByb3BzLnZpZGVvTXV0ZWQpO1xuICAgIH0sIFtwcm9wcy52aWRlb011dGVkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocHJvZHVjZXJUcmFuc3BvcnQpIHtcbiAgICAgICAgICAgIC8vIEEgKHJlKWFzc2lnbmVkIHRyYW5zcG9ydCBtZWFucyBleGlzdGluZyBwcm9kdWNlcnMgbGl2ZWQgb24gdGhlIG9sZFxuICAgICAgICAgICAgLy8gKG5vdy1jbG9zZWQpIHRyYW5zcG9ydC4gVGVhciB0aGVtIGRvd24gcHJvcGVybHkg4oCUIGNsb3NlICsgc3RvcCB0aGVcbiAgICAgICAgICAgIC8vIGxvY2FsIHRyYWNrcyArIG5vdGlmeSB0aGUgc2VydmVyIOKAlCBzbyBwcm9kdWNlKCkgcmVjcmVhdGVzIHRoZW0gb24gdGhlXG4gICAgICAgICAgICAvLyBuZXcgdHJhbnNwb3J0IGluc3RlYWQgb2YgZWFybHktcmV0dXJuaW5nLiBOby1vcCBvbiBmaXJzdCBtb3VudC5cbiAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCdhdWRpbycpO1xuXG4gICAgICAgICAgICBpZiAoIXByb3BzLnZpZGVvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICBwcm9kdWNlKCd2aWRlbycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFwcm9wcy5hdWRpb011dGVkKSB7XG4gICAgICAgICAgICAgICAgcHJvZHVjZSgnYXVkaW8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtwcm9kdWNlclRyYW5zcG9ydF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0UHJvZHVjZXJUcmFuc3BvcnQocHJvcHMucHJvZHVjZXJUcmFuc3BvcnQpO1xuICAgIH0sIFtwcm9wcy5wcm9kdWNlclRyYW5zcG9ydF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgIHByb3BzLm9uQXVkaW9EZXZpY2VDaGFuZ2Uoc2VsZWN0ZWRBdWRpb0RldmljZSk7XG4gICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCdhdWRpbycsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRBdWRpb0RldmljZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2R1Y2VyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVQcm9kdWNlclRyYW5zcG9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFhdWRpb011dGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlKCdhdWRpbycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbc2VsZWN0ZWRBdWRpb0RldmljZV0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGNvbnN1bWVyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVFJBTlNJIEFSUklWRUQgV0lUSCBQUk9EVUNFUlMgOiAnLCBwcm9wcy5kYXRhLnByb2R1Y2Vycyk7XG4gICAgICAgICAgICBpZiAocHJvcHMuZGF0YS5wcm9kdWNlcnMpIHtcbiAgICAgICAgICAgICAgICBvbk5ld1Byb2R1Y2Vycyhwcm9wcy5kYXRhLnByb2R1Y2VycywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9uTmV3UHJvZHVjZXJzKGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydCwgdHJ1ZSk7XG4gICAgICAgICAgICBmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQuc3BsaWNlKDAsIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5sZW5ndGgpO1xuXG4gICAgICAgICAgICBpZiAocHJvZHVjZXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JFLUlOU1RBVElORyBDT05TVU1FUlMnKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgcHJvZHVjZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQUk9DRVNTSU5HIFBST0RVQ0VSIE9GIFRZUEUgOiAnICsga2V5ICsgJyA6ICcgKyB2YWx1ZS5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHByb3BzLmRhdGEucHJvZHVjZXJzICYmIHRoaXMucHJvcHMuZGF0YS5wcm9kdWNlcnMuZmluZCgocCkgPT4gcC5wcm9kdWNlcklkID09PSB2YWx1ZS5pZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKHZhbHVlLmlkLCBrZXksIHRydWUsIHZhbHVlLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUFJPRFVDRVIgQUxSRUFEWSBQUk9DRVNTRUQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtjb25zdW1lclRyYW5zcG9ydF0pO1xuXG4gICAgY29uc3QgY3JlYXRlUHJvZHVjZXJUcmFuc3BvcnQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIHNldFByb2R1Y2VyVHJhbnNwb3J0KGF3YWl0IG1lZGlhU291cEhlbHBlci5pbml0UHJvZHVjZXJUcmFuc3BvcnQocHJvcHMuZGV2aWNlLCBwcm9wcy5tZWV0aW5nSWQsXG4gICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVEZXZpY2VzQ2hhbmdlZCA9IChkZXZpY2VzKSA9PiB7XG4gICAgICAgIGxldCBhdWRpb0RldmljZUxpc3QgPSBbXTtcbiAgICAgICAgZGV2aWNlcy5mb3JFYWNoKChkZXZpY2UpID0+IHtcbiAgICAgICAgICAgIGlmICgnYXVkaW9pbnB1dCcgPT09IGRldmljZS5raW5kKSB7XG4gICAgICAgICAgICAgICAgYXVkaW9EZXZpY2VMaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBpZDogZGV2aWNlLmRldmljZUlkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZGV2aWNlLmxhYmVsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNldEF1ZGlvRGV2aWNlcyhhdWRpb0RldmljZUxpc3QpO1xuXG4gICAgICAgIGlmIChhdWRpb0RldmljZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRBdWRpb0RldmljZShhdWRpb0RldmljZUxpc3RbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRBdWRpb0RldmljZShudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2Y0V2ZW50TWFuYWdlci5yZW1vdmVTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHZjRXZlbnRNYW5hZ2VyLmFkZFN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGVyLCBWQ0V2ZW50VHlwZS5BVURJT19WSVNVQUxfU0VUVElOR1NfQ0hBTkdFRCxcbiAgICAgICAgICAgIFZDRXZlbnRUeXBlLlJBSVNFX0hBTkQsIFZDRXZlbnRUeXBlLkxPV0VSX0hBTkQsIFZDRXZlbnRUeXBlLk5FV19QUk9EVUNFUlMsIFZDRXZlbnRUeXBlLkNPTlNVTUVSX0NMT1NFRCxcbiAgICAgICAgICAgIFZDRXZlbnRUeXBlLkFVRElPX0xFVkVMKTtcblxuICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5vbmRldmljZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoZGV2aWNlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURldmljZXNDaGFuZ2VkKGRldmljZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKClcbiAgICAgICAgICAgICAgICAudGhlbigoZGV2aWNlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRGV2aWNlc0NoYW5nZWQoZGV2aWNlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgIGNvbnN1bWVGYWlsZWRQcm9kdWNlcnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnPT09PT09PT09PT09PT09PT09PT09PURFU1RST1lJTkcgUEFSVElDSVBBTlQ9PT09PT09PT09PT09PT09PT09PT09PT09IDogJyArIHByb3BzLmRhdGEudXNlcklkKTtcbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBnbG9iYWwgZGV2aWNlY2hhbmdlIGhhbmRsZXIgdGhpcyBjb21wb25lbnQgaW5zdGFsbGVkIOKAlFxuICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdCBzdXJ2aXZlcyB1bm1vdW50IGFuZCBmaXJlcyBpbnRvIHN0YWxlIGNvbXBvbmVudCBzdGF0ZS5cbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLm9uZGV2aWNlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCdhdWRpbycpO1xuICAgICAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ3ZpZGVvJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBjb25zdW1lcnMpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVDb25zdW1lcihrZXksICd2aWRlbycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTdG9wIGV2ZXJ5IGF1ZGlvLWxldmVsIG1ldGVyIChzZWxmIG1pYyArIGFsbCBjb25zdW1lZCBzdHJlYW1zKS5cbiAgICAgICAgICAgIG1ldGVycy5jdXJyZW50LmZvckVhY2goKHN0b3ApID0+IHN0b3AoKSk7XG4gICAgICAgICAgICBtZXRlcnMuY3VycmVudC5jbGVhcigpO1xuXG4gICAgICAgICAgICB2Y0V2ZW50TWFuYWdlci5yZW1vdmVTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuXG4gICAgLy8gTWV0ZXIgYSBzdHJlYW0gYW5kIGJyb2FkY2FzdCBpdHMgbGV2ZWwgdW5kZXIgYHVzZXJJZGAuIEtleWVkIHNvIHdlIGNhblxuICAgIC8vIHN0b3AvcmVwbGFjZSBpdCB3aGVuIHRoZSBjb25zdW1lciBjbG9zZXMgb3IgdGhlIHByb2R1Y2VyIHJlc3RhcnRzLlxuICAgIGNvbnN0IHN0YXJ0TWV0ZXIgPSAoa2V5LCBzdHJlYW0sIHVzZXJJZCkgPT4ge1xuICAgICAgICBzdG9wTWV0ZXIoa2V5KTtcbiAgICAgICAgY29uc3Qgc3RvcCA9IHN0YXJ0QXVkaW9MZXZlbE1ldGVyKHN0cmVhbSwgKGxldmVsKSA9PiB7XG4gICAgICAgICAgICB2Y0V2ZW50TWFuYWdlci5maXJlRXZlbnQoVkNFdmVudFR5cGUuQVVESU9fTEVWRUwsIHtwYXlsb2FkOiB7dXNlcklkLCBsZXZlbH19KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1ldGVycy5jdXJyZW50LnNldChrZXksIHN0b3ApO1xuICAgIH07XG5cbiAgICBjb25zdCBzdG9wTWV0ZXIgPSAoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0b3AgPSBtZXRlcnMuY3VycmVudC5nZXQoa2V5KTtcbiAgICAgICAgaWYgKHN0b3ApIHtcbiAgICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICAgIG1ldGVycy5jdXJyZW50LmRlbGV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHByb2R1Y2UgPSBhc3luYyAodHlwZSkgPT4ge1xuICAgICAgICBpZiAoIWRldmljZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTm8gYXZhaWxhYmxlIGRldmljZScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkZXZpY2UuY2FuUHJvZHVjZSgndmlkZW8nKSAmJiB0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgcHJvZHVjZSB2aWRlbycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzZWxlY3RlZEF1ZGlvRGV2aWNlICYmIHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGF1ZGlvIGRldmljZSBzZWxlY3RlZCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2R1Y2Vycy5oYXModHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQcm9kdWNlciBhbHJlYWR5IGV4aXN0cyBmb3IgdGhpcyB0eXBlICcgKyB0eXBlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtZWRpYUNvbnN0cmFpbnRzO1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgICAgICAgICBtZWRpYUNvbnN0cmFpbnRzID0ge1xuICAgICAgICAgICAgICAgICAgICBkZXZpY2VJZDogc2VsZWN0ZWRBdWRpb0RldmljZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgYXVkaW86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvOiBmYWxzZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgICAgICAgICBtZWRpYUNvbnN0cmFpbnRzID0gVklERU9fQ09OU1RSQUlOVFM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYShtZWRpYUNvbnN0cmFpbnRzKTtcbiAgICAgICAgY29uc3QgdHJhY2sgPSB0eXBlID09PSAnYXVkaW8nID8gc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0gOiBzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgdHJhY2tcbiAgICAgICAgfTtcblxuICAgICAgICBhdWRpb1JlZi5jdXJyZW50ID0gc3RyZWFtO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgLy8gTWV0ZXIgdGhlIGxvY2FsIG1pYyBzbyB0aGUgc2VsZiB0aWxlIGhpZ2hsaWdodHMgd2hlbiB5b3Ugc3BlYWsuXG4gICAgICAgICAgICBzdGFydE1ldGVyKCdzZWxmLWF1ZGlvJywgc3RyZWFtLCBwcm9wcy5kYXRhLnVzZXJJZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmlzSG9zdCAmJiB0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICBtZWRpYVJlY29yZGVyLmFkZFRyYWNrKHByb3BzLmRhdGEudXNlcklkLCB0cmFjayk7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zZXRBdWRpb1RyYWNrKHRyYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICBwYXJhbXMuZW5jb2RpbmdzID0gVklERU9fRU5DT0RJTkdTO1xuICAgICAgICAgICAgcGFyYW1zLmNvZGVjT3B0aW9ucyA9IFZJREVPX0NPREVDX09QVElPTlM7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zZXRWaWRlb1RyYWNrKHRyYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcm9kdWNlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb2R1Y2VyID0gYXdhaXQgcHJvZHVjZXJUcmFuc3BvcnQucHJvZHVjZShwYXJhbXMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9kdWNlcikge1xuICAgICAgICAgICAgcHJvZHVjZXJUcmFuc3BvcnQuZ2V0U3RhdHMoKVxuICAgICAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiBjb25zb2xlLmxvZyhkYXRhKSk7XG4gICAgICAgICAgICBwcm9kdWNlcnMuc2V0KHR5cGUsIHByb2R1Y2VyKTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50ID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgIHNldFZpZGVvUmVmcmVzaGVyKCF2aWRlb1JlZnJlc2hlcik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coc3RyZWFtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvZHVjZXIub24oJ3RyYW5zcG9ydGNsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5zcmNPYmplY3QuZ2V0VHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcHJvZHVjZXJzLmRlbGV0ZSh0eXBlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBwcm9kdWNlci5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBwcm9kdWNlcnMuZGVsZXRlKHR5cGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY29uc3VtZUZhaWxlZFByb2R1Y2VycyA9ICgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodW5tb3VudGVkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChjb25zdW1lclRyYW5zcG9ydCkge1xuICAgICAgICAgICAgICAgIG9uTmV3UHJvZHVjZXJzKGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LnNwbGljZSgwLCBmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBjb25zdW1lRmFpbGVkUHJvZHVjZXJzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMDApO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3BQcm9kdWNpbmcgPSAodHlwZSwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKCFwcm9kdWNlcnMuaGFzKHR5cGUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVGhlcmUgaXMgbm8gcHJvZHVjZXIgZm9yIHRoaXMgdHlwZSAnICsgdHlwZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJvZHVjZXJJZCA9IHByb2R1Y2Vycy5nZXQodHlwZSkuaWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDbG9zZSBwcm9kdWNlcicsIHByb2R1Y2VySWQpO1xuXG4gICAgICAgIHByb2R1Y2Vycy5nZXQodHlwZSlcbiAgICAgICAgICAgIC5jbG9zZSgpO1xuICAgICAgICBwcm9kdWNlcnMuZGVsZXRlKHR5cGUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc3RvcFZpZGVvVHJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zdG9wQXVkaW9UcmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ0NMT1NJTkcgUFJPRFVDRVIgT0YgSUQgOiAnICsgcHJvZHVjZXJJZCk7XG4gICAgICAgIHNvY2tldE1hbmFnZXIuZW1pdEV2ZW50KFZDRXZlbnRUeXBlLlBST0RVQ0VSX0NMT1NFRCwge1xuICAgICAgICAgICAgdXNlcklkOiBwcm9wcy5kYXRhLnVzZXJJZCxcbiAgICAgICAgICAgIHByb2R1Y2VySWQsXG4gICAgICAgICAgICByb29tSWQ6IHByb3BzLm1lZXRpbmdJZFxuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IGNvbnNvbGUubG9nKCdQUk9EVUNFUl9DTE9TRUQgRVJST1IgOiAnLCBlKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTmV3UHJvZHVjZXJzID0gKHByb2R1Y2VycywgbG9hZGluZyA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPT09PT09IFBST0RVQ0VSUyBSRUNFSVZFRCA6IFsgXCIgKyBKU09OLnN0cmluZ2lmeShwcm9kdWNlcnMpICsgXCIgXSA9PT09PT09XCIpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb2R1Y2VyIG9mIHByb2R1Y2Vycykge1xuICAgICAgICAgICAgaWYgKGNvbnN1bWVyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLmtpbmQgPT09ICd2aWRlbycgJiYgIXByb2R1Y2VyLnNjcmVlblNoYXJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDQUxMSU5HIENPTlNVTUUgRlJPTSBPTiBORVcgUFJPRFVDRVJTIEZPUiA6ICcgKyBwcm9wcy5kYXRhLnVzZXJJZCArICcgLSAnICsgcHJvZHVjZXIucHJvZHVjZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKHByb2R1Y2VyLnByb2R1Y2VySWQsIHByb2R1Y2VyLmtpbmQsIGxvYWRpbmcsIHByb2R1Y2VyLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlciB8fCBsb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzbWFsbCBwYXJ0aWNpcGFudCBib3ggYXQgdGhlIGJvdHRvbSBiZWxvbmdpbmcgdG8gdGhlIGN1cnJlbnQgdXNlciBtdXN0IGNvbnN1bWUgYWxsIGF1ZGlvXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBkaXN0dXJiIHRoZSBhdWRpbyBkdWUgdG8gYW55IHJlbmRlcmluZyBzdWNoIGFzIEJyaW5nIHRvIHZpZXdcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLmtpbmQgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUocHJvZHVjZXIucHJvZHVjZXJJZCwgcHJvZHVjZXIua2luZCwgbG9hZGluZywgcHJvZHVjZXIudXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LnB1c2gocHJvZHVjZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPT09PT09IFBST0RVQ0VSUyBUSEFUIENPVUxEIE5PVCBCRSBDT05TVU1FUyA6IFsgXCIgKyBKU09OLnN0cmluZ2lmeShmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQpICsgXCIgXSA9PT09PT09XCIpO1xuICAgIH07XG5cbiAgICBjb25zdCByZW1vdmVDb25zdW1lciA9IChjb25zdW1lcklkLCBraW5kLCB1c2VySWQpID0+IHtcbiAgICAgICAgLy8gU3RvcCBhbnkgYWN0aXZlLXNwZWFrZXIgbWV0ZXIgYXR0YWNoZWQgdG8gdGhpcyBjb25zdW1lcidzIHN0cmVhbS5cbiAgICAgICAgc3RvcE1ldGVyKGNvbnN1bWVySWQpO1xuICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgaWYgKHZpZGVvU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodmlkZW9TdHJlYW0uY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50LmdldFRyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgbGV0IGF1ZGlvRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnN1bWVySWQpO1xuICAgICAgICAgICAgaWYgKGF1ZGlvRWxlbWVudCAmJiBhdWRpb0VsZW1lbnQuc3JjT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodXNlcklkICYmIG1lZGlhUmVjb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5yZW1vdmVUcmFjayh1c2VySWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudEJ5SWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5kYXRhLnVzZXJJZCArICctYXVkaW8tZWwtY29udGFpbmVyJyk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRCeUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRCeUlkLnJlbW92ZUNoaWxkKGF1ZGlvRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3VtZXJzLmRlbGV0ZShjb25zdW1lcklkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmV0cnlDb25zdW1lKGtpbmQsIHVzZXJJZCwgZSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZykge1xuICAgICAgICBjb25zb2xlLmxvZygnRkFJTEVEIFRPIENPTlNVTUUgJyArIGtpbmQgKyAnIEZST00gJyArIHVzZXJJZCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuXG4gICAgICAgIGlmIChyZXRyaWVzIDwgMTApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSRS1UUllJTkcgWycgKyByZXRyaWVzICsgJ10nKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh1bm1vdW50ZWRSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN1bWUocHJvZHVjZXJJZCwga2luZCwgbG9hZGluZywgdXNlcklkLCByZXRyaWVzKTtcbiAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0NPTVBMRVRFTFkgRkFJTEVEIFRPIENPTlNVTUUgJyArIGtpbmQgKyAnIEZST00gJyArIHVzZXJJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb25zdW1lID0gYXN5bmMgKHByb2R1Y2VySWQsIGtpbmQsIGxvYWRpbmcsIHVzZXJJZCwgcmV0cmllcyA9IDApID0+IHtcbiAgICAgICAgbWVkaWFTb3VwSGVscGVyLmdldENvbnN1bWVTdHJlYW0ocHJvZHVjZXJJZCwgZGV2aWNlLnJ0cENhcGFiaWxpdGllcywgY29uc3VtZXJUcmFuc3BvcnQsIHByb3BzLm1lZXRpbmdJZCxcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lLCBraW5kKVxuICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLFxuICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAga2luZFxuICAgICAgICAgICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25zdW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJzLnNldChjb25zdW1lci5pZCwgY29uc3VtZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PUNPTlNVTUU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IDogJyArIGtpbmQgKyAnIEZPUiA6ICcgKyB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9SZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50ID0gc3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlkZW9NdXRlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlkZW9SZWZyZXNoZXIoIXZpZGVvUmVmcmVzaGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja3MuY3VycmVudC5zZXRWaWRlb1RyYWNrKHN0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIgfHwgbG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXVkaW9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LmlkID0gY29uc3VtZXIuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5wbGF5c2lubGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0VsZW1lbnQuYXV0b3BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVldGluZy1hdWRpby1lbC1jb250YWluZXInKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZENoaWxkKGF1ZGlvRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWV0ZXIgdGhpcyBwYXJ0aWNpcGFudCdzIGF1ZGlvIGZvciBhY3RpdmUtc3BlYWtlciBoaWdobGlnaHQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TWV0ZXIoY29uc3VtZXIuaWQsIHN0cmVhbSwgdXNlcklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHMuaXNIb3N0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVJlY29yZGVyLmFkZFRyYWNrKHVzZXJJZCwgc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lci5vbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhY2tlbmRlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhraW5kICsgXCIgQ09OU1VNRVIgVFJBQ0sgRU5ERUQgRk9SIFwiICsgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoY29uc3VtZXIuaWQsIGtpbmQsIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEd1YXJkOiB0aGUgcGFydGljaXBhbnQgbWF5IGhhdmUgbGVmdCwgc28gZmluZCgpIGNhbiBiZSB1bmRlZmluZWQg4oCUXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlYWRpbmcgLnZpZGVvTXV0ZWQvLmF1ZGlvTXV0ZWQgb24gaXQgdGhyZXcuIE5vIHBhcnRpY2lwYW50IOKGkiBubyByZXRyeS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhY2tFbmRlZFBhcnRpY2lwYW50ID0gcGFydGljaXBhbnRzLmZpbmQoKHApID0+IHAudXNlcklkID09PSB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhY2tFbmRlZFBhcnRpY2lwYW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKGtpbmQgPT09ICd2aWRlbycgJiYgIXRyYWNrRW5kZWRQYXJ0aWNpcGFudC52aWRlb011dGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChraW5kID09PSAnYXVkaW8nICYmICF0cmFja0VuZGVkUGFydGljaXBhbnQuYXVkaW9NdXRlZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvbnN1bWUoa2luZCwgdXNlcklkLCBuZXcgRXJyb3IoJ3RyYWNrZW5kZWQgd2hpbGUgJyArIGtpbmQgKyAnIGlzIE5PVCBtdXRlZCcpLCByZXRyaWVzLCBwcm9kdWNlcklkLCBsb2FkaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLm9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc3BvcnRjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhraW5kICsgXCIgQ09OU1VNRVIgQ0xPU0VEIEZPUiBcIiArIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGNvbnN1bWVyLmlkLCBraW5kLCB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICByZXRyeUNvbnN1bWUoa2luZCwgdXNlcklkLCBlLCByZXRyaWVzLCBwcm9kdWNlcklkLCBsb2FkaW5nKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldFBhcnRpY2lwYW50TmFtZSA9ICgpID0+IHtcbiAgICAgICAgbGV0IG5hbWUgPSBwcm9wcy5kYXRhLm5hbWU7XG5cbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChwcm9wcy5kYXRhLnVzZXJJZCkpIHtcbiAgICAgICAgICAgIG5hbWUgPSBgJHtuYW1lfSAoR3Vlc3QpYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHsnY29sLSotKiAnICsgKHByb3BzLmlzQ3VycmVudFVzZXIgPyAnbWVldGluZy1wYXJ0aWNpcGFudC1jb250YWluZXItY3VycmVudC11c2VyJyA6ICdtZWV0aW5nLXBhcnRpY2lwYW50LWNvbnRhaW5lcicpfWB9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBwcm9wcy5wYWRkaW5nID8gcHJvcHMucGFkZGluZyA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHByb3BzLmhlaWdodCA/IHByb3BzLmhlaWdodCA6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHByb3BzLmlzQ3VycmVudFVzZXIgPyAnIzFmMjkzNycgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBwcm9wcy5pc0N1cnJlbnRVc2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnMnB4IHNvbGlkICcgKyAoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yKCkgfHwgJyMxYTNjNWUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjdGl2ZS1zcGVha2VyIGhpZ2hsaWdodDogYW4gaW5zZXQgcmluZyAodGhlIHRpbGUgY2xpcHNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJmbG93LCBzbyBhbiBvdXRzZXQgc2hhZG93IHdvdWxkIGJlIGN1dCBvZmYpLlxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAoIWF1ZGlvTXV0ZWQgJiYgc291bmRMZXZlbCA+IFNQRUFLSU5HX0xFVkVMKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2luc2V0IDAgMCAwIDNweCAnICsgKGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpIHx8ICcjMjJjNTVlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdib3gtc2hhZG93IDEyMG1zIGVhc2Utb3V0J1xuICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2aWRlb011dGVkIHx8ICF2aWRlb1JlZi5jdXJyZW50IHx8ICF2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydjZW50ZXJlZC1mbGV4LWJveCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzhweCcgOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb3BzLnNpemluZyA9PT0gJ3NtJyA/ICdhdmF0YXItd3JhcHBlci1zbScgOiAnYXZhdGFyLXdyYXBwZXInfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogKHByb3BzLnNpemluZyA9PT0gJ3NtJyA/IDcyIDogMTEyKSArICdweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAocHJvcHMuc2l6aW5nID09PSAnc20nID8gNzIgOiAxMTIpICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICFhdWRpb011dGVkICYmIHNvdW5kTGV2ZWwgPiAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzAgMCAwICcgKyAoMyArIHNvdW5kTGV2ZWwgLyAxMikgKyAncHggJyArIChhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IoKSB8fCAnIzAwNDc2YScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdib3gtc2hhZG93IDkwbXMgbGluZWFyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjM2E0NjU0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5zaXppbmcgPT09ICdtZCcgPyAnYXZhdGFyIGF2YXRhci1tZCcgOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnYXZhdGFyIGF2YXRhci1zbScgOiAnYXZhdGFyJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnMjBweCcgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkVXJsID8gPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFJlcGVhdDogJ25vLXJlcGVhdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFNpemU6ICdjb3ZlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHtkb3dubG9hZFVybH0pYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+IDogVXRpbHMuZ2V0SW5pdGlhbHMocHJvcHMuZGF0YS5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3Byb3BzLmRhdGEudXNlcklkICsgJy12aWRlbyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17NjQwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXszMjB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUGxheSByZWY9e3ZpZGVvUmVmfSBtdXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdEZpdDogJ2NvdmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHByb3BzLmlzQ3VycmVudFVzZXIgPyAnc2NhbGVYKC0xKScgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogKHZpZGVvTXV0ZWQgfHwgIXZpZGVvUmVmLmN1cnJlbnQgfHwgIXZpZGVvUmVmLmN1cnJlbnQuc3JjT2JqZWN0KSA/ICdub25lJyA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypXZSBuZWVkIHRoaXMgZWxlbWVudCB0byBjYXB0dXJlIHJlY29yZGluZyBzb3VuZCovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXVkaW9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtwcm9wcy5kYXRhLnVzZXJJZCArICctYXVkaW8nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgcmVmPXthdWRpb1JlZn0gbXV0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ25vbmUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cHJvcHMuc2l6aW5nID09PSAnc20nID8gJ25hbWUtbGFiZWwtc20nIDogJ25hbWUtbGFiZWwnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICc2cHgnIDogJzhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnZmxleC1lbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXA6ICc0cHgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6ICc3MCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzFweCA4cHgnIDogJzJweCAxMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuNTUpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzExcHgnIDogJzEzcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogNTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogMS40LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICdhdXRvJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshcHJvcHMuaXNDdXJyZW50VXNlciAmJiBnZXRQYXJ0aWNpcGFudE5hbWUoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcy5pc0N1cnJlbnRVc2VyICYmICdZb3UnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXByb3BzLmlzQ3VycmVudFVzZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5MZWZ0OiAnNHB4JywgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsIGdhcDogJzRweCd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJiAhYXVkaW9NdXRlZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLm9uSG9zdEF1ZGlvTXV0ZShwcm9wcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuNTUpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydNSUMnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGF1ZGlvTXV0ZWQgPyAnaW5saW5lLWZsZXgnIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydNSUNfT0ZGJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJiAhdmlkZW9NdXRlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbkhvc3RWaWRlb011dGUocHJvcHMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydDQU1FUkEnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7ZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT1cIk15IGRldmljZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrRGV2aWNlc0ljb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPXtvcGVuTW9yZUFjdGlvbnMgPyAnZGV2aWNlLW1lbnUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17b3Blbk1vcmVBY3Rpb25zID8gJ3RydWUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydTRVRUSU5HUyd9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e21hcmdpbkxlZnQ6ICc0cHgnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtoYW5kUmFpc2VkICYmIDxQYW5Ub29sIGZvbnRTaXplPXsnc21hbGwnfSBzdHlsZT17e2NvbG9yOiAnI2UyYjAzMCd9fS8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9eydtZWV0aW5nLWF1ZGlvLWVsLWNvbnRhaW5lcid9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgICAgICBhbmNob3JFbD17YW5jaG9yRWx9XG4gICAgICAgICAgICAgICAgaWQ9XCJkZXZpY2VzLW1lbnVcIlxuICAgICAgICAgICAgICAgIG9wZW49e29wZW5Nb3JlQWN0aW9uc31cbiAgICAgICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZURldmljZU1lbnV9XG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xvc2VEZXZpY2VNZW51fVxuICAgICAgICAgICAgICAgIFBhcGVyUHJvcHM9e3tcbiAgICAgICAgICAgICAgICAgICAgZWxldmF0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgICBzeDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogJ2Ryb3Atc2hhZG93KDBweCAycHggOHB4IHJnYmEoMCwwLDAsMC4zMikpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG10OiAxLjUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnJiAuTXVpTGlzdC1yb290Jzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTFlMWUxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgJyYgLk11aUF2YXRhci1yb290Jzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1sOiAtMC41LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1yOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcmOmJlZm9yZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpIHJvdGF0ZSg0NWRlZyknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpJbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3tcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogMjAsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsOiAxMzZcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGFuY2hvck9yaWdpbj17e1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogJ3RvcCdcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9EZXZpY2VzLm1hcCgoZGV2aWNlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxNZW51SXRlbSBvbkNsaWNrPXsoKSA9PiBjaGFuZ2VBdWRpb0RldmljZShkZXZpY2UpfSBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e2NvbG9yOiBzZWxlY3RlZEF1ZGlvRGV2aWNlICYmIHNlbGVjdGVkQXVkaW9EZXZpY2UuaWQgPT09IGRldmljZS5pZCA/ICcjMTk4NzU0JyA6IG51bGx9fT5cbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UubGFiZWxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9NZW51SXRlbT47XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9NZW51PlxuICAgICAgICA8Lz5cbiAgICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVkNSb29tUGFydGljaXBhbnQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksZUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssZUFBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sZ0JBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLE9BQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLFdBQUEsR0FBQU4sc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFTLEtBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFVLGNBQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLFFB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