@vendasta/wp-cloud-manager 0.2.0

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 (33) hide show
  1. package/esm2020/lib/_generated/host.service.mjs +25 -0
  2. package/esm2020/lib/_generated/index.mjs +2 -0
  3. package/esm2020/lib/_internal/index.mjs +11 -0
  4. package/esm2020/lib/_internal/interfaces/annotations.interface.mjs +8 -0
  5. package/esm2020/lib/_internal/interfaces/api.interface.mjs +8 -0
  6. package/esm2020/lib/_internal/interfaces/index.mjs +2 -0
  7. package/esm2020/lib/_internal/objects/annotations.mjs +44 -0
  8. package/esm2020/lib/_internal/objects/api.mjs +651 -0
  9. package/esm2020/lib/_internal/objects/index.mjs +9 -0
  10. package/esm2020/lib/_internal/wp-client-manager.api.service.mjs +55 -0
  11. package/esm2020/lib/_internal/wp-cloud-manager.api.service.mjs +65 -0
  12. package/esm2020/lib/index.mjs +3 -0
  13. package/esm2020/public_api.mjs +2 -0
  14. package/esm2020/vendasta-wp-cloud-manager.mjs +5 -0
  15. package/fesm2015/vendasta-wp-cloud-manager.mjs +850 -0
  16. package/fesm2015/vendasta-wp-cloud-manager.mjs.map +1 -0
  17. package/fesm2020/vendasta-wp-cloud-manager.mjs +849 -0
  18. package/fesm2020/vendasta-wp-cloud-manager.mjs.map +1 -0
  19. package/index.d.ts +5 -0
  20. package/lib/_generated/host.service.d.ts +7 -0
  21. package/lib/_generated/index.d.ts +1 -0
  22. package/lib/_internal/index.d.ts +4 -0
  23. package/lib/_internal/interfaces/annotations.interface.d.ts +7 -0
  24. package/lib/_internal/interfaces/api.interface.d.ts +119 -0
  25. package/lib/_internal/interfaces/index.d.ts +2 -0
  26. package/lib/_internal/objects/annotations.d.ts +14 -0
  27. package/lib/_internal/objects/api.d.ts +195 -0
  28. package/lib/_internal/objects/index.d.ts +2 -0
  29. package/lib/_internal/wp-client-manager.api.service.d.ts +16 -0
  30. package/lib/_internal/wp-cloud-manager.api.service.d.ts +18 -0
  31. package/lib/index.d.ts +2 -0
  32. package/package.json +35 -0
  33. package/public_api.d.ts +1 -0
@@ -0,0 +1,651 @@
1
+ export class GetAvailablePHPVersionsRequest {
2
+ static fromProto(proto) {
3
+ let m = new GetAvailablePHPVersionsRequest();
4
+ m = Object.assign(m, proto);
5
+ return m;
6
+ }
7
+ constructor(kwargs) {
8
+ if (!kwargs) {
9
+ return;
10
+ }
11
+ Object.assign(this, kwargs);
12
+ }
13
+ toApiJson() {
14
+ const toReturn = {};
15
+ if (typeof this.client !== 'undefined') {
16
+ toReturn['client'] = this.client;
17
+ }
18
+ return toReturn;
19
+ }
20
+ }
21
+ export class GetAvailablePHPVersionsResponse {
22
+ static fromProto(proto) {
23
+ let m = new GetAvailablePHPVersionsResponse();
24
+ m = Object.assign(m, proto);
25
+ if (proto.phpVersions) {
26
+ m.phpVersions = proto.phpVersions.map(PHPVersion.fromProto);
27
+ }
28
+ return m;
29
+ }
30
+ constructor(kwargs) {
31
+ if (!kwargs) {
32
+ return;
33
+ }
34
+ Object.assign(this, kwargs);
35
+ }
36
+ toApiJson() {
37
+ const toReturn = {};
38
+ if (typeof this.phpVersions !== 'undefined' && this.phpVersions !== null) {
39
+ toReturn['phpVersions'] = 'toApiJson' in this.phpVersions ? this.phpVersions.toApiJson() : this.phpVersions;
40
+ }
41
+ return toReturn;
42
+ }
43
+ }
44
+ export class GetCDNStatusRequest {
45
+ static fromProto(proto) {
46
+ let m = new GetCDNStatusRequest();
47
+ m = Object.assign(m, proto);
48
+ return m;
49
+ }
50
+ constructor(kwargs) {
51
+ if (!kwargs) {
52
+ return;
53
+ }
54
+ Object.assign(this, kwargs);
55
+ }
56
+ toApiJson() {
57
+ const toReturn = {};
58
+ if (typeof this.site !== 'undefined') {
59
+ toReturn['site'] = this.site;
60
+ }
61
+ if (typeof this.domain !== 'undefined') {
62
+ toReturn['domain'] = this.domain;
63
+ }
64
+ return toReturn;
65
+ }
66
+ }
67
+ export class GetCDNStatusResponse {
68
+ static fromProto(proto) {
69
+ let m = new GetCDNStatusResponse();
70
+ m = Object.assign(m, proto);
71
+ return m;
72
+ }
73
+ constructor(kwargs) {
74
+ if (!kwargs) {
75
+ return;
76
+ }
77
+ Object.assign(this, kwargs);
78
+ }
79
+ toApiJson() {
80
+ const toReturn = {};
81
+ if (typeof this.enabled !== 'undefined') {
82
+ toReturn['enabled'] = this.enabled;
83
+ }
84
+ if (typeof this.status !== 'undefined') {
85
+ toReturn['status'] = this.status;
86
+ }
87
+ return toReturn;
88
+ }
89
+ }
90
+ export class GetOneClickLoginRequest {
91
+ static fromProto(proto) {
92
+ let m = new GetOneClickLoginRequest();
93
+ m = Object.assign(m, proto);
94
+ return m;
95
+ }
96
+ constructor(kwargs) {
97
+ if (!kwargs) {
98
+ return;
99
+ }
100
+ Object.assign(this, kwargs);
101
+ }
102
+ toApiJson() {
103
+ const toReturn = {};
104
+ if (typeof this.siteUrl !== 'undefined') {
105
+ toReturn['siteUrl'] = this.siteUrl;
106
+ }
107
+ if (typeof this.redirectTo !== 'undefined') {
108
+ toReturn['redirectTo'] = this.redirectTo;
109
+ }
110
+ return toReturn;
111
+ }
112
+ }
113
+ export class GetOneClickLoginResponse {
114
+ static fromProto(proto) {
115
+ let m = new GetOneClickLoginResponse();
116
+ m = Object.assign(m, proto);
117
+ if (proto.expiresAt) {
118
+ m.expiresAt = parseInt(proto.expiresAt, 10);
119
+ }
120
+ return m;
121
+ }
122
+ constructor(kwargs) {
123
+ if (!kwargs) {
124
+ return;
125
+ }
126
+ Object.assign(this, kwargs);
127
+ }
128
+ toApiJson() {
129
+ const toReturn = {};
130
+ if (typeof this.loginUrl !== 'undefined') {
131
+ toReturn['loginUrl'] = this.loginUrl;
132
+ }
133
+ if (typeof this.expiresAt !== 'undefined') {
134
+ toReturn['expiresAt'] = this.expiresAt;
135
+ }
136
+ if (typeof this.ttl !== 'undefined') {
137
+ toReturn['ttl'] = this.ttl;
138
+ }
139
+ if (typeof this.userId !== 'undefined') {
140
+ toReturn['userId'] = this.userId;
141
+ }
142
+ return toReturn;
143
+ }
144
+ }
145
+ export class GetSiteDetailsRequest {
146
+ static fromProto(proto) {
147
+ let m = new GetSiteDetailsRequest();
148
+ m = Object.assign(m, proto);
149
+ return m;
150
+ }
151
+ constructor(kwargs) {
152
+ if (!kwargs) {
153
+ return;
154
+ }
155
+ Object.assign(this, kwargs);
156
+ }
157
+ toApiJson() {
158
+ const toReturn = {};
159
+ if (typeof this.siteUrl !== 'undefined') {
160
+ toReturn['siteUrl'] = this.siteUrl;
161
+ }
162
+ return toReturn;
163
+ }
164
+ }
165
+ export class GetSiteDetailsResponse {
166
+ static fromProto(proto) {
167
+ let m = new GetSiteDetailsResponse();
168
+ m = Object.assign(m, proto);
169
+ if (proto.siteDetails) {
170
+ m.siteDetails = SiteDetails.fromProto(proto.siteDetails);
171
+ }
172
+ return m;
173
+ }
174
+ constructor(kwargs) {
175
+ if (!kwargs) {
176
+ return;
177
+ }
178
+ Object.assign(this, kwargs);
179
+ }
180
+ toApiJson() {
181
+ const toReturn = {};
182
+ if (typeof this.siteDetails !== 'undefined' && this.siteDetails !== null) {
183
+ toReturn['siteDetails'] = 'toApiJson' in this.siteDetails ? this.siteDetails.toApiJson() : this.siteDetails;
184
+ }
185
+ return toReturn;
186
+ }
187
+ }
188
+ export class GetSiteOptionsRequest {
189
+ static fromProto(proto) {
190
+ let m = new GetSiteOptionsRequest();
191
+ m = Object.assign(m, proto);
192
+ return m;
193
+ }
194
+ constructor(kwargs) {
195
+ if (!kwargs) {
196
+ return;
197
+ }
198
+ Object.assign(this, kwargs);
199
+ }
200
+ toApiJson() {
201
+ const toReturn = {};
202
+ if (typeof this.siteUrl !== 'undefined') {
203
+ toReturn['siteUrl'] = this.siteUrl;
204
+ }
205
+ if (typeof this.options !== 'undefined') {
206
+ toReturn['options'] = this.options;
207
+ }
208
+ return toReturn;
209
+ }
210
+ }
211
+ export class GetSiteOptionsResponse {
212
+ static fromProto(proto) {
213
+ let m = new GetSiteOptionsResponse();
214
+ m = Object.assign(m, proto);
215
+ return m;
216
+ }
217
+ constructor(kwargs) {
218
+ if (!kwargs) {
219
+ return;
220
+ }
221
+ Object.assign(this, kwargs);
222
+ }
223
+ toApiJson() {
224
+ const toReturn = {};
225
+ if (typeof this.data !== 'undefined') {
226
+ toReturn['data'] = this.data;
227
+ }
228
+ return toReturn;
229
+ }
230
+ }
231
+ export class GetSiteOverviewRequest {
232
+ static fromProto(proto) {
233
+ let m = new GetSiteOverviewRequest();
234
+ m = Object.assign(m, proto);
235
+ return m;
236
+ }
237
+ constructor(kwargs) {
238
+ if (!kwargs) {
239
+ return;
240
+ }
241
+ Object.assign(this, kwargs);
242
+ }
243
+ toApiJson() {
244
+ const toReturn = {};
245
+ if (typeof this.site !== 'undefined') {
246
+ toReturn['site'] = this.site;
247
+ }
248
+ return toReturn;
249
+ }
250
+ }
251
+ export class GetSiteOverviewResponse {
252
+ static fromProto(proto) {
253
+ let m = new GetSiteOverviewResponse();
254
+ m = Object.assign(m, proto);
255
+ if (proto.siteOverview) {
256
+ m.siteOverview = SiteOverview.fromProto(proto.siteOverview);
257
+ }
258
+ return m;
259
+ }
260
+ constructor(kwargs) {
261
+ if (!kwargs) {
262
+ return;
263
+ }
264
+ Object.assign(this, kwargs);
265
+ }
266
+ toApiJson() {
267
+ const toReturn = {};
268
+ if (typeof this.siteOverview !== 'undefined' && this.siteOverview !== null) {
269
+ toReturn['siteOverview'] = 'toApiJson' in this.siteOverview ? this.siteOverview.toApiJson() : this.siteOverview;
270
+ }
271
+ return toReturn;
272
+ }
273
+ }
274
+ export class PHPVersion {
275
+ static fromProto(proto) {
276
+ let m = new PHPVersion();
277
+ m = Object.assign(m, proto);
278
+ return m;
279
+ }
280
+ constructor(kwargs) {
281
+ if (!kwargs) {
282
+ return;
283
+ }
284
+ Object.assign(this, kwargs);
285
+ }
286
+ toApiJson() {
287
+ const toReturn = {};
288
+ if (typeof this.version !== 'undefined') {
289
+ toReturn['version'] = this.version;
290
+ }
291
+ if (typeof this.isDefault !== 'undefined') {
292
+ toReturn['isDefault'] = this.isDefault;
293
+ }
294
+ if (typeof this.isDeprecated !== 'undefined') {
295
+ toReturn['isDeprecated'] = this.isDeprecated;
296
+ }
297
+ return toReturn;
298
+ }
299
+ }
300
+ export class PingRequest {
301
+ static fromProto(proto) {
302
+ let m = new PingRequest();
303
+ m = Object.assign(m, proto);
304
+ return m;
305
+ }
306
+ constructor(kwargs) {
307
+ if (!kwargs) {
308
+ return;
309
+ }
310
+ Object.assign(this, kwargs);
311
+ }
312
+ toApiJson() {
313
+ const toReturn = {};
314
+ return toReturn;
315
+ }
316
+ }
317
+ export class PingResponse {
318
+ static fromProto(proto) {
319
+ let m = new PingResponse();
320
+ m = Object.assign(m, proto);
321
+ return m;
322
+ }
323
+ constructor(kwargs) {
324
+ if (!kwargs) {
325
+ return;
326
+ }
327
+ Object.assign(this, kwargs);
328
+ }
329
+ toApiJson() {
330
+ const toReturn = {};
331
+ if (typeof this.message !== 'undefined') {
332
+ toReturn['message'] = this.message;
333
+ }
334
+ return toReturn;
335
+ }
336
+ }
337
+ export class PluginInfo {
338
+ static fromProto(proto) {
339
+ let m = new PluginInfo();
340
+ m = Object.assign(m, proto);
341
+ return m;
342
+ }
343
+ constructor(kwargs) {
344
+ if (!kwargs) {
345
+ return;
346
+ }
347
+ Object.assign(this, kwargs);
348
+ }
349
+ toApiJson() {
350
+ const toReturn = {};
351
+ if (typeof this.id !== 'undefined') {
352
+ toReturn['id'] = this.id;
353
+ }
354
+ if (typeof this.currentVersion !== 'undefined') {
355
+ toReturn['currentVersion'] = this.currentVersion;
356
+ }
357
+ if (typeof this.latestVersion !== 'undefined') {
358
+ toReturn['latestVersion'] = this.latestVersion;
359
+ }
360
+ if (typeof this.updateAvailable !== 'undefined') {
361
+ toReturn['updateAvailable'] = this.updateAvailable;
362
+ }
363
+ return toReturn;
364
+ }
365
+ }
366
+ export class PurgeCacheRequest {
367
+ static fromProto(proto) {
368
+ let m = new PurgeCacheRequest();
369
+ m = Object.assign(m, proto);
370
+ return m;
371
+ }
372
+ constructor(kwargs) {
373
+ if (!kwargs) {
374
+ return;
375
+ }
376
+ Object.assign(this, kwargs);
377
+ }
378
+ toApiJson() {
379
+ const toReturn = {};
380
+ if (typeof this.site !== 'undefined') {
381
+ toReturn['site'] = this.site;
382
+ }
383
+ if (typeof this.domain !== 'undefined') {
384
+ toReturn['domain'] = this.domain;
385
+ }
386
+ return toReturn;
387
+ }
388
+ }
389
+ export class PurgeCacheResponse {
390
+ static fromProto(proto) {
391
+ let m = new PurgeCacheResponse();
392
+ m = Object.assign(m, proto);
393
+ return m;
394
+ }
395
+ constructor(kwargs) {
396
+ if (!kwargs) {
397
+ return;
398
+ }
399
+ Object.assign(this, kwargs);
400
+ }
401
+ toApiJson() {
402
+ const toReturn = {};
403
+ if (typeof this.success !== 'undefined') {
404
+ toReturn['success'] = this.success;
405
+ }
406
+ return toReturn;
407
+ }
408
+ }
409
+ export class SetCDNStatusRequest {
410
+ static fromProto(proto) {
411
+ let m = new SetCDNStatusRequest();
412
+ m = Object.assign(m, proto);
413
+ return m;
414
+ }
415
+ constructor(kwargs) {
416
+ if (!kwargs) {
417
+ return;
418
+ }
419
+ Object.assign(this, kwargs);
420
+ }
421
+ toApiJson() {
422
+ const toReturn = {};
423
+ if (typeof this.site !== 'undefined') {
424
+ toReturn['site'] = this.site;
425
+ }
426
+ if (typeof this.domain !== 'undefined') {
427
+ toReturn['domain'] = this.domain;
428
+ }
429
+ if (typeof this.enabled !== 'undefined') {
430
+ toReturn['enabled'] = this.enabled;
431
+ }
432
+ return toReturn;
433
+ }
434
+ }
435
+ export class SetCDNStatusResponse {
436
+ static fromProto(proto) {
437
+ let m = new SetCDNStatusResponse();
438
+ m = Object.assign(m, proto);
439
+ return m;
440
+ }
441
+ constructor(kwargs) {
442
+ if (!kwargs) {
443
+ return;
444
+ }
445
+ Object.assign(this, kwargs);
446
+ }
447
+ toApiJson() {
448
+ const toReturn = {};
449
+ if (typeof this.success !== 'undefined') {
450
+ toReturn['success'] = this.success;
451
+ }
452
+ return toReturn;
453
+ }
454
+ }
455
+ export class SiteDetails {
456
+ static fromProto(proto) {
457
+ let m = new SiteDetails();
458
+ m = Object.assign(m, proto);
459
+ if (proto.plugins) {
460
+ m.plugins = proto.plugins.map(PluginInfo.fromProto);
461
+ }
462
+ if (proto.theme) {
463
+ m.theme = ThemeInfo.fromProto(proto.theme);
464
+ }
465
+ return m;
466
+ }
467
+ constructor(kwargs) {
468
+ if (!kwargs) {
469
+ return;
470
+ }
471
+ Object.assign(this, kwargs);
472
+ }
473
+ toApiJson() {
474
+ const toReturn = {};
475
+ if (typeof this.coreCurrentVersion !== 'undefined') {
476
+ toReturn['coreCurrentVersion'] = this.coreCurrentVersion;
477
+ }
478
+ if (typeof this.coreLatestVersion !== 'undefined') {
479
+ toReturn['coreLatestVersion'] = this.coreLatestVersion;
480
+ }
481
+ if (typeof this.plugins !== 'undefined' && this.plugins !== null) {
482
+ toReturn['plugins'] = 'toApiJson' in this.plugins ? this.plugins.toApiJson() : this.plugins;
483
+ }
484
+ if (typeof this.theme !== 'undefined' && this.theme !== null) {
485
+ toReturn['theme'] = 'toApiJson' in this.theme ? this.theme.toApiJson() : this.theme;
486
+ }
487
+ return toReturn;
488
+ }
489
+ }
490
+ export class SiteHealthCheckRequest {
491
+ static fromProto(proto) {
492
+ let m = new SiteHealthCheckRequest();
493
+ m = Object.assign(m, proto);
494
+ return m;
495
+ }
496
+ constructor(kwargs) {
497
+ if (!kwargs) {
498
+ return;
499
+ }
500
+ Object.assign(this, kwargs);
501
+ }
502
+ toApiJson() {
503
+ const toReturn = {};
504
+ if (typeof this.siteUrl !== 'undefined') {
505
+ toReturn['siteUrl'] = this.siteUrl;
506
+ }
507
+ return toReturn;
508
+ }
509
+ }
510
+ export class SiteHealthCheckResponse {
511
+ static fromProto(proto) {
512
+ let m = new SiteHealthCheckResponse();
513
+ m = Object.assign(m, proto);
514
+ return m;
515
+ }
516
+ constructor(kwargs) {
517
+ if (!kwargs) {
518
+ return;
519
+ }
520
+ Object.assign(this, kwargs);
521
+ }
522
+ toApiJson() {
523
+ const toReturn = {};
524
+ if (typeof this.healthy !== 'undefined') {
525
+ toReturn['healthy'] = this.healthy;
526
+ }
527
+ if (typeof this.wpVersion !== 'undefined') {
528
+ toReturn['wpVersion'] = this.wpVersion;
529
+ }
530
+ if (typeof this.phpVersion !== 'undefined') {
531
+ toReturn['phpVersion'] = this.phpVersion;
532
+ }
533
+ if (typeof this.pluginVersion !== 'undefined') {
534
+ toReturn['pluginVersion'] = this.pluginVersion;
535
+ }
536
+ if (typeof this.siteId !== 'undefined') {
537
+ toReturn['siteId'] = this.siteId;
538
+ }
539
+ if (typeof this.environment !== 'undefined') {
540
+ toReturn['environment'] = this.environment;
541
+ }
542
+ if (typeof this.checks !== 'undefined') {
543
+ toReturn['checks'] = this.checks;
544
+ }
545
+ return toReturn;
546
+ }
547
+ }
548
+ export class SiteOverview {
549
+ static fromProto(proto) {
550
+ let m = new SiteOverview();
551
+ m = Object.assign(m, proto);
552
+ return m;
553
+ }
554
+ constructor(kwargs) {
555
+ if (!kwargs) {
556
+ return;
557
+ }
558
+ Object.assign(this, kwargs);
559
+ }
560
+ toApiJson() {
561
+ const toReturn = {};
562
+ if (typeof this.atomicSiteId !== 'undefined') {
563
+ toReturn['atomicSiteId'] = this.atomicSiteId;
564
+ }
565
+ if (typeof this.domain !== 'undefined') {
566
+ toReturn['domain'] = this.domain;
567
+ }
568
+ if (typeof this.phpVersion !== 'undefined') {
569
+ toReturn['phpVersion'] = this.phpVersion;
570
+ }
571
+ if (typeof this.wpVersion !== 'undefined') {
572
+ toReturn['wpVersion'] = this.wpVersion;
573
+ }
574
+ if (typeof this.wpAdminEmail !== 'undefined') {
575
+ toReturn['wpAdminEmail'] = this.wpAdminEmail;
576
+ }
577
+ if (typeof this.wpAdminUser !== 'undefined') {
578
+ toReturn['wpAdminUser'] = this.wpAdminUser;
579
+ }
580
+ if (typeof this.atomicClientId !== 'undefined') {
581
+ toReturn['atomicClientId'] = this.atomicClientId;
582
+ }
583
+ if (typeof this.geoAffinity !== 'undefined') {
584
+ toReturn['geoAffinity'] = this.geoAffinity;
585
+ }
586
+ if (typeof this.serverPoolId !== 'undefined') {
587
+ toReturn['serverPoolId'] = this.serverPoolId;
588
+ }
589
+ if (typeof this.chrootPath !== 'undefined') {
590
+ toReturn['chrootPath'] = this.chrootPath;
591
+ }
592
+ if (typeof this.chrootSshPath !== 'undefined') {
593
+ toReturn['chrootSshPath'] = this.chrootSshPath;
594
+ }
595
+ if (typeof this.cachePrefix !== 'undefined') {
596
+ toReturn['cachePrefix'] = this.cachePrefix;
597
+ }
598
+ if (typeof this.dbCharset !== 'undefined') {
599
+ toReturn['dbCharset'] = this.dbCharset;
600
+ }
601
+ if (typeof this.dbCollate !== 'undefined') {
602
+ toReturn['dbCollate'] = this.dbCollate;
603
+ }
604
+ if (typeof this.dbPass !== 'undefined') {
605
+ toReturn['dbPass'] = this.dbPass;
606
+ }
607
+ if (typeof this.siteApiKey !== 'undefined') {
608
+ toReturn['siteApiKey'] = this.siteApiKey;
609
+ }
610
+ if (typeof this.staticFile404 !== 'undefined') {
611
+ toReturn['staticFile404'] = this.staticFile404;
612
+ }
613
+ if (typeof this.smtpPass !== 'undefined') {
614
+ toReturn['smtpPass'] = this.smtpPass;
615
+ }
616
+ if (typeof this.wpcomBlogId !== 'undefined') {
617
+ toReturn['wpcomBlogId'] = this.wpcomBlogId;
618
+ }
619
+ return toReturn;
620
+ }
621
+ }
622
+ export class ThemeInfo {
623
+ static fromProto(proto) {
624
+ let m = new ThemeInfo();
625
+ m = Object.assign(m, proto);
626
+ return m;
627
+ }
628
+ constructor(kwargs) {
629
+ if (!kwargs) {
630
+ return;
631
+ }
632
+ Object.assign(this, kwargs);
633
+ }
634
+ toApiJson() {
635
+ const toReturn = {};
636
+ if (typeof this.id !== 'undefined') {
637
+ toReturn['id'] = this.id;
638
+ }
639
+ if (typeof this.currentVersion !== 'undefined') {
640
+ toReturn['currentVersion'] = this.currentVersion;
641
+ }
642
+ if (typeof this.latestVersion !== 'undefined') {
643
+ toReturn['latestVersion'] = this.latestVersion;
644
+ }
645
+ if (typeof this.updateAvailable !== 'undefined') {
646
+ toReturn['updateAvailable'] = this.updateAvailable;
647
+ }
648
+ return toReturn;
649
+ }
650
+ }
651
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vd3BfY2xvdWRfbWFuYWdlcl9zZGsvc3JjL2xpYi9faW50ZXJuYWwvb2JqZWN0cy9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsTUFBTSxPQUFPLDhCQUE4QjtJQUd2QyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSw4QkFBOEIsRUFBRSxDQUFDO1FBQzdDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQWtEO1FBQzFELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLCtCQUErQjtJQUd4QyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSwrQkFBK0IsRUFBRSxDQUFDO1FBQzlDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7WUFBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMs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SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLFNBQVM7SUFNbEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7UUFDeEIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBNkI7UUFDckMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7U0FBQztRQUMvRCxJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQUM7UUFDbkcsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7U0FBQztRQUNoRyxJQUFJLE9BQU8sSUFBSSxDQUFDLGVBQWUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQUM7UUFDdEcsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBPYmplY3RzLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5pbXBvcnQgKiBhcyBpIGZyb20gJy4uL2ludGVyZmFjZXMvYXBpLmludGVyZmFjZSc7XG5cblxuZXhwb3J0IGNsYXNzIEdldEF2YWlsYWJsZVBIUFZlcnNpb25zUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0QXZhaWxhYmxlUEhQVmVyc2lvbnNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjbGllbnQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldEF2YWlsYWJsZVBIUFZlcnNpb25zUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEF2YWlsYWJsZVBIUFZlcnNpb25zUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0QXZhaWxhYmxlUEhQVmVyc2lvbnNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2xpZW50ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjbGllbnQnXSA9IHRoaXMuY2xpZW50O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEF2YWlsYWJsZVBIUFZlcnNpb25zUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldEF2YWlsYWJsZVBIUFZlcnNpb25zUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHBocFZlcnNpb25zOiBQSFBWZXJzaW9uW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRBdmFpbGFibGVQSFBWZXJzaW9uc1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0QXZhaWxhYmxlUEhQVmVyc2lvbnNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5waHBWZXJzaW9ucykge20ucGhwVmVyc2lvbnMgPSBwcm90by5waHBWZXJzaW9ucy5tYXAoUEhQVmVyc2lvbi5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRBdmFpbGFibGVQSFBWZXJzaW9uc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGhwVmVyc2lvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGhwVmVyc2lvbnMgIT09IG51bGwpIHt0b1JldHVyblsncGhwVmVyc2lvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGhwVmVyc2lvbnMgPyAodGhpcy5waHBWZXJzaW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5waHBWZXJzaW9uczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRDRE5TdGF0dXNSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRDRE5TdGF0dXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBzaXRlOiBzdHJpbmc7XG4gICAgZG9tYWluOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRDRE5TdGF0dXNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0Q0ROU3RhdHVzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0Q0ROU3RhdHVzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNpdGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NpdGUnXSA9IHRoaXMuc2l0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kb21haW4gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RvbWFpbiddID0gdGhpcy5kb21haW47fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0Q0ROU3RhdHVzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldENETlN0YXR1c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIHN0YXR1czogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0Q0ROU3RhdHVzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRDRE5TdGF0dXNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0Q0ROU3RhdHVzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbmFibGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbmFibGVkJ10gPSB0aGlzLmVuYWJsZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdHVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdGF0dXMnXSA9IHRoaXMuc3RhdHVzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE9uZUNsaWNrTG9naW5SZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRPbmVDbGlja0xvZ2luUmVxdWVzdEludGVyZmFjZSB7XG4gICAgc2l0ZVVybDogc3RyaW5nO1xuICAgIHJlZGlyZWN0VG86IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE9uZUNsaWNrTG9naW5SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0T25lQ2xpY2tMb2dpblJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE9uZUNsaWNrTG9naW5SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2l0ZVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2l0ZVVybCddID0gdGhpcy5zaXRlVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlZGlyZWN0VG8gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3JlZGlyZWN0VG8nXSA9IHRoaXMucmVkaXJlY3RUbzt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRPbmVDbGlja0xvZ2luUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE9uZUNsaWNrTG9naW5SZXNwb25zZUludGVyZmFjZSB7XG4gICAgbG9naW5Vcmw6IHN0cmluZztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICB0dGw6IG51bWJlcjtcbiAgICB1c2VySWQ6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE9uZUNsaWNrTG9naW5SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE9uZUNsaWNrTG9naW5SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5leHBpcmVzQXQpIHttLmV4cGlyZXNBdCA9IHBhcnNlSW50KHByb3RvLmV4cGlyZXNBdCwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRPbmVDbGlja0xvZ2luUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sb2dpblVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbG9naW5VcmwnXSA9IHRoaXMubG9naW5Vcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXhwaXJlc0F0ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydleHBpcmVzQXQnXSA9IHRoaXMuZXhwaXJlc0F0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnR0bCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndHRsJ10gPSB0aGlzLnR0bDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VzZXJJZCddID0gdGhpcy51c2VySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0U2l0ZURldGFpbHNSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRTaXRlRGV0YWlsc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHNpdGVVcmw6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFNpdGVEZXRhaWxzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFNpdGVEZXRhaWxzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0U2l0ZURldGFpbHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2l0ZVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2l0ZVVybCddID0gdGhpcy5zaXRlVXJsO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFNpdGVEZXRhaWxzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFNpdGVEZXRhaWxzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHNpdGVEZXRhaWxzOiBTaXRlRGV0YWlscztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFNpdGVEZXRhaWxzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRTaXRlRGV0YWlsc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnNpdGVEZXRhaWxzKSB7bS5zaXRlRGV0YWlscyA9IFNpdGVEZXRhaWxzLmZyb21Qcm90byhwcm90by5zaXRlRGV0YWlscyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFNpdGVEZXRhaWxzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zaXRlRGV0YWlscyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zaXRlRGV0YWlscyAhPT0gbnVsbCkge3RvUmV0dXJuWydzaXRlRGV0YWlscyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zaXRlRGV0YWlscyA/ICh0aGlzLnNpdGVEZXRhaWxzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnNpdGVEZXRhaWxzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFNpdGVPcHRpb25zUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0U2l0ZU9wdGlvbnNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBzaXRlVXJsOiBzdHJpbmc7XG4gICAgb3B0aW9uczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRTaXRlT3B0aW9uc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRTaXRlT3B0aW9uc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFNpdGVPcHRpb25zUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNpdGVVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NpdGVVcmwnXSA9IHRoaXMuc2l0ZVVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvcHRpb25zJ10gPSB0aGlzLm9wdGlvbnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0U2l0ZU9wdGlvbnNSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0U2l0ZU9wdGlvbnNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgZGF0YTogYW55O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0U2l0ZU9wdGlvbnNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFNpdGVPcHRpb25zUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFNpdGVPcHRpb25zUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkYXRhJ10gPSB0aGlzLmRhdGE7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0U2l0ZU92ZXJ2aWV3UmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0U2l0ZU92ZXJ2aWV3UmVxdWVzdEludGVyZmFjZSB7XG4gICAgc2l0ZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0U2l0ZU92ZXJ2aWV3UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFNpdGVPdmVydmlld1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFNpdGVPdmVydmlld1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zaXRlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzaXRlJ10gPSB0aGlzLnNpdGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0U2l0ZU92ZXJ2aWV3UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFNpdGVPdmVydmlld1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBzaXRlT3ZlcnZpZXc6IFNpdGVPdmVydmlldztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFNpdGVPdmVydmlld1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0U2l0ZU92ZXJ2aWV3UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc2l0ZU92ZXJ2aWV3KSB7bS5zaXRlT3ZlcnZpZXcgPSBTaXRlT3ZlcnZpZXcuZnJvbVByb3RvKHByb3RvLnNpdGVPdmVydmlldyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFNpdGVPdmVydmlld1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2l0ZU92ZXJ2aWV3ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnNpdGVPdmVydmlldyAhPT0gbnVsbCkge3RvUmV0dXJuWydzaXRlT3ZlcnZpZXcnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc2l0ZU92ZXJ2aWV3ID8gKHRoaXMuc2l0ZU92ZXJ2aWV3IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnNpdGVPdmVydmlldzt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQSFBWZXJzaW9uIGltcGxlbWVudHMgaS5QSFBWZXJzaW9uSW50ZXJmYWNlIHtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgaXNEZWZhdWx0OiBib29sZWFuO1xuICAgIGlzRGVwcmVjYXRlZDogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFBIUFZlcnNpb24ge1xuICAgICAgICBsZXQgbSA9IG5ldyBQSFBWZXJzaW9uKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5QSFBWZXJzaW9uSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmVyc2lvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmVyc2lvbiddID0gdGhpcy52ZXJzaW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlzRGVmYXVsdCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNEZWZhdWx0J10gPSB0aGlzLmlzRGVmYXVsdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0RlcHJlY2F0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzRGVwcmVjYXRlZCddID0gdGhpcy5pc0RlcHJlY2F0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGluZ1JlcXVlc3QgaW1wbGVtZW50cyBpLlBpbmdSZXF1ZXN0SW50ZXJmYWNlIHtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFBpbmdSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUGluZ1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlBpbmdSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGluZ1Jlc3BvbnNlIGltcGxlbWVudHMgaS5QaW5nUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIG1lc3NhZ2U6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFBpbmdSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFBpbmdSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUGluZ1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVzc2FnZSddID0gdGhpcy5tZXNzYWdlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBsdWdpbkluZm8gaW1wbGVtZW50cyBpLlBsdWdpbkluZm9JbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY3VycmVudFZlcnNpb246IHN0cmluZztcbiAgICBsYXRlc3RWZXJzaW9uOiBzdHJpbmc7XG4gICAgdXBkYXRlQXZhaWxhYmxlOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUGx1Z2luSW5mbyB7XG4gICAgICAgIGxldCBtID0gbmV3IFBsdWdpbkluZm8oKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlBsdWdpbkluZm9JbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VycmVudFZlcnNpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnJlbnRWZXJzaW9uJ10gPSB0aGlzLmN1cnJlbnRWZXJzaW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxhdGVzdFZlcnNpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2xhdGVzdFZlcnNpb24nXSA9IHRoaXMubGF0ZXN0VmVyc2lvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51cGRhdGVBdmFpbGFibGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VwZGF0ZUF2YWlsYWJsZSddID0gdGhpcy51cGRhdGVBdmFpbGFibGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHVyZ2VDYWNoZVJlcXVlc3QgaW1wbGVtZW50cyBpLlB1cmdlQ2FjaGVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBzaXRlOiBzdHJpbmc7XG4gICAgZG9tYWluOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBQdXJnZUNhY2hlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFB1cmdlQ2FjaGVSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5QdXJnZUNhY2hlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNpdGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NpdGUnXSA9IHRoaXMuc2l0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kb21haW4gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RvbWFpbiddID0gdGhpcy5kb21haW47fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHVyZ2VDYWNoZVJlc3BvbnNlIGltcGxlbWVudHMgaS5QdXJnZUNhY2hlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBQdXJnZUNhY2hlUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBQdXJnZUNhY2hlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlB1cmdlQ2FjaGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1Y2Nlc3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N1Y2Nlc3MnXSA9IHRoaXMuc3VjY2Vzczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXRDRE5TdGF0dXNSZXF1ZXN0IGltcGxlbWVudHMgaS5TZXRDRE5TdGF0dXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBzaXRlOiBzdHJpbmc7XG4gICAgZG9tYWluOiBzdHJpbmc7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNldENETlN0YXR1c1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZXRDRE5TdGF0dXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TZXRDRE5TdGF0dXNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2l0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2l0ZSddID0gdGhpcy5zaXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRvbWFpbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZG9tYWluJ10gPSB0aGlzLmRvbWFpbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbmFibGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbmFibGVkJ10gPSB0aGlzLmVuYWJsZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0Q0ROU3RhdHVzUmVzcG9uc2UgaW1wbGVtZW50cyBpLlNldENETlN0YXR1c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBzdWNjZXNzOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2V0Q0ROU3RhdHVzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZXRDRE5TdGF0dXNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2V0Q0ROU3RhdHVzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWNjZXNzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdWNjZXNzJ10gPSB0aGlzLnN1Y2Nlc3M7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2l0ZURldGFpbHMgaW1wbGVtZW50cyBpLlNpdGVEZXRhaWxzSW50ZXJmYWNlIHtcbiAgICBjb3JlQ3VycmVudFZlcnNpb246IHN0cmluZztcbiAgICBjb3JlTGF0ZXN0VmVyc2lvbjogc3RyaW5nO1xuICAgIHBsdWdpbnM6IFBsdWdpbkluZm9bXTtcbiAgICB0aGVtZTogVGhlbWVJbmZvO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2l0ZURldGFpbHMge1xuICAgICAgICBsZXQgbSA9IG5ldyBTaXRlRGV0YWlscygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wbHVnaW5zKSB7bS5wbHVnaW5zID0gcHJvdG8ucGx1Z2lucy5tYXAoUGx1Z2luSW5mby5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnRoZW1lKSB7bS50aGVtZSA9IFRoZW1lSW5mby5mcm9tUHJvdG8ocHJvdG8udGhlbWUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TaXRlRGV0YWlsc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvcmVDdXJyZW50VmVyc2lvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29yZUN1cnJlbnRWZXJzaW9uJ10gPSB0aGlzLmNvcmVDdXJyZW50VmVyc2lvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb3JlTGF0ZXN0VmVyc2lvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29yZUxhdGVzdFZlcnNpb24nXSA9IHRoaXMuY29yZUxhdGVzdFZlcnNpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGx1Z2lucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wbHVnaW5zICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BsdWdpbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGx1Z2lucyA/ICh0aGlzLnBsdWdpbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGx1Z2luczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aGVtZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50aGVtZSAhPT0gbnVsbCkge3RvUmV0dXJuWyd0aGVtZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50aGVtZSA/ICh0aGlzLnRoZW1lIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRoZW1lO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNpdGVIZWFsdGhDaGVja1JlcXVlc3QgaW1wbGVtZW50cyBpLlNpdGVIZWFsdGhDaGVja1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHNpdGVVcmw6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNpdGVIZWFsdGhDaGVja1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTaXRlSGVhbHRoQ2hlY2tSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TaXRlSGVhbHRoQ2hlY2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2l0ZVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2l0ZVVybCddID0gdGhpcy5zaXRlVXJsO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNpdGVIZWFsdGhDaGVja1Jlc3BvbnNlIGltcGxlbWVudHMgaS5TaXRlSGVhbHRoQ2hlY2tSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaGVhbHRoeTogYm9vbGVhbjtcbiAgICB3cFZlcnNpb246IHN0cmluZztcbiAgICBwaHBWZXJzaW9uOiBzdHJpbmc7XG4gICAgcGx1Z2luVmVyc2lvbjogc3RyaW5nO1xuICAgIHNpdGVJZDogc3RyaW5nO1xuICAgIGVudmlyb25tZW50OiBzdHJpbmc7XG4gICAgY2hlY2tzOiBhbnk7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTaXRlSGVhbHRoQ2hlY2tSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFNpdGVIZWFsdGhDaGVja1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TaXRlSGVhbHRoQ2hlY2tSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhlYWx0aHkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hlYWx0aHknXSA9IHRoaXMuaGVhbHRoeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53cFZlcnNpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3dwVmVyc2lvbiddID0gdGhpcy53cFZlcnNpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGhwVmVyc2lvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGhwVmVyc2lvbiddID0gdGhpcy5waHBWZXJzaW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBsdWdpblZlcnNpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BsdWdpblZlcnNpb24nXSA9IHRoaXMucGx1Z2luVmVyc2lvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zaXRlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NpdGVJZCddID0gdGhpcy5zaXRlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW52aXJvbm1lbnQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Vudmlyb25tZW50J10gPSB0aGlzLmVudmlyb25tZW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNoZWNrcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2hlY2tzJ10gPSB0aGlzLmNoZWNrczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTaXRlT3ZlcnZpZXcgaW1wbGVtZW50cyBpLlNpdGVPdmVydmlld0ludGVyZmFjZSB7XG4gICAgYXRvbWljU2l0ZUlkOiBzdHJpbmc7XG4gICAgZG9tYWluOiBzdHJpbmc7XG4gICAgcGhwVmVyc2lvbjogc3RyaW5nO1xuICAgIHdwVmVyc2lvbjogc3RyaW5nO1xuICAgIHdwQWRtaW5FbWFpbDogc3RyaW5nO1xuICAgIHdwQWRtaW5Vc2VyOiBzdHJpbmc7XG4gICAgYXRvbWljQ2xpZW50SWQ6IHN0cmluZztcbiAgICBnZW9BZmZpbml0eTogc3RyaW5nO1xuICAgIHNlcnZlclBvb2xJZDogc3RyaW5nO1xuICAgIGNocm9vdFBhdGg6IHN0cmluZztcbiAgICBjaHJvb3RTc2hQYXRoOiBzdHJpbmc7XG4gICAgY2FjaGVQcmVmaXg6IHN0cmluZztcbiAgICBkYkNoYXJzZXQ6IHN0cmluZztcbiAgICBkYkNvbGxhdGU6IHN0cmluZztcbiAgICBkYlBhc3M6IHN0cmluZztcbiAgICBzaXRlQXBpS2V5OiBzdHJpbmc7XG4gICAgc3RhdGljRmlsZTQwNDogc3RyaW5nO1xuICAgIHNtdHBQYXNzOiBzdHJpbmc7XG4gICAgd3Bjb21CbG9nSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNpdGVPdmVydmlldyB7XG4gICAgICAgIGxldCBtID0gbmV3IFNpdGVPdmVydmlldygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2l0ZU92ZXJ2aWV3SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXRvbWljU2l0ZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhdG9taWNTaXRlSWQnXSA9IHRoaXMuYXRvbWljU2l0ZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRvbWFpbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZG9tYWluJ10gPSB0aGlzLmRvbWFpbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5waHBWZXJzaW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwaHBWZXJzaW9uJ10gPSB0aGlzLnBocFZlcnNpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMud3BWZXJzaW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd3cFZlcnNpb24nXSA9IHRoaXMud3BWZXJzaW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndwQWRtaW5FbWFpbCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnd3BBZG1pbkVtYWlsJ10gPSB0aGlzLndwQWRtaW5FbWFpbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53cEFkbWluVXNlciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnd3BBZG1pblVzZXInXSA9IHRoaXMud3BBZG1pblVzZXI7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXRvbWljQ2xpZW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2F0b21pY0NsaWVudElkJ10gPSB0aGlzLmF0b21pY0NsaWVudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdlb0FmZmluaXR5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydnZW9BZmZpbml0eSddID0gdGhpcy5nZW9BZmZpbml0eTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXJ2ZXJQb29sSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NlcnZlclBvb2xJZCddID0gdGhpcy5zZXJ2ZXJQb29sSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2hyb290UGF0aCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2hyb290UGF0aCddID0gdGhpcy5jaHJvb3RQYXRoO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNocm9vdFNzaFBhdGggIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Nocm9vdFNzaFBhdGgnXSA9IHRoaXMuY2hyb290U3NoUGF0aDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWNoZVByZWZpeCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2FjaGVQcmVmaXgnXSA9IHRoaXMuY2FjaGVQcmVmaXg7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGJDaGFyc2V0ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkYkNoYXJzZXQnXSA9IHRoaXMuZGJDaGFyc2V0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRiQ29sbGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGJDb2xsYXRlJ10gPSB0aGlzLmRiQ29sbGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYlBhc3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RiUGFzcyddID0gdGhpcy5kYlBhc3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2l0ZUFwaUtleSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2l0ZUFwaUtleSddID0gdGhpcy5zaXRlQXBpS2V5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXRpY0ZpbGU0MDQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXRpY0ZpbGU0MDQnXSA9IHRoaXMuc3RhdGljRmlsZTQwNDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zbXRwUGFzcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc210cFBhc3MnXSA9IHRoaXMuc210cFBhc3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMud3Bjb21CbG9nSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3dwY29tQmxvZ0lkJ10gPSB0aGlzLndwY29tQmxvZ0lkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRoZW1lSW5mbyBpbXBsZW1lbnRzIGkuVGhlbWVJbmZvSW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGN1cnJlbnRWZXJzaW9uOiBzdHJpbmc7XG4gICAgbGF0ZXN0VmVyc2lvbjogc3RyaW5nO1xuICAgIHVwZGF0ZUF2YWlsYWJsZTogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFRoZW1lSW5mbyB7XG4gICAgICAgIGxldCBtID0gbmV3IFRoZW1lSW5mbygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVGhlbWVJbmZvSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnJlbnRWZXJzaW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJyZW50VmVyc2lvbiddID0gdGhpcy5jdXJyZW50VmVyc2lvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sYXRlc3RWZXJzaW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydsYXRlc3RWZXJzaW9uJ10gPSB0aGlzLmxhdGVzdFZlcnNpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXBkYXRlQXZhaWxhYmxlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1cGRhdGVBdmFpbGFibGUnXSA9IHRoaXMudXBkYXRlQXZhaWxhYmxlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuIl19