libey-ng-component-library 0.0.18 → 0.0.19

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.
@@ -0,0 +1,1423 @@
1
+ // SigWebTablet.ts
2
+ export class SigWebTablet {
3
+ static revokeBlobURL(url) {
4
+ if (window.URL) {
5
+ URL.revokeObjectURL(url);
6
+ }
7
+ else if (window.webkitURL) {
8
+ webkitURL.revokeObjectURL(url);
9
+ }
10
+ }
11
+ static getBlobURL(blob) {
12
+ if (window.URL) {
13
+ return URL.createObjectURL(blob);
14
+ }
15
+ else if (window.webkitURL) {
16
+ return webkitURL.createObjectURL(blob);
17
+ }
18
+ return ''; // Retornar un string vacío en caso de error
19
+ }
20
+ static makeUri() {
21
+ var prot = location.protocol;
22
+ if (prot == 'file:') {
23
+ prot = 'http:';
24
+ }
25
+ if (this.isIE()) {
26
+ if (prot == 'https:') {
27
+ return prot + '//tablet.sigwebtablet.com:47290/SigWeb/';
28
+ }
29
+ else {
30
+ return prot + '//tablet.sigwebtablet.com:47289/SigWeb/';
31
+ }
32
+ }
33
+ if (this.isChrome()) {
34
+ if (prot == 'https:') {
35
+ return prot + '//tablet.sigwebtablet.com:47290/SigWeb/';
36
+ }
37
+ else {
38
+ return prot + '//tablet.sigwebtablet.com:47289/SigWeb/';
39
+ }
40
+ }
41
+ else {
42
+ //FIREFOX
43
+ if (prot == 'https:') {
44
+ return prot + '//tablet.sigwebtablet.com:47290/SigWeb/';
45
+ }
46
+ else {
47
+ return prot + '//tablet.sigwebtablet.com:47289/SigWeb/';
48
+ }
49
+ }
50
+ }
51
+ static generateUUID() {
52
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
53
+ const r = (Math.random() * 16) | 0;
54
+ const v = c === 'x' ? r : (r & 0x3) | 0x8;
55
+ return v.toString(16);
56
+ });
57
+ }
58
+ static isSigWebInstalled() {
59
+ const xhr = new XMLHttpRequest();
60
+ try {
61
+ xhr.open('GET', `${this.baseUri}TabletState?noCache=${this.generateUUID()}`, false);
62
+ xhr.send();
63
+ return xhr.status !== 404 && xhr.status !== 0;
64
+ }
65
+ catch (e) {
66
+ console.log('Error checking SigWeb installation', e);
67
+ return false;
68
+ }
69
+ }
70
+ static isIE() {
71
+ return (navigator.appName === 'Microsoft Internet Explorer' ||
72
+ (navigator.appName === 'Netscape' &&
73
+ new RegExp('Trident/.*rv:([0-9]{1,}[.0-9]{0,})').exec(navigator.userAgent) != null));
74
+ }
75
+ static isChrome() {
76
+ return navigator.userAgent.lastIndexOf('Chrome/') > 0;
77
+ }
78
+ static SigWebcreateXHR() {
79
+ const xhr = new XMLHttpRequest();
80
+ if (!xhr) {
81
+ throw new Error('No se pudo crear XMLHttpRequest');
82
+ }
83
+ return xhr;
84
+ }
85
+ static SigWebSetProperty(prop) {
86
+ const xhr = this.SigWebcreateXHR();
87
+ if (xhr) {
88
+ xhr.open('POST', this.baseUri + prop, true);
89
+ xhr.send(null);
90
+ if (xhr.readyState === 4 && xhr.status === 200) {
91
+ return xhr.responseText;
92
+ }
93
+ }
94
+ return '';
95
+ }
96
+ static SigWebSetPropertySync(prop) {
97
+ const xhr = this.SigWebcreateXHR();
98
+ if (xhr) {
99
+ xhr.open('POST', this.baseUri + prop, false);
100
+ xhr.send();
101
+ if (xhr.readyState === 4 && xhr.status === 200) {
102
+ return xhr.responseText;
103
+ }
104
+ }
105
+ return '';
106
+ }
107
+ static SigWebSetStreamProperty(prop, strm) {
108
+ const xhr = this.SigWebcreateXHR();
109
+ if (xhr) {
110
+ xhr.open('POST', this.baseUri + prop);
111
+ xhr.setRequestHeader('Content-Type', 'text/plain');
112
+ xhr.send(strm);
113
+ }
114
+ return '';
115
+ }
116
+ static SigWebSyncSetStreamProperty(prop, strm) {
117
+ const xhr = this.SigWebcreateXHR();
118
+ if (xhr) {
119
+ xhr.open('POST', this.baseUri + prop, false);
120
+ xhr.setRequestHeader('Content-Type', 'text/plain');
121
+ xhr.send(strm);
122
+ if (xhr.readyState === 4 && xhr.status === 200) {
123
+ return xhr.responseText;
124
+ }
125
+ }
126
+ return '';
127
+ }
128
+ static SigWebSetImageStreamProperty(prop, strm) {
129
+ const xhr = this.SigWebcreateXHR();
130
+ if (xhr) {
131
+ xhr.open('POST', this.baseUri + prop, false);
132
+ xhr.setRequestHeader('Content-Type', 'image/png');
133
+ xhr.send(strm);
134
+ if (xhr.readyState === 4 && xhr.status === 200) {
135
+ return xhr.responseText;
136
+ }
137
+ }
138
+ return '';
139
+ }
140
+ static SigWebSetImageBlobProperty(prop, strm) {
141
+ var xhr = this.SigWebcreateXHR();
142
+ if (xhr) {
143
+ xhr.open('POST', this.baseUri + prop, false);
144
+ xhr.setRequestHeader('Content-Type', 'blob');
145
+ xhr.send(strm);
146
+ if (xhr.readyState == 4 && xhr.status == 200) {
147
+ return xhr.responseText;
148
+ }
149
+ }
150
+ return '';
151
+ }
152
+ static SigWebGetProperty(prop) {
153
+ var xhr = this.SigWebcreateXHR();
154
+ if (xhr) {
155
+ xhr.open('GET', this.baseUri + prop + '?noCache=' + this.generateUUID(), false);
156
+ xhr.send(null);
157
+ if (xhr.readyState == 4 && xhr.status == 200) {
158
+ return xhr.responseText;
159
+ }
160
+ }
161
+ return '';
162
+ }
163
+ static GetSigImageB64(callback) {
164
+ var cvs = document.createElement('canvas');
165
+ var width = this.GetImageXSize();
166
+ var height = this.GetImageYSize();
167
+ cvs.width = width == '' || width == null ? 0 : Number(width);
168
+ cvs.height = height == '' || height == null ? 0 : Number(height);
169
+ var xhr2 = new XMLHttpRequest();
170
+ xhr2.open('GET', this.baseUri + 'SigImage/1' + '?noCache=' + this.generateUUID(), true);
171
+ xhr2.responseType = 'blob';
172
+ xhr2.send(null);
173
+ xhr2.onload = () => {
174
+ var cntx = cvs.getContext('2d');
175
+ var img = new Image();
176
+ img.src = this.getBlobURL(xhr2.response);
177
+ img.onload = () => {
178
+ cntx.drawImage(img, 0, 0);
179
+ var b64String = cvs.toDataURL('image/png');
180
+ var loc = b64String.search('base64,');
181
+ var retstring = b64String.slice(loc + 7, b64String.length);
182
+ if (callback) {
183
+ callback(retstring);
184
+ }
185
+ };
186
+ };
187
+ }
188
+ static SigWebWaitForPenDown(callback) {
189
+ var xhr = this.SigWebcreateXHR();
190
+ if (xhr) {
191
+ xhr.open('GET', this.baseUri + 'WaitForPenDown' + '?noCache=' + this.generateUUID());
192
+ xhr.timeout = 10000;
193
+ xhr.onreadystatechange = () => {
194
+ if (xhr.readyState != 4)
195
+ return;
196
+ if (xhr.status == 200)
197
+ callback();
198
+ };
199
+ xhr.send(null);
200
+ }
201
+ }
202
+ static GetSigImage(ctx) {
203
+ var xhr2 = new XMLHttpRequest();
204
+ xhr2.open('GET', this.baseUri + 'SigImage/1' + '?noCache=' + this.generateUUID(), true);
205
+ xhr2.responseType = 'blob';
206
+ xhr2.send(null);
207
+ xhr2.onload = () => {
208
+ var img = new Image();
209
+ img.src = this.getBlobURL(xhr2.response);
210
+ img.onload = () => {
211
+ ctx.drawImage(img, 0, 0);
212
+ this.revokeBlobURL(img.src);
213
+ img = null;
214
+ };
215
+ };
216
+ }
217
+ static SigWebSetDisplayTarget(obj) {
218
+ this.ctx = obj;
219
+ }
220
+ static SigWebRefresh() {
221
+ var NumPoints = Number(this.NumberOfTabletPoints());
222
+ if (NumPoints == this.NumPointsLastTime) {
223
+ return;
224
+ }
225
+ this.NumPointsLastTime = NumPoints;
226
+ var xhr2 = new XMLHttpRequest();
227
+ xhr2.open('GET', this.baseUri + 'SigImage/0' + '?noCache=' + this.generateUUID(), true);
228
+ xhr2.responseType = 'blob';
229
+ xhr2.onload = () => {
230
+ var img = new Image();
231
+ img.src = this.getBlobURL(xhr2.response);
232
+ // img.src = window.URL.createObjectURL(xhr2.response);
233
+ img.onload = () => {
234
+ this.ctx.drawImage(img, 0, 0);
235
+ this.revokeBlobURL(img.src);
236
+ img = null;
237
+ };
238
+ };
239
+ xhr2.send(null);
240
+ }
241
+ static SigWebEvent() {
242
+ var OldEvStatus = this.EvStatus;
243
+ var xhr = this.SigWebcreateXHR();
244
+ if (xhr) {
245
+ xhr.open('GET', this.baseUri + 'EventStatus' + '?noCache=' + this.generateUUID(), true);
246
+ xhr.onload = () => {
247
+ this.EvStatus = xhr.responseText;
248
+ if (OldEvStatus & 0x01 && this.EvStatus & 0x02) {
249
+ if (this.onSigPenDown) {
250
+ this.onSigPenDown();
251
+ }
252
+ }
253
+ if (OldEvStatus & 0x02 && this.EvStatus & 0x01) {
254
+ if (this.onSigPenUp) {
255
+ this.onSigPenUp();
256
+ }
257
+ }
258
+ };
259
+ xhr.send(null);
260
+ }
261
+ }
262
+ static setSigWebFontThreshold(v) {
263
+ this.SigWebFontThreshold = v;
264
+ }
265
+ static createLcdBitmapFromCanvas(ourCanvas, xp, yp, width, height) {
266
+ var canvasCtx = ourCanvas.getContext('2d');
267
+ var imgData = canvasCtx.getImageData(0, 0, width, height);
268
+ var j = 0;
269
+ var sVal = 0;
270
+ var outData = '';
271
+ var outIdx = 0;
272
+ var data = imgData.data;
273
+ for (var y = 0; y < height; y++)
274
+ for (var x = 0; x < width; x++) {
275
+ var tmp1 = data[j];
276
+ var tmp2 = data[j + 1];
277
+ var tmp3 = data[j + 2];
278
+ var tmp4 = data[j + 3];
279
+ // sVal = tmp1 + (tmp2 << 8 ) + ( tmp3 << 16 ) + (tmp4 << 24 );
280
+ j = j + 4;
281
+ if (tmp1 < this.SigWebFontThreshold) {
282
+ outData += 'B';
283
+ }
284
+ else {
285
+ outData += 'W';
286
+ }
287
+ }
288
+ return outData;
289
+ }
290
+ static toHex(NibVal) {
291
+ switch (NibVal) {
292
+ case 0:
293
+ return '0';
294
+ case 1:
295
+ return '1';
296
+ case 2:
297
+ return '2';
298
+ case 3:
299
+ return '3';
300
+ case 4:
301
+ return '4';
302
+ case 5:
303
+ return '5';
304
+ case 6:
305
+ return '6';
306
+ case 7:
307
+ return '7';
308
+ case 8:
309
+ return '8';
310
+ case 9:
311
+ return '9';
312
+ case 10:
313
+ return 'A';
314
+ case 11:
315
+ return 'B';
316
+ case 12:
317
+ return 'C';
318
+ case 13:
319
+ return 'D';
320
+ case 14:
321
+ return 'E';
322
+ case 15:
323
+ return 'F';
324
+ default:
325
+ return '';
326
+ }
327
+ }
328
+ static ToHexString(ByteVal) {
329
+ var Str = '';
330
+ Str += this.toHex((ByteVal >> 4) & 0x0f);
331
+ Str += this.toHex(ByteVal & 0x0f);
332
+ return Str;
333
+ }
334
+ static textToTablet(x, y, height, str, fnt) {
335
+ var c = document.createElement('canvas');
336
+ var cntx = c.getContext('2d');
337
+ cntx.font = fnt;
338
+ var txt = str;
339
+ var xs = Math.round(cntx.measureText(txt).width);
340
+ var ys = height;
341
+ c.width = xs;
342
+ c.height = ys;
343
+ cntx.font = fnt;
344
+ cntx.fillStyle = '#FFFFFF';
345
+ cntx.rect(0, 0, xs, ys);
346
+ cntx.fill();
347
+ cntx.fillStyle = '#000000';
348
+ cntx.textBaseline = 'top';
349
+ cntx.fillText(txt, 0, 0);
350
+ cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
351
+ var Gstr = this.createLcdBitmapFromCanvas(c, 0, 0, xs, ys);
352
+ this.LcdWriteImageStream(0, 2, x, y, xs, ys, Gstr);
353
+ }
354
+ static LcdWriteImage(Dst, Mode, Xp, Yp, Url) {
355
+ var Prop = 'LcdWriteImage/';
356
+ var NewUrl = Url.replace(/\//g, '_');
357
+ Prop = Prop + Dst + ',' + Mode + ',' + Xp + ',' + Yp + ',' + NewUrl;
358
+ this.SigWebSetPropertySync(Prop);
359
+ }
360
+ static LcdWriteLocalImage(Dst, Mode, Xp, Yp, Url) {
361
+ var Prop = 'LcdWriteImage/';
362
+ Prop = Prop + Dst + ',' + Mode + ',' + Xp + ',' + Yp + ',' + Url;
363
+ this.SigWebSetProperty(Prop);
364
+ }
365
+ static LcdWriteImageStream(Dst, Mode, Xp, Yp, Xs, Ys, Url) {
366
+ var Prop1 = 'LcdWriteImageStreamParams/' +
367
+ Dst +
368
+ ',' +
369
+ Mode +
370
+ ',' +
371
+ Xp +
372
+ ',' +
373
+ Yp +
374
+ ',' +
375
+ Xs +
376
+ ',' +
377
+ Ys;
378
+ var Prop2 = 'LcdWriteImageStream/';
379
+ this.SigWebSetPropertySync(Prop1);
380
+ this.SigWebSetImageStreamProperty(Prop2, Url);
381
+ }
382
+ static LcdWriteImageBlob(Dst, Mode, Xp, Yp, Xs, Ys, Url) {
383
+ var Prop = 'LcdWriteImageStream/';
384
+ Prop = Prop + Dst + ',' + Mode + ',' + Xp + ',' + Yp + ',' + Xs + ',' + Ys;
385
+ this.SigWebSetImageBlobProperty(Prop, Url);
386
+ }
387
+ static measureText(pText, pFontSize, pStyle) {
388
+ var lDiv = document.createElement('lDiv');
389
+ document.body.appendChild(lDiv);
390
+ if (pStyle != null) {
391
+ lDiv.setAttribute('style', pStyle);
392
+ }
393
+ lDiv.style.fontSize = '' + pFontSize + 'px';
394
+ lDiv.style.position = 'absolute';
395
+ lDiv.style.left = '-1000';
396
+ lDiv.style.top = '-1000';
397
+ lDiv.innerHTML = pText;
398
+ var lResult = {
399
+ width: lDiv.clientWidth,
400
+ height: lDiv.clientHeight,
401
+ };
402
+ document.body.removeChild(lDiv);
403
+ lDiv = null;
404
+ return lResult;
405
+ }
406
+ static GetVersionString() {
407
+ var Prop = 'Version';
408
+ Prop = Prop;
409
+ var Str = this.SigWebGetProperty(Prop);
410
+ var trimStr = Str.slice(1, Str.length - 2);
411
+ return trimStr;
412
+ }
413
+ static IsPenDown() {
414
+ return this.EvStatus & 0x01;
415
+ }
416
+ //
417
+ // SigPlusNETSig.cs
418
+ //
419
+ static ClearTablet() {
420
+ var Prop = 'ClearSignature';
421
+ Prop = Prop;
422
+ return this.SigWebGetProperty(Prop);
423
+ }
424
+ static NumberOfTabletPoints() {
425
+ var Prop = 'TotalPoints';
426
+ Prop = Prop;
427
+ return this.SigWebGetProperty(Prop);
428
+ }
429
+ static SetSigString(sigStr, ctx) {
430
+ var Prop = 'SigString';
431
+ Prop = Prop;
432
+ var xhr = this.SigWebcreateXHR();
433
+ if (xhr) {
434
+ xhr.open('POST', this.baseUri + Prop);
435
+ xhr.setRequestHeader('Content-Type', 'text/plain');
436
+ xhr.send(sigStr);
437
+ xhr.onload = () => {
438
+ if (ctx) {
439
+ var can = ctx.canvas;
440
+ this.SetImageXSize(can.width);
441
+ this.SetImageYSize(can.height);
442
+ this.GetSigImage(ctx);
443
+ }
444
+ };
445
+ }
446
+ return '';
447
+ }
448
+ static GetSigString() {
449
+ var Prop = 'SigString';
450
+ Prop = Prop;
451
+ var Str = this.SigWebGetProperty(Prop);
452
+ return Str.slice(1, Str.length - 1);
453
+ }
454
+ static SetSigCompressionMode(v) {
455
+ var Prop = 'CompressionMode/';
456
+ Prop = Prop + v;
457
+ this.SigWebSetPropertySync(Prop);
458
+ }
459
+ static GetSigCompressionMode() {
460
+ var Prop = 'CompressionMode';
461
+ Prop = Prop;
462
+ return this.SigWebGetProperty(Prop);
463
+ }
464
+ static SetEncryptionMode(v) {
465
+ var Prop = 'EncryptionMode/';
466
+ Prop = Prop + v;
467
+ this.SigWebSetPropertySync(Prop);
468
+ }
469
+ static GetEncryptionMode() {
470
+ var Prop = 'EncryptionMode';
471
+ Prop = Prop;
472
+ return this.SigWebGetProperty(Prop);
473
+ }
474
+ static SetKeyString(keyString) {
475
+ var Prop = 'KeyString';
476
+ Prop = Prop;
477
+ this.SigWebSetStreamProperty(Prop, keyString);
478
+ }
479
+ static GetKeyString() {
480
+ var Prop = 'KeyString';
481
+ Prop = Prop;
482
+ var Str = this.SigWebGetProperty(Prop);
483
+ return Str.slice(1, Str.length - 1);
484
+ }
485
+ static AutoKeyStart() {
486
+ var Prop = 'AutoKeyStart';
487
+ Prop = Prop;
488
+ this.SigWebSetPropertySync(Prop);
489
+ }
490
+ static AutoKeyFinish() {
491
+ var Prop = 'AutoKeyFinish';
492
+ Prop = Prop;
493
+ this.SigWebSetPropertySync(Prop);
494
+ }
495
+ static SetAutoKeyData(keyData) {
496
+ var Prop = 'SetAutoKeyData';
497
+ Prop = Prop;
498
+ this.SigWebSetStreamProperty(Prop, keyData);
499
+ }
500
+ static AutoKeyAddData(keyData) {
501
+ var Prop = 'AutoKeyAddData';
502
+ Prop = Prop;
503
+ this.SigWebSetStreamProperty(Prop, keyData);
504
+ return this.GetKeyString();
505
+ }
506
+ // function GetKeyReceipt( ) {}
507
+ static GetKeyReceiptAscii() {
508
+ var Prop = 'KeyReceiptAscii';
509
+ Prop = Prop;
510
+ var Str = this.SigWebGetProperty(Prop);
511
+ return Str.slice(1, Str.length - 1);
512
+ }
513
+ // function GetSigReceipt( ) {}
514
+ static GetSigReceiptAscii() {
515
+ var Prop = 'SigReceiptAscii';
516
+ Prop = Prop;
517
+ var Str = this.SigWebGetProperty(Prop);
518
+ return Str.slice(1, Str.length - 1);
519
+ }
520
+ static SetTimeStamp(timeStamp) {
521
+ var Prop = 'TimeStamp';
522
+ Prop = Prop;
523
+ this.SigWebSetStreamProperty(Prop, timeStamp);
524
+ }
525
+ static GetTimeStamp() {
526
+ var Prop = 'TimeStamp';
527
+ Prop = Prop;
528
+ var Str = this.SigWebGetProperty(Prop);
529
+ return Str.slice(1, Str.length - 1);
530
+ }
531
+ static SetAnnotate(annotate) {
532
+ var Prop = 'Annotate';
533
+ Prop = Prop;
534
+ this.SigWebSetStreamProperty(Prop, annotate);
535
+ }
536
+ static GetAnnotate() {
537
+ var Prop = 'Annotate';
538
+ Prop = Prop;
539
+ var Str = this.SigWebGetProperty(Prop);
540
+ return Str.slice(1, Str.length - 1);
541
+ }
542
+ static SetSaveSigInfo(v) {
543
+ var Prop = 'SaveSigInfo/';
544
+ Prop = Prop + v;
545
+ this.SigWebSetPropertySync(Prop);
546
+ }
547
+ static GetSaveSigInfo() {
548
+ var Prop = 'SaveSigInfo';
549
+ Prop = Prop;
550
+ return this.SigWebGetProperty(Prop);
551
+ }
552
+ static SetSavePressureData(v) {
553
+ var Prop = 'SavePressureData/';
554
+ Prop = Prop + v;
555
+ this.SigWebSetPropertySync(Prop);
556
+ }
557
+ static GetSavePressureData() {
558
+ var Prop = 'SavePressureData';
559
+ Prop = Prop;
560
+ return this.SigWebGetProperty(Prop);
561
+ }
562
+ static SetSaveTimeData(v) {
563
+ var Prop = 'SaveTimeData/';
564
+ Prop = Prop + v;
565
+ this.SigWebSetPropertySync(Prop);
566
+ }
567
+ static GetSaveTimeData() {
568
+ var Prop = 'SaveTimeData';
569
+ Prop = Prop;
570
+ return this.SigWebGetProperty(Prop);
571
+ }
572
+ static SetAntiAliasSpotSize(v) {
573
+ var Prop = 'AntiAliasSpotSize/';
574
+ Prop = Prop + v;
575
+ this.SigWebSetPropertySync(Prop);
576
+ }
577
+ static GetAntiAliasSpotSize() {
578
+ var Prop = 'AntiAliasSpotSize';
579
+ Prop = Prop;
580
+ return this.SigWebGetProperty(Prop);
581
+ }
582
+ static SetAntiAliasLineScale(v) {
583
+ var Prop = 'AntiAliasLineScale/';
584
+ Prop = Prop + v;
585
+ this.SigWebSetPropertySync(Prop);
586
+ }
587
+ static GetAntiAliasLineScale() {
588
+ var Prop = 'AntiAliasLineScale';
589
+ Prop = Prop;
590
+ return this.SigWebGetProperty(Prop);
591
+ }
592
+ static GetNumberOfStrokes() {
593
+ var Prop = 'NumberOfStrokes';
594
+ Prop = Prop;
595
+ return this.SigWebGetProperty(Prop);
596
+ }
597
+ static GetNumPointsForStroke(v) {
598
+ var Prop = 'NumberOfPointsInStroke/';
599
+ Prop = Prop + v;
600
+ return this.SigWebGetProperty(Prop);
601
+ }
602
+ static GetPointXValue(v1, v2) {
603
+ var Prop = 'PointXValue/';
604
+ Prop = Prop + v1 + '/' + v2;
605
+ return this.SigWebGetProperty(Prop);
606
+ }
607
+ static GetPointYValue(v1, v2) {
608
+ var Prop = 'PointYValue/';
609
+ Prop = Prop + v1 + '/' + v2;
610
+ return this.SigWebGetProperty(Prop);
611
+ }
612
+ static SetAntiAliasEnable(v) {
613
+ var Prop = 'AntiAliasEnable/';
614
+ Prop = Prop + v;
615
+ this.SigWebSetPropertySync(Prop);
616
+ }
617
+ static GetAntiAliasEnable() {
618
+ var Prop = 'AntiAliasEnable';
619
+ Prop = Prop;
620
+ return this.SigWebGetProperty(Prop);
621
+ }
622
+ static SetUseAmbientColors(v) {
623
+ var Prop = 'UseAmbientColors/';
624
+ Prop = Prop + v;
625
+ this.SigWebSetPropertySync(Prop);
626
+ }
627
+ //
628
+ // SigPlusNETDisplay.cs
629
+ //
630
+ static SetDisplayXSize(v) {
631
+ var Prop = 'DisplayXSize/';
632
+ Prop = Prop + v;
633
+ this.SigWebSetPropertySync(Prop);
634
+ }
635
+ static GetDisplayXSize() {
636
+ var Prop = 'DisplayXSize';
637
+ Prop = Prop;
638
+ return this.SigWebGetProperty(Prop);
639
+ }
640
+ static SetDisplayYSize(v) {
641
+ var Prop = 'DisplayYSize/';
642
+ Prop = Prop + v;
643
+ this.SigWebSetPropertySync(Prop);
644
+ }
645
+ static GetDisplayYSize() {
646
+ var Prop = 'DisplayYSize';
647
+ Prop = Prop;
648
+ return this.SigWebGetProperty(Prop);
649
+ }
650
+ static SetDisplayPenWidth(v) {
651
+ var Prop = 'DisplayPenWidth/';
652
+ Prop = Prop + v;
653
+ this.SigWebSetPropertySync(Prop);
654
+ }
655
+ static GetDisplayPenWidth() {
656
+ var Prop = 'DisplayPenWidth';
657
+ Prop = Prop;
658
+ return this.SigWebGetProperty(Prop);
659
+ }
660
+ static SetDisplayTimeStamp(v) {
661
+ var Prop = 'DisplayTimeStamp/';
662
+ Prop = Prop + v;
663
+ this.SigWebSetPropertySync(Prop);
664
+ }
665
+ static GetDisplayTimeStamp() {
666
+ var Prop = 'DisplayTimeStamp';
667
+ Prop = Prop;
668
+ return this.SigWebGetProperty(Prop);
669
+ }
670
+ static SetDisplayTimeStampPosX(v) {
671
+ var Prop = 'DisplayTimeStampPosX/';
672
+ Prop = Prop + v;
673
+ this.SigWebSetPropertySync(Prop);
674
+ }
675
+ static GetDisplayTimeStampPosX() {
676
+ var Prop = 'DisplayTimeStampPosX';
677
+ Prop = Prop;
678
+ return this.SigWebGetProperty(Prop);
679
+ }
680
+ static SetDisplayTimeStampPosY(v) {
681
+ var Prop = 'DisplayTimeStampPosY/';
682
+ Prop = Prop + v;
683
+ this.SigWebSetPropertySync(Prop);
684
+ }
685
+ static GetDisplayTimeStampPosY() {
686
+ var Prop = 'DisplayTimeStampPosY';
687
+ Prop = Prop;
688
+ return this.SigWebGetProperty(Prop);
689
+ }
690
+ static SetDisplayTimeStampSize(v) {
691
+ var Prop = 'DisplayTimeStampSize/';
692
+ Prop = Prop + v;
693
+ this.SigWebSetPropertySync(Prop);
694
+ }
695
+ static GetDisplayTimeStampSize() {
696
+ var Prop = 'DisplayTimeStampSize';
697
+ Prop = Prop;
698
+ return this.SigWebGetProperty(Prop);
699
+ }
700
+ static SetDisplayAnnotate(v) {
701
+ var Prop = 'DisplayAnnotate/';
702
+ Prop = Prop + v;
703
+ this.SigWebSetPropertySync(Prop);
704
+ }
705
+ static GetDisplayAnnotate() {
706
+ var Prop = 'DisplayAnnotate';
707
+ Prop = Prop;
708
+ return this.SigWebGetProperty(Prop);
709
+ }
710
+ static SetDisplayAnnotatePosX(v) {
711
+ var Prop = 'DisplayAnnotatePosX/';
712
+ Prop = Prop + v;
713
+ this.SigWebSetPropertySync(Prop);
714
+ }
715
+ static GetDisplayAnnotatePosX() {
716
+ var Prop = 'DisplayAnnotatePosX';
717
+ Prop = Prop;
718
+ return this.SigWebGetProperty(Prop);
719
+ }
720
+ static SetDisplayAnnotatePosY(v) {
721
+ var Prop = 'DisplayAnnotatePosY/';
722
+ Prop = Prop + v;
723
+ this.SigWebSetPropertySync(Prop);
724
+ }
725
+ static GetDisplayAnnotatePosY() {
726
+ var Prop = 'DisplayAnnotatePosY';
727
+ Prop = Prop;
728
+ return this.SigWebGetProperty(Prop);
729
+ }
730
+ static SetDisplayAnnotateSize(v) {
731
+ var Prop = 'DisplayAnnotateSize/';
732
+ Prop = Prop + v;
733
+ this.SigWebSetPropertySync(Prop);
734
+ }
735
+ static GetDisplayAnnotateSize() {
736
+ var Prop = 'DisplayAnnotateSize';
737
+ Prop = Prop;
738
+ return this.SigWebGetProperty(Prop);
739
+ }
740
+ //
741
+ // SigPlusNETImage.cs
742
+ //
743
+ // function GetSigImageB64( )
744
+ // {
745
+ // var xhr2 = new XMLHttpRequest();
746
+ // xhr2.open("GET", baseUri + "SigImage/1", false );
747
+ // xhr2.responseType = "blob"
748
+ // xhr2.send(null);
749
+ // if (xhr2.readyState == 4 && xhr.status == 200)
750
+ // {
751
+ // return window.URL.createObjectURL(xhr2.response);
752
+ // }
753
+ // return null;
754
+ // }
755
+ static SetImageXSize(v) {
756
+ var Prop = 'ImageXSize/';
757
+ Prop = Prop + v;
758
+ this.SigWebSetPropertySync(Prop);
759
+ }
760
+ static GetImageXSize() {
761
+ var Prop = 'ImageXSize';
762
+ Prop = Prop;
763
+ return this.SigWebGetProperty(Prop);
764
+ }
765
+ static SetImageYSize(v) {
766
+ var Prop = 'ImageYSize/';
767
+ Prop = Prop + v;
768
+ this.SigWebSetPropertySync(Prop);
769
+ }
770
+ static GetImageYSize() {
771
+ var Prop = 'ImageYSize';
772
+ Prop = Prop;
773
+ return this.SigWebGetProperty(Prop);
774
+ }
775
+ static SetImagePenWidth(v) {
776
+ var Prop = 'ImagePenWidth/';
777
+ Prop = Prop + v;
778
+ this.SigWebSetPropertySync(Prop);
779
+ }
780
+ static GetImagePenWidth() {
781
+ var Prop = 'ImagePenWidth';
782
+ Prop = Prop;
783
+ return this.SigWebGetProperty(Prop);
784
+ }
785
+ static SetImageTimeStamp(v) {
786
+ var Prop = 'ImageTimeStamp/';
787
+ Prop = Prop + v;
788
+ this.SigWebSetPropertySync(Prop);
789
+ }
790
+ static GetImageTimeStamp() {
791
+ var Prop = 'ImageTimeStamp';
792
+ Prop = Prop;
793
+ return this.SigWebGetProperty(Prop);
794
+ }
795
+ static SetImageTimeStampPosX(v) {
796
+ var Prop = 'ImageTimeStampPosX/';
797
+ Prop = Prop + v;
798
+ this.SigWebSetPropertySync(Prop);
799
+ }
800
+ static GetImageTimeStampPosX() {
801
+ var Prop = 'ImageTimeStampPosX';
802
+ Prop = Prop;
803
+ return this.SigWebGetProperty(Prop);
804
+ }
805
+ static SetImageTimeStampPosY(v) {
806
+ var Prop = 'ImageTimeStampPosY/';
807
+ Prop = Prop + v;
808
+ this.SigWebSetPropertySync(Prop);
809
+ }
810
+ static GetImageTimeStampPosY() {
811
+ var Prop = 'ImageTimeStampPosY';
812
+ Prop = Prop;
813
+ return this.SigWebGetProperty(Prop);
814
+ }
815
+ static SetImageTimeStampSize(v) {
816
+ var Prop = 'ImageTimeStampSize/';
817
+ Prop = Prop + v;
818
+ this.SigWebSetPropertySync(Prop);
819
+ }
820
+ static GetImageTimeStampSize() {
821
+ var Prop = 'ImageTimeStampSize';
822
+ Prop = Prop;
823
+ return this.SigWebGetProperty(Prop);
824
+ }
825
+ static SetImageAnnotate(v) {
826
+ var Prop = 'ImageAnnotate/';
827
+ Prop = Prop + v;
828
+ this.SigWebSetPropertySync(Prop);
829
+ }
830
+ static GetImageAnnotate() {
831
+ var Prop = 'ImageAnnotate';
832
+ Prop = Prop;
833
+ return this.SigWebGetProperty(Prop);
834
+ }
835
+ static SetImageAnnotatePosX(v) {
836
+ var Prop = 'ImageAnnotatePosX/';
837
+ Prop = Prop + v;
838
+ this.SigWebSetPropertySync(Prop);
839
+ }
840
+ static GetImageAnnotatePosX() {
841
+ var Prop = 'ImageAnnotatePosX';
842
+ Prop = Prop;
843
+ return this.SigWebGetProperty(Prop);
844
+ }
845
+ static SetImageAnnotatePosY(v) {
846
+ var Prop = 'ImageAnnotatePosY/';
847
+ Prop = Prop + v;
848
+ this.SigWebSetPropertySync(Prop);
849
+ }
850
+ static GetImageAnnotatePosY() {
851
+ var Prop = 'ImageAnnotatePosY';
852
+ Prop = Prop;
853
+ return this.SigWebGetProperty(Prop);
854
+ }
855
+ static SetImageAnnotateSize(v) {
856
+ var Prop = 'ImageAnnotateSize/';
857
+ Prop = Prop + v;
858
+ this.SigWebSetPropertySync(Prop);
859
+ }
860
+ static GetImageAnnotateSize() {
861
+ var Prop = 'ImageAnnotateSize';
862
+ Prop = Prop;
863
+ return this.SigWebGetProperty(Prop);
864
+ }
865
+ static SetJustifyX(v) {
866
+ var Prop = 'JustifyX/';
867
+ Prop = Prop + v;
868
+ this.SigWebSetPropertySync(Prop);
869
+ }
870
+ static GetJustifyX() {
871
+ var Prop = 'JustifyX';
872
+ Prop = Prop;
873
+ return this.SigWebGetProperty(Prop);
874
+ }
875
+ static SetJustifyY(v) {
876
+ var Prop = 'JustifyY/';
877
+ Prop = Prop + v;
878
+ this.SigWebSetPropertySync(Prop);
879
+ }
880
+ static GetJustifyY() {
881
+ var Prop = 'JustifyY';
882
+ Prop = Prop;
883
+ return this.SigWebGetProperty(Prop);
884
+ }
885
+ static SetJustifyMode(v) {
886
+ var Prop = 'JustifyMode/';
887
+ Prop = Prop + v;
888
+ this.SigWebSetPropertySync(Prop);
889
+ }
890
+ static GetJustifyMode() {
891
+ var Prop = 'JustifyMode';
892
+ Prop = Prop;
893
+ return this.SigWebGetProperty(Prop);
894
+ }
895
+ //
896
+ // SigPlusNETKeyPad.cs
897
+ //
898
+ static KeyPadAddHotSpot(key, coord, xp, yp, xs, ys) {
899
+ var Prop = 'KeyPadAddHotSpot/';
900
+ Prop = Prop + key + ',' + coord + ',' + xp + ',' + yp + ',' + xs + ',' + ys;
901
+ this.SigWebSetPropertySync(Prop);
902
+ }
903
+ static KeyPadMarkHotSpot(key, coord, xp, yp, xs, ys) {
904
+ this.LCDWriteString(0, 2, xp, yp, '16pt sans-serif', 32, '+');
905
+ this.LCDWriteString(0, 2, xp + xs, yp, '16pt sans-serif', 32, '+');
906
+ this.LCDWriteString(0, 2, xp, yp + ys, '16pt sans-serif', 32, '+');
907
+ this.LCDWriteString(0, 2, xp + xs, yp + ys, '16pt sans-serif', 32, '+');
908
+ }
909
+ static KeyPadQueryHotSpot(key) {
910
+ var Prop = 'KeyPadQueryHotSpot/';
911
+ Prop = Prop + key;
912
+ return this.SigWebGetProperty(Prop);
913
+ }
914
+ static KeyPadClearHotSpotList() {
915
+ var Prop = 'KeyPadClearHotSpotList';
916
+ this.SigWebSetPropertySync(Prop);
917
+ }
918
+ static SetSigWindow(coords, xp, yp, xs, ys) {
919
+ var Prop = 'SigWindow/';
920
+ Prop = Prop + coords + ',' + xp + ',' + yp + ',' + xs + ',' + ys;
921
+ this.SigWebSetPropertySync(Prop);
922
+ }
923
+ static ClearSigWindow(inside) {
924
+ var Prop = 'ClearSigWindow/';
925
+ Prop = Prop + inside;
926
+ this.SigWebSetPropertySync(Prop);
927
+ }
928
+ //
929
+ // SigPlusNETLCD.cs
930
+ //
931
+ static SetLCDCaptureMode(v) {
932
+ var Prop = 'CaptureMode/';
933
+ Prop = Prop + v;
934
+ this.SigWebSetPropertySync(Prop);
935
+ }
936
+ static GetLCDCaptureMode() {
937
+ var Prop = 'CaptureMode';
938
+ Prop = Prop;
939
+ return this.SigWebGetProperty(Prop);
940
+ }
941
+ static LCDSetWindow(xP, yP, xS, yS) {
942
+ var Prop = 'LCDSetWindow/';
943
+ Prop = Prop + xP + ',' + yP + ',' + xS + ',' + yS;
944
+ this.SigWebSetPropertySync(Prop);
945
+ }
946
+ static LCDWriteString(dest, mode, x, y, fnt, size, str) {
947
+ var c = document.createElement('canvas');
948
+ var cntx = c.getContext('2d');
949
+ cntx.font = fnt;
950
+ var txt = str;
951
+ var xs = Math.round(cntx.measureText(txt).width);
952
+ var ys = size;
953
+ c.width = xs;
954
+ c.height = ys;
955
+ if (xs == 0) {
956
+ return;
957
+ }
958
+ cntx.font = fnt;
959
+ cntx.fillStyle = '#FFFFFF';
960
+ cntx.rect(0, 0, xs, ys);
961
+ cntx.fill();
962
+ cntx.fillStyle = '#000000';
963
+ cntx.textBaseline = 'top';
964
+ cntx.fillText(txt, 0, 0);
965
+ cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
966
+ var Gstr = this.createLcdBitmapFromCanvas(c, x, y, xs, ys);
967
+ this.LcdWriteImageStream(dest, mode, x, y, xs, ys, Gstr);
968
+ }
969
+ static LCDDrawRectangle(dest, mode, x, y, xs, ys, fill) {
970
+ var c = document.createElement('canvas');
971
+ var cntx = c.getContext('2d');
972
+ c.width = xs;
973
+ c.height = ys;
974
+ cntx.fillStyle = fill;
975
+ cntx.rect(0, 0, xs, ys);
976
+ cntx.fill();
977
+ cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
978
+ var Gstr = this.createLcdBitmapFromCanvas(c, x, y, xs, ys);
979
+ this.LcdWriteImageBlob(dest, mode, x, y, xs, ys, Gstr);
980
+ }
981
+ static LCDDrawButton(dest, mode, x, y, xs, ys, strys, fill, fnt, str) {
982
+ var c = document.createElement('canvas');
983
+ var cntx = c.getContext('2d');
984
+ cntx.font = fnt;
985
+ var txt = str;
986
+ var sxs = Math.round(cntx.measureText(txt).width);
987
+ var sys = strys;
988
+ c.width = xs;
989
+ c.height = ys;
990
+ cntx.font = fnt;
991
+ cntx.fillStyle = fill;
992
+ cntx.rect(0, 0, xs, ys);
993
+ cntx.fill();
994
+ cntx.fillStyle = '#FFFFFF';
995
+ cntx.textBaseline = 'top';
996
+ cntx.fillText(txt, (xs - sxs) / 2, (ys - sys) / 2);
997
+ cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
998
+ var Gstr = this.createLcdBitmapFromCanvas(c, x, y, xs, ys);
999
+ this.LcdWriteImageBlob(dest, mode, x, y, xs, ys, Gstr);
1000
+ }
1001
+ static LCDWriteStringWindow(dest, mode, x, y, fnt, xsize, ysize, str) {
1002
+ var c = document.createElement('canvas');
1003
+ var cntx = c.getContext('2d');
1004
+ cntx.font = fnt;
1005
+ var txt = str;
1006
+ var xs = xsize;
1007
+ var ys = ysize;
1008
+ c.width = xs;
1009
+ c.height = ys;
1010
+ cntx.font = fnt;
1011
+ cntx.fillStyle = '#FFFFFF';
1012
+ cntx.rect(0, 0, xs, ys);
1013
+ cntx.fill();
1014
+ cntx.fillStyle = '#000000';
1015
+ cntx.textBaseline = 'top';
1016
+ cntx.fillText(txt, 0, 0);
1017
+ cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
1018
+ var Gstr = this.createLcdBitmapFromCanvas(c, x, y, xs, ys);
1019
+ this.LcdWriteImageBlob(dest, mode, x, y, xs, ys, Gstr);
1020
+ }
1021
+ static LCDStringWidth(fnt, str) {
1022
+ var c = document.createElement('canvas');
1023
+ var cntx = c.getContext('2d');
1024
+ cntx.font = fnt;
1025
+ var txt = str;
1026
+ var xs = Math.round(cntx.measureText(txt).width);
1027
+ return xs;
1028
+ }
1029
+ static LCDStringHeight(fnt, str) {
1030
+ return 16;
1031
+ }
1032
+ static LcdRefresh(Mode, Xp, Yp, Xs, Ys) {
1033
+ var Prop = 'LcdRefresh/';
1034
+ Prop = Prop + Mode + ',' + Xp + ',' + Yp + ',' + Xs + ',' + Ys;
1035
+ this.SigWebSetPropertySync(Prop);
1036
+ }
1037
+ static LCDSendCmdString(CmdStr, ReturnCount, Result, TimeOut) {
1038
+ var Prop = 'LcdSendCmdString/';
1039
+ Prop = Prop + ReturnCount + ',' + TimeOut;
1040
+ Result = this.SigWebSetStreamProperty(Prop, CmdStr);
1041
+ }
1042
+ static LCDSendCmdData(CmdStr, ReturnCount, Result, TimeOut) {
1043
+ var Prop = 'LcdSendCmdData/';
1044
+ Prop = Prop + ReturnCount + ',' + TimeOut;
1045
+ Result = this.SigWebSetStreamProperty(Prop, CmdStr);
1046
+ }
1047
+ // function LCDSendWindowedGraphicCanvas( dest, mode, x, y, canvas )
1048
+ // {
1049
+ // }
1050
+ // function LCDSendWindowedGraphicCanvas( dest, mode, x, y, xs, ys, canvas )
1051
+ // {
1052
+ // var Gstr = this.createLcdBitmapFromCanvas( canvas, 0, 0, xs, ys)
1053
+ // LcdWriteImageStream( dest, mode, x, y, xs, ys, Gstr );
1054
+ // }
1055
+ static LCDSendWindowedGraphicCanvas(dest, mode, x, y, xs, ys, c, xps, yps) {
1056
+ var canvas = document.createElement('canvas');
1057
+ var Gstr = this.createLcdBitmapFromCanvas(canvas, xps, yps, xs, ys);
1058
+ this.LcdWriteImageStream(dest, mode, x, y, xs, ys, Gstr);
1059
+ }
1060
+ static LCDSendGraphicUrl(dest, mode, x, y, url) {
1061
+ this.LcdWriteImage(dest, mode, x, y, url);
1062
+ }
1063
+ // function LCDSendGraphic( Dest, Mode, XPos, YPos, ImageFileName ) {}
1064
+ // function LCDSendGraphicURL( Dest, Mode, XPos, YPos, URL ) {}
1065
+ static LCDClear() {
1066
+ var Prop = 'LcdClear';
1067
+ Prop = Prop;
1068
+ return this.SigWebGetProperty(Prop);
1069
+ }
1070
+ static LCDSetTabletMap(LCDType, LCDXSize, LCDYSize, LCDXStart, LCDYStart, LCDXStop, LCDYStop) { }
1071
+ static LCDSetPixelDepth(v) {
1072
+ var Prop = 'LcdSetPixelDepth/';
1073
+ Prop = Prop + v;
1074
+ this.SigWebSetPropertySync(Prop);
1075
+ }
1076
+ static LCDGetLCDSize() {
1077
+ var Prop = 'LcdGetLcdSize';
1078
+ Prop = Prop;
1079
+ return this.SigWebGetProperty(Prop);
1080
+ }
1081
+ static LCDGetCompressionMode() {
1082
+ var Prop = 'LcdCompressionMode';
1083
+ Prop = Prop;
1084
+ return this.SigWebGetProperty(Prop);
1085
+ }
1086
+ static LCDGetZCompressionMode() {
1087
+ var Prop = 'LcdZCompressionMode';
1088
+ Prop = Prop;
1089
+ return this.SigWebGetProperty(Prop);
1090
+ }
1091
+ //
1092
+ // SigPlusNETLCD.cs
1093
+ //
1094
+ static SetRealTabletState(v) {
1095
+ var Prop = 'TabletState/';
1096
+ Prop = Prop + v;
1097
+ this.SigWebSetPropertySync(Prop);
1098
+ }
1099
+ static GetTabletState() {
1100
+ var Prop = 'TabletState';
1101
+ Prop = Prop;
1102
+ return this.SigWebGetProperty(Prop);
1103
+ }
1104
+ static SetTabletLogicalXSize(v) {
1105
+ var Prop = 'TabletLogicalXSize/';
1106
+ Prop = Prop + v;
1107
+ this.SigWebSetPropertySync(Prop);
1108
+ }
1109
+ static GetTabletLogicalXSize() {
1110
+ var Prop = 'TabletLogicalXSize';
1111
+ Prop = Prop;
1112
+ return this.SigWebGetProperty(Prop);
1113
+ }
1114
+ static GetTabletLogicalYSize() {
1115
+ var Prop = 'TabletLogicalYSize';
1116
+ Prop = Prop;
1117
+ return this.SigWebGetProperty(Prop);
1118
+ }
1119
+ static SetTabletLogicalYSize(v) {
1120
+ var Prop = 'TabletLogicalYSize/';
1121
+ Prop = Prop + v;
1122
+ this.SigWebSetPropertySync(Prop);
1123
+ }
1124
+ static SetTabletXStart(v) {
1125
+ var Prop = 'TabletXStart/';
1126
+ Prop = Prop + v;
1127
+ this.SigWebSetPropertySync(Prop);
1128
+ }
1129
+ static GetTabletXStart() {
1130
+ var Prop = 'TabletXStart';
1131
+ Prop = Prop;
1132
+ return this.SigWebGetProperty(Prop);
1133
+ }
1134
+ static SetTabletYStart(v) {
1135
+ var Prop = 'TabletYStart/';
1136
+ Prop = Prop + v;
1137
+ this.SigWebSetPropertySync(Prop);
1138
+ }
1139
+ static GetTabletYStart() {
1140
+ var Prop = 'TabletYStart';
1141
+ Prop = Prop;
1142
+ return this.SigWebGetProperty(Prop);
1143
+ }
1144
+ static SetTabletXStop(v) {
1145
+ var Prop = 'TabletXStop/';
1146
+ Prop = Prop + v;
1147
+ this.SigWebSetPropertySync(Prop);
1148
+ }
1149
+ static GetTabletXStop() {
1150
+ var Prop = 'TabletXStop';
1151
+ Prop = Prop;
1152
+ return this.SigWebGetProperty(Prop);
1153
+ }
1154
+ static SetTabletYStop(v) {
1155
+ var Prop = 'TabletYStop/';
1156
+ Prop = Prop + v;
1157
+ this.SigWebSetPropertySync(Prop);
1158
+ }
1159
+ static GetTabletYStop() {
1160
+ var Prop = 'TabletYStop';
1161
+ Prop = Prop;
1162
+ return this.SigWebGetProperty(Prop);
1163
+ }
1164
+ static SetTabletFilterPoints(v) {
1165
+ var Prop = 'TabletFilterPoints/';
1166
+ Prop = Prop + v;
1167
+ this.SigWebSetPropertySync(Prop);
1168
+ }
1169
+ static GetTabletFilterPoints() {
1170
+ var Prop = 'TabletFilterPoints';
1171
+ Prop = Prop;
1172
+ return this.SigWebGetProperty(Prop);
1173
+ }
1174
+ static SetTabletTimingAdvance(v) {
1175
+ var Prop = 'TabletTimingAdvance/';
1176
+ Prop = Prop + v;
1177
+ this.SigWebSetPropertySync(Prop);
1178
+ }
1179
+ static GetTabletTimingAdvance() {
1180
+ var Prop = 'TabletTimingAdvance';
1181
+ Prop = Prop;
1182
+ return this.SigWebGetProperty(Prop);
1183
+ }
1184
+ static SetTabletComPort(v) {
1185
+ var Prop = 'TabletComPort/';
1186
+ Prop = Prop + v;
1187
+ this.SigWebSetPropertySync(Prop);
1188
+ }
1189
+ static GetTabletComPort() {
1190
+ var Prop = 'TabletComPort';
1191
+ Prop = Prop;
1192
+ return this.SigWebGetProperty(Prop);
1193
+ }
1194
+ static SetTabletBaudRate(v) {
1195
+ var Prop = 'TabletBaudRate/';
1196
+ Prop = Prop + v;
1197
+ this.SigWebSetPropertySync(Prop);
1198
+ }
1199
+ static GetTabletBaudRate() {
1200
+ var Prop = 'TabletBaudRate';
1201
+ Prop = Prop;
1202
+ return this.SigWebGetProperty(Prop);
1203
+ }
1204
+ static SetTabletRotation(v) {
1205
+ var Prop = 'TabletRotation/';
1206
+ Prop = Prop + v;
1207
+ this.SigWebSetPropertySync(Prop);
1208
+ }
1209
+ static GetTabletRotation() {
1210
+ var Prop = 'TabletRotation';
1211
+ Prop = Prop;
1212
+ return this.SigWebGetProperty(Prop);
1213
+ }
1214
+ static SetTabletType(v) {
1215
+ var Prop = 'TabletType/';
1216
+ Prop = Prop + v;
1217
+ this.SigWebSetPropertySync(Prop);
1218
+ }
1219
+ static GetTabletType() {
1220
+ var Prop = 'TabletType';
1221
+ Prop = Prop;
1222
+ return this.SigWebGetProperty(Prop);
1223
+ }
1224
+ static SetServerTabletType(v) {
1225
+ var Prop = 'ServerTabletType/';
1226
+ Prop = Prop + v;
1227
+ this.SigWebSetPropertySync(Prop);
1228
+ }
1229
+ static GetServerTabletType() {
1230
+ var Prop = 'ServerTabletType';
1231
+ Prop = Prop;
1232
+ return this.SigWebGetProperty(Prop);
1233
+ }
1234
+ static SetTabletComTest(v) {
1235
+ var Prop = 'TabletComTest/';
1236
+ Prop = Prop + v;
1237
+ this.SigWebSetPropertySync(Prop);
1238
+ }
1239
+ static GetTabletComTest() {
1240
+ var Prop = 'TabletComTest';
1241
+ Prop = Prop;
1242
+ return this.SigWebGetProperty(Prop);
1243
+ }
1244
+ static SetTabletResolution(v) {
1245
+ var Prop = 'TabletResolution/';
1246
+ Prop = Prop + v;
1247
+ this.SigWebSetPropertySync(Prop);
1248
+ }
1249
+ static GetTabletResolution() {
1250
+ var Prop = 'TabletResolution';
1251
+ Prop = Prop;
1252
+ return this.SigWebGetProperty(Prop);
1253
+ }
1254
+ static TabletConnectQuery() {
1255
+ var Prop = 'TabletConnectQuery';
1256
+ Prop = Prop;
1257
+ return this.SigWebGetProperty(Prop);
1258
+ }
1259
+ static TabletModelNumber() {
1260
+ var Prop = 'TabletModelNumber';
1261
+ Prop = Prop;
1262
+ return this.SigWebGetProperty(Prop);
1263
+ }
1264
+ static TabletSerialNumber() {
1265
+ var Prop = 'TabletSerialNumber';
1266
+ Prop = Prop;
1267
+ return this.SigWebGetProperty(Prop);
1268
+ }
1269
+ static SetTabletPortPath(v) {
1270
+ var Prop = 'TabletPortPath/';
1271
+ Prop = Prop + v;
1272
+ this.SigWebSetPropertySync(Prop);
1273
+ }
1274
+ static SetTabletLocalIniFilePath(v) {
1275
+ var Prop = 'TabletLocalIniFilePath/';
1276
+ Prop = Prop + v;
1277
+ this.SigWebSetPropertySync(Prop);
1278
+ }
1279
+ static SetTabletModel(v) {
1280
+ var Prop = 'TabletModel/';
1281
+ Prop = Prop + v;
1282
+ this.SigWebSetPropertySync(Prop);
1283
+ }
1284
+ static SetSerialPortCloseDelay(v) {
1285
+ var Prop = 'SerialPortCloseDelay/';
1286
+ Prop = Prop + v;
1287
+ this.SigWebSetPropertySync(Prop);
1288
+ }
1289
+ static GetSerialPortCloseDelay() {
1290
+ var Prop = 'SerialPortCloseDelay';
1291
+ Prop = Prop;
1292
+ return this.SigWebGetProperty(Prop);
1293
+ }
1294
+ static EnableTabletEncryption() {
1295
+ var Prop = 'EnableTabletEncryption';
1296
+ Prop = Prop;
1297
+ this.SigWebSetPropertySync(Prop);
1298
+ }
1299
+ static SetTabletEncryptionMode(hmode, tmode) {
1300
+ var Prop = 'TabletEncryptionMode/';
1301
+ Prop = Prop + hmode + ',' + tmode;
1302
+ this.SigWebSetPropertySync(Prop);
1303
+ }
1304
+ static SetMaxLogFileSize(v) {
1305
+ var Prop = 'MaxLogFileSize/';
1306
+ Prop = Prop + v;
1307
+ this.SigWebSetPropertySync(Prop);
1308
+ }
1309
+ static GetSigSockServerPath() {
1310
+ var Prop = 'SigSockServerPath';
1311
+ Prop = Prop;
1312
+ return this.SigWebGetProperty(Prop);
1313
+ }
1314
+ static GetSigSockClientName() {
1315
+ var Prop = 'SigSockClientName';
1316
+ Prop = Prop;
1317
+ return this.SigWebGetProperty(Prop);
1318
+ }
1319
+ static GetSigSockPortNumber() {
1320
+ var Prop = 'SigSockPortNumber';
1321
+ Prop = Prop;
1322
+ return this.SigWebGetProperty(Prop);
1323
+ }
1324
+ static SetSigSockServerPath(v) {
1325
+ var Prop = 'SigSockServerPath/';
1326
+ Prop = Prop + v;
1327
+ this.SigWebSetPropertySync(Prop);
1328
+ }
1329
+ static SetSigSockClientName(v) {
1330
+ var Prop = 'SigSockClientName/';
1331
+ Prop = Prop + v;
1332
+ this.SigWebSetPropertySync(Prop);
1333
+ }
1334
+ static SetPortNumber(v) {
1335
+ var Prop = 'PortNumber/';
1336
+ Prop = Prop + v;
1337
+ this.SigWebSetPropertySync(Prop);
1338
+ }
1339
+ static SetSigSockPortNumber(v) {
1340
+ var Prop = 'SigSockPortNumber/';
1341
+ Prop = Prop + v;
1342
+ this.SigWebSetPropertySync(Prop);
1343
+ }
1344
+ static GetFirmwareRevision() {
1345
+ var Prop = 'FirmwareRevision';
1346
+ Prop = Prop;
1347
+ return this.SigWebGetProperty(Prop);
1348
+ }
1349
+ static SetTabletData(sigStr) {
1350
+ var Prop = 'TabletData';
1351
+ Prop = Prop;
1352
+ this.SigWebSetStreamProperty(Prop, sigStr);
1353
+ }
1354
+ static GetTabletData() {
1355
+ var Prop = 'TabletData';
1356
+ Prop = Prop;
1357
+ var Str = this.SigWebGetProperty(Prop);
1358
+ return Str.slice(1, Str.length - 1);
1359
+ }
1360
+ static OpenTablet(v) {
1361
+ var Prop = 'OpenTablet/';
1362
+ Prop = Prop + v;
1363
+ this.SigWebSetPropertySync(Prop);
1364
+ }
1365
+ static CloseTablet() {
1366
+ var Prop = 'CloseTablet';
1367
+ Prop = Prop;
1368
+ this.SigWebSetProperty(Prop);
1369
+ }
1370
+ static ResetParameters() {
1371
+ var Prop = 'ResetParameters';
1372
+ Prop = Prop;
1373
+ this.SigWebSetPropertySync(Prop);
1374
+ }
1375
+ static testRawData() {
1376
+ this.OpenTablet(1);
1377
+ var Str1 = this.GetTabletData();
1378
+ this.CloseTablet();
1379
+ }
1380
+ static SetTabletState(v, ctx, tv) {
1381
+ var delay;
1382
+ if (tv) {
1383
+ delay = tv;
1384
+ }
1385
+ else {
1386
+ delay = 100;
1387
+ }
1388
+ if (this.GetTabletState() != v) {
1389
+ if (v == 1) {
1390
+ if (ctx) {
1391
+ var can = ctx.canvas;
1392
+ this.SetDisplayXSize(can.width);
1393
+ this.SetDisplayYSize(can.height);
1394
+ this.SigWebSetDisplayTarget(ctx);
1395
+ }
1396
+ this.SetRealTabletState(v);
1397
+ var data = this.GetTabletState();
1398
+ var dataResult = data == '' || data == null ? 0 : Number(data);
1399
+ var tmr = null;
1400
+ if (ctx && dataResult != 0) {
1401
+ tmr = setInterval(() => this.SigWebRefresh(), delay);
1402
+ }
1403
+ else {
1404
+ tmr = null;
1405
+ }
1406
+ return tmr;
1407
+ }
1408
+ else {
1409
+ if (ctx) {
1410
+ clearInterval(ctx);
1411
+ }
1412
+ this.SigWebSetDisplayTarget(null);
1413
+ this.SetRealTabletState(v);
1414
+ }
1415
+ }
1416
+ return null;
1417
+ }
1418
+ }
1419
+ SigWebTablet.baseUri = SigWebTablet.makeUri();
1420
+ SigWebTablet.Count = false;
1421
+ SigWebTablet.SigWebFontThreshold = 155;
1422
+ SigWebTablet.NumPointsLastTime = 0;
1423
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnV2ViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliZXktbmctY29tcG9uZW50LWxpYnJhcnkvc3JjL3V0aWxzL1NpZ1dlYi9TaWdXZWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCO0FBQ2xCLE1BQU0sT0FBTyxZQUFZO0lBQ2YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFXO1FBQ3RDLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNkLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUI7YUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDM0IsU0FBUyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7SUFDTyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQVU7UUFDbEMsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2QsT0FBTyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xDO2FBQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQzNCLE9BQU8sU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4QztRQUNELE9BQU8sRUFBRSxDQUFDLENBQUMsNENBQTRDO0lBQ3pELENBQUM7SUFZTyxNQUFNLENBQUMsT0FBTztRQUNwQixJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksSUFBSSxJQUFJLE9BQU8sRUFBRTtZQUNuQixJQUFJLEdBQUcsT0FBTyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDZixJQUFJLElBQUksSUFBSSxRQUFRLEVBQUU7Z0JBQ3BCLE9BQU8sSUFBSSxHQUFHLHlDQUF5QyxDQUFDO2FBQ3pEO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxHQUFHLHlDQUF5QyxDQUFDO2FBQ3pE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QUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNsQztnQkFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDO2dCQUNmLElBQUksR0FBRyxJQUFJLFVBQVUsSUFBSSxDQUFDLEVBQUU7b0JBQzFCLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUN0RDtxQkFBTTtvQkFDTCxHQUFHLEdBQUcsSUFBSSxDQUFDO2lCQUNaO2dCQUVELE9BQU8sR0FBRyxDQUFDO2FBQ1o7aUJBQU07Z0JBQ0wsSUFBSSxHQUFHLEVBQUU7b0JBQ1AsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNwQjtnQkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM1QjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztBQXQwRGMsb0JBQU8sR0FBVyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7QUFFekMsa0JBQUssR0FBWSxLQUFLLENBQUM7QUFJdkIsZ0NBQW1CLEdBQUcsR0FBRyxDQUFDO0FBQzFCLDhCQUFpQixHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNpZ1dlYlRhYmxldC50c1xyXG5leHBvcnQgY2xhc3MgU2lnV2ViVGFibGV0IHtcclxuICBwcml2YXRlIHN0YXRpYyByZXZva2VCbG9iVVJMKHVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAod2luZG93LlVSTCkge1xyXG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcclxuICAgICAgd2Via2l0VVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIHN0YXRpYyBnZXRCbG9iVVJMKGJsb2I6IEJsb2IpOiBzdHJpbmcge1xyXG4gICAgaWYgKHdpbmRvdy5VUkwpIHtcclxuICAgICAgcmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcclxuICAgICAgcmV0dXJuIHdlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7IC8vIFJldG9ybmFyIHVuIHN0cmluZyB2YWPDrW8gZW4gY2FzbyBkZSBlcnJvclxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgYmFzZVVyaTogc3RyaW5nID0gU2lnV2ViVGFibGV0Lm1ha2VVcmkoKTtcclxuICBwcml2YXRlIHN0YXRpYyBjdHg7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgQ291bnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHN0YXRpYyBFdlN0YXR1cztcclxuICBwcml2YXRlIHN0YXRpYyBvblNpZ1BlbkRvd247XHJcbiAgcHJpdmF0ZSBzdGF0aWMgb25TaWdQZW5VcDtcclxuICBwcml2YXRlIHN0YXRpYyBTaWdXZWJGb250VGhyZXNob2xkID0gMTU1O1xyXG4gIHByaXZhdGUgc3RhdGljIE51bVBvaW50c0xhc3RUaW1lID0gMDtcclxuICBwcml2YXRlIHN0YXRpYyBTaWdJbWFnZUI2NDtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgbWFrZVVyaSgpOiBzdHJpbmcge1xyXG4gICAgdmFyIHByb3QgPSBsb2NhdGlvbi5wcm90b2NvbDtcclxuICAgIGlmIChwcm90ID09ICdmaWxlOicpIHtcclxuICAgICAgcHJvdCA9ICdodHRwOic7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNJRSgpKSB7XHJcbiAgICAgIGlmIChwcm90ID09ICdodHRwczonKSB7XHJcbiAgICAgICAgcmV0dXJuIHByb3QgKyAnLy90YWJsZXQuc2lnd2VidGFibGV0LmNvbTo0NzI5MC9TaWdXZWIvJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gcHJvdCArICcvL3RhYmxldC5zaWd3ZWJ0YWJsZXQuY29tOjQ3Mjg5L1NpZ1dlYi8nO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDaHJvbWUoKSkge1xyXG4gICAgICBpZiAocHJvdCA9PSAnaHR0cHM6Jykge1xyXG4gICAgICAgIHJldHVybiBwcm90ICsgJy8vdGFibGV0LnNpZ3dlYnRhYmxldC5jb206NDcyOTAvU2lnV2ViLyc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHByb3QgKyAnLy90YWJsZXQuc2lnd2VidGFibGV0LmNvbTo0NzI4OS9TaWdXZWIvJztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9GSVJFRk9YXHJcbiAgICAgIGlmIChwcm90ID09ICdodHRwczonKSB7XHJcbiAgICAgICAgcmV0dXJuIHByb3QgKyAnLy90YWJsZXQuc2lnd2VidGFibGV0LmNvbTo0NzI5MC9TaWdXZWIvJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gcHJvdCArICcvL3RhYmxldC5zaWd3ZWJ0YWJsZXQuY29tOjQ3Mjg5L1NpZ1dlYi8nO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZVVVSUQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKFxyXG4gICAgICAvW3h5XS9nLFxyXG4gICAgICBmdW5jdGlvbiAoYykge1xyXG4gICAgICAgIGNvbnN0IHIgPSAoTWF0aC5yYW5kb20oKSAqIDE2KSB8IDA7XHJcbiAgICAgICAgY29uc3QgdiA9IGMgPT09ICd4JyA/IHIgOiAociAmIDB4MykgfCAweDg7XHJcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzU2lnV2ViSW5zdGFsbGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB0cnkge1xyXG4gICAgICB4aHIub3BlbihcclxuICAgICAgICAnR0VUJyxcclxuICAgICAgICBgJHt0aGlzLmJhc2VVcml9VGFibGV0U3RhdGU/bm9DYWNoZT0ke3RoaXMuZ2VuZXJhdGVVVUlEKCl9YCxcclxuICAgICAgICBmYWxzZVxyXG4gICAgICApO1xyXG4gICAgICB4aHIuc2VuZCgpO1xyXG4gICAgICByZXR1cm4geGhyLnN0YXR1cyAhPT0gNDA0ICYmIHhoci5zdGF0dXMgIT09IDA7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBjaGVja2luZyBTaWdXZWIgaW5zdGFsbGF0aW9uJywgZSk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBpc0lFKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgbmF2aWdhdG9yLmFwcE5hbWUgPT09ICdNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXInIHx8XHJcbiAgICAgIChuYXZpZ2F0b3IuYXBwTmFtZSA9PT0gJ05ldHNjYXBlJyAmJlxyXG4gICAgICAgIG5ldyBSZWdFeHAoJ1RyaWRlbnQvLipydjooWzAtOV17MSx9Wy4wLTldezAsfSknKS5leGVjKFxyXG4gICAgICAgICAgbmF2aWdhdG9yLnVzZXJBZ2VudFxyXG4gICAgICAgICkgIT0gbnVsbClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNDaHJvbWUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5sYXN0SW5kZXhPZignQ2hyb21lLycpID4gMDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJjcmVhdGVYSFIoKTogWE1MSHR0cFJlcXVlc3QgfCBudWxsIHtcclxuICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgaWYgKCF4aHIpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzZSBwdWRvIGNyZWFyIFhNTEh0dHBSZXF1ZXN0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHhocjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJTZXRQcm9wZXJ0eShwcm9wOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeGhyOiBYTUxIdHRwUmVxdWVzdCB8IG51bGwgPSB0aGlzLlNpZ1dlYmNyZWF0ZVhIUigpO1xyXG5cclxuICAgIGlmICh4aHIpIHtcclxuICAgICAgeGhyLm9wZW4oJ1BPU1QnLCB0aGlzLmJhc2VVcmkgKyBwcm9wLCB0cnVlKTtcclxuICAgICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCAmJiB4aHIuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNpZ1dlYlNldFByb3BlcnR5U3luYyhwcm9wOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeGhyOiBYTUxIdHRwUmVxdWVzdCB8IG51bGwgPSB0aGlzLlNpZ1dlYmNyZWF0ZVhIUigpO1xyXG5cclxuICAgIGlmICh4aHIpIHtcclxuICAgICAgeGhyLm9wZW4oJ1BPU1QnLCB0aGlzLmJhc2VVcmkgKyBwcm9wLCBmYWxzZSk7XHJcbiAgICAgIHhoci5zZW5kKCk7XHJcbiAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCAmJiB4aHIuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNpZ1dlYlNldFN0cmVhbVByb3BlcnR5KHByb3A6IHN0cmluZywgc3RybTogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHhocjogWE1MSHR0cFJlcXVlc3QgfCBudWxsID0gdGhpcy5TaWdXZWJjcmVhdGVYSFIoKTtcclxuXHJcbiAgICBpZiAoeGhyKSB7XHJcbiAgICAgIHhoci5vcGVuKCdQT1NUJywgdGhpcy5iYXNlVXJpICsgcHJvcCk7XHJcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xyXG4gICAgICB4aHIuc2VuZChzdHJtKTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJTeW5jU2V0U3RyZWFtUHJvcGVydHkocHJvcDogc3RyaW5nLCBzdHJtOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeGhyOiBYTUxIdHRwUmVxdWVzdCB8IG51bGwgPSB0aGlzLlNpZ1dlYmNyZWF0ZVhIUigpO1xyXG5cclxuICAgIGlmICh4aHIpIHtcclxuICAgICAgeGhyLm9wZW4oJ1BPU1QnLCB0aGlzLmJhc2VVcmkgKyBwcm9wLCBmYWxzZSk7XHJcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xyXG4gICAgICB4aHIuc2VuZChzdHJtKTtcclxuICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0ICYmIHhoci5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2lnV2ViU2V0SW1hZ2VTdHJlYW1Qcm9wZXJ0eShwcm9wOiBzdHJpbmcsIHN0cm06IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB4aHI6IFhNTEh0dHBSZXF1ZXN0IHwgbnVsbCA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuYmFzZVVyaSArIHByb3AsIGZhbHNlKTtcclxuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdpbWFnZS9wbmcnKTtcclxuICAgICAgeGhyLnNlbmQoc3RybSk7XHJcbiAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCAmJiB4aHIuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNpZ1dlYlNldEltYWdlQmxvYlByb3BlcnR5KHByb3AsIHN0cm0pIHtcclxuICAgIHZhciB4aHIgPSB0aGlzLlNpZ1dlYmNyZWF0ZVhIUigpO1xyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuYmFzZVVyaSArIHByb3AsIGZhbHNlKTtcclxuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdibG9iJyk7XHJcbiAgICAgIHhoci5zZW5kKHN0cm0pO1xyXG4gICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCAmJiB4aHIuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2lnV2ViR2V0UHJvcGVydHkocHJvcCkge1xyXG4gICAgdmFyIHhociA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbihcclxuICAgICAgICAnR0VUJyxcclxuICAgICAgICB0aGlzLmJhc2VVcmkgKyBwcm9wICsgJz9ub0NhY2hlPScgKyB0aGlzLmdlbmVyYXRlVVVJRCgpLFxyXG4gICAgICAgIGZhbHNlXHJcbiAgICAgICk7XHJcbiAgICAgIHhoci5zZW5kKG51bGwpO1xyXG4gICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCAmJiB4aHIuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0U2lnSW1hZ2VCNjQoY2FsbGJhY2spIHtcclxuICAgIHZhciBjdnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciB3aWR0aCA9IHRoaXMuR2V0SW1hZ2VYU2l6ZSgpO1xyXG4gICAgdmFyIGhlaWdodCA9IHRoaXMuR2V0SW1hZ2VZU2l6ZSgpO1xyXG4gICAgY3ZzLndpZHRoID0gd2lkdGggPT0gJycgfHwgd2lkdGggPT0gbnVsbCA/IDAgOiBOdW1iZXIod2lkdGgpO1xyXG4gICAgY3ZzLmhlaWdodCA9IGhlaWdodCA9PSAnJyB8fCBoZWlnaHQgPT0gbnVsbCA/IDAgOiBOdW1iZXIoaGVpZ2h0KTtcclxuXHJcbiAgICB2YXIgeGhyMiA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgeGhyMi5vcGVuKFxyXG4gICAgICAnR0VUJyxcclxuICAgICAgdGhpcy5iYXNlVXJpICsgJ1NpZ0ltYWdlLzEnICsgJz9ub0NhY2hlPScgKyB0aGlzLmdlbmVyYXRlVVVJRCgpLFxyXG4gICAgICB0cnVlXHJcbiAgICApO1xyXG4gICAgeGhyMi5yZXNwb25zZVR5cGUgPSAnYmxvYic7XHJcbiAgICB4aHIyLnNlbmQobnVsbCk7XHJcbiAgICB4aHIyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgdmFyIGNudHggPSBjdnMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBpbWcuc3JjID0gdGhpcy5nZXRCbG9iVVJMKHhocjIucmVzcG9uc2UpO1xyXG4gICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGNudHguZHJhd0ltYWdlKGltZywgMCwgMCk7XHJcbiAgICAgICAgdmFyIGI2NFN0cmluZyA9IGN2cy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xyXG4gICAgICAgIHZhciBsb2MgPSBiNjRTdHJpbmcuc2VhcmNoKCdiYXNlNjQsJyk7XHJcbiAgICAgICAgdmFyIHJldHN0cmluZyA9IGI2NFN0cmluZy5zbGljZShsb2MgKyA3LCBiNjRTdHJpbmcubGVuZ3RoKTtcclxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgIGNhbGxiYWNrKHJldHN0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJXYWl0Rm9yUGVuRG93bihjYWxsYmFjaykge1xyXG4gICAgdmFyIHhociA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbihcclxuICAgICAgICAnR0VUJyxcclxuICAgICAgICB0aGlzLmJhc2VVcmkgKyAnV2FpdEZvclBlbkRvd24nICsgJz9ub0NhY2hlPScgKyB0aGlzLmdlbmVyYXRlVVVJRCgpXHJcbiAgICAgICk7XHJcbiAgICAgIHhoci50aW1lb3V0ID0gMTAwMDA7XHJcbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlICE9IDQpIHJldHVybjtcclxuICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApIGNhbGxiYWNrKCk7XHJcbiAgICAgIH07XHJcbiAgICAgIHhoci5zZW5kKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNpZ0ltYWdlKGN0eCkge1xyXG4gICAgdmFyIHhocjIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHhocjIub3BlbihcclxuICAgICAgJ0dFVCcsXHJcbiAgICAgIHRoaXMuYmFzZVVyaSArICdTaWdJbWFnZS8xJyArICc/bm9DYWNoZT0nICsgdGhpcy5nZW5lcmF0ZVVVSUQoKSxcclxuICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIHhocjIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xyXG4gICAgeGhyMi5zZW5kKG51bGwpO1xyXG4gICAgeGhyMi5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1nLnNyYyA9IHRoaXMuZ2V0QmxvYlVSTCh4aHIyLnJlc3BvbnNlKTtcclxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7XHJcbiAgICAgICAgdGhpcy5yZXZva2VCbG9iVVJMKGltZy5zcmMpO1xyXG4gICAgICAgIGltZyA9IG51bGw7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNpZ1dlYlNldERpc3BsYXlUYXJnZXQob2JqKSB7XHJcbiAgICB0aGlzLmN0eCA9IG9iajtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJSZWZyZXNoKCkge1xyXG4gICAgdmFyIE51bVBvaW50cyA9IE51bWJlcih0aGlzLk51bWJlck9mVGFibGV0UG9pbnRzKCkpO1xyXG4gICAgaWYgKE51bVBvaW50cyA9PSB0aGlzLk51bVBvaW50c0xhc3RUaW1lKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuTnVtUG9pbnRzTGFzdFRpbWUgPSBOdW1Qb2ludHM7XHJcblxyXG4gICAgdmFyIHhocjIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHhocjIub3BlbihcclxuICAgICAgJ0dFVCcsXHJcbiAgICAgIHRoaXMuYmFzZVVyaSArICdTaWdJbWFnZS8wJyArICc/bm9DYWNoZT0nICsgdGhpcy5nZW5lcmF0ZVVVSUQoKSxcclxuICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIHhocjIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xyXG4gICAgeGhyMi5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1nLnNyYyA9IHRoaXMuZ2V0QmxvYlVSTCh4aHIyLnJlc3BvbnNlKTtcclxuICAgICAgLy9cdFx0XHRcdGltZy5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCh4aHIyLnJlc3BvbnNlKTtcclxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcclxuICAgICAgICB0aGlzLnJldm9rZUJsb2JVUkwoaW1nLnNyYyk7XHJcbiAgICAgICAgaW1nID0gbnVsbDtcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgICB4aHIyLnNlbmQobnVsbCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2lnV2ViRXZlbnQoKSB7XHJcbiAgICB2YXIgT2xkRXZTdGF0dXMgPSB0aGlzLkV2U3RhdHVzO1xyXG5cclxuICAgIHZhciB4aHIgPSB0aGlzLlNpZ1dlYmNyZWF0ZVhIUigpO1xyXG5cclxuICAgIGlmICh4aHIpIHtcclxuICAgICAgeGhyLm9wZW4oXHJcbiAgICAgICAgJ0dFVCcsXHJcbiAgICAgICAgdGhpcy5iYXNlVXJpICsgJ0V2ZW50U3RhdHVzJyArICc/bm9DYWNoZT0nICsgdGhpcy5nZW5lcmF0ZVVVSUQoKSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5FdlN0YXR1cyA9IHhoci5yZXNwb25zZVRleHQ7XHJcbiAgICAgICAgaWYgKE9sZEV2U3RhdHVzICYgMHgwMSAmJiB0aGlzLkV2U3RhdHVzICYgMHgwMikge1xyXG4gICAgICAgICAgaWYgKHRoaXMub25TaWdQZW5Eb3duKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25TaWdQZW5Eb3duKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoT2xkRXZTdGF0dXMgJiAweDAyICYmIHRoaXMuRXZTdGF0dXMgJiAweDAxKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5vblNpZ1BlblVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25TaWdQZW5VcCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2V0U2lnV2ViRm9udFRocmVzaG9sZCh2KSB7XHJcbiAgICB0aGlzLlNpZ1dlYkZvbnRUaHJlc2hvbGQgPSB2O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZUxjZEJpdG1hcEZyb21DYW52YXMob3VyQ2FudmFzLCB4cCwgeXAsIHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHZhciBjYW52YXNDdHggPSBvdXJDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIHZhciBpbWdEYXRhID0gY2FudmFzQ3R4LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgIHZhciBqID0gMDtcclxuICAgIHZhciBzVmFsID0gMDtcclxuICAgIHZhciBvdXREYXRhID0gJyc7XHJcbiAgICB2YXIgb3V0SWR4ID0gMDtcclxuICAgIHZhciBkYXRhID0gaW1nRGF0YS5kYXRhO1xyXG5cclxuICAgIGZvciAodmFyIHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspXHJcbiAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xyXG4gICAgICAgIHZhciB0bXAxID0gZGF0YVtqXTtcclxuICAgICAgICB2YXIgdG1wMiA9IGRhdGFbaiArIDFdO1xyXG4gICAgICAgIHZhciB0bXAzID0gZGF0YVtqICsgMl07XHJcbiAgICAgICAgdmFyIHRtcDQgPSBkYXRhW2ogKyAzXTtcclxuXHJcbiAgICAgICAgLy9cdFx0XHRcdFx0c1ZhbCA9IHRtcDEgKyAodG1wMiA8PCA4ICkgKyAoIHRtcDMgPDwgMTYgKSArICh0bXA0IDw8IDI0ICk7XHJcbiAgICAgICAgaiA9IGogKyA0O1xyXG4gICAgICAgIGlmICh0bXAxIDwgdGhpcy5TaWdXZWJGb250VGhyZXNob2xkKSB7XHJcbiAgICAgICAgICBvdXREYXRhICs9ICdCJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb3V0RGF0YSArPSAnVyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dERhdGE7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdG9IZXgoTmliVmFsKSB7XHJcbiAgICBzd2l0Y2ggKE5pYlZhbCkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHJldHVybiAnMSc7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICByZXR1cm4gJzInO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcmV0dXJuICczJztcclxuICAgICAgY2FzZSA0OlxyXG4gICAgICAgIHJldHVybiAnNCc7XHJcbiAgICAgIGNhc2UgNTpcclxuICAgICAgICByZXR1cm4gJzUnO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcmV0dXJuICc2JztcclxuICAgICAgY2FzZSA3OlxyXG4gICAgICAgIHJldHVybiAnNyc7XHJcbiAgICAgIGNhc2UgODpcclxuICAgICAgICByZXR1cm4gJzgnO1xyXG4gICAgICBjYXNlIDk6XHJcbiAgICAgICAgcmV0dXJuICc5JztcclxuICAgICAgY2FzZSAxMDpcclxuICAgICAgICByZXR1cm4gJ0EnO1xyXG4gICAgICBjYXNlIDExOlxyXG4gICAgICAgIHJldHVybiAnQic7XHJcbiAgICAgIGNhc2UgMTI6XHJcbiAgICAgICAgcmV0dXJuICdDJztcclxuICAgICAgY2FzZSAxMzpcclxuICAgICAgICByZXR1cm4gJ0QnO1xyXG4gICAgICBjYXNlIDE0OlxyXG4gICAgICAgIHJldHVybiAnRSc7XHJcbiAgICAgIGNhc2UgMTU6XHJcbiAgICAgICAgcmV0dXJuICdGJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN0YXRpYyBUb0hleFN0cmluZyhCeXRlVmFsKSB7XHJcbiAgICB2YXIgU3RyID0gJyc7XHJcbiAgICBTdHIgKz0gdGhpcy50b0hleCgoQnl0ZVZhbCA+PiA0KSAmIDB4MGYpO1xyXG4gICAgU3RyICs9IHRoaXMudG9IZXgoQnl0ZVZhbCAmIDB4MGYpO1xyXG4gICAgcmV0dXJuIFN0cjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0ZXh0VG9UYWJsZXQoeCwgeSwgaGVpZ2h0LCBzdHIsIGZudCkge1xyXG4gICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciBjbnR4ID0gYy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgY250eC5mb250ID0gZm50O1xyXG4gICAgdmFyIHR4dCA9IHN0cjtcclxuICAgIHZhciB4cyA9IE1hdGgucm91bmQoY250eC5tZWFzdXJlVGV4dCh0eHQpLndpZHRoKTtcclxuICAgIHZhciB5cyA9IGhlaWdodDtcclxuICAgIGMud2lkdGggPSB4cztcclxuICAgIGMuaGVpZ2h0ID0geXM7XHJcblxyXG4gICAgY250eC5mb250ID0gZm50O1xyXG4gICAgY250eC5maWxsU3R5bGUgPSAnI0ZGRkZGRic7XHJcbiAgICBjbnR4LnJlY3QoMCwgMCwgeHMsIHlzKTtcclxuICAgIGNudHguZmlsbCgpO1xyXG5cclxuICAgIGNudHguZmlsbFN0eWxlID0gJyMwMDAwMDAnO1xyXG4gICAgY250eC50ZXh0QmFzZWxpbmUgPSAndG9wJztcclxuICAgIGNudHguZmlsbFRleHQodHh0LCAwLCAwKTtcclxuXHJcbiAgICBjbnR4LmRyYXdJbWFnZShjbnR4LmNhbnZhcywgMCwgMCwgeHMsIHlzKTtcclxuXHJcbiAgICB2YXIgR3N0ciA9IHRoaXMuY3JlYXRlTGNkQml0bWFwRnJvbUNhbnZhcyhjLCAwLCAwLCB4cywgeXMpO1xyXG5cclxuICAgIHRoaXMuTGNkV3JpdGVJbWFnZVN0cmVhbSgwLCAyLCB4LCB5LCB4cywgeXMsIEdzdHIpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExjZFdyaXRlSW1hZ2UoRHN0LCBNb2RlLCBYcCwgWXAsIFVybCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkV3JpdGVJbWFnZS8nO1xyXG4gICAgdmFyIE5ld1VybCA9IFVybC5yZXBsYWNlKC9cXC8vZywgJ18nKTtcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIERzdCArICcsJyArIE1vZGUgKyAnLCcgKyBYcCArICcsJyArIFlwICsgJywnICsgTmV3VXJsO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTGNkV3JpdGVMb2NhbEltYWdlKERzdCwgTW9kZSwgWHAsIFlwLCBVcmwpIHtcclxuICAgIHZhciBQcm9wID0gJ0xjZFdyaXRlSW1hZ2UvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIERzdCArICcsJyArIE1vZGUgKyAnLCcgKyBYcCArICcsJyArIFlwICsgJywnICsgVXJsO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMY2RXcml0ZUltYWdlU3RyZWFtKERzdCwgTW9kZSwgWHAsIFlwLCBYcywgWXMsIFVybCkge1xyXG4gICAgdmFyIFByb3AxID1cclxuICAgICAgJ0xjZFdyaXRlSW1hZ2VTdHJlYW1QYXJhbXMvJyArXHJcbiAgICAgIERzdCArXHJcbiAgICAgICcsJyArXHJcbiAgICAgIE1vZGUgK1xyXG4gICAgICAnLCcgK1xyXG4gICAgICBYcCArXHJcbiAgICAgICcsJyArXHJcbiAgICAgIFlwICtcclxuICAgICAgJywnICtcclxuICAgICAgWHMgK1xyXG4gICAgICAnLCcgK1xyXG4gICAgICBZcztcclxuICAgIHZhciBQcm9wMiA9ICdMY2RXcml0ZUltYWdlU3RyZWFtLyc7XHJcblxyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcDEpO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRJbWFnZVN0cmVhbVByb3BlcnR5KFByb3AyLCBVcmwpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExjZFdyaXRlSW1hZ2VCbG9iKERzdCwgTW9kZSwgWHAsIFlwLCBYcywgWXMsIFVybCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkV3JpdGVJbWFnZVN0cmVhbS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgRHN0ICsgJywnICsgTW9kZSArICcsJyArIFhwICsgJywnICsgWXAgKyAnLCcgKyBYcyArICcsJyArIFlzO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRJbWFnZUJsb2JQcm9wZXJ0eShQcm9wLCBVcmwpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG1lYXN1cmVUZXh0KHBUZXh0LCBwRm9udFNpemUsIHBTdHlsZSkge1xyXG4gICAgdmFyIGxEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsRGl2Jyk7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsRGl2KTtcclxuXHJcbiAgICBpZiAocFN0eWxlICE9IG51bGwpIHtcclxuICAgICAgbERpdi5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgcFN0eWxlKTtcclxuICAgIH1cclxuICAgIGxEaXYuc3R5bGUuZm9udFNpemUgPSAnJyArIHBGb250U2l6ZSArICdweCc7XHJcbiAgICBsRGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgIGxEaXYuc3R5bGUubGVmdCA9ICctMTAwMCc7XHJcbiAgICBsRGl2LnN0eWxlLnRvcCA9ICctMTAwMCc7XHJcblxyXG4gICAgbERpdi5pbm5lckhUTUwgPSBwVGV4dDtcclxuXHJcbiAgICB2YXIgbFJlc3VsdCA9IHtcclxuICAgICAgd2lkdGg6IGxEaXYuY2xpZW50V2lkdGgsXHJcbiAgICAgIGhlaWdodDogbERpdi5jbGllbnRIZWlnaHQsXHJcbiAgICB9O1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobERpdik7XHJcbiAgICBsRGl2ID0gbnVsbDtcclxuXHJcbiAgICByZXR1cm4gbFJlc3VsdDtcclxuICB9XHJcbiAgc3RhdGljIEdldFZlcnNpb25TdHJpbmcoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdWZXJzaW9uJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHZhciBTdHIgPSB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gICAgdmFyIHRyaW1TdHIgPSBTdHIuc2xpY2UoMSwgU3RyLmxlbmd0aCAtIDIpO1xyXG4gICAgcmV0dXJuIHRyaW1TdHI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgSXNQZW5Eb3duKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuRXZTdGF0dXMgJiAweDAxO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvL1x0XHRcdFNpZ1BsdXNORVRTaWcuY3NcclxuICAvL1xyXG4gIHN0YXRpYyBDbGVhclRhYmxldCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0NsZWFyU2lnbmF0dXJlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIE51bWJlck9mVGFibGV0UG9pbnRzKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVG90YWxQb2ludHMnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2lnU3RyaW5nKHNpZ1N0ciwgY3R4KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTaWdTdHJpbmcnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdmFyIHhociA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuYmFzZVVyaSArIFByb3ApO1xyXG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcclxuICAgICAgeGhyLnNlbmQoc2lnU3RyKTtcclxuICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBpZiAoY3R4KSB7XHJcbiAgICAgICAgICB2YXIgY2FuID0gY3R4LmNhbnZhcztcclxuICAgICAgICAgIHRoaXMuU2V0SW1hZ2VYU2l6ZShjYW4ud2lkdGgpO1xyXG4gICAgICAgICAgdGhpcy5TZXRJbWFnZVlTaXplKGNhbi5oZWlnaHQpO1xyXG4gICAgICAgICAgdGhpcy5HZXRTaWdJbWFnZShjdHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRTaWdTdHJpbmcoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTaWdTdHJpbmcnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdmFyIFN0ciA9IHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcblxyXG4gICAgcmV0dXJuIFN0ci5zbGljZSgxLCBTdHIubGVuZ3RoIC0gMSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2lnQ29tcHJlc3Npb25Nb2RlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0NvbXByZXNzaW9uTW9kZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNpZ0NvbXByZXNzaW9uTW9kZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0NvbXByZXNzaW9uTW9kZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRFbmNyeXB0aW9uTW9kZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdFbmNyeXB0aW9uTW9kZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEVuY3J5cHRpb25Nb2RlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnRW5jcnlwdGlvbk1vZGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0S2V5U3RyaW5nKGtleVN0cmluZykge1xyXG4gICAgdmFyIFByb3AgPSAnS2V5U3RyaW5nJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0U3RyZWFtUHJvcGVydHkoUHJvcCwga2V5U3RyaW5nKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRLZXlTdHJpbmcoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdLZXlTdHJpbmcnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdmFyIFN0ciA9IHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcblxyXG4gICAgcmV0dXJuIFN0ci5zbGljZSgxLCBTdHIubGVuZ3RoIC0gMSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgQXV0b0tleVN0YXJ0KCkge1xyXG4gICAgdmFyIFByb3AgPSAnQXV0b0tleVN0YXJ0JztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEF1dG9LZXlGaW5pc2goKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBdXRvS2V5RmluaXNoJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEF1dG9LZXlEYXRhKGtleURhdGEpIHtcclxuICAgIHZhciBQcm9wID0gJ1NldEF1dG9LZXlEYXRhJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0U3RyZWFtUHJvcGVydHkoUHJvcCwga2V5RGF0YSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgQXV0b0tleUFkZERhdGEoa2V5RGF0YSkge1xyXG4gICAgdmFyIFByb3AgPSAnQXV0b0tleUFkZERhdGEnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRTdHJlYW1Qcm9wZXJ0eShQcm9wLCBrZXlEYXRhKTtcclxuICAgIHJldHVybiB0aGlzLkdldEtleVN0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy9cdFx0ZnVuY3Rpb24gIEdldEtleVJlY2VpcHQoICkge31cclxuXHJcbiAgc3RhdGljIEdldEtleVJlY2VpcHRBc2NpaSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0tleVJlY2VpcHRBc2NpaSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB2YXIgU3RyID0gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuXHJcbiAgICByZXR1cm4gU3RyLnNsaWNlKDEsIFN0ci5sZW5ndGggLSAxKTtcclxuICB9XHJcblxyXG4gIC8vXHRcdGZ1bmN0aW9uICBHZXRTaWdSZWNlaXB0KCApIHt9XHJcblxyXG4gIHN0YXRpYyBHZXRTaWdSZWNlaXB0QXNjaWkoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTaWdSZWNlaXB0QXNjaWknO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdmFyIFN0ciA9IHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcblxyXG4gICAgcmV0dXJuIFN0ci5zbGljZSgxLCBTdHIubGVuZ3RoIC0gMSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGltZVN0YW1wKHRpbWVTdGFtcCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGltZVN0YW1wJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0U3RyZWFtUHJvcGVydHkoUHJvcCwgdGltZVN0YW1wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUaW1lU3RhbXAoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUaW1lU3RhbXAnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdmFyIFN0ciA9IHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcblxyXG4gICAgcmV0dXJuIFN0ci5zbGljZSgxLCBTdHIubGVuZ3RoIC0gMSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0QW5ub3RhdGUoYW5ub3RhdGUpIHtcclxuICAgIHZhciBQcm9wID0gJ0Fubm90YXRlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0U3RyZWFtUHJvcGVydHkoUHJvcCwgYW5ub3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEFubm90YXRlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnQW5ub3RhdGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdmFyIFN0ciA9IHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcblxyXG4gICAgcmV0dXJuIFN0ci5zbGljZSgxLCBTdHIubGVuZ3RoIC0gMSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2F2ZVNpZ0luZm8odikge1xyXG4gICAgdmFyIFByb3AgPSAnU2F2ZVNpZ0luZm8vJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRTYXZlU2lnSW5mbygpIHtcclxuICAgIHZhciBQcm9wID0gJ1NhdmVTaWdJbmZvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFNhdmVQcmVzc3VyZURhdGEodikge1xyXG4gICAgdmFyIFByb3AgPSAnU2F2ZVByZXNzdXJlRGF0YS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNhdmVQcmVzc3VyZURhdGEoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTYXZlUHJlc3N1cmVEYXRhJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFNhdmVUaW1lRGF0YSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTYXZlVGltZURhdGEvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRTYXZlVGltZURhdGEoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTYXZlVGltZURhdGEnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0QW50aUFsaWFzU3BvdFNpemUodikge1xyXG4gICAgdmFyIFByb3AgPSAnQW50aUFsaWFzU3BvdFNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRBbnRpQWxpYXNTcG90U2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0FudGlBbGlhc1Nwb3RTaXplJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEFudGlBbGlhc0xpbmVTY2FsZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBbnRpQWxpYXNMaW5lU2NhbGUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRBbnRpQWxpYXNMaW5lU2NhbGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBbnRpQWxpYXNMaW5lU2NhbGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0TnVtYmVyT2ZTdHJva2VzKCkge1xyXG4gICAgdmFyIFByb3AgPSAnTnVtYmVyT2ZTdHJva2VzJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldE51bVBvaW50c0ZvclN0cm9rZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdOdW1iZXJPZlBvaW50c0luU3Ryb2tlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0UG9pbnRYVmFsdWUodjEsIHYyKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdQb2ludFhWYWx1ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjEgKyAnLycgKyB2MjtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFBvaW50WVZhbHVlKHYxLCB2Mikge1xyXG4gICAgdmFyIFByb3AgPSAnUG9pbnRZVmFsdWUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHYxICsgJy8nICsgdjI7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRBbnRpQWxpYXNFbmFibGUodikge1xyXG4gICAgdmFyIFByb3AgPSAnQW50aUFsaWFzRW5hYmxlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0QW50aUFsaWFzRW5hYmxlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnQW50aUFsaWFzRW5hYmxlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFVzZUFtYmllbnRDb2xvcnModikge1xyXG4gICAgdmFyIFByb3AgPSAnVXNlQW1iaWVudENvbG9ycy8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvL1x0XHRTaWdQbHVzTkVURGlzcGxheS5jc1xyXG4gIC8vXHJcbiAgc3RhdGljIFNldERpc3BsYXlYU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5WFNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXREaXNwbGF5WFNpemUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5WFNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0RGlzcGxheVlTaXplKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlZU2l6ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldERpc3BsYXlZU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlZU2l6ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXREaXNwbGF5UGVuV2lkdGgodikge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVBlbldpZHRoLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RGlzcGxheVBlbldpZHRoKCkge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVBlbldpZHRoJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldERpc3BsYXlUaW1lU3RhbXAodikge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVRpbWVTdGFtcC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldERpc3BsYXlUaW1lU3RhbXAoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5VGltZVN0YW1wJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldERpc3BsYXlUaW1lU3RhbXBQb3NYKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlUaW1lU3RhbXBQb3NYLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RGlzcGxheVRpbWVTdGFtcFBvc1goKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5VGltZVN0YW1wUG9zWCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXREaXNwbGF5VGltZVN0YW1wUG9zWSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5VGltZVN0YW1wUG9zWS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldERpc3BsYXlUaW1lU3RhbXBQb3NZKCkge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVRpbWVTdGFtcFBvc1knO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0RGlzcGxheVRpbWVTdGFtcFNpemUodikge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVRpbWVTdGFtcFNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXREaXNwbGF5VGltZVN0YW1wU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlUaW1lU3RhbXBTaXplJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldERpc3BsYXlBbm5vdGF0ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5QW5ub3RhdGUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXREaXNwbGF5QW5ub3RhdGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5QW5ub3RhdGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0RGlzcGxheUFubm90YXRlUG9zWCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5QW5ub3RhdGVQb3NYLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RGlzcGxheUFubm90YXRlUG9zWCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlBbm5vdGF0ZVBvc1gnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0RGlzcGxheUFubm90YXRlUG9zWSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5QW5ub3RhdGVQb3NZLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RGlzcGxheUFubm90YXRlUG9zWSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlBbm5vdGF0ZVBvc1knO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0RGlzcGxheUFubm90YXRlU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5QW5ub3RhdGVTaXplLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RGlzcGxheUFubm90YXRlU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlBbm5vdGF0ZVNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vXHRcdFNpZ1BsdXNORVRJbWFnZS5jc1xyXG4gIC8vXHJcbiAgLy9cdFx0ZnVuY3Rpb24gIEdldFNpZ0ltYWdlQjY0KCApXHJcbiAgLy9cdFx0XHR7XHJcbiAgLy9cdFx0XHR2YXIgeGhyMiA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gIC8vXHRcdFx0eGhyMi5vcGVuKFwiR0VUXCIsIGJhc2VVcmkgKyBcIlNpZ0ltYWdlLzFcIiwgZmFsc2UgKTtcclxuICAvL1x0XHRcdHhocjIucmVzcG9uc2VUeXBlID0gXCJibG9iXCJcclxuICAvL1x0XHRcdHhocjIuc2VuZChudWxsKTtcclxuICAvL1x0XHRcdGlmICh4aHIyLnJlYWR5U3RhdGUgPT0gNCAmJiB4aHIuc3RhdHVzID09IDIwMClcclxuICAvL1x0XHRcdFx0e1xyXG4gIC8vXHRcdFx0XHRyZXR1cm4gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoeGhyMi5yZXNwb25zZSk7XHJcbiAgLy9cdFx0XHRcdH1cclxuICAvL1x0XHRcdHJldHVybiBudWxsO1xyXG4gIC8vXHRcdFx0fVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VYU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZVhTaXplLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SW1hZ2VYU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlWFNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VZU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZVlTaXplLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SW1hZ2VZU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlWVNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VQZW5XaWR0aCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZVBlbldpZHRoLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SW1hZ2VQZW5XaWR0aCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlUGVuV2lkdGgnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VUaW1lU3RhbXAodikge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VUaW1lU3RhbXAvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRJbWFnZVRpbWVTdGFtcCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlVGltZVN0YW1wJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEltYWdlVGltZVN0YW1wUG9zWCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZVRpbWVTdGFtcFBvc1gvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRJbWFnZVRpbWVTdGFtcFBvc1goKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZVRpbWVTdGFtcFBvc1gnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VUaW1lU3RhbXBQb3NZKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlVGltZVN0YW1wUG9zWS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEltYWdlVGltZVN0YW1wUG9zWSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlVGltZVN0YW1wUG9zWSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRJbWFnZVRpbWVTdGFtcFNpemUodikge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VUaW1lU3RhbXBTaXplLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SW1hZ2VUaW1lU3RhbXBTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VUaW1lU3RhbXBTaXplJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEltYWdlQW5ub3RhdGUodikge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VBbm5vdGF0ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEltYWdlQW5ub3RhdGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZUFubm90YXRlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEltYWdlQW5ub3RhdGVQb3NYKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlQW5ub3RhdGVQb3NYLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SW1hZ2VBbm5vdGF0ZVBvc1goKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZUFubm90YXRlUG9zWCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRJbWFnZUFubm90YXRlUG9zWSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZUFubm90YXRlUG9zWS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEltYWdlQW5ub3RhdGVQb3NZKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VBbm5vdGF0ZVBvc1knO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VBbm5vdGF0ZVNpemUodikge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VBbm5vdGF0ZVNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRJbWFnZUFubm90YXRlU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlQW5ub3RhdGVTaXplJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEp1c3RpZnlYKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0p1c3RpZnlYLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SnVzdGlmeVgoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdKdXN0aWZ5WCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRKdXN0aWZ5WSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdKdXN0aWZ5WS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEp1c3RpZnlZKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSnVzdGlmeVknO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SnVzdGlmeU1vZGUodikge1xyXG4gICAgdmFyIFByb3AgPSAnSnVzdGlmeU1vZGUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRKdXN0aWZ5TW9kZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0p1c3RpZnlNb2RlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvL1x0XHRTaWdQbHVzTkVUS2V5UGFkLmNzXHJcbiAgLy9cclxuICBzdGF0aWMgS2V5UGFkQWRkSG90U3BvdChrZXksIGNvb3JkLCB4cCwgeXAsIHhzLCB5cykge1xyXG4gICAgdmFyIFByb3AgPSAnS2V5UGFkQWRkSG90U3BvdC8nO1xyXG4gICAgUHJvcCA9IFByb3AgKyBrZXkgKyAnLCcgKyBjb29yZCArICcsJyArIHhwICsgJywnICsgeXAgKyAnLCcgKyB4cyArICcsJyArIHlzO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgS2V5UGFkTWFya0hvdFNwb3Qoa2V5LCBjb29yZCwgeHAsIHlwLCB4cywgeXMpIHtcclxuICAgIHRoaXMuTENEV3JpdGVTdHJpbmcoMCwgMiwgeHAsIHlwLCAnMTZwdCBzYW5zLXNlcmlmJywgMzIsICcrJyk7XHJcbiAgICB0aGlzLkxDRFdyaXRlU3RyaW5nKDAsIDIsIHhwICsgeHMsIHlwLCAnMTZwdCBzYW5zLXNlcmlmJywgMzIsICcrJyk7XHJcbiAgICB0aGlzLkxDRFdyaXRlU3RyaW5nKDAsIDIsIHhwLCB5cCArIHlzLCAnMTZwdCBzYW5zLXNlcmlmJywgMzIsICcrJyk7XHJcbiAgICB0aGlzLkxDRFdyaXRlU3RyaW5nKDAsIDIsIHhwICsgeHMsIHlwICsgeXMsICcxNnB0IHNhbnMtc2VyaWYnLCAzMiwgJysnKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBLZXlQYWRRdWVyeUhvdFNwb3Qoa2V5KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdLZXlQYWRRdWVyeUhvdFNwb3QvJztcclxuICAgIFByb3AgPSBQcm9wICsga2V5O1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgS2V5UGFkQ2xlYXJIb3RTcG90TGlzdCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0tleVBhZENsZWFySG90U3BvdExpc3QnO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2lnV2luZG93KGNvb3JkcywgeHAsIHlwLCB4cywgeXMpIHtcclxuICAgIHZhciBQcm9wID0gJ1NpZ1dpbmRvdy8nO1xyXG4gICAgUHJvcCA9IFByb3AgKyBjb29yZHMgKyAnLCcgKyB4cCArICcsJyArIHlwICsgJywnICsgeHMgKyAnLCcgKyB5cztcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIENsZWFyU2lnV2luZG93KGluc2lkZSkge1xyXG4gICAgdmFyIFByb3AgPSAnQ2xlYXJTaWdXaW5kb3cvJztcclxuICAgIFByb3AgPSBQcm9wICsgaW5zaWRlO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vXHRcdFNpZ1BsdXNORVRMQ0QuY3NcclxuICAvL1xyXG4gIHN0YXRpYyBTZXRMQ0RDYXB0dXJlTW9kZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdDYXB0dXJlTW9kZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldExDRENhcHR1cmVNb2RlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnQ2FwdHVyZU1vZGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENEU2V0V2luZG93KHhQLCB5UCwgeFMsIHlTKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdMQ0RTZXRXaW5kb3cvJztcclxuICAgIFByb3AgPSBQcm9wICsgeFAgKyAnLCcgKyB5UCArICcsJyArIHhTICsgJywnICsgeVM7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0RXcml0ZVN0cmluZyhkZXN0LCBtb2RlLCB4LCB5LCBmbnQsIHNpemUsIHN0cikge1xyXG4gICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciBjbnR4ID0gYy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgY250eC5mb250ID0gZm50O1xyXG4gICAgdmFyIHR4dCA9IHN0cjtcclxuICAgIHZhciB4cyA9IE1hdGgucm91bmQoY250eC5tZWFzdXJlVGV4dCh0eHQpLndpZHRoKTtcclxuICAgIHZhciB5cyA9IHNpemU7XHJcbiAgICBjLndpZHRoID0geHM7XHJcbiAgICBjLmhlaWdodCA9IHlzO1xyXG5cclxuICAgIGlmICh4cyA9PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjbnR4LmZvbnQgPSBmbnQ7XHJcbiAgICBjbnR4LmZpbGxTdHlsZSA9ICcjRkZGRkZGJztcclxuICAgIGNudHgucmVjdCgwLCAwLCB4cywgeXMpO1xyXG4gICAgY250eC5maWxsKCk7XHJcblxyXG4gICAgY250eC5maWxsU3R5bGUgPSAnIzAwMDAwMCc7XHJcbiAgICBjbnR4LnRleHRCYXNlbGluZSA9ICd0b3AnO1xyXG4gICAgY250eC5maWxsVGV4dCh0eHQsIDAsIDApO1xyXG5cclxuICAgIGNudHguZHJhd0ltYWdlKGNudHguY2FudmFzLCAwLCAwLCB4cywgeXMpO1xyXG5cclxuICAgIHZhciBHc3RyID0gdGhpcy5jcmVhdGVMY2RCaXRtYXBGcm9tQ2FudmFzKGMsIHgsIHksIHhzLCB5cyk7XHJcblxyXG4gICAgdGhpcy5MY2RXcml0ZUltYWdlU3RyZWFtKGRlc3QsIG1vZGUsIHgsIHksIHhzLCB5cywgR3N0cik7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENERHJhd1JlY3RhbmdsZShkZXN0LCBtb2RlLCB4LCB5LCB4cywgeXMsIGZpbGwpIHtcclxuICAgIHZhciBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICB2YXIgY250eCA9IGMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICBjLndpZHRoID0geHM7XHJcbiAgICBjLmhlaWdodCA9IHlzO1xyXG5cclxuICAgIGNudHguZmlsbFN0eWxlID0gZmlsbDtcclxuICAgIGNudHgucmVjdCgwLCAwLCB4cywgeXMpO1xyXG4gICAgY250eC5maWxsKCk7XHJcblxyXG4gICAgY250eC5kcmF3SW1hZ2UoY250eC5jYW52YXMsIDAsIDAsIHhzLCB5cyk7XHJcbiAgICB2YXIgR3N0ciA9IHRoaXMuY3JlYXRlTGNkQml0bWFwRnJvbUNhbnZhcyhjLCB4LCB5LCB4cywgeXMpO1xyXG4gICAgdGhpcy5MY2RXcml0ZUltYWdlQmxvYihkZXN0LCBtb2RlLCB4LCB5LCB4cywgeXMsIEdzdHIpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExDRERyYXdCdXR0b24oZGVzdCwgbW9kZSwgeCwgeSwgeHMsIHlzLCBzdHJ5cywgZmlsbCwgZm50LCBzdHIpIHtcclxuICAgIHZhciBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICB2YXIgY250eCA9IGMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGNudHguZm9udCA9IGZudDtcclxuICAgIHZhciB0eHQgPSBzdHI7XHJcbiAgICB2YXIgc3hzID0gTWF0aC5yb3VuZChjbnR4Lm1lYXN1cmVUZXh0KHR4dCkud2lkdGgpO1xyXG4gICAgdmFyIHN5cyA9IHN0cnlzO1xyXG4gICAgYy53aWR0aCA9IHhzO1xyXG4gICAgYy5oZWlnaHQgPSB5cztcclxuXHJcbiAgICBjbnR4LmZvbnQgPSBmbnQ7XHJcbiAgICBjbnR4LmZpbGxTdHlsZSA9IGZpbGw7XHJcbiAgICBjbnR4LnJlY3QoMCwgMCwgeHMsIHlzKTtcclxuICAgIGNudHguZmlsbCgpO1xyXG5cclxuICAgIGNudHguZmlsbFN0eWxlID0gJyNGRkZGRkYnO1xyXG4gICAgY250eC50ZXh0QmFzZWxpbmUgPSAndG9wJztcclxuICAgIGNudHguZmlsbFRleHQodHh0LCAoeHMgLSBzeHMpIC8gMiwgKHlzIC0gc3lzKSAvIDIpO1xyXG5cclxuICAgIGNudHguZHJhd0ltYWdlKGNudHguY2FudmFzLCAwLCAwLCB4cywgeXMpO1xyXG5cclxuICAgIHZhciBHc3RyID0gdGhpcy5jcmVhdGVMY2RCaXRtYXBGcm9tQ2FudmFzKGMsIHgsIHksIHhzLCB5cyk7XHJcblxyXG4gICAgdGhpcy5MY2RXcml0ZUltYWdlQmxvYihkZXN0LCBtb2RlLCB4LCB5LCB4cywgeXMsIEdzdHIpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExDRFdyaXRlU3RyaW5nV2luZG93KGRlc3QsIG1vZGUsIHgsIHksIGZudCwgeHNpemUsIHlzaXplLCBzdHIpIHtcclxuICAgIHZhciBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICB2YXIgY250eCA9IGMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGNudHguZm9udCA9IGZudDtcclxuICAgIHZhciB0eHQgPSBzdHI7XHJcbiAgICB2YXIgeHMgPSB4c2l6ZTtcclxuICAgIHZhciB5cyA9IHlzaXplO1xyXG4gICAgYy53aWR0aCA9IHhzO1xyXG4gICAgYy5oZWlnaHQgPSB5cztcclxuXHJcbiAgICBjbnR4LmZvbnQgPSBmbnQ7XHJcbiAgICBjbnR4LmZpbGxTdHlsZSA9ICcjRkZGRkZGJztcclxuICAgIGNudHgucmVjdCgwLCAwLCB4cywgeXMpO1xyXG4gICAgY250eC5maWxsKCk7XHJcblxyXG4gICAgY250eC5maWxsU3R5bGUgPSAnIzAwMDAwMCc7XHJcbiAgICBjbnR4LnRleHRCYXNlbGluZSA9ICd0b3AnO1xyXG4gICAgY250eC5maWxsVGV4dCh0eHQsIDAsIDApO1xyXG5cclxuICAgIGNudHguZHJhd0ltYWdlKGNudHguY2FudmFzLCAwLCAwLCB4cywgeXMpO1xyXG5cclxuICAgIHZhciBHc3RyID0gdGhpcy5jcmVhdGVMY2RCaXRtYXBGcm9tQ2FudmFzKGMsIHgsIHksIHhzLCB5cyk7XHJcblxyXG4gICAgdGhpcy5MY2RXcml0ZUltYWdlQmxvYihkZXN0LCBtb2RlLCB4LCB5LCB4cywgeXMsIEdzdHIpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExDRFN0cmluZ1dpZHRoKGZudCwgc3RyKSB7XHJcbiAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgdmFyIGNudHggPSBjLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjbnR4LmZvbnQgPSBmbnQ7XHJcbiAgICB2YXIgdHh0ID0gc3RyO1xyXG4gICAgdmFyIHhzID0gTWF0aC5yb3VuZChjbnR4Lm1lYXN1cmVUZXh0KHR4dCkud2lkdGgpO1xyXG5cclxuICAgIHJldHVybiB4cztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0RTdHJpbmdIZWlnaHQoZm50LCBzdHIpIHtcclxuICAgIHJldHVybiAxNjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMY2RSZWZyZXNoKE1vZGUsIFhwLCBZcCwgWHMsIFlzKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdMY2RSZWZyZXNoLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyBNb2RlICsgJywnICsgWHAgKyAnLCcgKyBZcCArICcsJyArIFhzICsgJywnICsgWXM7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0RTZW5kQ21kU3RyaW5nKENtZFN0ciwgUmV0dXJuQ291bnQsIFJlc3VsdCwgVGltZU91dCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkU2VuZENtZFN0cmluZy8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgUmV0dXJuQ291bnQgKyAnLCcgKyBUaW1lT3V0O1xyXG4gICAgUmVzdWx0ID0gdGhpcy5TaWdXZWJTZXRTdHJlYW1Qcm9wZXJ0eShQcm9wLCBDbWRTdHIpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExDRFNlbmRDbWREYXRhKENtZFN0ciwgUmV0dXJuQ291bnQsIFJlc3VsdCwgVGltZU91dCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkU2VuZENtZERhdGEvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIFJldHVybkNvdW50ICsgJywnICsgVGltZU91dDtcclxuICAgIFJlc3VsdCA9IHRoaXMuU2lnV2ViU2V0U3RyZWFtUHJvcGVydHkoUHJvcCwgQ21kU3RyKTtcclxuICB9XHJcblxyXG4gIC8vXHRcdGZ1bmN0aW9uICBMQ0RTZW5kV2luZG93ZWRHcmFwaGljQ2FudmFzKCAgZGVzdCwgbW9kZSwgIHgsICB5LCBjYW52YXMgKVxyXG4gIC8vXHRcdFx0IHtcclxuICAvL1x0XHRcdCB9XHJcblxyXG4gIC8vXHRcdGZ1bmN0aW9uICBMQ0RTZW5kV2luZG93ZWRHcmFwaGljQ2FudmFzKCAgZGVzdCwgbW9kZSwgIHgsICB5LCAgeHMsICB5cywgY2FudmFzIClcclxuICAvL1x0XHRcdHtcclxuICAvL1x0XHRcdHZhciBHc3RyID0gdGhpcy5jcmVhdGVMY2RCaXRtYXBGcm9tQ2FudmFzKCBjYW52YXMsIDAsIDAsIHhzLCB5cylcclxuICAvL1x0XHRcdExjZFdyaXRlSW1hZ2VTdHJlYW0oIGRlc3QsIG1vZGUsIHgsIHksIHhzLCB5cywgR3N0ciApO1xyXG4gIC8vXHRcdFx0fVxyXG5cclxuICBzdGF0aWMgTENEU2VuZFdpbmRvd2VkR3JhcGhpY0NhbnZhcyhkZXN0LCBtb2RlLCB4LCB5LCB4cywgeXMsIGMsIHhwcywgeXBzKSB7XHJcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICB2YXIgR3N0ciA9IHRoaXMuY3JlYXRlTGNkQml0bWFwRnJvbUNhbnZhcyhjYW52YXMsIHhwcywgeXBzLCB4cywgeXMpO1xyXG4gICAgdGhpcy5MY2RXcml0ZUltYWdlU3RyZWFtKGRlc3QsIG1vZGUsIHgsIHksIHhzLCB5cywgR3N0cik7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENEU2VuZEdyYXBoaWNVcmwoZGVzdCwgbW9kZSwgeCwgeSwgdXJsKSB7XHJcbiAgICB0aGlzLkxjZFdyaXRlSW1hZ2UoZGVzdCwgbW9kZSwgeCwgeSwgdXJsKTtcclxuICB9XHJcblxyXG4gIC8vXHRcdGZ1bmN0aW9uICBMQ0RTZW5kR3JhcGhpYyggIERlc3QsICBNb2RlLCAgWFBvcywgIFlQb3MsICBJbWFnZUZpbGVOYW1lICkge31cclxuICAvL1x0XHRmdW5jdGlvbiAgTENEU2VuZEdyYXBoaWNVUkwoICBEZXN0LCAgTW9kZSwgIFhQb3MsICBZUG9zLCAgVVJMICkge31cclxuXHJcbiAgc3RhdGljIExDRENsZWFyKCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkQ2xlYXInO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENEU2V0VGFibGV0TWFwKFxyXG4gICAgTENEVHlwZSxcclxuICAgIExDRFhTaXplLFxyXG4gICAgTENEWVNpemUsXHJcbiAgICBMQ0RYU3RhcnQsXHJcbiAgICBMQ0RZU3RhcnQsXHJcbiAgICBMQ0RYU3RvcCxcclxuICAgIExDRFlTdG9wXHJcbiAgKSB7fVxyXG5cclxuICBzdGF0aWMgTENEU2V0UGl4ZWxEZXB0aCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdMY2RTZXRQaXhlbERlcHRoLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENER2V0TENEU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0xjZEdldExjZFNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG4gIHN0YXRpYyBMQ0RHZXRDb21wcmVzc2lvbk1vZGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdMY2RDb21wcmVzc2lvbk1vZGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENER2V0WkNvbXByZXNzaW9uTW9kZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0xjZFpDb21wcmVzc2lvbk1vZGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vXHRcdFNpZ1BsdXNORVRMQ0QuY3NcclxuICAvL1xyXG5cclxuICBzdGF0aWMgU2V0UmVhbFRhYmxldFN0YXRlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFN0YXRlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0U3RhdGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRTdGF0ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRMb2dpY2FsWFNpemUodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0TG9naWNhbFhTaXplLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0TG9naWNhbFhTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0TG9naWNhbFhTaXplJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldExvZ2ljYWxZU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldExvZ2ljYWxZU2l6ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRMb2dpY2FsWVNpemUodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0TG9naWNhbFlTaXplLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0WFN0YXJ0KHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFhTdGFydC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldFhTdGFydCgpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFhTdGFydCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRZU3RhcnQodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0WVN0YXJ0Lyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0WVN0YXJ0KCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0WVN0YXJ0JztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldFhTdG9wKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFhTdG9wLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0WFN0b3AoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRYU3RvcCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRZU3RvcCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRZU3RvcC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldFlTdG9wKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0WVN0b3AnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0RmlsdGVyUG9pbnRzKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldEZpbHRlclBvaW50cy8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldEZpbHRlclBvaW50cygpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldEZpbHRlclBvaW50cyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRUaW1pbmdBZHZhbmNlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFRpbWluZ0FkdmFuY2UvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUYWJsZXRUaW1pbmdBZHZhbmNlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0VGltaW5nQWR2YW5jZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRDb21Qb3J0KHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldENvbVBvcnQvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUYWJsZXRDb21Qb3J0KCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0Q29tUG9ydCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRCYXVkUmF0ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRCYXVkUmF0ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldEJhdWRSYXRlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0QmF1ZFJhdGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0Um90YXRpb24odikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0Um90YXRpb24vJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUYWJsZXRSb3RhdGlvbigpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFJvdGF0aW9uJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldFR5cGUodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0VHlwZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldFR5cGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRUeXBlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFNlcnZlclRhYmxldFR5cGUodikge1xyXG4gICAgdmFyIFByb3AgPSAnU2VydmVyVGFibGV0VHlwZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNlcnZlclRhYmxldFR5cGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTZXJ2ZXJUYWJsZXRUeXBlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldENvbVRlc3Qodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0Q29tVGVzdC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldENvbVRlc3QoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRDb21UZXN0JztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldFJlc29sdXRpb24odikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0UmVzb2x1dGlvbi8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldFJlc29sdXRpb24oKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRSZXNvbHV0aW9uJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFRhYmxldENvbm5lY3RRdWVyeSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldENvbm5lY3RRdWVyeSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBUYWJsZXRNb2RlbE51bWJlcigpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldE1vZGVsTnVtYmVyJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFRhYmxldFNlcmlhbE51bWJlcigpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFNlcmlhbE51bWJlcic7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRQb3J0UGF0aCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRQb3J0UGF0aC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldExvY2FsSW5pRmlsZVBhdGgodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0TG9jYWxJbmlGaWxlUGF0aC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldE1vZGVsKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldE1vZGVsLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2VyaWFsUG9ydENsb3NlRGVsYXkodikge1xyXG4gICAgdmFyIFByb3AgPSAnU2VyaWFsUG9ydENsb3NlRGVsYXkvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRTZXJpYWxQb3J0Q2xvc2VEZWxheSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1NlcmlhbFBvcnRDbG9zZURlbGF5JztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEVuYWJsZVRhYmxldEVuY3J5cHRpb24oKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdFbmFibGVUYWJsZXRFbmNyeXB0aW9uJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldEVuY3J5cHRpb25Nb2RlKGhtb2RlLCB0bW9kZSkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0RW5jcnlwdGlvbk1vZGUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIGhtb2RlICsgJywnICsgdG1vZGU7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRNYXhMb2dGaWxlU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdNYXhMb2dGaWxlU2l6ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNpZ1NvY2tTZXJ2ZXJQYXRoKCkge1xyXG4gICAgdmFyIFByb3AgPSAnU2lnU29ja1NlcnZlclBhdGgnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0U2lnU29ja0NsaWVudE5hbWUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTaWdTb2NrQ2xpZW50TmFtZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRTaWdTb2NrUG9ydE51bWJlcigpIHtcclxuICAgIHZhciBQcm9wID0gJ1NpZ1NvY2tQb3J0TnVtYmVyJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFNpZ1NvY2tTZXJ2ZXJQYXRoKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1NpZ1NvY2tTZXJ2ZXJQYXRoLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2lnU29ja0NsaWVudE5hbWUodikge1xyXG4gICAgdmFyIFByb3AgPSAnU2lnU29ja0NsaWVudE5hbWUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRQb3J0TnVtYmVyKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1BvcnROdW1iZXIvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRTaWdTb2NrUG9ydE51bWJlcih2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTaWdTb2NrUG9ydE51bWJlci8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEZpcm13YXJlUmV2aXNpb24oKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdGaXJtd2FyZVJldmlzaW9uJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldERhdGEoc2lnU3RyKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXREYXRhJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0U3RyZWFtUHJvcGVydHkoUHJvcCwgc2lnU3RyKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUYWJsZXREYXRhKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0RGF0YSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB2YXIgU3RyID0gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuXHJcbiAgICByZXR1cm4gU3RyLnNsaWNlKDEsIFN0ci5sZW5ndGggLSAxKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBPcGVuVGFibGV0KHYpIHtcclxuICAgIHZhciBQcm9wID0gJ09wZW5UYWJsZXQvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBDbG9zZVRhYmxldCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Nsb3NlVGFibGV0JztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgUmVzZXRQYXJhbWV0ZXJzKCkge1xyXG4gICAgdmFyIFByb3AgPSAnUmVzZXRQYXJhbWV0ZXJzJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHRlc3RSYXdEYXRhKCkge1xyXG4gICAgdGhpcy5PcGVuVGFibGV0KDEpO1xyXG4gICAgdmFyIFN0cjEgPSB0aGlzLkdldFRhYmxldERhdGEoKTtcclxuICAgIHRoaXMuQ2xvc2VUYWJsZXQoKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRTdGF0ZSh2LCBjdHgsIHR2KSB7XHJcbiAgICB2YXIgZGVsYXk7XHJcblxyXG4gICAgaWYgKHR2KSB7XHJcbiAgICAgIGRlbGF5ID0gdHY7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZWxheSA9IDEwMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5HZXRUYWJsZXRTdGF0ZSgpICE9IHYpIHtcclxuICAgICAgaWYgKHYgPT0gMSkge1xyXG4gICAgICAgIGlmIChjdHgpIHtcclxuICAgICAgICAgIHZhciBjYW4gPSBjdHguY2FudmFzO1xyXG4gICAgICAgICAgdGhpcy5TZXREaXNwbGF5WFNpemUoY2FuLndpZHRoKTtcclxuICAgICAgICAgIHRoaXMuU2V0RGlzcGxheVlTaXplKGNhbi5oZWlnaHQpO1xyXG4gICAgICAgICAgdGhpcy5TaWdXZWJTZXREaXNwbGF5VGFyZ2V0KGN0eCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuU2V0UmVhbFRhYmxldFN0YXRlKHYpO1xyXG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5HZXRUYWJsZXRTdGF0ZSgpO1xyXG4gICAgICAgIHZhciBkYXRhUmVzdWx0ID0gZGF0YSA9PSAnJyB8fCBkYXRhID09IG51bGwgPyAwIDogTnVtYmVyKGRhdGEpO1xyXG4gICAgICAgIHZhciB0bXIgPSBudWxsO1xyXG4gICAgICAgIGlmIChjdHggJiYgZGF0YVJlc3VsdCAhPSAwKSB7XHJcbiAgICAgICAgICB0bXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLlNpZ1dlYlJlZnJlc2goKSwgZGVsYXkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0bXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRtcjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoY3R4KSB7XHJcbiAgICAgICAgICBjbGVhckludGVydmFsKGN0eCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuU2lnV2ViU2V0RGlzcGxheVRhcmdldChudWxsKTtcclxuICAgICAgICB0aGlzLlNldFJlYWxUYWJsZXRTdGF0ZSh2KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59XHJcbiJdfQ==