tnp-core 18.0.39 → 18.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +20 -20
  2. package/assets/shared/shared_folder_info.txt +1 -1
  3. package/browser/README.md +24 -24
  4. package/browser/esm2022/lib/core-imports.mjs +4 -1
  5. package/browser/esm2022/lib/helpers-isomorphic.mjs +26 -30
  6. package/browser/esm2022/lib/helpers-messages.mjs +45 -16
  7. package/browser/esm2022/lib/helpers.mjs +22 -28
  8. package/browser/esm2022/lib/index.mjs +2 -2
  9. package/browser/esm2022/lib/required-global-npm-packages.mjs +79 -0
  10. package/browser/esm2022/lib/utils.mjs +308 -2
  11. package/browser/fesm2022/tnp-core.mjs +1884 -1551
  12. package/browser/fesm2022/tnp-core.mjs.map +1 -1
  13. package/browser/lib/helpers-isomorphic.d.ts +20 -0
  14. package/browser/lib/helpers-messages.d.ts +11 -0
  15. package/browser/lib/helpers.d.ts +16 -2
  16. package/browser/lib/index.d.ts +1 -1
  17. package/{websql/lib/required.d.ts → browser/lib/required-global-npm-packages.d.ts} +4 -0
  18. package/browser/lib/utils.d.ts +61 -8
  19. package/cli.backend.js +2 -2
  20. package/client/README.md +24 -24
  21. package/client/esm2022/lib/core-imports.mjs +4 -1
  22. package/client/esm2022/lib/helpers-isomorphic.mjs +26 -30
  23. package/client/esm2022/lib/helpers-messages.mjs +45 -16
  24. package/client/esm2022/lib/helpers.mjs +22 -28
  25. package/client/esm2022/lib/index.mjs +2 -2
  26. package/client/esm2022/lib/required-global-npm-packages.mjs +79 -0
  27. package/client/esm2022/lib/utils.mjs +308 -2
  28. package/client/fesm2022/tnp-core.mjs +1884 -1551
  29. package/client/fesm2022/tnp-core.mjs.map +1 -1
  30. package/client/lib/helpers-isomorphic.d.ts +20 -0
  31. package/client/lib/helpers-messages.d.ts +11 -0
  32. package/client/lib/helpers.d.ts +16 -2
  33. package/client/lib/index.d.ts +1 -1
  34. package/{browser/lib/required.d.ts → client/lib/required-global-npm-packages.d.ts} +4 -0
  35. package/client/lib/utils.d.ts +61 -8
  36. package/lib/core-cli.js +3 -3
  37. package/lib/core-cli.js.map +1 -1
  38. package/lib/core-imports.d.ts +5 -1
  39. package/lib/core-imports.js.map +1 -1
  40. package/lib/helpers-isomorphic.d.ts +20 -0
  41. package/lib/helpers-isomorphic.js +25 -35
  42. package/lib/helpers-isomorphic.js.map +1 -1
  43. package/lib/helpers-messages.d.ts +11 -0
  44. package/lib/helpers-messages.js +58 -16
  45. package/lib/helpers-messages.js.map +1 -1
  46. package/lib/helpers.d.ts +14 -0
  47. package/lib/helpers.js +33 -28
  48. package/lib/helpers.js.map +1 -1
  49. package/lib/index.d.ts +1 -1
  50. package/lib/index.js +1 -1
  51. package/lib/index.js.map +1 -1
  52. package/lib/node-chalk-mock.js +2 -2
  53. package/lib/node-path-mock.js +2 -2
  54. package/lib/{required.d.ts → required-global-npm-packages.d.ts} +6 -2
  55. package/lib/{required.js → required-global-npm-packages.js} +8 -1
  56. package/lib/required-global-npm-packages.js.map +1 -0
  57. package/lib/utils.d.ts +61 -8
  58. package/lib/utils.js +368 -3
  59. package/lib/utils.js.map +1 -1
  60. package/migrations/index.d.ts +1 -0
  61. package/migrations/index.js +6 -0
  62. package/migrations/index.js.map +1 -0
  63. package/migrations/migrations_index._auto-generated_.d.ts +0 -0
  64. package/migrations/migrations_index._auto-generated_.js +4 -0
  65. package/migrations/migrations_index._auto-generated_.js.map +1 -0
  66. package/package.json +3 -3
  67. package/taon.jsonc +65 -65
  68. package/tmp-environment.json +39 -31
  69. package/websql/README.md +24 -24
  70. package/websql/esm2022/lib/core-imports.mjs +4 -1
  71. package/websql/esm2022/lib/helpers-isomorphic.mjs +26 -29
  72. package/websql/esm2022/lib/helpers-messages.mjs +45 -16
  73. package/websql/esm2022/lib/helpers.mjs +22 -28
  74. package/websql/esm2022/lib/index.mjs +2 -2
  75. package/websql/esm2022/lib/required-global-npm-packages.mjs +79 -0
  76. package/websql/esm2022/lib/utils.mjs +307 -2
  77. package/websql/fesm2022/tnp-core.mjs +1885 -1552
  78. package/websql/fesm2022/tnp-core.mjs.map +1 -1
  79. package/websql/lib/helpers-isomorphic.d.ts +20 -0
  80. package/websql/lib/helpers-messages.d.ts +11 -0
  81. package/websql/lib/helpers.d.ts +16 -2
  82. package/websql/lib/index.d.ts +1 -1
  83. package/{client/lib/required.d.ts → websql/lib/required-global-npm-packages.d.ts} +4 -0
  84. package/websql/lib/utils.d.ts +61 -8
  85. package/browser/esm2022/lib/required.mjs +0 -72
  86. package/client/esm2022/lib/required.mjs +0 -72
  87. package/lib/required.js.map +0 -1
  88. package/websql/esm2022/lib/required.mjs +0 -72
@@ -1,6 +1,8 @@
1
1
  import { CoreModels } from './core-models';
2
2
  import axios from 'axios';
3
- import { path } from './core-imports';
3
+ import { path, _, } from './core-imports'; /* */
4
+ import { dateformat } from './core-imports';
5
+ /* */
4
6
  /* */
5
7
  /* */
6
8
  /* */
@@ -39,6 +41,43 @@ export var Utils;
39
41
  /* */
40
42
  return (void 0);
41
43
  };
44
+ const takenPorts = [];
45
+ Utils.getFreePort = async (options) => {
46
+ /* */
47
+ /* */
48
+ /* */
49
+ /* */
50
+ /* */
51
+ /* */
52
+ /* */
53
+ /* */
54
+ /* */
55
+ /* */
56
+ /* */
57
+ /* */
58
+ /* */
59
+ /* */
60
+ /* */
61
+ /* */
62
+ /* */
63
+ /* */
64
+ /* */
65
+ /* */
66
+ /* */
67
+ /* */
68
+ /* */
69
+ /* */
70
+ /* */
71
+ /* */
72
+ /* */
73
+ /* */
74
+ /* */
75
+ /* */
76
+ /* */
77
+ /* */
78
+ /* */
79
+ return (void 0);
80
+ };
42
81
  let json;
43
82
  (function (json) {
44
83
  json.getAtrributies = (jsonDeepPath, // lodash path to property in json ex. deep.path.to.prop
@@ -394,6 +433,7 @@ export var UtilsProcess;
394
433
  (function (UtilsProcess) {
395
434
  /**
396
435
  * TODO IMPLEMENT
436
+ * start async node process
397
437
  */
398
438
  async function startAsync(command, options) {
399
439
  }
@@ -404,7 +444,137 @@ export var UtilsProcess;
404
444
  function startSync(command, options) {
405
445
  }
406
446
  UtilsProcess.startSync = startSync;
447
+ UtilsProcess.getGitBashPath = () => {
448
+ /* */
449
+ /* */
450
+ /* */
451
+ /* */
452
+ /* */
453
+ /* */
454
+ /* */
455
+ /* */
456
+ /* */
457
+ /* */
458
+ /* */
459
+ /* */
460
+ /* */
461
+ /* */
462
+ /* */
463
+ /* */
464
+ /* */
465
+ /* */
466
+ return (void 0);
467
+ };
468
+ /**
469
+ * TODO IMPLEMENT
470
+ * start async node process
471
+ */
472
+ UtilsProcess.startInNewTerminalWindow = (command, options) => {
473
+ /* */
474
+ /* */
475
+ /* */
476
+ /* */
477
+ /* */
478
+ /* */
479
+ /* */
480
+ /* */
481
+ /* */
482
+ /* */
483
+ /* */
484
+ /* */
485
+ /* */
486
+ /* */
487
+ /* */
488
+ /* */
489
+ /* */
490
+ /* */
491
+ /* */
492
+ /* */
493
+ /* */
494
+ /* */
495
+ /* */
496
+ /* */
497
+ /* */
498
+ /* */
499
+ /* */
500
+ /* */
501
+ /* */
502
+ /* */
503
+ /* */
504
+ /* */
505
+ /* */
506
+ /* */
507
+ /* */
508
+ /* */
509
+ /* */
510
+ /* */
511
+ /* */
512
+ /* */
513
+ /* */
514
+ /* */
515
+ /* */
516
+ /* */
517
+ /* */
518
+ /* */
519
+ /* */
520
+ /* */
521
+ /* */
522
+ /* */
523
+ /* */
524
+ /* */
525
+ /* */
526
+ /* */
527
+ /* */
528
+ /* */
529
+ /* */
530
+ /* */
531
+ /* */
532
+ /* */
533
+ /* */
534
+ /* */
535
+ /* */
536
+ /* */
537
+ /* */
538
+ /* */
539
+ /* */
540
+ /* */
541
+ /* */
542
+ /* */
543
+ /* */
544
+ /* */
545
+ /* */
546
+ /* */
547
+ /* */
548
+ /* */
549
+ /* */
550
+ /* */
551
+ /* */
552
+ /* */
553
+ /* */
554
+ /* */
555
+ /* */
556
+ /* */
557
+ /* */
558
+ /* */
559
+ /* */
560
+ /* */
561
+ /* */
562
+ /* */
563
+ /* */
564
+ /* */
565
+ /* */
566
+ /* */
567
+ /* */
568
+ /* */
569
+ /* */
570
+ /* */
571
+ /* */
572
+ /* */
573
+ /* */
574
+ return (void 0);
575
+ };
407
576
  UtilsProcess.getBashOrShellName = () => {
577
+ return 'browser';
408
578
  /* */
409
579
  /* */
410
580
  /* */
@@ -440,6 +610,110 @@ export var UtilsProcess;
440
610
  return (void 0);
441
611
  };
442
612
  })(UtilsProcess || (UtilsProcess = {}));
613
+ export var UtilsOs;
614
+ (function (UtilsOs) {
615
+ /**
616
+ * check if script is running in client browser
617
+ * (websql model -> is also considered as browser
618
+ * because it is running in browser)
619
+ */
620
+ UtilsOs.isRunningInBrowser = () => {
621
+ /* */
622
+ /* */
623
+ return true;
624
+ };
625
+ /**
626
+ * check if script is running in nodejs
627
+ * (backend script or electron script)
628
+ */
629
+ UtilsOs.isRunningInNode = () => {
630
+ /* */
631
+ /* */
632
+ return false;
633
+ };
634
+ /**
635
+ * check if script is running special
636
+ * browser mode that has sql.js backend
637
+ * and executes sql queries in browser
638
+ */
639
+ UtilsOs.isRunningInWebSQL = () => {
640
+ /* */
641
+ /* */
642
+ /* */
643
+ /* */
644
+ return false;
645
+ };
646
+ /**
647
+ * check whether the current process is running inside
648
+ * Electron backend or browser.
649
+ */
650
+ UtilsOs.isRunningInElectron = () => {
651
+ // @ts-ignore
652
+ if (typeof window !== 'undefined' &&
653
+ typeof window.process === 'object' &&
654
+ window.process.type === 'renderer') {
655
+ return true;
656
+ }
657
+ // @ts-ignore
658
+ if (typeof process !== 'undefined' &&
659
+ typeof process.versions === 'object' &&
660
+ !!process.versions.electron) {
661
+ return true;
662
+ }
663
+ if (typeof navigator === 'object' &&
664
+ typeof navigator.userAgent === 'string' &&
665
+ navigator.userAgent.indexOf('Electron') >= 0) {
666
+ return true;
667
+ }
668
+ return false;
669
+ };
670
+ /**
671
+ * Check wether the current process is running inside
672
+ * windows subsystem for linux (WSL).
673
+ */
674
+ UtilsOs.isRunningInWsl = () => {
675
+ return false;
676
+ /* */
677
+ /* */
678
+ /* */
679
+ /* */
680
+ /* */
681
+ /* */
682
+ /* */
683
+ /* */
684
+ /* */
685
+ /* */
686
+ /* */
687
+ /* */
688
+ /* */
689
+ /* */
690
+ /* */
691
+ /* */
692
+ /* */
693
+ return (void 0);
694
+ };
695
+ UtilsOs.isRunningInDocker = () => {
696
+ return false;
697
+ /* */
698
+ /* */
699
+ /* */
700
+ /* */
701
+ /* */
702
+ /* */
703
+ /* */
704
+ return (void 0);
705
+ };
706
+ UtilsOs.isRunningInLinuxGraphicsCapableEnvironment = () => {
707
+ /* */
708
+ /* */
709
+ /* */
710
+ /* */
711
+ /* */
712
+ /* */
713
+ /* */
714
+ return (void 0);
715
+ };
716
+ })(UtilsOs || (UtilsOs = {}));
443
717
  export var UtilsString;
444
718
  (function (UtilsString) {
445
719
  UtilsString.kebabCaseNoSplitNumbers = (input) => {
@@ -449,6 +723,38 @@ export var UtilsString;
449
723
  .toLowerCase());
450
724
  };
451
725
  })(UtilsString || (UtilsString = {}));
726
+ /**
727
+ * Taon migration utilities
728
+ */
729
+ export var UtilsMigrations;
730
+ (function (UtilsMigrations) {
731
+ UtilsMigrations.getTimestampFromClassName = (className) => {
732
+ const [maybeTimestamp1, maybeTimestamp2] = className.split('_') || [];
733
+ const timestamp1 = parseInt(maybeTimestamp1);
734
+ const timestamp2 = parseInt(maybeTimestamp2);
735
+ const timestamp = !_.isNaN(timestamp1) ? timestamp1 : timestamp2;
736
+ return UtilsMigrations.isValidTimestamp(timestamp) ? timestamp : void 0;
737
+ };
738
+ UtilsMigrations.getFormattedTimestampFromClassName = (className) => {
739
+ const timestamp = UtilsMigrations.getTimestampFromClassName(className);
740
+ if (!timestamp) {
741
+ return void 0;
742
+ }
743
+ return UtilsMigrations.formatTimestamp(timestamp);
744
+ };
745
+ UtilsMigrations.formatTimestamp = (timestamp) => {
746
+ const dateFromTimestamp = new Date(timestamp);
747
+ return `${dateformat(dateFromTimestamp, 'dd-mm-yyyy HH:MM:ss')}`;
748
+ };
749
+ UtilsMigrations.isValidTimestamp = (value) => {
750
+ if (typeof value !== 'number') {
751
+ return false; // Must be a number
752
+ }
753
+ const minTimestamp = 0; // Minimum possible timestamp (Unix epoch)
754
+ const maxTimestamp = 8640000000000000; // Max safe timestamp in JS (represents year ~275760)
755
+ return value >= minTimestamp && value <= maxTimestamp;
756
+ };
757
+ })(UtilsMigrations || (UtilsMigrations = {}));
452
758
  ;
453
759
  ({}); // @--end-of-file-for-module=tnp-core lib/utils.ts
454
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90bnAtY29yZS9wcm9qZWN0cy90bnAtY29yZS9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUF3QixNQUFNLE9BQU8sQ0FBQztBQUM3QyxPQUFPLEVBQUUsSUFBSSxFQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFFekMsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBR0wsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7QUFFdEMsTUFBTSxLQUFXLEtBQUssQ0E2akJyQjtBQTdqQkQsV0FBaUIsS0FBSztJQUNQLGVBQVMsR0FBRyxDQUN2QixLQUFZLEVBQ1osY0FBd0IsRUFDeEIsRUFBRTtRQUNGLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLE9BQU8sS0FBSzthQUNULE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEIsTUFBTSxDQUFDLFVBQVUsSUFBSTtZQUNwQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDdEUsQ0FBQyxDQUFDLEtBQUs7Z0JBQ1AsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQVEsQ0FBQztJQUNkLENBQUMsQ0FBQztJQUVGOzs7T0FHRztJQUNVLDBCQUFvQixHQUFHLENBQUMsZUFBdUIsRUFBRSxFQUFFO1FBQzlELE9BQU8sZUFBZSxDQUFDLE9B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VyxDQVkzQjtBQVpELFdBQWlCLFdBQVc7SUFDYixtQ0FBdUIsR0FBRyxDQUFDLEtBQWEsRUFBVSxFQUFFO1FBQy9ELE9BQU8sQ0FDTCxLQUFLO2FBRUYsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7YUFFcEIsT0FBTyxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQzthQUV0QyxXQUFXLEVBQUUsQ0FDakIsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMsRUFaZ0IsV0FBVyxLQUFYLFdBQVcsUUFZM0I7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtEQUFrRCIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBDb3JlTW9kZWxzIH0gZnJvbSAnLi9jb3JlLW1vZGVscyc7XG5pbXBvcnQgYXhpb3MsIHsgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IHBhdGgsIF8gfSBmcm9tICcuL2NvcmUtaW1wb3J0cyc7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSAnLi9pbmRleCc7XG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5jb25zdCBCTE9CX1NVUFBPUlRFRF9JTl9TUUxKUyA9IGZhbHNlO1xuXG5leHBvcnQgbmFtZXNwYWNlIFV0aWxzIHtcbiAgZXhwb3J0IGNvbnN0IHVuaXFBcnJheSA9IDxUID0gYW55PihcbiAgICBhcnJheTogYW55W10sXG4gICAgdW5pcXVlUHJvcGVydHk/OiBrZXlvZiBULFxuICApID0+IHtcbiAgICB2YXIgc2VlbiA9IHt9O1xuICAgIHJldHVybiBhcnJheVxuICAgICAgLmZpbHRlcihmID0+ICEhZilcbiAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHNlZW4uaGFzT3duUHJvcGVydHkodW5pcXVlUHJvcGVydHkgPyBpdGVtW3VuaXF1ZVByb3BlcnR5XSA6IGl0ZW0pXG4gICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgIDogKHNlZW5bdW5pcXVlUHJvcGVydHkgPyBpdGVtW3VuaXF1ZVByb3BlcnR5XSA6IGl0ZW1dID0gdHJ1ZSk7XG4gICAgICB9KSBhcyBUW107XG4gIH07XG5cbiAgLyoqXG4gICAqIEV4YW1wbGU6XG4gICAqIG5ldyBSZWdFeHAoZXNjYXBlU3RyaW5nRm9yUmVnRXgoJ2EuYi5jJyksJ2cnKSA9PiAvYVxcLmJcXC5jL2dcbiAgICovXG4gIGV4cG9ydCBjb25zdCBlc2NhcGVTdHJpbmdGb3JSZWdFeCA9IChzdHJpbmdGb3JSZWdFeHA6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBzdHJpbmdGb3JSZWdFeHAucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUNoYWxrU3BlY2lhbENoYXJzKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcblxuICAgIGNvbnN0IGFuc2lSZWdleCA9IC9cXHUwMDFiXFxbWzAtOTtdKm0vZztcblxuXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKGFuc2lSZWdleCwgJycpO1xuICB9XG5cbiAgZXhwb3J0IGNvbnN0IGZ1bGxEYXRlVGltZSA9ICgpID0+IHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuICBleHBvcnQgY29uc3QgZnVsbERhdGUgPSAoKSA9PiB7XG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuICBpbnRlcmZhY2UgQXR0ckpzb25jUHJvcCB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZhbHVlPzogYW55O1xuICB9XG4gIGV4cG9ydCBuYW1lc3BhY2UganNvbiB7XG4gICAgZXhwb3J0IGNvbnN0IGdldEF0cnJpYnV0aWVzID0gKFxuICAgICAganNvbkRlZXBQYXRoOiBzdHJpbmcsIC8vIGxvZGFzaCBwYXRoIHRvIHByb3BlcnR5IGluIGpzb24gZXguIGRlZXAucGF0aC50by5wcm9wXG4gICAgICBmaWxlQ29udGVudDogc3RyaW5nLCAvLyBqc29uYyBvciBqc29uNSAtIGpzb24gd2l0aCBjb21tZW50c1xuICAgICk6IEF0dHJKc29uY1Byb3BbXSA9PiB7XG4gICAgICBjb25zdCBsaW5lcyA9IGZpbGVDb250ZW50LnNwbGl0KCdcXG4nKTtcblxuICAgICAgY29uc3QgcGF0aFBhcnRzID0ganNvbkRlZXBQYXRoLnNwbGl0KCcuJykucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgICAgIGlmIChhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBbYl07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFzdDogc3RyaW5nID0gYVthLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGxhc3Quc3RhcnRzV2l0aChgWydgKSAmJiBiLmVuZHNXaXRoKGAnXWApKSB8fFxuICAgICAgICAgIChsYXN0LnN0YXJ0c1dpdGgoYFtcImApICYmIGIuZW5kc1dpdGgoYFwiXWApKVxuICAgICAgICApIHtcbiAgICAgICAgICBhW2EubGVuZ3RoIC0gMV0gPSBbbGFzdCwgYl0uam9pbignLicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGEucHVzaChiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0sIFtdKTtcblxuXG4gICAgICBjb25zdCBrZXlOYW1lID0gcGF0aFBhcnRzLnBvcCgpIS5yZXBsYWNlKC9eXFxbXCIoLispXCJcXF0kLywgJyQxJyk7XG4gICAgICBsZXQgY3VycmVudFBhdGggPSAnJztcbiAgICAgIGxldCBhdHRyaWJ1dGVzOiBBdHRySnNvbmNQcm9wW10gPSBbXTtcbiAgICAgIGxldCBjb2xsZWN0ZWRDb21tZW50czogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gbGluZS50cmltKCk7XG5cbiAgICAgICAgaWYgKHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJy8vJykpIHtcblxuICAgICAgICAgIGNvbGxlY3RlZENvbW1lbnRzLnB1c2godHJpbW1lZExpbmUpO1xuXG5cbiAgICAgICAgfSBlbHNlIGlmICh0cmltbWVkTGluZS5zdGFydHNXaXRoKCdcIicpIHx8IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoXCInXCIpKSB7XG5cbiAgICAgICAgICBjb25zdCBtYXRjaCA9IHRyaW1tZWRMaW5lLm1hdGNoKC9bXCInXShbXlwiJ10rKVtcIiddXFxzKjovKTtcblxuICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gbWF0Y2hbMV07XG4gICAgICAgICAgICBjdXJyZW50UGF0aCA9IGN1cnJlbnRQYXRoXG4gICAgICAgICAgICAgID8gYCR7Y3VycmVudFBhdGh9LiR7a2V5LmluY2x1ZGVzKCcuJykgPyBgWycke2tleX0nXWAgOiBrZXl9YFxuICAgICAgICAgICAgICA6IGtleTtcblxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChjdXJyZW50UGF0aC5lbmRzV2l0aChrZXlOYW1lKSAmJlxuICAgICAgICAgICAgICAgICFjdXJyZW50UGF0aC5lbmRzV2l0aCgnLycgKyBrZXlOYW1lKSkgfHxcbiAgICAgICAgICAgICAgY3VycmVudFBhdGguZW5kc1dpdGgoYFsnJHtrZXlOYW1lfSddYClcbiAgICAgICAgICAgICkge1xuXG5cblxuXG5cbiAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IGV4dHJhY3RBdHRyaWJ1dGVzRnJvbUNvbW1lbnRzKGNvbGxlY3RlZENvbW1lbnRzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgY29sbGVjdGVkQ29tbWVudHMgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfTtcblxuICAgIGNvbnN0IGV4dHJhY3RBdHRyaWJ1dGVzRnJvbUNvbW1lbnRzID0gKFxuICAgICAgY29tbWVudHM6IHN0cmluZ1tdLFxuICAgICk6IEF0dHJKc29uY1Byb3BbXSA9PiB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVzOiBBdHRySnNvbmNQcm9wW10gPSBbXTtcbiAgICAgIGNvbnN0IGF0dHJSZWdleCA9IC9AKFxcdyspKD86XFxzKj1cXHMqKFteXFxzQF0rKSk/L2c7XG5cbiAgICAgIGZvciAoY29uc3QgY29tbWVudCBvZiBjb21tZW50cykge1xuICAgICAgICBsZXQgbWF0Y2g7XG4gICAgICAgIHdoaWxlICgobWF0Y2ggPSBhdHRyUmVnZXguZXhlYyhjb21tZW50KSkgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBbLCBuYW1lLCB2YWx1ZV0gPSBtYXRjaDtcblxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQXR0cmlidXRlID0gYXR0cmlidXRlcy5maW5kKFxuICAgICAgICAgICAgYXR0ciA9PiBhdHRyLm5hbWUgPT09IGBAJHtuYW1lfWAsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChleGlzdGluZ0F0dHJpYnV0ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4aXN0aW5nQXR0cmlidXRlLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nQXR0cmlidXRlLnZhbHVlLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nQXR0cmlidXRlLnZhbHVlID0gW2V4aXN0aW5nQXR0cmlidXRlLnZhbHVlLCB2YWx1ZV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXR0cmlidXRlcy5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogYEAke25hbWV9YCxcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlID8gdmFsdWUgOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cblxuICAgICAgYXR0cmlidXRlcy5mb3JFYWNoKGF0dHIgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhdHRyLnZhbHVlKSAmJiBhdHRyLnZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGF0dHIudmFsdWUgPSBhdHRyLnZhbHVlWzBdO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfTtcbiAgfVxuXG5cblxuXG5cbiAgZXhwb3J0IGVudW0gRGJCaW5hcnlGb3JtYXRFbnVtIHtcbiAgICBCbG9iID0gJ0Jsb2InLFxuICAgIEZpbGUgPSAnRmlsZScsXG4gICAgc3RyaW5nID0gJ3N0cmluZycsXG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuICBleHBvcnQgdHlwZSBEYkJpbmFyeUZvcm1hdEZvckJyb3dzZXIgPSBCbG9iIHwgRmlsZSB8IHN0cmluZztcbi8qICovXG4vKiAqL1xuICBcblxuICAvKipcbiAgICogQmluYXJ5IGZvcm1hdCB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gZGF0YWJhc2VcbiAgICpcbiAgICogZm9yIG5vZGVqcyA9PiBCdWZmZXJcbiAgICogZm9yIHNxbC5qcyA9PiBzdHJpbmcgKHNob3VsYiBiZSBibG9iIC0gYnV0IG5vdCBzdXBwb3J0ZWQpXG4gICAqXG4gICAqL1xuICBleHBvcnQgdHlwZSBEYkJpbmFyeUZvcm1hdCA9XG4gICAgfCBEYkJpbmFyeUZvcm1hdEZvckJyb3dzZXJcbi8qICovXG4vKiAqL1xuICBcblxuICBleHBvcnQgbmFtZXNwYWNlIGJpbmFyeSB7XG5cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgZm9yIEJST1dTRVIgT05MWVxuICAgICAqXG4gICAgICogQHBhcmFtIGJ1ZmZlclxuICAgICAqIEBwYXJhbSBjb250ZW50VHlwZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFycmF5QnVmZmVyVG9CbG9iKFxuICAgICAgYnVmZmVyOiBBcnJheUJ1ZmZlcixcbiAgICAgIGNvbnRlbnRUeXBlOiBDb3JlTW9kZWxzLkNvbnRlbnRUeXBlLFxuICAgICk6IFByb21pc2U8QmxvYj4ge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pO1xuICAgIH1cblxuXG5cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgZm9yIEJST1dTRVIgT05MWVxuICAgICAqIEBwYXJhbSBibG9iXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gYmxvYlRvQXJyYXlCdWZmZXIoYmxvYjogQmxvYik6IFByb21pc2U8QXJyYXlCdWZmZXI+IHtcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBhbnkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgcmVqZWN0KTsgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYik7XG4gICAgICB9KTtcbiAgICB9XG5cblxuXG4gICAgLyoqXG4gICAgICogaXQgaXMgcmV2ZXJzIHRvIGJhc2U2NHRvQmxvYlxuICAgICAqIEBwYXJhbSBibG9iXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gYmxvYlRvQmFzZTY0KGJsb2I6IEJsb2IpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIF8pID0+IHtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCk7IC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gICAgICB9KTtcbiAgICB9XG5cblxuXG4gICAgLyoqXG4gICAgICogaXQgaXMgcmV2ZXJzIHRvIGJsb2JUb0Jhc2U2NCgpXG4gICAgICogQHBhcmFtIGJhc2U2NERhdGFcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBiYXNlNjR0b0Jsb2IoXG4gICAgICBiYXNlNjREYXRhOiBzdHJpbmcsXG4gICAgICBjb250ZW50VHlwZU92ZXJyaWRlPzogQ29yZU1vZGVscy5Db250ZW50VHlwZSxcbiAgICApOiBQcm9taXNlPEJsb2I+IHtcbiAgICAgIGxldCBjb250ZW50X3R5cGU6IENvcmVNb2RlbHMuQ29udGVudFR5cGUgPSB2b2lkIDAgYXMgYW55O1xuICAgICAgbGV0IGZpbGVfYmFzZTY0OiBzdHJpbmcgPSB2b2lkIDAgYXMgYW55O1xuICAgICAgaWYgKCFjb250ZW50VHlwZU92ZXJyaWRlKSB7XG4gICAgICAgIGNvbnN0IG0gPSAvXmRhdGE6KC4rPyk7YmFzZTY0LCguKykkLy5leGVjKGJhc2U2NERhdGEpO1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgW3Rhb24tZnJhbWV3b3JrXVtiYXNlNjR0b0Jsb2JdIE5vdCBhIGJhc2U2NCBibG9iIFske2Jhc2U2NERhdGF9XWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBbX18sIGNvbnRlbnR0eXBlLCBmaWxlYmFzZTY0XSA9IG07XG4gICAgICAgIGNvbnRlbnRfdHlwZSA9IGNvbnRlbnR0eXBlIGFzIGFueTtcbiAgICAgICAgZmlsZV9iYXNlNjQgPSBmaWxlYmFzZTY0O1xuICAgICAgfVxuICAgICAgY29udGVudF90eXBlID0gKFxuICAgICAgICBjb250ZW50VHlwZU92ZXJyaWRlID8gY29udGVudFR5cGVPdmVycmlkZSA6IGNvbnRlbnRfdHlwZSB8fCAnJ1xuICAgICAgKSBhcyBhbnk7XG4gICAgICBiYXNlNjREYXRhID0gY29udGVudFR5cGVPdmVycmlkZSA/IGJhc2U2NERhdGEgOiBmaWxlX2Jhc2U2NDtcbiAgICAgIGNvbnN0IHNsaWNlU2l6ZSA9IDEwMjQ7XG4gICAgICBjb25zdCBieXRlQ2hhcmFjdGVycyA9IGF0b2IoYmFzZTY0RGF0YSk7XG4gICAgICBjb25zdCBieXRlc0xlbmd0aCA9IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDtcbiAgICAgIGNvbnN0IHNsaWNlc0NvdW50ID0gTWF0aC5jZWlsKGJ5dGVzTGVuZ3RoIC8gc2xpY2VTaXplKTtcbiAgICAgIGNvbnN0IGJ5dGVBcnJheXMgPSBuZXcgQXJyYXkoc2xpY2VzQ291bnQpO1xuXG4gICAgICBmb3IgKGxldCBzbGljZUluZGV4ID0gMDsgc2xpY2VJbmRleCA8IHNsaWNlc0NvdW50OyArK3NsaWNlSW5kZXgpIHtcbiAgICAgICAgY29uc3QgYmVnaW4gPSBzbGljZUluZGV4ICogc2xpY2VTaXplO1xuICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihiZWdpbiArIHNsaWNlU2l6ZSwgYnl0ZXNMZW5ndGgpO1xuXG4gICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KGVuZCAtIGJlZ2luKTtcblxuICAgICAgICBmb3IgKGxldCBvZmZzZXQgPSBiZWdpbiwgaSA9IDA7IG9mZnNldCA8IGVuZDsgKytpLCArK29mZnNldCkge1xuICAgICAgICAgIGJ5dGVzW2ldID0gYnl0ZUNoYXJhY3RlcnNbb2Zmc2V0XS5jaGFyQ29kZUF0KDApO1xuICAgICAgICB9XG4gICAgICAgIGJ5dGVBcnJheXNbc2xpY2VJbmRleF0gPSBuZXcgVWludDhBcnJheShieXRlcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEJsb2IoYnl0ZUFycmF5cywgeyB0eXBlOiBjb250ZW50X3R5cGUgfSk7XG4gICAgfVxuXG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJhc2U2NHRvRGJCaW5hcnlGb3JtYXQoXG4gICAgICB0ZXh0OiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxEYkJpbmFyeUZvcm1hdD4ge1xuICAgICAgbGV0IHJlc3VsdDogRGJCaW5hcnlGb3JtYXQ7XG5cbiAgICAgIHJlc3VsdCA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChCTE9CX1NVUFBPUlRFRF9JTl9TUUxKUykge1xuICAgICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBiYXNlNjR0b0Jsb2IodGV4dCk7XG4gICAgICAgICAgcmV0dXJuIGJsb2I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQgYXMgYW55O1xuICAgICAgfSkoKTtcblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRiQmluYXJ5Rm9ybWF0VG9CYXNlNjQoXG4gICAgICBiaW5hcnlGb3JtYXQ6IERiQmluYXJ5Rm9ybWF0LFxuICAgICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XG5cbiAgICAgIHJlc3VsdCA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChCTE9CX1NVUFBPUlRFRF9JTl9TUUxKUykge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCBibG9iVG9CYXNlNjQoYmluYXJ5Rm9ybWF0IGFzIGFueSk7XG4gICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJpbmFyeUZvcm1hdCBhcyBhbnk7XG4gICAgICB9KSgpO1xuXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRleHRUb0RiQmluYXJ5Rm9ybWF0KFxuICAgICAgdGV4dDogc3RyaW5nLFxuICAgICk6IFByb21pc2U8RGJCaW5hcnlGb3JtYXQ+IHtcbiAgICAgIGxldCByZXN1bHQ6IERiQmluYXJ5Rm9ybWF0O1xuXG4gICAgICByZXN1bHQgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoQkxPQl9TVVBQT1JURURfSU5fU1FMSlMpIHtcbiAgICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgdGV4dFRvQmxvYih0ZXh0KTtcbiAgICAgICAgICByZXR1cm4gYmxvYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dCBhcyBhbnk7XG4gICAgICB9KSgpO1xuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuXG5cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gZGJCaW5hcnlGb3JtYXRUb1RleHQoXG4gICAgICBiaW5hcnlGb3JtYXQ6IERiQmluYXJ5Rm9ybWF0LFxuICAgICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XG5cbiAgICAgIHJlc3VsdCA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChCTE9CX1NVUFBPUlRFRF9JTl9TUUxKUykge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCBibG9iVG9UZXh0KGJpbmFyeUZvcm1hdCBhcyBhbnkpO1xuICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiaW5hcnlGb3JtYXQgYXMgYW55O1xuICAgICAgfSkoKTtcblxuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cblxuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5cblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaWxlVG9CbG9iKGZpbGU6IEZpbGUpIHtcbiAgICAgIHJldHVybiBuZXcgQmxvYihbbmV3IFVpbnQ4QXJyYXkoYXdhaXQgZmlsZS5hcnJheUJ1ZmZlcigpKV0sIHtcbiAgICAgICAgdHlwZTogZmlsZS50eXBlLFxuICAgICAgfSk7XG4gICAgfVxuXG5cblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBibG9iVG9GaWxlKFxuICAgICAgYmxvYjogQmxvYixcbiAgICAgIG5hbWVGb3JGaWxlOiBzdHJpbmcgPSAnbXktZmlsZS1uYW1lJyxcbiAgICApOiBQcm9taXNlPEZpbGU+IHtcbiAgICAgIGlmICghbmFtZUZvckZpbGUpIHtcbiAgICAgICAgbmFtZUZvckZpbGUgPSAnbm9uYW1lZmlsZScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIH1cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgRmlsZShbYmxvYl0sIG5hbWVGb3JGaWxlKTtcbiAgICB9XG5cblxuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcblxuXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRleHRUb0Jsb2IoXG4gICAgICB0ZXh0OiBzdHJpbmcsXG4gICAgICB0eXBlOiBDb3JlTW9kZWxzLkNvbnRlbnRUeXBlID0gJ3RleHQvcGxhaW4nLFxuICAgICk6IFByb21pc2U8QmxvYj4ge1xuICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFt0ZXh0XSwgeyB0eXBlIH0pO1xuICAgICAgcmV0dXJuIGJsb2I7XG4gICAgfVxuXG5cblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBibG9iVG9UZXh0KGJsb2I6IEJsb2IpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgcmV0dXJuIGF3YWl0IGJsb2IudGV4dCgpO1xuICAgIH1cblxuXG5cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gdGV4dFRvRmlsZShcbiAgICAgIHRleHQ6IHN0cmluZyxcbiAgICAgIGZpbGVSZWxhdGl2ZVBhdGhPck5hbWU6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPEZpbGU+IHtcblxuICAgICAgY29uc3QgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGVSZWxhdGl2ZVBhdGhPck5hbWUpO1xuXG4gICAgICBjb25zdCB0eXBlID0gQ29yZU1vZGVscy5taW1lVHlwZXNbZXh0XTtcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbdGV4dF0sIHsgdHlwZSB9KTtcbiAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBibG9iVG9GaWxlKGJsb2IsIGZpbGVSZWxhdGl2ZVBhdGhPck5hbWUpO1xuXG5cblxuXG5cbiAgICAgIHJldHVybiBmaWxlO1xuICAgIH1cblxuXG5cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gZmlsZVRvVGV4dChmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIHJldHVybiBhd2FpdCBmaWxlLnRleHQoKTtcbiAgICB9XG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGpzb25Ub0Jsb2IoanNvbk9iajogb2JqZWN0KTogUHJvbWlzZTxCbG9iPiB7XG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KGpzb25PYmosIG51bGwsIDIpXSwge1xuICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBibG9iO1xuICAgIH1cblxuXG5cbiAgICAvKipcbiAgICAgKiBUT0RPIE5PVCBURVNURURcbiAgICAgKi9cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gYmxvYlRvSnNvbihibG9iOiBCbG9iKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGF3YWl0IGJsb2IudGV4dCgpKTtcbiAgICB9XG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJsb2JGcm9tKHVybDogc3RyaW5nKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgICBjb25zdCByZXNwb25zZTogQXhpb3NSZXNwb25zZTxCbG9iPiA9IGF3YWl0IGF4aW9zKHtcbiAgICAgICAgdXJsLFxuICAgICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfVxuXG4gIH1cblxuXG5cbiAgZXhwb3J0IG5hbWVzcGFjZSBjc3Mge1xuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGl4ZWxzQ3NzIHBpeGVscyBleC4gMTAwcHhcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBudW1WYWx1ZShwaXhlbHNDc3M6IHN0cmluZyB8IG51bWJlcik6IG51bWJlciB7XG5cbiAgICAgIHJldHVybiBwYXJzZUludChcbiAgICAgICAgcGl4ZWxzQ3NzPy50b1N0cmluZygpPy5yZXBsYWNlKCdweCcsICcnKSxcblxuXG4gICAgICApO1xuICAgIH1cblxuICB9XG5cbn1cblxuXG5leHBvcnQgbmFtZXNwYWNlIFV0aWxzUHJvY2VzcyB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc1N0YXJ0T3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogYnkgZGVmYXVsdCBpcyBwcm9jZXNzLmN3ZCgpO1xuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBzaG93Q29tbWFuZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogTW9kaWZ5IG91dHB1dCBsaW5lIGJ5IGxpbmVcbiAgICAgKi9cbiAgICBvdXRwdXRMaW5lUmVwbGFjZT86IChvdXRwdXRMaW5lU3RkZXJPclN0ZG91dDogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgcmVzb2x2ZVByb21pc2VNc2c/OiB7XG4gICAgICAvKipcbiAgICAgICAqIHVuaXRpbCB0aGlzIHN0cmluZyBpcyBpbiBvdXRwdXQgb2Ygc3Rkb3V0XG4gICAgICAgKi9cbiAgICAgIHN0ZG91dD86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgICAgLyoqXG4gICAgICAgKiB1bml0aWwgdGhpcyBzdHJpbmcgaXMgaW4gb3V0cHV0IG9mIHN0ZGVyclxuICAgICAgICovXG4gICAgICBzdGRlcnI/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAgIC8qKlxuICAgICAgICogYnkgZGVmYXVsdCBvbmx5IHJlc29sdmUgd2hlbiBleGl0IGNvZGUgaXMgMFxuICAgICAgICovXG4gICAgICByZXNvbHZlQWZ0ZXJBbnlFeGl0Q29kZT86IGJvb2xlYW47XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBQcmVmaXggbWVzc2FnZXMgb3V0cHV0IGZyb20gY2hpbGRfcHJjZXNzXG4gICAgICovXG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRyeSBjb21tYW5kIGFnYWluIGFmdGVyIGZhaWwgYWZ0ZXIgbiBtaWxpc2Vjb25kc1xuICAgICAqL1xuICAgIHRyeUFnYWluV2hlbkZhaWxBZnRlcj86IG51bWJlcjtcbiAgICBhc2tUb1RyeUFnYWluT25FcnJvcj86IGJvb2xlYW47XG4gICAgZXhpdE9uRXJyb3JDYWxsYmFjaz86IChjb2RlOiBudW1iZXIpID0+IHZvaWQ7XG4gICAgLyoqXG4gICAgICogVXNlIGJpZyBidWZmZXIgZm9yIGJpZyB3ZWJwYWNrIGxvZ3NcbiAgICAgKi9cbiAgICBiaWdnZXJCdWZmZXI/OiBib29sZWFuO1xuICAgIGhpZGVPdXRwdXQ/OiB7XG4gICAgICBzdGRvdXQ/OiBib29sZWFuO1xuICAgICAgc3RkZXJyPzogYm9vbGVhbjtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRPRE8gSU1QTEVNRU5UXG4gICAqL1xuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRBc3luYyhcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFByb2Nlc3NTdGFydE9wdGlvbnMgJiB7IGRldGFjaD86IGJvb2xlYW4gfSxcbiAgKSB7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBUT0RPIElNUExFTUVOVFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0U3luYyhjb21tYW5kOiBzdHJpbmcsIG9wdGlvbnM/OiBQcm9jZXNzU3RhcnRPcHRpb25zKSB7XG5cbiAgfVxuXG4gIGV4cG9ydCBjb25zdCBnZXRCYXNoT3JTaGVsbE5hbWUgPSAoKTpcbiAgICB8ICdjbWQnXG4gICAgfCAncG93ZXJzaGVsbCdcbiAgICB8ICdnaXRiYXNoJ1xuICAgIHwgJ2N5Z3dpbidcbiAgICB8ICd1bmtub3duJ1xuICAgIHwgJ2Jhc2gnXG4gICAgfCAnenNoJ1xuICAgIHwgJ2Zpc2gnXG4gICAgfCAnc2gnID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xufVxuXG5cblxuZXhwb3J0IG5hbWVzcGFjZSBVdGlsc1N0cmluZyB7XG4gIGV4cG9ydCBjb25zdCBrZWJhYkNhc2VOb1NwbGl0TnVtYmVycyA9IChpbnB1dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgaW5wdXRcblxuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnLScpXG5cbiAgICAgICAgLnJlcGxhY2UoLyhbYS16MC05XSkoW0EtWl0pL2csICckMS0kMicpXG5cbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICApO1xuICB9O1xufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dG5wLWNvcmUgbGliL3V0aWxzLnRzIl19
760
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90bnAtY29yZS9wcm9qZWN0cy90bnAtY29yZS9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUF3QixNQUFNLE9BQU8sQ0FBQztBQUM3QyxPQUFPLEVBQUksSUFBSSxFQUFJLENBQUMsR0FBNkMsTUFBTSxnQkFBZ0IsQ0FBQyxDQUFBLEtBQUs7QUFVN0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFHTCxNQUFNLHVCQUF1QixHQUFHLEtBQUssQ0FBQztBQUd0QyxNQUFNLEtBQVcsS0FBSyxDQWtuQnJCO0FBbG5CRCxXQUFpQixLQUFLO0lBRVAsZUFBUyxHQUFHLENBQ3ZCLEtBQVksRUFDWixjQUF3QixFQUN4QixFQUFFO1FBQ0YsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2QsT0FBTyxLQUFLO2FBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoQixNQUFNLENBQUMsVUFBVSxJQUFJO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN0RSxDQUFDLENBQUMsS0FBSztnQkFDUCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBUSxDQUFDO0lBQ2QsQ0FBQyxDQUFD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QUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFJVywrQkFBa0IsR0FBRyxHQVV6QixFQUFFO1FBRVQsT0FBTyxTQUFTLENBQUM7UUFFckIsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxL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RCxPQUFPLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztJQUNuRSxDQUFDLENBQUE7SUFFWSxnQ0FBZ0IsR0FBRyxDQUFDLEtBQVUsRUFBVyxFQUFFO1FBQ3RELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsT0FBTyxLQUFLLENBQUMsQ0FBQyxtQkFBbUI7UUFDbkMsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLDBDQUEwQztRQUNsRSxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLHFEQUFxRDtRQUU1RixPQUFPLEtBQUssSUFBSSxZQUFZLElBQUksS0FBSyxJQUFJLFlBQVksQ0FBQztJQUN4RCxDQUFDLENBQUM7QUFDSixDQUFDLEVBckNnQixlQUFlLEtBQWYsZUFBZSxRQXFDL0I7QUFHQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtEQUFrRCIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBDb3JlTW9kZWxzIH0gZnJvbSAnLi9jb3JlLW1vZGVscyc7XG5pbXBvcnQgYXhpb3MsIHsgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCB7ICAgcGF0aCwgICBfLCAgIGNyb3NzUGxhdGZvcm1QYXRoLCAvKiAqLyAvKiAqLyAvKiAqLyAgICB9IGZyb20gJy4vY29yZS1pbXBvcnRzJzsvKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cblxuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgZGF0ZWZvcm1hdCB9IGZyb20gJy4vY29yZS1pbXBvcnRzJztcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5jb25zdCBCTE9CX1NVUFBPUlRFRF9JTl9TUUxKUyA9IGZhbHNlO1xuXG5cbmV4cG9ydCBuYW1lc3BhY2UgVXRpbHMge1xuXG4gIGV4cG9ydCBjb25zdCB1bmlxQXJyYXkgPSA8VCA9IGFueT4oXG4gICAgYXJyYXk6IGFueVtdLFxuICAgIHVuaXF1ZVByb3BlcnR5Pzoga2V5b2YgVCxcbiAgKSA9PiB7XG4gICAgdmFyIHNlZW4gPSB7fTtcbiAgICByZXR1cm4gYXJyYXlcbiAgICAgIC5maWx0ZXIoZiA9PiAhIWYpXG4gICAgICAuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBzZWVuLmhhc093blByb3BlcnR5KHVuaXF1ZVByb3BlcnR5ID8gaXRlbVt1bmlxdWVQcm9wZXJ0eV0gOiBpdGVtKVxuICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICA6IChzZWVuW3VuaXF1ZVByb3BlcnR5ID8gaXRlbVt1bmlxdWVQcm9wZXJ0eV0gOiBpdGVtXSA9IHRydWUpO1xuICAgICAgfSkgYXMgVFtdO1xuICB9O1xuXG5cblxuICAvKipcbiAgICogRXhhbXBsZTpcbiAgICogbmV3IFJlZ0V4cChlc2NhcGVTdHJpbmdGb3JSZWdFeCgnYS5iLmMnKSwnZycpID0+IC9hXFwuYlxcLmMvZ1xuICAgKi9cbiAgZXhwb3J0IGNvbnN0IGVzY2FwZVN0cmluZ0ZvclJlZ0V4ID0gKHN0cmluZ0ZvclJlZ0V4cDogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIHN0cmluZ0ZvclJlZ0V4cC5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcbiAgfTtcblxuXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUNoYWxrU3BlY2lhbENoYXJzKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcblxuICAgIGNvbnN0IGFuc2lSZWdleCA9IC9cXHUwMDFiXFxbWzAtOTtdKm0vZztcblxuXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKGFuc2lSZWdleCwgJycpO1xuICB9XG5cblxuXG4gIGV4cG9ydCBjb25zdCBmdWxsRGF0ZVRpbWUgPSAoKSA9PiB7XG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIGV4cG9ydCBjb25zdCBmdWxsRGF0ZSA9ICgpID0+IHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgY29uc3QgdGFrZW5Qb3J0cyA9IFtdO1xuICBleHBvcnQgY29uc3QgZ2V0RnJlZVBvcnQgPSBhc3luYyAob3B0aW9ucz86IHtcbiAgICBzdGFydEZyb20/OiBudW1iZXI7XG4gICAgaG93TWFueUZyZWVQb3J0c0FmdGVyVGhhdFBvcnQ/OiBudW1iZXI7XG4gIH0pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgaW50ZXJmYWNlIEF0dHJKc29uY1Byb3Age1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZT86IGFueTtcbiAgfVxuICBleHBvcnQgbmFtZXNwYWNlIGpzb24ge1xuICAgIGV4cG9ydCBjb25zdCBnZXRBdHJyaWJ1dGllcyA9IChcbiAgICAgIGpzb25EZWVwUGF0aDogc3RyaW5nLCAvLyBsb2Rhc2ggcGF0aCB0byBwcm9wZXJ0eSBpbiBqc29uIGV4LiBkZWVwLnBhdGgudG8ucHJvcFxuICAgICAgZmlsZUNvbnRlbnQ6IHN0cmluZywgLy8ganNvbmMgb3IganNvbjUgLSBqc29uIHdpdGggY29tbWVudHNcbiAgICApOiBBdHRySnNvbmNQcm9wW10gPT4ge1xuICAgICAgY29uc3QgbGluZXMgPSBmaWxlQ29udGVudC5zcGxpdCgnXFxuJyk7XG5cbiAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IGpzb25EZWVwUGF0aC5zcGxpdCgnLicpLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgICAgICBpZiAoYS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gW2JdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3Q6IHN0cmluZyA9IGFbYS5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChsYXN0LnN0YXJ0c1dpdGgoYFsnYCkgJiYgYi5lbmRzV2l0aChgJ11gKSkgfHxcbiAgICAgICAgICAobGFzdC5zdGFydHNXaXRoKGBbXCJgKSAmJiBiLmVuZHNXaXRoKGBcIl1gKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgYVthLmxlbmd0aCAtIDFdID0gW2xhc3QsIGJdLmpvaW4oJy4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhLnB1c2goYik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9LCBbXSk7XG5cblxuICAgICAgY29uc3Qga2V5TmFtZSA9IHBhdGhQYXJ0cy5wb3AoKSEucmVwbGFjZSgvXlxcW1wiKC4rKVwiXFxdJC8sICckMScpO1xuICAgICAgbGV0IGN1cnJlbnRQYXRoID0gJyc7XG4gICAgICBsZXQgYXR0cmlidXRlczogQXR0ckpzb25jUHJvcFtdID0gW107XG4gICAgICBsZXQgY29sbGVjdGVkQ29tbWVudHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICBjb25zdCB0cmltbWVkTGluZSA9IGxpbmUudHJpbSgpO1xuXG4gICAgICAgIGlmICh0cmltbWVkTGluZS5zdGFydHNXaXRoKCcvLycpKSB7XG5cbiAgICAgICAgICBjb2xsZWN0ZWRDb21tZW50cy5wdXNoKHRyaW1tZWRMaW5lKTtcblxuXG4gICAgICAgIH0gZWxzZSBpZiAodHJpbW1lZExpbmUuc3RhcnRzV2l0aCgnXCInKSB8fCB0cmltbWVkTGluZS5zdGFydHNXaXRoKFwiJ1wiKSkge1xuXG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSB0cmltbWVkTGluZS5tYXRjaCgvW1wiJ10oW15cIiddKylbXCInXVxccyo6Lyk7XG5cbiAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgY3VycmVudFBhdGggPSBjdXJyZW50UGF0aFxuICAgICAgICAgICAgICA/IGAke2N1cnJlbnRQYXRofS4ke2tleS5pbmNsdWRlcygnLicpID8gYFsnJHtrZXl9J11gIDoga2V5fWBcbiAgICAgICAgICAgICAgOiBrZXk7XG5cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoY3VycmVudFBhdGguZW5kc1dpdGgoa2V5TmFtZSkgJiZcbiAgICAgICAgICAgICAgICAhY3VycmVudFBhdGguZW5kc1dpdGgoJy8nICsga2V5TmFtZSkpIHx8XG4gICAgICAgICAgICAgIGN1cnJlbnRQYXRoLmVuZHNXaXRoKGBbJyR7a2V5TmFtZX0nXWApXG4gICAgICAgICAgICApIHtcblxuXG5cblxuXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBleHRyYWN0QXR0cmlidXRlc0Zyb21Db21tZW50cyhjb2xsZWN0ZWRDb21tZW50cyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGNvbGxlY3RlZENvbW1lbnRzID0gW107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH07XG5cbiAgICBjb25zdCBleHRyYWN0QXR0cmlidXRlc0Zyb21Db21tZW50cyA9IChcbiAgICAgIGNvbW1lbnRzOiBzdHJpbmdbXSxcbiAgICApOiBBdHRySnNvbmNQcm9wW10gPT4ge1xuICAgICAgY29uc3QgYXR0cmlidXRlczogQXR0ckpzb25jUHJvcFtdID0gW107XG4gICAgICBjb25zdCBhdHRyUmVnZXggPSAvQChcXHcrKSg/Olxccyo9XFxzKihbXlxcc0BdKykpPy9nO1xuXG4gICAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgY29tbWVudHMpIHtcbiAgICAgICAgbGV0IG1hdGNoO1xuICAgICAgICB3aGlsZSAoKG1hdGNoID0gYXR0clJlZ2V4LmV4ZWMoY29tbWVudCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgWywgbmFtZSwgdmFsdWVdID0gbWF0Y2g7XG5cbiAgICAgICAgICBjb25zdCBleGlzdGluZ0F0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMuZmluZChcbiAgICAgICAgICAgIGF0dHIgPT4gYXR0ci5uYW1lID09PSBgQCR7bmFtZX1gLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoZXhpc3RpbmdBdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZ0F0dHJpYnV0ZS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBleGlzdGluZ0F0dHJpYnV0ZS52YWx1ZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBleGlzdGluZ0F0dHJpYnV0ZS52YWx1ZSA9IFtleGlzdGluZ0F0dHJpYnV0ZS52YWx1ZSwgdmFsdWVdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaCh7XG4gICAgICAgICAgICAgIG5hbWU6IGBAJHtuYW1lfWAsXG4gICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSA/IHZhbHVlIDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG5cbiAgICAgIGF0dHJpYnV0ZXMuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXR0ci52YWx1ZSkgJiYgYXR0ci52YWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBhdHRyLnZhbHVlID0gYXR0ci52YWx1ZVswXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH07XG4gIH1cblxuXG5cblxuXG4gIGV4cG9ydCBlbnVtIERiQmluYXJ5Rm9ybWF0RW51bSB7XG4gICAgQmxvYiA9ICdCbG9iJyxcbiAgICBGaWxlID0gJ0ZpbGUnLFxuICAgIHN0cmluZyA9ICdzdHJpbmcnLFxuLyogKi9cbi8qICovXG4gIFxuICB9XG5cbiAgZXhwb3J0IHR5cGUgRGJCaW5hcnlGb3JtYXRGb3JCcm93c2VyID0gQmxvYiB8IEZpbGUgfCBzdHJpbmc7XG4vKiAqL1xuLyogKi9cbiAgXG5cbiAgLyoqXG4gICAqIEJpbmFyeSBmb3JtYXQgdGhhdCBjYW4gYmUgc3RvcmVkIGluIGRhdGFiYXNlXG4gICAqXG4gICAqIGZvciBub2RlanMgPT4gQnVmZmVyXG4gICAqIGZvciBzcWwuanMgPT4gc3RyaW5nIChzaG91bGIgYmUgYmxvYiAtIGJ1dCBub3Qgc3VwcG9ydGVkKVxuICAgKlxuICAgKi9cbiAgZXhwb3J0IHR5cGUgRGJCaW5hcnlGb3JtYXQgPVxuICAgIHwgRGJCaW5hcnlGb3JtYXRGb3JCcm93c2VyXG4vKiAqL1xuLyogKi9cbiAgXG5cbiAgZXhwb3J0IG5hbWVzcGFjZSBiaW5hcnkge1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGZvciBCUk9XU0VSIE9OTFlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBidWZmZXJcbiAgICAgKiBAcGFyYW0gY29udGVudFR5cGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcnJheUJ1ZmZlclRvQmxvYihcbiAgICAgIGJ1ZmZlcjogQXJyYXlCdWZmZXIsXG4gICAgICBjb250ZW50VHlwZTogQ29yZU1vZGVscy5Db250ZW50VHlwZSxcbiAgICApOiBQcm9taXNlPEJsb2I+IHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiBjb250ZW50VHlwZSB9KTtcbiAgICB9XG5cblxuXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGZvciBCUk9XU0VSIE9OTFlcbiAgICAgKiBAcGFyYW0gYmxvYlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJsb2JUb0FycmF5QnVmZmVyKGJsb2I6IEJsb2IpOiBQcm9taXNlPEFycmF5QnVmZmVyPiB7XG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgYW55KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHJlamVjdCk7IC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpO1xuICAgICAgfSk7XG4gICAgfVxuXG5cblxuICAgIC8qKlxuICAgICAqIGl0IGlzIHJldmVycyB0byBiYXNlNjR0b0Jsb2JcbiAgICAgKiBAcGFyYW0gYmxvYlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGJsb2JUb0Jhc2U2NChibG9iOiBCbG9iKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCBfKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQpOyAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuICAgICAgfSk7XG4gICAgfVxuXG5cblxuICAgIC8qKlxuICAgICAqIGl0IGlzIHJldmVycyB0byBibG9iVG9CYXNlNjQoKVxuICAgICAqIEBwYXJhbSBiYXNlNjREYXRhXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gYmFzZTY0dG9CbG9iKFxuICAgICAgYmFzZTY0RGF0YTogc3RyaW5nLFxuICAgICAgY29udGVudFR5cGVPdmVycmlkZT86IENvcmVNb2RlbHMuQ29udGVudFR5cGUsXG4gICAgKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgICBsZXQgY29udGVudF90eXBlOiBDb3JlTW9kZWxzLkNvbnRlbnRUeXBlID0gdm9pZCAwIGFzIGFueTtcbiAgICAgIGxldCBmaWxlX2Jhc2U2NDogc3RyaW5nID0gdm9pZCAwIGFzIGFueTtcbiAgICAgIGlmICghY29udGVudFR5cGVPdmVycmlkZSkge1xuICAgICAgICBjb25zdCBtID0gL15kYXRhOiguKz8pO2Jhc2U2NCwoLispJC8uZXhlYyhiYXNlNjREYXRhKTtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFt0YW9uLWZyYW1ld29ya11bYmFzZTY0dG9CbG9iXSBOb3QgYSBiYXNlNjQgYmxvYiBbJHtiYXNlNjREYXRhfV1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgW19fLCBjb250ZW50dHlwZSwgZmlsZWJhc2U2NF0gPSBtO1xuICAgICAgICBjb250ZW50X3R5cGUgPSBjb250ZW50dHlwZSBhcyBhbnk7XG4gICAgICAgIGZpbGVfYmFzZTY0ID0gZmlsZWJhc2U2NDtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnRfdHlwZSA9IChcbiAgICAgICAgY29udGVudFR5cGVPdmVycmlkZSA/IGNvbnRlbnRUeXBlT3ZlcnJpZGUgOiBjb250ZW50X3R5cGUgfHwgJydcbiAgICAgICkgYXMgYW55O1xuICAgICAgYmFzZTY0RGF0YSA9IGNvbnRlbnRUeXBlT3ZlcnJpZGUgPyBiYXNlNjREYXRhIDogZmlsZV9iYXNlNjQ7XG4gICAgICBjb25zdCBzbGljZVNpemUgPSAxMDI0O1xuICAgICAgY29uc3QgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGJhc2U2NERhdGEpO1xuICAgICAgY29uc3QgYnl0ZXNMZW5ndGggPSBieXRlQ2hhcmFjdGVycy5sZW5ndGg7XG4gICAgICBjb25zdCBzbGljZXNDb3VudCA9IE1hdGguY2VpbChieXRlc0xlbmd0aCAvIHNsaWNlU2l6ZSk7XG4gICAgICBjb25zdCBieXRlQXJyYXlzID0gbmV3IEFycmF5KHNsaWNlc0NvdW50KTtcblxuICAgICAgZm9yIChsZXQgc2xpY2VJbmRleCA9IDA7IHNsaWNlSW5kZXggPCBzbGljZXNDb3VudDsgKytzbGljZUluZGV4KSB7XG4gICAgICAgIGNvbnN0IGJlZ2luID0gc2xpY2VJbmRleCAqIHNsaWNlU2l6ZTtcbiAgICAgICAgY29uc3QgZW5kID0gTWF0aC5taW4oYmVnaW4gKyBzbGljZVNpemUsIGJ5dGVzTGVuZ3RoKTtcblxuICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBBcnJheShlbmQgLSBiZWdpbik7XG5cbiAgICAgICAgZm9yIChsZXQgb2Zmc2V0ID0gYmVnaW4sIGkgPSAwOyBvZmZzZXQgPCBlbmQ7ICsraSwgKytvZmZzZXQpIHtcbiAgICAgICAgICBieXRlc1tpXSA9IGJ5dGVDaGFyYWN0ZXJzW29mZnNldF0uY2hhckNvZGVBdCgwKTtcbiAgICAgICAgfVxuICAgICAgICBieXRlQXJyYXlzW3NsaWNlSW5kZXhdID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBCbG9iKGJ5dGVBcnJheXMsIHsgdHlwZTogY29udGVudF90eXBlIH0pO1xuICAgIH1cblxuXG5cblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBiYXNlNjR0b0RiQmluYXJ5Rm9ybWF0KFxuICAgICAgdGV4dDogc3RyaW5nLFxuICAgICk6IFByb21pc2U8RGJCaW5hcnlGb3JtYXQ+IHtcbiAgICAgIGxldCByZXN1bHQ6IERiQmluYXJ5Rm9ybWF0O1xuXG4gICAgICByZXN1bHQgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoQkxPQl9TVVBQT1JURURfSU5fU1FMSlMpIHtcbiAgICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgYmFzZTY0dG9CbG9iKHRleHQpO1xuICAgICAgICAgIHJldHVybiBibG9iO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0IGFzIGFueTtcbiAgICAgIH0pKCk7XG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG5cblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBkYkJpbmFyeUZvcm1hdFRvQmFzZTY0KFxuICAgICAgYmluYXJ5Rm9ybWF0OiBEYkJpbmFyeUZvcm1hdCxcbiAgICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgbGV0IHJlc3VsdDogc3RyaW5nO1xuXG4gICAgICByZXN1bHQgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoQkxPQl9TVVBQT1JURURfSU5fU1FMSlMpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgYmxvYlRvQmFzZTY0KGJpbmFyeUZvcm1hdCBhcyBhbnkpO1xuICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiaW5hcnlGb3JtYXQgYXMgYW55O1xuICAgICAgfSkoKTtcblxuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuXG5cblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXh0VG9EYkJpbmFyeUZvcm1hdChcbiAgICAgIHRleHQ6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPERiQmluYXJ5Rm9ybWF0PiB7XG4gICAgICBsZXQgcmVzdWx0OiBEYkJpbmFyeUZvcm1hdDtcblxuICAgICAgcmVzdWx0ID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKEJMT0JfU1VQUE9SVEVEX0lOX1NRTEpTKSB7XG4gICAgICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHRleHRUb0Jsb2IodGV4dCk7XG4gICAgICAgICAgcmV0dXJuIGJsb2I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQgYXMgYW55O1xuICAgICAgfSkoKTtcblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRiQmluYXJ5Rm9ybWF0VG9UZXh0KFxuICAgICAgYmluYXJ5Rm9ybWF0OiBEYkJpbmFyeUZvcm1hdCxcbiAgICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgbGV0IHJlc3VsdDogc3RyaW5nO1xuXG4gICAgICByZXN1bHQgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoQkxPQl9TVVBQT1JURURfSU5fU1FMSlMpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgYmxvYlRvVGV4dChiaW5hcnlGb3JtYXQgYXMgYW55KTtcbiAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmluYXJ5Rm9ybWF0IGFzIGFueTtcbiAgICAgIH0pKCk7XG5cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cblxuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcblxuXG5cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gZmlsZVRvQmxvYihmaWxlOiBGaWxlKSB7XG4gICAgICByZXR1cm4gbmV3IEJsb2IoW25ldyBVaW50OEFycmF5KGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKSldLCB7XG4gICAgICAgIHR5cGU6IGZpbGUudHlwZSxcbiAgICAgIH0pO1xuICAgIH1cblxuXG5cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gYmxvYlRvRmlsZShcbiAgICAgIGJsb2I6IEJsb2IsXG4gICAgICBuYW1lRm9yRmlsZTogc3RyaW5nID0gJ215LWZpbGUtbmFtZScsXG4gICAgKTogUHJvbWlzZTxGaWxlPiB7XG4gICAgICBpZiAoIW5hbWVGb3JGaWxlKSB7XG4gICAgICAgIG5hbWVGb3JGaWxlID0gJ25vbmFtZWZpbGUnICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICB9XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IEZpbGUoW2Jsb2JdLCBuYW1lRm9yRmlsZSk7XG4gICAgfVxuXG5cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcblxuXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcblxuXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cblxuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5cblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXh0VG9CbG9iKFxuICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgdHlwZTogQ29yZU1vZGVscy5Db250ZW50VHlwZSA9ICd0ZXh0L3BsYWluJyxcbiAgICApOiBQcm9taXNlPEJsb2I+IHtcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbdGV4dF0sIHsgdHlwZSB9KTtcbiAgICAgIHJldHVybiBibG9iO1xuICAgIH1cblxuXG5cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gYmxvYlRvVGV4dChibG9iOiBCbG9iKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIHJldHVybiBhd2FpdCBibG9iLnRleHQoKTtcbiAgICB9XG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRleHRUb0ZpbGUoXG4gICAgICB0ZXh0OiBzdHJpbmcsXG4gICAgICBmaWxlUmVsYXRpdmVQYXRoT3JOYW1lOiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxGaWxlPiB7XG5cbiAgICAgIGNvbnN0IGV4dCA9IHBhdGguZXh0bmFtZShmaWxlUmVsYXRpdmVQYXRoT3JOYW1lKTtcblxuICAgICAgY29uc3QgdHlwZSA9IENvcmVNb2RlbHMubWltZVR5cGVzW2V4dF07XG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3RleHRdLCB7IHR5cGUgfSk7XG4gICAgICBjb25zdCBmaWxlID0gYXdhaXQgYmxvYlRvRmlsZShibG9iLCBmaWxlUmVsYXRpdmVQYXRoT3JOYW1lKTtcblxuXG5cblxuXG4gICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbGVUb1RleHQoZmlsZTogRmlsZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICByZXR1cm4gYXdhaXQgZmlsZS50ZXh0KCk7XG4gICAgfVxuXG5cblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBqc29uVG9CbG9iKGpzb25PYmo6IG9iamVjdCk6IFByb21pc2U8QmxvYj4ge1xuICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeShqc29uT2JqLCBudWxsLCAyKV0sIHtcbiAgICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gYmxvYjtcbiAgICB9XG5cblxuXG4gICAgLyoqXG4gICAgICogVE9ETyBOT1QgVEVTVEVEXG4gICAgICovXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJsb2JUb0pzb24oYmxvYjogQmxvYik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShhd2FpdCBibG9iLnRleHQoKSk7XG4gICAgfVxuXG5cblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCbG9iRnJvbSh1cmw6IHN0cmluZyk6IFByb21pc2U8QmxvYj4ge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IEF4aW9zUmVzcG9uc2U8QmxvYj4gPSBhd2FpdCBheGlvcyh7XG4gICAgICAgIHVybCxcbiAgICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH1cblxuICB9XG5cblxuXG4gIGV4cG9ydCBuYW1lc3BhY2UgY3NzIHtcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHBpeGVsc0NzcyBwaXhlbHMgZXguIDEwMHB4XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbnVtVmFsdWUocGl4ZWxzQ3NzOiBzdHJpbmcgfCBudW1iZXIpOiBudW1iZXIge1xuXG4gICAgICByZXR1cm4gcGFyc2VJbnQoXG4gICAgICAgIHBpeGVsc0Nzcz8udG9TdHJpbmcoKT8ucmVwbGFjZSgncHgnLCAnJyksXG5cblxuICAgICAgKTtcbiAgICB9XG5cbiAgfVxuXG59XG5cblxuXG5leHBvcnQgbmFtZXNwYWNlIFV0aWxzUHJvY2VzcyB7XG5cbiAgZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzU3RhcnRPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBieSBkZWZhdWx0IGlzIHByb2Nlc3MuY3dkKCk7XG4gICAgICovXG4gICAgY3dkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIGJ5IGRlZmF1bHQgaXMgZmFsc2VcbiAgICAgKi9cbiAgICBzaG93Q29tbWFuZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogTW9kaWZ5IG91dHB1dCBsaW5lIGJ5IGxpbmVcbiAgICAgKi9cbiAgICBvdXRwdXRMaW5lUmVwbGFjZT86IChvdXRwdXRMaW5lU3RkZXJPclN0ZG91dDogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgcmVzb2x2ZVByb21pc2VNc2c/OiB7XG4gICAgICAvKipcbiAgICAgICAqIHVudGlsIHRoaXMgc3RyaW5nIGlzIGluIG91dHB1dCBvZiBzdGRvdXRcbiAgICAgICAqL1xuICAgICAgc3Rkb3V0Pzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICAvKipcbiAgICAgICAqIHVudGlsIHRoaXMgc3RyaW5nIGlzIGluIG91dHB1dCBvZiBzdGRlcnJcbiAgICAgICAqL1xuICAgICAgc3RkZXJyPzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICAvKipcbiAgICAgICAqIGJ5IGRlZmF1bHQgb25seSByZXNvbHZlIHdoZW4gZXhpdCBjb2RlIGlzIDBcbiAgICAgICAqL1xuICAgICAgcmVzb2x2ZUFmdGVyQW55RXhpdENvZGU/OiBib29sZWFuO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUHJlZml4IG1lc3NhZ2VzIG91dHB1dCBmcm9tIGNoaWxkX3Byb2Nlc3NcbiAgICAgKi9cbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVHJ5IGNvbW1hbmQgYWdhaW4gYWZ0ZXIgZmFpbCBhZnRlciBuIG1pbGxpc2Vjb25kc1xuICAgICAqL1xuICAgIHRyeUFnYWluV2hlbkZhaWxBZnRlcj86IG51bWJlcjtcbiAgICBhc2tUb1RyeUFnYWluT25FcnJvcj86IGJvb2xlYW47XG4gICAgZXhpdE9uRXJyb3JDYWxsYmFjaz86IChjb2RlOiBudW1iZXIpID0+IHZvaWQ7XG4gICAgLyoqXG4gICAgICogVXNlIGJpZyBidWZmZXIgZm9yIGJpZyB3ZWJwYWNrIGxvZ3NcbiAgICAgKiAoaXQgbWF5IHNsb3cgZG93biBzbWFsbGVyIHByb2Nlc3NlcyBleGVjdXRpb24pXG4gICAgICovXG4gICAgYmlnZ2VyQnVmZmVyPzogYm9vbGVhbjtcbiAgICBoaWRlT3V0cHV0Pzoge1xuICAgICAgc3Rkb3V0PzogYm9vbGVhbjtcbiAgICAgIHN0ZGVycj86IGJvb2xlYW47XG4gICAgfTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogVE9ETyBJTVBMRU1FTlRcbiAgICogc3RhcnQgYXN5bmMgbm9kZSBwcm9jZXNzXG4gICAqL1xuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRBc3luYyhcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFByb2Nlc3NTdGFydE9wdGlvbnMsXG4gICkge1xuXG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIFRPRE8gSU1QTEVNRU5UXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gc3RhcnRTeW5jKGNvbW1hbmQ6IHN0cmluZywgb3B0aW9ucz86IFByb2Nlc3NTdGFydE9wdGlvbnMpIHtcblxuICB9XG5cblxuXG4gIGV4cG9ydCBjb25zdCBnZXRHaXRCYXNoUGF0aCA9ICgpID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIC8qKlxuICAgKiBUT0RPIElNUExFTUVOVFxuICAgKiBzdGFydCBhc3luYyBub2RlIHByb2Nlc3NcbiAgICovXG4gIGV4cG9ydCBjb25zdCBzdGFydEluTmV3VGVybWluYWxXaW5kb3cgPSAoXG4gICAgY29tbWFuZDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBQaWNrPFByb2Nlc3NTdGFydE9wdGlvbnMsICdjd2QnIHwgJ2hpZGVPdXRwdXQnPixcbiAgKSA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIGV4cG9ydCBjb25zdCBnZXRCYXNoT3JTaGVsbE5hbWUgPSAoKTpcbiAgICB8ICdicm93c2VyJ1xuICAgIHwgJ2NtZCdcbiAgICB8ICdwb3dlcnNoZWxsJ1xuICAgIHwgJ2dpdGJhc2gnXG4gICAgfCAnY3lnd2luJ1xuICAgIHwgJ3Vua25vd24nXG4gICAgfCAnYmFzaCdcbiAgICB8ICd6c2gnXG4gICAgfCAnZmlzaCdcbiAgICB8ICdzaCcgPT4ge1xuXG4gICAgcmV0dXJuICdicm93c2VyJztcblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cbn1cblxuXG5cblxuZXhwb3J0IG5hbWVzcGFjZSBVdGlsc09zIHtcblxuICAvKipcbiAgICogY2hlY2sgaWYgc2NyaXB0IGlzIHJ1bm5pbmcgaW4gY2xpZW50IGJyb3dzZXJcbiAgICogKHdlYnNxbCBtb2RlbCAtPiBpcyBhbHNvIGNvbnNpZGVyZWQgYXMgYnJvd3NlclxuICAgKiBiZWNhdXNlIGl0IGlzIHJ1bm5pbmcgaW4gYnJvd3NlcilcbiAgICovXG4gIGV4cG9ydCBjb25zdCBpc1J1bm5pbmdJbkJyb3dzZXIgPSAoKTogYm9vbGVhbiA9PiB7XG4vKiAqL1xuLyogKi9cbiAgXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cblxuXG4gIC8qKlxuICAgKiBjaGVjayBpZiBzY3JpcHQgaXMgcnVubmluZyBpbiBub2RlanNcbiAgICogKGJhY2tlbmQgc2NyaXB0IG9yIGVsZWN0cm9uIHNjcmlwdClcbiAgICovXG4gIGV4cG9ydCBjb25zdCBpc1J1bm5pbmdJbk5vZGUgPSAoKTogYm9vbGVhbiA9PiB7XG4vKiAqL1xuLyogKi9cbiAgXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG5cblxuICAvKipcbiAgICogY2hlY2sgaWYgc2NyaXB0IGlzIHJ1bm5pbmcgc3BlY2lhbFxuICAgKiBicm93c2VyIG1vZGUgdGhhdCBoYXMgc3FsLmpzIGJhY2tlbmRcbiAgICogYW5kIGV4ZWN1dGVzIHNxbCBxdWVyaWVzIGluIGJyb3dzZXJcbiAgICovXG4gIGV4cG9ydCBjb25zdCBpc1J1bm5pbmdJbldlYlNRTCA9ICgpOiBib29sZWFuID0+IHtcbi8qICovXG4vKiAqL1xuICBcblxuLyogKi9cbi8qICovXG4gIFxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuXG5cbiAgLyoqXG4gICAqIGNoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyBydW5uaW5nIGluc2lkZVxuICAgKiBFbGVjdHJvbiBiYWNrZW5kIG9yIGJyb3dzZXIuXG4gICAqL1xuICBleHBvcnQgY29uc3QgaXNSdW5uaW5nSW5FbGVjdHJvbiA9ICgpOiBib29sZWFuID0+IHtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJ1xuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICEhcHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvblxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgbmF2aWdhdG9yID09PSAnb2JqZWN0JyAmJlxuICAgICAgdHlwZW9mIG5hdmlnYXRvci51c2VyQWdlbnQgPT09ICdzdHJpbmcnICYmXG4gICAgICBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0VsZWN0cm9uJykgPj0gMFxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG5cblxuICAvKipcbiAgICogQ2hlY2sgd2V0aGVyIHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgcnVubmluZyBpbnNpZGVcbiAgICogd2luZG93cyBzdWJzeXN0ZW0gZm9yIGxpbnV4IChXU0wpLlxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IGlzUnVubmluZ0luV3NsID0gKCk6IGJvb2xlYW4gPT4ge1xuXG4gICAgIHJldHVybiBmYWxzZTtcblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuICBleHBvcnQgY29uc3QgaXNSdW5uaW5nSW5Eb2NrZXIgPSAoKTogYm9vbGVhbiA9PiB7XG5cbiAgICByZXR1cm4gZmFsc2U7XG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIGV4cG9ydCBjb25zdCBpc1J1bm5pbmdJbkxpbnV4R3JhcGhpY3NDYXBhYmxlRW52aXJvbm1lbnQgPSAoKTogYm9vbGVhbiA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxufVxuXG5cblxuZXhwb3J0IG5hbWVzcGFjZSBVdGlsc1N0cmluZyB7XG5cbiAgZXhwb3J0IGNvbnN0IGtlYmFiQ2FzZU5vU3BsaXROdW1iZXJzID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICBpbnB1dFxuXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrL2csICctJylcblxuICAgICAgICAucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywgJyQxLSQyJylcblxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gIH07XG5cbn1cblxuXG5cbi8qKlxuICogVGFvbiBtaWdyYXRpb24gdXRpbGl0aWVzXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgVXRpbHNNaWdyYXRpb25zIHtcbiAgZXhwb3J0IGNvbnN0IGdldFRpbWVzdGFtcEZyb21DbGFzc05hbWUgPSAoXG4gICAgY2xhc3NOYW1lOiBzdHJpbmcsXG4gICk6IG51bWJlciB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgW21heWJlVGltZXN0YW1wMSwgbWF5YmVUaW1lc3RhbXAyXSA9IGNsYXNzTmFtZS5zcGxpdCgnXycpIHx8IFtdO1xuXG4gICAgY29uc3QgdGltZXN0YW1wMSA9IHBhcnNlSW50KG1heWJlVGltZXN0YW1wMSk7XG4gICAgY29uc3QgdGltZXN0YW1wMiA9IHBhcnNlSW50KG1heWJlVGltZXN0YW1wMik7XG4gICAgY29uc3QgdGltZXN0YW1wID0gIV8uaXNOYU4odGltZXN0YW1wMSkgPyB0aW1lc3RhbXAxIDogdGltZXN0YW1wMjtcbiAgICByZXR1cm4gaXNWYWxpZFRpbWVzdGFtcCh0aW1lc3RhbXApID8gdGltZXN0YW1wIDogdm9pZCAwO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBnZXRGb3JtYXR0ZWRUaW1lc3RhbXBGcm9tQ2xhc3NOYW1lID0gKFxuICAgIGNsYXNzTmFtZTogc3RyaW5nLFxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IGdldFRpbWVzdGFtcEZyb21DbGFzc05hbWUoY2xhc3NOYW1lKTtcbiAgICBpZiAoIXRpbWVzdGFtcCkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdFRpbWVzdGFtcCh0aW1lc3RhbXApO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBmb3JtYXRUaW1lc3RhbXAgPSAodGltZXN0YW1wOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGRhdGVGcm9tVGltZXN0YW1wOiBEYXRlID0gbmV3IERhdGUodGltZXN0YW1wKTtcbiAgICByZXR1cm4gYCR7ZGF0ZWZvcm1hdChkYXRlRnJvbVRpbWVzdGFtcCwgJ2RkLW1tLXl5eXkgSEg6TU06c3MnKX1gO1xuICB9XG5cbiAgZXhwb3J0IGNvbnN0IGlzVmFsaWRUaW1lc3RhbXAgPSAodmFsdWU6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZmFsc2U7IC8vIE11c3QgYmUgYSBudW1iZXJcbiAgICB9XG5cbiAgICBjb25zdCBtaW5UaW1lc3RhbXAgPSAwOyAvLyBNaW5pbXVtIHBvc3NpYmxlIHRpbWVzdGFtcCAoVW5peCBlcG9jaClcbiAgICBjb25zdCBtYXhUaW1lc3RhbXAgPSA4NjQwMDAwMDAwMDAwMDAwOyAvLyBNYXggc2FmZSB0aW1lc3RhbXAgaW4gSlMgKHJlcHJlc2VudHMgeWVhciB+Mjc1NzYwKVxuXG4gICAgcmV0dXJuIHZhbHVlID49IG1pblRpbWVzdGFtcCAmJiB2YWx1ZSA8PSBtYXhUaW1lc3RhbXA7XG4gIH07XG59XG5cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRucC1jb3JlIGxpYi91dGlscy50cyJdfQ==