@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
@@ -18,12 +18,18 @@ var _VCEventManager = _interopRequireDefault(require("./VCEventManager"));
18
18
  var _SocketManager = _interopRequireDefault(require("../SocketManager"));
19
19
  var _ClosablePanel = _interopRequireDefault(require("./ClosablePanel"));
20
20
  var _SideBarContent = _interopRequireDefault(require("./SideBarContent"));
21
+ var _useContainerWidth = _interopRequireDefault(require("../../hooks/useContainerWidth"));
21
22
  var _VCRoomRecorder = _interopRequireDefault(require("./VCRoomRecorder"));
22
23
  var _RestUtils = require("../../RestUtils");
23
24
  var _Media = _interopRequireDefault(require("../../js/Media"));
24
25
  var _Observable = _interopRequireDefault(require("../../event/Observable"));
25
26
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
26
27
  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); }
28
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
29
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
30
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
31
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
32
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
27
33
  const Status = {
28
34
  LOBBY: 'LOBBY',
29
35
  SESSION: 'SESSION',
@@ -35,6 +41,9 @@ const Status = {
35
41
  const location = window.location.protocol + '//' + window.location.hostname;
36
42
  const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwardRef((props, ref) => {
37
43
  const recordRef = (0, _react.useRef)();
44
+ // True once we've successfully joined — lets SOCKET_CONNECT distinguish a reconnect from the
45
+ // initial connect so we only resync the roster on an actual reconnect.
46
+ const joinedRef = (0, _react.useRef)(false);
38
47
  const [hasUnreadChats, setHasUnreadChats] = (0, _react.useState)(null);
39
48
  const [participants, setParticipants] = (0, _react.useState)([]);
40
49
  const [handRaised, setHandRaised] = (0, _react.useState)(false);
@@ -56,6 +65,10 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
56
65
  const [autoPermit, setAutoPermit] = (0, _react.useState)(!props.calendarEvent.askToJoin);
57
66
  const [rtpCapabilities, setRtpCapabilities] = (0, _react.useState)(null);
58
67
  const [activityMessage, setActivityMessage] = (0, _react.useState)(null);
68
+ // Persistent, actionable error banner (e.g. media reconnection gave up).
69
+ const [reconnectError, setReconnectError] = (0, _react.useState)(null);
70
+ // Transient "socket dropped, reconnecting" banner (cleared on reconnect).
71
+ const [reconnecting, setReconnecting] = (0, _react.useState)(false);
59
72
  const [onloadScreenShareData, setOnloadScreenShareData] = (0, _react.useState)(null);
60
73
  const [chatMessage, setChatMessage] = (0, _react.useState)(null);
61
74
  const [chatSender, setChatSender] = (0, _react.useState)(null);
@@ -68,6 +81,12 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
68
81
  const [minutesShown, setMinutesShown] = _react.default.useState(false);
69
82
  const [startShowingMinutes, setStartShowingMinutes] = _react.default.useState(false);
70
83
  const vcRoomWorkspaceRef = (0, _react.useRef)();
84
+
85
+ // Layout responds to the room's own width (it lives inside WindowViewPort,
86
+ // so viewport breakpoints are wrong). Below this the sidebar overlays the
87
+ // workspace instead of docking beside it (which squashed the video).
88
+ const [rootRef, rootWidth] = (0, _useContainerWidth.default)();
89
+ const narrowLayout = rootWidth > 0 && rootWidth < 680;
71
90
  const api = () => {
72
91
  return {
73
92
  loadChats() {
@@ -94,6 +113,27 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
94
113
  case _VCEventType.VCEventType.USER_LEFT_MEETING:
95
114
  removeUser(be.payload);
96
115
  break;
116
+ case _VCEventType.VCEventType.SOCKET_DISCONNECT:
117
+ // Socket dropped — tell the user. The roster is reconciled on reconnect.
118
+ if (joinedRef.current) {
119
+ setReconnecting(true);
120
+ }
121
+ break;
122
+ case _VCEventType.VCEventType.SOCKET_CONNECT:
123
+ // Only act on a RE-connect (initial connect is handled by the join effect).
124
+ if (joinedRef.current) {
125
+ setReconnecting(false);
126
+ resyncRoster();
127
+ }
128
+ break;
129
+ case _VCEventType.VCEventType.PEER_DISCONNECT:
130
+ // A peer-level disconnect signal — reconcile the roster from the server truth
131
+ // rather than trusting we got every USER_LEFT delta.
132
+ resyncRoster();
133
+ break;
134
+ case _VCEventType.VCEventType.CREATE_TRANSPORT_FAILED:
135
+ setReconnectError('A connection problem occurred. Please rejoin the meeting.');
136
+ break;
97
137
  case _VCEventType.VCEventType.AUDIO_VISUAL_SETTINGS_CHANGED:
98
138
  onAVSettingsChange(be === null || be === void 0 ? void 0 : be.payload);
99
139
  break;
@@ -119,6 +159,9 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
119
159
  hangUp();
120
160
  console.log('Connection error - Please check your network connection and re-join the meeting');
121
161
  break;
162
+ case _VCEventType.VCEventType.SYSTEM_ALERT:
163
+ setReconnectError(be.payload && be.payload.message ? be.payload.message : 'A connection problem occurred. Please rejoin the meeting.');
164
+ break;
122
165
  }
123
166
  }
124
167
  };
@@ -164,11 +207,12 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
164
207
  };
165
208
  const onAVSettingsChange = payload => {
166
209
  if (payload) {
167
- let participant = participants.find(p => p.userId === payload.userId);
168
- if (participant) {
169
- participant.audioMuted = payload.audioMuted;
170
- participant.videoMuted = payload.videoMuted;
171
- }
210
+ // Immutable update: produce a NEW participant object so the tile re-renders with the
211
+ // fresh mute state (in-place mutation could be missed on a grid reshuffle/remount).
212
+ setParticipants(prev => prev.map(p => p.userId === payload.userId ? _objectSpread(_objectSpread({}, p), {}, {
213
+ audioMuted: payload.audioMuted,
214
+ videoMuted: payload.videoMuted
215
+ }) : p));
172
216
  _VCEventManager.default.fireEvent(_VCEventType.VCEventType.AUDIO_VISUAL_SETTINGS_CHANGED, payload);
173
217
  }
174
218
  };
@@ -224,18 +268,50 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
224
268
  };
225
269
  const removeUser = payload => {
226
270
  if (props.calendarEvent.id === payload.meetingId) {
227
- const userId = payload.userId;
228
- const find = participants.find(p => p.userId === userId);
229
- if (find) {
230
- const newParticipants = participants.filter(p => p.userId !== userId);
231
- setParticipants(newParticipants);
232
- if (newParticipants.length === 0) {
233
- setAllUserParticipantsLeft(true);
234
- setRoomStatus(Status.LOBBY);
235
- }
236
- }
271
+ // Immutable functional update so concurrent deltas can't clobber each other (lost-update
272
+ // race). The "everyone left → LOBBY" transition is handled by the participants effect below.
273
+ setParticipants(prev => prev.filter(p => p.userId !== payload.userId));
237
274
  }
238
275
  };
276
+
277
+ // Reconcile the participant list WHOLESALE from the server's authoritative roster. This is the
278
+ // reconciliation path that was entirely missing: incremental USER_JOINED/USER_LEFT deltas alone
279
+ // permanently desync a client that drops one. Driven by the Phase-C ALL_USERS server handler.
280
+ const reconcileParticipants = users => {
281
+ const list = (users || []).map(u => ({
282
+ userId: u.userId,
283
+ name: u.name,
284
+ avatar: u.avatar,
285
+ audioMuted: u.audioMuted,
286
+ videoMuted: u.videoMuted,
287
+ producers: u.producers
288
+ }));
289
+ setParticipants(list);
290
+ };
291
+ const resyncRoster = () => {
292
+ _SocketManager.default.emitEvent(_VCEventType.VCEventType.ALL_USERS, {
293
+ meetingId: props.calendarEvent.id,
294
+ userId: _ApplicationManager.default.getUserDetails().username
295
+ }).then(response => {
296
+ if (response && response.data) {
297
+ console.log('ROSTER RESYNC :', response.data.usersInRoom);
298
+ reconcileParticipants(response.data.usersInRoom);
299
+ }
300
+ }).catch(e => {
301
+ console.log('Roster resync failed', e);
302
+ });
303
+ };
304
+
305
+ // Single owner of the "all participants left" / room-status transition, derived from the list
306
+ // (works no matter which path mutated participants: delta, reconcile, or initial join).
307
+ (0, _react.useEffect)(() => {
308
+ if (roomStatus === Status.SESSION && participants.length === 0) {
309
+ setAllUserParticipantsLeft(true);
310
+ setRoomStatus(Status.LOBBY);
311
+ } else if (participants.length > 0 && allUserParticipantsLeft) {
312
+ setAllUserParticipantsLeft(false);
313
+ }
314
+ }, [participants]);
239
315
  const handleSidebarToggle = e => {
240
316
  let paper = document.getElementById('meetingDialogPaper');
241
317
  if (e.detail.open) {
@@ -285,7 +361,7 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
285
361
  }).then(initialContext => {
286
362
  setDisplayState(initialContext ? initialContext.windowDisplayState : 'MAXIMIZED');
287
363
  });
288
- _VCEventManager.default.addSubscriptions(eventHandler, _VCEventType.VCEventType.REQUEST_TO_JOIN_MEETING, _VCEventType.VCEventType.USER_JOINED, _VCEventType.VCEventType.USER_LEFT_MEETING, _VCEventType.VCEventType.SYSTEM_EVENT, _VCEventType.VCEventType.SOCKET_CONNECT, _VCEventType.VCEventType.SOCKET_DISCONNECT, _VCEventType.VCEventType.RAISE_HAND, _VCEventType.VCEventType.LOWER_HAND, _VCEventType.VCEventType.PEER_DISCONNECT, _VCEventType.VCEventType.CONSUMER_TRANSPORT_FAILED, _VCEventType.VCEventType.CREATE_TRANSPORT_FAILED, _VCEventType.VCEventType.SHARING_STOPPED, _VCEventType.VCEventType.END_SESSION, _VCEventType.VCEventType.CHAT_MESSAGE, _VCEventType.VCEventType.AUDIO_VISUAL_SETTINGS_CHANGED);
364
+ _VCEventManager.default.addSubscriptions(eventHandler, _VCEventType.VCEventType.REQUEST_TO_JOIN_MEETING, _VCEventType.VCEventType.USER_JOINED, _VCEventType.VCEventType.USER_LEFT_MEETING, _VCEventType.VCEventType.SYSTEM_EVENT, _VCEventType.VCEventType.SOCKET_CONNECT, _VCEventType.VCEventType.SOCKET_DISCONNECT, _VCEventType.VCEventType.RAISE_HAND, _VCEventType.VCEventType.LOWER_HAND, _VCEventType.VCEventType.PEER_DISCONNECT, _VCEventType.VCEventType.CONSUMER_TRANSPORT_FAILED, _VCEventType.VCEventType.CREATE_TRANSPORT_FAILED, _VCEventType.VCEventType.SHARING_STOPPED, _VCEventType.VCEventType.END_SESSION, _VCEventType.VCEventType.CHAT_MESSAGE, _VCEventType.VCEventType.AUDIO_VISUAL_SETTINGS_CHANGED, _VCEventType.VCEventType.SYSTEM_ALERT);
289
365
  document.addEventListener('sideBarToggleEvent', handleSidebarToggle);
290
366
  _ApplicationManager.default.setHasActiveMeeting(true);
291
367
  _ApplicationManager.default.setActiveMeetingKey(props.calendarEvent.key);
@@ -307,7 +383,10 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
307
383
  if (props.calendarEvent.host.username === _ApplicationManager.default.getUserDetails().username) {
308
384
  userFullName = props.calendarEvent.host.name;
309
385
  } else {
310
- userFullName = props.calendarEvent.attendees.find(a => a.username === _ApplicationManager.default.getUserDetails().username).name;
386
+ // Guard: the current user may not be in attendees (data drift) don't crash;
387
+ // fall back to the username so currentUserFullName stays truthy (gates the room render).
388
+ const me = props.calendarEvent.attendees.find(a => a.username === _ApplicationManager.default.getUserDetails().username);
389
+ userFullName = me ? me.name : _ApplicationManager.default.getUserDetails().username;
311
390
  }
312
391
  setCurrentUserFullName(userFullName);
313
392
  setIsHost(props.calendarEvent.host.username === _ApplicationManager.default.getUserDetails().username);
@@ -315,10 +394,12 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
315
394
  try {
316
395
  _Media.default.joinMeeting(props.calendarEvent, props.settings, userFullName).then(response => {
317
396
  console.log('JOIN RESPONSE : ', response);
397
+ joinedRef.current = true;
318
398
  createParticipants(response.participants);
319
399
  setRtpCapabilities(response.rtpCapabilities);
320
400
  setOnloadScreenShareData(response.shareScreenProducerData);
321
- setRoomStatus(participants.length > 0 ? Status.SESSION : Status.LOBBY);
401
+ // Derive from the ACK's roster, not the still-empty `participants` state.
402
+ setRoomStatus(response.participants && response.participants.length > 0 ? Status.SESSION : Status.LOBBY);
322
403
  }).catch(e => {
323
404
  setRoomStatus(Status.SYSTEM_ERROR);
324
405
  });
@@ -331,41 +412,35 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
331
412
  };
332
413
  }, []);
333
414
  function addUserToParticipants(user) {
334
- // Typically, a user shoud not exist. We are ensuring that there are never duplicates
335
- console.log(participants);
336
- let participant = participants.find(u => u.userId === user.userId);
337
- if (participant) {
338
- participant.name = user.name;
339
- participant.avatar = user.avatar;
340
- participant.audioMuted = user.audioMuted;
341
- participant.videoMuted = user.videoMuted;
342
- participant.producers = user.producers;
343
- } else {
344
- participant = {
415
+ // Immutable, dedup-by-userId functional update. Never mutate in place + concat (that races
416
+ // with concurrent deltas and loses updates). Update-in-place-by-key if present, else append.
417
+ setParticipants(prev => {
418
+ if (prev.find(u => u.userId === user.userId)) {
419
+ return prev.map(p => p.userId === user.userId ? _objectSpread(_objectSpread({}, p), {}, {
420
+ name: user.name,
421
+ avatar: user.avatar,
422
+ audioMuted: user.audioMuted,
423
+ videoMuted: user.videoMuted,
424
+ producers: user.producers
425
+ }) : p);
426
+ }
427
+ return [...prev, {
345
428
  userId: user.userId,
346
429
  name: user.name,
347
430
  avatar: user.avatar,
348
431
  audioMuted: user.audioMuted,
349
432
  videoMuted: user.videoMuted,
350
433
  producers: user.producers
351
- };
352
- participants.push(participant);
353
- setParticipants([].concat(participants));
354
- }
434
+ }];
435
+ });
355
436
  }
356
437
  const changeOtherParticipantAVSettings = (userId, audioMuted, videoMuted) => {};
357
438
  const createParticipants = users => {
358
439
  console.log('ALL USERS received and creating participants : ', users);
359
- users.forEach(user => {
360
- console.log('ADDING ITEM TO PARTICIPANTS : ', user);
361
- addUserToParticipants(user);
362
- });
363
- setAllUserParticipantsLeft(false);
364
- if (participants.length > 0) {
365
- if (roomStatus === Status.LOBBY) {
366
- setRoomStatus(Status.SESSION);
367
- setSideBarOpen(true);
368
- }
440
+ // Initial roster from the JOIN ack — set it wholesale (same shape as reconcile).
441
+ reconcileParticipants(users);
442
+ if (users && users.length > 0) {
443
+ setSideBarOpen(true);
369
444
  }
370
445
  };
371
446
  const hangUp = () => {
@@ -426,11 +501,13 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
426
501
  _VCRoomRecorder.default.stopRecordingMeeting();
427
502
  };
428
503
  return /*#__PURE__*/_react.default.createElement("div", {
504
+ ref: rootRef,
429
505
  style: {
430
506
  width: '100%',
431
507
  height: '100%',
432
508
  border: '1px solid #e2e2e2',
433
- borderRadius: '4px'
509
+ borderRadius: '4px',
510
+ position: 'relative'
434
511
  }
435
512
  }, /*#__PURE__*/_react.default.createElement("div", {
436
513
  className: 'row flex-nowrap no-margin no-padding w-100 h-100'
@@ -592,7 +669,7 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
592
669
  changeOtherParticipantAVSettings(participant.userId, participant.audioMuted, true);
593
670
  }
594
671
  }))), sideBarOpen && sideBarTab && roomStatus === Status.SESSION && /*#__PURE__*/_react.default.createElement("div", {
595
- className: displayState === 'MAXIMIZED' ? 'closable-panel-container' : 'closable-panel-container-pinned'
672
+ className: narrowLayout ? 'closable-panel-overlay' : 'closable-panel-container'
596
673
  }, /*#__PURE__*/_react.default.createElement(_ClosablePanel.default, {
597
674
  closeHandler: e => {
598
675
  setSideBarOpen(false);
@@ -619,6 +696,24 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
619
696
  bottom: '48px'
620
697
  }
621
698
  }, /*#__PURE__*/_react.default.createElement(_Alert.default, {
699
+ variant: 'warning',
700
+ show: reconnecting,
701
+ fade: true
702
+ }, /*#__PURE__*/_react.default.createElement("p", {
703
+ style: {
704
+ margin: 0
705
+ }
706
+ }, "Reconnecting\u2026")), /*#__PURE__*/_react.default.createElement(_Alert.default, {
707
+ variant: 'danger',
708
+ show: reconnectError !== null,
709
+ dismissible: true,
710
+ onClose: () => setReconnectError(null),
711
+ fade: true
712
+ }, /*#__PURE__*/_react.default.createElement("p", {
713
+ style: {
714
+ margin: 0
715
+ }
716
+ }, reconnectError)), /*#__PURE__*/_react.default.createElement(_Alert.default, {
622
717
  variant: 'info',
623
718
  show: activityMessage !== null,
624
719
  fade: true
@@ -676,4 +771,4 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
676
771
  }))));
677
772
  }));
678
773
  var _default = exports.default = TrainingRoom;
679
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX0ljb24iLCJfQXBwbGljYXRpb25NYW5hZ2VyIiwiX1Rvb2xiYXIiLCJfVkNSb29tIiwiX1ZDUm9vbVdvcmtzcGFjZSIsIl9WQ0V2ZW50VHlwZSIsIl9BbGVydCIsIl9WQ0V2ZW50TWFuYWdlciIsIl9Tb2NrZXRNYW5hZ2VyIiwiX0Nsb3NhYmxlUGFuZWwiLCJfU2lkZUJhckNvbnRlbnQiLCJfVkNSb29tUmVjb3JkZXIiLCJfUmVzdFV0aWxzIiwiX01lZGlhIiwiX09ic2VydmFibGUiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJTdGF0dXMiLCJMT0JCWSIsIlNFU1NJT04iLCJTRVNTSU9OX0VOREVEIiwiU1lTVEVNX0VSUk9SIiwiQ09OTkVDVElPTl9FUlJPUiIsIlNUUkVBTV9FUlJPUiIsImxvY2F0aW9uIiwid2luZG93IiwicHJvdG9jb2wiLCJob3N0bmFtZSIsIlRyYWluaW5nUm9vbSIsIlJlYWN0IiwibWVtbyIsImZvcndhcmRSZWYiLCJwcm9wcyIsInJlZiIsInJlY29yZFJlZiIsInVzZVJlZiIsImhhc1VucmVhZENoYXRzIiwic2V0SGFzVW5yZWFkQ2hhdHMiLCJ1c2VTdGF0ZSIsInBhcnRpY2lwYW50cyIsInNldFBhcnRpY2lwYW50cyIsImhhbmRSYWlzZWQiLCJzZXRIYW5kUmFpc2VkIiwiaXNSZWNvcmRpbmciLCJzZXRJc1JlY29yZGluZyIsInZpZGVvRGlzYWJsZWQiLCJhdWRpb0Rpc2FibGVkIiwic2V0QXVkaW9EaXNhYmxlZCIsInZpZGVvTXV0ZWQiLCJzZXRWaWRlb011dGVkIiwiYXVkaW9NdXRlZCIsInNldEF1ZGlvTXV0ZWQiLCJkaXNwbGF5U3RhdGUiLCJzZXREaXNwbGF5U3RhdGUiLCJyb29tU3RhdHVzIiwic2V0Um9vbVN0YXR1cyIsInNvbWVvbmVTaGFyaW5nIiwic2V0U29tZW9uZVNoYXJpbmciLCJzaWRlQmFyT3BlbiIsInNldFNpZGVCYXJPcGVuIiwic2lkZUJhclRhYiIsInNldFNpZGVCYXJUYWIiLCJhbGxVc2VyUGFydGljaXBhbnRzTGVmdCIsInNldEFsbFVzZXJQYXJ0aWNpcGFudHNMZWZ0IiwibG9iYnlXYWl0aW5nTGlzdCIsInNldExvYmJ5V2FpdGluZ0xpc3QiLCJpc0hvc3QiLCJzZXRJc0hvc3QiLCJpc0NoYWlyUGVyc29uIiwic2V0SXNDaGFpclBlcnNvbiIsIm1lZXRpbmdQYXJ0aWNpcGFudEdyaWRNb2RlIiwic2V0TWVldGluZ1BhcnRpY2lwYW50R3JpZE1vZGUiLCJhdXRvUGVybWl0Iiwic2V0QXV0b1Blcm1pdCIsImNhbGVuZGFyRXZlbnQiLCJhc2tUb0pvaW4iLCJydHBDYXBhYmlsaXRpZXMiLCJzZXRSdHBDYXBhYmlsaXRpZXMiLCJhY3Rpdml0eU1lc3NhZ2UiLCJzZXRBY3Rpdml0eU1lc3NhZ2UiLCJvbmxvYWRTY3JlZW5TaGFyZURhdGEiLCJzZXRPbmxvYWRTY3JlZW5TaGFyZURhdGEiLCJjaGF0TWVzc2FnZSIsInNldENoYXRNZXNzYWdlIiwiY2hhdFNlbmRlciIsInNldENoYXRTZW5kZXIiLCJjdXJyZW50VXNlckZ1bGxOYW1lIiwic2V0Q3VycmVudFVzZXJGdWxsTmFtZSIsImV2ZW50SGFuZGxlciIsIm1lZXRpbmdDaGF0Iiwic2V0TWVldGluZ0NoYXQiLCJzY3JlZW5TaGFyZWQiLCJzZXRTY3JlZW5TaGFyZWQiLCJzdGFydFNjcmVlblNoYXJpbmciLCJzZXRTdGFydFNjcmVlblNoYXJpbmciLCJyYWlzZWRIYW5kcyIsInNldFJhaXNlZEhhbmRzIiwibWludXRlc1Nob3duIiwic2V0TWludXRlc1Nob3duIiwic3RhcnRTaG93aW5nTWludXRlcyIsInNldFN0YXJ0U2hvd2luZ01pbnV0ZXMiLCJ2Y1Jvb21Xb3Jrc3BhY2VSZWYiLCJhcGkiLCJsb2FkQ2hhdHMiLCJjb25zb2xlIiwibG9nIiwiZmV0Y2hDaGF0cyIsImhhbmRsZXIiLCJpZCIsIm9uIiwiZXZlbnRUeXBlIiwiYmUiLCJWQ0V2ZW50VHlwZSIsIlJFUVVFU1RfVE9fSk9JTl9NRUVUSU5HIiwiVVNFUl9KT0lORUQiLCJhZGRVc2VyIiwicGF5bG9hZCIsIlVTRVJfTEVGVF9NRUVUSU5HIiwicmVtb3ZlVXNlciIsIkFVRElPX1ZJU1VBTF9TRVRUSU5HU19DSEFOR0VEIiwib25BVlNldHRpbmdzQ2hhbmdlIiwiU1lTVEVNX0VWRU5UIiwiUkFJU0VfSEFORCIsIm9uUmFpc2VIYW5kIiwiTE9XRVJfSEFORCIsIm9uTG93ZXJIYW5kIiwiRU5EX1NFU1NJT04iLCJoYW5nVXAiLCJTSEFSSU5HX1NUT1BQRUQiLCJDSEFUX01FU1NBR0UiLCJvbk1lc3NhZ2UiLCJDT05TVU1FUl9UUkFOU1BPUlRfRkFJTEVEIiwibWVzc2FnZSIsImFwcGxpY2F0aW9uTWFuYWdlciIsImdldFVzZXJEZXRhaWxzIiwidXNlcm5hbWUiLCJwYXJ0aWNpcGFudCIsImhhbmRsZU1lc3NhZ2VBcnJpdmVkIiwibmFtZSIsImNvbnRlbnQiLCJ0cmltIiwibGVuZ3RoIiwicHVzaCIsInVzZXJJZCIsImNvbmNhdCIsImluZGV4IiwiZmluZEluZGV4IiwicCIsInNwbGljZSIsInVzZUVmZmVjdCIsInNlbmRSZXF1ZXN0IiwiZ2V0Q29udGV4dFJvb3QiLCJyZXNwb25zZSIsImZpbmQiLCJ2Y0V2ZW50TWFuYWdlciIsImZpcmVFdmVudCIsImVtaXRBVlNldHRpbmdzQ2hhbmdlIiwic29ja2V0TWFuYWdlciIsImVtaXRFdmVudCIsIm1lZXRpbmdJZCIsImNhdGNoIiwiZXJyb3IiLCJldmVudCIsIm1lc3NhZ2VUaW1lb3V0Iiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCIsImFkZFVzZXJUb1BhcnRpY2lwYW50cyIsInVzZXIiLCJuZXdQYXJ0aWNpcGFudHMiLCJmaWx0ZXIiLCJoYW5kbGVTaWRlYmFyVG9nZ2xlIiwicGFwZXIiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiZGV0YWlsIiwib3BlbiIsInN0eWxlIiwibWFyZ2luIiwiaGFuZGxlIiwic2V0dGluZ3MiLCJhdWRpb09uIiwidmlkZW9PbiIsIlV0aWxzIiwiaXNOdWxsIiwicm9vbUlkIiwicmVtb3ZlU3Vic2NyaXB0aW9ucyIsImFkZEFwcGxpY2F0aW9uQ29udGV4dFN1YnNjcmlwdGlvbiIsIm9uQ29udGV4dENoYW5nZSIsImNvbnRleHQiLCJuZXdWYWx1ZXMiLCJrZXlzIiwia2V5Iiwid2luZG93RGlzcGxheVN0YXRlIiwidGhlbiIsImluaXRpYWxDb250ZXh0IiwiYWRkU3Vic2NyaXB0aW9ucyIsIlNPQ0tFVF9DT05ORUNUIiwiU09DS0VUX0RJU0NPTk5FQ1QiLCJQRUVSX0RJU0NPTk5FQ1QiLCJDUkVBVEVfVFJBTlNQT1JUX0ZBSUxFRCIsImFkZEV2ZW50TGlzdGVuZXIiLCJzZXRIYXNBY3RpdmVNZWV0aW5nIiwic2V0QWN0aXZlTWVldGluZ0tleSIsImV2ZW50TWFuYWdlciIsInJlbW92ZUFwcGxpY2F0aW9uQ29udGV4dFN1YnNjcmlwdGlvbnMiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFzQWN0aXZlTWVldGluZyIsImxlYXZlTWVldGluZyIsInVzZXJGdWxsTmFtZSIsImhvc3QiLCJhdHRlbmRlZXMiLCJhIiwiY2hhaXJQZXJzb25JZCIsIm1lZGlhIiwiam9pbk1lZXRpbmciLCJjcmVhdGVQYXJ0aWNpcGFudHMiLCJzaGFyZVNjcmVlblByb2R1Y2VyRGF0YSIsInUiLCJhdmF0YXIiLCJwcm9kdWNlcnMiLCJjaGFuZ2VPdGhlclBhcnRpY2lwYW50QVZTZXR0aW5ncyIsInVzZXJzIiwiZm9yRWFjaCIsInJlbW92ZUxvYWRlZEdyYXBoIiwiZW5kU2Vzc2lvbiIsIm9wZW5Db25maXJtRGlhbG9nIiwicmVzdWx0IiwiZW1pdFN5c3RlbUV2ZW50IiwiZGF0YSIsInRvUGFydGljaXBhbnRJZHMiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJwYXJ0aWNpcGFudElkcyIsInN5c3RlbUV2ZW50VHlwZSIsInJlY2lwaWVudHMiLCJyZWNvcmRNZWV0aW5nIiwibWVkaWFSZWNvcmRlciIsImluaXQiLCJ0aXRsZSIsInJlY29yZGluZyIsInN0b3BSZWNvcmRpbmdNZWV0aW5nIiwicHVibGlzaCIsImNyZWF0ZUVsZW1lbnQiLCJ3aWR0aCIsImhlaWdodCIsImJvcmRlciIsImJvcmRlclJhZGl1cyIsImNsYXNzTmFtZSIsIm1pbldpZHRoIiwiYm9yZGVyQm90dG9tIiwib25NdXRlVmlkZW8iLCJtdXRlZCIsIm9uTXV0ZUF1ZGlvIiwiZW5kQ2FsbCIsInNob3dDaGF0Iiwic2hvd1Blb3BsZSIsInNoYXJlU2NyZWVuIiwic3RvcFNoYXJlU2NyZWVuIiwic2hvd01pbnV0ZXMiLCJoaWRlTWludXRlcyIsInNhdmVNaW51dGVzIiwiY3VycmVudCIsInN0b3BSZWNvcmRpbmciLCJyYWlzZUhhbmQiLCJsb3dlckhhbmQiLCJpc0F1ZGlvRGV2aWNlQ29ubmVjdGVkIiwiaXNWaWRlb0RldmljZUNvbm5lY3RlZCIsImNvbG9yIiwicGFkZGluZyIsImZvbnRTaXplIiwiU1lTVEVNX0VSUk9SX01FU1NBR0UiLCJtb2RlIiwidmlld0lkIiwibWVldGluZ1RpdGxlIiwiZXZlbnRLZXkiLCJtaW51dGVzRG9jdW1lbnRJZCIsIm9uR3JpZFNldHVwIiwic2hhcmluZ0hhbmRsZXIiLCJvblN0b3BTaGFyaW5nIiwib25TdGFydFNoYXJpbmciLCJvblN0YXJ0U2hvd2luZ01pbnV0ZXMiLCJvblN0b3BTaG93aW5nTWludXRlcyIsIm9uQXVkaW9EZXZpY2VDaGFuZ2UiLCJkZXZpY2UiLCJvbkhvc3RBdWRpb011dGUiLCJvbkhvc3RWaWRlb011dGUiLCJjbG9zZUhhbmRsZXIiLCJ0YWIiLCJwb3NpdGlvbiIsInJpZ2h0IiwiYm90dG9tIiwidmFyaWFudCIsInNob3ciLCJmYWRlIiwicGFkZGluZ0JvdHRvbSIsIm1hcmdpblRvcCIsIkZyYWdtZW50IiwiZGlzcGxheSIsImhpZGRlbiIsInBsYXlzSW5saW5lIiwiYXV0b1BsYXkiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbWVkaWEvVHJhaW5pbmdSb29tLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyLvu79pbXBvcnQgUmVhY3QsIHtGcmFnbWVudCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vVXRpbHMnO1xuaW1wb3J0ICcuL1ZpZGVvLmNzcyc7XG5pbXBvcnQgSWNvbiBmcm9tICcuLi9JY29uJztcbmltcG9ydCBhcHBsaWNhdGlvbk1hbmFnZXIgZnJvbSAnLi4vLi4vQXBwbGljYXRpb25NYW5hZ2VyJztcbmltcG9ydCBUb29sYmFyIGZyb20gJy4vVG9vbGJhcic7XG5pbXBvcnQge1NZU1RFTV9FUlJPUl9NRVNTQUdFfSBmcm9tICcuL1ZDUm9vbSc7XG5pbXBvcnQgVkNSb29tV29ya3NwYWNlIGZyb20gJy4vVkNSb29tV29ya3NwYWNlJztcbmltcG9ydCB7VkNFdmVudFR5cGV9IGZyb20gJy4vVkNFdmVudFR5cGUnO1xuaW1wb3J0IEFsZXJ0IGZyb20gJ3JlYWN0LWJvb3RzdHJhcC9BbGVydCc7XG5pbXBvcnQgdmNFdmVudE1hbmFnZXIgZnJvbSAnLi9WQ0V2ZW50TWFuYWdlcic7XG5pbXBvcnQgc29ja2V0TWFuYWdlciBmcm9tICcuLi9Tb2NrZXRNYW5hZ2VyJztcbmltcG9ydCBDbG9zYWJsZVBhbmVsIGZyb20gJy4vQ2xvc2FibGVQYW5lbCc7XG5pbXBvcnQgU2lkZUJhckNvbnRlbnQgZnJvbSAnLi9TaWRlQmFyQ29udGVudCc7XG5pbXBvcnQgbWVkaWFSZWNvcmRlciBmcm9tICcuL1ZDUm9vbVJlY29yZGVyJztcbmltcG9ydCB7c2VuZFJlcXVlc3R9IGZyb20gJy4uLy4uL1Jlc3RVdGlscyc7XG5pbXBvcnQgbWVkaWEgZnJvbSAnLi4vLi4vanMvTWVkaWEnO1xuaW1wb3J0IGV2ZW50TWFuYWdlciBmcm9tICcuLi8uLi9ldmVudC9PYnNlcnZhYmxlJztcblxuY29uc3QgU3RhdHVzID0ge1xuICAgIExPQkJZOiAnTE9CQlknLFxuICAgIFNFU1NJT046ICdTRVNTSU9OJyxcbiAgICBTRVNTSU9OX0VOREVEOiAnU0VTU0lPTl9FTkRFRCcsXG4gICAgU1lTVEVNX0VSUk9SOiAnU1lTVEVNX0VSUk9SJyxcbiAgICBDT05ORUNUSU9OX0VSUk9SOiAnQ09OTkVDVElPTl9FUlJPUicsXG4gICAgU1RSRUFNX0VSUk9SOiAnU1RSRUFNX0VSUk9SJ1xufTtcblxuY29uc3QgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuY29uc3QgVHJhaW5pbmdSb29tID0gUmVhY3QubWVtbyhSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XG5cbiAgICBjb25zdCByZWNvcmRSZWYgPSB1c2VSZWYoKTtcbiAgICBjb25zdCBbaGFzVW5yZWFkQ2hhdHMsIHNldEhhc1VucmVhZENoYXRzXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtwYXJ0aWNpcGFudHMsIHNldFBhcnRpY2lwYW50c10gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW2hhbmRSYWlzZWQsIHNldEhhbmRSYWlzZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtpc1JlY29yZGluZywgc2V0SXNSZWNvcmRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFt2aWRlb0Rpc2FibGVkXSA9IHVzZVN0YXRlKHByb3BzLnZpZGVvRGlzYWJsZWQpO1xuICAgIGNvbnN0IFthdWRpb0Rpc2FibGVkLCBzZXRBdWRpb0Rpc2FibGVkXSA9IHVzZVN0YXRlKHByb3BzLmF1ZGlvRGlzYWJsZWQpO1xuICAgIGNvbnN0IFt2aWRlb011dGVkLCBzZXRWaWRlb011dGVkXSA9IHVzZVN0YXRlKHRydWUpO1xuICAgIGNvbnN0IFthdWRpb011dGVkLCBzZXRBdWRpb011dGVkXSA9IHVzZVN0YXRlKHRydWUpO1xuICAgIGNvbnN0IFtkaXNwbGF5U3RhdGUsIHNldERpc3BsYXlTdGF0ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbcm9vbVN0YXR1cywgc2V0Um9vbVN0YXR1c10gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbc29tZW9uZVNoYXJpbmcsIHNldFNvbWVvbmVTaGFyaW5nXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtzaWRlQmFyT3Blbiwgc2V0U2lkZUJhck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtzaWRlQmFyVGFiLCBzZXRTaWRlQmFyVGFiXSA9IHVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbYWxsVXNlclBhcnRpY2lwYW50c0xlZnQsIHNldEFsbFVzZXJQYXJ0aWNpcGFudHNMZWZ0XSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbbG9iYnlXYWl0aW5nTGlzdCwgc2V0TG9iYnlXYWl0aW5nTGlzdF0gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW2lzSG9zdCwgc2V0SXNIb3N0XSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbaXNDaGFpclBlcnNvbiwgc2V0SXNDaGFpclBlcnNvbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW21lZXRpbmdQYXJ0aWNpcGFudEdyaWRNb2RlLCBzZXRNZWV0aW5nUGFydGljaXBhbnRHcmlkTW9kZV0gPSB1c2VTdGF0ZSgnREVGQVVMVCcpO1xuICAgIGNvbnN0IFthdXRvUGVybWl0LCBzZXRBdXRvUGVybWl0XSA9IHVzZVN0YXRlKCFwcm9wcy5jYWxlbmRhckV2ZW50LmFza1RvSm9pbik7XG4gICAgY29uc3QgW3J0cENhcGFiaWxpdGllcywgc2V0UnRwQ2FwYWJpbGl0aWVzXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFthY3Rpdml0eU1lc3NhZ2UsIHNldEFjdGl2aXR5TWVzc2FnZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbb25sb2FkU2NyZWVuU2hhcmVEYXRhLCBzZXRPbmxvYWRTY3JlZW5TaGFyZURhdGFdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2NoYXRNZXNzYWdlLCBzZXRDaGF0TWVzc2FnZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbY2hhdFNlbmRlciwgc2V0Q2hhdFNlbmRlcl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbY3VycmVudFVzZXJGdWxsTmFtZSwgc2V0Q3VycmVudFVzZXJGdWxsTmFtZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbZXZlbnRIYW5kbGVyXSA9IHVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBbbWVldGluZ0NoYXQsIHNldE1lZXRpbmdDaGF0XSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtzY3JlZW5TaGFyZWQsIHNldFNjcmVlblNoYXJlZF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbc3RhcnRTY3JlZW5TaGFyaW5nLCBzZXRTdGFydFNjcmVlblNoYXJpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtyYWlzZWRIYW5kcywgc2V0UmFpc2VkSGFuZHNdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFttaW51dGVzU2hvd24sIHNldE1pbnV0ZXNTaG93bl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3N0YXJ0U2hvd2luZ01pbnV0ZXMsIHNldFN0YXJ0U2hvd2luZ01pbnV0ZXNdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHZjUm9vbVdvcmtzcGFjZVJlZiA9IHVzZVJlZigpO1xuXG4gICAgY29uc3QgYXBpID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9hZENoYXRzICgpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnTE9BRElORyBDSEFUUycpO1xuICAgICAgICAgICAgICAgIGZldGNoQ2hhdHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXQgaWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtZWV0aW5nLXJvb20tJyArIHByb3BzLmNhbGVuZGFyRXZlbnQuaWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHBhcnRpY2lwYW50cygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFydGljaXBhbnRzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiAoZXZlbnRUeXBlLCBiZSkgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuUkVRVUVTVF9UT19KT0lOX01FRVRJTkc6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5VU0VSX0pPSU5FRDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFVzZXIoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5VU0VSX0xFRlRfTUVFVElORzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVVzZXIoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5BVURJT19WSVNVQUxfU0VUVElOR1NfQ0hBTkdFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQVZTZXR0aW5nc0NoYW5nZShiZT8ucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5TWVNURU1fRVZFTlQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5SQUlTRV9IQU5EOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25SYWlzZUhhbmQoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5MT1dFUl9IQU5EOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25Mb3dlckhhbmQoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5FTkRfU0VTU0lPTjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmdVcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuU0hBUklOR19TVE9QUEVEOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2NyZWVuU2hhcmVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXJ0U2NyZWVuU2hhcmluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5DSEFUX01FU1NBR0U6XG4gICAgICAgICAgICAgICAgICAgICAgICBvbk1lc3NhZ2UoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5DT05TVU1FUl9UUkFOU1BPUlRfRkFJTEVEOlxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZ1VwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ29ubmVjdGlvbiBlcnJvciAtIFBsZWFzZSBjaGVjayB5b3VyIG5ldHdvcmsgY29ubmVjdGlvbiBhbmQgcmUtam9pbiB0aGUgbWVldGluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBvbk1lc3NhZ2UgPSAobWVzc2FnZSkgPT4ge1xuICAgICAgICBpZihzaWRlQmFyVGFiICE9PSAnQ2hhdCcpIHtcbiAgICAgICAgICAgIGxldCBjaGF0TWVzc2FnZSA9IG1lc3NhZ2UuY2hhdE1lc3NhZ2U7XG4gICAgICAgICAgICBpZiAoYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUgIT09IGNoYXRNZXNzYWdlLnBhcnRpY2lwYW50LnVzZXJuYW1lKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlTWVzc2FnZUFycml2ZWQoe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGF0TWVzc2FnZS5wYXJ0aWNpcGFudC5uYW1lICsgXCIgXCIgKyBjaGF0TWVzc2FnZS5wYXJ0aWNpcGFudC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICArIChjaGF0TWVzc2FnZS5jb250ZW50ICYmIGNoYXRNZXNzYWdlLmNvbnRlbnQudHJpbSgpLmxlbmd0aCA+IDAgPyBcIiAtIFwiICsgY2hhdE1lc3NhZ2UuY29udGVudCA6ICcnKVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgc2V0SGFzVW5yZWFkQ2hhdHModHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvblJhaXNlSGFuZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIHJhaXNlZEhhbmRzLnB1c2gocGF5bG9hZC51c2VySWQpO1xuICAgICAgICBzZXRSYWlzZWRIYW5kcyhbXS5jb25jYXQocmFpc2VkSGFuZHMpKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25Mb3dlckhhbmQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocmFpc2VkSGFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gcmFpc2VkSGFuZHMuZmluZEluZGV4KChwKSA9PiBwID09PSBwYXlsb2FkLnVzZXJJZCk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHJhaXNlZEhhbmRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzZXRSYWlzZWRIYW5kcyhbXS5jb25jYXQocmFpc2VkSGFuZHMpKTtcbiAgICB9O1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKG1lZXRpbmdDaGF0KSB7XG4gICAgICAgICAgICBzZXRTaWRlQmFyVGFiKCdDaGF0Jyk7XG4gICAgICAgICAgICBzZXRTaWRlQmFyT3Blbih0cnVlKTtcbiAgICAgICAgICAgIHNldEhhc1VucmVhZENoYXRzKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0sIFttZWV0aW5nQ2hhdF0pO1xuXG4gICAgY29uc3QgZmV0Y2hDaGF0cyA9ICgpID0+IHtcbiAgICAgICAgc2VuZFJlcXVlc3QoYCR7bG9jYXRpb24gKyAnLycgKyBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0Q29udGV4dFJvb3QoKX0vY2FsZW5kYXIvYXBpL3YxL2NoYXQvZmV0Y2hNZWV0aW5nQ2hhdC8ke3Byb3BzLmNhbGVuZGFyRXZlbnQuaWR9YCwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRkVUQ0ggQ0hBVCBSRVNQT05TRSA6ICcsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5pZCkge1xuICAgICAgICAgICAgICAgIHNldE1lZXRpbmdDaGF0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgKGUpID0+IHtcblxuICAgICAgICB9LCB0cnVlLCBmYWxzZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uQVZTZXR0aW5nc0NoYW5nZSA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmKHBheWxvYWQpIHtcbiAgICAgICAgICAgIGxldCBwYXJ0aWNpcGFudCA9IHBhcnRpY2lwYW50cy5maW5kKChwKSA9PiBwLnVzZXJJZCA9PT0gcGF5bG9hZC51c2VySWQpO1xuICAgICAgICAgICAgaWYgKHBhcnRpY2lwYW50KSB7XG4gICAgICAgICAgICAgICAgcGFydGljaXBhbnQuYXVkaW9NdXRlZCA9IHBheWxvYWQuYXVkaW9NdXRlZDtcbiAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudC52aWRlb011dGVkID0gcGF5bG9hZC52aWRlb011dGVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2Y0V2ZW50TWFuYWdlci5maXJlRXZlbnQoVkNFdmVudFR5cGUuQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQsIHBheWxvYWQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVtaXRBVlNldHRpbmdzQ2hhbmdlKCkge1xuICAgICAgICBzb2NrZXRNYW5hZ2VyLmVtaXRFdmVudChWQ0V2ZW50VHlwZS5BVURJT19WSVNVQUxfU0VUVElOR1NfQ0hBTkdFRCwge1xuICAgICAgICAgICAgbWVldGluZ0lkOiBwcm9wcy5jYWxlbmRhckV2ZW50LmlkLFxuICAgICAgICAgICAgdXNlcklkOiBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZSxcbiAgICAgICAgICAgIGF1ZGlvTXV0ZWQ6IGF1ZGlvTXV0ZWQsXG4gICAgICAgICAgICB2aWRlb011dGVkOiB2aWRlb011dGVkXG4gICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoYXVkaW9NdXRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgb25BVlNldHRpbmdzQ2hhbmdlKHtcbiAgICAgICAgICAgICAgICB1c2VySWQ6IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lLFxuICAgICAgICAgICAgICAgIHZpZGVvTXV0ZWQsXG4gICAgICAgICAgICAgICAgYXVkaW9NdXRlZFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGVtaXRBVlNldHRpbmdzQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICB9LCBbYXVkaW9NdXRlZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHZpZGVvTXV0ZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG9uQVZTZXR0aW5nc0NoYW5nZSh7XG4gICAgICAgICAgICAgICAgdXNlcklkOiBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZSxcbiAgICAgICAgICAgICAgICB2aWRlb011dGVkLFxuICAgICAgICAgICAgICAgIGF1ZGlvTXV0ZWRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBlbWl0QVZTZXR0aW5nc0NoYW5nZSgpO1xuICAgICAgICB9XG4gICAgfSwgW3ZpZGVvTXV0ZWRdKTtcblxuICAgIGNvbnN0IGhhbmRsZU1lc3NhZ2VBcnJpdmVkID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChyb29tU3RhdHVzID09PSBTdGF0dXMuU0VTU0lPTiAmJiBldmVudC5tZXNzYWdlICYmIGV2ZW50Lm1lc3NhZ2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2V0QWN0aXZpdHlNZXNzYWdlKGV2ZW50Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRBY3Rpdml0eU1lc3NhZ2UobnVsbCk7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KG1lc3NhZ2VUaW1lb3V0KTtcbiAgICAgICAgICAgIH0sIDQwMDApO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGFkZFVzZXIgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnQUREIFVTRVIgOiAnLCBwYXlsb2FkKTtcbiAgICAgICAgYWRkVXNlclRvUGFydGljaXBhbnRzKHBheWxvYWQudXNlcik7XG4gICAgICAgIHNldEFsbFVzZXJQYXJ0aWNpcGFudHNMZWZ0KGZhbHNlKTtcbiAgICAgICAgaWYgKHJvb21TdGF0dXMgPT09IFN0YXR1cy5MT0JCWSkge1xuICAgICAgICAgICAgc2V0Um9vbVN0YXR1cyhTdGF0dXMuU0VTU0lPTik7XG4gICAgICAgICAgICBzZXRTaWRlQmFyVGFiKCdQZW9wbGUnKTtcbiAgICAgICAgICAgIHNldFNpZGVCYXJPcGVuKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaGFuZGxlTWVzc2FnZUFycml2ZWQoe1xuICAgICAgICAgICAgbWVzc2FnZTogcGF5bG9hZC51c2VyLm5hbWUgKyAnIGhhcyBqb2luZWQnXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZW1vdmVVc2VyID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLmNhbGVuZGFyRXZlbnQuaWQgPT09IHBheWxvYWQubWVldGluZ0lkKSB7XG4gICAgICAgICAgICBjb25zdCB1c2VySWQgPSBwYXlsb2FkLnVzZXJJZDtcbiAgICAgICAgICAgIGNvbnN0IGZpbmQgPSBwYXJ0aWNpcGFudHMuZmluZCgocCkgPT4gcC51c2VySWQgPT09IHVzZXJJZCk7XG4gICAgICAgICAgICBpZiAoZmluZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BhcnRpY2lwYW50cyA9IHBhcnRpY2lwYW50cy5maWx0ZXIoKHApID0+IHAudXNlcklkICE9PSB1c2VySWQpO1xuICAgICAgICAgICAgICAgIHNldFBhcnRpY2lwYW50cyhuZXdQYXJ0aWNpcGFudHMpO1xuICAgICAgICAgICAgICAgIGlmIChuZXdQYXJ0aWNpcGFudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEFsbFVzZXJQYXJ0aWNpcGFudHNMZWZ0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRSb29tU3RhdHVzKFN0YXR1cy5MT0JCWSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZVNpZGViYXJUb2dnbGUgPSAoZSkgPT4ge1xuICAgICAgICBsZXQgcGFwZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVldGluZ0RpYWxvZ1BhcGVyJyk7XG4gICAgICAgIGlmIChlLmRldGFpbC5vcGVuKSB7XG4gICAgICAgICAgICBwYXBlci5zdHlsZS5tYXJnaW4gPSAnNTRweCAwIDAgMTM2cHgnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFwZXIuc3R5bGUubWFyZ2luID0gJzU0cHggMCAwIDAnO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGV2ZW50SGFuZGxlci5hcGkgPSBoYW5kbGVyKCk7XG4gICAgICAgIHByb3BzLmhhbmRsZS5hcGkgPSBhcGkoKTtcbiAgICB9KTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5zZXR0aW5ncykge1xuICAgICAgICAgICAgc2V0QXVkaW9NdXRlZCghcHJvcHMuc2V0dGluZ3MuYXVkaW9Pbik7XG4gICAgICAgICAgICBzZXRWaWRlb011dGVkKCFwcm9wcy5zZXR0aW5ncy52aWRlb09uKTtcbiAgICAgICAgfVxuICAgIH0sIFtwcm9wcy5zZXR0aW5nc10pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGFuZFJhaXNlZCkpIHtcbiAgICAgICAgICAgIGlmIChoYW5kUmFpc2VkKSB7XG4gICAgICAgICAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuUkFJU0VfSEFORCwge1xuICAgICAgICAgICAgICAgICAgICByb29tSWQ6IHByb3BzLmNhbGVuZGFyRXZlbnQuaWQsXG4gICAgICAgICAgICAgICAgICAgIHVzZXJJZDogYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuTE9XRVJfSEFORCwge1xuICAgICAgICAgICAgICAgICAgICByb29tSWQ6IHByb3BzLmNhbGVuZGFyRXZlbnQuaWQsXG4gICAgICAgICAgICAgICAgICAgIHVzZXJJZDogYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH0sIFtoYW5kUmFpc2VkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2Y0V2ZW50TWFuYWdlci5yZW1vdmVTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5hZGRBcHBsaWNhdGlvbkNvbnRleHRTdWJzY3JpcHRpb24oe1xuICAgICAgICAgICAgaGFuZGxlcjoge1xuICAgICAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0cmFpbmluZy1yb29tJztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uQ29udGV4dENoYW5nZTogKGNvbnRleHQsIG5ld1ZhbHVlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMobmV3VmFsdWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoKGtleSkgPT4ga2V5ID09PSAnd2luZG93RGlzcGxheVN0YXRlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldERpc3BsYXlTdGF0ZShuZXdWYWx1ZXMud2luZG93RGlzcGxheVN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKChpbml0aWFsQ29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldERpc3BsYXlTdGF0ZShpbml0aWFsQ29udGV4dCA/IGluaXRpYWxDb250ZXh0LndpbmRvd0Rpc3BsYXlTdGF0ZSA6ICdNQVhJTUlaRUQnKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHZjRXZlbnRNYW5hZ2VyLmFkZFN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGVyLCBWQ0V2ZW50VHlwZS5SRVFVRVNUX1RPX0pPSU5fTUVFVElORywgVkNFdmVudFR5cGUuVVNFUl9KT0lORUQsIFZDRXZlbnRUeXBlLlVTRVJfTEVGVF9NRUVUSU5HLFxuICAgICAgICAgICAgVkNFdmVudFR5cGUuU1lTVEVNX0VWRU5ULCBWQ0V2ZW50VHlwZS5TT0NLRVRfQ09OTkVDVCwgVkNFdmVudFR5cGUuU09DS0VUX0RJU0NPTk5FQ1QsIFZDRXZlbnRUeXBlLlJBSVNFX0hBTkQsIFZDRXZlbnRUeXBlLkxPV0VSX0hBTkQsXG4gICAgICAgICAgICBWQ0V2ZW50VHlwZS5QRUVSX0RJU0NPTk5FQ1QsIFZDRXZlbnRUeXBlLkNPTlNVTUVSX1RSQU5TUE9SVF9GQUlMRUQsIFZDRXZlbnRUeXBlLkNSRUFURV9UUkFOU1BPUlRfRkFJTEVELFxuICAgICAgICAgICAgVkNFdmVudFR5cGUuU0hBUklOR19TVE9QUEVELCBWQ0V2ZW50VHlwZS5FTkRfU0VTU0lPTiwgVkNFdmVudFR5cGUuQ0hBVF9NRVNTQUdFLCBWQ0V2ZW50VHlwZS5BVURJT19WSVNVQUxfU0VUVElOR1NfQ0hBTkdFRCk7XG5cbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2lkZUJhclRvZ2dsZUV2ZW50JywgaGFuZGxlU2lkZWJhclRvZ2dsZSk7XG4gICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5zZXRIYXNBY3RpdmVNZWV0aW5nKHRydWUpO1xuICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuc2V0QWN0aXZlTWVldGluZ0tleShwcm9wcy5jYWxlbmRhckV2ZW50LmtleSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICB2Y0V2ZW50TWFuYWdlci5yZW1vdmVTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlcik7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIucmVtb3ZlQXBwbGljYXRpb25Db250ZXh0U3Vic2NyaXB0aW9ucygndHJhaW5pbmctcm9vbScpO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2lkZUJhclRvZ2dsZUV2ZW50JywgaGFuZGxlU2lkZWJhclRvZ2dsZSk7XG5cbiAgICAgICAgICAgIGlmIChhcHBsaWNhdGlvbk1hbmFnZXIuaGFzQWN0aXZlTWVldGluZygpKSB7XG4gICAgICAgICAgICAgICAgc29ja2V0TWFuYWdlci5sZWF2ZU1lZXRpbmcocHJvcHMuY2FsZW5kYXJFdmVudC5pZCk7XG4gICAgICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLnNldEhhc0FjdGl2ZU1lZXRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5zZXRBY3RpdmVNZWV0aW5nS2V5KG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5zZXRIYXNBY3RpdmVNZWV0aW5nKHRydWUpO1xuICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuc2V0QWN0aXZlTWVldGluZ0tleShwcm9wcy5jYWxlbmRhckV2ZW50LmtleSk7XG4gICAgICAgIGxldCB1c2VyRnVsbE5hbWU7XG5cbiAgICAgICAgaWYgKHByb3BzLmNhbGVuZGFyRXZlbnQuaG9zdC51c2VybmFtZSA9PT0gYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUpIHtcbiAgICAgICAgICAgIHVzZXJGdWxsTmFtZSA9IHByb3BzLmNhbGVuZGFyRXZlbnQuaG9zdC5uYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXNlckZ1bGxOYW1lID0gcHJvcHMuY2FsZW5kYXJFdmVudC5hdHRlbmRlZXMuZmluZCgoYSkgPT4gYS51c2VybmFtZSA9PT0gYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUpLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRDdXJyZW50VXNlckZ1bGxOYW1lKHVzZXJGdWxsTmFtZSk7XG4gICAgICAgIHNldElzSG9zdChwcm9wcy5jYWxlbmRhckV2ZW50Lmhvc3QudXNlcm5hbWUgPT09IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lKTtcbiAgICAgICAgc2V0SXNDaGFpclBlcnNvbihwcm9wcy5jYWxlbmRhckV2ZW50LmNoYWlyUGVyc29uSWQgPT09IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWVkaWEuam9pbk1lZXRpbmcocHJvcHMuY2FsZW5kYXJFdmVudCwgcHJvcHMuc2V0dGluZ3MsIHVzZXJGdWxsTmFtZSlcbiAgICAgICAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0pPSU4gUkVTUE9OU0UgOiAnLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVBhcnRpY2lwYW50cyhyZXNwb25zZS5wYXJ0aWNpcGFudHMpO1xuICAgICAgICAgICAgICAgICAgICBzZXRSdHBDYXBhYmlsaXRpZXMocmVzcG9uc2UucnRwQ2FwYWJpbGl0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0T25sb2FkU2NyZWVuU2hhcmVEYXRhKHJlc3BvbnNlLnNoYXJlU2NyZWVuUHJvZHVjZXJEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0Um9vbVN0YXR1cyhwYXJ0aWNpcGFudHMubGVuZ3RoID4gMCA/IFN0YXR1cy5TRVNTSU9OIDogU3RhdHVzLkxPQkJZKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRSb29tU3RhdHVzKFN0YXR1cy5TWVNURU1fRVJST1IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBzZXRSb29tU3RhdHVzKFN0YXR1cy5TWVNURU1fRVJST1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5zZXRIYXNBY3RpdmVNZWV0aW5nKGZhbHNlKTtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5zZXRBY3RpdmVNZWV0aW5nS2V5KG51bGwpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIGZ1bmN0aW9uIGFkZFVzZXJUb1BhcnRpY2lwYW50cyh1c2VyKSB7XG4gICAgICAgIC8vIFR5cGljYWxseSwgYSB1c2VyIHNob3VkIG5vdCBleGlzdC4gV2UgYXJlIGVuc3VyaW5nIHRoYXQgdGhlcmUgYXJlIG5ldmVyIGR1cGxpY2F0ZXNcbiAgICAgICAgY29uc29sZS5sb2cocGFydGljaXBhbnRzKTtcbiAgICAgICAgbGV0IHBhcnRpY2lwYW50ID0gcGFydGljaXBhbnRzLmZpbmQoKHUpID0+IHUudXNlcklkID09PSB1c2VyLnVzZXJJZCk7XG4gICAgICAgIGlmIChwYXJ0aWNpcGFudCkge1xuICAgICAgICAgICAgcGFydGljaXBhbnQubmFtZSA9IHVzZXIubmFtZTtcbiAgICAgICAgICAgIHBhcnRpY2lwYW50LmF2YXRhciA9IHVzZXIuYXZhdGFyO1xuICAgICAgICAgICAgcGFydGljaXBhbnQuYXVkaW9NdXRlZCA9IHVzZXIuYXVkaW9NdXRlZDtcbiAgICAgICAgICAgIHBhcnRpY2lwYW50LnZpZGVvTXV0ZWQgPSB1c2VyLnZpZGVvTXV0ZWQ7XG4gICAgICAgICAgICBwYXJ0aWNpcGFudC5wcm9kdWNlcnMgPSB1c2VyLnByb2R1Y2VycztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnRpY2lwYW50ID0ge1xuICAgICAgICAgICAgICAgIHVzZXJJZDogdXNlci51c2VySWQsXG4gICAgICAgICAgICAgICAgbmFtZTogdXNlci5uYW1lLFxuICAgICAgICAgICAgICAgIGF2YXRhcjogdXNlci5hdmF0YXIsXG4gICAgICAgICAgICAgICAgYXVkaW9NdXRlZDogdXNlci5hdWRpb011dGVkLFxuICAgICAgICAgICAgICAgIHZpZGVvTXV0ZWQ6IHVzZXIudmlkZW9NdXRlZCxcbiAgICAgICAgICAgICAgICBwcm9kdWNlcnM6IHVzZXIucHJvZHVjZXJzXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBwYXJ0aWNpcGFudHMucHVzaChwYXJ0aWNpcGFudCk7XG4gICAgICAgICAgICBzZXRQYXJ0aWNpcGFudHMoW10uY29uY2F0KHBhcnRpY2lwYW50cykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbmdlT3RoZXJQYXJ0aWNpcGFudEFWU2V0dGluZ3MgPSAodXNlcklkLCBhdWRpb011dGVkLCB2aWRlb011dGVkKSA9PiB7XG5cbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlUGFydGljaXBhbnRzID0gKHVzZXJzKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdBTEwgVVNFUlMgcmVjZWl2ZWQgYW5kIGNyZWF0aW5nIHBhcnRpY2lwYW50cyA6ICcsIHVzZXJzKTtcbiAgICAgICAgdXNlcnMuZm9yRWFjaCgodXNlcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0FERElORyBJVEVNIFRPIFBBUlRJQ0lQQU5UUyA6ICcsIHVzZXIpO1xuICAgICAgICAgICAgYWRkVXNlclRvUGFydGljaXBhbnRzKHVzZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzZXRBbGxVc2VyUGFydGljaXBhbnRzTGVmdChmYWxzZSk7XG4gICAgICAgIGlmIChwYXJ0aWNpcGFudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHJvb21TdGF0dXMgPT09IFN0YXR1cy5MT0JCWSkge1xuICAgICAgICAgICAgICAgIHNldFJvb21TdGF0dXMoU3RhdHVzLlNFU1NJT04pO1xuICAgICAgICAgICAgICAgIHNldFNpZGVCYXJPcGVuKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmdVcCA9ICgpID0+IHtcbiAgICAgICAgc29ja2V0TWFuYWdlci5sZWF2ZU1lZXRpbmcocHJvcHMuY2FsZW5kYXJFdmVudC5pZCk7XG4gICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5zZXRIYXNBY3RpdmVNZWV0aW5nKGZhbHNlKTtcbiAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLnJlbW92ZUxvYWRlZEdyYXBoKCd3aW5kb3cnKTtcbiAgICAgICAgc2V0U2lkZUJhck9wZW4oZmFsc2UpO1xuICAgICAgICBzZXRTaWRlQmFyVGFiKCcnKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZW5kU2Vzc2lvbiA9ICgpID0+IHtcbiAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLm9wZW5Db25maXJtRGlhbG9nKFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGVuZCB0aGUgY3VycmVudCBzZXNzaW9uP1wiLCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgc29ja2V0TWFuYWdlci5lbmRTZXNzaW9uKHByb3BzLmNhbGVuZGFyRXZlbnQuaWQpO1xuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5zZXRIYXNBY3RpdmVNZWV0aW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuc2V0QWN0aXZlTWVldGluZ0tleShudWxsKTtcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIucmVtb3ZlTG9hZGVkR3JhcGgoJ3dpbmRvdycpO1xuICAgICAgICAgICAgICAgIHNldFNpZGVCYXJPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBzZXRTaWRlQmFyVGFiKCcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGVtaXRTeXN0ZW1FdmVudCA9IChldmVudFR5cGUsIGRhdGEsIHRvUGFydGljaXBhbnRJZHMgPSBudWxsKSA9PiB7XG4gICAgICAgIGxldCBwYXJ0aWNpcGFudElkcyA9IFtdO1xuICAgICAgICBpZiAoIXRvUGFydGljaXBhbnRJZHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFydGljaXBhbnQgb2YgcGFydGljaXBhbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnRpY2lwYW50LnVzZXJJZCAhPT0gYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRJZHMucHVzaChwYXJ0aWNpcGFudC51c2VySWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SWRzID0gcGFydGljaXBhbnRJZHMuY29uY2F0KHRvUGFydGljaXBhbnRJZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuU1lTVEVNX0VWRU5ULCB7XG4gICAgICAgICAgICBzeXN0ZW1FdmVudFR5cGU6IGV2ZW50VHlwZSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHBhcnRpY2lwYW50SWRzLFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlY29yZE1lZXRpbmcgPSAoKSA9PiB7XG4gICAgICAgIG1lZGlhUmVjb3JkZXIuaW5pdChwcm9wcy5jYWxlbmRhckV2ZW50LmlkLCBwcm9wcy5jYWxlbmRhckV2ZW50LnRpdGxlKTtcbiAgICAgICAgc2V0SXNSZWNvcmRpbmcodHJ1ZSk7XG4gICAgICAgIGVtaXRTeXN0ZW1FdmVudCgnTUVFVElOR19SRUNPUkRJTkcnLCB7XG4gICAgICAgICAgICByZWNvcmRpbmc6IHRydWUsXG4gICAgICAgICAgICB1c2VySWQ6IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lXG4gICAgICAgIH0pO1xuXG4gICAgICAgIG1lZGlhUmVjb3JkZXIucmVjb3JkTWVldGluZygpO1xuICAgIH07XG5cbiAgICBjb25zdCBzdG9wUmVjb3JkaW5nTWVldGluZyA9IChwdWJsaXNoID0gdHJ1ZSkgPT4ge1xuICAgICAgICBzZXRJc1JlY29yZGluZyhmYWxzZSk7XG5cbiAgICAgICAgaWYgKHB1Ymxpc2gpIHtcbiAgICAgICAgICAgIGVtaXRTeXN0ZW1FdmVudCgnTUVFVElOR19SRUNPUkRJTkcnLCB7XG4gICAgICAgICAgICAgICAgcmVjb3JkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB1c2VySWQ6IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lZGlhUmVjb3JkZXIuc3RvcFJlY29yZGluZ01lZXRpbmcoKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTJlMmUyJyxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnXG4gICAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J3JvdyBmbGV4LW5vd3JhcCBuby1tYXJnaW4gbm8tcGFkZGluZyB3LTEwMCBoLTEwMCd9PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnY29sIG5vLW1hcmdpbiBuby1wYWRkaW5nJ30gc3R5bGU9e3ttaW5XaWR0aDogJzI4MHB4J319PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J3JvdyBuby1tYXJnaW4gbm8tcGFkZGluZyB3LTEwMCBoLTEwMCd9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnODBweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkICNlMmUyZTInLFxuICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2xiYXIgZXZlbnRIYW5kbGVyPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTXV0ZVZpZGVvOiAobXV0ZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZpZGVvTXV0ZWQobXV0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk11dGVBdWRpbzogKG11dGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBdWRpb011dGVkKG11dGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kQ2FsbDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZ1VwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFNlc3Npb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFNlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NoYXQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoQ2hhdHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1Blb3BsZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2lkZUJhclRhYignUGVvcGxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaWRlQmFyT3Blbih0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVTY3JlZW46ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXJ0U2NyZWVuU2hhcmluZyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFNoYXJlU2NyZWVuOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTY3JlZW5TaGFyZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhcnRTY3JlZW5TaGFyaW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd01pbnV0ZXM6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXJ0U2hvd2luZ01pbnV0ZXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVNaW51dGVzOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNaW51dGVzU2hvd24oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhcnRTaG93aW5nTWludXRlcyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVNaW51dGVzOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmNSb29tV29ya3NwYWNlUmVmLmN1cnJlbnQgJiYgdmNSb29tV29ya3NwYWNlUmVmLmN1cnJlbnQuc2F2ZU1pbnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y1Jvb21Xb3Jrc3BhY2VSZWYuY3VycmVudC5zYXZlTWludXRlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRNZWV0aW5nOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRNZWV0aW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BSZWNvcmRpbmc6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BSZWNvcmRpbmdNZWV0aW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlSGFuZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SGFuZFJhaXNlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ZXJIYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRIYW5kUmFpc2VkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzVW5yZWFkQ2hhdHM9e2hhc1VucmVhZENoYXRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50cz17cGFydGljaXBhbnRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRSYWlzZWQ9e2hhbmRSYWlzZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9EaXNhYmxlZD17dmlkZW9EaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0Rpc2FibGVkPXthdWRpb0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvTXV0ZWQ9e3ZpZGVvTXV0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9NdXRlZD17YXVkaW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5U3RhdGU9e2Rpc3BsYXlTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JlZW5TaGFyZWQ9e3NjcmVlblNoYXJlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW51dGVzU2hvd249e21pbnV0ZXNTaG93bn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb29tU3RhdHVzPXtyb29tU3RhdHVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSG9zdD17cHJvcHMuY2FsZW5kYXJFdmVudC5ob3N0LnVzZXJuYW1lID09PSBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUGVybWl0PXshcHJvcHMuY2FsZW5kYXJFdmVudC5ob3N0LmFza1RvSm9pbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb21lb25lU2hhcmluZz17c29tZW9uZVNoYXJpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWNvcmRpbmc9e2lzUmVjb3JkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlZEhhbmRzPXtyYWlzZWRIYW5kc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0F1ZGlvRGV2aWNlQ29ubmVjdGVkPXtwcm9wcy5zZXR0aW5ncy5pc0F1ZGlvRGV2aWNlQ29ubmVjdGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmlkZW9EZXZpY2VDb25uZWN0ZWQ9e3Byb3BzLnNldHRpbmdzLmlzVmlkZW9EZXZpY2VDb25uZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVldGluZ0lkPXtwcm9wcy5jYWxlbmRhckV2ZW50LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb29tU3RhdHVzID09PSBTdGF0dXMuU1lTVEVNX0VSUk9SICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYigyMzUsIDYzLCAzMyknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMzJweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMjRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0gY2xhc3NOYW1lPXsnY2VudGVyZWQtZmxleC1ib3gnfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1NZU1RFTV9FUlJPUl9NRVNTQUdFfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb21TdGF0dXMgPT09IFN0YXR1cy5DT05ORUNUSU9OX0VSUk9SICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYigyMzUsIDYzLCAzMyknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMzJweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMjRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0gY2xhc3NOYW1lPXsnY2VudGVyZWQtZmxleC1ib3gnfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtTWVNURU1fRVJST1JfTUVTU0FHRX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRwQ2FwYWJpbGl0aWVzICYmIHBhcnRpY2lwYW50cyAmJiBjdXJyZW50VXNlckZ1bGxOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHJvb21TdGF0dXMgPT09IFN0YXR1cy5TRVNTSU9OIHx8IHJvb21TdGF0dXMgPT09IFN0YXR1cy5MT0JCWSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VkNSb29tV29ya3NwYWNlIHJlZj17dmNSb29tV29ya3NwYWNlUmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRzPXtwYXJ0aWNpcGFudHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlPXttZWV0aW5nUGFydGljaXBhbnRHcmlkTW9kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZD17cHJvcHMudmlld0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9NdXRlZD17YXVkaW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvTXV0ZWQ9e3ZpZGVvTXV0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWV0aW5nVGl0bGU9e3Byb3BzLmNhbGVuZGFyRXZlbnQudGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudEtleT17cHJvcHMuY2FsZW5kYXJFdmVudC5rZXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW51dGVzRG9jdW1lbnRJZD17cHJvcHMuY2FsZW5kYXJFdmVudC5taW51dGVzRG9jdW1lbnRJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZXRpbmdJZD17cHJvcHMuY2FsZW5kYXJFdmVudC5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRVc2VyRnVsbE5hbWU9e2N1cnJlbnRVc2VyRnVsbE5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkdyaWRTZXR1cD17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vc2V0U2lkZUJhclRhYignUGVvcGxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZUJhclRhYj17c2lkZUJhclRhYn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb21TdGF0dXM9e3Jvb21TdGF0dXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0hvc3Q9e2lzSG9zdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hhaXJQZXJzb249e2lzQ2hhaXJQZXJzb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFNjcmVlblNoYXJpbmc9e3N0YXJ0U2NyZWVuU2hhcmluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJpbmdIYW5kbGVyPXsoc29tZW9uZVNoYXJpbmcpID0+IHNldFNvbWVvbmVTaGFyaW5nKHNvbWVvbmVTaGFyaW5nKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU3RvcFNoYXJpbmc9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTY3JlZW5TaGFyZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXJ0U2NyZWVuU2hhcmluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TdGFydFNoYXJpbmc9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTY3JlZW5TaGFyZWQodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGFydFNjcmVlblNoYXJpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0U2hvd2luZ01pbnV0ZXM9e3N0YXJ0U2hvd2luZ01pbnV0ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblN0YXJ0U2hvd2luZ01pbnV0ZXM9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNaW51dGVzU2hvd24odHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhcnRTaG93aW5nTWludXRlcyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TdG9wU2hvd2luZ01pbnV0ZXM9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNaW51dGVzU2hvd24oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXJ0U2hvd2luZ01pbnV0ZXMoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZXNTaG93bj17bWludXRlc1Nob3dufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1Blcm1pdD17YXV0b1Blcm1pdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0cENhcGFiaWxpdGllcz17cnRwQ2FwYWJpbGl0aWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuU2hhcmVkPXtzY3JlZW5TaGFyZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5U3RhdGU9e2Rpc3BsYXlTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubG9hZFNjcmVlblNoYXJlRGF0YT17b25sb2FkU2NyZWVuU2hhcmVEYXRhfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsVXNlclBhcnRpY2lwYW50c0xlZnQ9e2FsbFVzZXJQYXJ0aWNpcGFudHNMZWZ0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25BdWRpb0RldmljZUNoYW5nZT17KGRldmljZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEF1ZGlvRGlzYWJsZWQoVXRpbHMuaXNOdWxsKGRldmljZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSG9zdEF1ZGlvTXV0ZT17KHBhcnRpY2lwYW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlT3RoZXJQYXJ0aWNpcGFudEFWU2V0dGluZ3MocGFydGljaXBhbnQudXNlcklkLCB0cnVlLCBwYXJ0aWNpcGFudC52aWRlb011dGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkhvc3RWaWRlb011dGU9eyhwYXJ0aWNpcGFudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZU90aGVyUGFydGljaXBhbnRBVlNldHRpbmdzKHBhcnRpY2lwYW50LnVzZXJJZCwgcGFydGljaXBhbnQuYXVkaW9NdXRlZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc2lkZUJhck9wZW4gJiYgc2lkZUJhclRhYiAmJiByb29tU3RhdHVzID09PSBTdGF0dXMuU0VTU0lPTiAmJlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17ZGlzcGxheVN0YXRlID09PSAnTUFYSU1JWkVEJyA/ICdjbG9zYWJsZS1wYW5lbC1jb250YWluZXInIDogJ2Nsb3NhYmxlLXBhbmVsLWNvbnRhaW5lci1waW5uZWQnfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDbG9zYWJsZVBhbmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VIYW5kbGVyPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaWRlQmFyT3BlbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNpZGVCYXJUYWIobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17c2lkZUJhclRhYn1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2lkZUJhckNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVldGluZ0NoYXQ9e21lZXRpbmdDaGF0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0hvc3Q9e2lzSG9zdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDaGFpclBlcnNvbj17aXNDaGFpclBlcnNvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiPXtzaWRlQmFyVGFifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWV0aW5nSWQ9e3Byb3BzLmNhbGVuZGFyRXZlbnQuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50cz17cGFydGljaXBhbnRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkhvc3RBdWRpb011dGU9eyhwYXJ0aWNpcGFudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlT3RoZXJQYXJ0aWNpcGFudEFWU2V0dGluZ3MocGFydGljaXBhbnQudXNlcklkLCB0cnVlLCBwYXJ0aWNpcGFudC52aWRlb011dGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0VmlkZW9NdXRlPXsocGFydGljaXBhbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZU90aGVyUGFydGljaXBhbnRBVlNldHRpbmdzKHBhcnRpY2lwYW50LnVzZXJJZCwgcGFydGljaXBhbnQuYXVkaW9NdXRlZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQ2xvc2FibGVQYW5lbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgcmlnaHQ6ICc0OHB4JyxcbiAgICAgICAgICAgICAgICBib3R0b206ICc0OHB4J1xuICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgPEFsZXJ0XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9eydpbmZvJ31cbiAgICAgICAgICAgICAgICAgICAgc2hvdz17YWN0aXZpdHlNZXNzYWdlICE9PSBudWxsfVxuICAgICAgICAgICAgICAgICAgICBmYWRlPXt0cnVlfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3tjb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSd9fT57YWN0aXZpdHlNZXNzYWdlfTwvcD5cbiAgICAgICAgICAgICAgICA8L0FsZXJ0PlxuICAgICAgICAgICAgICAgIDxBbGVydFxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PXsnaW5mbyd9XG4gICAgICAgICAgICAgICAgICAgIHNob3c9e2NoYXRNZXNzYWdlICE9PSBudWxsfVxuICAgICAgICAgICAgICAgICAgICBmYWRlPXt0cnVlfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydyb3cnfSBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkIHdoaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdCb3R0b206ICc4cHgnXG4gICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydjb2wnfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J3Jvdyd9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydDSEFUX0JVQkJMRSd9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnY29sJ30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17e2NvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpJ319PntjaGF0U2VuZGVyfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsncm93J30gc3R5bGU9e3ttYXJnaW5Ub3A6ICc4cHgnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J2NvbCd9PjxwIHN0eWxlPXt7Y29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCknfX0+e2NoYXRNZXNzYWdlfTwvcD48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9BbGVydD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgIHsvKkhpZGRlbiB2aWRlbyB0byBjYXB0dXJlIHJlY29yZGluZ3MqL31cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7ZGlzcGxheTogJ25vbmUnfX0+XG4gICAgICAgICAgICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuPXtmYWxzZX0gbXV0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlzSW5saW5lIGF1dG9QbGF5IHJlZj17cmVjb3JkUmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzIwMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcyMDBweCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICApXG4gICAgICAgIDtcbn0pKTtcblxuZXhwb3J0IGRlZmF1bHQgVHJhaW5pbmdSb29tO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQyxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDRCxJ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
774
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX0ljb24iLCJfQXBwbGljYXRpb25NYW5hZ2VyIiwiX1Rvb2xiYXIiLCJfVkNSb29tIiwiX1ZDUm9vbVdvcmtzcGFjZSIsIl9WQ0V2ZW50VHlwZSIsIl9BbGVydCIsIl9WQ0V2ZW50TWFuYWdlciIsIl9Tb2NrZXRNYW5hZ2VyIiwiX0Nsb3NhYmxlUGFuZWwiLCJfU2lkZUJhckNvbnRlbnQiLCJfdXNlQ29udGFpbmVyV2lkdGgiLCJfVkNSb29tUmVjb3JkZXIiLCJfUmVzdFV0aWxzIiwiX01lZGlhIiwiX09ic2VydmFibGUiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJTdGF0dXMiLCJMT0JCWSIsIlNFU1NJT04iLCJTRVNTSU9OX0VOREVEIiwiU1lTVEVNX0VSUk9SIiwiQ09OTkVDVElPTl9FUlJPUiIsIlNUUkVBTV9FUlJPUiIsImxvY2F0aW9uIiwid2luZG93IiwicHJvdG9jb2wiLCJob3N0bmFtZSIsIlRyYWluaW5nUm9vbSIsIlJlYWN0IiwibWVtbyIsImZvcndhcmRSZWYiLCJwcm9wcyIsInJlZiIsInJlY29yZFJlZiIsInVzZVJlZiIsImpvaW5lZFJlZiIsImhhc1VucmVhZENoYXRzIiwic2V0SGFzVW5yZWFkQ2hhdHMiLCJ1c2VTdGF0ZSIsInBhcnRpY2lwYW50cyIsInNldFBhcnRpY2lwYW50cyIsImhhbmRSYWlzZWQiLCJzZXRIYW5kUmFpc2VkIiwiaXNSZWNvcmRpbmciLCJzZXRJc1JlY29yZGluZyIsInZpZGVvRGlzYWJsZWQiLCJhdWRpb0Rpc2FibGVkIiwic2V0QXVkaW9EaXNhYmxlZCIsInZpZGVvTXV0ZWQiLCJzZXRWaWRlb011dGVkIiwiYXVkaW9NdXRlZCIsInNldEF1ZGlvTXV0ZWQiLCJkaXNwbGF5U3RhdGUiLCJzZXREaXNwbGF5U3RhdGUiLCJyb29tU3RhdHVzIiwic2V0Um9vbVN0YXR1cyIsInNvbWVvbmVTaGFyaW5nIiwic2V0U29tZW9uZVNoYXJpbmciLCJzaWRlQmFyT3BlbiIsInNldFNpZGVCYXJPcGVuIiwic2lkZUJhclRhYiIsInNldFNpZGVCYXJUYWIiLCJhbGxVc2VyUGFydGljaXBhbnRzTGVmdCIsInNldEFsbFVzZXJQYXJ0aWNpcGFudHNMZWZ0IiwibG9iYnlXYWl0aW5nTGlzdCIsInNldExvYmJ5V2FpdGluZ0xpc3QiLCJpc0hvc3QiLCJzZXRJc0hvc3QiLCJpc0NoYWlyUGVyc29uIiwic2V0SXNDaGFpclBlcnNvbiIsIm1lZXRpbmdQYXJ0aWNpcGFudEdyaWRNb2RlIiwic2V0TWVldGluZ1BhcnRpY2lwYW50R3JpZE1vZGUiLCJhdXRvUGVybWl0Iiwic2V0QXV0b1Blcm1pdCIsImNhbGVuZGFyRXZlbnQiLCJhc2tUb0pvaW4iLCJydHBDYXBhYmlsaXRpZXMiLCJzZXRSdHBDYXBhYmlsaXRpZXMiLCJhY3Rpdml0eU1lc3NhZ2UiLCJzZXRBY3Rpdml0eU1lc3NhZ2UiLCJyZWNvbm5lY3RFcnJvciIsInNldFJlY29ubmVjdEVycm9yIiwicmVjb25uZWN0aW5nIiwic2V0UmVjb25uZWN0aW5nIiwib25sb2FkU2NyZWVuU2hhcmVEYXRhIiwic2V0T25sb2FkU2NyZWVuU2hhcmVEYXRhIiwiY2hhdE1lc3NhZ2UiLCJzZXRDaGF0TWVzc2FnZSIsImNoYXRTZW5kZXIiLCJzZXRDaGF0U2VuZGVyIiwiY3VycmVudFVzZXJGdWxsTmFtZSIsInNldEN1cnJlbnRVc2VyRnVsbE5hbWUiLCJldmVudEhhbmRsZXIiLCJtZWV0aW5nQ2hhdCIsInNldE1lZXRpbmdDaGF0Iiwic2NyZWVuU2hhcmVkIiwic2V0U2NyZWVuU2hhcmVkIiwic3RhcnRTY3JlZW5TaGFyaW5nIiwic2V0U3RhcnRTY3JlZW5TaGFyaW5nIiwicmFpc2VkSGFuZHMiLCJzZXRSYWlzZWRIYW5kcyIsIm1pbnV0ZXNTaG93biIsInNldE1pbnV0ZXNTaG93biIsInN0YXJ0U2hvd2luZ01pbnV0ZXMiLCJzZXRTdGFydFNob3dpbmdNaW51dGVzIiwidmNSb29tV29ya3NwYWNlUmVmIiwicm9vdFJlZiIsInJvb3RXaWR0aCIsInVzZUNvbnRhaW5lcldpZHRoIiwibmFycm93TGF5b3V0IiwiYXBpIiwibG9hZENoYXRzIiwiY29uc29sZSIsImxvZyIsImZldGNoQ2hhdHMiLCJoYW5kbGVyIiwiaWQiLCJvbiIsImV2ZW50VHlwZSIsImJlIiwiVkNFdmVudFR5cGUiLCJSRVFVRVNUX1RPX0pPSU5fTUVFVElORyIsIlVTRVJfSk9JTkVEIiwiYWRkVXNlciIsInBheWxvYWQiLCJVU0VSX0xFRlRfTUVFVElORyIsInJlbW92ZVVzZXIiLCJTT0NLRVRfRElTQ09OTkVDVCIsImN1cnJlbnQiLCJTT0NLRVRfQ09OTkVDVCIsInJlc3luY1Jvc3RlciIsIlBFRVJfRElTQ09OTkVDVCIsIkNSRUFURV9UUkFOU1BPUlRfRkFJTEVEIiwiQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQiLCJvbkFWU2V0dGluZ3NDaGFuZ2UiLCJTWVNURU1fRVZFTlQiLCJSQUlTRV9IQU5EIiwib25SYWlzZUhhbmQiLCJMT1dFUl9IQU5EIiwib25Mb3dlckhhbmQiLCJFTkRfU0VTU0lPTiIsImhhbmdVcCIsIlNIQVJJTkdfU1RPUFBFRCIsIkNIQVRfTUVTU0FHRSIsIm9uTWVzc2FnZSIsIkNPTlNVTUVSX1RSQU5TUE9SVF9GQUlMRUQiLCJTWVNURU1fQUxFUlQiLCJtZXNzYWdlIiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiZ2V0VXNlckRldGFpbHMiLCJ1c2VybmFtZSIsInBhcnRpY2lwYW50IiwiaGFuZGxlTWVzc2FnZUFycml2ZWQiLCJuYW1lIiwiY29udGVudCIsInRyaW0iLCJ1c2VySWQiLCJjb25jYXQiLCJpbmRleCIsImZpbmRJbmRleCIsInAiLCJzcGxpY2UiLCJ1c2VFZmZlY3QiLCJzZW5kUmVxdWVzdCIsImdldENvbnRleHRSb290IiwicmVzcG9uc2UiLCJwcmV2IiwibWFwIiwidmNFdmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJlbWl0QVZTZXR0aW5nc0NoYW5nZSIsInNvY2tldE1hbmFnZXIiLCJlbWl0RXZlbnQiLCJtZWV0aW5nSWQiLCJjYXRjaCIsImVycm9yIiwiZXZlbnQiLCJtZXNzYWdlVGltZW91dCIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJhZGRVc2VyVG9QYXJ0aWNpcGFudHMiLCJ1c2VyIiwicmVjb25jaWxlUGFydGljaXBhbnRzIiwidXNlcnMiLCJsaXN0IiwidSIsImF2YXRhciIsInByb2R1Y2VycyIsIkFMTF9VU0VSUyIsInRoZW4iLCJkYXRhIiwidXNlcnNJblJvb20iLCJoYW5kbGVTaWRlYmFyVG9nZ2xlIiwicGFwZXIiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiZGV0YWlsIiwib3BlbiIsInN0eWxlIiwibWFyZ2luIiwiaGFuZGxlIiwic2V0dGluZ3MiLCJhdWRpb09uIiwidmlkZW9PbiIsIlV0aWxzIiwiaXNOdWxsIiwicm9vbUlkIiwicmVtb3ZlU3Vic2NyaXB0aW9ucyIsImFkZEFwcGxpY2F0aW9uQ29udGV4dFN1YnNjcmlwdGlvbiIsIm9uQ29udGV4dENoYW5nZSIsImNvbnRleHQiLCJuZXdWYWx1ZXMiLCJmaW5kIiwia2V5Iiwid2luZG93RGlzcGxheVN0YXRlIiwiaW5pdGlhbENvbnRleHQiLCJhZGRTdWJzY3JpcHRpb25zIiwiYWRkRXZlbnRMaXN0ZW5lciIsInNldEhhc0FjdGl2ZU1lZXRpbmciLCJzZXRBY3RpdmVNZWV0aW5nS2V5IiwiZXZlbnRNYW5hZ2VyIiwicmVtb3ZlQXBwbGljYXRpb25Db250ZXh0U3Vic2NyaXB0aW9ucyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYXNBY3RpdmVNZWV0aW5nIiwibGVhdmVNZWV0aW5nIiwidXNlckZ1bGxOYW1lIiwiaG9zdCIsIm1lIiwiYXR0ZW5kZWVzIiwiYSIsImNoYWlyUGVyc29uSWQiLCJtZWRpYSIsImpvaW5NZWV0aW5nIiwiY3JlYXRlUGFydGljaXBhbnRzIiwic2hhcmVTY3JlZW5Qcm9kdWNlckRhdGEiLCJjaGFuZ2VPdGhlclBhcnRpY2lwYW50QVZTZXR0aW5ncyIsInJlbW92ZUxvYWRlZEdyYXBoIiwiZW5kU2Vzc2lvbiIsIm9wZW5Db25maXJtRGlhbG9nIiwicmVzdWx0IiwiZW1pdFN5c3RlbUV2ZW50IiwidG9QYXJ0aWNpcGFudElkcyIsInVuZGVmaW5lZCIsInBhcnRpY2lwYW50SWRzIiwic3lzdGVtRXZlbnRUeXBlIiwicmVjaXBpZW50cyIsInJlY29yZE1lZXRpbmciLCJtZWRpYVJlY29yZGVyIiwiaW5pdCIsInRpdGxlIiwicmVjb3JkaW5nIiwic3RvcFJlY29yZGluZ01lZXRpbmciLCJwdWJsaXNoIiwiY3JlYXRlRWxlbWVudCIsIndpZHRoIiwiaGVpZ2h0IiwiYm9yZGVyIiwiYm9yZGVyUmFkaXVzIiwicG9zaXRpb24iLCJjbGFzc05hbWUiLCJtaW5XaWR0aCIsImJvcmRlckJvdHRvbSIsIm9uTXV0ZVZpZGVvIiwibXV0ZWQiLCJvbk11dGVBdWRpbyIsImVuZENhbGwiLCJzaG93Q2hhdCIsInNob3dQZW9wbGUiLCJzaGFyZVNjcmVlbiIsInN0b3BTaGFyZVNjcmVlbiIsInNob3dNaW51dGVzIiwiaGlkZU1pbnV0ZXMiLCJzYXZlTWludXRlcyIsInN0b3BSZWNvcmRpbmciLCJyYWlzZUhhbmQiLCJsb3dlckhhbmQiLCJpc0F1ZGlvRGV2aWNlQ29ubmVjdGVkIiwiaXNWaWRlb0RldmljZUNvbm5lY3RlZCIsImNvbG9yIiwicGFkZGluZyIsImZvbnRTaXplIiwiU1lTVEVNX0VSUk9SX01FU1NBR0UiLCJtb2RlIiwidmlld0lkIiwibWVldGluZ1RpdGxlIiwiZXZlbnRLZXkiLCJtaW51dGVzRG9jdW1lbnRJZCIsIm9uR3JpZFNldHVwIiwic2hhcmluZ0hhbmRsZXIiLCJvblN0b3BTaGFyaW5nIiwib25TdGFydFNoYXJpbmciLCJvblN0YXJ0U2hvd2luZ01pbnV0ZXMiLCJvblN0b3BTaG93aW5nTWludXRlcyIsIm9uQXVkaW9EZXZpY2VDaGFuZ2UiLCJkZXZpY2UiLCJvbkhvc3RBdWRpb011dGUiLCJvbkhvc3RWaWRlb011dGUiLCJjbG9zZUhhbmRsZXIiLCJ0YWIiLCJyaWdodCIsImJvdHRvbSIsInZhcmlhbnQiLCJzaG93IiwiZmFkZSIsImRpc21pc3NpYmxlIiwib25DbG9zZSIsInBhZGRpbmdCb3R0b20iLCJtYXJnaW5Ub3AiLCJGcmFnbWVudCIsImRpc3BsYXkiLCJoaWRkZW4iLCJwbGF5c0lubGluZSIsImF1dG9QbGF5IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21lZGlhL1RyYWluaW5nUm9vbS5qc3giXSwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IFJlYWN0LCB7RnJhZ21lbnQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL1V0aWxzJztcbmltcG9ydCAnLi9WaWRlby5jc3MnO1xuaW1wb3J0IEljb24gZnJvbSAnLi4vSWNvbic7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL0FwcGxpY2F0aW9uTWFuYWdlcic7XG5pbXBvcnQgVG9vbGJhciBmcm9tICcuL1Rvb2xiYXInO1xuaW1wb3J0IHtTWVNURU1fRVJST1JfTUVTU0FHRX0gZnJvbSAnLi9WQ1Jvb20nO1xuaW1wb3J0IFZDUm9vbVdvcmtzcGFjZSBmcm9tICcuL1ZDUm9vbVdvcmtzcGFjZSc7XG5pbXBvcnQge1ZDRXZlbnRUeXBlfSBmcm9tICcuL1ZDRXZlbnRUeXBlJztcbmltcG9ydCBBbGVydCBmcm9tICdyZWFjdC1ib290c3RyYXAvQWxlcnQnO1xuaW1wb3J0IHZjRXZlbnRNYW5hZ2VyIGZyb20gJy4vVkNFdmVudE1hbmFnZXInO1xuaW1wb3J0IHNvY2tldE1hbmFnZXIgZnJvbSAnLi4vU29ja2V0TWFuYWdlcic7XG5pbXBvcnQgQ2xvc2FibGVQYW5lbCBmcm9tICcuL0Nsb3NhYmxlUGFuZWwnO1xuaW1wb3J0IFNpZGVCYXJDb250ZW50IGZyb20gJy4vU2lkZUJhckNvbnRlbnQnO1xuaW1wb3J0IHVzZUNvbnRhaW5lcldpZHRoIGZyb20gJy4uLy4uL2hvb2tzL3VzZUNvbnRhaW5lcldpZHRoJztcbmltcG9ydCBtZWRpYVJlY29yZGVyIGZyb20gJy4vVkNSb29tUmVjb3JkZXInO1xuaW1wb3J0IHtzZW5kUmVxdWVzdH0gZnJvbSAnLi4vLi4vUmVzdFV0aWxzJztcbmltcG9ydCBtZWRpYSBmcm9tICcuLi8uLi9qcy9NZWRpYSc7XG5pbXBvcnQgZXZlbnRNYW5hZ2VyIGZyb20gJy4uLy4uL2V2ZW50L09ic2VydmFibGUnO1xuXG5jb25zdCBTdGF0dXMgPSB7XG4gICAgTE9CQlk6ICdMT0JCWScsXG4gICAgU0VTU0lPTjogJ1NFU1NJT04nLFxuICAgIFNFU1NJT05fRU5ERUQ6ICdTRVNTSU9OX0VOREVEJyxcbiAgICBTWVNURU1fRVJST1I6ICdTWVNURU1fRVJST1InLFxuICAgIENPTk5FQ1RJT05fRVJST1I6ICdDT05ORUNUSU9OX0VSUk9SJyxcbiAgICBTVFJFQU1fRVJST1I6ICdTVFJFQU1fRVJST1InXG59O1xuXG5jb25zdCBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG5jb25zdCBUcmFpbmluZ1Jvb20gPSBSZWFjdC5tZW1vKFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcblxuICAgIGNvbnN0IHJlY29yZFJlZiA9IHVzZVJlZigpO1xuICAgIC8vIFRydWUgb25jZSB3ZSd2ZSBzdWNjZXNzZnVsbHkgam9pbmVkIOKAlCBsZXRzIFNPQ0tFVF9DT05ORUNUIGRpc3Rpbmd1aXNoIGEgcmVjb25uZWN0IGZyb20gdGhlXG4gICAgLy8gaW5pdGlhbCBjb25uZWN0IHNvIHdlIG9ubHkgcmVzeW5jIHRoZSByb3N0ZXIgb24gYW4gYWN0dWFsIHJlY29ubmVjdC5cbiAgICBjb25zdCBqb2luZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IFtoYXNVbnJlYWRDaGF0cywgc2V0SGFzVW5yZWFkQ2hhdHNdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW3BhcnRpY2lwYW50cywgc2V0UGFydGljaXBhbnRzXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbaGFuZFJhaXNlZCwgc2V0SGFuZFJhaXNlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2lzUmVjb3JkaW5nLCBzZXRJc1JlY29yZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3ZpZGVvRGlzYWJsZWRdID0gdXNlU3RhdGUocHJvcHMudmlkZW9EaXNhYmxlZCk7XG4gICAgY29uc3QgW2F1ZGlvRGlzYWJsZWQsIHNldEF1ZGlvRGlzYWJsZWRdID0gdXNlU3RhdGUocHJvcHMuYXVkaW9EaXNhYmxlZCk7XG4gICAgY29uc3QgW3ZpZGVvTXV0ZWQsIHNldFZpZGVvTXV0ZWRdID0gdXNlU3RhdGUodHJ1ZSk7XG4gICAgY29uc3QgW2F1ZGlvTXV0ZWQsIHNldEF1ZGlvTXV0ZWRdID0gdXNlU3RhdGUodHJ1ZSk7XG4gICAgY29uc3QgW2Rpc3BsYXlTdGF0ZSwgc2V0RGlzcGxheVN0YXRlXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtyb29tU3RhdHVzLCBzZXRSb29tU3RhdHVzXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtzb21lb25lU2hhcmluZywgc2V0U29tZW9uZVNoYXJpbmddID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW3NpZGVCYXJPcGVuLCBzZXRTaWRlQmFyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3NpZGVCYXJUYWIsIHNldFNpZGVCYXJUYWJdID0gdXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFthbGxVc2VyUGFydGljaXBhbnRzTGVmdCwgc2V0QWxsVXNlclBhcnRpY2lwYW50c0xlZnRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtsb2JieVdhaXRpbmdMaXN0LCBzZXRMb2JieVdhaXRpbmdMaXN0XSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbaXNIb3N0LCBzZXRJc0hvc3RdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtpc0NoYWlyUGVyc29uLCBzZXRJc0NoYWlyUGVyc29uXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbbWVldGluZ1BhcnRpY2lwYW50R3JpZE1vZGUsIHNldE1lZXRpbmdQYXJ0aWNpcGFudEdyaWRNb2RlXSA9IHVzZVN0YXRlKCdERUZBVUxUJyk7XG4gICAgY29uc3QgW2F1dG9QZXJtaXQsIHNldEF1dG9QZXJtaXRdID0gdXNlU3RhdGUoIXByb3BzLmNhbGVuZGFyRXZlbnQuYXNrVG9Kb2luKTtcbiAgICBjb25zdCBbcnRwQ2FwYWJpbGl0aWVzLCBzZXRSdHBDYXBhYmlsaXRpZXNdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2FjdGl2aXR5TWVzc2FnZSwgc2V0QWN0aXZpdHlNZXNzYWdlXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIC8vIFBlcnNpc3RlbnQsIGFjdGlvbmFibGUgZXJyb3IgYmFubmVyIChlLmcuIG1lZGlhIHJlY29ubmVjdGlvbiBnYXZlIHVwKS5cbiAgICBjb25zdCBbcmVjb25uZWN0RXJyb3IsIHNldFJlY29ubmVjdEVycm9yXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIC8vIFRyYW5zaWVudCBcInNvY2tldCBkcm9wcGVkLCByZWNvbm5lY3RpbmdcIiBiYW5uZXIgKGNsZWFyZWQgb24gcmVjb25uZWN0KS5cbiAgICBjb25zdCBbcmVjb25uZWN0aW5nLCBzZXRSZWNvbm5lY3RpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtvbmxvYWRTY3JlZW5TaGFyZURhdGEsIHNldE9ubG9hZFNjcmVlblNoYXJlRGF0YV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbY2hhdE1lc3NhZ2UsIHNldENoYXRNZXNzYWdlXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtjaGF0U2VuZGVyLCBzZXRDaGF0U2VuZGVyXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtjdXJyZW50VXNlckZ1bGxOYW1lLCBzZXRDdXJyZW50VXNlckZ1bGxOYW1lXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtldmVudEhhbmRsZXJdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFttZWV0aW5nQ2hhdCwgc2V0TWVldGluZ0NoYXRdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW3NjcmVlblNoYXJlZCwgc2V0U2NyZWVuU2hhcmVkXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtzdGFydFNjcmVlblNoYXJpbmcsIHNldFN0YXJ0U2NyZWVuU2hhcmluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3JhaXNlZEhhbmRzLCBzZXRSYWlzZWRIYW5kc10gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW21pbnV0ZXNTaG93biwgc2V0TWludXRlc1Nob3duXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbc3RhcnRTaG93aW5nTWludXRlcywgc2V0U3RhcnRTaG93aW5nTWludXRlc10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgdmNSb29tV29ya3NwYWNlUmVmID0gdXNlUmVmKCk7XG5cbiAgICAvLyBMYXlvdXQgcmVzcG9uZHMgdG8gdGhlIHJvb20ncyBvd24gd2lkdGggKGl0IGxpdmVzIGluc2lkZSBXaW5kb3dWaWV3UG9ydCxcbiAgICAvLyBzbyB2aWV3cG9ydCBicmVha3BvaW50cyBhcmUgd3JvbmcpLiBCZWxvdyB0aGlzIHRoZSBzaWRlYmFyIG92ZXJsYXlzIHRoZVxuICAgIC8vIHdvcmtzcGFjZSBpbnN0ZWFkIG9mIGRvY2tpbmcgYmVzaWRlIGl0ICh3aGljaCBzcXVhc2hlZCB0aGUgdmlkZW8pLlxuICAgIGNvbnN0IFtyb290UmVmLCByb290V2lkdGhdID0gdXNlQ29udGFpbmVyV2lkdGgoKTtcbiAgICBjb25zdCBuYXJyb3dMYXlvdXQgPSByb290V2lkdGggPiAwICYmIHJvb3RXaWR0aCA8IDY4MDtcblxuICAgIGNvbnN0IGFwaSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvYWRDaGF0cyAoKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0xPQURJTkcgQ0hBVFMnKTtcbiAgICAgICAgICAgICAgICBmZXRjaENoYXRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbWVldGluZy1yb29tLScgKyBwcm9wcy5jYWxlbmRhckV2ZW50LmlkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBwYXJ0aWNpcGFudHMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnRpY2lwYW50cztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjogKGV2ZW50VHlwZSwgYmUpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLlJFUVVFU1RfVE9fSk9JTl9NRUVUSU5HOlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuVVNFUl9KT0lORUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRVc2VyKGJlLnBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuVVNFUl9MRUZUX01FRVRJTkc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVVc2VyKGJlLnBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuU09DS0VUX0RJU0NPTk5FQ1Q6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTb2NrZXQgZHJvcHBlZCDigJQgdGVsbCB0aGUgdXNlci4gVGhlIHJvc3RlciBpcyByZWNvbmNpbGVkIG9uIHJlY29ubmVjdC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2luZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlY29ubmVjdGluZyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLlNPQ0tFVF9DT05ORUNUOlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBhY3Qgb24gYSBSRS1jb25uZWN0IChpbml0aWFsIGNvbm5lY3QgaXMgaGFuZGxlZCBieSB0aGUgam9pbiBlZmZlY3QpLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpvaW5lZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVjb25uZWN0aW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN5bmNSb3N0ZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLlBFRVJfRElTQ09OTkVDVDpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgcGVlci1sZXZlbCBkaXNjb25uZWN0IHNpZ25hbCDigJQgcmVjb25jaWxlIHRoZSByb3N0ZXIgZnJvbSB0aGUgc2VydmVyIHRydXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByYXRoZXIgdGhhbiB0cnVzdGluZyB3ZSBnb3QgZXZlcnkgVVNFUl9MRUZUIGRlbHRhLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzeW5jUm9zdGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5DUkVBVEVfVFJBTlNQT1JUX0ZBSUxFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlY29ubmVjdEVycm9yKCdBIGNvbm5lY3Rpb24gcHJvYmxlbSBvY2N1cnJlZC4gUGxlYXNlIHJlam9pbiB0aGUgbWVldGluZy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkFVRElPX1ZJU1VBTF9TRVRUSU5HU19DSEFOR0VEOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25BVlNldHRpbmdzQ2hhbmdlKGJlPy5wYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLlNZU1RFTV9FVkVOVDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLlJBSVNFX0hBTkQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBvblJhaXNlSGFuZChiZS5wYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkxPV0VSX0hBTkQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkxvd2VySGFuZChiZS5wYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkVORF9TRVNTSU9OOlxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZ1VwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5TSEFSSU5HX1NUT1BQRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRTY3JlZW5TaGFyZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhcnRTY3JlZW5TaGFyaW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkNIQVRfTUVTU0FHRTpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTWVzc2FnZShiZS5wYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkNPTlNVTUVSX1RSQU5TUE9SVF9GQUlMRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5nVXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDb25uZWN0aW9uIGVycm9yIC0gUGxlYXNlIGNoZWNrIHlvdXIgbmV0d29yayBjb25uZWN0aW9uIGFuZCByZS1qb2luIHRoZSBtZWV0aW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5TWVNURU1fQUxFUlQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZWNvbm5lY3RFcnJvcihiZS5wYXlsb2FkICYmIGJlLnBheWxvYWQubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYmUucGF5bG9hZC5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnQSBjb25uZWN0aW9uIHByb2JsZW0gb2NjdXJyZWQuIFBsZWFzZSByZWpvaW4gdGhlIG1lZXRpbmcuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTWVzc2FnZSA9IChtZXNzYWdlKSA9PiB7XG4gICAgICAgIGlmKHNpZGVCYXJUYWIgIT09ICdDaGF0Jykge1xuICAgICAgICAgICAgbGV0IGNoYXRNZXNzYWdlID0gbWVzc2FnZS5jaGF0TWVzc2FnZTtcbiAgICAgICAgICAgIGlmIChhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZSAhPT0gY2hhdE1lc3NhZ2UucGFydGljaXBhbnQudXNlcm5hbWUpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVNZXNzYWdlQXJyaXZlZCh7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoYXRNZXNzYWdlLnBhcnRpY2lwYW50Lm5hbWUgKyBcIiBcIiArIGNoYXRNZXNzYWdlLnBhcnRpY2lwYW50Lm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICsgKGNoYXRNZXNzYWdlLmNvbnRlbnQgJiYgY2hhdE1lc3NhZ2UuY29udGVudC50cmltKCkubGVuZ3RoID4gMCA/IFwiIC0gXCIgKyBjaGF0TWVzc2FnZS5jb250ZW50IDogJycpXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBzZXRIYXNVbnJlYWRDaGF0cyh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9uUmFpc2VIYW5kID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgcmFpc2VkSGFuZHMucHVzaChwYXlsb2FkLnVzZXJJZCk7XG4gICAgICAgIHNldFJhaXNlZEhhbmRzKFtdLmNvbmNhdChyYWlzZWRIYW5kcykpO1xuICAgIH07XG5cbiAgICBjb25zdCBvbkxvd2VySGFuZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChyYWlzZWRIYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSByYWlzZWRIYW5kcy5maW5kSW5kZXgoKHApID0+IHAgPT09IHBheWxvYWQudXNlcklkKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgcmFpc2VkSGFuZHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNldFJhaXNlZEhhbmRzKFtdLmNvbmNhdChyYWlzZWRIYW5kcykpO1xuICAgIH07XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAobWVldGluZ0NoYXQpIHtcbiAgICAgICAgICAgIHNldFNpZGVCYXJUYWIoJ0NoYXQnKTtcbiAgICAgICAgICAgIHNldFNpZGVCYXJPcGVuKHRydWUpO1xuICAgICAgICAgICAgc2V0SGFzVW5yZWFkQ2hhdHMoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSwgW21lZXRpbmdDaGF0XSk7XG5cbiAgICBjb25zdCBmZXRjaENoYXRzID0gKCkgPT4ge1xuICAgICAgICBzZW5kUmVxdWVzdChgJHtsb2NhdGlvbiArICcvJyArIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpfS9jYWxlbmRhci9hcGkvdjEvY2hhdC9mZXRjaE1lZXRpbmdDaGF0LyR7cHJvcHMuY2FsZW5kYXJFdmVudC5pZH1gLCAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGRVRDSCBDSEFUIFJFU1BPTlNFIDogJywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmlkKSB7XG4gICAgICAgICAgICAgICAgc2V0TWVldGluZ0NoYXQocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAoZSkgPT4ge1xuXG4gICAgICAgIH0sIHRydWUsIGZhbHNlKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25BVlNldHRpbmdzQ2hhbmdlID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYocGF5bG9hZCkge1xuICAgICAgICAgICAgLy8gSW1tdXRhYmxlIHVwZGF0ZTogcHJvZHVjZSBhIE5FVyBwYXJ0aWNpcGFudCBvYmplY3Qgc28gdGhlIHRpbGUgcmUtcmVuZGVycyB3aXRoIHRoZVxuICAgICAgICAgICAgLy8gZnJlc2ggbXV0ZSBzdGF0ZSAoaW4tcGxhY2UgbXV0YXRpb24gY291bGQgYmUgbWlzc2VkIG9uIGEgZ3JpZCByZXNodWZmbGUvcmVtb3VudCkuXG4gICAgICAgICAgICBzZXRQYXJ0aWNpcGFudHMoKHByZXYpID0+IHByZXYubWFwKChwKSA9PlxuICAgICAgICAgICAgICAgIHAudXNlcklkID09PSBwYXlsb2FkLnVzZXJJZFxuICAgICAgICAgICAgICAgICAgICA/IHsuLi5wLCBhdWRpb011dGVkOiBwYXlsb2FkLmF1ZGlvTXV0ZWQsIHZpZGVvTXV0ZWQ6IHBheWxvYWQudmlkZW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgOiBwKSk7XG5cbiAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLmZpcmVFdmVudChWQ0V2ZW50VHlwZS5BVURJT19WSVNVQUxfU0VUVElOR1NfQ0hBTkdFRCwgcGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZW1pdEFWU2V0dGluZ3NDaGFuZ2UoKSB7XG4gICAgICAgIHNvY2tldE1hbmFnZXIuZW1pdEV2ZW50KFZDRXZlbnRUeXBlLkFVRElPX1ZJU1VBTF9TRVRUSU5HU19DSEFOR0VELCB7XG4gICAgICAgICAgICBtZWV0aW5nSWQ6IHByb3BzLmNhbGVuZGFyRXZlbnQuaWQsXG4gICAgICAgICAgICB1c2VySWQ6IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lLFxuICAgICAgICAgICAgYXVkaW9NdXRlZDogYXVkaW9NdXRlZCxcbiAgICAgICAgICAgIHZpZGVvTXV0ZWQ6IHZpZGVvTXV0ZWRcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChhdWRpb011dGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBvbkFWU2V0dGluZ3NDaGFuZ2Uoe1xuICAgICAgICAgICAgICAgIHVzZXJJZDogYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgdmlkZW9NdXRlZCxcbiAgICAgICAgICAgICAgICBhdWRpb011dGVkXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZW1pdEFWU2V0dGluZ3NDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgIH0sIFthdWRpb011dGVkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAodmlkZW9NdXRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgb25BVlNldHRpbmdzQ2hhbmdlKHtcbiAgICAgICAgICAgICAgICB1c2VySWQ6IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lLFxuICAgICAgICAgICAgICAgIHZpZGVvTXV0ZWQsXG4gICAgICAgICAgICAgICAgYXVkaW9NdXRlZFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGVtaXRBVlNldHRpbmdzQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICB9LCBbdmlkZW9NdXRlZF0pO1xuXG4gICAgY29uc3QgaGFuZGxlTWVzc2FnZUFycml2ZWQgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKHJvb21TdGF0dXMgPT09IFN0YXR1cy5TRVNTSU9OICYmIGV2ZW50Lm1lc3NhZ2UgJiYgZXZlbnQubWVzc2FnZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzZXRBY3Rpdml0eU1lc3NhZ2UoZXZlbnQubWVzc2FnZSk7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldEFjdGl2aXR5TWVzc2FnZShudWxsKTtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQobWVzc2FnZVRpbWVvdXQpO1xuICAgICAgICAgICAgfSwgNDAwMCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgYWRkVXNlciA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdBREQgVVNFUiA6ICcsIHBheWxvYWQpO1xuICAgICAgICBhZGRVc2VyVG9QYXJ0aWNpcGFudHMocGF5bG9hZC51c2VyKTtcbiAgICAgICAgc2V0QWxsVXNlclBhcnRpY2lwYW50c0xlZnQoZmFsc2UpO1xuICAgICAgICBpZiAocm9vbVN0YXR1cyA9PT0gU3RhdHVzLkxPQkJZKSB7XG4gICAgICAgICAgICBzZXRSb29tU3RhdHVzKFN0YXR1cy5TRVNTSU9OKTtcbiAgICAgICAgICAgIHNldFNpZGVCYXJUYWIoJ1Blb3BsZScpO1xuICAgICAgICAgICAgc2V0U2lkZUJhck9wZW4odHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVNZXNzYWdlQXJyaXZlZCh7XG4gICAgICAgICAgICBtZXNzYWdlOiBwYXlsb2FkLnVzZXIubmFtZSArICcgaGFzIGpvaW5lZCdcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbW92ZVVzZXIgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuY2FsZW5kYXJFdmVudC5pZCA9PT0gcGF5bG9hZC5tZWV0aW5nSWQpIHtcbiAgICAgICAgICAgIC8vIEltbXV0YWJsZSBmdW5jdGlvbmFsIHVwZGF0ZSBzbyBjb25jdXJyZW50IGRlbHRhcyBjYW4ndCBjbG9iYmVyIGVhY2ggb3RoZXIgKGxvc3QtdXBkYXRlXG4gICAgICAgICAgICAvLyByYWNlKS4gVGhlIFwiZXZlcnlvbmUgbGVmdCDihpIgTE9CQllcIiB0cmFuc2l0aW9uIGlzIGhhbmRsZWQgYnkgdGhlIHBhcnRpY2lwYW50cyBlZmZlY3QgYmVsb3cuXG4gICAgICAgICAgICBzZXRQYXJ0aWNpcGFudHMoKHByZXYpID0+IHByZXYuZmlsdGVyKChwKSA9PiBwLnVzZXJJZCAhPT0gcGF5bG9hZC51c2VySWQpKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBSZWNvbmNpbGUgdGhlIHBhcnRpY2lwYW50IGxpc3QgV0hPTEVTQUxFIGZyb20gdGhlIHNlcnZlcidzIGF1dGhvcml0YXRpdmUgcm9zdGVyLiBUaGlzIGlzIHRoZVxuICAgIC8vIHJlY29uY2lsaWF0aW9uIHBhdGggdGhhdCB3YXMgZW50aXJlbHkgbWlzc2luZzogaW5jcmVtZW50YWwgVVNFUl9KT0lORUQvVVNFUl9MRUZUIGRlbHRhcyBhbG9uZVxuICAgIC8vIHBlcm1hbmVudGx5IGRlc3luYyBhIGNsaWVudCB0aGF0IGRyb3BzIG9uZS4gRHJpdmVuIGJ5IHRoZSBQaGFzZS1DIEFMTF9VU0VSUyBzZXJ2ZXIgaGFuZGxlci5cbiAgICBjb25zdCByZWNvbmNpbGVQYXJ0aWNpcGFudHMgPSAodXNlcnMpID0+IHtcbiAgICAgICAgY29uc3QgbGlzdCA9ICh1c2VycyB8fCBbXSkubWFwKCh1KSA9PiAoe1xuICAgICAgICAgICAgdXNlcklkOiB1LnVzZXJJZCxcbiAgICAgICAgICAgIG5hbWU6IHUubmFtZSxcbiAgICAgICAgICAgIGF2YXRhcjogdS5hdmF0YXIsXG4gICAgICAgICAgICBhdWRpb011dGVkOiB1LmF1ZGlvTXV0ZWQsXG4gICAgICAgICAgICB2aWRlb011dGVkOiB1LnZpZGVvTXV0ZWQsXG4gICAgICAgICAgICBwcm9kdWNlcnM6IHUucHJvZHVjZXJzXG4gICAgICAgIH0pKTtcblxuICAgICAgICBzZXRQYXJ0aWNpcGFudHMobGlzdCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3luY1Jvc3RlciA9ICgpID0+IHtcbiAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuQUxMX1VTRVJTLCB7XG4gICAgICAgICAgICBtZWV0aW5nSWQ6IHByb3BzLmNhbGVuZGFyRXZlbnQuaWQsXG4gICAgICAgICAgICB1c2VySWQ6IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lXG4gICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdST1NURVIgUkVTWU5DIDonLCByZXNwb25zZS5kYXRhLnVzZXJzSW5Sb29tKTtcbiAgICAgICAgICAgICAgICByZWNvbmNpbGVQYXJ0aWNpcGFudHMocmVzcG9uc2UuZGF0YS51c2Vyc0luUm9vbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUm9zdGVyIHJlc3luYyBmYWlsZWQnLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIFNpbmdsZSBvd25lciBvZiB0aGUgXCJhbGwgcGFydGljaXBhbnRzIGxlZnRcIiAvIHJvb20tc3RhdHVzIHRyYW5zaXRpb24sIGRlcml2ZWQgZnJvbSB0aGUgbGlzdFxuICAgIC8vICh3b3JrcyBubyBtYXR0ZXIgd2hpY2ggcGF0aCBtdXRhdGVkIHBhcnRpY2lwYW50czogZGVsdGEsIHJlY29uY2lsZSwgb3IgaW5pdGlhbCBqb2luKS5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocm9vbVN0YXR1cyA9PT0gU3RhdHVzLlNFU1NJT04gJiYgcGFydGljaXBhbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc2V0QWxsVXNlclBhcnRpY2lwYW50c0xlZnQodHJ1ZSk7XG4gICAgICAgICAgICBzZXRSb29tU3RhdHVzKFN0YXR1cy5MT0JCWSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFydGljaXBhbnRzLmxlbmd0aCA+IDAgJiYgYWxsVXNlclBhcnRpY2lwYW50c0xlZnQpIHtcbiAgICAgICAgICAgIHNldEFsbFVzZXJQYXJ0aWNpcGFudHNMZWZ0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0sIFtwYXJ0aWNpcGFudHNdKTtcblxuICAgIGNvbnN0IGhhbmRsZVNpZGViYXJUb2dnbGUgPSAoZSkgPT4ge1xuICAgICAgICBsZXQgcGFwZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVldGluZ0RpYWxvZ1BhcGVyJyk7XG4gICAgICAgIGlmIChlLmRldGFpbC5vcGVuKSB7XG4gICAgICAgICAgICBwYXBlci5zdHlsZS5tYXJnaW4gPSAnNTRweCAwIDAgMTM2cHgnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFwZXIuc3R5bGUubWFyZ2luID0gJzU0cHggMCAwIDAnO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGV2ZW50SGFuZGxlci5hcGkgPSBoYW5kbGVyKCk7XG4gICAgICAgIHByb3BzLmhhbmRsZS5hcGkgPSBhcGkoKTtcbiAgICB9KTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5zZXR0aW5ncykge1xuICAgICAgICAgICAgc2V0QXVkaW9NdXRlZCghcHJvcHMuc2V0dGluZ3MuYXVkaW9Pbik7XG4gICAgICAgICAgICBzZXRWaWRlb011dGVkKCFwcm9wcy5zZXR0aW5ncy52aWRlb09uKTtcbiAgICAgICAgfVxuICAgIH0sIFtwcm9wcy5zZXR0aW5nc10pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGFuZFJhaXNlZCkpIHtcbiAgICAgICAgICAgIGlmIChoYW5kUmFpc2VkKSB7XG4gICAgICAgICAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuUkFJU0VfSEFORCwge1xuICAgICAgICAgICAgICAgICAgICByb29tSWQ6IHByb3BzLmNhbGVuZGFyRXZlbnQuaWQsXG4gICAgICAgICAgICAgICAgICAgIHVzZXJJZDogYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuTE9XRVJfSEFORCwge1xuICAgICAgICAgICAgICAgICAgICByb29tSWQ6IHByb3BzLmNhbGVuZGFyRXZlbnQuaWQsXG4gICAgICAgICAgICAgICAgICAgIHVzZXJJZDogYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH0sIFtoYW5kUmFpc2VkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2Y0V2ZW50TWFuYWdlci5yZW1vdmVTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5hZGRBcHBsaWNhdGlvbkNvbnRleHRTdWJzY3JpcHRpb24oe1xuICAgICAgICAgICAgaGFuZGxlcjoge1xuICAgICAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0cmFpbmluZy1yb29tJztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uQ29udGV4dENoYW5nZTogKGNvbnRleHQsIG5ld1ZhbHVlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMobmV3VmFsdWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoKGtleSkgPT4ga2V5ID09PSAnd2luZG93RGlzcGxheVN0YXRlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldERpc3BsYXlTdGF0ZShuZXdWYWx1ZXMud2luZG93RGlzcGxheVN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKChpbml0aWFsQ29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldERpc3BsYXlTdGF0ZShpbml0aWFsQ29udGV4dCA/IGluaXRpYWxDb250ZXh0LndpbmRvd0Rpc3BsYXlTdGF0ZSA6ICdNQVhJTUlaRUQnKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHZjRXZlbnRNYW5hZ2VyLmFkZFN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGVyLCBWQ0V2ZW50VHlwZS5SRVFVRVNUX1RPX0pPSU5fTUVFVElORywgVkNFdmVudFR5cGUuVVNFUl9KT0lORUQsIFZDRXZlbnRUeXBlLlVTRVJfTEVGVF9NRUVUSU5HLFxuICAgICAgICAgICAgVkNFdmVudFR5cGUuU1lTVEVNX0VWRU5ULCBWQ0V2ZW50VHlwZS5TT0NLRVRfQ09OTkVDVCwgVkNFdmVudFR5cGUuU09DS0VUX0RJU0NPTk5FQ1QsIFZDRXZlbnRUeXBlLlJBSVNFX0hBTkQsIFZDRXZlbnRUeXBlLkxPV0VSX0hBTkQsXG4gICAgICAgICAgICBWQ0V2ZW50VHlwZS5QRUVSX0RJU0NPTk5FQ1QsIFZDRXZlbnRUeXBlLkNPTlNVTUVSX1RSQU5TUE9SVF9GQUlMRUQsIFZDRXZlbnRUeXBlLkNSRUFURV9UUkFOU1BPUlRfRkFJTEVELFxuICAgICAgICAgICAgVkNFdmVudFR5cGUuU0hBUklOR19TVE9QUEVELCBWQ0V2ZW50VHlwZS5FTkRfU0VTU0lPTiwgVkNFdmVudFR5cGUuQ0hBVF9NRVNTQUdFLCBWQ0V2ZW50VHlwZS5BVURJT19WSVNVQUxfU0VUVElOR1NfQ0hBTkdFRCxcbiAgICAgICAgICAgIFZDRXZlbnRUeXBlLlNZU1RFTV9BTEVSVCk7XG5cbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2lkZUJhclRvZ2dsZUV2ZW50JywgaGFuZGxlU2lkZWJhclRvZ2dsZSk7XG4gICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5zZXRIYXNBY3RpdmVNZWV0aW5nKHRydWUpO1xuICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuc2V0QWN0aXZlTWVldGluZ0tleShwcm9wcy5jYWxlbmRhckV2ZW50LmtleSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICB2Y0V2ZW50TWFuYWdlci5yZW1vdmVTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlcik7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIucmVtb3ZlQXBwbGljYXRpb25Db250ZXh0U3Vic2NyaXB0aW9ucygndHJhaW5pbmctcm9vbScpO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2lkZUJhclRvZ2dsZUV2ZW50JywgaGFuZGxlU2lkZWJhclRvZ2dsZSk7XG5cbiAgICAgICAgICAgIGlmIChhcHBsaWNhdGlvbk1hbmFnZXIuaGFzQWN0aXZlTWVldGluZygpKSB7XG4gICAgICAgICAgICAgICAgc29ja2V0TWFuYWdlci5sZWF2ZU1lZXRpbmcocHJvcHMuY2FsZW5kYXJFdmVudC5pZCk7XG4gICAgICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLnNldEhhc0FjdGl2ZU1lZXRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5zZXRBY3RpdmVNZWV0aW5nS2V5KG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5zZXRIYXNBY3RpdmVNZWV0aW5nKHRydWUpO1xuICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuc2V0QWN0aXZlTWVldGluZ0tleShwcm9wcy5jYWxlbmRhckV2ZW50LmtleSk7XG4gICAgICAgIGxldCB1c2VyRnVsbE5hbWU7XG5cbiAgICAgICAgaWYgKHByb3BzLmNhbGVuZGFyRXZlbnQuaG9zdC51c2VybmFtZSA9PT0gYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUpIHtcbiAgICAgICAgICAgIHVzZXJGdWxsTmFtZSA9IHByb3BzLmNhbGVuZGFyRXZlbnQuaG9zdC5uYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gR3VhcmQ6IHRoZSBjdXJyZW50IHVzZXIgbWF5IG5vdCBiZSBpbiBhdHRlbmRlZXMgKGRhdGEgZHJpZnQpIOKAlCBkb24ndCBjcmFzaDtcbiAgICAgICAgICAgIC8vIGZhbGwgYmFjayB0byB0aGUgdXNlcm5hbWUgc28gY3VycmVudFVzZXJGdWxsTmFtZSBzdGF5cyB0cnV0aHkgKGdhdGVzIHRoZSByb29tIHJlbmRlcikuXG4gICAgICAgICAgICBjb25zdCBtZSA9IHByb3BzLmNhbGVuZGFyRXZlbnQuYXR0ZW5kZWVzLmZpbmQoKGEpID0+IGEudXNlcm5hbWUgPT09IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lKTtcbiAgICAgICAgICAgIHVzZXJGdWxsTmFtZSA9IG1lID8gbWUubmFtZSA6IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0Q3VycmVudFVzZXJGdWxsTmFtZSh1c2VyRnVsbE5hbWUpO1xuICAgICAgICBzZXRJc0hvc3QocHJvcHMuY2FsZW5kYXJFdmVudC5ob3N0LnVzZXJuYW1lID09PSBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZSk7XG4gICAgICAgIHNldElzQ2hhaXJQZXJzb24ocHJvcHMuY2FsZW5kYXJFdmVudC5jaGFpclBlcnNvbklkID09PSBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG1lZGlhLmpvaW5NZWV0aW5nKHByb3BzLmNhbGVuZGFyRXZlbnQsIHByb3BzLnNldHRpbmdzLCB1c2VyRnVsbE5hbWUpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdKT0lOIFJFU1BPTlNFIDogJywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICBqb2luZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVBhcnRpY2lwYW50cyhyZXNwb25zZS5wYXJ0aWNpcGFudHMpO1xuICAgICAgICAgICAgICAgICAgICBzZXRSdHBDYXBhYmlsaXRpZXMocmVzcG9uc2UucnRwQ2FwYWJpbGl0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0T25sb2FkU2NyZWVuU2hhcmVEYXRhKHJlc3BvbnNlLnNoYXJlU2NyZWVuUHJvZHVjZXJEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRGVyaXZlIGZyb20gdGhlIEFDSydzIHJvc3Rlciwgbm90IHRoZSBzdGlsbC1lbXB0eSBgcGFydGljaXBhbnRzYCBzdGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgc2V0Um9vbVN0YXR1cyhyZXNwb25zZS5wYXJ0aWNpcGFudHMgJiYgcmVzcG9uc2UucGFydGljaXBhbnRzLmxlbmd0aCA+IDAgPyBTdGF0dXMuU0VTU0lPTiA6IFN0YXR1cy5MT0JCWSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Um9vbVN0YXR1cyhTdGF0dXMuU1lTVEVNX0VSUk9SKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgc2V0Um9vbVN0YXR1cyhTdGF0dXMuU1lTVEVNX0VSUk9SKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuc2V0SGFzQWN0aXZlTWVldGluZyhmYWxzZSk7XG4gICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuc2V0QWN0aXZlTWVldGluZ0tleShudWxsKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG5cbiAgICBmdW5jdGlvbiBhZGRVc2VyVG9QYXJ0aWNpcGFudHModXNlcikge1xuICAgICAgICAvLyBJbW11dGFibGUsIGRlZHVwLWJ5LXVzZXJJZCBmdW5jdGlvbmFsIHVwZGF0ZS4gTmV2ZXIgbXV0YXRlIGluIHBsYWNlICsgY29uY2F0ICh0aGF0IHJhY2VzXG4gICAgICAgIC8vIHdpdGggY29uY3VycmVudCBkZWx0YXMgYW5kIGxvc2VzIHVwZGF0ZXMpLiBVcGRhdGUtaW4tcGxhY2UtYnkta2V5IGlmIHByZXNlbnQsIGVsc2UgYXBwZW5kLlxuICAgICAgICBzZXRQYXJ0aWNpcGFudHMoKHByZXYpID0+IHtcbiAgICAgICAgICAgIGlmIChwcmV2LmZpbmQoKHUpID0+IHUudXNlcklkID09PSB1c2VyLnVzZXJJZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldi5tYXAoKHApID0+IHAudXNlcklkID09PSB1c2VyLnVzZXJJZFxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnAsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB1c2VyLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmF0YXI6IHVzZXIuYXZhdGFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9NdXRlZDogdXNlci5hdWRpb011dGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9NdXRlZDogdXNlci52aWRlb011dGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXJzOiB1c2VyLnByb2R1Y2Vyc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogcCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBbLi4ucHJldiwge1xuICAgICAgICAgICAgICAgIHVzZXJJZDogdXNlci51c2VySWQsXG4gICAgICAgICAgICAgICAgbmFtZTogdXNlci5uYW1lLFxuICAgICAgICAgICAgICAgIGF2YXRhcjogdXNlci5hdmF0YXIsXG4gICAgICAgICAgICAgICAgYXVkaW9NdXRlZDogdXNlci5hdWRpb011dGVkLFxuICAgICAgICAgICAgICAgIHZpZGVvTXV0ZWQ6IHVzZXIudmlkZW9NdXRlZCxcbiAgICAgICAgICAgICAgICBwcm9kdWNlcnM6IHVzZXIucHJvZHVjZXJzXG4gICAgICAgICAgICB9XTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbmdlT3RoZXJQYXJ0aWNpcGFudEFWU2V0dGluZ3MgPSAodXNlcklkLCBhdWRpb011dGVkLCB2aWRlb011dGVkKSA9PiB7XG5cbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlUGFydGljaXBhbnRzID0gKHVzZXJzKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdBTEwgVVNFUlMgcmVjZWl2ZWQgYW5kIGNyZWF0aW5nIHBhcnRpY2lwYW50cyA6ICcsIHVzZXJzKTtcbiAgICAgICAgLy8gSW5pdGlhbCByb3N0ZXIgZnJvbSB0aGUgSk9JTiBhY2sg4oCUIHNldCBpdCB3aG9sZXNhbGUgKHNhbWUgc2hhcGUgYXMgcmVjb25jaWxlKS5cbiAgICAgICAgcmVjb25jaWxlUGFydGljaXBhbnRzKHVzZXJzKTtcblxuICAgICAgICBpZiAodXNlcnMgJiYgdXNlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2V0U2lkZUJhck9wZW4odHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZ1VwID0gKCkgPT4ge1xuICAgICAgICBzb2NrZXRNYW5hZ2VyLmxlYXZlTWVldGluZyhwcm9wcy5jYWxlbmRhckV2ZW50LmlkKTtcbiAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLnNldEhhc0FjdGl2ZU1lZXRpbmcoZmFsc2UpO1xuICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIucmVtb3ZlTG9hZGVkR3JhcGgoJ3dpbmRvdycpO1xuICAgICAgICBzZXRTaWRlQmFyT3BlbihmYWxzZSk7XG4gICAgICAgIHNldFNpZGVCYXJUYWIoJycpO1xuICAgIH07XG5cbiAgICBjb25zdCBlbmRTZXNzaW9uID0gKCkgPT4ge1xuICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIub3BlbkNvbmZpcm1EaWFsb2coXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZW5kIHRoZSBjdXJyZW50IHNlc3Npb24/XCIsIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBzb2NrZXRNYW5hZ2VyLmVuZFNlc3Npb24ocHJvcHMuY2FsZW5kYXJFdmVudC5pZCk7XG4gICAgICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLnNldEhhc0FjdGl2ZU1lZXRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5zZXRBY3RpdmVNZWV0aW5nS2V5KG51bGwpO1xuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5yZW1vdmVMb2FkZWRHcmFwaCgnd2luZG93Jyk7XG4gICAgICAgICAgICAgICAgc2V0U2lkZUJhck9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgIHNldFNpZGVCYXJUYWIoJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZW1pdFN5c3RlbUV2ZW50ID0gKGV2ZW50VHlwZSwgZGF0YSwgdG9QYXJ0aWNpcGFudElkcyA9IG51bGwpID0+IHtcbiAgICAgICAgbGV0IHBhcnRpY2lwYW50SWRzID0gW107XG4gICAgICAgIGlmICghdG9QYXJ0aWNpcGFudElkcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXJ0aWNpcGFudCBvZiBwYXJ0aWNpcGFudHMpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFydGljaXBhbnQudXNlcklkICE9PSBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudElkcy5wdXNoKHBhcnRpY2lwYW50LnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFydGljaXBhbnRJZHMgPSBwYXJ0aWNpcGFudElkcy5jb25jYXQodG9QYXJ0aWNpcGFudElkcyk7XG4gICAgICAgIH1cblxuICAgICAgICBzb2NrZXRNYW5hZ2VyLmVtaXRFdmVudChWQ0V2ZW50VHlwZS5TWVNURU1fRVZFTlQsIHtcbiAgICAgICAgICAgIHN5c3RlbUV2ZW50VHlwZTogZXZlbnRUeXBlLFxuICAgICAgICAgICAgcmVjaXBpZW50czogcGFydGljaXBhbnRJZHMsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVjb3JkTWVldGluZyA9ICgpID0+IHtcbiAgICAgICAgbWVkaWFSZWNvcmRlci5pbml0KHByb3BzLmNhbGVuZGFyRXZlbnQuaWQsIHByb3BzLmNhbGVuZGFyRXZlbnQudGl0bGUpO1xuICAgICAgICBzZXRJc1JlY29yZGluZyh0cnVlKTtcbiAgICAgICAgZW1pdFN5c3RlbUV2ZW50KCdNRUVUSU5HX1JFQ09SRElORycsIHtcbiAgICAgICAgICAgIHJlY29yZGluZzogdHJ1ZSxcbiAgICAgICAgICAgIHVzZXJJZDogYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbWVkaWFSZWNvcmRlci5yZWNvcmRNZWV0aW5nKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHN0b3BSZWNvcmRpbmdNZWV0aW5nID0gKHB1Ymxpc2ggPSB0cnVlKSA9PiB7XG4gICAgICAgIHNldElzUmVjb3JkaW5nKGZhbHNlKTtcblxuICAgICAgICBpZiAocHVibGlzaCkge1xuICAgICAgICAgICAgZW1pdFN5c3RlbUV2ZW50KCdNRUVUSU5HX1JFQ09SRElORycsIHtcbiAgICAgICAgICAgICAgICByZWNvcmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHVzZXJJZDogYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbWVkaWFSZWNvcmRlci5zdG9wUmVjb3JkaW5nTWVldGluZygpO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICNlMmUyZTInLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbiAgICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsncm93IGZsZXgtbm93cmFwIG5vLW1hcmdpbiBuby1wYWRkaW5nIHctMTAwIGgtMTAwJ30+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydjb2wgbm8tbWFyZ2luIG5vLXBhZGRpbmcnfSBzdHlsZT17e21pbldpZHRoOiAnMjgwcHgnfX0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsncm93IG5vLW1hcmdpbiBuby1wYWRkaW5nIHctMTAwIGgtMTAwJ30+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICc4MHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3R0b206ICcxcHggc29saWQgI2UyZTJlMicsXG4gICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VG9vbGJhciBldmVudEhhbmRsZXI9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25NdXRlVmlkZW86IChtdXRlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlkZW9NdXRlZChtdXRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTXV0ZUF1ZGlvOiAobXV0ZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEF1ZGlvTXV0ZWQobXV0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRDYWxsOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5nVXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kU2Vzc2lvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kU2Vzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2hhdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hDaGF0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93UGVvcGxlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaWRlQmFyVGFiKCdQZW9wbGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNpZGVCYXJPcGVuKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZVNjcmVlbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhcnRTY3JlZW5TaGFyaW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wU2hhcmVTY3JlZW46ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNjcmVlblNoYXJlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGFydFNjcmVlblNoYXJpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TWludXRlczogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhcnRTaG93aW5nTWludXRlcyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZU1pbnV0ZXM6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1pbnV0ZXNTaG93bihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGFydFNob3dpbmdNaW51dGVzKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZU1pbnV0ZXM6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2Y1Jvb21Xb3Jrc3BhY2VSZWYuY3VycmVudCAmJiB2Y1Jvb21Xb3Jrc3BhY2VSZWYuY3VycmVudC5zYXZlTWludXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZjUm9vbVdvcmtzcGFjZVJlZi5jdXJyZW50LnNhdmVNaW51dGVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZE1lZXRpbmc6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZE1lZXRpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFJlY29yZGluZzogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFJlY29yZGluZ01lZXRpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VIYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRIYW5kUmFpc2VkKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dlckhhbmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEhhbmRSYWlzZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNVbnJlYWRDaGF0cz17aGFzVW5yZWFkQ2hhdHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRzPXtwYXJ0aWNpcGFudHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZFJhaXNlZD17aGFuZFJhaXNlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb0Rpc2FibGVkPXt2aWRlb0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRGlzYWJsZWQ9e2F1ZGlvRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9NdXRlZD17dmlkZW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb011dGVkPXthdWRpb011dGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlTdGF0ZT17ZGlzcGxheVN0YXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmVlblNoYXJlZD17c2NyZWVuU2hhcmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZXNTaG93bj17bWludXRlc1Nob3dufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb21TdGF0dXM9e3Jvb21TdGF0dXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNIb3N0PXtwcm9wcy5jYWxlbmRhckV2ZW50Lmhvc3QudXNlcm5hbWUgPT09IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QZXJtaXQ9eyFwcm9wcy5jYWxlbmRhckV2ZW50Lmhvc3QuYXNrVG9Kb2lufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbWVvbmVTaGFyaW5nPXtzb21lb25lU2hhcmluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlY29yZGluZz17aXNSZWNvcmRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VkSGFuZHM9e3JhaXNlZEhhbmRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXVkaW9EZXZpY2VDb25uZWN0ZWQ9e3Byb3BzLnNldHRpbmdzLmlzQXVkaW9EZXZpY2VDb25uZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWaWRlb0RldmljZUNvbm5lY3RlZD17cHJvcHMuc2V0dGluZ3MuaXNWaWRlb0RldmljZUNvbm5lY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWV0aW5nSWQ9e3Byb3BzLmNhbGVuZGFyRXZlbnQuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb21TdGF0dXMgPT09IFN0YXR1cy5TWVNURU1fRVJST1IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmdiKDIzNSwgNjMsIDMzKScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICczMnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSBjbGFzc05hbWU9eydjZW50ZXJlZC1mbGV4LWJveCd9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7U1lTVEVNX0VSUk9SX01FU1NBR0V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vbVN0YXR1cyA9PT0gU3RhdHVzLkNPTk5FQ1RJT05fRVJST1IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmdiKDIzNSwgNjMsIDMzKScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICczMnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSBjbGFzc05hbWU9eydjZW50ZXJlZC1mbGV4LWJveCd9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1NZU1RFTV9FUlJPUl9NRVNTQUdFfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydHBDYXBhYmlsaXRpZXMgJiYgcGFydGljaXBhbnRzICYmIGN1cnJlbnRVc2VyRnVsbE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAocm9vbVN0YXR1cyA9PT0gU3RhdHVzLlNFU1NJT04gfHwgcm9vbVN0YXR1cyA9PT0gU3RhdHVzLkxPQkJZKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxWQ1Jvb21Xb3Jrc3BhY2UgcmVmPXt2Y1Jvb21Xb3Jrc3BhY2VSZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudHM9e3BhcnRpY2lwYW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9e21lZXRpbmdQYXJ0aWNpcGFudEdyaWRNb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0lkPXtwcm9wcy52aWV3SWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb011dGVkPXthdWRpb011dGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9NdXRlZD17dmlkZW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZXRpbmdUaXRsZT17cHJvcHMuY2FsZW5kYXJFdmVudC50aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50S2V5PXtwcm9wcy5jYWxlbmRhckV2ZW50LmtleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZXNEb2N1bWVudElkPXtwcm9wcy5jYWxlbmRhckV2ZW50Lm1pbnV0ZXNEb2N1bWVudElkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVldGluZ0lkPXtwcm9wcy5jYWxlbmRhckV2ZW50LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFVzZXJGdWxsTmFtZT17Y3VycmVudFVzZXJGdWxsTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uR3JpZFNldHVwPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9zZXRTaWRlQmFyVGFiKCdQZW9wbGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlQmFyVGFiPXtzaWRlQmFyVGFifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vbVN0YXR1cz17cm9vbVN0YXR1c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSG9zdD17aXNIb3N0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDaGFpclBlcnNvbj17aXNDaGFpclBlcnNvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0U2NyZWVuU2hhcmluZz17c3RhcnRTY3JlZW5TaGFyaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmluZ0hhbmRsZXI9eyhzb21lb25lU2hhcmluZykgPT4gc2V0U29tZW9uZVNoYXJpbmcoc29tZW9uZVNoYXJpbmcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TdG9wU2hhcmluZz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNjcmVlblNoYXJlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhcnRTY3JlZW5TaGFyaW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblN0YXJ0U2hhcmluZz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNjcmVlblNoYXJlZCh0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXJ0U2NyZWVuU2hhcmluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRTaG93aW5nTWludXRlcz17c3RhcnRTaG93aW5nTWludXRlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU3RhcnRTaG93aW5nTWludXRlcz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1pbnV0ZXNTaG93bih0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGFydFNob3dpbmdNaW51dGVzKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblN0b3BTaG93aW5nTWludXRlcz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1pbnV0ZXNTaG93bihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhcnRTaG93aW5nTWludXRlcyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWludXRlc1Nob3duPXttaW51dGVzU2hvd259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUGVybWl0PXthdXRvUGVybWl0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRwQ2FwYWJpbGl0aWVzPXtydHBDYXBhYmlsaXRpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JlZW5TaGFyZWQ9e3NjcmVlblNoYXJlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlTdGF0ZT17ZGlzcGxheVN0YXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25sb2FkU2NyZWVuU2hhcmVEYXRhPXtvbmxvYWRTY3JlZW5TaGFyZURhdGF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxVc2VyUGFydGljaXBhbnRzTGVmdD17YWxsVXNlclBhcnRpY2lwYW50c0xlZnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkF1ZGlvRGV2aWNlQ2hhbmdlPXsoZGV2aWNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXVkaW9EaXNhYmxlZChVdGlscy5pc051bGwoZGV2aWNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0QXVkaW9NdXRlPXsocGFydGljaXBhbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VPdGhlclBhcnRpY2lwYW50QVZTZXR0aW5ncyhwYXJ0aWNpcGFudC51c2VySWQsIHRydWUsIHBhcnRpY2lwYW50LnZpZGVvTXV0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSG9zdFZpZGVvTXV0ZT17KHBhcnRpY2lwYW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlT3RoZXJQYXJ0aWNpcGFudEFWU2V0dGluZ3MocGFydGljaXBhbnQudXNlcklkLCBwYXJ0aWNpcGFudC5hdWRpb011dGVkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzaWRlQmFyT3BlbiAmJiBzaWRlQmFyVGFiICYmIHJvb21TdGF0dXMgPT09IFN0YXR1cy5TRVNTSU9OICYmXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtuYXJyb3dMYXlvdXQgPyAnY2xvc2FibGUtcGFuZWwtb3ZlcmxheScgOiAnY2xvc2FibGUtcGFuZWwtY29udGFpbmVyJ30+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2xvc2FibGVQYW5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlSGFuZGxlcj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2lkZUJhck9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaWRlQmFyVGFiKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e3NpZGVCYXJUYWJ9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNpZGVCYXJDb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZXRpbmdDaGF0PXttZWV0aW5nQ2hhdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNIb3N0PXtpc0hvc3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hhaXJQZXJzb249e2lzQ2hhaXJQZXJzb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYj17c2lkZUJhclRhYn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVldGluZ0lkPXtwcm9wcy5jYWxlbmRhckV2ZW50LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudHM9e3BhcnRpY2lwYW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0QXVkaW9NdXRlPXsocGFydGljaXBhbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZU90aGVyUGFydGljaXBhbnRBVlNldHRpbmdzKHBhcnRpY2lwYW50LnVzZXJJZCwgdHJ1ZSwgcGFydGljaXBhbnQudmlkZW9NdXRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSG9zdFZpZGVvTXV0ZT17KHBhcnRpY2lwYW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VPdGhlclBhcnRpY2lwYW50QVZTZXR0aW5ncyhwYXJ0aWNpcGFudC51c2VySWQsIHBhcnRpY2lwYW50LmF1ZGlvTXV0ZWQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0Nsb3NhYmxlUGFuZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiAnNDhweCcsXG4gICAgICAgICAgICAgICAgYm90dG9tOiAnNDhweCdcbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIDxBbGVydFxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PXsnd2FybmluZyd9XG4gICAgICAgICAgICAgICAgICAgIHNob3c9e3JlY29ubmVjdGluZ31cbiAgICAgICAgICAgICAgICAgICAgZmFkZT17dHJ1ZX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7bWFyZ2luOiAwfX0+UmVjb25uZWN0aW5n4oCmPC9wPlxuICAgICAgICAgICAgICAgIDwvQWxlcnQ+XG4gICAgICAgICAgICAgICAgPEFsZXJ0XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9eydkYW5nZXInfVxuICAgICAgICAgICAgICAgICAgICBzaG93PXtyZWNvbm5lY3RFcnJvciAhPT0gbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgZGlzbWlzc2libGVcbiAgICAgICAgICAgICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0UmVjb25uZWN0RXJyb3IobnVsbCl9XG4gICAgICAgICAgICAgICAgICAgIGZhZGU9e3RydWV9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17e21hcmdpbjogMH19PntyZWNvbm5lY3RFcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgPC9BbGVydD5cbiAgICAgICAgICAgICAgICA8QWxlcnRcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD17J2luZm8nfVxuICAgICAgICAgICAgICAgICAgICBzaG93PXthY3Rpdml0eU1lc3NhZ2UgIT09IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIGZhZGU9e3RydWV9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17e2NvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpJ319PnthY3Rpdml0eU1lc3NhZ2V9PC9wPlxuICAgICAgICAgICAgICAgIDwvQWxlcnQ+XG4gICAgICAgICAgICAgICAgPEFsZXJ0XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9eydpbmZvJ31cbiAgICAgICAgICAgICAgICAgICAgc2hvdz17Y2hhdE1lc3NhZ2UgIT09IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIGZhZGU9e3RydWV9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J3Jvdyd9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3R0b206ICcxcHggc29saWQgd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0JvdHRvbTogJzhweCdcbiAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J2NvbCd9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsncm93J30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBpZD17J0NIQVRfQlVCQkxFJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydjb2wnfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7Y29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCknfX0+e2NoYXRTZW5kZXJ9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydyb3cnfSBzdHlsZT17e21hcmdpblRvcDogJzhweCd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnY29sJ30+PHAgc3R5bGU9e3tjb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSd9fT57Y2hhdE1lc3NhZ2V9PC9wPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L0FsZXJ0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgey8qSGlkZGVuIHZpZGVvIHRvIGNhcHR1cmUgcmVjb3JkaW5ncyovfVxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tkaXNwbGF5OiAnbm9uZSd9fT5cbiAgICAgICAgICAgICAgICAgICAgPHZpZGVvXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49e2ZhbHNlfSBtdXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxheXNJbmxpbmUgYXV0b1BsYXkgcmVmPXtyZWNvcmRSZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjAwcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzIwMHB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgIClcbiAgICAgICAgO1xufSkpO1xuXG5leHBvcnQgZGVmYXVsdCBUcmFpbmluZ1Jvb207XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFDLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNELElBQUFDLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksbUJBQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFLLFFBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLE9BQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLGdCQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUSxZQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxNQUFBLEdBQUFQLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBVSxlQUFBLEdBQUFSLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBVyxjQUFBLEdBQUFULHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBWSxjQUFBLEdBQUFWLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBYSxlQUFBLEdBQUFYLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBYyxrQkFBQSxHQUFBWixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQWUsZUFBQSxHQUFBYixzQkFBQSxDQUFBRixP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