@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
@@ -0,0 +1,462 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _Utils = _interopRequireDefault(require("../../Utils"));
9
+ var _ApplicationManager = _interopRequireDefault(require("../../ApplicationManager"));
10
+ var _Observable = _interopRequireDefault(require("../../event/Observable"));
11
+ var _Event = _interopRequireDefault(require("../../event/Event"));
12
+ var _EventType = _interopRequireDefault(require("../../event/EventType"));
13
+ var _material = require("@mui/material");
14
+ var _Videocam = _interopRequireDefault(require("@mui/icons-material/Videocam"));
15
+ var _VideocamOff = _interopRequireDefault(require("@mui/icons-material/VideocamOff"));
16
+ var _Mic = _interopRequireDefault(require("@mui/icons-material/Mic"));
17
+ var _MicOff = _interopRequireDefault(require("@mui/icons-material/MicOff"));
18
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
+ 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; }
20
+ 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; }
21
+ 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; }
22
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
23
+ 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); }
24
+ /**
25
+ * VCSettings — pre-join audio/video settings (CDUI component type `vcSettings`).
26
+ *
27
+ * Replaces the hand-assembled vc-settings.json form. Self-contained: live camera
28
+ * preview, camera + microphone device selection, a live mic-level test meter, and
29
+ * on/off toggles. Exposes its value via {@code handle.api.value} and fires
30
+ * VALUE_CHANGE so the view can push it to {@code @#{vcFlow}.model.settings}. The
31
+ * Close/JOIN actions stay in the view (this component owns only the AV controls).
32
+ *
33
+ * Value shape: { audioOn, videoOn, audioDeviceId, videoDeviceId,
34
+ * isAudioDeviceConnected, isVideoDeviceConnected }.
35
+ */
36
+ const VCSettings = props => {
37
+ const primary = _ApplicationManager.default.getApplicationPrimaryColor() || '#1a3c5e';
38
+ const attr = (name, fallback) => _Utils.default.getComponentAttribute(props.config, name, fallback);
39
+
40
+ // Responsive to the COMPONENT's own width (not the viewport) — so a pinned
41
+ // ~320px window stacks even when the browser window is wide. Measured via
42
+ // ResizeObserver on the root container below.
43
+ const containerRef = _react.default.useRef(null);
44
+ const [containerWidth, setContainerWidth] = _react.default.useState(0);
45
+ const stacked = containerWidth > 0 && containerWidth < 560;
46
+ const [ready, setReady] = _react.default.useState(false);
47
+ const [videoOn, setVideoOn] = _react.default.useState(!!attr('defaultVideoOn', false));
48
+ const [audioOn, setAudioOn] = _react.default.useState(!!attr('defaultAudioOn', false));
49
+ const [videoDevices, setVideoDevices] = _react.default.useState([]);
50
+ const [audioDevices, setAudioDevices] = _react.default.useState([]);
51
+ const [videoDeviceId, setVideoDeviceId] = _react.default.useState('');
52
+ const [audioDeviceId, setAudioDeviceId] = _react.default.useState('');
53
+ const [micLevel, setMicLevel] = _react.default.useState(0);
54
+ const [statusMessage, setStatusMessage] = _react.default.useState(null);
55
+ const videoElRef = _react.default.useRef(null);
56
+ const videoStreamRef = _react.default.useRef(null);
57
+ const audioStreamRef = _react.default.useRef(null);
58
+ const audioCtxRef = _react.default.useRef(null);
59
+ const rafRef = _react.default.useRef(null);
60
+ const valueRef = _react.default.useRef({});
61
+ const detachTimerRef = _react.default.useRef(null);
62
+ const videoConnected = videoDevices.length > 0;
63
+ const audioConnected = audioDevices.length > 0;
64
+
65
+ // Track the component's own width so the layout responds to its container
66
+ // (e.g. the pinned window) rather than the browser viewport.
67
+ _react.default.useLayoutEffect(() => {
68
+ const el = containerRef.current;
69
+ if (!el) return;
70
+ const measure = () => setContainerWidth(el.getBoundingClientRect().width);
71
+ measure();
72
+ let ro;
73
+ if (typeof ResizeObserver !== 'undefined') {
74
+ ro = new ResizeObserver(measure);
75
+ ro.observe(el);
76
+ }
77
+ return () => ro && ro.disconnect();
78
+ }, []);
79
+
80
+ // ---- device enumeration -------------------------------------------------
81
+ const refreshDevices = _react.default.useCallback(async () => {
82
+ try {
83
+ const devices = await navigator.mediaDevices.enumerateDevices();
84
+ const cams = devices.filter(d => d.kind === 'videoinput');
85
+ const mics = devices.filter(d => d.kind === 'audioinput');
86
+ setVideoDevices(cams);
87
+ setAudioDevices(mics);
88
+ setVideoDeviceId(prev => prev || (cams[0] ? cams[0].deviceId : ''));
89
+ setAudioDeviceId(prev => prev || (mics[0] ? mics[0].deviceId : ''));
90
+ } catch (e) {
91
+ console.error('VCSettings: enumerateDevices failed', e);
92
+ }
93
+ }, []);
94
+
95
+ // ---- camera preview -----------------------------------------------------
96
+ const stopVideo = _react.default.useCallback(() => {
97
+ if (videoStreamRef.current) {
98
+ videoStreamRef.current.getTracks().forEach(t => t.stop());
99
+ videoStreamRef.current = null;
100
+ }
101
+ if (videoElRef.current) {
102
+ videoElRef.current.srcObject = null;
103
+ }
104
+ }, []);
105
+
106
+ // Callback ref on the preview <video>. Keeps the camera strictly tied to an
107
+ // attached video element: re-attaches the live stream when the element
108
+ // (re)mounts (e.g. a layout reflow recreates it), and releases the camera if
109
+ // the element is genuinely removed. The deferred check distinguishes a
110
+ // reflow remount (element comes straight back → keep) from real removal
111
+ // (element stays gone → stop + flip the toggle off).
112
+ const attachVideoEl = _react.default.useCallback(node => {
113
+ videoElRef.current = node;
114
+ if (detachTimerRef.current) {
115
+ clearTimeout(detachTimerRef.current);
116
+ detachTimerRef.current = null;
117
+ }
118
+ if (node) {
119
+ if (videoStreamRef.current) {
120
+ node.srcObject = videoStreamRef.current;
121
+ }
122
+ } else {
123
+ detachTimerRef.current = setTimeout(() => {
124
+ if (!videoElRef.current && videoStreamRef.current) {
125
+ stopVideo();
126
+ setVideoOn(false);
127
+ }
128
+ }, 0);
129
+ }
130
+ }, [stopVideo]);
131
+ const startVideo = _react.default.useCallback(async () => {
132
+ stopVideo();
133
+ try {
134
+ const stream = await navigator.mediaDevices.getUserMedia({
135
+ audio: false,
136
+ video: videoDeviceId ? {
137
+ deviceId: {
138
+ exact: videoDeviceId
139
+ }
140
+ } : true
141
+ });
142
+ videoStreamRef.current = stream;
143
+ if (videoElRef.current) {
144
+ videoElRef.current.srcObject = stream;
145
+ }
146
+ setStatusMessage(null);
147
+ refreshDevices(); // labels become available once permission is granted
148
+ } catch (e) {
149
+ console.error('VCSettings: camera access failed', e);
150
+ setVideoOn(false);
151
+ setStatusMessage('Could not access the camera — check your browser permissions.');
152
+ }
153
+ }, [videoDeviceId, stopVideo, refreshDevices]);
154
+
155
+ // ---- microphone test (level meter) --------------------------------------
156
+ const stopMic = _react.default.useCallback(() => {
157
+ if (rafRef.current) {
158
+ cancelAnimationFrame(rafRef.current);
159
+ rafRef.current = null;
160
+ }
161
+ if (audioStreamRef.current) {
162
+ audioStreamRef.current.getTracks().forEach(t => t.stop());
163
+ audioStreamRef.current = null;
164
+ }
165
+ if (audioCtxRef.current) {
166
+ audioCtxRef.current.close().catch(() => {});
167
+ audioCtxRef.current = null;
168
+ }
169
+ setMicLevel(0);
170
+ }, []);
171
+ const startMic = _react.default.useCallback(async () => {
172
+ stopMic();
173
+ try {
174
+ const stream = await navigator.mediaDevices.getUserMedia({
175
+ video: false,
176
+ audio: audioDeviceId ? {
177
+ deviceId: {
178
+ exact: audioDeviceId
179
+ }
180
+ } : true
181
+ });
182
+ audioStreamRef.current = stream;
183
+ const Ctx = window.AudioContext || window.webkitAudioContext;
184
+ const ctx = new Ctx();
185
+ audioCtxRef.current = ctx;
186
+ const source = ctx.createMediaStreamSource(stream);
187
+ const analyser = ctx.createAnalyser();
188
+ analyser.fftSize = 512;
189
+ source.connect(analyser);
190
+ const data = new Uint8Array(analyser.frequencyBinCount);
191
+ const tick = () => {
192
+ analyser.getByteTimeDomainData(data);
193
+ let peak = 0;
194
+ for (let i = 0; i < data.length; i++) {
195
+ const v = Math.abs(data[i] - 128);
196
+ if (v > peak) peak = v;
197
+ }
198
+ setMicLevel(Math.min(100, Math.round(peak / 128 * 140)));
199
+ rafRef.current = requestAnimationFrame(tick);
200
+ };
201
+ tick();
202
+ setStatusMessage(null);
203
+ refreshDevices();
204
+ } catch (e) {
205
+ console.error('VCSettings: microphone access failed', e);
206
+ setAudioOn(false);
207
+ setStatusMessage('Could not access the microphone — check your browser permissions.');
208
+ }
209
+ }, [audioDeviceId, stopMic, refreshDevices]);
210
+
211
+ // ---- lifecycle ----------------------------------------------------------
212
+ _react.default.useEffect(() => {
213
+ let cancelled = false;
214
+ (async () => {
215
+ await refreshDevices();
216
+ if (!cancelled) setReady(true);
217
+ })();
218
+ const onDeviceChange = () => refreshDevices();
219
+ navigator.mediaDevices.addEventListener && navigator.mediaDevices.addEventListener('devicechange', onDeviceChange);
220
+ return () => {
221
+ cancelled = true;
222
+ navigator.mediaDevices.removeEventListener && navigator.mediaDevices.removeEventListener('devicechange', onDeviceChange);
223
+ if (detachTimerRef.current) clearTimeout(detachTimerRef.current);
224
+ stopVideo();
225
+ stopMic();
226
+ };
227
+ // eslint-disable-next-line react-hooks/exhaustive-deps
228
+ }, []);
229
+ _react.default.useEffect(() => {
230
+ if (videoOn) startVideo();else stopVideo();
231
+ // eslint-disable-next-line react-hooks/exhaustive-deps
232
+ }, [videoOn, videoDeviceId]);
233
+ _react.default.useEffect(() => {
234
+ if (audioOn) startMic();else stopMic();
235
+ // eslint-disable-next-line react-hooks/exhaustive-deps
236
+ }, [audioOn, audioDeviceId]);
237
+
238
+ // value + VALUE_CHANGE
239
+ _react.default.useEffect(() => {
240
+ valueRef.current = {
241
+ audioOn,
242
+ videoOn,
243
+ audioDeviceId: audioDeviceId || null,
244
+ videoDeviceId: videoDeviceId || null,
245
+ isAudioDeviceConnected: audioConnected,
246
+ isVideoDeviceConnected: videoConnected
247
+ };
248
+ if (ready && props.handle) {
249
+ _Observable.default.fireEvent(_EventType.default.VALUE_CHANGE, new _Event.default(props.handle, props.viewId, valueRef.current));
250
+ }
251
+ // eslint-disable-next-line react-hooks/exhaustive-deps
252
+ }, [audioOn, videoOn, audioDeviceId, videoDeviceId, audioConnected, videoConnected, ready]);
253
+
254
+ // expose the CDUI handle api
255
+ _react.default.useEffect(() => {
256
+ props.handle.api = {
257
+ get id() {
258
+ return props.config.id;
259
+ },
260
+ get value() {
261
+ return valueRef.current;
262
+ },
263
+ set value(v) {
264
+ if (_Utils.default.isNull(v)) return;
265
+ setVideoOn(!!v.videoOn);
266
+ setAudioOn(!!v.audioOn);
267
+ if (v.videoDeviceId) setVideoDeviceId(v.videoDeviceId);
268
+ if (v.audioDeviceId) setAudioDeviceId(v.audioDeviceId);
269
+ },
270
+ refresh: () => refreshDevices(),
271
+ getChildren: () => []
272
+ };
273
+ });
274
+
275
+ // ---- presentation -------------------------------------------------------
276
+ const deviceLabel = (device, kind, index) => device.label || "".concat(kind, " ").concat(index + 1);
277
+ const controlRow = opts => /*#__PURE__*/_react.default.createElement(_material.Box, {
278
+ sx: {
279
+ display: 'flex',
280
+ alignItems: 'center',
281
+ gap: 1.5,
282
+ width: '100%',
283
+ padding: '10px 12px',
284
+ borderRadius: '8px',
285
+ border: '1px solid #e6eaf0',
286
+ background: '#fff',
287
+ opacity: opts.connected ? 1 : 0.6
288
+ }
289
+ }, /*#__PURE__*/_react.default.createElement(_material.Box, {
290
+ sx: {
291
+ color: opts.on ? primary : '#8a96a3',
292
+ display: 'flex'
293
+ }
294
+ }, opts.icon), /*#__PURE__*/_react.default.createElement(_material.Switch, {
295
+ checked: opts.on,
296
+ disabled: !opts.connected,
297
+ onChange: e => opts.onToggle(e.target.checked),
298
+ size: "small"
299
+ }), /*#__PURE__*/_react.default.createElement(_material.FormControl, {
300
+ size: "small",
301
+ sx: {
302
+ flex: 1,
303
+ minWidth: 0
304
+ }
305
+ }, /*#__PURE__*/_react.default.createElement(_material.Select, {
306
+ value: opts.deviceId || '',
307
+ displayEmpty: true,
308
+ disabled: !opts.connected,
309
+ onChange: e => opts.onSelect(e.target.value),
310
+ sx: {
311
+ fontSize: 13,
312
+ background: '#fff'
313
+ }
314
+ }, opts.devices.length === 0 && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
315
+ value: ""
316
+ }, /*#__PURE__*/_react.default.createElement("em", null, "No device")), opts.devices.map((d, i) => /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
317
+ key: d.deviceId || i,
318
+ value: d.deviceId,
319
+ sx: {
320
+ fontSize: 13
321
+ }
322
+ }, deviceLabel(d, opts.kindLabel, i))))), opts.meter);
323
+ const videoBlock = /*#__PURE__*/_react.default.createElement(_material.Box, {
324
+ sx: _objectSpread({
325
+ position: 'relative',
326
+ borderRadius: '12px',
327
+ overflow: 'hidden',
328
+ background: '#11202e',
329
+ display: 'flex',
330
+ alignItems: 'center',
331
+ justifyContent: 'center',
332
+ aspectRatio: '1 / 1'
333
+ }, stacked ? {
334
+ width: '100%',
335
+ maxWidth: 420,
336
+ alignSelf: 'center'
337
+ } // row 2 — spans full width
338
+ : {
339
+ width: '40%',
340
+ minWidth: 180,
341
+ maxWidth: 300,
342
+ flex: '0 0 auto'
343
+ })
344
+ }, /*#__PURE__*/_react.default.createElement("video", {
345
+ ref: attachVideoEl,
346
+ muted: true,
347
+ playsInline: true,
348
+ autoPlay: true,
349
+ hidden: !videoOn,
350
+ style: {
351
+ width: '100%',
352
+ height: '100%',
353
+ objectFit: 'cover',
354
+ transform: 'scaleX(-1)' // mirror, Teams-style
355
+ }
356
+ }), !videoOn && /*#__PURE__*/_react.default.createElement(_material.Box, {
357
+ sx: {
358
+ textAlign: 'center',
359
+ color: '#cfd8e3'
360
+ }
361
+ }, /*#__PURE__*/_react.default.createElement(_VideocamOff.default, {
362
+ sx: {
363
+ fontSize: 44,
364
+ opacity: 0.7
365
+ }
366
+ }), /*#__PURE__*/_react.default.createElement(_material.Typography, {
367
+ sx: {
368
+ fontSize: 14,
369
+ mt: 1,
370
+ opacity: 0.85
371
+ }
372
+ }, "Your camera is off")));
373
+ const controlsBlock = /*#__PURE__*/_react.default.createElement(_material.Box, {
374
+ sx: _objectSpread(_objectSpread({
375
+ minWidth: 0
376
+ }, stacked ? {
377
+ width: '100%',
378
+ maxWidth: 420,
379
+ alignSelf: 'center',
380
+ flex: '0 0 auto'
381
+ } : {
382
+ flex: '0 1 360px',
383
+ maxWidth: 360
384
+ }), {}, {
385
+ display: 'flex',
386
+ flexDirection: 'column',
387
+ gap: 1.5,
388
+ justifyContent: stacked ? 'flex-start' : 'center'
389
+ })
390
+ }, /*#__PURE__*/_react.default.createElement(_material.Typography, {
391
+ sx: {
392
+ fontSize: 13,
393
+ color: '#6b7785',
394
+ fontWeight: 600
395
+ }
396
+ }, attr('label', 'Audio and video settings')), controlRow({
397
+ on: videoOn,
398
+ connected: videoConnected,
399
+ onToggle: setVideoOn,
400
+ icon: videoOn ? /*#__PURE__*/_react.default.createElement(_Videocam.default, null) : /*#__PURE__*/_react.default.createElement(_VideocamOff.default, null),
401
+ devices: videoDevices,
402
+ deviceId: videoDeviceId,
403
+ onSelect: setVideoDeviceId,
404
+ kindLabel: 'Camera'
405
+ }), controlRow({
406
+ on: audioOn,
407
+ connected: audioConnected,
408
+ onToggle: setAudioOn,
409
+ icon: audioOn ? /*#__PURE__*/_react.default.createElement(_Mic.default, null) : /*#__PURE__*/_react.default.createElement(_MicOff.default, null),
410
+ devices: audioDevices,
411
+ deviceId: audioDeviceId,
412
+ onSelect: setAudioDeviceId,
413
+ kindLabel: 'Microphone',
414
+ meter: /*#__PURE__*/_react.default.createElement(_material.Box, {
415
+ sx: {
416
+ width: 56,
417
+ height: 6,
418
+ borderRadius: 3,
419
+ background: '#e6eaf0',
420
+ overflow: 'hidden',
421
+ flexShrink: 0
422
+ }
423
+ }, /*#__PURE__*/_react.default.createElement(_material.Box, {
424
+ sx: {
425
+ width: "".concat(audioOn ? micLevel : 0, "%"),
426
+ height: '100%',
427
+ background: primary,
428
+ transition: 'width 90ms linear'
429
+ }
430
+ }))
431
+ }), statusMessage && /*#__PURE__*/_react.default.createElement(_material.Typography, {
432
+ sx: {
433
+ fontSize: 12,
434
+ color: '#f1416c'
435
+ }
436
+ }, statusMessage), !videoConnected && !audioConnected && ready && /*#__PURE__*/_react.default.createElement(_material.Typography, {
437
+ sx: {
438
+ fontSize: 12,
439
+ color: '#f1416c'
440
+ }
441
+ }, "No camera or microphone detected."));
442
+ return /*#__PURE__*/_react.default.createElement(_material.Box, {
443
+ ref: containerRef,
444
+ style: _Utils.default.mergeStyles({
445
+ width: '100%',
446
+ height: '100%'
447
+ }, props.config)
448
+ }, /*#__PURE__*/_react.default.createElement(_material.Box, {
449
+ sx: {
450
+ display: 'flex',
451
+ flexDirection: stacked ? 'column' : 'row',
452
+ gap: 2,
453
+ width: '100%',
454
+ height: '100%',
455
+ justifyContent: 'center',
456
+ alignItems: 'center',
457
+ overflow: 'auto'
458
+ }
459
+ }, stacked ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, controlsBlock, videoBlock) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, videoBlock, controlsBlock)));
460
+ };
461
+ var _default = exports.default = VCSettings;
462
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9VdGlscyIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfT2JzZXJ2YWJsZSIsIl9FdmVudCIsIl9FdmVudFR5cGUiLCJfbWF0ZXJpYWwiLCJfVmlkZW9jYW0iLCJfVmlkZW9jYW1PZmYiLCJfTWljIiwiX01pY09mZiIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIm93bktleXMiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImkiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJWQ1NldHRpbmdzIiwicHJvcHMiLCJwcmltYXJ5IiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IiLCJhdHRyIiwibmFtZSIsImZhbGxiYWNrIiwiVXRpbHMiLCJnZXRDb21wb25lbnRBdHRyaWJ1dGUiLCJjb25maWciLCJjb250YWluZXJSZWYiLCJSZWFjdCIsInVzZVJlZiIsImNvbnRhaW5lcldpZHRoIiwic2V0Q29udGFpbmVyV2lkdGgiLCJ1c2VTdGF0ZSIsInN0YWNrZWQiLCJyZWFkeSIsInNldFJlYWR5IiwidmlkZW9PbiIsInNldFZpZGVvT24iLCJhdWRpb09uIiwic2V0QXVkaW9PbiIsInZpZGVvRGV2aWNlcyIsInNldFZpZGVvRGV2aWNlcyIsImF1ZGlvRGV2aWNlcyIsInNldEF1ZGlvRGV2aWNlcyIsInZpZGVvRGV2aWNlSWQiLCJzZXRWaWRlb0RldmljZUlkIiwiYXVkaW9EZXZpY2VJZCIsInNldEF1ZGlvRGV2aWNlSWQiLCJtaWNMZXZlbCIsInNldE1pY0xldmVsIiwic3RhdHVzTWVzc2FnZSIsInNldFN0YXR1c01lc3NhZ2UiLCJ2aWRlb0VsUmVmIiwidmlkZW9TdHJlYW1SZWYiLCJhdWRpb1N0cmVhbVJlZiIsImF1ZGlvQ3R4UmVmIiwicmFmUmVmIiwidmFsdWVSZWYiLCJkZXRhY2hUaW1lclJlZiIsInZpZGVvQ29ubmVjdGVkIiwiYXVkaW9Db25uZWN0ZWQiLCJ1c2VMYXlvdXRFZmZlY3QiLCJlbCIsImN1cnJlbnQiLCJtZWFzdXJlIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJybyIsIlJlc2l6ZU9ic2VydmVyIiwib2JzZXJ2ZSIsImRpc2Nvbm5lY3QiLCJyZWZyZXNoRGV2aWNlcyIsInVzZUNhbGxiYWNrIiwiZGV2aWNlcyIsIm5hdmlnYXRvciIsIm1lZGlhRGV2aWNlcyIsImVudW1lcmF0ZURldmljZXMiLCJjYW1zIiwiZCIsImtpbmQiLCJtaWNzIiwicHJldiIsImRldmljZUlkIiwiY29uc29sZSIsImVycm9yIiwic3RvcFZpZGVvIiwiZ2V0VHJhY2tzIiwic3RvcCIsInNyY09iamVjdCIsImF0dGFjaFZpZGVvRWwiLCJub2RlIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInN0YXJ0VmlkZW8iLCJzdHJlYW0iLCJnZXRVc2VyTWVkaWEiLCJhdWRpbyIsInZpZGVvIiwiZXhhY3QiLCJzdG9wTWljIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJjbG9zZSIsImNhdGNoIiwic3RhcnRNaWMiLCJDdHgiLCJ3aW5kb3ciLCJBdWRpb0NvbnRleHQiLCJ3ZWJraXRBdWRpb0NvbnRleHQiLCJjdHgiLCJzb3VyY2UiLCJjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZSIsImFuYWx5c2VyIiwiY3JlYXRlQW5hbHlzZXIiLCJmZnRTaXplIiwiY29ubmVjdCIsImRhdGEiLCJVaW50OEFycmF5IiwiZnJlcXVlbmN5QmluQ291bnQiLCJ0aWNrIiwiZ2V0Qnl0ZVRpbWVEb21haW5EYXRhIiwicGVhayIsInYiLCJNYXRoIiwiYWJzIiwibWluIiwicm91bmQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ1c2VFZmZlY3QiLCJjYW5jZWxsZWQiLCJvbkRldmljZUNoYW5nZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaXNBdWRpb0RldmljZUNvbm5lY3RlZCIsImlzVmlkZW9EZXZpY2VDb25uZWN0ZWQiLCJoYW5kbGUiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJWQUxVRV9DSEFOR0UiLCJFdmVudCIsInZpZXdJZCIsImFwaSIsImlkIiwiaXNOdWxsIiwicmVmcmVzaCIsImdldENoaWxkcmVuIiwiZGV2aWNlTGFiZWwiLCJkZXZpY2UiLCJpbmRleCIsImxhYmVsIiwiY29uY2F0IiwiY29udHJvbFJvdyIsIm9wdHMiLCJjcmVhdGVFbGVtZW50IiwiQm94Iiwic3giLCJkaXNwbGF5IiwiYWxpZ25JdGVtcyIsImdhcCIsInBhZGRpbmciLCJib3JkZXJSYWRpdXMiLCJib3JkZXIiLCJiYWNrZ3JvdW5kIiwib3BhY2l0eSIsImNvbm5lY3RlZCIsImNvbG9yIiwib24iLCJpY29uIiwiU3dpdGNoIiwiY2hlY2tlZCIsImRpc2FibGVkIiwib25DaGFuZ2UiLCJvblRvZ2dsZSIsInRhcmdldCIsInNpemUiLCJGb3JtQ29udHJvbCIsImZsZXgiLCJtaW5XaWR0aCIsIlNlbGVjdCIsImRpc3BsYXlFbXB0eSIsIm9uU2VsZWN0IiwiZm9udFNpemUiLCJNZW51SXRlbSIsIm1hcCIsImtleSIsImtpbmRMYWJlbCIsIm1ldGVyIiwidmlkZW9CbG9jayIsInBvc2l0aW9uIiwib3ZlcmZsb3ciLCJqdXN0aWZ5Q29udGVudCIsImFzcGVjdFJhdGlvIiwibWF4V2lkdGgiLCJhbGlnblNlbGYiLCJyZWYiLCJtdXRlZCIsInBsYXlzSW5saW5lIiwiYXV0b1BsYXkiLCJoaWRkZW4iLCJzdHlsZSIsImhlaWdodCIsIm9iamVjdEZpdCIsInRyYW5zZm9ybSIsInRleHRBbGlnbiIsIlR5cG9ncmFwaHkiLCJtdCIsImNvbnRyb2xzQmxvY2siLCJmbGV4RGlyZWN0aW9uIiwiZm9udFdlaWdodCIsImZsZXhTaHJpbmsiLCJ0cmFuc2l0aW9uIiwibWVyZ2VTdHlsZXMiLCJGcmFnbWVudCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tZWRpYS9WQ1NldHRpbmdzLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL1V0aWxzJztcbmltcG9ydCBhcHBsaWNhdGlvbk1hbmFnZXIgZnJvbSAnLi4vLi4vQXBwbGljYXRpb25NYW5hZ2VyJztcbmltcG9ydCBldmVudE1hbmFnZXIgZnJvbSAnLi4vLi4vZXZlbnQvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgRXZlbnQgZnJvbSAnLi4vLi4vZXZlbnQvRXZlbnQnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuLi8uLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IHtCb3gsIEZvcm1Db250cm9sLCBNZW51SXRlbSwgU2VsZWN0LCBTd2l0Y2gsIFR5cG9ncmFwaHl9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IFZpZGVvY2FtSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL1ZpZGVvY2FtJztcbmltcG9ydCBWaWRlb2NhbU9mZkljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9WaWRlb2NhbU9mZic7XG5pbXBvcnQgTWljSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL01pYyc7XG5pbXBvcnQgTWljT2ZmSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL01pY09mZic7XG5cbi8qKlxuICogVkNTZXR0aW5ncyDigJQgcHJlLWpvaW4gYXVkaW8vdmlkZW8gc2V0dGluZ3MgKENEVUkgY29tcG9uZW50IHR5cGUgYHZjU2V0dGluZ3NgKS5cbiAqXG4gKiBSZXBsYWNlcyB0aGUgaGFuZC1hc3NlbWJsZWQgdmMtc2V0dGluZ3MuanNvbiBmb3JtLiBTZWxmLWNvbnRhaW5lZDogbGl2ZSBjYW1lcmFcbiAqIHByZXZpZXcsIGNhbWVyYSArIG1pY3JvcGhvbmUgZGV2aWNlIHNlbGVjdGlvbiwgYSBsaXZlIG1pYy1sZXZlbCB0ZXN0IG1ldGVyLCBhbmRcbiAqIG9uL29mZiB0b2dnbGVzLiBFeHBvc2VzIGl0cyB2YWx1ZSB2aWEge0Bjb2RlIGhhbmRsZS5hcGkudmFsdWV9IGFuZCBmaXJlc1xuICogVkFMVUVfQ0hBTkdFIHNvIHRoZSB2aWV3IGNhbiBwdXNoIGl0IHRvIHtAY29kZSBAI3t2Y0Zsb3d9Lm1vZGVsLnNldHRpbmdzfS4gVGhlXG4gKiBDbG9zZS9KT0lOIGFjdGlvbnMgc3RheSBpbiB0aGUgdmlldyAodGhpcyBjb21wb25lbnQgb3ducyBvbmx5IHRoZSBBViBjb250cm9scykuXG4gKlxuICogVmFsdWUgc2hhcGU6IHsgYXVkaW9PbiwgdmlkZW9PbiwgYXVkaW9EZXZpY2VJZCwgdmlkZW9EZXZpY2VJZCxcbiAqICAgICAgICAgICAgICAgIGlzQXVkaW9EZXZpY2VDb25uZWN0ZWQsIGlzVmlkZW9EZXZpY2VDb25uZWN0ZWQgfS5cbiAqL1xuY29uc3QgVkNTZXR0aW5ncyA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHByaW1hcnkgPSBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IoKSB8fCAnIzFhM2M1ZSc7XG4gICAgY29uc3QgYXR0ciA9IChuYW1lLCBmYWxsYmFjaykgPT4gVXRpbHMuZ2V0Q29tcG9uZW50QXR0cmlidXRlKHByb3BzLmNvbmZpZywgbmFtZSwgZmFsbGJhY2spO1xuXG4gICAgLy8gUmVzcG9uc2l2ZSB0byB0aGUgQ09NUE9ORU5UJ3Mgb3duIHdpZHRoIChub3QgdGhlIHZpZXdwb3J0KSDigJQgc28gYSBwaW5uZWRcbiAgICAvLyB+MzIwcHggd2luZG93IHN0YWNrcyBldmVuIHdoZW4gdGhlIGJyb3dzZXIgd2luZG93IGlzIHdpZGUuIE1lYXN1cmVkIHZpYVxuICAgIC8vIFJlc2l6ZU9ic2VydmVyIG9uIHRoZSByb290IGNvbnRhaW5lciBiZWxvdy5cbiAgICBjb25zdCBjb250YWluZXJSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgW2NvbnRhaW5lcldpZHRoLCBzZXRDb250YWluZXJXaWR0aF0gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBzdGFja2VkID0gY29udGFpbmVyV2lkdGggPiAwICYmIGNvbnRhaW5lcldpZHRoIDwgNTYwO1xuXG4gICAgY29uc3QgW3JlYWR5LCBzZXRSZWFkeV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3ZpZGVvT24sIHNldFZpZGVvT25dID0gUmVhY3QudXNlU3RhdGUoISFhdHRyKCdkZWZhdWx0VmlkZW9PbicsIGZhbHNlKSk7XG4gICAgY29uc3QgW2F1ZGlvT24sIHNldEF1ZGlvT25dID0gUmVhY3QudXNlU3RhdGUoISFhdHRyKCdkZWZhdWx0QXVkaW9PbicsIGZhbHNlKSk7XG4gICAgY29uc3QgW3ZpZGVvRGV2aWNlcywgc2V0VmlkZW9EZXZpY2VzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbYXVkaW9EZXZpY2VzLCBzZXRBdWRpb0RldmljZXNdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFt2aWRlb0RldmljZUlkLCBzZXRWaWRlb0RldmljZUlkXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbYXVkaW9EZXZpY2VJZCwgc2V0QXVkaW9EZXZpY2VJZF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gICAgY29uc3QgW21pY0xldmVsLCBzZXRNaWNMZXZlbF0gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbc3RhdHVzTWVzc2FnZSwgc2V0U3RhdHVzTWVzc2FnZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcblxuICAgIGNvbnN0IHZpZGVvRWxSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgdmlkZW9TdHJlYW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgYXVkaW9TdHJlYW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgYXVkaW9DdHhSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgcmFmUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IHZhbHVlUmVmID0gUmVhY3QudXNlUmVmKHt9KTtcbiAgICBjb25zdCBkZXRhY2hUaW1lclJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcblxuICAgIGNvbnN0IHZpZGVvQ29ubmVjdGVkID0gdmlkZW9EZXZpY2VzLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgYXVkaW9Db25uZWN0ZWQgPSBhdWRpb0RldmljZXMubGVuZ3RoID4gMDtcblxuICAgIC8vIFRyYWNrIHRoZSBjb21wb25lbnQncyBvd24gd2lkdGggc28gdGhlIGxheW91dCByZXNwb25kcyB0byBpdHMgY29udGFpbmVyXG4gICAgLy8gKGUuZy4gdGhlIHBpbm5lZCB3aW5kb3cpIHJhdGhlciB0aGFuIHRoZSBicm93c2VyIHZpZXdwb3J0LlxuICAgIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsID0gY29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICghZWwpIHJldHVybjtcbiAgICAgICAgY29uc3QgbWVhc3VyZSA9ICgpID0+IHNldENvbnRhaW5lcldpZHRoKGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcbiAgICAgICAgbWVhc3VyZSgpO1xuICAgICAgICBsZXQgcm87XG4gICAgICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBybyA9IG5ldyBSZXNpemVPYnNlcnZlcihtZWFzdXJlKTtcbiAgICAgICAgICAgIHJvLm9ic2VydmUoZWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoKSA9PiBybyAmJiByby5kaXNjb25uZWN0KCk7XG4gICAgfSwgW10pO1xuXG4gICAgLy8gLS0tLSBkZXZpY2UgZW51bWVyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHJlZnJlc2hEZXZpY2VzID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGV2aWNlcyA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpO1xuICAgICAgICAgICAgY29uc3QgY2FtcyA9IGRldmljZXMuZmlsdGVyKChkKSA9PiBkLmtpbmQgPT09ICd2aWRlb2lucHV0Jyk7XG4gICAgICAgICAgICBjb25zdCBtaWNzID0gZGV2aWNlcy5maWx0ZXIoKGQpID0+IGQua2luZCA9PT0gJ2F1ZGlvaW5wdXQnKTtcbiAgICAgICAgICAgIHNldFZpZGVvRGV2aWNlcyhjYW1zKTtcbiAgICAgICAgICAgIHNldEF1ZGlvRGV2aWNlcyhtaWNzKTtcbiAgICAgICAgICAgIHNldFZpZGVvRGV2aWNlSWQoKHByZXYpID0+IHByZXYgfHwgKGNhbXNbMF0gPyBjYW1zWzBdLmRldmljZUlkIDogJycpKTtcbiAgICAgICAgICAgIHNldEF1ZGlvRGV2aWNlSWQoKHByZXYpID0+IHByZXYgfHwgKG1pY3NbMF0gPyBtaWNzWzBdLmRldmljZUlkIDogJycpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVkNTZXR0aW5nczogZW51bWVyYXRlRGV2aWNlcyBmYWlsZWQnLCBlKTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcblxuICAgIC8vIC0tLS0gY2FtZXJhIHByZXZpZXcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBzdG9wVmlkZW8gPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIGlmICh2aWRlb1N0cmVhbVJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICB2aWRlb1N0cmVhbVJlZi5jdXJyZW50LmdldFRyYWNrcygpLmZvckVhY2goKHQpID0+IHQuc3RvcCgpKTtcbiAgICAgICAgICAgIHZpZGVvU3RyZWFtUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2aWRlb0VsUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHZpZGVvRWxSZWYuY3VycmVudC5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuXG4gICAgLy8gQ2FsbGJhY2sgcmVmIG9uIHRoZSBwcmV2aWV3IDx2aWRlbz4uIEtlZXBzIHRoZSBjYW1lcmEgc3RyaWN0bHkgdGllZCB0byBhblxuICAgIC8vIGF0dGFjaGVkIHZpZGVvIGVsZW1lbnQ6IHJlLWF0dGFjaGVzIHRoZSBsaXZlIHN0cmVhbSB3aGVuIHRoZSBlbGVtZW50XG4gICAgLy8gKHJlKW1vdW50cyAoZS5nLiBhIGxheW91dCByZWZsb3cgcmVjcmVhdGVzIGl0KSwgYW5kIHJlbGVhc2VzIHRoZSBjYW1lcmEgaWZcbiAgICAvLyB0aGUgZWxlbWVudCBpcyBnZW51aW5lbHkgcmVtb3ZlZC4gVGhlIGRlZmVycmVkIGNoZWNrIGRpc3Rpbmd1aXNoZXMgYVxuICAgIC8vIHJlZmxvdyByZW1vdW50IChlbGVtZW50IGNvbWVzIHN0cmFpZ2h0IGJhY2sg4oaSIGtlZXApIGZyb20gcmVhbCByZW1vdmFsXG4gICAgLy8gKGVsZW1lbnQgc3RheXMgZ29uZSDihpIgc3RvcCArIGZsaXAgdGhlIHRvZ2dsZSBvZmYpLlxuICAgIGNvbnN0IGF0dGFjaFZpZGVvRWwgPSBSZWFjdC51c2VDYWxsYmFjaygobm9kZSkgPT4ge1xuICAgICAgICB2aWRlb0VsUmVmLmN1cnJlbnQgPSBub2RlO1xuICAgICAgICBpZiAoZGV0YWNoVGltZXJSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRldGFjaFRpbWVyUmVmLmN1cnJlbnQpO1xuICAgICAgICAgICAgZGV0YWNoVGltZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIGlmICh2aWRlb1N0cmVhbVJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgbm9kZS5zcmNPYmplY3QgPSB2aWRlb1N0cmVhbVJlZi5jdXJyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGV0YWNoVGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdmlkZW9FbFJlZi5jdXJyZW50ICYmIHZpZGVvU3RyZWFtUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcFZpZGVvKCk7XG4gICAgICAgICAgICAgICAgICAgIHNldFZpZGVvT24oZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgfSwgW3N0b3BWaWRlb10pO1xuXG4gICAgY29uc3Qgc3RhcnRWaWRlbyA9IFJlYWN0LnVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICAgICAgc3RvcFZpZGVvKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7XG4gICAgICAgICAgICAgICAgYXVkaW86IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZpZGVvOiB2aWRlb0RldmljZUlkID8ge2RldmljZUlkOiB7ZXhhY3Q6IHZpZGVvRGV2aWNlSWR9fSA6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZpZGVvU3RyZWFtUmVmLmN1cnJlbnQgPSBzdHJlYW07XG4gICAgICAgICAgICBpZiAodmlkZW9FbFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgdmlkZW9FbFJlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFN0YXR1c01lc3NhZ2UobnVsbCk7XG4gICAgICAgICAgICByZWZyZXNoRGV2aWNlcygpOyAvLyBsYWJlbHMgYmVjb21lIGF2YWlsYWJsZSBvbmNlIHBlcm1pc3Npb24gaXMgZ3JhbnRlZFxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdWQ1NldHRpbmdzOiBjYW1lcmEgYWNjZXNzIGZhaWxlZCcsIGUpO1xuICAgICAgICAgICAgc2V0VmlkZW9PbihmYWxzZSk7XG4gICAgICAgICAgICBzZXRTdGF0dXNNZXNzYWdlKCdDb3VsZCBub3QgYWNjZXNzIHRoZSBjYW1lcmEg4oCUIGNoZWNrIHlvdXIgYnJvd3NlciBwZXJtaXNzaW9ucy4nKTtcbiAgICAgICAgfVxuICAgIH0sIFt2aWRlb0RldmljZUlkLCBzdG9wVmlkZW8sIHJlZnJlc2hEZXZpY2VzXSk7XG5cbiAgICAvLyAtLS0tIG1pY3JvcGhvbmUgdGVzdCAobGV2ZWwgbWV0ZXIpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3Qgc3RvcE1pYyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgaWYgKHJhZlJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZSZWYuY3VycmVudCk7XG4gICAgICAgICAgICByYWZSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF1ZGlvU3RyZWFtUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGF1ZGlvU3RyZWFtUmVmLmN1cnJlbnQuZ2V0VHJhY2tzKCkuZm9yRWFjaCgodCkgPT4gdC5zdG9wKCkpO1xuICAgICAgICAgICAgYXVkaW9TdHJlYW1SZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF1ZGlvQ3R4UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGF1ZGlvQ3R4UmVmLmN1cnJlbnQuY2xvc2UoKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICAgICAgICBhdWRpb0N0eFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzZXRNaWNMZXZlbCgwKTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBzdGFydE1pYyA9IFJlYWN0LnVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICAgICAgc3RvcE1pYygpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoe1xuICAgICAgICAgICAgICAgIHZpZGVvOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBhdWRpbzogYXVkaW9EZXZpY2VJZCA/IHtkZXZpY2VJZDoge2V4YWN0OiBhdWRpb0RldmljZUlkfX0gOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhdWRpb1N0cmVhbVJlZi5jdXJyZW50ID0gc3RyZWFtO1xuICAgICAgICAgICAgY29uc3QgQ3R4ID0gd2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0O1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gbmV3IEN0eCgpO1xuICAgICAgICAgICAgYXVkaW9DdHhSZWYuY3VycmVudCA9IGN0eDtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGN0eC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShzdHJlYW0pO1xuICAgICAgICAgICAgY29uc3QgYW5hbHlzZXIgPSBjdHguY3JlYXRlQW5hbHlzZXIoKTtcbiAgICAgICAgICAgIGFuYWx5c2VyLmZmdFNpemUgPSA1MTI7XG4gICAgICAgICAgICBzb3VyY2UuY29ubmVjdChhbmFseXNlcik7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoYW5hbHlzZXIuZnJlcXVlbmN5QmluQ291bnQpO1xuICAgICAgICAgICAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBhbmFseXNlci5nZXRCeXRlVGltZURvbWFpbkRhdGEoZGF0YSk7XG4gICAgICAgICAgICAgICAgbGV0IHBlYWsgPSAwO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gTWF0aC5hYnMoZGF0YVtpXSAtIDEyOCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ID4gcGVhaykgcGVhayA9IHY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldE1pY0xldmVsKE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZCgocGVhayAvIDEyOCkgKiAxNDApKSk7XG4gICAgICAgICAgICAgICAgcmFmUmVmLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGljaygpO1xuICAgICAgICAgICAgc2V0U3RhdHVzTWVzc2FnZShudWxsKTtcbiAgICAgICAgICAgIHJlZnJlc2hEZXZpY2VzKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1ZDU2V0dGluZ3M6IG1pY3JvcGhvbmUgYWNjZXNzIGZhaWxlZCcsIGUpO1xuICAgICAgICAgICAgc2V0QXVkaW9PbihmYWxzZSk7XG4gICAgICAgICAgICBzZXRTdGF0dXNNZXNzYWdlKCdDb3VsZCBub3QgYWNjZXNzIHRoZSBtaWNyb3Bob25lIOKAlCBjaGVjayB5b3VyIGJyb3dzZXIgcGVybWlzc2lvbnMuJyk7XG4gICAgICAgIH1cbiAgICB9LCBbYXVkaW9EZXZpY2VJZCwgc3RvcE1pYywgcmVmcmVzaERldmljZXNdKTtcblxuICAgIC8vIC0tLS0gbGlmZWN5Y2xlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZWZyZXNoRGV2aWNlcygpO1xuICAgICAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHNldFJlYWR5KHRydWUpO1xuICAgICAgICB9KSgpO1xuICAgICAgICBjb25zdCBvbkRldmljZUNoYW5nZSA9ICgpID0+IHJlZnJlc2hEZXZpY2VzKCk7XG4gICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuYWRkRXZlbnRMaXN0ZW5lciAmJlxuICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5hZGRFdmVudExpc3RlbmVyKCdkZXZpY2VjaGFuZ2UnLCBvbkRldmljZUNoYW5nZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5yZW1vdmVFdmVudExpc3RlbmVyICYmXG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5yZW1vdmVFdmVudExpc3RlbmVyKCdkZXZpY2VjaGFuZ2UnLCBvbkRldmljZUNoYW5nZSk7XG4gICAgICAgICAgICBpZiAoZGV0YWNoVGltZXJSZWYuY3VycmVudCkgY2xlYXJUaW1lb3V0KGRldGFjaFRpbWVyUmVmLmN1cnJlbnQpO1xuICAgICAgICAgICAgc3RvcFZpZGVvKCk7XG4gICAgICAgICAgICBzdG9wTWljKCk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICB9LCBbXSk7XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAodmlkZW9Pbikgc3RhcnRWaWRlbygpO1xuICAgICAgICBlbHNlIHN0b3BWaWRlbygpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW3ZpZGVvT24sIHZpZGVvRGV2aWNlSWRdKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChhdWRpb09uKSBzdGFydE1pYygpO1xuICAgICAgICBlbHNlIHN0b3BNaWMoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIH0sIFthdWRpb09uLCBhdWRpb0RldmljZUlkXSk7XG5cbiAgICAvLyB2YWx1ZSArIFZBTFVFX0NIQU5HRVxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHZhbHVlUmVmLmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBhdWRpb09uLFxuICAgICAgICAgICAgdmlkZW9PbixcbiAgICAgICAgICAgIGF1ZGlvRGV2aWNlSWQ6IGF1ZGlvRGV2aWNlSWQgfHwgbnVsbCxcbiAgICAgICAgICAgIHZpZGVvRGV2aWNlSWQ6IHZpZGVvRGV2aWNlSWQgfHwgbnVsbCxcbiAgICAgICAgICAgIGlzQXVkaW9EZXZpY2VDb25uZWN0ZWQ6IGF1ZGlvQ29ubmVjdGVkLFxuICAgICAgICAgICAgaXNWaWRlb0RldmljZUNvbm5lY3RlZDogdmlkZW9Db25uZWN0ZWQsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChyZWFkeSAmJiBwcm9wcy5oYW5kbGUpIHtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLlZBTFVFX0NIQU5HRSwgbmV3IEV2ZW50KHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkLCB2YWx1ZVJlZi5jdXJyZW50KSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIH0sIFthdWRpb09uLCB2aWRlb09uLCBhdWRpb0RldmljZUlkLCB2aWRlb0RldmljZUlkLCBhdWRpb0Nvbm5lY3RlZCwgdmlkZW9Db25uZWN0ZWQsIHJlYWR5XSk7XG5cbiAgICAvLyBleHBvc2UgdGhlIENEVUkgaGFuZGxlIGFwaVxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHByb3BzLmhhbmRsZS5hcGkgPSB7XG4gICAgICAgICAgICBnZXQgaWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLmNvbmZpZy5pZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IHZhbHVlKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHYpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgc2V0VmlkZW9PbighIXYudmlkZW9Pbik7XG4gICAgICAgICAgICAgICAgc2V0QXVkaW9PbighIXYuYXVkaW9Pbik7XG4gICAgICAgICAgICAgICAgaWYgKHYudmlkZW9EZXZpY2VJZCkgc2V0VmlkZW9EZXZpY2VJZCh2LnZpZGVvRGV2aWNlSWQpO1xuICAgICAgICAgICAgICAgIGlmICh2LmF1ZGlvRGV2aWNlSWQpIHNldEF1ZGlvRGV2aWNlSWQodi5hdWRpb0RldmljZUlkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWZyZXNoOiAoKSA9PiByZWZyZXNoRGV2aWNlcygpLFxuICAgICAgICAgICAgZ2V0Q2hpbGRyZW46ICgpID0+IFtdLFxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8gLS0tLSBwcmVzZW50YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGRldmljZUxhYmVsID0gKGRldmljZSwga2luZCwgaW5kZXgpID0+XG4gICAgICAgIGRldmljZS5sYWJlbCB8fCBgJHtraW5kfSAke2luZGV4ICsgMX1gO1xuXG4gICAgY29uc3QgY29udHJvbFJvdyA9IChvcHRzKSA9PiAoXG4gICAgICAgIDxCb3ggc3g9e3tcbiAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogMS41LCB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgcGFkZGluZzogJzEwcHggMTJweCcsIGJvcmRlclJhZGl1czogJzhweCcsIGJvcmRlcjogJzFweCBzb2xpZCAjZTZlYWYwJyxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjZmZmJywgb3BhY2l0eTogb3B0cy5jb25uZWN0ZWQgPyAxIDogMC42LFxuICAgICAgICB9fT5cbiAgICAgICAgICAgIDxCb3ggc3g9e3tjb2xvcjogb3B0cy5vbiA/IHByaW1hcnkgOiAnIzhhOTZhMycsIGRpc3BsYXk6ICdmbGV4J319PntvcHRzLmljb259PC9Cb3g+XG4gICAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICAgICAgY2hlY2tlZD17b3B0cy5vbn1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IW9wdHMuY29ubmVjdGVkfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gb3B0cy5vblRvZ2dsZShlLnRhcmdldC5jaGVja2VkKX1cbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxGb3JtQ29udHJvbCBzaXplPVwic21hbGxcIiBzeD17e2ZsZXg6IDEsIG1pbldpZHRoOiAwfX0+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17b3B0cy5kZXZpY2VJZCB8fCAnJ31cbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUVtcHR5XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshb3B0cy5jb25uZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gb3B0cy5vblNlbGVjdChlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIHN4PXt7Zm9udFNpemU6IDEzLCBiYWNrZ3JvdW5kOiAnI2ZmZid9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge29wdHMuZGV2aWNlcy5sZW5ndGggPT09IDAgJiYgPE1lbnVJdGVtIHZhbHVlPVwiXCI+PGVtPk5vIGRldmljZTwvZW0+PC9NZW51SXRlbT59XG4gICAgICAgICAgICAgICAgICAgIHtvcHRzLmRldmljZXMubWFwKChkLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8TWVudUl0ZW0ga2V5PXtkLmRldmljZUlkIHx8IGl9IHZhbHVlPXtkLmRldmljZUlkfSBzeD17e2ZvbnRTaXplOiAxM319PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkZXZpY2VMYWJlbChkLCBvcHRzLmtpbmRMYWJlbCwgaSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgIDwvRm9ybUNvbnRyb2w+XG4gICAgICAgICAgICB7b3B0cy5tZXRlcn1cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcblxuICAgIGNvbnN0IHZpZGVvQmxvY2sgPSAoXG4gICAgICAgIDxCb3ggc3g9e3tcbiAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLCBib3JkZXJSYWRpdXM6ICcxMnB4Jywgb3ZlcmZsb3c6ICdoaWRkZW4nLCBiYWNrZ3JvdW5kOiAnIzExMjAyZScsXG4gICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICBhc3BlY3RSYXRpbzogJzEgLyAxJywgLy8gc3F1YXJlIHByZXZpZXdcbiAgICAgICAgICAgIC4uLihzdGFja2VkXG4gICAgICAgICAgICAgICAgPyB7d2lkdGg6ICcxMDAlJywgbWF4V2lkdGg6IDQyMCwgYWxpZ25TZWxmOiAnY2VudGVyJ30gICAgICAgICAgICAvLyByb3cgMiDigJQgc3BhbnMgZnVsbCB3aWR0aFxuICAgICAgICAgICAgICAgIDoge3dpZHRoOiAnNDAlJywgbWluV2lkdGg6IDE4MCwgbWF4V2lkdGg6IDMwMCwgZmxleDogJzAgMCBhdXRvJ30pLCAvLyBtb2Rlc3Qgc3F1YXJlIGJlc2lkZSBjb250cm9sc1xuICAgICAgICB9fT5cbiAgICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgICAgIHJlZj17YXR0YWNoVmlkZW9FbH1cbiAgICAgICAgICAgICAgICBtdXRlZCBwbGF5c0lubGluZSBhdXRvUGxheVxuICAgICAgICAgICAgICAgIGhpZGRlbj17IXZpZGVvT259XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnMTAwJScsIG9iamVjdEZpdDogJ2NvdmVyJyxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKC0xKScsIC8vIG1pcnJvciwgVGVhbXMtc3R5bGVcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHshdmlkZW9PbiAmJlxuICAgICAgICAgICAgICAgIDxCb3ggc3g9e3t0ZXh0QWxpZ246ICdjZW50ZXInLCBjb2xvcjogJyNjZmQ4ZTMnfX0+XG4gICAgICAgICAgICAgICAgICAgIDxWaWRlb2NhbU9mZkljb24gc3g9e3tmb250U2l6ZTogNDQsIG9wYWNpdHk6IDAuN319Lz5cbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgc3g9e3tmb250U2l6ZTogMTQsIG10OiAxLCBvcGFjaXR5OiAwLjg1fX0+WW91ciBjYW1lcmEgaXMgb2ZmPC9UeXBvZ3JhcGh5PlxuICAgICAgICAgICAgICAgIDwvQm94Pn1cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcblxuICAgIGNvbnN0IGNvbnRyb2xzQmxvY2sgPSAoXG4gICAgICAgIDxCb3ggc3g9e3tcbiAgICAgICAgICAgIG1pbldpZHRoOiAwLFxuICAgICAgICAgICAgLi4uKHN0YWNrZWRcbiAgICAgICAgICAgICAgICA/IHt3aWR0aDogJzEwMCUnLCBtYXhXaWR0aDogNDIwLCBhbGlnblNlbGY6ICdjZW50ZXInLCBmbGV4OiAnMCAwIGF1dG8nfVxuICAgICAgICAgICAgICAgIDoge2ZsZXg6ICcwIDEgMzYwcHgnLCBtYXhXaWR0aDogMzYwfSksXG4gICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDEuNSxcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBzdGFja2VkID8gJ2ZsZXgtc3RhcnQnIDogJ2NlbnRlcicsXG4gICAgICAgIH19PlxuICAgICAgICAgICAgPFR5cG9ncmFwaHkgc3g9e3tmb250U2l6ZTogMTMsIGNvbG9yOiAnIzZiNzc4NScsIGZvbnRXZWlnaHQ6IDYwMH19PlxuICAgICAgICAgICAgICAgIHthdHRyKCdsYWJlbCcsICdBdWRpbyBhbmQgdmlkZW8gc2V0dGluZ3MnKX1cbiAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cblxuICAgICAgICAgICAge2NvbnRyb2xSb3coe1xuICAgICAgICAgICAgICAgIG9uOiB2aWRlb09uLCBjb25uZWN0ZWQ6IHZpZGVvQ29ubmVjdGVkLCBvblRvZ2dsZTogc2V0VmlkZW9PbixcbiAgICAgICAgICAgICAgICBpY29uOiB2aWRlb09uID8gPFZpZGVvY2FtSWNvbi8+IDogPFZpZGVvY2FtT2ZmSWNvbi8+LFxuICAgICAgICAgICAgICAgIGRldmljZXM6IHZpZGVvRGV2aWNlcywgZGV2aWNlSWQ6IHZpZGVvRGV2aWNlSWQsIG9uU2VsZWN0OiBzZXRWaWRlb0RldmljZUlkLFxuICAgICAgICAgICAgICAgIGtpbmRMYWJlbDogJ0NhbWVyYScsXG4gICAgICAgICAgICB9KX1cblxuICAgICAgICAgICAge2NvbnRyb2xSb3coe1xuICAgICAgICAgICAgICAgIG9uOiBhdWRpb09uLCBjb25uZWN0ZWQ6IGF1ZGlvQ29ubmVjdGVkLCBvblRvZ2dsZTogc2V0QXVkaW9PbixcbiAgICAgICAgICAgICAgICBpY29uOiBhdWRpb09uID8gPE1pY0ljb24vPiA6IDxNaWNPZmZJY29uLz4sXG4gICAgICAgICAgICAgICAgZGV2aWNlczogYXVkaW9EZXZpY2VzLCBkZXZpY2VJZDogYXVkaW9EZXZpY2VJZCwgb25TZWxlY3Q6IHNldEF1ZGlvRGV2aWNlSWQsXG4gICAgICAgICAgICAgICAga2luZExhYmVsOiAnTWljcm9waG9uZScsXG4gICAgICAgICAgICAgICAgbWV0ZXI6IChcbiAgICAgICAgICAgICAgICAgICAgPEJveCBzeD17e3dpZHRoOiA1NiwgaGVpZ2h0OiA2LCBib3JkZXJSYWRpdXM6IDMsIGJhY2tncm91bmQ6ICcjZTZlYWYwJywgb3ZlcmZsb3c6ICdoaWRkZW4nLCBmbGV4U2hyaW5rOiAwfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHN4PXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGAke2F1ZGlvT24gPyBtaWNMZXZlbCA6IDB9JWAsIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHByaW1hcnksIHRyYW5zaXRpb246ICd3aWR0aCA5MG1zIGxpbmVhcicsXG4gICAgICAgICAgICAgICAgICAgICAgICB9fS8+XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9KX1cblxuICAgICAgICAgICAge3N0YXR1c01lc3NhZ2UgJiZcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBzeD17e2ZvbnRTaXplOiAxMiwgY29sb3I6ICcjZjE0MTZjJ319PntzdGF0dXNNZXNzYWdlfTwvVHlwb2dyYXBoeT59XG4gICAgICAgICAgICB7IXZpZGVvQ29ubmVjdGVkICYmICFhdWRpb0Nvbm5lY3RlZCAmJiByZWFkeSAmJlxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHN4PXt7Zm9udFNpemU6IDEyLCBjb2xvcjogJyNmMTQxNmMnfX0+XG4gICAgICAgICAgICAgICAgICAgIE5vIGNhbWVyYSBvciBtaWNyb3Bob25lIGRldGVjdGVkLlxuICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT59XG4gICAgICAgIDwvQm94PlxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IHJlZj17Y29udGFpbmVyUmVmfSBzdHlsZT17VXRpbHMubWVyZ2VTdHlsZXMoe3dpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMCUnfSwgcHJvcHMuY29uZmlnKX0+XG4gICAgICAgICAgICA8Qm94IHN4PXt7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246IHN0YWNrZWQgPyAnY29sdW1uJyA6ICdyb3cnLFxuICAgICAgICAgICAgICAgIGdhcDogMiwgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICB7LyogU3RhY2tlZCAobmFycm93IGNvbnRhaW5lciwgZS5nLiBwaW5uZWQpOiByb3cgMSBjb250cm9scywgcm93IDIgc3F1YXJlIHZpZGVvLlxuICAgICAgICAgICAgICAgICAgICBXaWRlOiBzcXVhcmUgdmlkZW8gYmVzaWRlIGNvbnRyb2xzLiAqL31cbiAgICAgICAgICAgICAgICB7c3RhY2tlZFxuICAgICAgICAgICAgICAgICAgICA/IDw+e2NvbnRyb2xzQmxvY2t9e3ZpZGVvQmxvY2t9PC8+XG4gICAgICAgICAgICAgICAgICAgIDogPD57dmlkZW9CbG9ja317Y29udHJvbHNCbG9ja308Lz59XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFZDU2V0dGluZ3M7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLG1CQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxXQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxVQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxTQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxTQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUSxZQUFBLEdBQUFULHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUyxJQUFBLEdBQUFWLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBVSxPQUFBLEdBQUFYLHNCQUFBLENBQUFDLE9BQUE7QUFBb0QsU0FBQUQsdUJBQUFZLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFBQSxTQUFBRyxRQUFBSCxD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
@@ -28,6 +28,9 @@ const VideoPlayer = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default
28
28
  _Observable.default.addSubscriptions(parsedConfig.eventHandlingConfig, props.handle, props.viewId);
29
29
  _Observable.default.addSystemSubscriptions(props.viewId, parsedConfig);
30
30
  props.handle.api.refresh();
31
+ return () => {
32
+ _Observable.default.clearComponentEventListeners(props.handle);
33
+ };
31
34
  }, []);
32
35
  _react.default.useEffect(() => {
33
36
  props.handle.api.refresh();
@@ -100,4 +103,4 @@ const VideoPlayer = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default
100
103
  }, "NO TRAINING VIDEO AVAILABLE")));
101
104
  }));
102
105
  var _default = exports.default = VideoPlayer;
103
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3JlYWN0UGxheWVyIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9PYnNlcnZhYmxlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidCIsIldlYWtNYXAiLCJyIiwibiIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwibG9jYXRpb24iLCJ3aW5kb3ciLCJwcm90b2NvbCIsImhvc3RuYW1lIiwiVmlkZW9QbGF5ZXIiLCJSZWFjdCIsIm1lbW8iLCJmb3J3YXJkUmVmIiwicHJvcHMiLCJyZWYiLCJwbGF5aW5nIiwic2V0UGxheWluZyIsInVzZVN0YXRlIiwiZG9jdW1lbnRJZCIsInNldERvY3VtZW50SWQiLCJkb3dubG9hZFVybCIsInNldERvd25sb2FkVXJsIiwiZGlzYWJsZWQiLCJzZXREaXNhYmxlZCIsInZpc2libGUiLCJzZXRWaXNpYmxlIiwidXNlRWZmZWN0IiwiaGFuZGxlIiwiYXBpIiwicGFyc2VkQ29uZmlnIiwiVXRpbHMiLCJwYXJzZUNvbmZpZyIsImNvbmZpZyIsInZpZXdJZCIsImV2ZW50TWFuYWdlciIsImFkZFN1YnNjcmlwdGlvbnMiLCJldmVudEhhbmRsaW5nQ29uZmlnIiwiYWRkU3lzdGVtU3Vic2NyaXB0aW9ucyIsInJlZnJlc2giLCJhcHBsaWNhdGlvbk1hbmFnZXIiLCJnZXRDb250ZXh0Um9vdCIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsImlkIiwiZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbiIsImlzTnVsbCIsImdldENoaWxkcmVuIiwiY3JlYXRlRWxlbWVudCIsIkZyYWdtZW50Iiwic3R5bGUiLCJtZXJnZVN0eWxlcyIsImNsYXNzTmFtZSIsImJvcmRlclJhZGl1cyIsInVybCIsImNvbnRyb2xzIiwid2lkdGgiLCJoZWlnaHQiLCJvblBsYXkiLCJvblBhdXNlIiwiYmFja2dyb3VuZENvbG9yIiwiY29sb3IiLCJkaXNwbGF5IiwianVzdGlmeUNvbnRlbnQiLCJhbGlnbkl0ZW1zIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21lZGlhL1ZpZGVvUGxheWVyLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyLvu79pbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL1V0aWxzJztcbmltcG9ydCAnLi9WaWRlb1BsYXllci5jc3MnO1xuaW1wb3J0IFJlYWN0UGxheWVyIGZyb20gJ3JlYWN0LXBsYXllcic7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL0FwcGxpY2F0aW9uTWFuYWdlcic7XG5pbXBvcnQgZXZlbnRNYW5hZ2VyIGZyb20gXCIuLi8uLi9ldmVudC9PYnNlcnZhYmxlXCI7XG5cbmNvbnN0IGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbmNvbnN0IFZpZGVvUGxheWVyID0gUmVhY3QubWVtbyhSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XG5cbiAgICBjb25zdCBbcGxheWluZywgc2V0UGxheWluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2RvY3VtZW50SWQsIHNldERvY3VtZW50SWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtkb3dubG9hZFVybCwgc2V0RG93bmxvYWRVcmxdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2Rpc2FibGVkLCBzZXREaXNhYmxlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3Zpc2libGUsIHNldFZpc2libGVdID0gUmVhY3QudXNlU3RhdGUodHJ1ZSk7XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBwcm9wcy5oYW5kbGUuYXBpID0gYXBpKCk7XG4gICAgfSk7XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBwcm9wcy5oYW5kbGUuYXBpID0gYXBpKCk7XG5cbiAgICAgICAgbGV0IHBhcnNlZENvbmZpZyA9IFV0aWxzLnBhcnNlQ29uZmlnKHByb3BzLmNvbmZpZywgcHJvcHMudmlld0lkKTtcbiAgICAgICAgZXZlbnRNYW5hZ2VyLmFkZFN1YnNjcmlwdGlvbnMocGFyc2VkQ29uZmlnLmV2ZW50SGFuZGxpbmdDb25maWcsIHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgZXZlbnRNYW5hZ2VyLmFkZFN5c3RlbVN1YnNjcmlwdGlvbnMocHJvcHMudmlld0lkLCBwYXJzZWRDb25maWcpO1xuICAgICAgICBwcm9wcy5oYW5kbGUuYXBpLnJlZnJlc2goKTtcbiAgICB9LCBbXSk7XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBwcm9wcy5oYW5kbGUuYXBpLnJlZnJlc2goKTtcbiAgICB9LCBbZG9jdW1lbnRJZF0pO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICB9LCBbcGxheWluZ10pO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGRvY3VtZW50SWQpIHtcbiAgICAgICAgICAgIHNldERvd25sb2FkVXJsKGxvY2F0aW9uICsgYXBwbGljYXRpb25NYW5hZ2VyLmdldENvbnRleHRSb290KCkgKyAnL2RvY3MvYXBpL3YxL21hbmFnZXIvZG93bmxvYWQvJyArIGRvY3VtZW50SWQgK1xuICAgICAgICAgICAgICAgICc/YWNjZXNzX3Rva2VuPScgKyBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhY2Nlc3NUb2tlbicpICsgJyZpZFRva2VuPScgKyBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpZFRva2VuJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0RG93bmxvYWRVcmwobnVsbCk7XG4gICAgICAgIH1cbiAgICB9LCBbZG9jdW1lbnRJZF0pO1xuXG4gICAgY29uc3QgYXBpID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy5jb25maWcuaWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IHBsYXlpbmcocGxheWluZykge1xuICAgICAgICAgICAgICAgIHNldFBsYXlpbmcocGxheWluZyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IGRvY3VtZW50SWQoZG9jdW1lbnRJZCkge1xuICAgICAgICAgICAgICAgIHNldERvY3VtZW50SWQoZG9jdW1lbnRJZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IGRvY3VtZW50SWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50SWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IGRpc2FibGVkKGRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgc2V0RGlzYWJsZWQoZGlzYWJsZWQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCB2aXNpYmxlKHZpc2libGUpIHtcbiAgICAgICAgICAgICAgICBzZXRWaXNpYmxlKHZpc2libGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlZENvbmZpZyA9IFV0aWxzLnBhcnNlQ29uZmlnKHByb3BzLmNvbmZpZywgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICBzZXREaXNhYmxlZChVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy5kaXNhYmxlZCwgcGFyc2VkQ29uZmlnLmlkKSk7XG4gICAgICAgICAgICAgICAgc2V0VmlzaWJsZShVdGlscy5pc051bGwocGFyc2VkQ29uZmlnLnZpc2libGUpIHx8IFV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyc2VkQ29uZmlnLnZpc2libGUsIHBhcnNlZENvbmZpZy5pZCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldENoaWxkcmVuOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZpc2libGUgJiZcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXtVdGlscy5tZXJnZVN0eWxlcyh7fSwgcHJvcHMuY29uZmlnKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkVXJsICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBsYXllci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJlYWN0UGxheWVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7Ym9yZGVyUmFkaXVzOiAnNHB4J319XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybD17ZG93bmxvYWRVcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlYWN0LXBsYXllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlpbmc9e3BsYXlpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblBsYXk9eygpID0+IHNldFBsYXlpbmcodHJ1ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uUGF1c2U9eygpID0+IHNldFBsYXlpbmcoZmFsc2UpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoIWRvY3VtZW50SWQgfHwgIWRvd25sb2FkVXJsKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnYmxhY2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTk8gVFJBSU5JTkcgVklERU8gQVZBSUxBQkxFXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xufSkpO1xuXG5leHBvcnQgZGVmYXVsdCBWaWRlb1BsYXllcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUMsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0QsSUFBQUMsTUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0FBLE9BQUE7QUFDQSxJQUFBRyxZQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxtQkFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssV0FBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQWtELFNBQUFFLHVCQUFBSSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQUEsU0FBQVAsd0JBQUFPLENBQUEsRUFBQUcsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFYLHVCQUFBLFlBQUFBLENBQUFPLENBQUEsRUFBQUcsQ0FBQSxTQUFBQSxDQUFBLElBQUFILENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLFNBQUFELENBQUEsTUFBQU8sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBUixPQUFBLEVBQUFGLENBQUEsaUJBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsU0FBQVMsQ0FBQSxNQUFBRixDQUFBLEdBQUFKLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFFLENBQUEsQ0FBQUksR0FBQSxDQUFBWCxDQUFBLFVBQUFPLENBQUEsQ0FBQUssR0FBQSxDQUFBWixDQUFBLEdBQUFPLENBQUEsQ0FBQU0sR0FB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SyxDQUFDYyx5QkFBeUIsQ0FBQ2YsWUFBWSxDQUFDTCxPQUFPLEVBQUVLLFlBQVksQ0FBQ2MsRUFBRSxDQUFDLENBQUM7TUFDNUgsQ0FBQztNQUNERyxXQUFXLEVBQUVBLENBQUEsS0FBTTtRQUNmLE9BQU8sRUFBRTtNQUNiO0lBQ0osQ0FBQztFQUNMLENBQUM7RUFFRCxvQkFDSXBFLE1BQUEsQ0FBQVUsT0FBQSxDQUFBMkQsYUFBQSxDQUFBckUsTUFBQSxDQUFBVSxPQUFBLENBQUE0RCxRQUFBLFFBRVF4QixPQUFPLGlCQUNQOUMsTUFBQSxDQUFBVSxPQUFBLENBQUEyRCxhQUFBO0lBQ0lFLEtBQUssRUFBRW5CLGNBQUssQ0FBQ29CLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRXJDLEtBQUssQ0FBQ21CLE1BQU07RUFBRSxHQUd2Q1osV0FBVyxpQkFDWDFDLE1BQUEsQ0FBQVUsT0FBQSxDQUFBMkQsYUFBQTtJQUFLSSxTQUFTLEVBQUM7RUFBZ0IsZ0JBQzNCekUsTUFBQSxDQUFBVSxPQUFBLENBQUEyRCxhQUFBLENBQUNoRSxZQUFBLENBQUFLLE9BQVc7SUFDUjZELEtBQUssRUFBRTtNQUFDRyxZQUFZLEVBQUU7SUFBSyxDQUFFO0lBQzdCQyxHQUFHLEVBQUVqQyxXQUFZO0lBQ2pCK0IsU0FBUyxFQUFDLGNBQWM7SUFDeEJwQyxPQUFPLEVBQUVBLE9BQVE7SUFDakJ1QyxRQUFRO0lBQ1JDLEtBQUssRUFBQyxNQUFNO0lBQ1pDLE1BQU0sRUFBQyxNQUFNO0lBQ2JDLE1BQU0sRUFBRUEsQ0FBQSxLQUFNekMsVUFBVSxDQUFDLElBQUksQ0FBRTtJQUMvQjBDLE9BQU8sRUFBRUEsQ0FBQSxLQUFNMUMsVUFBVSxDQUFDLEtBQUs7RUFBRSxDQUNwQyxDQUNBLENBQUMsRUFHTixDQUFDLENBQUNFLFVBQVUsSUFBSSxDQUFDRSxXQUFXLGtCQUM1QjFDLE1BQUEsQ0FBQVUsT0FBQSxDQUFBMkQsYUFBQTtJQUFLRSxLQUFLLEVBQUU7TUFDUk0sS0FBSyxFQUFFLE1BQU07TUFDYkMsTUFBTSxFQUFFLE1BQU07TUFDZEcsZUFBZSxFQUFFLE9BQU87TUFDeEJDLEtBQUssRUFBRSxPQUFPO01BQ2RDLE9BQU8sRUFBRSxNQUFNO01BQ2ZDLGNBQWMsRUFBRSxRQUFRO01BQ3hCQyxVQUFVLEVBQUUsUUFBUTtNQUNwQlgsWUFBWSxFQUFFO0lBQ2xCO0VBQUUsR0FBQyw2QkFFRSxDQUVSLENBRVgsQ0FBQztBQUVYLENBQUMsQ0FBQyxDQUFDO0FBQUMsSUFBQVksUUFBQSxHQUFBQyxPQUFBLENBQUE3RSxPQUFBLEdBRVdxQixXQUFXIiwiaWdub3JlTGlzdCI6W119
106
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3JlYWN0UGxheWVyIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9PYnNlcnZhYmxlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidCIsIldlYWtNYXAiLCJyIiwibiIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwibG9jYXRpb24iLCJ3aW5kb3ciLCJwcm90b2NvbCIsImhvc3RuYW1lIiwiVmlkZW9QbGF5ZXIiLCJSZWFjdCIsIm1lbW8iLCJmb3J3YXJkUmVmIiwicHJvcHMiLCJyZWYiLCJwbGF5aW5nIiwic2V0UGxheWluZyIsInVzZVN0YXRlIiwiZG9jdW1lbnRJZCIsInNldERvY3VtZW50SWQiLCJkb3dubG9hZFVybCIsInNldERvd25sb2FkVXJsIiwiZGlzYWJsZWQiLCJzZXREaXNhYmxlZCIsInZpc2libGUiLCJzZXRWaXNpYmxlIiwidXNlRWZmZWN0IiwiaGFuZGxlIiwiYXBpIiwicGFyc2VkQ29uZmlnIiwiVXRpbHMiLCJwYXJzZUNvbmZpZyIsImNvbmZpZyIsInZpZXdJZCIsImV2ZW50TWFuYWdlciIsImFkZFN1YnNjcmlwdGlvbnMiLCJldmVudEhhbmRsaW5nQ29uZmlnIiwiYWRkU3lzdGVtU3Vic2NyaXB0aW9ucyIsInJlZnJlc2giLCJjbGVhckNvbXBvbmVudEV2ZW50TGlzdGVuZXJzIiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiZ2V0Q29udGV4dFJvb3QiLCJzZXNzaW9uU3RvcmFnZSIsImdldEl0ZW0iLCJpZCIsImV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24iLCJpc051bGwiLCJnZXRDaGlsZHJlbiIsImNyZWF0ZUVsZW1lbnQiLCJGcmFnbWVudCIsInN0eWxlIiwibWVyZ2VTdHlsZXMiLCJjbGFzc05hbWUiLCJib3JkZXJSYWRpdXMiLCJ1cmwiLCJjb250cm9scyIsIndpZHRoIiwiaGVpZ2h0Iiwib25QbGF5Iiwib25QYXVzZSIsImJhY2tncm91bmRDb2xvciIsImNvbG9yIiwiZGlzcGxheSIsImp1c3RpZnlDb250ZW50IiwiYWxpZ25JdGVtcyIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tZWRpYS9WaWRlb1BsYXllci5qc3giXSwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IFJlYWN0LCB7dXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5pbXBvcnQgJy4vVmlkZW9QbGF5ZXIuY3NzJztcbmltcG9ydCBSZWFjdFBsYXllciBmcm9tICdyZWFjdC1wbGF5ZXInO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IGV2ZW50TWFuYWdlciBmcm9tIFwiLi4vLi4vZXZlbnQvT2JzZXJ2YWJsZVwiO1xuXG5jb25zdCBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG5jb25zdCBWaWRlb1BsYXllciA9IFJlYWN0Lm1lbW8oUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xuXG4gICAgY29uc3QgW3BsYXlpbmcsIHNldFBsYXlpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtkb2N1bWVudElkLCBzZXREb2N1bWVudElkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbZG93bmxvYWRVcmwsIHNldERvd25sb2FkVXJsXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtkaXNhYmxlZCwgc2V0RGlzYWJsZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFt2aXNpYmxlLCBzZXRWaXNpYmxlXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgIH0pO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuXG4gICAgICAgIGxldCBwYXJzZWRDb25maWcgPSBVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgIGV2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKHBhcnNlZENvbmZpZy5ldmVudEhhbmRsaW5nQ29uZmlnLCBwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgIGV2ZW50TWFuYWdlci5hZGRTeXN0ZW1TdWJzY3JpcHRpb25zKHByb3BzLnZpZXdJZCwgcGFyc2VkQ29uZmlnKTtcbiAgICAgICAgcHJvcHMuaGFuZGxlLmFwaS5yZWZyZXNoKCk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5jbGVhckNvbXBvbmVudEV2ZW50TGlzdGVuZXJzKHByb3BzLmhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgcHJvcHMuaGFuZGxlLmFwaS5yZWZyZXNoKCk7XG4gICAgfSwgW2RvY3VtZW50SWRdKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgfSwgW3BsYXlpbmddKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChkb2N1bWVudElkKSB7XG4gICAgICAgICAgICBzZXREb3dubG9hZFVybChsb2NhdGlvbiArIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgJy9kb2NzL2FwaS92MS9tYW5hZ2VyL2Rvd25sb2FkLycgKyBkb2N1bWVudElkICtcbiAgICAgICAgICAgICAgICAnP2FjY2Vzc190b2tlbj0nICsgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWNjZXNzVG9rZW4nKSArICcmaWRUb2tlbj0nICsgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaWRUb2tlbicpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldERvd25sb2FkVXJsKG51bGwpO1xuICAgICAgICB9XG4gICAgfSwgW2RvY3VtZW50SWRdKTtcblxuICAgIGNvbnN0IGFwaSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBwbGF5aW5nKHBsYXlpbmcpIHtcbiAgICAgICAgICAgICAgICBzZXRQbGF5aW5nKHBsYXlpbmcpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBkb2N1bWVudElkKGRvY3VtZW50SWQpIHtcbiAgICAgICAgICAgICAgICBzZXREb2N1bWVudElkKGRvY3VtZW50SWQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBkb2N1bWVudElkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb2N1bWVudElkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBkaXNhYmxlZChkaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHNldERpc2FibGVkKGRpc2FibGVkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgdmlzaWJsZSh2aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgc2V0VmlzaWJsZSh2aXNpYmxlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWZyZXNoKCkge1xuICAgICAgICAgICAgICAgIGxldCBwYXJzZWRDb25maWcgPSBVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgc2V0RGlzYWJsZWQoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcuZGlzYWJsZWQsIHBhcnNlZENvbmZpZy5pZCkpO1xuICAgICAgICAgICAgICAgIHNldFZpc2libGUoVXRpbHMuaXNOdWxsKHBhcnNlZENvbmZpZy52aXNpYmxlKSB8fCBVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy52aXNpYmxlLCBwYXJzZWRDb25maWcuaWQpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRDaGlsZHJlbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2aXNpYmxlICYmXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17VXRpbHMubWVyZ2VTdHlsZXMoe30sIHByb3BzLmNvbmZpZyl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZFVybCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwbGF5ZXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZWFjdFBsYXllclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e2JvcmRlclJhZGl1czogJzRweCd9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9e2Rvd25sb2FkVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyZWFjdC1wbGF5ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5aW5nPXtwbGF5aW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25QbGF5PXsoKSA9PiBzZXRQbGF5aW5nKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblBhdXNlPXsoKSA9PiBzZXRQbGF5aW5nKGZhbHNlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgKCFkb2N1bWVudElkIHx8ICFkb3dubG9hZFVybCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ2JsYWNrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzRweCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PIFRSQUlOSU5HIFZJREVPIEFWQUlMQUJMRVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbn0pKTtcblxuZXhwb3J0IGRlZmF1bHQgVmlkZW9QbGF5ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFDLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNELElBQUFDLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksbUJBQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFLLFdBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUFrRCxTQUFBRSx1QkFBQUksQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUFQLHdCQUFBTyxDQUFBLEVBQUFHLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBWCx1QkFBQSxZQUFBQSxDQUFBTyxDQUFBLEVBQUFHLENBQUEsU0FBQUEsQ0FBQSxJQUFBSCxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxTQUFBRCxDQUFBLE1BQUFPLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsUUFBQVIsT0FBQSxFQUFBRixDQUFBLGlCQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFNB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