jconsumer-shared 0.0.3 → 1.0.1

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 (108) hide show
  1. package/esm2022/lib/account-service.mjs +158 -9
  2. package/esm2022/lib/auth-service.mjs +12 -4
  3. package/esm2022/lib/booking-service.mjs +480 -0
  4. package/esm2022/lib/calendar/date-time/datetime-processor.service.mjs +4 -4
  5. package/esm2022/lib/common.service.mjs +157 -7
  6. package/esm2022/lib/confirm/confirm-box.component.mjs +159 -0
  7. package/esm2022/lib/confirm/confirm-box.module.mjs +62 -0
  8. package/esm2022/lib/consumer-service.mjs +780 -0
  9. package/esm2022/lib/currency-service.mjs +12 -0
  10. package/esm2022/lib/environment.service.mjs +23 -0
  11. package/esm2022/lib/error-message.module.mjs +23 -0
  12. package/esm2022/lib/file-service.mjs +25 -19
  13. package/esm2022/lib/form-message/field-error-display/field-error-display.component.mjs +21 -0
  14. package/esm2022/lib/form-message/form-message-display.module.mjs +35 -0
  15. package/esm2022/lib/form-message/form-message-display.service.mjs +44 -0
  16. package/esm2022/lib/form-message/form-success-display/form-success-display.component.mjs +18 -0
  17. package/esm2022/lib/group-storage.service.mjs +4 -4
  18. package/esm2022/lib/i8n.module.mjs +5 -5
  19. package/esm2022/lib/injector-resolver.mjs +28 -0
  20. package/esm2022/lib/local-storage.service.mjs +4 -4
  21. package/esm2022/lib/media-service.mjs +49 -0
  22. package/esm2022/lib/order.service.mjs +19 -4
  23. package/esm2022/lib/payment/modes/payment-modes.component.mjs +35 -0
  24. package/esm2022/lib/payment/modes/payment-modes.module.mjs +24 -0
  25. package/esm2022/lib/payment/payment.module.mjs +26 -0
  26. package/esm2022/lib/paytm.service.mjs +131 -0
  27. package/esm2022/lib/phone-input/phone-input.component.mjs +50 -46
  28. package/esm2022/lib/phone-input/phone-input.module.mjs +5 -5
  29. package/esm2022/lib/pipes/autolink/autolink.module.mjs +20 -0
  30. package/esm2022/lib/pipes/autolink/autolink.pipe.mjs +4 -4
  31. package/esm2022/lib/pipes/capitalize/capitalize.module.mjs +5 -5
  32. package/esm2022/lib/pipes/capitalize/capitalize.pipe.mjs +4 -4
  33. package/esm2022/lib/pipes/date-format/date-format.module.mjs +19 -0
  34. package/esm2022/lib/pipes/date-format/date-format.pipe.mjs +42 -0
  35. package/esm2022/lib/pipes/filter/filter.pipe.mjs +4 -4
  36. package/esm2022/lib/pipes/limit-to/limitTo.pipe.mjs +4 -4
  37. package/esm2022/lib/pipes/safe-html/safehtml.module.mjs +5 -5
  38. package/esm2022/lib/pipes/safe-html/safehtml.pipe.mjs +4 -4
  39. package/esm2022/lib/project-constants.mjs +310 -0
  40. package/esm2022/lib/questionaire/edit/questionnaire.component.mjs +53 -63
  41. package/esm2022/lib/questionaire/edit/questionnaire.module.mjs +16 -15
  42. package/esm2022/lib/questionaire/questionaire-service.mjs +4 -4
  43. package/esm2022/lib/razorpay.service.mjs +157 -0
  44. package/esm2022/lib/request-dialog/request-dialog.component.mjs +29 -0
  45. package/esm2022/lib/request-dialog/request-dialog.module.mjs +24 -0
  46. package/esm2022/lib/service-meta.mjs +4 -4
  47. package/esm2022/lib/session-storage.service.mjs +4 -4
  48. package/esm2022/lib/shared-account.guard.mjs +41 -0
  49. package/esm2022/lib/shared-account.resolver.mjs +22 -0
  50. package/esm2022/lib/shared.service.mjs +88 -13
  51. package/esm2022/lib/showuploadfile/showuploadfile.component.mjs +5 -5
  52. package/esm2022/lib/showuploadfile/showuploadfile.module.mjs +5 -5
  53. package/esm2022/lib/skeleton/skeleton-loading.component.mjs +4 -4
  54. package/esm2022/lib/skeleton/skeleton-loading.module.mjs +5 -5
  55. package/esm2022/lib/spinner/loading-spinner.component.mjs +4 -4
  56. package/esm2022/lib/spinner/loading-spinner.module.mjs +5 -5
  57. package/esm2022/lib/storage.service.mjs +4 -4
  58. package/esm2022/lib/subscription.service.mjs +4 -4
  59. package/esm2022/lib/theme.service.mjs +30 -0
  60. package/esm2022/lib/timezone-converter.mjs +49 -0
  61. package/esm2022/lib/toast.service.mjs +5 -5
  62. package/esm2022/lib/twilio-service.mjs +466 -0
  63. package/esm2022/lib/word-processor.service.mjs +4 -4
  64. package/esm2022/public-api.mjs +32 -1
  65. package/fesm2022/jconsumer-shared.mjs +3981 -541
  66. package/fesm2022/jconsumer-shared.mjs.map +1 -1
  67. package/jconsumer-shared-1.0.1.tgz +0 -0
  68. package/lib/account-service.d.ts +41 -2
  69. package/lib/auth-service.d.ts +1 -0
  70. package/lib/booking-service.d.ts +101 -0
  71. package/lib/common.service.d.ts +12 -1
  72. package/lib/confirm/confirm-box.component.d.ts +43 -0
  73. package/lib/confirm/confirm-box.module.d.ts +16 -0
  74. package/lib/consumer-service.d.ts +178 -0
  75. package/lib/currency-service.d.ts +4 -0
  76. package/lib/environment.service.d.ts +9 -0
  77. package/lib/error-message.module.d.ts +7 -0
  78. package/lib/file-service.d.ts +5 -2
  79. package/lib/form-message/field-error-display/field-error-display.component.d.ts +8 -0
  80. package/lib/form-message/form-message-display.module.d.ts +10 -0
  81. package/lib/form-message/form-message-display.service.d.ts +13 -0
  82. package/lib/form-message/form-success-display/form-success-display.component.d.ts +7 -0
  83. package/lib/injector-resolver.d.ts +2 -0
  84. package/lib/media-service.d.ts +9 -0
  85. package/lib/order.service.d.ts +4 -0
  86. package/lib/payment/modes/payment-modes.component.d.ts +15 -0
  87. package/lib/payment/modes/payment-modes.module.d.ts +9 -0
  88. package/lib/payment/payment.module.d.ts +7 -0
  89. package/lib/paytm.service.d.ts +13 -0
  90. package/lib/phone-input/phone-input.component.d.ts +5 -3
  91. package/lib/pipes/autolink/autolink.module.d.ts +8 -0
  92. package/lib/pipes/date-format/date-format.module.d.ts +8 -0
  93. package/lib/pipes/date-format/date-format.pipe.d.ts +12 -0
  94. package/lib/project-constants.d.ts +227 -0
  95. package/lib/questionaire/edit/questionnaire.component.d.ts +8 -9
  96. package/lib/questionaire/edit/questionnaire.module.d.ts +9 -8
  97. package/lib/razorpay.service.d.ts +26 -0
  98. package/lib/request-dialog/request-dialog.component.d.ts +11 -0
  99. package/lib/request-dialog/request-dialog.module.d.ts +9 -0
  100. package/lib/shared-account.guard.d.ts +11 -0
  101. package/lib/shared-account.resolver.d.ts +10 -0
  102. package/lib/shared.service.d.ts +31 -4
  103. package/lib/theme.service.d.ts +10 -0
  104. package/lib/timezone-converter.d.ts +8 -0
  105. package/lib/twilio-service.d.ts +60 -0
  106. package/package.json +1 -1
  107. package/public-api.d.ts +31 -0
  108. package/jconsumer-shared-0.0.3.tgz +0 -0
@@ -0,0 +1,466 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import Video from 'twilio-video';
4
+ import * as i0 from "@angular/core";
5
+ export class TwilioService {
6
+ rendererFactory;
7
+ remoteVideo;
8
+ localVideo;
9
+ previewContainer;
10
+ microphone = true;
11
+ video = true;
12
+ preview = true;
13
+ roomParticipants;
14
+ participantsCount = 0;
15
+ showParticipant = false;
16
+ previewTrack;
17
+ camDeviceCount = 0;
18
+ renderer;
19
+ cameraMode;
20
+ previewTracks;
21
+ timerSubject = new Subject();
22
+ errorSubject = new Subject();
23
+ static signalStrength;
24
+ selectedVideoId;
25
+ activeCamIndex;
26
+ cam1Device;
27
+ cam2Device;
28
+ activeRoom;
29
+ previewTracksClone;
30
+ btnClicked = false;
31
+ loading = false;
32
+ constructor(rendererFactory) {
33
+ this.rendererFactory = rendererFactory;
34
+ this.renderer = rendererFactory.createRenderer(null, null);
35
+ }
36
+ activateTimer(timer) {
37
+ this.timerSubject.next(timer);
38
+ }
39
+ getTimer() {
40
+ return this.timerSubject.asObservable();
41
+ }
42
+ sendError(error) {
43
+ this.errorSubject.next(error);
44
+ }
45
+ getError() {
46
+ return this.errorSubject.asObservable();
47
+ }
48
+ // private static getSignalStrength () {
49
+ // return TwilioService.signalStrength;
50
+ // }
51
+ unmuteVideo() {
52
+ const _this = this;
53
+ _this.previewTracks.forEach(localTrack => {
54
+ if (localTrack.kind === 'video') {
55
+ _this.previewTracksClone.push(localTrack);
56
+ _this.addPreviewTrackToDom(localTrack);
57
+ }
58
+ });
59
+ this.video = true;
60
+ }
61
+ muteVideo() {
62
+ const _this = this;
63
+ _this.previewTracks.forEach(localTrack => {
64
+ if (localTrack.kind === 'video') {
65
+ _this.previewTracksClone.splice(this.previewTracksClone.indexOf(localTrack), 1);
66
+ _this.removePreviewTrackToDom(localTrack);
67
+ }
68
+ });
69
+ this.video = false;
70
+ }
71
+ removePreviewTrackToDom(localTrack) {
72
+ const _this = this;
73
+ if (_this.previewContainer) {
74
+ const localElement = _this.previewContainer.nativeElement;
75
+ while (localElement.firstChild) {
76
+ localElement.removeChild(localElement.firstChild);
77
+ }
78
+ }
79
+ }
80
+ muteAudio() {
81
+ const _this = this;
82
+ _this.previewTracks.forEach(localTrack => {
83
+ if (localTrack.kind === 'audio') {
84
+ _this.previewTracksClone.splice(this.previewTracksClone.indexOf(localTrack), 1);
85
+ }
86
+ });
87
+ this.microphone = false;
88
+ }
89
+ unmuteAudio() {
90
+ const _this = this;
91
+ _this.previewTracks.forEach(localTrack => {
92
+ if (localTrack.kind === 'audio') {
93
+ _this.previewTracksClone.push(localTrack);
94
+ }
95
+ });
96
+ this.microphone = true;
97
+ }
98
+ addPreviewTrackToDom(previewTrack) {
99
+ const _this = this;
100
+ const element = previewTrack.attach();
101
+ _this.renderer.addClass(element, 'rem-video');
102
+ _this.renderer.appendChild(_this.previewContainer.nativeElement, element);
103
+ }
104
+ enableVideo() {
105
+ const _this = this;
106
+ Video.createLocalVideoTrack({
107
+ deviceId: { exact: _this.selectedVideoId }
108
+ }).then(function (localVideoTrack) {
109
+ _this.activeRoom.localParticipant.publishTrack(localVideoTrack);
110
+ console.log(_this.activeRoom.localParticipant.identity + ' added track: ' + localVideoTrack.kind);
111
+ _this.attachTracks([localVideoTrack], _this.localVideo.nativeElement, _this.activeRoom);
112
+ });
113
+ this.video = true;
114
+ }
115
+ disableVideo() {
116
+ const _this = this;
117
+ _this.activeRoom.localParticipant.videoTracks.forEach(publication => {
118
+ publication.track.stop();
119
+ publication.unpublish();
120
+ if (_this.localVideo) {
121
+ const localElement = _this.localVideo.nativeElement;
122
+ while (localElement.firstChild) {
123
+ localElement.removeChild(localElement.firstChild);
124
+ }
125
+ }
126
+ });
127
+ this.video = false;
128
+ }
129
+ mute() {
130
+ this.activeRoom.localParticipant.audioTracks.forEach(function (audioTrack) {
131
+ audioTrack.track.disable();
132
+ });
133
+ this.microphone = false;
134
+ }
135
+ unmute() {
136
+ this.activeRoom.localParticipant.audioTracks.forEach(function (audioTrack) {
137
+ audioTrack.track.enable();
138
+ });
139
+ this.microphone = true;
140
+ }
141
+ // media?
142
+ switchCamera(videoDevices) {
143
+ const _this = this;
144
+ this.activeCamIndex++;
145
+ if (this.activeCamIndex >= videoDevices.length) {
146
+ this.activeCamIndex = 0;
147
+ }
148
+ console.log("Video Devices:", videoDevices);
149
+ console.log("Active Cam Index:", this.activeCamIndex);
150
+ // _this.selectedVideoId =media.deviceId;
151
+ _this.selectedVideoId = videoDevices[this.activeCamIndex].deviceId;
152
+ // if (_this.selectedVideoId === _this.cam1Device) {
153
+ // _this.selectedVideoId = _this.cam2Device;
154
+ // } else {
155
+ // _this.selectedVideoId = _this.cam1Device;
156
+ // }
157
+ const localParticipant = _this.activeRoom.localParticipant;
158
+ const tracks = Array.from(localParticipant.videoTracks.values()).map(function (trackPublication) {
159
+ return trackPublication['track'];
160
+ });
161
+ localParticipant.unpublishTracks(tracks);
162
+ console.log(localParticipant.identity + ' removed track: ' + tracks[0].kind);
163
+ _this.detachTracks(tracks);
164
+ _this.stopTracks(tracks);
165
+ const videoid = _this.selectedVideoId;
166
+ Video.createLocalVideoTrack({
167
+ deviceId: { exact: videoid }
168
+ }).then(function (localVideoTrack) {
169
+ localParticipant.publishTrack(localVideoTrack);
170
+ console.log(localParticipant.identity + ' added track: ' + localVideoTrack.kind);
171
+ _this.attachTracks([localVideoTrack], _this.localVideo.nativeElement, _this.activeRoom);
172
+ });
173
+ }
174
+ connectToRoom(accessToken, options, tracks) {
175
+ // return new Promise(function (resolve, reject) {
176
+ const _this = this;
177
+ console.log("In Connect Room");
178
+ console.log(tracks);
179
+ if (tracks) {
180
+ _this.previewTracks = tracks;
181
+ _this.previewTracksClone = tracks.slice();
182
+ }
183
+ if (_this.previewTracks) {
184
+ options['tracks'] = _this.previewTracks;
185
+ }
186
+ console.log(_this.previewTracks);
187
+ Video.connect(accessToken, options).then((room) => {
188
+ room.localParticipant.setNetworkQualityConfiguration({
189
+ local: 2,
190
+ remote: 1
191
+ });
192
+ _this.preview = false;
193
+ _this.loading = false;
194
+ _this.activeRoom = room;
195
+ if (options['video']) {
196
+ if (!_this.localVideo.nativeElement.querySelector('video')) {
197
+ console.log("in connect method");
198
+ _this.attachParticipantTracks(room.localParticipant, _this.localVideo.nativeElement, room);
199
+ }
200
+ }
201
+ this.btnClicked = false;
202
+ _this.roomJoined(room);
203
+ }, (error) => {
204
+ // reject(error);
205
+ });
206
+ // });
207
+ }
208
+ networkQualityChanged(networkQualityLevel, networkQualityStats) {
209
+ TwilioService.signalStrength = networkQualityLevel;
210
+ console.log({
211
+ 1: '▃',
212
+ 2: '▃▄',
213
+ 3: '▃▄▅',
214
+ 4: '▃▄▅▆',
215
+ 5: '▃▄▅▆▇'
216
+ }[networkQualityLevel] || '');
217
+ if (networkQualityStats) {
218
+ // Print in console the networkQualityStats, which is non-null only if Network Quality
219
+ // verbosity is 2 (moderate) or greater
220
+ console.log('Network Quality statistics:', networkQualityStats);
221
+ }
222
+ }
223
+ // Attach the Tracks to the DOM.
224
+ attachTracks(tracks, container, room) {
225
+ const _this = this;
226
+ console.log("attachTracks");
227
+ tracks.forEach(function (track) {
228
+ if (track) {
229
+ console.log(track);
230
+ const element = track.attach();
231
+ _this.renderer.data['id'] = track.sid;
232
+ _this.renderer.addClass(element, 'rem-video');
233
+ _this.renderer.appendChild(container, element);
234
+ }
235
+ });
236
+ }
237
+ // Attach the Participant's Tracks to the DOM.
238
+ attachParticipantTracks(participant, container, room) {
239
+ const _this = this;
240
+ var tracks = Array.from(participant.tracks.values()).map(function (trackPublication) {
241
+ return trackPublication['track'];
242
+ });
243
+ console.log("attachParticipantTracks");
244
+ _this.attachTracks(tracks, container, room);
245
+ }
246
+ // Detach the Tracks from the DOM.
247
+ detachTracks(tracks) {
248
+ console.log("detachTracks");
249
+ tracks.forEach(function (track) {
250
+ if (track) {
251
+ track.detach().forEach(function (detachedElement) {
252
+ detachedElement.remove();
253
+ });
254
+ }
255
+ });
256
+ }
257
+ // Detach the Participant's Tracks from the DOM.
258
+ detachParticipantTracks(participant, room, _this) {
259
+ console.log("detachParticipantTracks");
260
+ var tracks = Array.from(participant.tracks.values()).map(function (trackPublication) {
261
+ return trackPublication['track'];
262
+ });
263
+ _this.detachTracks(tracks, room);
264
+ }
265
+ //
266
+ stopTracks(tracks) {
267
+ console.log("stopTracks");
268
+ tracks.forEach(function (track) {
269
+ if (track) {
270
+ track.stop();
271
+ }
272
+ });
273
+ }
274
+ // Successfully connected!
275
+ roomJoined(room) {
276
+ const _this = this;
277
+ // Attach the Tracks of the Room's Participants.
278
+ if (!_this.video) {
279
+ _this.disableVideo();
280
+ }
281
+ if (!_this.microphone) {
282
+ _this.mute();
283
+ }
284
+ room.localParticipant.on('networkQualityLevelChanged', this.networkQualityChanged);
285
+ room.participants.forEach((participant) => {
286
+ console.log("Participant:", participant);
287
+ console.log("Already in Room: '" + participant.identity + "'");
288
+ _this.attachParticipantTracks(participant, _this.remoteVideo.nativeElement, room);
289
+ _this.participantsCount = room.participants.size;
290
+ console.log('first:participantsCount:' + _this.participantsCount);
291
+ });
292
+ // When a Participant joins the Room, log the event.
293
+ room.on('participantConnected', function (participant) {
294
+ console.log("Participant:", participant);
295
+ console.log("Joining: '" + participant.identity + "'");
296
+ _this.participantsCount = room.participants.size;
297
+ console.log("connected - Participants:" + room.participants.size);
298
+ if (_this.participantsCount === 0) {
299
+ _this.activateTimer(true);
300
+ }
301
+ else {
302
+ _this.activateTimer(false);
303
+ }
304
+ });
305
+ // When a Participant adds a Track, attach it to the DOM.
306
+ room.on('trackSubscribed', function (track, trackPublication, participant) {
307
+ console.log("Local Participant:", room.localParticipant);
308
+ console.log("Remote Participant:", room.remoteParticipant);
309
+ console.log(participant.identity + ' added track: ' + track.kind);
310
+ _this.participantsCount = room.participants.size;
311
+ console.log("Participants:" + _this.participantsCount);
312
+ // var previewContainer = document.getElementById('remoteVideo');
313
+ _this.attachTracks([track], _this.remoteVideo.nativeElement, room);
314
+ console.log('tracksubscribed');
315
+ if (track.kind === 'video') {
316
+ _this.removeRemoteParticipantDetails(_this.remoteVideo.nativeElement);
317
+ }
318
+ if (_this.participantsCount === 0) {
319
+ _this.activateTimer(true);
320
+ }
321
+ else {
322
+ _this.activateTimer(false);
323
+ }
324
+ });
325
+ // When a Participant removes a Track, detach it from the DOM.
326
+ room.on('trackUnsubscribed', function (track, trackPublication, participant) {
327
+ console.log(participant.identity + ' removed track: ' + track.kind);
328
+ _this.detachTracks([track]);
329
+ console.log('trackUnsubscribed');
330
+ if (track.kind === 'video') {
331
+ _this.addRemoteParticipantDetails(_this.remoteVideo.nativeElement, participant);
332
+ }
333
+ });
334
+ room.on('participantReconnecting', remoteParticipant => {
335
+ console.log(remoteParticipant.state, 'reconnecting');
336
+ console.log(`${remoteParticipant.identity} is reconnecting the signaling connection to the Room!`);
337
+ /* Update the RemoteParticipant UI here */
338
+ });
339
+ room.on('participantReconnected', remoteParticipant => {
340
+ console.log(remoteParticipant.state, 'connected');
341
+ console.log(`${remoteParticipant.identity} has reconnected the signaling connection to the Room!`);
342
+ /* Update the RemoteParticipant UI here */
343
+ });
344
+ // When a Participant leaves the Room, detach its Tracks.
345
+ room.on('participantDisconnected', function (participant) {
346
+ console.log("Participant '" + participant.identity + "' left the room");
347
+ _this.detachParticipantTracks(participant, room, _this);
348
+ _this.participantsCount = room.participants.size;
349
+ console.log("disConnected - Participants Size:" + room.participants.size);
350
+ _this.removeRemoteParticipantDetails(_this.remoteVideo.nativeElement);
351
+ _this.activateTimer(true);
352
+ });
353
+ room.on('reconnecting', error => {
354
+ console.log(room.state, 'reconnecting');
355
+ _this.sendError(error);
356
+ _this.participantsCount = room.participants.size;
357
+ console.log("connected - Participants:" + room.participants.size);
358
+ if (_this.participantsCount === 0) {
359
+ _this.activateTimer(true);
360
+ }
361
+ else {
362
+ _this.activateTimer(false);
363
+ }
364
+ /* Update the application UI here */
365
+ });
366
+ room.on('reconnected', () => {
367
+ console.log(room.state, 'connected');
368
+ console.log('Reconnected your signaling and media connections!');
369
+ _this.participantsCount = room.participants.size;
370
+ console.log("connected - Participants:" + room.participants.size);
371
+ if (_this.participantsCount === 0) {
372
+ _this.activateTimer(true);
373
+ }
374
+ else {
375
+ _this.activateTimer(false);
376
+ }
377
+ /* Update the application UI here */
378
+ });
379
+ // Once the LocalParticipant leaves the room, detach the Tracks
380
+ // of all Participants, including that of the LocalParticipant.
381
+ room.on('disconnected', function (room, error) {
382
+ console.log('Left');
383
+ console.log(room.state, 'disconnected');
384
+ console.log("Error:", error);
385
+ _this.sendError(error);
386
+ room.localParticipant.tracks.forEach(publication => {
387
+ publication.track.stop();
388
+ publication.unpublish();
389
+ const attachedElements = publication.track.detach();
390
+ attachedElements.forEach(element => element.remove());
391
+ });
392
+ if (_this.localVideo) {
393
+ const localElement = _this.localVideo.nativeElement;
394
+ while (localElement.firstChild) {
395
+ localElement.removeChild(localElement.firstChild);
396
+ }
397
+ }
398
+ if (_this.remoteVideo) {
399
+ const remoteElement = _this.remoteVideo.nativeElement;
400
+ while (remoteElement.firstChild) {
401
+ remoteElement.removeChild(remoteElement.firstChild);
402
+ }
403
+ }
404
+ _this.participantsCount = room.participants.size;
405
+ _this.disconnect();
406
+ });
407
+ }
408
+ removeRemoteParticipantDetails(container) {
409
+ const div = document.getElementById('remoteImg');
410
+ if (div) {
411
+ this.renderer.removeChild(container, div);
412
+ }
413
+ }
414
+ addRemoteParticipantDetails(container, participant) {
415
+ const div = document.createElement('div');
416
+ div.setAttribute('id', 'remoteImg');
417
+ const div1 = document.createElement('div');
418
+ div1.setAttribute('class', 'avatar-img');
419
+ div.appendChild(div1);
420
+ const div2 = document.createElement('div');
421
+ div2.setAttribute('class', 'avatar-text');
422
+ const contentDiv = document.createTextNode(participant.identity);
423
+ div2.appendChild(contentDiv);
424
+ div.appendChild(div2);
425
+ // const image = document.createElement('image');
426
+ // image.setAttribute('class', '');
427
+ // image.setAttribute('alt', participant.identity);
428
+ // div1.appendChild(image);
429
+ this.renderer.appendChild(container, div);
430
+ }
431
+ disconnect() {
432
+ const _this = this;
433
+ if (_this.previewTracks) {
434
+ _this.previewTracks.forEach(localTrack => {
435
+ localTrack.stop();
436
+ });
437
+ }
438
+ _this.previewTracks = null;
439
+ if (_this.activeRoom && _this.activeRoom.localParticipant && _this.activeRoom.localParticipant.localTracks) {
440
+ _this.activeRoom.localParticipant.localTracks.forEach(localTrack => {
441
+ localTrack.stop();
442
+ });
443
+ }
444
+ if (_this.activeRoom && _this.activeRoom !== null) {
445
+ _this.activeRoom.disconnect();
446
+ _this.activeRoom = null;
447
+ _this.cam1Device = null;
448
+ _this.cam2Device = null;
449
+ _this.selectedVideoId = null;
450
+ }
451
+ _this.video = true;
452
+ _this.microphone = true;
453
+ if (_this.remoteVideo) {
454
+ _this.removeRemoteParticipantDetails(_this.remoteVideo.nativeElement);
455
+ }
456
+ }
457
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwilioService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable });
458
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwilioService, providedIn: 'any' });
459
+ }
460
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwilioService, decorators: [{
461
+ type: Injectable,
462
+ args: [{
463
+ providedIn: 'any'
464
+ }]
465
+ }], ctorParameters: () => [{ type: i0.RendererFactory2 }] });
466
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdpbGlvLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9qY29uc3VtZXItc2hhcmVkL3NyYy9saWIvdHdpbGlvLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBMkMsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEtBQUssTUFBTSxjQUFjLENBQUM7O0FBSWpDLE1BQU0sT0FBTyxhQUFhO0lBMEJIO0lBekJuQixXQUFXLENBQWE7SUFDeEIsVUFBVSxDQUFhO0lBQ3ZCLGdCQUFnQixDQUFhO0lBQzdCLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDbEIsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNiLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDZixnQkFBZ0IsQ0FBQztJQUNqQixpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDdEIsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUN4QixZQUFZLENBQUM7SUFDYixjQUFjLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsUUFBUSxDQUFZO0lBQzVCLFVBQVUsQ0FBUztJQUNuQixhQUFhLENBQUM7SUFDZCxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztJQUNsQyxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztJQUMzQixNQUFNLENBQUMsY0FBYyxDQUFNO0lBQ2xDLGVBQWUsQ0FBUztJQUN4QixjQUFjLENBQUM7SUFDZixVQUFVLENBQVM7SUFDbkIsVUFBVSxDQUFTO0lBQ25CLFVBQVUsQ0FBQztJQUNYLGtCQUFrQixDQUFDO0lBQ25CLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixZQUFtQixlQUFpQztRQUFqQyxvQkFBZSxHQUFmLGVBQWUsQ0FBa0I7UUFDaEQsSUFBSSxDQUFDLFFBQVEsR0FB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bnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgRWxlbWVudFJlZiwgUmVuZGVyZXIyLCBSZW5kZXJlckZhY3RvcnkyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IFZpZGVvIGZyb20gJ3R3aWxpby12aWRlbyc7XHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdhbnknXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUd2lsaW9TZXJ2aWNlIHtcclxuICAgIHJlbW90ZVZpZGVvOiBFbGVtZW50UmVmO1xyXG4gICAgbG9jYWxWaWRlbzogRWxlbWVudFJlZjtcclxuICAgIHByZXZpZXdDb250YWluZXI6IEVsZW1lbnRSZWY7XHJcbiAgICBtaWNyb3Bob25lID0gdHJ1ZTtcclxuICAgIHZpZGVvID0gdHJ1ZTtcclxuICAgIHByZXZpZXcgPSB0cnVlO1xyXG4gICAgcm9vbVBhcnRpY2lwYW50cztcclxuICAgIHBhcnRpY2lwYW50c0NvdW50ID0gMDtcclxuICAgIHNob3dQYXJ0aWNpcGFudCA9IGZhbHNlO1xyXG4gICAgcHJldmlld1RyYWNrO1xyXG4gICAgY2FtRGV2aWNlQ291bnQgPSAwO1xyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyO1xyXG4gICAgY2FtZXJhTW9kZTogc3RyaW5nO1xyXG4gICAgcHJldmlld1RyYWNrcztcclxuICAgIHRpbWVyU3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICAgIGVycm9yU3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2lnbmFsU3RyZW5ndGg6IGFueTtcclxuICAgIHNlbGVjdGVkVmlkZW9JZDogc3RyaW5nO1xyXG4gICAgYWN0aXZlQ2FtSW5kZXg7XHJcbiAgICBjYW0xRGV2aWNlOiBzdHJpbmc7XHJcbiAgICBjYW0yRGV2aWNlOiBzdHJpbmc7XHJcbiAgICBhY3RpdmVSb29tO1xyXG4gICAgcHJldmlld1RyYWNrc0Nsb25lO1xyXG4gICAgYnRuQ2xpY2tlZCA9IGZhbHNlO1xyXG4gICAgbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHJlbmRlcmVyRmFjdG9yeTogUmVuZGVyZXJGYWN0b3J5Mikge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWN0aXZhdGVUaW1lcih0aW1lcjogYW55KSB7XHJcbiAgICAgICAgdGhpcy50aW1lclN1YmplY3QubmV4dCh0aW1lcik7XHJcbiAgICB9XHJcbiAgICBnZXRUaW1lcigpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRpbWVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZW5kRXJyb3IoZXJyb3I6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgZ2V0RXJyb3IoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICAvLyBwcml2YXRlIHN0YXRpYyBnZXRTaWduYWxTdHJlbmd0aCAoKSB7XHJcbiAgICAvLyAgICAgcmV0dXJuIFR3aWxpb1NlcnZpY2Uuc2lnbmFsU3RyZW5ndGg7XHJcbiAgICAvLyB9XHJcbiAgICB1bm11dGVWaWRlbygpIHtcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgX3RoaXMucHJldmlld1RyYWNrcy5mb3JFYWNoKGxvY2FsVHJhY2sgPT4ge1xyXG4gICAgICAgICAgICBpZihsb2NhbFRyYWNrLmtpbmQgPT09ICd2aWRlbycpIHtcclxuICAgICAgICAgICAgICAgICBfdGhpcy5wcmV2aWV3VHJhY2tzQ2xvbmUucHVzaChsb2NhbFRyYWNrKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFkZFByZXZpZXdUcmFja1RvRG9tKGxvY2FsVHJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudmlkZW8gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgbXV0ZVZpZGVvKCkge1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICBfdGhpcy5wcmV2aWV3VHJhY2tzLmZvckVhY2gobG9jYWxUcmFjayA9PiB7XHJcbiAgICAgICAgICAgIGlmKGxvY2FsVHJhY2sua2luZCA9PT0gJ3ZpZGVvJykge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMucHJldmlld1RyYWNrc0Nsb25lLnNwbGljZSh0aGlzLnByZXZpZXdUcmFja3NDbG9uZS5pbmRleE9mKGxvY2FsVHJhY2spLCAxKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZVByZXZpZXdUcmFja1RvRG9tKGxvY2FsVHJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy52aWRlbyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlUHJldmlld1RyYWNrVG9Eb20obG9jYWxUcmFjaykge1xyXG4gICAgICAgIGNvbnN0IF90aGlzPXRoaXM7XHJcbiAgICAgICAgaWYgKF90aGlzLnByZXZpZXdDb250YWluZXIpIHtcclxuICAgICAgICAgICAgY29uc3QgbG9jYWxFbGVtZW50ID0gX3RoaXMucHJldmlld0NvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgICAgICB3aGlsZSAobG9jYWxFbGVtZW50LmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsRWxlbWVudC5yZW1vdmVDaGlsZChsb2NhbEVsZW1lbnQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICBcclxuICAgIH1cclxuICAgIG11dGVBdWRpbygpIHtcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgX3RoaXMucHJldmlld1RyYWNrcy5mb3JFYWNoKGxvY2FsVHJhY2sgPT4ge1xyXG4gICAgICAgICAgICBpZihsb2NhbFRyYWNrLmtpbmQgPT09ICdhdWRpbycpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLnByZXZpZXdUcmFja3NDbG9uZS5zcGxpY2UodGhpcy5wcmV2aWV3VHJhY2tzQ2xvbmUuaW5kZXhPZihsb2NhbFRyYWNrKSwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm1pY3JvcGhvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHVubXV0ZUF1ZGlvKCkge1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICBfdGhpcy5wcmV2aWV3VHJhY2tzLmZvckVhY2gobG9jYWxUcmFjayA9PiB7XHJcbiAgICAgICAgICAgIGlmKGxvY2FsVHJhY2sua2luZCA9PT0gJ2F1ZGlvJykge1xyXG4gICAgICAgICAgICAgICAgIF90aGlzLnByZXZpZXdUcmFja3NDbG9uZS5wdXNoKGxvY2FsVHJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5taWNyb3Bob25lID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGFkZFByZXZpZXdUcmFja1RvRG9tKHByZXZpZXdUcmFjaykge1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gcHJldmlld1RyYWNrLmF0dGFjaCgpO1xyXG4gICAgICAgIF90aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICdyZW0tdmlkZW8nKTtcclxuICAgICAgICBfdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChfdGhpcy5wcmV2aWV3Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZVZpZGVvKCkge1xyXG4gICAgICAgIGNvbnN0IF90aGlzPSB0aGlzO1xyXG4gICAgICAgIFZpZGVvLmNyZWF0ZUxvY2FsVmlkZW9UcmFjayh7XHJcbiAgICAgICAgICAgIGRldmljZUlkOiB7IGV4YWN0OiBfdGhpcy5zZWxlY3RlZFZpZGVvSWQgfVxyXG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGxvY2FsVmlkZW9UcmFjaykge1xyXG4gICAgICAgICAgICBfdGhpcy5hY3RpdmVSb29tLmxvY2FsUGFydGljaXBhbnQucHVibGlzaFRyYWNrKGxvY2FsVmlkZW9UcmFjayk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKF90aGlzLmFjdGl2ZVJvb20ubG9jYWxQYXJ0aWNpcGFudC5pZGVudGl0eSArICcgYWRkZWQgdHJhY2s6ICcgKyBsb2NhbFZpZGVvVHJhY2sua2luZCk7XHJcbiAgICAgICAgICAgIF90aGlzLmF0dGFjaFRyYWNrcyhbbG9jYWxWaWRlb1RyYWNrXSwgX3RoaXMubG9jYWxWaWRlby5uYXRpdmVFbGVtZW50LCBfdGhpcy5hY3RpdmVSb29tKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnZpZGVvID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGRpc2FibGVWaWRlbygpIHtcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgX3RoaXMuYWN0aXZlUm9vbS5sb2NhbFBhcnRpY2lwYW50LnZpZGVvVHJhY2tzLmZvckVhY2gocHVibGljYXRpb24gPT4ge1xyXG4gICAgICAgICAgICBwdWJsaWNhdGlvbi50cmFjay5zdG9wKCk7XHJcbiAgICAgICAgICAgIHB1YmxpY2F0aW9uLnVucHVibGlzaCgpO1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMubG9jYWxWaWRlbykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxFbGVtZW50ID0gX3RoaXMubG9jYWxWaWRlby5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGxvY2FsRWxlbWVudC5maXJzdENoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxFbGVtZW50LnJlbW92ZUNoaWxkKGxvY2FsRWxlbWVudC5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudmlkZW8gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIG11dGUoKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVSb29tLmxvY2FsUGFydGljaXBhbnQuYXVkaW9UcmFja3MuZm9yRWFjaChmdW5jdGlvbiAoYXVkaW9UcmFjaykge1xyXG4gICAgICAgICAgICBhdWRpb1RyYWNrLnRyYWNrLmRpc2FibGUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm1pY3JvcGhvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHVubXV0ZSgpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZVJvb20ubG9jYWxQYXJ0aWNpcGFudC5hdWRpb1RyYWNrcy5mb3JFYWNoKGZ1bmN0aW9uIChhdWRpb1RyYWNrKSB7XHJcbiAgICAgICAgICAgIGF1ZGlvVHJhY2sudHJhY2suZW5hYmxlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5taWNyb3Bob25lID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8vIG1lZGlhP1xyXG4gICAgc3dpdGNoQ2FtZXJhKHZpZGVvRGV2aWNlcykge1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLmFjdGl2ZUNhbUluZGV4Kys7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ2FtSW5kZXggPj0gdmlkZW9EZXZpY2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbUluZGV4ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJWaWRlbyBEZXZpY2VzOlwiLCB2aWRlb0RldmljZXMpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQWN0aXZlIENhbSBJbmRleDpcIiwgdGhpcy5hY3RpdmVDYW1JbmRleCk7XHJcbiAgICAgICAgLy8gX3RoaXMuc2VsZWN0ZWRWaWRlb0lkID1tZWRpYS5kZXZpY2VJZDtcclxuICAgICAgICBfdGhpcy5zZWxlY3RlZFZpZGVvSWQgPSB2aWRlb0RldmljZXNbdGhpcy5hY3RpdmVDYW1JbmRleF0uZGV2aWNlSWQ7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAvLyBpZiAoX3RoaXMuc2VsZWN0ZWRWaWRlb0lkID09PSBfdGhpcy5jYW0xRGV2aWNlKSB7XHJcbiAgICAgICAgLy8gICAgIF90aGlzLnNlbGVjdGVkVmlkZW9JZCA9IF90aGlzLmNhbTJEZXZpY2U7XHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgX3RoaXMuc2VsZWN0ZWRWaWRlb0lkID0gX3RoaXMuY2FtMURldmljZTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgY29uc3QgbG9jYWxQYXJ0aWNpcGFudCA9IF90aGlzLmFjdGl2ZVJvb20ubG9jYWxQYXJ0aWNpcGFudDtcclxuICAgICAgICBjb25zdCB0cmFja3MgPSBBcnJheS5mcm9tKGxvY2FsUGFydGljaXBhbnQudmlkZW9UcmFja3MudmFsdWVzKCkpLm1hcChcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHRyYWNrUHVibGljYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cmFja1B1YmxpY2F0aW9uWyd0cmFjayddO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBsb2NhbFBhcnRpY2lwYW50LnVucHVibGlzaFRyYWNrcyh0cmFja3MpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGxvY2FsUGFydGljaXBhbnQuaWRlbnRpdHkgKyAnIHJlbW92ZWQgdHJhY2s6ICcgKyB0cmFja3NbMF0ua2luZCk7XHJcbiAgICAgICAgX3RoaXMuZGV0YWNoVHJhY2tzKHRyYWNrcyk7XHJcbiAgICAgICAgX3RoaXMuc3RvcFRyYWNrcyh0cmFja3MpO1xyXG4gICAgICAgIGNvbnN0IHZpZGVvaWQgPSBfdGhpcy5zZWxlY3RlZFZpZGVvSWQ7XHJcbiAgICAgICAgVmlkZW8uY3JlYXRlTG9jYWxWaWRlb1RyYWNrKHtcclxuICAgICAgICAgICAgZGV2aWNlSWQ6IHsgZXhhY3Q6IHZpZGVvaWQgfVxyXG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGxvY2FsVmlkZW9UcmFjaykge1xyXG4gICAgICAgICAgICBsb2NhbFBhcnRpY2lwYW50LnB1Ymxpc2hUcmFjayhsb2NhbFZpZGVvVHJhY2spO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhsb2NhbFBhcnRpY2lwYW50LmlkZW50aXR5ICsgJyBhZGRlZCB0cmFjazogJyArIGxvY2FsVmlkZW9UcmFjay5raW5kKTtcclxuICAgICAgICAgICAgX3RoaXMuYXR0YWNoVHJhY2tzKFtsb2NhbFZpZGVvVHJhY2tdLCBfdGhpcy5sb2NhbFZpZGVvLm5hdGl2ZUVsZW1lbnQsIF90aGlzLmFjdGl2ZVJvb20pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbm5lY3RUb1Jvb20oYWNjZXNzVG9rZW4sIG9wdGlvbnMsIHRyYWNrcz8pIHtcclxuICAgICAgICAvLyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkluIENvbm5lY3QgUm9vbVwiKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh0cmFja3MpO1xyXG4gICAgICAgIGlmKHRyYWNrcykge1xyXG4gICAgICAgICAgICBfdGhpcy5wcmV2aWV3VHJhY2tzID0gdHJhY2tzO1xyXG4gICAgICAgICAgICBfdGhpcy5wcmV2aWV3VHJhY2tzQ2xvbmUgPSB0cmFja3Muc2xpY2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKF90aGlzLnByZXZpZXdUcmFja3MpIHtcclxuICAgICAgICAgICAgb3B0aW9uc1sndHJhY2tzJ10gPSBfdGhpcy5wcmV2aWV3VHJhY2tzO1xyXG4gICAgICAgIH0gICAgICBcclxuICAgICAgICBjb25zb2xlLmxvZyhfdGhpcy5wcmV2aWV3VHJhY2tzKTtcclxuICAgICAgICBWaWRlby5jb25uZWN0KGFjY2Vzc1Rva2VuLCBvcHRpb25zKS50aGVuKFxyXG4gICAgICAgICAgICAocm9vbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByb29tLmxvY2FsUGFydGljaXBhbnQuc2V0TmV0d29ya1F1YWxpdHlDb25maWd1cmF0aW9uKHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhbDogMixcclxuICAgICAgICAgICAgICAgICAgICByZW1vdGU6IDFcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMucHJldmlldyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubG9hZGluZz0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hY3RpdmVSb29tID0gcm9vbTtcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zWyd2aWRlbyddKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5sb2NhbFZpZGVvLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndmlkZW8nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImluIGNvbm5lY3QgbWV0aG9kXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5hdHRhY2hQYXJ0aWNpcGFudFRyYWNrcyhyb29tLmxvY2FsUGFydGljaXBhbnQsIF90aGlzLmxvY2FsVmlkZW8ubmF0aXZlRWxlbWVudCwgcm9vbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5idG5DbGlja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5yb29tSm9pbmVkKHJvb20pO1xyXG4gICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgfVxyXG4gICAgbmV0d29ya1F1YWxpdHlDaGFuZ2VkKG5ldHdvcmtRdWFsaXR5TGV2ZWwsIG5ldHdvcmtRdWFsaXR5U3RhdHMpIHtcclxuICAgICAgICBUd2lsaW9TZXJ2aWNlLnNpZ25hbFN0cmVuZ3RoID0gbmV0d29ya1F1YWxpdHlMZXZlbDtcclxuICAgICAgICBjb25zb2xlLmxvZyh7XHJcbiAgICAgICAgICAgIDE6ICfiloMnLFxyXG4gICAgICAgICAgICAyOiAn4paD4paEJyxcclxuICAgICAgICAgICAgMzogJ+KWg+KWhOKWhScsXHJcbiAgICAgICAgICAgIDQ6ICfiloPiloTiloXiloYnLFxyXG4gICAgICAgICAgICA1OiAn4paD4paE4paF4paG4paHJ1xyXG4gICAgICAgICAgfVtuZXR3b3JrUXVhbGl0eUxldmVsXSB8fCAnJyk7XHJcbiAgICAgICAgICBpZiAobmV0d29ya1F1YWxpdHlTdGF0cykge1xyXG4gICAgICAgICAgICAvLyBQcmludCBpbiBjb25zb2xlIHRoZSBuZXR3b3JrUXVhbGl0eVN0YXRzLCB3aGljaCBpcyBub24tbnVsbCBvbmx5IGlmIE5ldHdvcmsgUXVhbGl0eVxyXG4gICAgICAgICAgICAvLyB2ZXJib3NpdHkgaXMgMiAobW9kZXJhdGUpIG9yIGdyZWF0ZXJcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ05ldHdvcmsgUXVhbGl0eSBzdGF0aXN0aWNzOicsIG5ldHdvcmtRdWFsaXR5U3RhdHMpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gQXR0YWNoIHRoZSBUcmFja3MgdG8gdGhlIERPTS5cclxuICAgIGF0dGFjaFRyYWNrcyh0cmFja3MsIGNvbnRhaW5lciwgcm9vbSkge1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICBjb25zb2xlLmxvZyhcImF0dGFjaFRyYWNrc1wiKTtcclxuICAgICAgICB0cmFja3MuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcclxuICAgICAgICAgICAgaWYgKHRyYWNrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0cmFjayk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdHJhY2suYXR0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5yZW5kZXJlci5kYXRhWydpZCddID0gdHJhY2suc2lkO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ3JlbS12aWRlbycpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyLCBlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBBdHRhY2ggdGhlIFBhcnRpY2lwYW50J3MgVHJhY2tzIHRvIHRoZSBET00uXHJcbiAgICBhdHRhY2hQYXJ0aWNpcGFudFRyYWNrcyhwYXJ0aWNpcGFudCwgY29udGFpbmVyLCByb29tKSB7XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciB0cmFja3MgPSBBcnJheS5mcm9tKHBhcnRpY2lwYW50LnRyYWNrcy52YWx1ZXMoKSkubWFwKGZ1bmN0aW9uICh0cmFja1B1YmxpY2F0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFja1B1YmxpY2F0aW9uWyd0cmFjayddO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiYXR0YWNoUGFydGljaXBhbnRUcmFja3NcIik7XHJcbiAgICAgICAgX3RoaXMuYXR0YWNoVHJhY2tzKHRyYWNrcywgY29udGFpbmVyLCByb29tKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZXRhY2ggdGhlIFRyYWNrcyBmcm9tIHRoZSBET00uXHJcbiAgICBkZXRhY2hUcmFja3ModHJhY2tzKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJkZXRhY2hUcmFja3NcIik7XHJcbiAgICAgICAgdHJhY2tzLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XHJcbiAgICAgICAgICAgIGlmICh0cmFjaykge1xyXG4gICAgICAgICAgICAgICAgdHJhY2suZGV0YWNoKCkuZm9yRWFjaChmdW5jdGlvbiAoZGV0YWNoZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGV0YWNoZWRFbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZXRhY2ggdGhlIFBhcnRpY2lwYW50J3MgVHJhY2tzIGZyb20gdGhlIERPTS5cclxuICAgIGRldGFjaFBhcnRpY2lwYW50VHJhY2tzKHBhcnRpY2lwYW50LCByb29tLCBfdGhpcykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiZGV0YWNoUGFydGljaXBhbnRUcmFja3NcIik7XHJcbiAgICAgICAgdmFyIHRyYWNrcyA9IEFycmF5LmZyb20ocGFydGljaXBhbnQudHJhY2tzLnZhbHVlcygpKS5tYXAoZnVuY3Rpb24gKHRyYWNrUHVibGljYXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRyYWNrUHVibGljYXRpb25bJ3RyYWNrJ107XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgX3RoaXMuZGV0YWNoVHJhY2tzKHRyYWNrcywgcm9vbSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gXHJcbiAgICBzdG9wVHJhY2tzKHRyYWNrcykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwic3RvcFRyYWNrc1wiKTtcclxuICAgICAgICB0cmFja3MuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcclxuICAgICAgICAgICAgaWYgKHRyYWNrKSB7IHRyYWNrLnN0b3AoKTsgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAvLyBTdWNjZXNzZnVsbHkgY29ubmVjdGVkIVxyXG4gICAgcm9vbUpvaW5lZChyb29tKSB7XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIC8vIEF0dGFjaCB0aGUgVHJhY2tzIG9mIHRoZSBSb29tJ3MgUGFydGljaXBhbnRzLlxyXG4gICAgICAgIGlmICghX3RoaXMudmlkZW8pIHtcclxuICAgICAgICAgICAgX3RoaXMuZGlzYWJsZVZpZGVvKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghX3RoaXMubWljcm9waG9uZSkge1xyXG4gICAgICAgICAgICBfdGhpcy5tdXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJvb20ubG9jYWxQYXJ0aWNpcGFudC5vbignbmV0d29ya1F1YWxpdHlMZXZlbENoYW5nZWQnLCB0aGlzLm5ldHdvcmtRdWFsaXR5Q2hhbmdlZCk7XHJcbiAgICAgICAgcm9vbS5wYXJ0aWNpcGFudHMuZm9yRWFjaCgocGFydGljaXBhbnQpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJQYXJ0aWNpcGFudDpcIiwgcGFydGljaXBhbnQpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFscmVhZHkgaW4gUm9vbTogJ1wiICsgcGFydGljaXBhbnQuaWRlbnRpdHkgKyBcIidcIik7XHJcbiAgICAgICAgICAgIF90aGlzLmF0dGFjaFBhcnRpY2lwYW50VHJhY2tzKHBhcnRpY2lwYW50LCBfdGhpcy5yZW1vdGVWaWRlby5uYXRpdmVFbGVtZW50LCByb29tKTtcclxuICAgICAgICAgICAgX3RoaXMucGFydGljaXBhbnRzQ291bnQgPSByb29tLnBhcnRpY2lwYW50cy5zaXplO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZmlyc3Q6cGFydGljaXBhbnRzQ291bnQ6JyArIF90aGlzLnBhcnRpY2lwYW50c0NvdW50KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gV2hlbiBhIFBhcnRpY2lwYW50IGpvaW5zIHRoZSBSb29tLCBsb2cgdGhlIGV2ZW50LlxyXG4gICAgICAgIHJvb20ub24oJ3BhcnRpY2lwYW50Q29ubmVjdGVkJywgZnVuY3Rpb24gKHBhcnRpY2lwYW50KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUGFydGljaXBhbnQ6XCIsIHBhcnRpY2lwYW50KTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJKb2luaW5nOiAnXCIgKyBwYXJ0aWNpcGFudC5pZGVudGl0eSArIFwiJ1wiKTtcclxuICAgICAgICAgICAgX3RoaXMucGFydGljaXBhbnRzQ291bnQgPSByb29tLnBhcnRpY2lwYW50cy5zaXplO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImNvbm5lY3RlZCAtIFBhcnRpY2lwYW50czpcIiArIHJvb20ucGFydGljaXBhbnRzLnNpemUpO1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMucGFydGljaXBhbnRzQ291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFjdGl2YXRlVGltZXIodHJ1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hY3RpdmF0ZVRpbWVyKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBXaGVuIGEgUGFydGljaXBhbnQgYWRkcyBhIFRyYWNrLCBhdHRhY2ggaXQgdG8gdGhlIERPTS5cclxuICAgICAgICByb29tLm9uKCd0cmFja1N1YnNjcmliZWQnLCBmdW5jdGlvbiAodHJhY2ssIHRyYWNrUHVibGljYXRpb24sIHBhcnRpY2lwYW50KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTG9jYWwgUGFydGljaXBhbnQ6XCIsIHJvb20ubG9jYWxQYXJ0aWNpcGFudCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUmVtb3RlIFBhcnRpY2lwYW50OlwiLCByb29tLnJlbW90ZVBhcnRpY2lwYW50KTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocGFydGljaXBhbnQuaWRlbnRpdHkgKyAnIGFkZGVkIHRyYWNrOiAnICsgdHJhY2sua2luZCk7XHJcbiAgICAgICAgICAgIF90aGlzLnBhcnRpY2lwYW50c0NvdW50ID0gcm9vbS5wYXJ0aWNpcGFudHMuc2l6ZTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJQYXJ0aWNpcGFudHM6XCIgK190aGlzLnBhcnRpY2lwYW50c0NvdW50KTtcclxuICAgICAgICAgICAgLy8gdmFyIHByZXZpZXdDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVtb3RlVmlkZW8nKTtcclxuICAgICAgICAgICAgX3RoaXMuYXR0YWNoVHJhY2tzKFt0cmFja10sIF90aGlzLnJlbW90ZVZpZGVvLm5hdGl2ZUVsZW1lbnQsIHJvb20pO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndHJhY2tzdWJzY3JpYmVkJyk7XHJcbiAgICAgICAgICAgIGlmKHRyYWNrLmtpbmQgPT09ICd2aWRlbycpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZVJlbW90ZVBhcnRpY2lwYW50RGV0YWlscyhfdGhpcy5yZW1vdGVWaWRlby5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoX3RoaXMucGFydGljaXBhbnRzQ291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFjdGl2YXRlVGltZXIodHJ1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hY3RpdmF0ZVRpbWVyKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBXaGVuIGEgUGFydGljaXBhbnQgcmVtb3ZlcyBhIFRyYWNrLCBkZXRhY2ggaXQgZnJvbSB0aGUgRE9NLlxyXG4gICAgICAgIHJvb20ub24oJ3RyYWNrVW5zdWJzY3JpYmVkJywgZnVuY3Rpb24gKHRyYWNrLCB0cmFja1B1YmxpY2F0aW9uLCBwYXJ0aWNpcGFudCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhwYXJ0aWNpcGFudC5pZGVudGl0eSArICcgcmVtb3ZlZCB0cmFjazogJyArIHRyYWNrLmtpbmQpO1xyXG4gICAgICAgICAgICBfdGhpcy5kZXRhY2hUcmFja3MoW3RyYWNrXSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0cmFja1Vuc3Vic2NyaWJlZCcpO1xyXG4gICAgICAgICAgICBpZih0cmFjay5raW5kID09PSAndmlkZW8nKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hZGRSZW1vdGVQYXJ0aWNpcGFudERldGFpbHMoX3RoaXMucmVtb3RlVmlkZW8ubmF0aXZlRWxlbWVudCwgcGFydGljaXBhbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vbS5vbigncGFydGljaXBhbnRSZWNvbm5lY3RpbmcnLCByZW1vdGVQYXJ0aWNpcGFudCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlbW90ZVBhcnRpY2lwYW50LnN0YXRlLCAncmVjb25uZWN0aW5nJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3JlbW90ZVBhcnRpY2lwYW50LmlkZW50aXR5fSBpcyByZWNvbm5lY3RpbmcgdGhlIHNpZ25hbGluZyBjb25uZWN0aW9uIHRvIHRoZSBSb29tIWApO1xyXG4gICAgICAgICAgICAvKiBVcGRhdGUgdGhlIFJlbW90ZVBhcnRpY2lwYW50IFVJIGhlcmUgKi9cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcm9vbS5vbigncGFydGljaXBhbnRSZWNvbm5lY3RlZCcsIHJlbW90ZVBhcnRpY2lwYW50ID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVtb3RlUGFydGljaXBhbnQuc3RhdGUsICdjb25uZWN0ZWQnKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYCR7cmVtb3RlUGFydGljaXBhbnQuaWRlbnRpdHl9IGhhcyByZWNvbm5lY3RlZCB0aGUgc2lnbmFsaW5nIGNvbm5lY3Rpb24gdG8gdGhlIFJvb20hYCk7XHJcbiAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgUmVtb3RlUGFydGljaXBhbnQgVUkgaGVyZSAqL1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gV2hlbiBhIFBhcnRpY2lwYW50IGxlYXZlcyB0aGUgUm9vbSwgZGV0YWNoIGl0cyBUcmFja3MuXHJcbiAgICAgICAgcm9vbS5vbigncGFydGljaXBhbnREaXNjb25uZWN0ZWQnLCBmdW5jdGlvbiAocGFydGljaXBhbnQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJQYXJ0aWNpcGFudCAnXCIgKyBwYXJ0aWNpcGFudC5pZGVudGl0eSArIFwiJyBsZWZ0IHRoZSByb29tXCIpO1xyXG4gICAgICAgICAgICBfdGhpcy5kZXRhY2hQYXJ0aWNpcGFudFRyYWNrcyhwYXJ0aWNpcGFudCwgcm9vbSwgX3RoaXMpO1xyXG4gICAgICAgICAgICBfdGhpcy5wYXJ0aWNpcGFudHNDb3VudCA9IHJvb20ucGFydGljaXBhbnRzLnNpemU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGlzQ29ubmVjdGVkIC0gUGFydGljaXBhbnRzIFNpemU6XCIgKyByb29tLnBhcnRpY2lwYW50cy5zaXplKTtcclxuICAgICAgICAgICAgX3RoaXMucmVtb3ZlUmVtb3RlUGFydGljaXBhbnREZXRhaWxzKF90aGlzLnJlbW90ZVZpZGVvLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgICAgICBfdGhpcy5hY3RpdmF0ZVRpbWVyKHRydWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJvb20ub24oJ3JlY29ubmVjdGluZycsIGVycm9yID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vbS5zdGF0ZSwgJ3JlY29ubmVjdGluZycpO1xyXG4gICAgICAgICAgICBfdGhpcy5zZW5kRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICBfdGhpcy5wYXJ0aWNpcGFudHNDb3VudCA9IHJvb20ucGFydGljaXBhbnRzLnNpemU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY29ubmVjdGVkIC0gUGFydGljaXBhbnRzOlwiICsgcm9vbS5wYXJ0aWNpcGFudHMuc2l6ZSk7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5wYXJ0aWNpcGFudHNDb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuYWN0aXZhdGVUaW1lcih0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFjdGl2YXRlVGltZXIoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgYXBwbGljYXRpb24gVUkgaGVyZSAqL1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByb29tLm9uKCdyZWNvbm5lY3RlZCcsICgpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vbS5zdGF0ZSwgJ2Nvbm5lY3RlZCcpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUmVjb25uZWN0ZWQgeW91ciBzaWduYWxpbmcgYW5kIG1lZGlhIGNvbm5lY3Rpb25zIScpO1xyXG4gICAgICAgICAgICBfdGhpcy5wYXJ0aWNpcGFudHNDb3VudCA9IHJvb20ucGFydGljaXBhbnRzLnNpemU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY29ubmVjdGVkIC0gUGFydGljaXBhbnRzOlwiICsgcm9vbS5wYXJ0aWNpcGFudHMuc2l6ZSk7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5wYXJ0aWNpcGFudHNDb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuYWN0aXZhdGVUaW1lcih0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFjdGl2YXRlVGltZXIoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgYXBwbGljYXRpb24gVUkgaGVyZSAqL1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAvLyBPbmNlIHRoZSBMb2NhbFBhcnRpY2lwYW50IGxlYXZlcyB0aGUgcm9vbSwgZGV0YWNoIHRoZSBUcmFja3NcclxuICAgICAgICAvLyBvZiBhbGwgUGFydGljaXBhbnRzLCBpbmNsdWRpbmcgdGhhdCBvZiB0aGUgTG9jYWxQYXJ0aWNpcGFudC5cclxuICAgICAgICByb29tLm9uKCdkaXNjb25uZWN0ZWQnLCBmdW5jdGlvbiAocm9vbSwgZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0xlZnQnKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vbS5zdGF0ZSwgJ2Rpc2Nvbm5lY3RlZCcpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yOlwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIF90aGlzLnNlbmRFcnJvcihlcnJvcik7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJvb20ubG9jYWxQYXJ0aWNpcGFudC50cmFja3MuZm9yRWFjaChwdWJsaWNhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBwdWJsaWNhdGlvbi50cmFjay5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICBwdWJsaWNhdGlvbi51bnB1Ymxpc2goKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaGVkRWxlbWVudHMgPSBwdWJsaWNhdGlvbi50cmFjay5kZXRhY2goKTtcclxuICAgICAgICAgICAgICAgIGF0dGFjaGVkRWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IGVsZW1lbnQucmVtb3ZlKCkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKF90aGlzLmxvY2FsVmlkZW8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsRWxlbWVudCA9IF90aGlzLmxvY2FsVmlkZW8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChsb2NhbEVsZW1lbnQuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsRWxlbWVudC5yZW1vdmVDaGlsZChsb2NhbEVsZW1lbnQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKF90aGlzLnJlbW90ZVZpZGVvKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZW1vdGVFbGVtZW50ID0gX3RoaXMucmVtb3RlVmlkZW8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChyZW1vdGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdGVFbGVtZW50LnJlbW92ZUNoaWxkKHJlbW90ZUVsZW1lbnQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgX3RoaXMucGFydGljaXBhbnRzQ291bnQgPSByb29tLnBhcnRpY2lwYW50cy5zaXplO1xyXG4gICAgICAgICAgICBfdGhpcy5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZW1vdmVSZW1vdGVQYXJ0aWNpcGFudERldGFpbHMoY29udGFpbmVyKSB7XHJcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlbW90ZUltZycpO1xyXG4gICAgICAgIGlmKGRpdikge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lciwgZGl2KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhZGRSZW1vdGVQYXJ0aWNpcGFudERldGFpbHMoY29udGFpbmVyLCBwYXJ0aWNpcGFudCkge1xyXG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2lkJywncmVtb3RlSW1nJyk7XHJcbiAgICAgICAgY29uc3QgZGl2MSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIGRpdjEuc2V0QXR0cmlidXRlKCdjbGFzcycsICdhdmF0YXItaW1nJyk7XHJcbiAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRpdjEpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGRpdjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBkaXYyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnYXZhdGFyLXRleHQnKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udGVudERpdiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHBhcnRpY2lwYW50LmlkZW50aXR5KTtcclxuICAgICAgICBkaXYyLmFwcGVuZENoaWxkKGNvbnRlbnREaXYpO1xyXG4gICAgICAgIGRpdi5hcHBlbmRDaGlsZChkaXYyKTtcclxuICAgICAgICAvLyBjb25zdCBpbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltYWdlJyk7XHJcbiAgICAgICAgLy8gaW1hZ2Uuc2V0QXR0cmlidXRlKCdjbGFzcycsICcnKTtcclxuICAgICAgICAvLyBpbWFnZS5zZXRBdHRyaWJ1dGUoJ2FsdCcsIHBhcnRpY2lwYW50LmlkZW50aXR5KTtcclxuICAgICAgICAvLyBkaXYxLmFwcGVuZENoaWxkKGltYWdlKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGNvbnRhaW5lciwgZGl2KTtcclxuICAgIH1cclxuICAgIGRpc2Nvbm5lY3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmIChfdGhpcy5wcmV2aWV3VHJhY2tzKSB7XHJcbiAgICAgICAgICAgIF90aGlzLnByZXZpZXdUcmFja3MuZm9yRWFjaChsb2NhbFRyYWNrID0+IHtcclxuICAgICAgICAgICAgICAgIGxvY2FsVHJhY2suc3RvcCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgX3RoaXMucHJldmlld1RyYWNrcyA9IG51bGw7XHJcbiAgICAgICAgaWYgKF90aGlzLmFjdGl2ZVJvb20gJiYgX3RoaXMuYWN0aXZlUm9vbS5sb2NhbFBhcnRpY2lwYW50ICYmIF90aGlzLmFjdGl2ZVJvb20ubG9jYWxQYXJ0aWNpcGFudC5sb2NhbFRyYWNrcykge1xyXG4gICAgICAgICAgICBfdGhpcy5hY3RpdmVSb29tLmxvY2FsUGFydGljaXBhbnQubG9jYWxUcmFja3MuZm9yRWFjaChsb2NhbFRyYWNrID0+IHtcclxuICAgICAgICAgICAgICAgIGxvY2FsVHJhY2suc3RvcCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKF90aGlzLmFjdGl2ZVJvb20gJiYgX3RoaXMuYWN0aXZlUm9vbSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBfdGhpcy5hY3RpdmVSb29tLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICAgICAgX3RoaXMuYWN0aXZlUm9vbSA9IG51bGw7XHJcbiAgICAgICAgICAgIF90aGlzLmNhbTFEZXZpY2UgPSBudWxsO1xyXG4gICAgICAgICAgICBfdGhpcy5jYW0yRGV2aWNlID0gbnVsbDtcclxuICAgICAgICAgICAgX3RoaXMuc2VsZWN0ZWRWaWRlb0lkID0gbnVsbDsgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIF90aGlzLnZpZGVvID0gdHJ1ZTtcclxuICAgICAgICBfdGhpcy5taWNyb3Bob25lID0gdHJ1ZTtcclxuICAgICAgICBpZiAoX3RoaXMucmVtb3RlVmlkZW8pIHtcclxuICAgICAgICAgICAgX3RoaXMucmVtb3ZlUmVtb3RlUGFydGljaXBhbnREZXRhaWxzKF90aGlzLnJlbW90ZVZpZGVvLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIH0gXHJcbiAgICB9XHJcbn1cclxuIl19
@@ -169,13 +169,13 @@ export class WordProcessor {
169
169
  return (term === term_only) ? term_only : term;
170
170
  }
171
171
  }
172
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WordProcessor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
173
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WordProcessor, providedIn: 'root' });
172
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WordProcessor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
173
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WordProcessor, providedIn: 'root' });
174
174
  }
175
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WordProcessor, decorators: [{
175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WordProcessor, decorators: [{
176
176
  type: Injectable,
177
177
  args: [{
178
178
  providedIn: 'root'
179
179
  }]
180
180
  }], ctorParameters: () => [] });
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yZC1wcm9jZXNzb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2pjb25zdW1lci1zaGFyZWQvc3JjL2xpYi93b3JkLXByb2Nlc3Nvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUs5Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxDQUFDLE9BQU87SUFDdEMsYUFBYSxDQUFNO0lBQ25CLGVBQWUsQ0FBTTtJQUVyQixnQkFBZ0IsQ0FBQztJQUNqQjs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxhQUFrQjtRQUNqQyxvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDckMsQ0FBQztJQUNEOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FBQyxXQUFnQjtRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsR0FBUTtRQUNsQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZLENBQUMsR0FBUTtRQUNuQixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUs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LFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2pELENBQUM7SUFDSCxDQUFDO3VHQXJLVSxhQUFhOzJHQUFiLGFBQWEsY0FMWixNQUFNOzsyRkFLUCxhQUFhO2tCQU56QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXHJcbmltcG9ydCB7IE1lc3NhZ2VzIH0gZnJvbSBcIi4vcHJvamVjdC1tZXNzYWdlc1wiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG4vKipcclxuICogVGVybWlub2xvZ3kvV29yZCBGYWN0b3J5XHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgV29yZFByb2Nlc3NvciB7XHJcbiAgVElNRU9VVF9ERUxBWV9MQVJHRTEwID0gMTAwMDA7IC8vIG1zZWNcclxuICB0ZXJtaW5vbG9naWVzOiBhbnk7XHJcbiAgc3B0ZXJtaW5vbG9naWVzOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHRvIHNldCB0aGUgdGVybWlubG9naWVzIGZvciBKYWxkZWVcclxuICAgKiBAcGFyYW0gdGVybWlub2xvZ2llcyBcclxuICAgKi9cclxuICBzZXRUZXJtaW5vbG9naWVzKHRlcm1pbm9sb2dpZXM6IGFueSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJTZXQgVGVybWlub2xvZ2llczpcIiwgdGVybWlub2xvZ2llcyk7XHJcbiAgICB0aGlzLnRlcm1pbm9sb2dpZXMgPSB0ZXJtaW5vbG9naWVzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBNZXRob2QgdG8gZ2V0IHRoZSB0ZXJtaW5vbG9naWVzXHJcbiAgICovXHJcbiAgZ2V0VGVybWlub2xvZ2llcygpIHtcclxuICAgIHJldHVybiB0aGlzLnRlcm1pbm9sb2dpZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiAgTWV0aG9kIHRvIHNldCB0aGUgc3AgdGVybWlubG9naWVzIGZvciBKYWxkZWVcclxuICAgKiBAcGFyYW0gdGVybWlub2xvZ3kgXHJcbiAgICovXHJcbiAgc2V0U1BUZXJtaW5vbG9naWVzKHRlcm1pbm9sb2d5OiBhbnkpIHtcclxuICAgIHRoaXMuc3B0ZXJtaW5vbG9naWVzID0gdGVybWlub2xvZ3k7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2QgdG8gZ2V0IHRoZSBzcCB0ZXJtaW5vbG9naWVzXHJcbiAgICovXHJcbiAgZ2V0U1BUZXJtaW5vbG9naWVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3B0ZXJtaW5vbG9naWVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHJldHVybnMgdGhlIENhbWVsQ2FzZVxyXG4gICAqIEBwYXJhbSBzdHIgdGV4dCB0byBjb252ZXJ0XHJcbiAgICovXHJcbiAgdG9DYW1lbENhc2Uoc3RyOiBhbnkpIHtcclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IHRoZSBmaXJzdCBsZXR0ZXIgdG8gVXBwZXJjYXNlXHJcbiAgICogQHBhcmFtIHN0ciBcclxuICAgKi9cclxuICBmaXJzdFRvVXBwZXIoc3RyOiBhbnkpIHtcclxuICAgIGlmIChzdHIpIHtcclxuICAgICAgaWYgKHN0ci5zdWJzdHIoMCwgNykgPT09ICdodHRwOi8vJyB8fCBzdHIuc3Vic3RyKDAsIDgpID09PSAnaHR0cHM6Ly8nKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnN1YnN0cigxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBTaG93L0hpZGUgU3VjY2VzcyBvciBFcnJvciBNZXNzYWdlc1xyXG4gICAqIEBwYXJhbSBvYiBPYmplY3QgdG8gcHV0IHRoZSBtZXNzYWdlXHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgTWVzc2FnZSB0byBzaG93XHJcbiAgICovXHJcbiAgYXBpU3VjY2Vzc0F1dG9IaWRlKG9iOiBhbnksIG1lc3NhZ2U6IGFueSkge1xyXG4gICAgY29uc3QgcmVwbGFjZWRfbWVzc2FnZSA9IHRoaXMuZmluZFRlcm1pbm9sb2d5VGVybShtZXNzYWdlKTtcclxuICAgIG9iLmFwaV9zdWNjZXNzID0gdGhpcy5maXJzdFRvVXBwZXIocmVwbGFjZWRfbWVzc2FnZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgb2IuYXBpX3N1Y2Nlc3MgPSBudWxsO1xyXG4gICAgfSwgdGhpcy5USU1FT1VUX0RFTEFZX0xBUkdFMTApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTaG93IGVycm9yIGFuZCBoaWRlIGl0IGF1dG9tYXRpY2FsbHlcclxuICAgKiBAcGFyYW0gb2IgT2JqZWN0IGhvbGRzIHRoZSBtZXNzYWdlXHJcbiAgICogQHBhcmFtIGVycm9yIE1lc3NhZ2UgdG8gYmUgc2hvd25cclxuICAgKi9cclxuICBhcGlFcnJvckF1dG9IaWRlKG9iOiBhbnksIGVycm9yOiBhbnkpIHtcclxuICAgIC8vIGVycm9yID0gdGhpcy5lcnJvclNlcnZpY2UuZ2V0QXBpRXJyb3IoZXJyb3IpO1xyXG4gICAgY29uc3QgcmVwbGFjZWRfbWVzc2FnZSA9IHRoaXMuZmluZFRlcm1pbm9sb2d5VGVybShlcnJvcik7XHJcbiAgICBvYi5hcGlfZXJyb3IgPSB0aGlzLmZpcnN0VG9VcHBlcihyZXBsYWNlZF9tZXNzYWdlKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBvYi5hcGlfZXJyb3IgPSBudWxsO1xyXG4gICAgfSwgdGhpcy5USU1FT1VUX0RFTEFZX0xBUkdFMTApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXQgdGhlIHRlcm1pbm9sb2d5IGZyb20gdGVybWlub2xvZ2llc1xyXG4gICAqIEBwYXJhbSB0ZXJtIFxyXG4gICAqL1xyXG4gIGdldFRlcm1pbm9sb2d5VGVybSh0ZXJtOiBhbnksIHRlcm1pbm9sb2dpZXM/OiBhbnkpIHtcclxuICAgIGlmICh0ZXJtaW5vbG9naWVzKSB7XHJcbiAgICAgIHRoaXMuc2V0VGVybWlub2xvZ2llcyh0ZXJtaW5vbG9naWVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRlcm1pbm9sb2dpZXMgPSB0aGlzLmdldFRlcm1pbm9sb2dpZXMoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHRlcm1fb25seSA9IHRlcm0ucmVwbGFjZSgvW1xcW1xcXSddL2csICcnKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJHZXQgVGVybWlub2xvZ3kgVGVybVwiLCB0ZXJtaW5vbG9naWVzKTtcclxuICAgIGlmICh0ZXJtaW5vbG9naWVzKSB7XHJcbiAgICAgIHJldHVybiAodGVybWlub2xvZ2llc1t0ZXJtX29ubHldKSA/IHRlcm1pbm9sb2dpZXNbdGVybV9vbmx5XSA6ICgodGVybSA9PT0gdGVybV9vbmx5KSA/IHRlcm1fb25seSA6IHRlcm0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICh0ZXJtID09PSB0ZXJtX29ubHkpID8gdGVybV9vbmx5IDogdGVybTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmVwbGFjZSB0aGUgdGVybSB3aXRoaW4gdGhlIGZ1bGwgbWVzc2FnZVxyXG4gICAqIEBwYXJhbSB0ZXJtIHRlcm0gdG8gYmUgcmVwbGFjZWRcclxuICAgKiBAcGFyYW0gZnVsbF9tZXNzYWdlIGZ1bGwgbWVzc2FnZVxyXG4gICAqL1xyXG4gIHJlbW92ZVRlcm1pbm9sb2d5VGVybSh0ZXJtOiBhbnksIGZ1bGxfbWVzc2FnZTogYW55KSB7XHJcbiAgICBjb25zdCB0ZXJtX3JlcGxhY2UgPSB0aGlzLmdldFRlcm1pbm9sb2d5VGVybSh0ZXJtKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiVGVybSBUbyByZXBsYWNlOlwiLCB0ZXJtX3JlcGxhY2UpO1xyXG4gICAgY29uc3QgdGVybV9vbmx5ID0gdGVybS5yZXBsYWNlKC9bXFxbXFxdJ10vZywgJycpOyAvLyB0ZXJtIG1heSBtZSB3aXRoIG9yIHdpdGhvdXQgJ1snICddJ1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJUZXJtOlwiLCB0ZXJtX29ubHkpO1xyXG4gICAgcmV0dXJuIGZ1bGxfbWVzc2FnZS5yZXBsYWNlKCdbJyArIHRlcm1fb25seSArICddJywgdGVybV9yZXBsYWNlKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRmluZCB0aGUgdGVybWlub2xvZ3lcclxuICAgKiBAcGFyYW0gbWVzc2FnZSBcclxuICAgKi9cclxuICBmaW5kVGVybWlub2xvZ3lUZXJtKG1lc3NhZ2U6IGFueSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJNZXNzYWdlOlwiLCBtZXNzYWdlKTtcclxuICAgIGxldCByZXBsYWNlZF9tc2cgPSBtZXNzYWdlO1xyXG4gICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgY29uc3QgbWF0Y2hlcyA9IG1lc3NhZ2UubWF0Y2goL1xcWyguKj8pXFxdL2cpO1xyXG4gICAgICByZXBsYWNlZF9tc2cgPSBtZXNzYWdlO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcIk1hdGNoZXNcIiwgbWF0Y2hlcyk7XHJcbiAgICAgIGlmIChtYXRjaGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7XHJcbiAgICAgICAgICByZXBsYWNlZF9tc2cgPSB0aGlzLnJlbW92ZVRlcm1pbm9sb2d5VGVybShtYXRjaCwgcmVwbGFjZWRfbXNnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXBsYWNlZF9tc2c7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBtZXNzYWdlcyBsaXN0XHJcbiAgICogQHBhcmFtIGtleSBpZGVudGlmaWVyIGZvciB0aGUgbWVzc2FnZVxyXG4gICAqL1xyXG4gIGdldFByb2plY3RNZXNzc2FnZXMoa2V5OiBhbnkpIHtcclxuICAgIGxldCBtZXNzYWdlID0gTWVzc2FnZXNba2V5XSB8fCAnJztcclxuICAgIG1lc3NhZ2UgPSB0aGlzLmZpbmRUZXJtaW5vbG9neVRlcm0obWVzc2FnZSk7XHJcbiAgICByZXR1cm4gdGhpcy5maXJzdFRvVXBwZXIobWVzc2FnZSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEV4dHJhY3QgZXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBlcnJvciBvYmplY3RcclxuICAgKiBAcGFyYW0gZXJyb3IgZXJyb3IgbWVzc2FnZSB0byBzaG93blxyXG4gICAqL1xyXG4gIGdldFByb2plY3RFcnJvck1lc3NzYWdlcyhtZXNzYWdlOiBhbnksIHRlcm1pbm9sb2dpZXM/OiBhbnkpIHtcclxuICAgIGlmICh0ZXJtaW5vbG9naWVzKSB7XHJcbiAgICAgIHRoaXMuc2V0VGVybWlub2xvZ2llcyh0aGlzLnRlcm1pbm9sb2dpZXMpO1xyXG4gICAgfVxyXG4gICAgLy8gbGV0IG1lc3NhZ2UgPSB0aGlzLmVycm9yU2VydmljZS5nZXRBcGlFcnJvcihlcnJvcik7XHJcbiAgICBtZXNzYWdlID0gdGhpcy5maW5kVGVybWlub2xvZ3lUZXJtKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIHRoaXMuZmlyc3RUb1VwcGVyKG1lc3NhZ2UpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXQgdGhlIHRlcm1pbm9sb2d5IGZyb20gdGVybWlub2xvZ2llc1xyXG4gICAqIEBwYXJhbSB0ZXJtIFxyXG4gICAqL1xyXG4gIGdldFNQVGVybWlub2xvZ3lUZXJtKHRlcm06IGFueSkge1xyXG4gICAgY29uc3QgdGVybV9vbmx5ID0gdGVybTtcclxuICAgIGNvbnN0IHRlcm1pbm9sb2dpZXMgPSB0aGlzLmdldFNQVGVybWlub2xvZ2llcygpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJUZXJtaW5vbG9naWVzOlwiLCB0ZXJtaW5vbG9naWVzKTtcclxuICAgIGlmICh0ZXJtaW5vbG9naWVzKSB7XHJcbiAgICAgIHJldHVybiAodGVybWlub2xvZ2llc1t0ZXJtX29ubHldKSA/IHRlcm1pbm9sb2dpZXNbdGVybV9vbmx5XSA6ICgodGVybSA9PT0gdGVybV9vbmx5KSA/IHRlcm1fb25seSA6IHRlcm0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICh0ZXJtID09PSB0ZXJtX29ubHkpID8gdGVybV9vbmx5IDogdGVybTtcclxuICAgIH1cclxuICB9XHJcbn0iXX0=
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yZC1wcm9jZXNzb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2pjb25zdW1lci1zaGFyZWQvc3JjL2xpYi93b3JkLXByb2Nlc3Nvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUs5Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxDQUFDLE9BQU87SUFDdEMsYUFBYSxDQUFNO0lBQ25CLGVBQWUsQ0FBTTtJQUVyQixnQkFBZ0IsQ0FBQztJQUNqQjs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxhQUFrQjtRQUNqQyxvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDckMsQ0FBQztJQUNEOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FBQyxXQUFnQjtRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsR0FBUTtRQUNsQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZLENBQUMsR0FBUTtRQUNuQixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUs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LFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2pELENBQUM7SUFDSCxDQUFDO3dHQXJLVSxhQUFhOzRHQUFiLGFBQWEsY0FMWixNQUFNOzs0RkFLUCxhQUFhO2tCQU56QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXHJcbmltcG9ydCB7IE1lc3NhZ2VzIH0gZnJvbSBcIi4vcHJvamVjdC1tZXNzYWdlc1wiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG4vKipcclxuICogVGVybWlub2xvZ3kvV29yZCBGYWN0b3J5XHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgV29yZFByb2Nlc3NvciB7XHJcbiAgVElNRU9VVF9ERUxBWV9MQVJHRTEwID0gMTAwMDA7IC8vIG1zZWNcclxuICB0ZXJtaW5vbG9naWVzOiBhbnk7XHJcbiAgc3B0ZXJtaW5vbG9naWVzOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHRvIHNldCB0aGUgdGVybWlubG9naWVzIGZvciBKYWxkZWVcclxuICAgKiBAcGFyYW0gdGVybWlub2xvZ2llcyBcclxuICAgKi9cclxuICBzZXRUZXJtaW5vbG9naWVzKHRlcm1pbm9sb2dpZXM6IGFueSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJTZXQgVGVybWlub2xvZ2llczpcIiwgdGVybWlub2xvZ2llcyk7XHJcbiAgICB0aGlzLnRlcm1pbm9sb2dpZXMgPSB0ZXJtaW5vbG9naWVzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBNZXRob2QgdG8gZ2V0IHRoZSB0ZXJtaW5vbG9naWVzXHJcbiAgICovXHJcbiAgZ2V0VGVybWlub2xvZ2llcygpIHtcclxuICAgIHJldHVybiB0aGlzLnRlcm1pbm9sb2dpZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiAgTWV0aG9kIHRvIHNldCB0aGUgc3AgdGVybWlubG9naWVzIGZvciBKYWxkZWVcclxuICAgKiBAcGFyYW0gdGVybWlub2xvZ3kgXHJcbiAgICovXHJcbiAgc2V0U1BUZXJtaW5vbG9naWVzKHRlcm1pbm9sb2d5OiBhbnkpIHtcclxuICAgIHRoaXMuc3B0ZXJtaW5vbG9naWVzID0gdGVybWlub2xvZ3k7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2QgdG8gZ2V0IHRoZSBzcCB0ZXJtaW5vbG9naWVzXHJcbiAgICovXHJcbiAgZ2V0U1BUZXJtaW5vbG9naWVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3B0ZXJtaW5vbG9naWVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHJldHVybnMgdGhlIENhbWVsQ2FzZVxyXG4gICAqIEBwYXJhbSBzdHIgdGV4dCB0byBjb252ZXJ0XHJcbiAgICovXHJcbiAgdG9DYW1lbENhc2Uoc3RyOiBhbnkpIHtcclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IHRoZSBmaXJzdCBsZXR0ZXIgdG8gVXBwZXJjYXNlXHJcbiAgICogQHBhcmFtIHN0ciBcclxuICAgKi9cclxuICBmaXJzdFRvVXBwZXIoc3RyOiBhbnkpIHtcclxuICAgIGlmIChzdHIpIHtcclxuICAgICAgaWYgKHN0ci5zdWJzdHIoMCwgNykgPT09ICdodHRwOi8vJyB8fCBzdHIuc3Vic3RyKDAsIDgpID09PSAnaHR0cHM6Ly8nKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnN1YnN0cigxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBTaG93L0hpZGUgU3VjY2VzcyBvciBFcnJvciBNZXNzYWdlc1xyXG4gICAqIEBwYXJhbSBvYiBPYmplY3QgdG8gcHV0IHRoZSBtZXNzYWdlXHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgTWVzc2FnZSB0byBzaG93XHJcbiAgICovXHJcbiAgYXBpU3VjY2Vzc0F1dG9IaWRlKG9iOiBhbnksIG1lc3NhZ2U6IGFueSkge1xyXG4gICAgY29uc3QgcmVwbGFjZWRfbWVzc2FnZSA9IHRoaXMuZmluZFRlcm1pbm9sb2d5VGVybShtZXNzYWdlKTtcclxuICAgIG9iLmFwaV9zdWNjZXNzID0gdGhpcy5maXJzdFRvVXBwZXIocmVwbGFjZWRfbWVzc2FnZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgb2IuYXBpX3N1Y2Nlc3MgPSBudWxsO1xyXG4gICAgfSwgdGhpcy5USU1FT1VUX0RFTEFZX0xBUkdFMTApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTaG93IGVycm9yIGFuZCBoaWRlIGl0IGF1dG9tYXRpY2FsbHlcclxuICAgKiBAcGFyYW0gb2IgT2JqZWN0IGhvbGRzIHRoZSBtZXNzYWdlXHJcbiAgICogQHBhcmFtIGVycm9yIE1lc3NhZ2UgdG8gYmUgc2hvd25cclxuICAgKi9cclxuICBhcGlFcnJvckF1dG9IaWRlKG9iOiBhbnksIGVycm9yOiBhbnkpIHtcclxuICAgIC8vIGVycm9yID0gdGhpcy5lcnJvclNlcnZpY2UuZ2V0QXBpRXJyb3IoZXJyb3IpO1xyXG4gICAgY29uc3QgcmVwbGFjZWRfbWVzc2FnZSA9IHRoaXMuZmluZFRlcm1pbm9sb2d5VGVybShlcnJvcik7XHJcbiAgICBvYi5hcGlfZXJyb3IgPSB0aGlzLmZpcnN0VG9VcHBlcihyZXBsYWNlZF9tZXNzYWdlKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBvYi5hcGlfZXJyb3IgPSBudWxsO1xyXG4gICAgfSwgdGhpcy5USU1FT1VUX0RFTEFZX0xBUkdFMTApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXQgdGhlIHRlcm1pbm9sb2d5IGZyb20gdGVybWlub2xvZ2llc1xyXG4gICAqIEBwYXJhbSB0ZXJtIFxyXG4gICAqL1xyXG4gIGdldFRlcm1pbm9sb2d5VGVybSh0ZXJtOiBhbnksIHRlcm1pbm9sb2dpZXM/OiBhbnkpIHtcclxuICAgIGlmICh0ZXJtaW5vbG9naWVzKSB7XHJcbiAgICAgIHRoaXMuc2V0VGVybWlub2xvZ2llcyh0ZXJtaW5vbG9naWVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRlcm1pbm9sb2dpZXMgPSB0aGlzLmdldFRlcm1pbm9sb2dpZXMoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHRlcm1fb25seSA9IHRlcm0ucmVwbGFjZSgvW1xcW1xcXSddL2csICcnKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJHZXQgVGVybWlub2xvZ3kgVGVybVwiLCB0ZXJtaW5vbG9naWVzKTtcclxuICAgIGlmICh0ZXJtaW5vbG9naWVzKSB7XHJcbiAgICAgIHJldHVybiAodGVybWlub2xvZ2llc1t0ZXJtX29ubHldKSA/IHRlcm1pbm9sb2dpZXNbdGVybV9vbmx5XSA6ICgodGVybSA9PT0gdGVybV9vbmx5KSA/IHRlcm1fb25seSA6IHRlcm0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICh0ZXJtID09PSB0ZXJtX29ubHkpID8gdGVybV9vbmx5IDogdGVybTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmVwbGFjZSB0aGUgdGVybSB3aXRoaW4gdGhlIGZ1bGwgbWVzc2FnZVxyXG4gICAqIEBwYXJhbSB0ZXJtIHRlcm0gdG8gYmUgcmVwbGFjZWRcclxuICAgKiBAcGFyYW0gZnVsbF9tZXNzYWdlIGZ1bGwgbWVzc2FnZVxyXG4gICAqL1xyXG4gIHJlbW92ZVRlcm1pbm9sb2d5VGVybSh0ZXJtOiBhbnksIGZ1bGxfbWVzc2FnZTogYW55KSB7XHJcbiAgICBjb25zdCB0ZXJtX3JlcGxhY2UgPSB0aGlzLmdldFRlcm1pbm9sb2d5VGVybSh0ZXJtKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiVGVybSBUbyByZXBsYWNlOlwiLCB0ZXJtX3JlcGxhY2UpO1xyXG4gICAgY29uc3QgdGVybV9vbmx5ID0gdGVybS5yZXBsYWNlKC9bXFxbXFxdJ10vZywgJycpOyAvLyB0ZXJtIG1heSBtZSB3aXRoIG9yIHdpdGhvdXQgJ1snICddJ1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJUZXJtOlwiLCB0ZXJtX29ubHkpO1xyXG4gICAgcmV0dXJuIGZ1bGxfbWVzc2FnZS5yZXBsYWNlKCdbJyArIHRlcm1fb25seSArICddJywgdGVybV9yZXBsYWNlKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRmluZCB0aGUgdGVybWlub2xvZ3lcclxuICAgKiBAcGFyYW0gbWVzc2FnZSBcclxuICAgKi9cclxuICBmaW5kVGVybWlub2xvZ3lUZXJtKG1lc3NhZ2U6IGFueSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJNZXNzYWdlOlwiLCBtZXNzYWdlKTtcclxuICAgIGxldCByZXBsYWNlZF9tc2cgPSBtZXNzYWdlO1xyXG4gICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgY29uc3QgbWF0Y2hlcyA9IG1lc3NhZ2UubWF0Y2goL1xcWyguKj8pXFxdL2cpO1xyXG4gICAgICByZXBsYWNlZF9tc2cgPSBtZXNzYWdlO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcIk1hdGNoZXNcIiwgbWF0Y2hlcyk7XHJcbiAgICAgIGlmIChtYXRjaGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7XHJcbiAgICAgICAgICByZXBsYWNlZF9tc2cgPSB0aGlzLnJlbW92ZVRlcm1pbm9sb2d5VGVybShtYXRjaCwgcmVwbGFjZWRfbXNnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXBsYWNlZF9tc2c7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBtZXNzYWdlcyBsaXN0XHJcbiAgICogQHBhcmFtIGtleSBpZGVudGlmaWVyIGZvciB0aGUgbWVzc2FnZVxyXG4gICAqL1xyXG4gIGdldFByb2plY3RNZXNzc2FnZXMoa2V5OiBhbnkpIHtcclxuICAgIGxldCBtZXNzYWdlID0gTWVzc2FnZXNba2V5XSB8fCAnJztcclxuICAgIG1lc3NhZ2UgPSB0aGlzLmZpbmRUZXJtaW5vbG9neVRlcm0obWVzc2FnZSk7XHJcbiAgICByZXR1cm4gdGhpcy5maXJzdFRvVXBwZXIobWVzc2FnZSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEV4dHJhY3QgZXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBlcnJvciBvYmplY3RcclxuICAgKiBAcGFyYW0gZXJyb3IgZXJyb3IgbWVzc2FnZSB0byBzaG93blxyXG4gICAqL1xyXG4gIGdldFByb2plY3RFcnJvck1lc3NzYWdlcyhtZXNzYWdlOiBhbnksIHRlcm1pbm9sb2dpZXM/OiBhbnkpIHtcclxuICAgIGlmICh0ZXJtaW5vbG9naWVzKSB7XHJcbiAgICAgIHRoaXMuc2V0VGVybWlub2xvZ2llcyh0aGlzLnRlcm1pbm9sb2dpZXMpO1xyXG4gICAgfVxyXG4gICAgLy8gbGV0IG1lc3NhZ2UgPSB0aGlzLmVycm9yU2VydmljZS5nZXRBcGlFcnJvcihlcnJvcik7XHJcbiAgICBtZXNzYWdlID0gdGhpcy5maW5kVGVybWlub2xvZ3lUZXJtKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIHRoaXMuZmlyc3RUb1VwcGVyKG1lc3NhZ2UpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXQgdGhlIHRlcm1pbm9sb2d5IGZyb20gdGVybWlub2xvZ2llc1xyXG4gICAqIEBwYXJhbSB0ZXJtIFxyXG4gICAqL1xyXG4gIGdldFNQVGVybWlub2xvZ3lUZXJtKHRlcm06IGFueSkge1xyXG4gICAgY29uc3QgdGVybV9vbmx5ID0gdGVybTtcclxuICAgIGNvbnN0IHRlcm1pbm9sb2dpZXMgPSB0aGlzLmdldFNQVGVybWlub2xvZ2llcygpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJUZXJtaW5vbG9naWVzOlwiLCB0ZXJtaW5vbG9naWVzKTtcclxuICAgIGlmICh0ZXJtaW5vbG9naWVzKSB7XHJcbiAgICAgIHJldHVybiAodGVybWlub2xvZ2llc1t0ZXJtX29ubHldKSA/IHRlcm1pbm9sb2dpZXNbdGVybV9vbmx5XSA6ICgodGVybSA9PT0gdGVybV9vbmx5KSA/IHRlcm1fb25seSA6IHRlcm0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICh0ZXJtID09PSB0ZXJtX29ubHkpID8gdGVybV9vbmx5IDogdGVybTtcclxuICAgIH1cclxuICB9XHJcbn0iXX0=