vitest 0.5.1 → 0.5.4
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.
- package/dist/cli-api-682b9694.js +10512 -0
- package/dist/cli.js +19 -1194
- package/dist/config.d.ts +2 -0
- package/dist/{diff-9b6e405f.js → diff-d3ddd21a.js} +3 -3
- package/dist/entry.js +10 -7
- package/dist/{globals-a8ef1d11.js → globals-75ad6839.js} +5 -5
- package/dist/{index-6fc76077.js → index-013ecdfe.js} +4 -4
- package/dist/{index-82d1238b.js → index-072c45fd.js} +5 -5
- package/dist/index-0996637f.js +1111 -0
- package/dist/index-0bdb518d.js +42 -0
- package/dist/{index-8241b65e.js → index-1945a7c3.js} +4 -5
- package/dist/index.d.ts +21 -2
- package/dist/index.js +4 -4
- package/dist/node.d.ts +11 -1
- package/dist/node.js +19 -15
- package/dist/{setup-e1322df2.js → setup-047a81dd.js} +3 -3
- package/dist/{source-map-1d79467f.js → source-map-b4f7fd10.js} +2 -2
- package/dist/vi-a4ac529d.js +5946 -0
- package/dist/worker.js +1 -1
- package/package.json +3 -3
- package/dist/create-7fef55ec.js +0 -9318
- package/dist/index-3a7599dc.js +0 -333
- package/dist/index-6e709f57.js +0 -782
- package/dist/index-dbe23279.js +0 -42
- package/dist/vi-669f0e0b.js +0 -5943
package/dist/cli.js
CHANGED
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import require$$0, { constants } from 'os';
|
|
9
|
-
import { s as signalExit } from './index-3a7599dc.js';
|
|
10
|
-
import { c, e as ensurePackageInstalled } from './index-6fc76077.js';
|
|
11
|
-
import { c as createVitest } from './create-7fef55ec.js';
|
|
12
|
-
import readline from 'readline';
|
|
2
|
+
import { s as startVitest } from './cli-api-682b9694.js';
|
|
3
|
+
import 'buffer';
|
|
4
|
+
import 'path';
|
|
5
|
+
import 'child_process';
|
|
6
|
+
import 'process';
|
|
7
|
+
import './index-0996637f.js';
|
|
13
8
|
import './_commonjsHelpers-c9e3b764.js';
|
|
14
9
|
import 'fs';
|
|
10
|
+
import 'assert';
|
|
15
11
|
import 'stream';
|
|
16
12
|
import 'util';
|
|
17
|
-
import '
|
|
13
|
+
import 'url';
|
|
14
|
+
import 'os';
|
|
15
|
+
import './index-013ecdfe.js';
|
|
18
16
|
import 'tty';
|
|
19
17
|
import 'local-pkg';
|
|
20
18
|
import './index-1488b423.js';
|
|
@@ -23,12 +21,14 @@ import './constants-c746dc5b.js';
|
|
|
23
21
|
import './client-4904f549.js';
|
|
24
22
|
import 'module';
|
|
25
23
|
import 'vm';
|
|
26
|
-
import './diff-
|
|
27
|
-
import './source-map-
|
|
24
|
+
import './diff-d3ddd21a.js';
|
|
25
|
+
import './source-map-b4f7fd10.js';
|
|
28
26
|
import 'perf_hooks';
|
|
29
27
|
import 'worker_threads';
|
|
30
28
|
import 'tinypool';
|
|
31
29
|
import './magic-string.es-94000aea.js';
|
|
30
|
+
import 'readline';
|
|
31
|
+
import './index-072c45fd.js';
|
|
32
32
|
|
|
33
33
|
function toArr(any) {
|
|
34
34
|
return any == null ? [] : Array.isArray(any) ? any : [any];
|
|
@@ -643,1148 +643,10 @@ class CAC extends EventEmitter {
|
|
|
643
643
|
|
|
644
644
|
const cac = (name = "") => new CAC(name);
|
|
645
645
|
|
|
646
|
-
|
|
647
|
-
const LF = typeof input === 'string' ? '\n' : '\n'.charCodeAt();
|
|
648
|
-
const CR = typeof input === 'string' ? '\r' : '\r'.charCodeAt();
|
|
649
|
-
|
|
650
|
-
if (input[input.length - 1] === LF) {
|
|
651
|
-
input = input.slice(0, -1);
|
|
652
|
-
}
|
|
653
|
-
|
|
654
|
-
if (input[input.length - 1] === CR) {
|
|
655
|
-
input = input.slice(0, -1);
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
return input;
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
function pathKey(options = {}) {
|
|
662
|
-
const {
|
|
663
|
-
env = process.env,
|
|
664
|
-
platform = process.platform
|
|
665
|
-
} = options;
|
|
666
|
-
|
|
667
|
-
if (platform !== 'win32') {
|
|
668
|
-
return 'PATH';
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
return Object.keys(env).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path';
|
|
672
|
-
}
|
|
673
|
-
|
|
674
|
-
function npmRunPath(options = {}) {
|
|
675
|
-
const {
|
|
676
|
-
cwd = process$1.cwd(),
|
|
677
|
-
path: path_ = process$1.env[pathKey()],
|
|
678
|
-
execPath = process$1.execPath,
|
|
679
|
-
} = options;
|
|
680
|
-
|
|
681
|
-
let previous;
|
|
682
|
-
const cwdString = cwd instanceof URL ? url.fileURLToPath(cwd) : cwd;
|
|
683
|
-
let cwdPath = path.resolve(cwdString);
|
|
684
|
-
const result = [];
|
|
685
|
-
|
|
686
|
-
while (previous !== cwdPath) {
|
|
687
|
-
result.push(path.join(cwdPath, 'node_modules/.bin'));
|
|
688
|
-
previous = cwdPath;
|
|
689
|
-
cwdPath = path.resolve(cwdPath, '..');
|
|
690
|
-
}
|
|
691
|
-
|
|
692
|
-
// Ensure the running `node` binary is used.
|
|
693
|
-
result.push(path.resolve(cwdString, execPath, '..'));
|
|
694
|
-
|
|
695
|
-
return [...result, path_].join(path.delimiter);
|
|
696
|
-
}
|
|
697
|
-
|
|
698
|
-
function npmRunPathEnv({env = process$1.env, ...options} = {}) {
|
|
699
|
-
env = {...env};
|
|
700
|
-
|
|
701
|
-
const path = pathKey({env});
|
|
702
|
-
options.path = env[path];
|
|
703
|
-
env[path] = npmRunPath(options);
|
|
704
|
-
|
|
705
|
-
return env;
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
const copyProperty = (to, from, property, ignoreNonConfigurable) => {
|
|
709
|
-
// `Function#length` should reflect the parameters of `to` not `from` since we keep its body.
|
|
710
|
-
// `Function#prototype` is non-writable and non-configurable so can never be modified.
|
|
711
|
-
if (property === 'length' || property === 'prototype') {
|
|
712
|
-
return;
|
|
713
|
-
}
|
|
714
|
-
|
|
715
|
-
// `Function#arguments` and `Function#caller` should not be copied. They were reported to be present in `Reflect.ownKeys` for some devices in React Native (#41), so we explicitly ignore them here.
|
|
716
|
-
if (property === 'arguments' || property === 'caller') {
|
|
717
|
-
return;
|
|
718
|
-
}
|
|
719
|
-
|
|
720
|
-
const toDescriptor = Object.getOwnPropertyDescriptor(to, property);
|
|
721
|
-
const fromDescriptor = Object.getOwnPropertyDescriptor(from, property);
|
|
722
|
-
|
|
723
|
-
if (!canCopyProperty(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {
|
|
724
|
-
return;
|
|
725
|
-
}
|
|
726
|
-
|
|
727
|
-
Object.defineProperty(to, property, fromDescriptor);
|
|
728
|
-
};
|
|
729
|
-
|
|
730
|
-
// `Object.defineProperty()` throws if the property exists, is not configurable and either:
|
|
731
|
-
// - one its descriptors is changed
|
|
732
|
-
// - it is non-writable and its value is changed
|
|
733
|
-
const canCopyProperty = function (toDescriptor, fromDescriptor) {
|
|
734
|
-
return toDescriptor === undefined || toDescriptor.configurable || (
|
|
735
|
-
toDescriptor.writable === fromDescriptor.writable &&
|
|
736
|
-
toDescriptor.enumerable === fromDescriptor.enumerable &&
|
|
737
|
-
toDescriptor.configurable === fromDescriptor.configurable &&
|
|
738
|
-
(toDescriptor.writable || toDescriptor.value === fromDescriptor.value)
|
|
739
|
-
);
|
|
740
|
-
};
|
|
741
|
-
|
|
742
|
-
const changePrototype = (to, from) => {
|
|
743
|
-
const fromPrototype = Object.getPrototypeOf(from);
|
|
744
|
-
if (fromPrototype === Object.getPrototypeOf(to)) {
|
|
745
|
-
return;
|
|
746
|
-
}
|
|
747
|
-
|
|
748
|
-
Object.setPrototypeOf(to, fromPrototype);
|
|
749
|
-
};
|
|
750
|
-
|
|
751
|
-
const wrappedToString = (withName, fromBody) => `/* Wrapped ${withName}*/\n${fromBody}`;
|
|
752
|
-
|
|
753
|
-
const toStringDescriptor = Object.getOwnPropertyDescriptor(Function.prototype, 'toString');
|
|
754
|
-
const toStringName = Object.getOwnPropertyDescriptor(Function.prototype.toString, 'name');
|
|
755
|
-
|
|
756
|
-
// We call `from.toString()` early (not lazily) to ensure `from` can be garbage collected.
|
|
757
|
-
// We use `bind()` instead of a closure for the same reason.
|
|
758
|
-
// Calling `from.toString()` early also allows caching it in case `to.toString()` is called several times.
|
|
759
|
-
const changeToString = (to, from, name) => {
|
|
760
|
-
const withName = name === '' ? '' : `with ${name.trim()}() `;
|
|
761
|
-
const newToString = wrappedToString.bind(null, withName, from.toString());
|
|
762
|
-
// Ensure `to.toString.toString` is non-enumerable and has the same `same`
|
|
763
|
-
Object.defineProperty(newToString, 'name', toStringName);
|
|
764
|
-
Object.defineProperty(to, 'toString', {...toStringDescriptor, value: newToString});
|
|
765
|
-
};
|
|
766
|
-
|
|
767
|
-
function mimicFunction(to, from, {ignoreNonConfigurable = false} = {}) {
|
|
768
|
-
const {name} = to;
|
|
769
|
-
|
|
770
|
-
for (const property of Reflect.ownKeys(from)) {
|
|
771
|
-
copyProperty(to, from, property, ignoreNonConfigurable);
|
|
772
|
-
}
|
|
773
|
-
|
|
774
|
-
changePrototype(to, from);
|
|
775
|
-
changeToString(to, from, name);
|
|
776
|
-
|
|
777
|
-
return to;
|
|
778
|
-
}
|
|
779
|
-
|
|
780
|
-
const calledFunctions = new WeakMap();
|
|
781
|
-
|
|
782
|
-
const onetime = (function_, options = {}) => {
|
|
783
|
-
if (typeof function_ !== 'function') {
|
|
784
|
-
throw new TypeError('Expected a function');
|
|
785
|
-
}
|
|
786
|
-
|
|
787
|
-
let returnValue;
|
|
788
|
-
let callCount = 0;
|
|
789
|
-
const functionName = function_.displayName || function_.name || '<anonymous>';
|
|
790
|
-
|
|
791
|
-
const onetime = function (...arguments_) {
|
|
792
|
-
calledFunctions.set(onetime, ++callCount);
|
|
793
|
-
|
|
794
|
-
if (callCount === 1) {
|
|
795
|
-
returnValue = function_.apply(this, arguments_);
|
|
796
|
-
function_ = null;
|
|
797
|
-
} else if (options.throw === true) {
|
|
798
|
-
throw new Error(`Function \`${functionName}\` can only be called once`);
|
|
799
|
-
}
|
|
800
|
-
|
|
801
|
-
return returnValue;
|
|
802
|
-
};
|
|
803
|
-
|
|
804
|
-
mimicFunction(onetime, function_);
|
|
805
|
-
calledFunctions.set(onetime, callCount);
|
|
806
|
-
|
|
807
|
-
return onetime;
|
|
808
|
-
};
|
|
809
|
-
|
|
810
|
-
onetime.callCount = function_ => {
|
|
811
|
-
if (!calledFunctions.has(function_)) {
|
|
812
|
-
throw new Error(`The given function \`${function_.name}\` is not wrapped by the \`onetime\` package`);
|
|
813
|
-
}
|
|
814
|
-
|
|
815
|
-
return calledFunctions.get(function_);
|
|
816
|
-
};
|
|
817
|
-
|
|
818
|
-
const getRealtimeSignals=function(){
|
|
819
|
-
const length=SIGRTMAX-SIGRTMIN+1;
|
|
820
|
-
return Array.from({length},getRealtimeSignal);
|
|
821
|
-
};
|
|
822
|
-
|
|
823
|
-
const getRealtimeSignal=function(value,index){
|
|
824
|
-
return {
|
|
825
|
-
name:`SIGRT${index+1}`,
|
|
826
|
-
number:SIGRTMIN+index,
|
|
827
|
-
action:"terminate",
|
|
828
|
-
description:"Application-specific signal (realtime)",
|
|
829
|
-
standard:"posix"};
|
|
830
|
-
|
|
831
|
-
};
|
|
832
|
-
|
|
833
|
-
const SIGRTMIN=34;
|
|
834
|
-
const SIGRTMAX=64;
|
|
835
|
-
|
|
836
|
-
const SIGNALS=[
|
|
837
|
-
{
|
|
838
|
-
name:"SIGHUP",
|
|
839
|
-
number:1,
|
|
840
|
-
action:"terminate",
|
|
841
|
-
description:"Terminal closed",
|
|
842
|
-
standard:"posix"},
|
|
843
|
-
|
|
844
|
-
{
|
|
845
|
-
name:"SIGINT",
|
|
846
|
-
number:2,
|
|
847
|
-
action:"terminate",
|
|
848
|
-
description:"User interruption with CTRL-C",
|
|
849
|
-
standard:"ansi"},
|
|
850
|
-
|
|
851
|
-
{
|
|
852
|
-
name:"SIGQUIT",
|
|
853
|
-
number:3,
|
|
854
|
-
action:"core",
|
|
855
|
-
description:"User interruption with CTRL-\\",
|
|
856
|
-
standard:"posix"},
|
|
857
|
-
|
|
858
|
-
{
|
|
859
|
-
name:"SIGILL",
|
|
860
|
-
number:4,
|
|
861
|
-
action:"core",
|
|
862
|
-
description:"Invalid machine instruction",
|
|
863
|
-
standard:"ansi"},
|
|
864
|
-
|
|
865
|
-
{
|
|
866
|
-
name:"SIGTRAP",
|
|
867
|
-
number:5,
|
|
868
|
-
action:"core",
|
|
869
|
-
description:"Debugger breakpoint",
|
|
870
|
-
standard:"posix"},
|
|
871
|
-
|
|
872
|
-
{
|
|
873
|
-
name:"SIGABRT",
|
|
874
|
-
number:6,
|
|
875
|
-
action:"core",
|
|
876
|
-
description:"Aborted",
|
|
877
|
-
standard:"ansi"},
|
|
878
|
-
|
|
879
|
-
{
|
|
880
|
-
name:"SIGIOT",
|
|
881
|
-
number:6,
|
|
882
|
-
action:"core",
|
|
883
|
-
description:"Aborted",
|
|
884
|
-
standard:"bsd"},
|
|
885
|
-
|
|
886
|
-
{
|
|
887
|
-
name:"SIGBUS",
|
|
888
|
-
number:7,
|
|
889
|
-
action:"core",
|
|
890
|
-
description:
|
|
891
|
-
"Bus error due to misaligned, non-existing address or paging error",
|
|
892
|
-
standard:"bsd"},
|
|
893
|
-
|
|
894
|
-
{
|
|
895
|
-
name:"SIGEMT",
|
|
896
|
-
number:7,
|
|
897
|
-
action:"terminate",
|
|
898
|
-
description:"Command should be emulated but is not implemented",
|
|
899
|
-
standard:"other"},
|
|
900
|
-
|
|
901
|
-
{
|
|
902
|
-
name:"SIGFPE",
|
|
903
|
-
number:8,
|
|
904
|
-
action:"core",
|
|
905
|
-
description:"Floating point arithmetic error",
|
|
906
|
-
standard:"ansi"},
|
|
907
|
-
|
|
908
|
-
{
|
|
909
|
-
name:"SIGKILL",
|
|
910
|
-
number:9,
|
|
911
|
-
action:"terminate",
|
|
912
|
-
description:"Forced termination",
|
|
913
|
-
standard:"posix",
|
|
914
|
-
forced:true},
|
|
915
|
-
|
|
916
|
-
{
|
|
917
|
-
name:"SIGUSR1",
|
|
918
|
-
number:10,
|
|
919
|
-
action:"terminate",
|
|
920
|
-
description:"Application-specific signal",
|
|
921
|
-
standard:"posix"},
|
|
922
|
-
|
|
923
|
-
{
|
|
924
|
-
name:"SIGSEGV",
|
|
925
|
-
number:11,
|
|
926
|
-
action:"core",
|
|
927
|
-
description:"Segmentation fault",
|
|
928
|
-
standard:"ansi"},
|
|
929
|
-
|
|
930
|
-
{
|
|
931
|
-
name:"SIGUSR2",
|
|
932
|
-
number:12,
|
|
933
|
-
action:"terminate",
|
|
934
|
-
description:"Application-specific signal",
|
|
935
|
-
standard:"posix"},
|
|
936
|
-
|
|
937
|
-
{
|
|
938
|
-
name:"SIGPIPE",
|
|
939
|
-
number:13,
|
|
940
|
-
action:"terminate",
|
|
941
|
-
description:"Broken pipe or socket",
|
|
942
|
-
standard:"posix"},
|
|
943
|
-
|
|
944
|
-
{
|
|
945
|
-
name:"SIGALRM",
|
|
946
|
-
number:14,
|
|
947
|
-
action:"terminate",
|
|
948
|
-
description:"Timeout or timer",
|
|
949
|
-
standard:"posix"},
|
|
950
|
-
|
|
951
|
-
{
|
|
952
|
-
name:"SIGTERM",
|
|
953
|
-
number:15,
|
|
954
|
-
action:"terminate",
|
|
955
|
-
description:"Termination",
|
|
956
|
-
standard:"ansi"},
|
|
957
|
-
|
|
958
|
-
{
|
|
959
|
-
name:"SIGSTKFLT",
|
|
960
|
-
number:16,
|
|
961
|
-
action:"terminate",
|
|
962
|
-
description:"Stack is empty or overflowed",
|
|
963
|
-
standard:"other"},
|
|
964
|
-
|
|
965
|
-
{
|
|
966
|
-
name:"SIGCHLD",
|
|
967
|
-
number:17,
|
|
968
|
-
action:"ignore",
|
|
969
|
-
description:"Child process terminated, paused or unpaused",
|
|
970
|
-
standard:"posix"},
|
|
971
|
-
|
|
972
|
-
{
|
|
973
|
-
name:"SIGCLD",
|
|
974
|
-
number:17,
|
|
975
|
-
action:"ignore",
|
|
976
|
-
description:"Child process terminated, paused or unpaused",
|
|
977
|
-
standard:"other"},
|
|
978
|
-
|
|
979
|
-
{
|
|
980
|
-
name:"SIGCONT",
|
|
981
|
-
number:18,
|
|
982
|
-
action:"unpause",
|
|
983
|
-
description:"Unpaused",
|
|
984
|
-
standard:"posix",
|
|
985
|
-
forced:true},
|
|
986
|
-
|
|
987
|
-
{
|
|
988
|
-
name:"SIGSTOP",
|
|
989
|
-
number:19,
|
|
990
|
-
action:"pause",
|
|
991
|
-
description:"Paused",
|
|
992
|
-
standard:"posix",
|
|
993
|
-
forced:true},
|
|
994
|
-
|
|
995
|
-
{
|
|
996
|
-
name:"SIGTSTP",
|
|
997
|
-
number:20,
|
|
998
|
-
action:"pause",
|
|
999
|
-
description:"Paused using CTRL-Z or \"suspend\"",
|
|
1000
|
-
standard:"posix"},
|
|
1001
|
-
|
|
1002
|
-
{
|
|
1003
|
-
name:"SIGTTIN",
|
|
1004
|
-
number:21,
|
|
1005
|
-
action:"pause",
|
|
1006
|
-
description:"Background process cannot read terminal input",
|
|
1007
|
-
standard:"posix"},
|
|
1008
|
-
|
|
1009
|
-
{
|
|
1010
|
-
name:"SIGBREAK",
|
|
1011
|
-
number:21,
|
|
1012
|
-
action:"terminate",
|
|
1013
|
-
description:"User interruption with CTRL-BREAK",
|
|
1014
|
-
standard:"other"},
|
|
1015
|
-
|
|
1016
|
-
{
|
|
1017
|
-
name:"SIGTTOU",
|
|
1018
|
-
number:22,
|
|
1019
|
-
action:"pause",
|
|
1020
|
-
description:"Background process cannot write to terminal output",
|
|
1021
|
-
standard:"posix"},
|
|
1022
|
-
|
|
1023
|
-
{
|
|
1024
|
-
name:"SIGURG",
|
|
1025
|
-
number:23,
|
|
1026
|
-
action:"ignore",
|
|
1027
|
-
description:"Socket received out-of-band data",
|
|
1028
|
-
standard:"bsd"},
|
|
1029
|
-
|
|
1030
|
-
{
|
|
1031
|
-
name:"SIGXCPU",
|
|
1032
|
-
number:24,
|
|
1033
|
-
action:"core",
|
|
1034
|
-
description:"Process timed out",
|
|
1035
|
-
standard:"bsd"},
|
|
1036
|
-
|
|
1037
|
-
{
|
|
1038
|
-
name:"SIGXFSZ",
|
|
1039
|
-
number:25,
|
|
1040
|
-
action:"core",
|
|
1041
|
-
description:"File too big",
|
|
1042
|
-
standard:"bsd"},
|
|
1043
|
-
|
|
1044
|
-
{
|
|
1045
|
-
name:"SIGVTALRM",
|
|
1046
|
-
number:26,
|
|
1047
|
-
action:"terminate",
|
|
1048
|
-
description:"Timeout or timer",
|
|
1049
|
-
standard:"bsd"},
|
|
1050
|
-
|
|
1051
|
-
{
|
|
1052
|
-
name:"SIGPROF",
|
|
1053
|
-
number:27,
|
|
1054
|
-
action:"terminate",
|
|
1055
|
-
description:"Timeout or timer",
|
|
1056
|
-
standard:"bsd"},
|
|
1057
|
-
|
|
1058
|
-
{
|
|
1059
|
-
name:"SIGWINCH",
|
|
1060
|
-
number:28,
|
|
1061
|
-
action:"ignore",
|
|
1062
|
-
description:"Terminal window size changed",
|
|
1063
|
-
standard:"bsd"},
|
|
1064
|
-
|
|
1065
|
-
{
|
|
1066
|
-
name:"SIGIO",
|
|
1067
|
-
number:29,
|
|
1068
|
-
action:"terminate",
|
|
1069
|
-
description:"I/O is available",
|
|
1070
|
-
standard:"other"},
|
|
1071
|
-
|
|
1072
|
-
{
|
|
1073
|
-
name:"SIGPOLL",
|
|
1074
|
-
number:29,
|
|
1075
|
-
action:"terminate",
|
|
1076
|
-
description:"Watched event",
|
|
1077
|
-
standard:"other"},
|
|
1078
|
-
|
|
1079
|
-
{
|
|
1080
|
-
name:"SIGINFO",
|
|
1081
|
-
number:29,
|
|
1082
|
-
action:"ignore",
|
|
1083
|
-
description:"Request for process information",
|
|
1084
|
-
standard:"other"},
|
|
1085
|
-
|
|
1086
|
-
{
|
|
1087
|
-
name:"SIGPWR",
|
|
1088
|
-
number:30,
|
|
1089
|
-
action:"terminate",
|
|
1090
|
-
description:"Device running out of power",
|
|
1091
|
-
standard:"systemv"},
|
|
1092
|
-
|
|
1093
|
-
{
|
|
1094
|
-
name:"SIGSYS",
|
|
1095
|
-
number:31,
|
|
1096
|
-
action:"core",
|
|
1097
|
-
description:"Invalid system call",
|
|
1098
|
-
standard:"other"},
|
|
1099
|
-
|
|
1100
|
-
{
|
|
1101
|
-
name:"SIGUNUSED",
|
|
1102
|
-
number:31,
|
|
1103
|
-
action:"terminate",
|
|
1104
|
-
description:"Invalid system call",
|
|
1105
|
-
standard:"other"}];
|
|
1106
|
-
|
|
1107
|
-
const getSignals=function(){
|
|
1108
|
-
const realtimeSignals=getRealtimeSignals();
|
|
1109
|
-
const signals=[...SIGNALS,...realtimeSignals].map(normalizeSignal);
|
|
1110
|
-
return signals;
|
|
1111
|
-
};
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
const normalizeSignal=function({
|
|
1120
|
-
name,
|
|
1121
|
-
number:defaultNumber,
|
|
1122
|
-
description,
|
|
1123
|
-
action,
|
|
1124
|
-
forced=false,
|
|
1125
|
-
standard})
|
|
1126
|
-
{
|
|
1127
|
-
const{
|
|
1128
|
-
signals:{[name]:constantSignal}}=
|
|
1129
|
-
constants;
|
|
1130
|
-
const supported=constantSignal!==undefined;
|
|
1131
|
-
const number=supported?constantSignal:defaultNumber;
|
|
1132
|
-
return {name,number,description,supported,action,forced,standard};
|
|
1133
|
-
};
|
|
1134
|
-
|
|
1135
|
-
const getSignalsByName=function(){
|
|
1136
|
-
const signals=getSignals();
|
|
1137
|
-
return signals.reduce(getSignalByName,{});
|
|
1138
|
-
};
|
|
1139
|
-
|
|
1140
|
-
const getSignalByName=function(
|
|
1141
|
-
signalByNameMemo,
|
|
1142
|
-
{name,number,description,supported,action,forced,standard})
|
|
1143
|
-
{
|
|
1144
|
-
return {
|
|
1145
|
-
...signalByNameMemo,
|
|
1146
|
-
[name]:{name,number,description,supported,action,forced,standard}};
|
|
1147
|
-
|
|
1148
|
-
};
|
|
1149
|
-
|
|
1150
|
-
const signalsByName=getSignalsByName();
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
const getSignalsByNumber=function(){
|
|
1156
|
-
const signals=getSignals();
|
|
1157
|
-
const length=SIGRTMAX+1;
|
|
1158
|
-
const signalsA=Array.from({length},(value,number)=>
|
|
1159
|
-
getSignalByNumber(number,signals));
|
|
1160
|
-
|
|
1161
|
-
return Object.assign({},...signalsA);
|
|
1162
|
-
};
|
|
1163
|
-
|
|
1164
|
-
const getSignalByNumber=function(number,signals){
|
|
1165
|
-
const signal=findSignalByNumber(number,signals);
|
|
1166
|
-
|
|
1167
|
-
if(signal===undefined){
|
|
1168
|
-
return {};
|
|
1169
|
-
}
|
|
1170
|
-
|
|
1171
|
-
const{name,description,supported,action,forced,standard}=signal;
|
|
1172
|
-
return {
|
|
1173
|
-
[number]:{
|
|
1174
|
-
name,
|
|
1175
|
-
number,
|
|
1176
|
-
description,
|
|
1177
|
-
supported,
|
|
1178
|
-
action,
|
|
1179
|
-
forced,
|
|
1180
|
-
standard}};
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
};
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
const findSignalByNumber=function(number,signals){
|
|
1188
|
-
const signal=signals.find(({name})=>constants.signals[name]===number);
|
|
1189
|
-
|
|
1190
|
-
if(signal!==undefined){
|
|
1191
|
-
return signal;
|
|
1192
|
-
}
|
|
1193
|
-
|
|
1194
|
-
return signals.find((signalA)=>signalA.number===number);
|
|
1195
|
-
};
|
|
1196
|
-
|
|
1197
|
-
getSignalsByNumber();
|
|
1198
|
-
|
|
1199
|
-
const getErrorPrefix = ({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled}) => {
|
|
1200
|
-
if (timedOut) {
|
|
1201
|
-
return `timed out after ${timeout} milliseconds`;
|
|
1202
|
-
}
|
|
1203
|
-
|
|
1204
|
-
if (isCanceled) {
|
|
1205
|
-
return 'was canceled';
|
|
1206
|
-
}
|
|
1207
|
-
|
|
1208
|
-
if (errorCode !== undefined) {
|
|
1209
|
-
return `failed with ${errorCode}`;
|
|
1210
|
-
}
|
|
1211
|
-
|
|
1212
|
-
if (signal !== undefined) {
|
|
1213
|
-
return `was killed with ${signal} (${signalDescription})`;
|
|
1214
|
-
}
|
|
1215
|
-
|
|
1216
|
-
if (exitCode !== undefined) {
|
|
1217
|
-
return `failed with exit code ${exitCode}`;
|
|
1218
|
-
}
|
|
1219
|
-
|
|
1220
|
-
return 'failed';
|
|
1221
|
-
};
|
|
1222
|
-
|
|
1223
|
-
const makeError = ({
|
|
1224
|
-
stdout,
|
|
1225
|
-
stderr,
|
|
1226
|
-
all,
|
|
1227
|
-
error,
|
|
1228
|
-
signal,
|
|
1229
|
-
exitCode,
|
|
1230
|
-
command,
|
|
1231
|
-
escapedCommand,
|
|
1232
|
-
timedOut,
|
|
1233
|
-
isCanceled,
|
|
1234
|
-
killed,
|
|
1235
|
-
parsed: {options: {timeout}},
|
|
1236
|
-
}) => {
|
|
1237
|
-
// `signal` and `exitCode` emitted on `spawned.on('exit')` event can be `null`.
|
|
1238
|
-
// We normalize them to `undefined`
|
|
1239
|
-
exitCode = exitCode === null ? undefined : exitCode;
|
|
1240
|
-
signal = signal === null ? undefined : signal;
|
|
1241
|
-
const signalDescription = signal === undefined ? undefined : signalsByName[signal].description;
|
|
1242
|
-
|
|
1243
|
-
const errorCode = error && error.code;
|
|
1244
|
-
|
|
1245
|
-
const prefix = getErrorPrefix({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled});
|
|
1246
|
-
const execaMessage = `Command ${prefix}: ${command}`;
|
|
1247
|
-
const isError = Object.prototype.toString.call(error) === '[object Error]';
|
|
1248
|
-
const shortMessage = isError ? `${execaMessage}\n${error.message}` : execaMessage;
|
|
1249
|
-
const message = [shortMessage, stderr, stdout].filter(Boolean).join('\n');
|
|
1250
|
-
|
|
1251
|
-
if (isError) {
|
|
1252
|
-
error.originalMessage = error.message;
|
|
1253
|
-
error.message = message;
|
|
1254
|
-
} else {
|
|
1255
|
-
error = new Error(message);
|
|
1256
|
-
}
|
|
1257
|
-
|
|
1258
|
-
error.shortMessage = shortMessage;
|
|
1259
|
-
error.command = command;
|
|
1260
|
-
error.escapedCommand = escapedCommand;
|
|
1261
|
-
error.exitCode = exitCode;
|
|
1262
|
-
error.signal = signal;
|
|
1263
|
-
error.signalDescription = signalDescription;
|
|
1264
|
-
error.stdout = stdout;
|
|
1265
|
-
error.stderr = stderr;
|
|
1266
|
-
|
|
1267
|
-
if (all !== undefined) {
|
|
1268
|
-
error.all = all;
|
|
1269
|
-
}
|
|
1270
|
-
|
|
1271
|
-
if ('bufferedData' in error) {
|
|
1272
|
-
delete error.bufferedData;
|
|
1273
|
-
}
|
|
1274
|
-
|
|
1275
|
-
error.failed = true;
|
|
1276
|
-
error.timedOut = Boolean(timedOut);
|
|
1277
|
-
error.isCanceled = isCanceled;
|
|
1278
|
-
error.killed = killed && !timedOut;
|
|
1279
|
-
|
|
1280
|
-
return error;
|
|
1281
|
-
};
|
|
1282
|
-
|
|
1283
|
-
const aliases = ['stdin', 'stdout', 'stderr'];
|
|
1284
|
-
|
|
1285
|
-
const hasAlias = options => aliases.some(alias => options[alias] !== undefined);
|
|
1286
|
-
|
|
1287
|
-
const normalizeStdio = options => {
|
|
1288
|
-
if (!options) {
|
|
1289
|
-
return;
|
|
1290
|
-
}
|
|
1291
|
-
|
|
1292
|
-
const {stdio} = options;
|
|
1293
|
-
|
|
1294
|
-
if (stdio === undefined) {
|
|
1295
|
-
return aliases.map(alias => options[alias]);
|
|
1296
|
-
}
|
|
1297
|
-
|
|
1298
|
-
if (hasAlias(options)) {
|
|
1299
|
-
throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${aliases.map(alias => `\`${alias}\``).join(', ')}`);
|
|
1300
|
-
}
|
|
1301
|
-
|
|
1302
|
-
if (typeof stdio === 'string') {
|
|
1303
|
-
return stdio;
|
|
1304
|
-
}
|
|
1305
|
-
|
|
1306
|
-
if (!Array.isArray(stdio)) {
|
|
1307
|
-
throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof stdio}\``);
|
|
1308
|
-
}
|
|
1309
|
-
|
|
1310
|
-
const length = Math.max(stdio.length, aliases.length);
|
|
1311
|
-
return Array.from({length}, (value, index) => stdio[index]);
|
|
1312
|
-
};
|
|
1313
|
-
|
|
1314
|
-
const DEFAULT_FORCE_KILL_TIMEOUT = 1000 * 5;
|
|
1315
|
-
|
|
1316
|
-
// Monkey-patches `childProcess.kill()` to add `forceKillAfterTimeout` behavior
|
|
1317
|
-
const spawnedKill = (kill, signal = 'SIGTERM', options = {}) => {
|
|
1318
|
-
const killResult = kill(signal);
|
|
1319
|
-
setKillTimeout(kill, signal, options, killResult);
|
|
1320
|
-
return killResult;
|
|
1321
|
-
};
|
|
1322
|
-
|
|
1323
|
-
const setKillTimeout = (kill, signal, options, killResult) => {
|
|
1324
|
-
if (!shouldForceKill(signal, options, killResult)) {
|
|
1325
|
-
return;
|
|
1326
|
-
}
|
|
1327
|
-
|
|
1328
|
-
const timeout = getForceKillAfterTimeout(options);
|
|
1329
|
-
const t = setTimeout(() => {
|
|
1330
|
-
kill('SIGKILL');
|
|
1331
|
-
}, timeout);
|
|
1332
|
-
|
|
1333
|
-
// Guarded because there's no `.unref()` when `execa` is used in the renderer
|
|
1334
|
-
// process in Electron. This cannot be tested since we don't run tests in
|
|
1335
|
-
// Electron.
|
|
1336
|
-
// istanbul ignore else
|
|
1337
|
-
if (t.unref) {
|
|
1338
|
-
t.unref();
|
|
1339
|
-
}
|
|
1340
|
-
};
|
|
1341
|
-
|
|
1342
|
-
const shouldForceKill = (signal, {forceKillAfterTimeout}, killResult) => isSigterm(signal) && forceKillAfterTimeout !== false && killResult;
|
|
1343
|
-
|
|
1344
|
-
const isSigterm = signal => signal === require$$0.constants.signals.SIGTERM
|
|
1345
|
-
|| (typeof signal === 'string' && signal.toUpperCase() === 'SIGTERM');
|
|
1346
|
-
|
|
1347
|
-
const getForceKillAfterTimeout = ({forceKillAfterTimeout = true}) => {
|
|
1348
|
-
if (forceKillAfterTimeout === true) {
|
|
1349
|
-
return DEFAULT_FORCE_KILL_TIMEOUT;
|
|
1350
|
-
}
|
|
1351
|
-
|
|
1352
|
-
if (!Number.isFinite(forceKillAfterTimeout) || forceKillAfterTimeout < 0) {
|
|
1353
|
-
throw new TypeError(`Expected the \`forceKillAfterTimeout\` option to be a non-negative integer, got \`${forceKillAfterTimeout}\` (${typeof forceKillAfterTimeout})`);
|
|
1354
|
-
}
|
|
1355
|
-
|
|
1356
|
-
return forceKillAfterTimeout;
|
|
1357
|
-
};
|
|
1358
|
-
|
|
1359
|
-
// `childProcess.cancel()`
|
|
1360
|
-
const spawnedCancel = (spawned, context) => {
|
|
1361
|
-
const killResult = spawned.kill();
|
|
1362
|
-
|
|
1363
|
-
if (killResult) {
|
|
1364
|
-
context.isCanceled = true;
|
|
1365
|
-
}
|
|
1366
|
-
};
|
|
1367
|
-
|
|
1368
|
-
const timeoutKill = (spawned, signal, reject) => {
|
|
1369
|
-
spawned.kill(signal);
|
|
1370
|
-
reject(Object.assign(new Error('Timed out'), {timedOut: true, signal}));
|
|
1371
|
-
};
|
|
1372
|
-
|
|
1373
|
-
// `timeout` option handling
|
|
1374
|
-
const setupTimeout = (spawned, {timeout, killSignal = 'SIGTERM'}, spawnedPromise) => {
|
|
1375
|
-
if (timeout === 0 || timeout === undefined) {
|
|
1376
|
-
return spawnedPromise;
|
|
1377
|
-
}
|
|
1378
|
-
|
|
1379
|
-
let timeoutId;
|
|
1380
|
-
const timeoutPromise = new Promise((resolve, reject) => {
|
|
1381
|
-
timeoutId = setTimeout(() => {
|
|
1382
|
-
timeoutKill(spawned, killSignal, reject);
|
|
1383
|
-
}, timeout);
|
|
1384
|
-
});
|
|
1385
|
-
|
|
1386
|
-
const safeSpawnedPromise = spawnedPromise.finally(() => {
|
|
1387
|
-
clearTimeout(timeoutId);
|
|
1388
|
-
});
|
|
1389
|
-
|
|
1390
|
-
return Promise.race([timeoutPromise, safeSpawnedPromise]);
|
|
1391
|
-
};
|
|
1392
|
-
|
|
1393
|
-
const validateTimeout = ({timeout}) => {
|
|
1394
|
-
if (timeout !== undefined && (!Number.isFinite(timeout) || timeout < 0)) {
|
|
1395
|
-
throw new TypeError(`Expected the \`timeout\` option to be a non-negative integer, got \`${timeout}\` (${typeof timeout})`);
|
|
1396
|
-
}
|
|
1397
|
-
};
|
|
1398
|
-
|
|
1399
|
-
// `cleanup` option handling
|
|
1400
|
-
const setExitHandler = async (spawned, {cleanup, detached}, timedPromise) => {
|
|
1401
|
-
if (!cleanup || detached) {
|
|
1402
|
-
return timedPromise;
|
|
1403
|
-
}
|
|
1404
|
-
|
|
1405
|
-
const removeExitHandler = signalExit(() => {
|
|
1406
|
-
spawned.kill();
|
|
1407
|
-
});
|
|
1408
|
-
|
|
1409
|
-
return timedPromise.finally(() => {
|
|
1410
|
-
removeExitHandler();
|
|
1411
|
-
});
|
|
1412
|
-
};
|
|
1413
|
-
|
|
1414
|
-
function isStream(stream) {
|
|
1415
|
-
return stream !== null
|
|
1416
|
-
&& typeof stream === 'object'
|
|
1417
|
-
&& typeof stream.pipe === 'function';
|
|
1418
|
-
}
|
|
1419
|
-
|
|
1420
|
-
// `input` option
|
|
1421
|
-
const handleInput = (spawned, input) => {
|
|
1422
|
-
// Checking for stdin is workaround for https://github.com/nodejs/node/issues/26852
|
|
1423
|
-
// @todo remove `|| spawned.stdin === undefined` once we drop support for Node.js <=12.2.0
|
|
1424
|
-
if (input === undefined || spawned.stdin === undefined) {
|
|
1425
|
-
return;
|
|
1426
|
-
}
|
|
1427
|
-
|
|
1428
|
-
if (isStream(input)) {
|
|
1429
|
-
input.pipe(spawned.stdin);
|
|
1430
|
-
} else {
|
|
1431
|
-
spawned.stdin.end(input);
|
|
1432
|
-
}
|
|
1433
|
-
};
|
|
1434
|
-
|
|
1435
|
-
// `all` interleaves `stdout` and `stderr`
|
|
1436
|
-
const makeAllStream = (spawned, {all}) => {
|
|
1437
|
-
if (!all || (!spawned.stdout && !spawned.stderr)) {
|
|
1438
|
-
return;
|
|
1439
|
-
}
|
|
1440
|
-
|
|
1441
|
-
const mixed = mergeStream();
|
|
1442
|
-
|
|
1443
|
-
if (spawned.stdout) {
|
|
1444
|
-
mixed.add(spawned.stdout);
|
|
1445
|
-
}
|
|
1446
|
-
|
|
1447
|
-
if (spawned.stderr) {
|
|
1448
|
-
mixed.add(spawned.stderr);
|
|
1449
|
-
}
|
|
1450
|
-
|
|
1451
|
-
return mixed;
|
|
1452
|
-
};
|
|
1453
|
-
|
|
1454
|
-
// On failure, `result.stdout|stderr|all` should contain the currently buffered stream
|
|
1455
|
-
const getBufferedData = async (stream, streamPromise) => {
|
|
1456
|
-
if (!stream) {
|
|
1457
|
-
return;
|
|
1458
|
-
}
|
|
1459
|
-
|
|
1460
|
-
stream.destroy();
|
|
1461
|
-
|
|
1462
|
-
try {
|
|
1463
|
-
return await streamPromise;
|
|
1464
|
-
} catch (error) {
|
|
1465
|
-
return error.bufferedData;
|
|
1466
|
-
}
|
|
1467
|
-
};
|
|
1468
|
-
|
|
1469
|
-
const getStreamPromise = (stream, {encoding, buffer, maxBuffer}) => {
|
|
1470
|
-
if (!stream || !buffer) {
|
|
1471
|
-
return;
|
|
1472
|
-
}
|
|
1473
|
-
|
|
1474
|
-
if (encoding) {
|
|
1475
|
-
return getStream(stream, {encoding, maxBuffer});
|
|
1476
|
-
}
|
|
1477
|
-
|
|
1478
|
-
return getStream.buffer(stream, {maxBuffer});
|
|
1479
|
-
};
|
|
1480
|
-
|
|
1481
|
-
// Retrieve result of child process: exit code, signal, error, streams (stdout/stderr/all)
|
|
1482
|
-
const getSpawnedResult = async ({stdout, stderr, all}, {encoding, buffer, maxBuffer}, processDone) => {
|
|
1483
|
-
const stdoutPromise = getStreamPromise(stdout, {encoding, buffer, maxBuffer});
|
|
1484
|
-
const stderrPromise = getStreamPromise(stderr, {encoding, buffer, maxBuffer});
|
|
1485
|
-
const allPromise = getStreamPromise(all, {encoding, buffer, maxBuffer: maxBuffer * 2});
|
|
1486
|
-
|
|
1487
|
-
try {
|
|
1488
|
-
return await Promise.all([processDone, stdoutPromise, stderrPromise, allPromise]);
|
|
1489
|
-
} catch (error) {
|
|
1490
|
-
return Promise.all([
|
|
1491
|
-
{error, signal: error.signal, timedOut: error.timedOut},
|
|
1492
|
-
getBufferedData(stdout, stdoutPromise),
|
|
1493
|
-
getBufferedData(stderr, stderrPromise),
|
|
1494
|
-
getBufferedData(all, allPromise),
|
|
1495
|
-
]);
|
|
1496
|
-
}
|
|
1497
|
-
};
|
|
1498
|
-
|
|
1499
|
-
const nativePromisePrototype = (async () => {})().constructor.prototype;
|
|
1500
|
-
const descriptors = ['then', 'catch', 'finally'].map(property => [
|
|
1501
|
-
property,
|
|
1502
|
-
Reflect.getOwnPropertyDescriptor(nativePromisePrototype, property),
|
|
1503
|
-
]);
|
|
1504
|
-
|
|
1505
|
-
// The return value is a mixin of `childProcess` and `Promise`
|
|
1506
|
-
const mergePromise = (spawned, promise) => {
|
|
1507
|
-
for (const [property, descriptor] of descriptors) {
|
|
1508
|
-
// Starting the main `promise` is deferred to avoid consuming streams
|
|
1509
|
-
const value = typeof promise === 'function'
|
|
1510
|
-
? (...args) => Reflect.apply(descriptor.value, promise(), args)
|
|
1511
|
-
: descriptor.value.bind(promise);
|
|
1512
|
-
|
|
1513
|
-
Reflect.defineProperty(spawned, property, {...descriptor, value});
|
|
1514
|
-
}
|
|
1515
|
-
|
|
1516
|
-
return spawned;
|
|
1517
|
-
};
|
|
1518
|
-
|
|
1519
|
-
// Use promises instead of `child_process` events
|
|
1520
|
-
const getSpawnedPromise = spawned => new Promise((resolve, reject) => {
|
|
1521
|
-
spawned.on('exit', (exitCode, signal) => {
|
|
1522
|
-
resolve({exitCode, signal});
|
|
1523
|
-
});
|
|
1524
|
-
|
|
1525
|
-
spawned.on('error', error => {
|
|
1526
|
-
reject(error);
|
|
1527
|
-
});
|
|
1528
|
-
|
|
1529
|
-
if (spawned.stdin) {
|
|
1530
|
-
spawned.stdin.on('error', error => {
|
|
1531
|
-
reject(error);
|
|
1532
|
-
});
|
|
1533
|
-
}
|
|
1534
|
-
});
|
|
1535
|
-
|
|
1536
|
-
const normalizeArgs = (file, args = []) => {
|
|
1537
|
-
if (!Array.isArray(args)) {
|
|
1538
|
-
return [file];
|
|
1539
|
-
}
|
|
1540
|
-
|
|
1541
|
-
return [file, ...args];
|
|
1542
|
-
};
|
|
1543
|
-
|
|
1544
|
-
const NO_ESCAPE_REGEXP = /^[\w.-]+$/;
|
|
1545
|
-
const DOUBLE_QUOTES_REGEXP = /"/g;
|
|
1546
|
-
|
|
1547
|
-
const escapeArg = arg => {
|
|
1548
|
-
if (typeof arg !== 'string' || NO_ESCAPE_REGEXP.test(arg)) {
|
|
1549
|
-
return arg;
|
|
1550
|
-
}
|
|
1551
|
-
|
|
1552
|
-
return `"${arg.replace(DOUBLE_QUOTES_REGEXP, '\\"')}"`;
|
|
1553
|
-
};
|
|
1554
|
-
|
|
1555
|
-
const joinCommand = (file, args) => normalizeArgs(file, args).join(' ');
|
|
1556
|
-
|
|
1557
|
-
const getEscapedCommand = (file, args) => normalizeArgs(file, args).map(arg => escapeArg(arg)).join(' ');
|
|
1558
|
-
|
|
1559
|
-
const DEFAULT_MAX_BUFFER = 1000 * 1000 * 100;
|
|
1560
|
-
|
|
1561
|
-
const getEnv = ({env: envOption, extendEnv, preferLocal, localDir, execPath}) => {
|
|
1562
|
-
const env = extendEnv ? {...process$1.env, ...envOption} : envOption;
|
|
1563
|
-
|
|
1564
|
-
if (preferLocal) {
|
|
1565
|
-
return npmRunPathEnv({env, cwd: localDir, execPath});
|
|
1566
|
-
}
|
|
1567
|
-
|
|
1568
|
-
return env;
|
|
1569
|
-
};
|
|
1570
|
-
|
|
1571
|
-
const handleArguments = (file, args, options = {}) => {
|
|
1572
|
-
const parsed = crossSpawn._parse(file, args, options);
|
|
1573
|
-
file = parsed.command;
|
|
1574
|
-
args = parsed.args;
|
|
1575
|
-
options = parsed.options;
|
|
1576
|
-
|
|
1577
|
-
options = {
|
|
1578
|
-
maxBuffer: DEFAULT_MAX_BUFFER,
|
|
1579
|
-
buffer: true,
|
|
1580
|
-
stripFinalNewline: true,
|
|
1581
|
-
extendEnv: true,
|
|
1582
|
-
preferLocal: false,
|
|
1583
|
-
localDir: options.cwd || process$1.cwd(),
|
|
1584
|
-
execPath: process$1.execPath,
|
|
1585
|
-
encoding: 'utf8',
|
|
1586
|
-
reject: true,
|
|
1587
|
-
cleanup: true,
|
|
1588
|
-
all: false,
|
|
1589
|
-
windowsHide: true,
|
|
1590
|
-
...options,
|
|
1591
|
-
};
|
|
1592
|
-
|
|
1593
|
-
options.env = getEnv(options);
|
|
1594
|
-
|
|
1595
|
-
options.stdio = normalizeStdio(options);
|
|
1596
|
-
|
|
1597
|
-
if (process$1.platform === 'win32' && path.basename(file, '.exe') === 'cmd') {
|
|
1598
|
-
// #116
|
|
1599
|
-
args.unshift('/q');
|
|
1600
|
-
}
|
|
1601
|
-
|
|
1602
|
-
return {file, args, options, parsed};
|
|
1603
|
-
};
|
|
1604
|
-
|
|
1605
|
-
const handleOutput = (options, value, error) => {
|
|
1606
|
-
if (typeof value !== 'string' && !Buffer.isBuffer(value)) {
|
|
1607
|
-
// When `execaSync()` errors, we normalize it to '' to mimic `execa()`
|
|
1608
|
-
return error === undefined ? undefined : '';
|
|
1609
|
-
}
|
|
1610
|
-
|
|
1611
|
-
if (options.stripFinalNewline) {
|
|
1612
|
-
return stripFinalNewline(value);
|
|
1613
|
-
}
|
|
1614
|
-
|
|
1615
|
-
return value;
|
|
1616
|
-
};
|
|
1617
|
-
|
|
1618
|
-
function execa(file, args, options) {
|
|
1619
|
-
const parsed = handleArguments(file, args, options);
|
|
1620
|
-
const command = joinCommand(file, args);
|
|
1621
|
-
const escapedCommand = getEscapedCommand(file, args);
|
|
1622
|
-
|
|
1623
|
-
validateTimeout(parsed.options);
|
|
1624
|
-
|
|
1625
|
-
let spawned;
|
|
1626
|
-
try {
|
|
1627
|
-
spawned = childProcess.spawn(parsed.file, parsed.args, parsed.options);
|
|
1628
|
-
} catch (error) {
|
|
1629
|
-
// Ensure the returned error is always both a promise and a child process
|
|
1630
|
-
const dummySpawned = new childProcess.ChildProcess();
|
|
1631
|
-
const errorPromise = Promise.reject(makeError({
|
|
1632
|
-
error,
|
|
1633
|
-
stdout: '',
|
|
1634
|
-
stderr: '',
|
|
1635
|
-
all: '',
|
|
1636
|
-
command,
|
|
1637
|
-
escapedCommand,
|
|
1638
|
-
parsed,
|
|
1639
|
-
timedOut: false,
|
|
1640
|
-
isCanceled: false,
|
|
1641
|
-
killed: false,
|
|
1642
|
-
}));
|
|
1643
|
-
return mergePromise(dummySpawned, errorPromise);
|
|
1644
|
-
}
|
|
1645
|
-
|
|
1646
|
-
const spawnedPromise = getSpawnedPromise(spawned);
|
|
1647
|
-
const timedPromise = setupTimeout(spawned, parsed.options, spawnedPromise);
|
|
1648
|
-
const processDone = setExitHandler(spawned, parsed.options, timedPromise);
|
|
1649
|
-
|
|
1650
|
-
const context = {isCanceled: false};
|
|
1651
|
-
|
|
1652
|
-
spawned.kill = spawnedKill.bind(null, spawned.kill.bind(spawned));
|
|
1653
|
-
spawned.cancel = spawnedCancel.bind(null, spawned, context);
|
|
1654
|
-
|
|
1655
|
-
const handlePromise = async () => {
|
|
1656
|
-
const [{error, exitCode, signal, timedOut}, stdoutResult, stderrResult, allResult] = await getSpawnedResult(spawned, parsed.options, processDone);
|
|
1657
|
-
const stdout = handleOutput(parsed.options, stdoutResult);
|
|
1658
|
-
const stderr = handleOutput(parsed.options, stderrResult);
|
|
1659
|
-
const all = handleOutput(parsed.options, allResult);
|
|
1660
|
-
|
|
1661
|
-
if (error || exitCode !== 0 || signal !== null) {
|
|
1662
|
-
const returnedError = makeError({
|
|
1663
|
-
error,
|
|
1664
|
-
exitCode,
|
|
1665
|
-
signal,
|
|
1666
|
-
stdout,
|
|
1667
|
-
stderr,
|
|
1668
|
-
all,
|
|
1669
|
-
command,
|
|
1670
|
-
escapedCommand,
|
|
1671
|
-
parsed,
|
|
1672
|
-
timedOut,
|
|
1673
|
-
isCanceled: context.isCanceled || (parsed.options.signal ? parsed.options.signal.aborted : false),
|
|
1674
|
-
killed: spawned.killed,
|
|
1675
|
-
});
|
|
1676
|
-
|
|
1677
|
-
if (!parsed.options.reject) {
|
|
1678
|
-
return returnedError;
|
|
1679
|
-
}
|
|
1680
|
-
|
|
1681
|
-
throw returnedError;
|
|
1682
|
-
}
|
|
1683
|
-
|
|
1684
|
-
return {
|
|
1685
|
-
command,
|
|
1686
|
-
escapedCommand,
|
|
1687
|
-
exitCode: 0,
|
|
1688
|
-
stdout,
|
|
1689
|
-
stderr,
|
|
1690
|
-
all,
|
|
1691
|
-
failed: false,
|
|
1692
|
-
timedOut: false,
|
|
1693
|
-
isCanceled: false,
|
|
1694
|
-
killed: false,
|
|
1695
|
-
};
|
|
1696
|
-
};
|
|
1697
|
-
|
|
1698
|
-
const handlePromiseOnce = onetime(handlePromise);
|
|
1699
|
-
|
|
1700
|
-
handleInput(spawned, parsed.options.input);
|
|
1701
|
-
|
|
1702
|
-
spawned.all = makeAllStream(spawned, parsed.options);
|
|
1703
|
-
|
|
1704
|
-
return mergePromise(spawned, handlePromiseOnce);
|
|
1705
|
-
}
|
|
1706
|
-
|
|
1707
|
-
var version = "0.5.1";
|
|
1708
|
-
|
|
1709
|
-
const keys = [
|
|
1710
|
-
["a", "rerun all tests"],
|
|
1711
|
-
["f", "rerun only failed tests"],
|
|
1712
|
-
["u", "update snapshot"],
|
|
1713
|
-
["t", "filter by a test name regex pattern"],
|
|
1714
|
-
["q", "quit"]
|
|
1715
|
-
];
|
|
1716
|
-
function printShortcutsHelp() {
|
|
1717
|
-
process.stdout.write(`
|
|
1718
|
-
${c.bold(" Watch Usage")}
|
|
1719
|
-
${keys.map((i) => c.dim(" press ") + c.reset(c.bold(i[0])) + c.dim(` to ${i[1]}`)).join("\n")}
|
|
1720
|
-
`);
|
|
1721
|
-
}
|
|
1722
|
-
function useChangePattern(ctx) {
|
|
1723
|
-
let namePattern = "";
|
|
1724
|
-
let changingPattern = false;
|
|
1725
|
-
function backspace() {
|
|
1726
|
-
readline.moveCursor(process.stdout, -1, process.stdout.rows);
|
|
1727
|
-
process.stdout.write(" ");
|
|
1728
|
-
readline.moveCursor(process.stdout, -1, process.stdout.rows);
|
|
1729
|
-
}
|
|
1730
|
-
function end() {
|
|
1731
|
-
ctx.changeNamePattern(namePattern, void 0, "change pattern");
|
|
1732
|
-
namePattern = "";
|
|
1733
|
-
changingPattern = false;
|
|
1734
|
-
}
|
|
1735
|
-
function start() {
|
|
1736
|
-
process.stdout.write(`
|
|
1737
|
-
${c.bgMagenta(" FILTER ")} ${c.magenta("Filter tests by their name (using regexp):")} `);
|
|
1738
|
-
changingPattern = true;
|
|
1739
|
-
}
|
|
1740
|
-
function append(str, key) {
|
|
1741
|
-
if (key.name === "backspace") {
|
|
1742
|
-
namePattern = namePattern.slice(0, namePattern.length - 1);
|
|
1743
|
-
backspace();
|
|
1744
|
-
} else {
|
|
1745
|
-
namePattern += str;
|
|
1746
|
-
process.stdout.write(str);
|
|
1747
|
-
}
|
|
1748
|
-
}
|
|
1749
|
-
return {
|
|
1750
|
-
get isChanging() {
|
|
1751
|
-
return changingPattern;
|
|
1752
|
-
},
|
|
1753
|
-
end,
|
|
1754
|
-
start,
|
|
1755
|
-
append
|
|
1756
|
-
};
|
|
1757
|
-
}
|
|
1758
|
-
function registerConsoleShortcuts(ctx) {
|
|
1759
|
-
const pattern = useChangePattern(ctx);
|
|
1760
|
-
readline.emitKeypressEvents(process.stdin);
|
|
1761
|
-
process.stdin.setRawMode(true);
|
|
1762
|
-
process.stdin.on("keypress", (str, key) => {
|
|
1763
|
-
if (str === "" || str === "" || key && key.ctrl && key.name === "c")
|
|
1764
|
-
return ctx.exit(true);
|
|
1765
|
-
if (ctx.runningPromise)
|
|
1766
|
-
return;
|
|
1767
|
-
const name = key == null ? void 0 : key.name;
|
|
1768
|
-
if (pattern.isChanging) {
|
|
1769
|
-
if (name === "return")
|
|
1770
|
-
return pattern.end();
|
|
1771
|
-
return pattern.append(str, key);
|
|
1772
|
-
}
|
|
1773
|
-
if (name === "h")
|
|
1774
|
-
return printShortcutsHelp();
|
|
1775
|
-
if (name === "u")
|
|
1776
|
-
return ctx.updateSnapshot();
|
|
1777
|
-
if (name === "a" || name === "return")
|
|
1778
|
-
return ctx.rerunFiles(void 0, "rerun all");
|
|
1779
|
-
if (name === "t")
|
|
1780
|
-
return pattern.start();
|
|
1781
|
-
if (name === "q")
|
|
1782
|
-
return ctx.exit(true);
|
|
1783
|
-
});
|
|
1784
|
-
}
|
|
646
|
+
var version = "0.5.4";
|
|
1785
647
|
|
|
1786
648
|
const cli = cac("vitest");
|
|
1787
|
-
cli.version(version).option("-r, --root <path>", "root path").option("-c, --config <path>", "path to config file").option("-u, --update", "update snapshot").option("-w, --watch", "watch mode").option("-t, --testNamePattern <pattern>", "run
|
|
649
|
+
cli.version(version).option("-r, --root <path>", "root path").option("-c, --config <path>", "path to config file").option("-u, --update", "update snapshot").option("-w, --watch", "watch mode").option("-t, --testNamePattern <pattern>", "run tests with full names matching the specified pattern").option("--ui", "enable UI").option("--open", "open UI automatically (default: !process.env.CI))").option("--api [api]", "serve API, available options: --api.port <port>, --api.host [host] and --api.strictPort").option("--threads", "enabled threads (default: true)").option("--silent", "silent console output from tests").option("--isolate", "isolate environment for each test file (default: true)").option("--reporter <name>", "reporter").option("--outputFile <filename>", "write test results to a file when the --reporter=json option is also specified").option("--coverage", "use c8 for coverage").option("--run", "do not watch").option("--mode", "override Vite mode (default: test)").option("--globals", "inject apis globally").option("--global", "deprecated, use --globals").option("--dom", "mock browser api with happy-dom").option("--environment <env>", "runner environment (default: node)").option("--passWithNoTests", "pass when no tests found").option("--allowOnly", "Allow tests and suites that are marked as only (default: !process.env.CI)").help();
|
|
1788
650
|
cli.command("run [...filters]").action(run);
|
|
1789
651
|
cli.command("related [...filters]").action(runRelated);
|
|
1790
652
|
cli.command("watch [...filters]").action(start);
|
|
@@ -1801,44 +663,7 @@ async function run(cliFilters, options) {
|
|
|
1801
663
|
await start(cliFilters, options);
|
|
1802
664
|
}
|
|
1803
665
|
async function start(cliFilters, options) {
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
process.env.VITEST = "true";
|
|
1807
|
-
(_a = process.env).NODE_ENV ?? (_a.NODE_ENV = options.mode || "test");
|
|
1808
|
-
if (options.run)
|
|
1809
|
-
options.watch = false;
|
|
1810
|
-
if (!await ensurePackageInstalled("vite"))
|
|
1811
|
-
process.exit(1);
|
|
1812
|
-
if (typeof options.coverage === "boolean")
|
|
1813
|
-
options.coverage = { enabled: options.coverage };
|
|
1814
|
-
const ctx = await createVitest(options);
|
|
1815
|
-
if (ctx.config.coverage.enabled) {
|
|
1816
|
-
if (!await ensurePackageInstalled("c8"))
|
|
1817
|
-
process.exit(1);
|
|
1818
|
-
if (!process.env.NODE_V8_COVERAGE) {
|
|
1819
|
-
process.env.NODE_V8_COVERAGE = ctx.config.coverage.tempDirectory;
|
|
1820
|
-
const { exitCode } = await execa(process.argv0, process.argv.slice(1), { stdio: "inherit", reject: false });
|
|
1821
|
-
process.exit(exitCode);
|
|
1822
|
-
}
|
|
1823
|
-
}
|
|
1824
|
-
if (ctx.config.environment && ctx.config.environment !== "node") {
|
|
1825
|
-
if (!await ensurePackageInstalled(ctx.config.environment))
|
|
1826
|
-
process.exit(1);
|
|
1827
|
-
}
|
|
1828
|
-
if (process.stdin.isTTY && ctx.config.watch)
|
|
1829
|
-
registerConsoleShortcuts(ctx);
|
|
1830
|
-
process.chdir(ctx.config.root);
|
|
1831
|
-
ctx.onServerRestarted(() => {
|
|
1832
|
-
ctx.start(cliFilters);
|
|
1833
|
-
});
|
|
1834
|
-
try {
|
|
1835
|
-
await ctx.start(cliFilters);
|
|
1836
|
-
} catch (e) {
|
|
1837
|
-
process.exitCode = 1;
|
|
1838
|
-
throw e;
|
|
1839
|
-
} finally {
|
|
1840
|
-
if (!ctx.config.watch)
|
|
1841
|
-
await ctx.exit();
|
|
1842
|
-
}
|
|
666
|
+
if (await startVitest(cliFilters, options) === false)
|
|
667
|
+
process.exit();
|
|
1843
668
|
}
|
|
1844
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2FjQDYuNy4xMi9ub2RlX21vZHVsZXMvY2FjL2Rpc3QvaW5kZXgubWpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmlwLWZpbmFsLW5ld2xpbmVAMy4wLjAvbm9kZV9tb2R1bGVzL3N0cmlwLWZpbmFsLW5ld2xpbmUvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcGF0aC1rZXlANC4wLjAvbm9kZV9tb2R1bGVzL3BhdGgta2V5L2luZGV4LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL25wbS1ydW4tcGF0aEA1LjEuMC9ub2RlX21vZHVsZXMvbnBtLXJ1bi1wYXRoL2luZGV4LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pbWljLWZuQDQuMC4wL25vZGVfbW9kdWxlcy9taW1pYy1mbi9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9vbmV0aW1lQDYuMC4wL25vZGVfbW9kdWxlcy9vbmV0aW1lL2luZGV4LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2h1bWFuLXNpZ25hbHNAMy4wLjEvbm9kZV9tb2R1bGVzL2h1bWFuLXNpZ25hbHMvYnVpbGQvc3JjL3JlYWx0aW1lLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2h1bWFuLXNpZ25hbHNAMy4wLjEvbm9kZV9tb2R1bGVzL2h1bWFuLXNpZ25hbHMvYnVpbGQvc3JjL2NvcmUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vaHVtYW4tc2lnbmFsc0AzLjAuMS9ub2RlX21vZHVsZXMvaHVtYW4tc2lnbmFscy9idWlsZC9zcmMvc2lnbmFscy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9odW1hbi1zaWduYWxzQDMuMC4xL25vZGVfbW9kdWxlcy9odW1hbi1zaWduYWxzL2J1aWxkL3NyYy9tYWluLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2V4ZWNhQDYuMS4wL25vZGVfbW9kdWxlcy9leGVjYS9saWIvZXJyb3IuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vZXhlY2FANi4xLjAvbm9kZV9tb2R1bGVzL2V4ZWNhL2xpYi9zdGRpby5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9leGVjYUA2LjEuMC9ub2RlX21vZHVsZXMvZXhlY2EvbGliL2tpbGwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vaXMtc3RyZWFtQDMuMC4wL25vZGVfbW9kdWxlcy9pcy1zdHJlYW0vaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vZXhlY2FANi4xLjAvbm9kZV9tb2R1bGVzL2V4ZWNhL2xpYi9zdHJlYW0uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vZXhlY2FANi4xLjAvbm9kZV9tb2R1bGVzL2V4ZWNhL2xpYi9wcm9taXNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2V4ZWNhQDYuMS4wL25vZGVfbW9kdWxlcy9leGVjYS9saWIvY29tbWFuZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9leGVjYUA2LjEuMC9ub2RlX21vZHVsZXMvZXhlY2EvaW5kZXguanMiLCIuLi9zcmMvbm9kZS9zdGRpbi50cyIsIi4uL3NyYy9ub2RlL2NsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuXG5mdW5jdGlvbiB0b0FycihhbnkpIHtcblx0cmV0dXJuIGFueSA9PSBudWxsID8gW10gOiBBcnJheS5pc0FycmF5KGFueSkgPyBhbnkgOiBbYW55XTtcbn1cblxuZnVuY3Rpb24gdG9WYWwob3V0LCBrZXksIHZhbCwgb3B0cykge1xuXHR2YXIgeCwgb2xkPW91dFtrZXldLCBueHQ9KFxuXHRcdCEhfm9wdHMuc3RyaW5nLmluZGV4T2Yoa2V5KSA/ICh2YWwgPT0gbnVsbCB8fCB2YWwgPT09IHRydWUgPyAnJyA6IFN0cmluZyh2YWwpKVxuXHRcdDogdHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nID8gdmFsXG5cdFx0OiAhIX5vcHRzLmJvb2xlYW4uaW5kZXhPZihrZXkpID8gKHZhbCA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDogdmFsID09PSAndHJ1ZScgfHwgKG91dC5fLnB1c2goKHggPSArdmFsLHggKiAwID09PSAwKSA/IHggOiB2YWwpLCEhdmFsKSlcblx0XHQ6ICh4ID0gK3ZhbCx4ICogMCA9PT0gMCkgPyB4IDogdmFsXG5cdCk7XG5cdG91dFtrZXldID0gb2xkID09IG51bGwgPyBueHQgOiAoQXJyYXkuaXNBcnJheShvbGQpID8gb2xkLmNvbmNhdChueHQpIDogW29sZCwgbnh0XSk7XG59XG5cbmZ1bmN0aW9uIG1yaTIgKGFyZ3MsIG9wdHMpIHtcblx0YXJncyA9IGFyZ3MgfHwgW107XG5cdG9wdHMgPSBvcHRzIHx8IHt9O1xuXG5cdHZhciBrLCBhcnIsIGFyZywgbmFtZSwgdmFsLCBvdXQ9eyBfOltdIH07XG5cdHZhciBpPTAsIGo9MCwgaWR4PTAsIGxlbj1hcmdzLmxlbmd0aDtcblxuXHRjb25zdCBhbGliaSA9IG9wdHMuYWxpYXMgIT09IHZvaWQgMDtcblx0Y29uc3Qgc3RyaWN0ID0gb3B0cy51bmtub3duICE9PSB2b2lkIDA7XG5cdGNvbnN0IGRlZmF1bHRzID0gb3B0cy5kZWZhdWx0ICE9PSB2b2lkIDA7XG5cblx0b3B0cy5hbGlhcyA9IG9wdHMuYWxpYXMgfHwge307XG5cdG9wdHMuc3RyaW5nID0gdG9BcnIob3B0cy5zdHJpbmcpO1xuXHRvcHRzLmJvb2xlYW4gPSB0b0FycihvcHRzLmJvb2xlYW4pO1xuXG5cdGlmIChhbGliaSkge1xuXHRcdGZvciAoayBpbiBvcHRzLmFsaWFzKSB7XG5cdFx0XHRhcnIgPSBvcHRzLmFsaWFzW2tdID0gdG9BcnIob3B0cy5hbGlhc1trXSk7XG5cdFx0XHRmb3IgKGk9MDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQob3B0cy5hbGlhc1thcnJbaV1dID0gYXJyLmNvbmNhdChrKSkuc3BsaWNlKGksIDEpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZvciAoaT1vcHRzLmJvb2xlYW4ubGVuZ3RoOyBpLS0gPiAwOykge1xuXHRcdGFyciA9IG9wdHMuYWxpYXNbb3B0cy5ib29sZWFuW2ldXSB8fCBbXTtcblx0XHRmb3IgKGo9YXJyLmxlbmd0aDsgai0tID4gMDspIG9wdHMuYm9vbGVhbi5wdXNoKGFycltqXSk7XG5cdH1cblxuXHRmb3IgKGk9b3B0cy5zdHJpbmcubGVuZ3RoOyBpLS0gPiAwOykge1xuXHRcdGFyciA9IG9wdHMuYWxpYXNbb3B0cy5zdHJpbmdbaV1dIHx8IFtdO1xuXHRcdGZvciAoaj1hcnIubGVuZ3RoOyBqLS0gPiAwOykgb3B0cy5zdHJpbmcucHVzaChhcnJbal0pO1xuXHR9XG5cblx0aWYgKGRlZmF1bHRzKSB7XG5cdFx0Zm9yIChrIGluIG9wdHMuZGVmYXVsdCkge1xuXHRcdFx0bmFtZSA9IHR5cGVvZiBvcHRzLmRlZmF1bHRba107XG5cdFx0XHRhcnIgPSBvcHRzLmFsaWFzW2tdID0gb3B0cy5hbGlhc1trXSB8fCBbXTtcblx0XHRcdGlmIChvcHRzW25hbWVdICE9PSB2b2lkIDApIHtcblx0XHRcdFx0b3B0c1tuYW1lXS5wdXNoKGspO1xuXHRcdFx0XHRmb3IgKGk9MDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdG9wdHNbbmFtZV0ucHVzaChhcnJbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qga2V5cyA9IHN0cmljdCA/IE9iamVjdC5rZXlzKG9wdHMuYWxpYXMpIDogW107XG5cblx0Zm9yIChpPTA7IGkgPCBsZW47IGkrKykge1xuXHRcdGFyZyA9IGFyZ3NbaV07XG5cblx0XHRpZiAoYXJnID09PSAnLS0nKSB7XG5cdFx0XHRvdXQuXyA9IG91dC5fLmNvbmNhdChhcmdzLnNsaWNlKCsraSkpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0Zm9yIChqPTA7IGogPCBhcmcubGVuZ3RoOyBqKyspIHtcblx0XHRcdGlmIChhcmcuY2hhckNvZGVBdChqKSAhPT0gNDUpIGJyZWFrOyAvLyBcIi1cIlxuXHRcdH1cblxuXHRcdGlmIChqID09PSAwKSB7XG5cdFx0XHRvdXQuXy5wdXNoKGFyZyk7XG5cdFx0fSBlbHNlIGlmIChhcmcuc3Vic3RyaW5nKGosIGogKyAzKSA9PT0gJ25vLScpIHtcblx0XHRcdG5hbWUgPSBhcmcuc3Vic3RyaW5nKGogKyAzKTtcblx0XHRcdGlmIChzdHJpY3QgJiYgIX5rZXlzLmluZGV4T2YobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIG9wdHMudW5rbm93bihhcmcpO1xuXHRcdFx0fVxuXHRcdFx0b3V0W25hbWVdID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoaWR4PWorMTsgaWR4IDwgYXJnLmxlbmd0aDsgaWR4KyspIHtcblx0XHRcdFx0aWYgKGFyZy5jaGFyQ29kZUF0KGlkeCkgPT09IDYxKSBicmVhazsgLy8gXCI9XCJcblx0XHRcdH1cblxuXHRcdFx0bmFtZSA9IGFyZy5zdWJzdHJpbmcoaiwgaWR4KTtcblx0XHRcdHZhbCA9IGFyZy5zdWJzdHJpbmcoKytpZHgpIHx8IChpKzEgPT09IGxlbiB8fCAoJycrYXJnc1tpKzFdKS5jaGFyQ29kZUF0KDApID09PSA0NSB8fCBhcmdzWysraV0pO1xuXHRcdFx0YXJyID0gKGogPT09IDIgPyBbbmFtZV0gOiBuYW1lKTtcblxuXHRcdFx0Zm9yIChpZHg9MDsgaWR4IDwgYXJyLmxlbmd0aDsgaWR4KyspIHtcblx0XHRcdFx0bmFtZSA9IGFycltpZHhdO1xuXHRcdFx0XHRpZiAoc3RyaWN0ICYmICF+a2V5cy5pbmRleE9mKG5hbWUpKSByZXR1cm4gb3B0cy51bmtub3duKCctJy5yZXBlYXQoaikgKyBuYW1lKTtcblx0XHRcdFx0dG9WYWwob3V0LCBuYW1lLCAoaWR4ICsgMSA8IGFyci5sZW5ndGgpIHx8IHZhbCwgb3B0cyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKGRlZmF1bHRzKSB7XG5cdFx0Zm9yIChrIGluIG9wdHMuZGVmYXVsdCkge1xuXHRcdFx0aWYgKG91dFtrXSA9PT0gdm9pZCAwKSB7XG5cdFx0XHRcdG91dFtrXSA9IG9wdHMuZGVmYXVsdFtrXTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoYWxpYmkpIHtcblx0XHRmb3IgKGsgaW4gb3V0KSB7XG5cdFx0XHRhcnIgPSBvcHRzLmFsaWFzW2tdIHx8IFtdO1xuXHRcdFx0d2hpbGUgKGFyci5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG91dFthcnIuc2hpZnQoKV0gPSBvdXRba107XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG91dDtcbn1cblxuY29uc3QgcmVtb3ZlQnJhY2tldHMgPSAodikgPT4gdi5yZXBsYWNlKC9bPFtdLisvLCBcIlwiKS50cmltKCk7XG5jb25zdCBmaW5kQWxsQnJhY2tldHMgPSAodikgPT4ge1xuICBjb25zdCBBTkdMRURfQlJBQ0tFVF9SRV9HTE9CQUwgPSAvPChbXj5dKyk+L2c7XG4gIGNvbnN0IFNRVUFSRV9CUkFDS0VUX1JFX0dMT0JBTCA9IC9cXFsoW15cXF1dKylcXF0vZztcbiAgY29uc3QgcmVzID0gW107XG4gIGNvbnN0IHBhcnNlID0gKG1hdGNoKSA9PiB7XG4gICAgbGV0IHZhcmlhZGljID0gZmFsc2U7XG4gICAgbGV0IHZhbHVlID0gbWF0Y2hbMV07XG4gICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCIuLi5cIikpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMyk7XG4gICAgICB2YXJpYWRpYyA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICByZXF1aXJlZDogbWF0Y2hbMF0uc3RhcnRzV2l0aChcIjxcIiksXG4gICAgICB2YWx1ZSxcbiAgICAgIHZhcmlhZGljXG4gICAgfTtcbiAgfTtcbiAgbGV0IGFuZ2xlZE1hdGNoO1xuICB3aGlsZSAoYW5nbGVkTWF0Y2ggPSBBTkdMRURfQlJBQ0tFVF9SRV9HTE9CQUwuZXhlYyh2KSkge1xuICAgIHJlcy5wdXNoKHBhcnNlKGFuZ2xlZE1hdGNoKSk7XG4gIH1cbiAgbGV0IHNxdWFyZU1hdGNoO1xuICB3aGlsZSAoc3F1YXJlTWF0Y2ggPSBTUVVBUkVfQlJBQ0tFVF9SRV9HTE9CQUwuZXhlYyh2KSkge1xuICAgIHJlcy5wdXNoKHBhcnNlKHNxdWFyZU1hdGNoKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5jb25zdCBnZXRNcmlPcHRpb25zID0gKG9wdGlvbnMpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0ge2FsaWFzOiB7fSwgYm9vbGVhbjogW119O1xuICBmb3IgKGNvbnN0IFtpbmRleCwgb3B0aW9uXSBvZiBvcHRpb25zLmVudHJpZXMoKSkge1xuICAgIGlmIChvcHRpb24ubmFtZXMubGVuZ3RoID4gMSkge1xuICAgICAgcmVzdWx0LmFsaWFzW29wdGlvbi5uYW1lc1swXV0gPSBvcHRpb24ubmFtZXMuc2xpY2UoMSk7XG4gICAgfVxuICAgIGlmIChvcHRpb24uaXNCb29sZWFuKSB7XG4gICAgICBpZiAob3B0aW9uLm5lZ2F0ZWQpIHtcbiAgICAgICAgY29uc3QgaGFzU3RyaW5nVHlwZU9wdGlvbiA9IG9wdGlvbnMuc29tZSgobywgaSkgPT4ge1xuICAgICAgICAgIHJldHVybiBpICE9PSBpbmRleCAmJiBvLm5hbWVzLnNvbWUoKG5hbWUpID0+IG9wdGlvbi5uYW1lcy5pbmNsdWRlcyhuYW1lKSkgJiYgdHlwZW9mIG8ucmVxdWlyZWQgPT09IFwiYm9vbGVhblwiO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFoYXNTdHJpbmdUeXBlT3B0aW9uKSB7XG4gICAgICAgICAgcmVzdWx0LmJvb2xlYW4ucHVzaChvcHRpb24ubmFtZXNbMF0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQuYm9vbGVhbi5wdXNoKG9wdGlvbi5uYW1lc1swXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgZmluZExvbmdlc3QgPSAoYXJyKSA9PiB7XG4gIHJldHVybiBhcnIuc29ydCgoYSwgYikgPT4ge1xuICAgIHJldHVybiBhLmxlbmd0aCA+IGIubGVuZ3RoID8gLTEgOiAxO1xuICB9KVswXTtcbn07XG5jb25zdCBwYWRSaWdodCA9IChzdHIsIGxlbmd0aCkgPT4ge1xuICByZXR1cm4gc3RyLmxlbmd0aCA+PSBsZW5ndGggPyBzdHIgOiBgJHtzdHJ9JHtcIiBcIi5yZXBlYXQobGVuZ3RoIC0gc3RyLmxlbmd0aCl9YDtcbn07XG5jb25zdCBjYW1lbGNhc2UgPSAoaW5wdXQpID0+IHtcbiAgcmV0dXJuIGlucHV0LnJlcGxhY2UoLyhbYS16XSktKFthLXpdKS9nLCAoXywgcDEsIHAyKSA9PiB7XG4gICAgcmV0dXJuIHAxICsgcDIudG9VcHBlckNhc2UoKTtcbiAgfSk7XG59O1xuY29uc3Qgc2V0RG90UHJvcCA9IChvYmosIGtleXMsIHZhbCkgPT4ge1xuICBsZXQgaSA9IDA7XG4gIGxldCBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgbGV0IHQgPSBvYmo7XG4gIGxldCB4O1xuICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgeCA9IHRba2V5c1tpXV07XG4gICAgdCA9IHRba2V5c1tpXV0gPSBpID09PSBsZW5ndGggLSAxID8gdmFsIDogeCAhPSBudWxsID8geCA6ICEhfmtleXNbaSArIDFdLmluZGV4T2YoXCIuXCIpIHx8ICEoK2tleXNbaSArIDFdID4gLTEpID8ge30gOiBbXTtcbiAgfVxufTtcbmNvbnN0IHNldEJ5VHlwZSA9IChvYmosIHRyYW5zZm9ybXMpID0+IHtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModHJhbnNmb3JtcykpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm1zW2tleV07XG4gICAgaWYgKHRyYW5zZm9ybS5zaG91bGRUcmFuc2Zvcm0pIHtcbiAgICAgIG9ialtrZXldID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5jYWxsKFtdLCBvYmpba2V5XSk7XG4gICAgICBpZiAodHlwZW9mIHRyYW5zZm9ybS50cmFuc2Zvcm1GdW5jdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9ialtrZXldID0gb2JqW2tleV0ubWFwKHRyYW5zZm9ybS50cmFuc2Zvcm1GdW5jdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuY29uc3QgZ2V0RmlsZU5hbWUgPSAoaW5wdXQpID0+IHtcbiAgY29uc3QgbSA9IC8oW15cXFxcXFwvXSspJC8uZXhlYyhpbnB1dCk7XG4gIHJldHVybiBtID8gbVsxXSA6IFwiXCI7XG59O1xuY29uc3QgY2FtZWxjYXNlT3B0aW9uTmFtZSA9IChuYW1lKSA9PiB7XG4gIHJldHVybiBuYW1lLnNwbGl0KFwiLlwiKS5tYXAoKHYsIGkpID0+IHtcbiAgICByZXR1cm4gaSA9PT0gMCA/IGNhbWVsY2FzZSh2KSA6IHY7XG4gIH0pLmpvaW4oXCIuXCIpO1xufTtcbmNsYXNzIENBQ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGlmICh0eXBlb2YgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IobWVzc2FnZSkuc3RhY2s7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIE9wdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJhd05hbWUsIGRlc2NyaXB0aW9uLCBjb25maWcpIHtcbiAgICB0aGlzLnJhd05hbWUgPSByYXdOYW1lO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZyk7XG4gICAgcmF3TmFtZSA9IHJhd05hbWUucmVwbGFjZSgvXFwuXFwqL2csIFwiXCIpO1xuICAgIHRoaXMubmVnYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMubmFtZXMgPSByZW1vdmVCcmFja2V0cyhyYXdOYW1lKS5zcGxpdChcIixcIikubWFwKCh2KSA9PiB7XG4gICAgICBsZXQgbmFtZSA9IHYudHJpbSgpLnJlcGxhY2UoL14tezEsMn0vLCBcIlwiKTtcbiAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoXCJuby1cIikpIHtcbiAgICAgICAgdGhpcy5uZWdhdGVkID0gdHJ1ZTtcbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvXm5vLS8sIFwiXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhbWVsY2FzZU9wdGlvbk5hbWUobmFtZSk7XG4gICAgfSkuc29ydCgoYSwgYikgPT4gYS5sZW5ndGggPiBiLmxlbmd0aCA/IDEgOiAtMSk7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5uYW1lc1t0aGlzLm5hbWVzLmxlbmd0aCAtIDFdO1xuICAgIGlmICh0aGlzLm5lZ2F0ZWQgJiYgdGhpcy5jb25maWcuZGVmYXVsdCA9PSBudWxsKSB7XG4gICAgICB0aGlzLmNvbmZpZy5kZWZhdWx0ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHJhd05hbWUuaW5jbHVkZXMoXCI8XCIpKSB7XG4gICAgICB0aGlzLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHJhd05hbWUuaW5jbHVkZXMoXCJbXCIpKSB7XG4gICAgICB0aGlzLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNCb29sZWFuID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgcHJvY2Vzc0FyZ3MgPSBwcm9jZXNzLmFyZ3Y7XG5jb25zdCBwbGF0Zm9ybUluZm8gPSBgJHtwcm9jZXNzLnBsYXRmb3JtfS0ke3Byb2Nlc3MuYXJjaH0gbm9kZS0ke3Byb2Nlc3MudmVyc2lvbn1gO1xuXG5jbGFzcyBDb21tYW5kIHtcbiAgY29uc3RydWN0b3IocmF3TmFtZSwgZGVzY3JpcHRpb24sIGNvbmZpZyA9IHt9LCBjbGkpIHtcbiAgICB0aGlzLnJhd05hbWUgPSByYXdOYW1lO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmNsaSA9IGNsaTtcbiAgICB0aGlzLm9wdGlvbnMgPSBbXTtcbiAgICB0aGlzLmFsaWFzTmFtZXMgPSBbXTtcbiAgICB0aGlzLm5hbWUgPSByZW1vdmVCcmFja2V0cyhyYXdOYW1lKTtcbiAgICB0aGlzLmFyZ3MgPSBmaW5kQWxsQnJhY2tldHMocmF3TmFtZSk7XG4gICAgdGhpcy5leGFtcGxlcyA9IFtdO1xuICB9XG4gIHVzYWdlKHRleHQpIHtcbiAgICB0aGlzLnVzYWdlVGV4dCA9IHRleHQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgYWxsb3dVbmtub3duT3B0aW9ucygpIHtcbiAgICB0aGlzLmNvbmZpZy5hbGxvd1Vua25vd25PcHRpb25zID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBpZ25vcmVPcHRpb25EZWZhdWx0VmFsdWUoKSB7XG4gICAgdGhpcy5jb25maWcuaWdub3JlT3B0aW9uRGVmYXVsdFZhbHVlID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB2ZXJzaW9uKHZlcnNpb24sIGN1c3RvbUZsYWdzID0gXCItdiwgLS12ZXJzaW9uXCIpIHtcbiAgICB0aGlzLnZlcnNpb25OdW1iZXIgPSB2ZXJzaW9uO1xuICAgIHRoaXMub3B0aW9uKGN1c3RvbUZsYWdzLCBcIkRpc3BsYXkgdmVyc2lvbiBudW1iZXJcIik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZXhhbXBsZShleGFtcGxlKSB7XG4gICAgdGhpcy5leGFtcGxlcy5wdXNoKGV4YW1wbGUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIG9wdGlvbihyYXdOYW1lLCBkZXNjcmlwdGlvbiwgY29uZmlnKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gbmV3IE9wdGlvbihyYXdOYW1lLCBkZXNjcmlwdGlvbiwgY29uZmlnKTtcbiAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGFsaWFzKG5hbWUpIHtcbiAgICB0aGlzLmFsaWFzTmFtZXMucHVzaChuYW1lKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBhY3Rpb24oY2FsbGJhY2spIHtcbiAgICB0aGlzLmNvbW1hbmRBY3Rpb24gPSBjYWxsYmFjaztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBpc01hdGNoZWQobmFtZSkge1xuICAgIHJldHVybiB0aGlzLm5hbWUgPT09IG5hbWUgfHwgdGhpcy5hbGlhc05hbWVzLmluY2x1ZGVzKG5hbWUpO1xuICB9XG4gIGdldCBpc0RlZmF1bHRDb21tYW5kKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWUgPT09IFwiXCIgfHwgdGhpcy5hbGlhc05hbWVzLmluY2x1ZGVzKFwiIVwiKTtcbiAgfVxuICBnZXQgaXNHbG9iYWxDb21tYW5kKCkge1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgR2xvYmFsQ29tbWFuZDtcbiAgfVxuICBoYXNPcHRpb24obmFtZSkge1xuICAgIG5hbWUgPSBuYW1lLnNwbGl0KFwiLlwiKVswXTtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQoKG9wdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIG9wdGlvbi5uYW1lcy5pbmNsdWRlcyhuYW1lKTtcbiAgICB9KTtcbiAgfVxuICBvdXRwdXRIZWxwKCkge1xuICAgIGNvbnN0IHtuYW1lLCBjb21tYW5kc30gPSB0aGlzLmNsaTtcbiAgICBjb25zdCB7XG4gICAgICB2ZXJzaW9uTnVtYmVyLFxuICAgICAgb3B0aW9uczogZ2xvYmFsT3B0aW9ucyxcbiAgICAgIGhlbHBDYWxsYmFja1xuICAgIH0gPSB0aGlzLmNsaS5nbG9iYWxDb21tYW5kO1xuICAgIGxldCBzZWN0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgYm9keTogYCR7bmFtZX0ke3ZlcnNpb25OdW1iZXIgPyBgLyR7dmVyc2lvbk51bWJlcn1gIDogXCJcIn1gXG4gICAgICB9XG4gICAgXTtcbiAgICBzZWN0aW9ucy5wdXNoKHtcbiAgICAgIHRpdGxlOiBcIlVzYWdlXCIsXG4gICAgICBib2R5OiBgICAkICR7bmFtZX0gJHt0aGlzLnVzYWdlVGV4dCB8fCB0aGlzLnJhd05hbWV9YFxuICAgIH0pO1xuICAgIGNvbnN0IHNob3dDb21tYW5kcyA9ICh0aGlzLmlzR2xvYmFsQ29tbWFuZCB8fCB0aGlzLmlzRGVmYXVsdENvbW1hbmQpICYmIGNvbW1hbmRzLmxlbmd0aCA+IDA7XG4gICAgaWYgKHNob3dDb21tYW5kcykge1xuICAgICAgY29uc3QgbG9uZ2VzdENvbW1hbmROYW1lID0gZmluZExvbmdlc3QoY29tbWFuZHMubWFwKChjb21tYW5kKSA9PiBjb21tYW5kLnJhd05hbWUpKTtcbiAgICAgIHNlY3Rpb25zLnB1c2goe1xuICAgICAgICB0aXRsZTogXCJDb21tYW5kc1wiLFxuICAgICAgICBib2R5OiBjb21tYW5kcy5tYXAoKGNvbW1hbmQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYCAgJHtwYWRSaWdodChjb21tYW5kLnJhd05hbWUsIGxvbmdlc3RDb21tYW5kTmFtZS5sZW5ndGgpfSAgJHtjb21tYW5kLmRlc2NyaXB0aW9ufWA7XG4gICAgICAgIH0pLmpvaW4oXCJcXG5cIilcbiAgICAgIH0pO1xuICAgICAgc2VjdGlvbnMucHVzaCh7XG4gICAgICAgIHRpdGxlOiBgRm9yIG1vcmUgaW5mbywgcnVuIGFueSBjb21tYW5kIHdpdGggdGhlIFxcYC0taGVscFxcYCBmbGFnYCxcbiAgICAgICAgYm9keTogY29tbWFuZHMubWFwKChjb21tYW5kKSA9PiBgICAkICR7bmFtZX0ke2NvbW1hbmQubmFtZSA9PT0gXCJcIiA/IFwiXCIgOiBgICR7Y29tbWFuZC5uYW1lfWB9IC0taGVscGApLmpvaW4oXCJcXG5cIilcbiAgICAgIH0pO1xuICAgIH1cbiAgICBsZXQgb3B0aW9ucyA9IHRoaXMuaXNHbG9iYWxDb21tYW5kID8gZ2xvYmFsT3B0aW9ucyA6IFsuLi50aGlzLm9wdGlvbnMsIC4uLmdsb2JhbE9wdGlvbnMgfHwgW11dO1xuICAgIGlmICghdGhpcy5pc0dsb2JhbENvbW1hbmQgJiYgIXRoaXMuaXNEZWZhdWx0Q29tbWFuZCkge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5uYW1lICE9PSBcInZlcnNpb25cIik7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxvbmdlc3RPcHRpb25OYW1lID0gZmluZExvbmdlc3Qob3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnJhd05hbWUpKTtcbiAgICAgIHNlY3Rpb25zLnB1c2goe1xuICAgICAgICB0aXRsZTogXCJPcHRpb25zXCIsXG4gICAgICAgIGJvZHk6IG9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICByZXR1cm4gYCAgJHtwYWRSaWdodChvcHRpb24ucmF3TmFtZSwgbG9uZ2VzdE9wdGlvbk5hbWUubGVuZ3RoKX0gICR7b3B0aW9uLmRlc2NyaXB0aW9ufSAke29wdGlvbi5jb25maWcuZGVmYXVsdCA9PT0gdm9pZCAwID8gXCJcIiA6IGAoZGVmYXVsdDogJHtvcHRpb24uY29uZmlnLmRlZmF1bHR9KWB9YDtcbiAgICAgICAgfSkuam9pbihcIlxcblwiKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmV4YW1wbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHNlY3Rpb25zLnB1c2goe1xuICAgICAgICB0aXRsZTogXCJFeGFtcGxlc1wiLFxuICAgICAgICBib2R5OiB0aGlzLmV4YW1wbGVzLm1hcCgoZXhhbXBsZSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgZXhhbXBsZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhhbXBsZShuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGV4YW1wbGU7XG4gICAgICAgIH0pLmpvaW4oXCJcXG5cIilcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaGVscENhbGxiYWNrKSB7XG4gICAgICBzZWN0aW9ucyA9IGhlbHBDYWxsYmFjayhzZWN0aW9ucykgfHwgc2VjdGlvbnM7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKHNlY3Rpb25zLm1hcCgoc2VjdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHNlY3Rpb24udGl0bGUgPyBgJHtzZWN0aW9uLnRpdGxlfTpcbiR7c2VjdGlvbi5ib2R5fWAgOiBzZWN0aW9uLmJvZHk7XG4gICAgfSkuam9pbihcIlxcblxcblwiKSk7XG4gIH1cbiAgb3V0cHV0VmVyc2lvbigpIHtcbiAgICBjb25zdCB7bmFtZX0gPSB0aGlzLmNsaTtcbiAgICBjb25zdCB7dmVyc2lvbk51bWJlcn0gPSB0aGlzLmNsaS5nbG9iYWxDb21tYW5kO1xuICAgIGlmICh2ZXJzaW9uTnVtYmVyKSB7XG4gICAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS8ke3ZlcnNpb25OdW1iZXJ9ICR7cGxhdGZvcm1JbmZvfWApO1xuICAgIH1cbiAgfVxuICBjaGVja1JlcXVpcmVkQXJncygpIHtcbiAgICBjb25zdCBtaW5pbWFsQXJnc0NvdW50ID0gdGhpcy5hcmdzLmZpbHRlcigoYXJnKSA9PiBhcmcucmVxdWlyZWQpLmxlbmd0aDtcbiAgICBpZiAodGhpcy5jbGkuYXJncy5sZW5ndGggPCBtaW5pbWFsQXJnc0NvdW50KSB7XG4gICAgICB0aHJvdyBuZXcgQ0FDRXJyb3IoYG1pc3NpbmcgcmVxdWlyZWQgYXJncyBmb3IgY29tbWFuZCBcXGAke3RoaXMucmF3TmFtZX1cXGBgKTtcbiAgICB9XG4gIH1cbiAgY2hlY2tVbmtub3duT3B0aW9ucygpIHtcbiAgICBjb25zdCB7b3B0aW9ucywgZ2xvYmFsQ29tbWFuZH0gPSB0aGlzLmNsaTtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmFsbG93VW5rbm93bk9wdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhvcHRpb25zKSkge1xuICAgICAgICBpZiAobmFtZSAhPT0gXCItLVwiICYmICF0aGlzLmhhc09wdGlvbihuYW1lKSAmJiAhZ2xvYmFsQ29tbWFuZC5oYXNPcHRpb24obmFtZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQ0FDRXJyb3IoYFVua25vd24gb3B0aW9uIFxcYCR7bmFtZS5sZW5ndGggPiAxID8gYC0tJHtuYW1lfWAgOiBgLSR7bmFtZX1gfVxcYGApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNoZWNrT3B0aW9uVmFsdWUoKSB7XG4gICAgY29uc3Qge29wdGlvbnM6IHBhcnNlZE9wdGlvbnMsIGdsb2JhbENvbW1hbmR9ID0gdGhpcy5jbGk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFsuLi5nbG9iYWxDb21tYW5kLm9wdGlvbnMsIC4uLnRoaXMub3B0aW9uc107XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZWRPcHRpb25zW29wdGlvbi5uYW1lLnNwbGl0KFwiLlwiKVswXV07XG4gICAgICBpZiAob3B0aW9uLnJlcXVpcmVkKSB7XG4gICAgICAgIGNvbnN0IGhhc05lZ2F0ZWQgPSBvcHRpb25zLnNvbWUoKG8pID0+IG8ubmVnYXRlZCAmJiBvLm5hbWVzLmluY2x1ZGVzKG9wdGlvbi5uYW1lKSk7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2UgJiYgIWhhc05lZ2F0ZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQ0FDRXJyb3IoYG9wdGlvbiBcXGAke29wdGlvbi5yYXdOYW1lfVxcYCB2YWx1ZSBpcyBtaXNzaW5nYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmNsYXNzIEdsb2JhbENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgY29uc3RydWN0b3IoY2xpKSB7XG4gICAgc3VwZXIoXCJAQGdsb2JhbEBAXCIsIFwiXCIsIHt9LCBjbGkpO1xuICB9XG59XG5cbnZhciBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5jbGFzcyBDQUMgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvcihuYW1lID0gXCJcIikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmNvbW1hbmRzID0gW107XG4gICAgdGhpcy5yYXdBcmdzID0gW107XG4gICAgdGhpcy5hcmdzID0gW107XG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5nbG9iYWxDb21tYW5kID0gbmV3IEdsb2JhbENvbW1hbmQodGhpcyk7XG4gICAgdGhpcy5nbG9iYWxDb21tYW5kLnVzYWdlKFwiPGNvbW1hbmQ+IFtvcHRpb25zXVwiKTtcbiAgfVxuICB1c2FnZSh0ZXh0KSB7XG4gICAgdGhpcy5nbG9iYWxDb21tYW5kLnVzYWdlKHRleHQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGNvbW1hbmQocmF3TmFtZSwgZGVzY3JpcHRpb24sIGNvbmZpZykge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgQ29tbWFuZChyYXdOYW1lLCBkZXNjcmlwdGlvbiB8fCBcIlwiLCBjb25maWcsIHRoaXMpO1xuICAgIGNvbW1hbmQuZ2xvYmFsQ29tbWFuZCA9IHRoaXMuZ2xvYmFsQ29tbWFuZDtcbiAgICB0aGlzLmNvbW1hbmRzLnB1c2goY29tbWFuZCk7XG4gICAgcmV0dXJuIGNvbW1hbmQ7XG4gIH1cbiAgb3B0aW9uKHJhd05hbWUsIGRlc2NyaXB0aW9uLCBjb25maWcpIHtcbiAgICB0aGlzLmdsb2JhbENvbW1hbmQub3B0aW9uKHJhd05hbWUsIGRlc2NyaXB0aW9uLCBjb25maWcpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGhlbHAoY2FsbGJhY2spIHtcbiAgICB0aGlzLmdsb2JhbENvbW1hbmQub3B0aW9uKFwiLWgsIC0taGVscFwiLCBcIkRpc3BsYXkgdGhpcyBtZXNzYWdlXCIpO1xuICAgIHRoaXMuZ2xvYmFsQ29tbWFuZC5oZWxwQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB0aGlzLnNob3dIZWxwT25FeGl0ID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB2ZXJzaW9uKHZlcnNpb24sIGN1c3RvbUZsYWdzID0gXCItdiwgLS12ZXJzaW9uXCIpIHtcbiAgICB0aGlzLmdsb2JhbENvbW1hbmQudmVyc2lvbih2ZXJzaW9uLCBjdXN0b21GbGFncyk7XG4gICAgdGhpcy5zaG93VmVyc2lvbk9uRXhpdCA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZXhhbXBsZShleGFtcGxlKSB7XG4gICAgdGhpcy5nbG9iYWxDb21tYW5kLmV4YW1wbGUoZXhhbXBsZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgb3V0cHV0SGVscCgpIHtcbiAgICBpZiAodGhpcy5tYXRjaGVkQ29tbWFuZCkge1xuICAgICAgdGhpcy5tYXRjaGVkQ29tbWFuZC5vdXRwdXRIZWxwKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2xvYmFsQ29tbWFuZC5vdXRwdXRIZWxwKCk7XG4gICAgfVxuICB9XG4gIG91dHB1dFZlcnNpb24oKSB7XG4gICAgdGhpcy5nbG9iYWxDb21tYW5kLm91dHB1dFZlcnNpb24oKTtcbiAgfVxuICBzZXRQYXJzZWRJbmZvKHthcmdzLCBvcHRpb25zfSwgbWF0Y2hlZENvbW1hbmQsIG1hdGNoZWRDb21tYW5kTmFtZSkge1xuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICBpZiAobWF0Y2hlZENvbW1hbmQpIHtcbiAgICAgIHRoaXMubWF0Y2hlZENvbW1hbmQgPSBtYXRjaGVkQ29tbWFuZDtcbiAgICB9XG4gICAgaWYgKG1hdGNoZWRDb21tYW5kTmFtZSkge1xuICAgICAgdGhpcy5tYXRjaGVkQ29tbWFuZE5hbWUgPSBtYXRjaGVkQ29tbWFuZE5hbWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHVuc2V0TWF0Y2hlZENvbW1hbmQoKSB7XG4gICAgdGhpcy5tYXRjaGVkQ29tbWFuZCA9IHZvaWQgMDtcbiAgICB0aGlzLm1hdGNoZWRDb21tYW5kTmFtZSA9IHZvaWQgMDtcbiAgfVxuICBwYXJzZShhcmd2ID0gcHJvY2Vzc0FyZ3MsIHtcbiAgICBydW4gPSB0cnVlXG4gIH0gPSB7fSkge1xuICAgIHRoaXMucmF3QXJncyA9IGFyZ3Y7XG4gICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgIHRoaXMubmFtZSA9IGFyZ3ZbMV0gPyBnZXRGaWxlTmFtZShhcmd2WzFdKSA6IFwiY2xpXCI7XG4gICAgfVxuICAgIGxldCBzaG91bGRQYXJzZSA9IHRydWU7XG4gICAgZm9yIChjb25zdCBjb21tYW5kIG9mIHRoaXMuY29tbWFuZHMpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMubXJpKGFyZ3Yuc2xpY2UoMiksIGNvbW1hbmQpO1xuICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBwYXJzZWQuYXJnc1swXTtcbiAgICAgIGlmIChjb21tYW5kLmlzTWF0Y2hlZChjb21tYW5kTmFtZSkpIHtcbiAgICAgICAgc2hvdWxkUGFyc2UgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcGFyc2VkSW5mbyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBwYXJzZWQpLCB7XG4gICAgICAgICAgYXJnczogcGFyc2VkLmFyZ3Muc2xpY2UoMSlcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0UGFyc2VkSW5mbyhwYXJzZWRJbmZvLCBjb21tYW5kLCBjb21tYW5kTmFtZSk7XG4gICAgICAgIHRoaXMuZW1pdChgY29tbWFuZDoke2NvbW1hbmROYW1lfWAsIGNvbW1hbmQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2hvdWxkUGFyc2UpIHtcbiAgICAgIGZvciAoY29uc3QgY29tbWFuZCBvZiB0aGlzLmNvbW1hbmRzKSB7XG4gICAgICAgIGlmIChjb21tYW5kLm5hbWUgPT09IFwiXCIpIHtcbiAgICAgICAgICBzaG91bGRQYXJzZSA9IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMubXJpKGFyZ3Yuc2xpY2UoMiksIGNvbW1hbmQpO1xuICAgICAgICAgIHRoaXMuc2V0UGFyc2VkSW5mbyhwYXJzZWQsIGNvbW1hbmQpO1xuICAgICAgICAgIHRoaXMuZW1pdChgY29tbWFuZDohYCwgY29tbWFuZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNob3VsZFBhcnNlKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLm1yaShhcmd2LnNsaWNlKDIpKTtcbiAgICAgIHRoaXMuc2V0UGFyc2VkSW5mbyhwYXJzZWQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmhlbHAgJiYgdGhpcy5zaG93SGVscE9uRXhpdCkge1xuICAgICAgdGhpcy5vdXRwdXRIZWxwKCk7XG4gICAgICBydW4gPSBmYWxzZTtcbiAgICAgIHRoaXMudW5zZXRNYXRjaGVkQ29tbWFuZCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLnZlcnNpb24gJiYgdGhpcy5zaG93VmVyc2lvbk9uRXhpdCAmJiB0aGlzLm1hdGNoZWRDb21tYW5kTmFtZSA9PSBudWxsKSB7XG4gICAgICB0aGlzLm91dHB1dFZlcnNpb24oKTtcbiAgICAgIHJ1biA9IGZhbHNlO1xuICAgICAgdGhpcy51bnNldE1hdGNoZWRDb21tYW5kKCk7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZEFyZ3YgPSB7YXJnczogdGhpcy5hcmdzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnN9O1xuICAgIGlmIChydW4pIHtcbiAgICAgIHRoaXMucnVuTWF0Y2hlZENvbW1hbmQoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm1hdGNoZWRDb21tYW5kICYmIHRoaXMuYXJnc1swXSkge1xuICAgICAgdGhpcy5lbWl0KFwiY29tbWFuZDoqXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkQXJndjtcbiAgfVxuICBtcmkoYXJndiwgY29tbWFuZCkge1xuICAgIGNvbnN0IGNsaU9wdGlvbnMgPSBbXG4gICAgICAuLi50aGlzLmdsb2JhbENvbW1hbmQub3B0aW9ucyxcbiAgICAgIC4uLmNvbW1hbmQgPyBjb21tYW5kLm9wdGlvbnMgOiBbXVxuICAgIF07XG4gICAgY29uc3QgbXJpT3B0aW9ucyA9IGdldE1yaU9wdGlvbnMoY2xpT3B0aW9ucyk7XG4gICAgbGV0IGFyZ3NBZnRlckRvdWJsZURhc2hlcyA9IFtdO1xuICAgIGNvbnN0IGRvdWJsZURhc2hlc0luZGV4ID0gYXJndi5pbmRleE9mKFwiLS1cIik7XG4gICAgaWYgKGRvdWJsZURhc2hlc0luZGV4ID4gLTEpIHtcbiAgICAgIGFyZ3NBZnRlckRvdWJsZURhc2hlcyA9IGFyZ3Yuc2xpY2UoZG91YmxlRGFzaGVzSW5kZXggKyAxKTtcbiAgICAgIGFyZ3YgPSBhcmd2LnNsaWNlKDAsIGRvdWJsZURhc2hlc0luZGV4KTtcbiAgICB9XG4gICAgbGV0IHBhcnNlZCA9IG1yaTIoYXJndiwgbXJpT3B0aW9ucyk7XG4gICAgcGFyc2VkID0gT2JqZWN0LmtleXMocGFyc2VkKS5yZWR1Y2UoKHJlcywgbmFtZSkgPT4ge1xuICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXMpLCB7XG4gICAgICAgIFtjYW1lbGNhc2VPcHRpb25OYW1lKG5hbWUpXTogcGFyc2VkW25hbWVdXG4gICAgICB9KTtcbiAgICB9LCB7XzogW119KTtcbiAgICBjb25zdCBhcmdzID0gcGFyc2VkLl87XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIFwiLS1cIjogYXJnc0FmdGVyRG91YmxlRGFzaGVzXG4gICAgfTtcbiAgICBjb25zdCBpZ25vcmVEZWZhdWx0ID0gY29tbWFuZCAmJiBjb21tYW5kLmNvbmZpZy5pZ25vcmVPcHRpb25EZWZhdWx0VmFsdWUgPyBjb21tYW5kLmNvbmZpZy5pZ25vcmVPcHRpb25EZWZhdWx0VmFsdWUgOiB0aGlzLmdsb2JhbENvbW1hbmQuY29uZmlnLmlnbm9yZU9wdGlvbkRlZmF1bHRWYWx1ZTtcbiAgICBsZXQgdHJhbnNmb3JtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZm9yIChjb25zdCBjbGlPcHRpb24gb2YgY2xpT3B0aW9ucykge1xuICAgICAgaWYgKCFpZ25vcmVEZWZhdWx0ICYmIGNsaU9wdGlvbi5jb25maWcuZGVmYXVsdCAhPT0gdm9pZCAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBjbGlPcHRpb24ubmFtZXMpIHtcbiAgICAgICAgICBvcHRpb25zW25hbWVdID0gY2xpT3B0aW9uLmNvbmZpZy5kZWZhdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjbGlPcHRpb24uY29uZmlnLnR5cGUpKSB7XG4gICAgICAgIGlmICh0cmFuc2Zvcm1zW2NsaU9wdGlvbi5uYW1lXSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgdHJhbnNmb3Jtc1tjbGlPcHRpb24ubmFtZV0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRyYW5zZm9ybXNbY2xpT3B0aW9uLm5hbWVdW1wic2hvdWxkVHJhbnNmb3JtXCJdID0gdHJ1ZTtcbiAgICAgICAgICB0cmFuc2Zvcm1zW2NsaU9wdGlvbi5uYW1lXVtcInRyYW5zZm9ybUZ1bmN0aW9uXCJdID0gY2xpT3B0aW9uLmNvbmZpZy50eXBlWzBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhcnNlZCkpIHtcbiAgICAgIGlmIChrZXkgIT09IFwiX1wiKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBrZXkuc3BsaXQoXCIuXCIpO1xuICAgICAgICBzZXREb3RQcm9wKG9wdGlvbnMsIGtleXMsIHBhcnNlZFtrZXldKTtcbiAgICAgICAgc2V0QnlUeXBlKG9wdGlvbnMsIHRyYW5zZm9ybXMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYXJncyxcbiAgICAgIG9wdGlvbnNcbiAgICB9O1xuICB9XG4gIHJ1bk1hdGNoZWRDb21tYW5kKCkge1xuICAgIGNvbnN0IHthcmdzLCBvcHRpb25zLCBtYXRjaGVkQ29tbWFuZDogY29tbWFuZH0gPSB0aGlzO1xuICAgIGlmICghY29tbWFuZCB8fCAhY29tbWFuZC5jb21tYW5kQWN0aW9uKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbW1hbmQuY2hlY2tVbmtub3duT3B0aW9ucygpO1xuICAgIGNvbW1hbmQuY2hlY2tPcHRpb25WYWx1ZSgpO1xuICAgIGNvbW1hbmQuY2hlY2tSZXF1aXJlZEFyZ3MoKTtcbiAgICBjb25zdCBhY3Rpb25BcmdzID0gW107XG4gICAgY29tbWFuZC5hcmdzLmZvckVhY2goKGFyZywgaW5kZXgpID0+IHtcbiAgICAgIGlmIChhcmcudmFyaWFkaWMpIHtcbiAgICAgICAgYWN0aW9uQXJncy5wdXNoKGFyZ3Muc2xpY2UoaW5kZXgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGlvbkFyZ3MucHVzaChhcmdzW2luZGV4XSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgYWN0aW9uQXJncy5wdXNoKG9wdGlvbnMpO1xuICAgIHJldHVybiBjb21tYW5kLmNvbW1hbmRBY3Rpb24uYXBwbHkodGhpcywgYWN0aW9uQXJncyk7XG4gIH1cbn1cblxuY29uc3QgY2FjID0gKG5hbWUgPSBcIlwiKSA9PiBuZXcgQ0FDKG5hbWUpO1xuXG5leHBvcnQgZGVmYXVsdCBjYWM7XG5leHBvcnQgeyBDQUMsIENvbW1hbmQsIGNhYyB9O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RyaXBGaW5hbE5ld2xpbmUoaW5wdXQpIHtcblx0Y29uc3QgTEYgPSB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnID8gJ1xcbicgOiAnXFxuJy5jaGFyQ29kZUF0KCk7XG5cdGNvbnN0IENSID0gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyA/ICdcXHInIDogJ1xccicuY2hhckNvZGVBdCgpO1xuXG5cdGlmIChpbnB1dFtpbnB1dC5sZW5ndGggLSAxXSA9PT0gTEYpIHtcblx0XHRpbnB1dCA9IGlucHV0LnNsaWNlKDAsIC0xKTtcblx0fVxuXG5cdGlmIChpbnB1dFtpbnB1dC5sZW5ndGggLSAxXSA9PT0gQ1IpIHtcblx0XHRpbnB1dCA9IGlucHV0LnNsaWNlKDAsIC0xKTtcblx0fVxuXG5cdHJldHVybiBpbnB1dDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhdGhLZXkob3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IHtcblx0XHRlbnYgPSBwcm9jZXNzLmVudixcblx0XHRwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm1cblx0fSA9IG9wdGlvbnM7XG5cblx0aWYgKHBsYXRmb3JtICE9PSAnd2luMzInKSB7XG5cdFx0cmV0dXJuICdQQVRIJztcblx0fVxuXG5cdHJldHVybiBPYmplY3Qua2V5cyhlbnYpLnJldmVyc2UoKS5maW5kKGtleSA9PiBrZXkudG9VcHBlckNhc2UoKSA9PT0gJ1BBVEgnKSB8fCAnUGF0aCc7XG59XG4iLCJpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB1cmwgZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHBhdGhLZXkgZnJvbSAncGF0aC1rZXknO1xuXG5leHBvcnQgZnVuY3Rpb24gbnBtUnVuUGF0aChvcHRpb25zID0ge30pIHtcblx0Y29uc3Qge1xuXHRcdGN3ZCA9IHByb2Nlc3MuY3dkKCksXG5cdFx0cGF0aDogcGF0aF8gPSBwcm9jZXNzLmVudltwYXRoS2V5KCldLFxuXHRcdGV4ZWNQYXRoID0gcHJvY2Vzcy5leGVjUGF0aCxcblx0fSA9IG9wdGlvbnM7XG5cblx0bGV0IHByZXZpb3VzO1xuXHRjb25zdCBjd2RTdHJpbmcgPSBjd2QgaW5zdGFuY2VvZiBVUkwgPyB1cmwuZmlsZVVSTFRvUGF0aChjd2QpIDogY3dkO1xuXHRsZXQgY3dkUGF0aCA9IHBhdGgucmVzb2x2ZShjd2RTdHJpbmcpO1xuXHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHR3aGlsZSAocHJldmlvdXMgIT09IGN3ZFBhdGgpIHtcblx0XHRyZXN1bHQucHVzaChwYXRoLmpvaW4oY3dkUGF0aCwgJ25vZGVfbW9kdWxlcy8uYmluJykpO1xuXHRcdHByZXZpb3VzID0gY3dkUGF0aDtcblx0XHRjd2RQYXRoID0gcGF0aC5yZXNvbHZlKGN3ZFBhdGgsICcuLicpO1xuXHR9XG5cblx0Ly8gRW5zdXJlIHRoZSBydW5uaW5nIGBub2RlYCBiaW5hcnkgaXMgdXNlZC5cblx0cmVzdWx0LnB1c2gocGF0aC5yZXNvbHZlKGN3ZFN0cmluZywgZXhlY1BhdGgsICcuLicpKTtcblxuXHRyZXR1cm4gWy4uLnJlc3VsdCwgcGF0aF9dLmpvaW4ocGF0aC5kZWxpbWl0ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbnBtUnVuUGF0aEVudih7ZW52ID0gcHJvY2Vzcy5lbnYsIC4uLm9wdGlvbnN9ID0ge30pIHtcblx0ZW52ID0gey4uLmVudn07XG5cblx0Y29uc3QgcGF0aCA9IHBhdGhLZXkoe2Vudn0pO1xuXHRvcHRpb25zLnBhdGggPSBlbnZbcGF0aF07XG5cdGVudltwYXRoXSA9IG5wbVJ1blBhdGgob3B0aW9ucyk7XG5cblx0cmV0dXJuIGVudjtcbn1cbiIsImNvbnN0IGNvcHlQcm9wZXJ0eSA9ICh0bywgZnJvbSwgcHJvcGVydHksIGlnbm9yZU5vbkNvbmZpZ3VyYWJsZSkgPT4ge1xuXHQvLyBgRnVuY3Rpb24jbGVuZ3RoYCBzaG91bGQgcmVmbGVjdCB0aGUgcGFyYW1ldGVycyBvZiBgdG9gIG5vdCBgZnJvbWAgc2luY2Ugd2Uga2VlcCBpdHMgYm9keS5cblx0Ly8gYEZ1bmN0aW9uI3Byb3RvdHlwZWAgaXMgbm9uLXdyaXRhYmxlIGFuZCBub24tY29uZmlndXJhYmxlIHNvIGNhbiBuZXZlciBiZSBtb2RpZmllZC5cblx0aWYgKHByb3BlcnR5ID09PSAnbGVuZ3RoJyB8fCBwcm9wZXJ0eSA9PT0gJ3Byb3RvdHlwZScpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBgRnVuY3Rpb24jYXJndW1lbnRzYCBhbmQgYEZ1bmN0aW9uI2NhbGxlcmAgc2hvdWxkIG5vdCBiZSBjb3BpZWQuIFRoZXkgd2VyZSByZXBvcnRlZCB0byBiZSBwcmVzZW50IGluIGBSZWZsZWN0Lm93bktleXNgIGZvciBzb21lIGRldmljZXMgaW4gUmVhY3QgTmF0aXZlICgjNDEpLCBzbyB3ZSBleHBsaWNpdGx5IGlnbm9yZSB0aGVtIGhlcmUuXG5cdGlmIChwcm9wZXJ0eSA9PT0gJ2FyZ3VtZW50cycgfHwgcHJvcGVydHkgPT09ICdjYWxsZXInKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgdG9EZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0bywgcHJvcGVydHkpO1xuXHRjb25zdCBmcm9tRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZnJvbSwgcHJvcGVydHkpO1xuXG5cdGlmICghY2FuQ29weVByb3BlcnR5KHRvRGVzY3JpcHRvciwgZnJvbURlc2NyaXB0b3IpICYmIGlnbm9yZU5vbkNvbmZpZ3VyYWJsZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0bywgcHJvcGVydHksIGZyb21EZXNjcmlwdG9yKTtcbn07XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHkoKWAgdGhyb3dzIGlmIHRoZSBwcm9wZXJ0eSBleGlzdHMsIGlzIG5vdCBjb25maWd1cmFibGUgYW5kIGVpdGhlcjpcbi8vIC0gb25lIGl0cyBkZXNjcmlwdG9ycyBpcyBjaGFuZ2VkXG4vLyAtIGl0IGlzIG5vbi13cml0YWJsZSBhbmQgaXRzIHZhbHVlIGlzIGNoYW5nZWRcbmNvbnN0IGNhbkNvcHlQcm9wZXJ0eSA9IGZ1bmN0aW9uICh0b0Rlc2NyaXB0b3IsIGZyb21EZXNjcmlwdG9yKSB7XG5cdHJldHVybiB0b0Rlc2NyaXB0b3IgPT09IHVuZGVmaW5lZCB8fCB0b0Rlc2NyaXB0b3IuY29uZmlndXJhYmxlIHx8IChcblx0XHR0b0Rlc2NyaXB0b3Iud3JpdGFibGUgPT09IGZyb21EZXNjcmlwdG9yLndyaXRhYmxlICYmXG5cdFx0dG9EZXNjcmlwdG9yLmVudW1lcmFibGUgPT09IGZyb21EZXNjcmlwdG9yLmVudW1lcmFibGUgJiZcblx0XHR0b0Rlc2NyaXB0b3IuY29uZmlndXJhYmxlID09PSBmcm9tRGVzY3JpcHRvci5jb25maWd1cmFibGUgJiZcblx0XHQodG9EZXNjcmlwdG9yLndyaXRhYmxlIHx8IHRvRGVzY3JpcHRvci52YWx1ZSA9PT0gZnJvbURlc2NyaXB0b3IudmFsdWUpXG5cdCk7XG59O1xuXG5jb25zdCBjaGFuZ2VQcm90b3R5cGUgPSAodG8sIGZyb20pID0+IHtcblx0Y29uc3QgZnJvbVByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihmcm9tKTtcblx0aWYgKGZyb21Qcm90b3R5cGUgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0bykpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YodG8sIGZyb21Qcm90b3R5cGUpO1xufTtcblxuY29uc3Qgd3JhcHBlZFRvU3RyaW5nID0gKHdpdGhOYW1lLCBmcm9tQm9keSkgPT4gYC8qIFdyYXBwZWQgJHt3aXRoTmFtZX0qL1xcbiR7ZnJvbUJvZHl9YDtcblxuY29uc3QgdG9TdHJpbmdEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihGdW5jdGlvbi5wcm90b3R5cGUsICd0b1N0cmluZycpO1xuY29uc3QgdG9TdHJpbmdOYW1lID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsICduYW1lJyk7XG5cbi8vIFdlIGNhbGwgYGZyb20udG9TdHJpbmcoKWAgZWFybHkgKG5vdCBsYXppbHkpIHRvIGVuc3VyZSBgZnJvbWAgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkLlxuLy8gV2UgdXNlIGBiaW5kKClgIGluc3RlYWQgb2YgYSBjbG9zdXJlIGZvciB0aGUgc2FtZSByZWFzb24uXG4vLyBDYWxsaW5nIGBmcm9tLnRvU3RyaW5nKClgIGVhcmx5IGFsc28gYWxsb3dzIGNhY2hpbmcgaXQgaW4gY2FzZSBgdG8udG9TdHJpbmcoKWAgaXMgY2FsbGVkIHNldmVyYWwgdGltZXMuXG5jb25zdCBjaGFuZ2VUb1N0cmluZyA9ICh0bywgZnJvbSwgbmFtZSkgPT4ge1xuXHRjb25zdCB3aXRoTmFtZSA9IG5hbWUgPT09ICcnID8gJycgOiBgd2l0aCAke25hbWUudHJpbSgpfSgpIGA7XG5cdGNvbnN0IG5ld1RvU3RyaW5nID0gd3JhcHBlZFRvU3RyaW5nLmJpbmQobnVsbCwgd2l0aE5hbWUsIGZyb20udG9TdHJpbmcoKSk7XG5cdC8vIEVuc3VyZSBgdG8udG9TdHJpbmcudG9TdHJpbmdgIGlzIG5vbi1lbnVtZXJhYmxlIGFuZCBoYXMgdGhlIHNhbWUgYHNhbWVgXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdUb1N0cmluZywgJ25hbWUnLCB0b1N0cmluZ05hbWUpO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkodG8sICd0b1N0cmluZycsIHsuLi50b1N0cmluZ0Rlc2NyaXB0b3IsIHZhbHVlOiBuZXdUb1N0cmluZ30pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWltaWNGdW5jdGlvbih0bywgZnJvbSwge2lnbm9yZU5vbkNvbmZpZ3VyYWJsZSA9IGZhbHNlfSA9IHt9KSB7XG5cdGNvbnN0IHtuYW1lfSA9IHRvO1xuXG5cdGZvciAoY29uc3QgcHJvcGVydHkgb2YgUmVmbGVjdC5vd25LZXlzKGZyb20pKSB7XG5cdFx0Y29weVByb3BlcnR5KHRvLCBmcm9tLCBwcm9wZXJ0eSwgaWdub3JlTm9uQ29uZmlndXJhYmxlKTtcblx0fVxuXG5cdGNoYW5nZVByb3RvdHlwZSh0bywgZnJvbSk7XG5cdGNoYW5nZVRvU3RyaW5nKHRvLCBmcm9tLCBuYW1lKTtcblxuXHRyZXR1cm4gdG87XG59XG4iLCJpbXBvcnQgbWltaWNGdW5jdGlvbiBmcm9tICdtaW1pYy1mbic7XG5cbmNvbnN0IGNhbGxlZEZ1bmN0aW9ucyA9IG5ldyBXZWFrTWFwKCk7XG5cbmNvbnN0IG9uZXRpbWUgPSAoZnVuY3Rpb25fLCBvcHRpb25zID0ge30pID0+IHtcblx0aWYgKHR5cGVvZiBmdW5jdGlvbl8gIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHRsZXQgcmV0dXJuVmFsdWU7XG5cdGxldCBjYWxsQ291bnQgPSAwO1xuXHRjb25zdCBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbl8uZGlzcGxheU5hbWUgfHwgZnVuY3Rpb25fLm5hbWUgfHwgJzxhbm9ueW1vdXM+JztcblxuXHRjb25zdCBvbmV0aW1lID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50c18pIHtcblx0XHRjYWxsZWRGdW5jdGlvbnMuc2V0KG9uZXRpbWUsICsrY2FsbENvdW50KTtcblxuXHRcdGlmIChjYWxsQ291bnQgPT09IDEpIHtcblx0XHRcdHJldHVyblZhbHVlID0gZnVuY3Rpb25fLmFwcGx5KHRoaXMsIGFyZ3VtZW50c18pO1xuXHRcdFx0ZnVuY3Rpb25fID0gbnVsbDtcblx0XHR9IGVsc2UgaWYgKG9wdGlvbnMudGhyb3cgPT09IHRydWUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gXFxgJHtmdW5jdGlvbk5hbWV9XFxgIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlYCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldHVyblZhbHVlO1xuXHR9O1xuXG5cdG1pbWljRnVuY3Rpb24ob25ldGltZSwgZnVuY3Rpb25fKTtcblx0Y2FsbGVkRnVuY3Rpb25zLnNldChvbmV0aW1lLCBjYWxsQ291bnQpO1xuXG5cdHJldHVybiBvbmV0aW1lO1xufTtcblxub25ldGltZS5jYWxsQ291bnQgPSBmdW5jdGlvbl8gPT4ge1xuXHRpZiAoIWNhbGxlZEZ1bmN0aW9ucy5oYXMoZnVuY3Rpb25fKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgVGhlIGdpdmVuIGZ1bmN0aW9uIFxcYCR7ZnVuY3Rpb25fLm5hbWV9XFxgIGlzIG5vdCB3cmFwcGVkIGJ5IHRoZSBcXGBvbmV0aW1lXFxgIHBhY2thZ2VgKTtcblx0fVxuXG5cdHJldHVybiBjYWxsZWRGdW5jdGlvbnMuZ2V0KGZ1bmN0aW9uXyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBvbmV0aW1lO1xuIiwiXG5leHBvcnQgY29uc3QgZ2V0UmVhbHRpbWVTaWduYWxzPWZ1bmN0aW9uKCl7XG5jb25zdCBsZW5ndGg9U0lHUlRNQVgtU0lHUlRNSU4rMTtcbnJldHVybiBBcnJheS5mcm9tKHtsZW5ndGh9LGdldFJlYWx0aW1lU2lnbmFsKTtcbn07XG5cbmNvbnN0IGdldFJlYWx0aW1lU2lnbmFsPWZ1bmN0aW9uKHZhbHVlLGluZGV4KXtcbnJldHVybntcbm5hbWU6YFNJR1JUJHtpbmRleCsxfWAsXG5udW1iZXI6U0lHUlRNSU4raW5kZXgsXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiQXBwbGljYXRpb24tc3BlY2lmaWMgc2lnbmFsIChyZWFsdGltZSlcIixcbnN0YW5kYXJkOlwicG9zaXhcIn07XG5cbn07XG5cbmNvbnN0IFNJR1JUTUlOPTM0O1xuZXhwb3J0IGNvbnN0IFNJR1JUTUFYPTY0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhbHRpbWUuanMubWFwIiwiXG5cbmV4cG9ydCBjb25zdCBTSUdOQUxTPVtcbntcbm5hbWU6XCJTSUdIVVBcIixcbm51bWJlcjoxLFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIlRlcm1pbmFsIGNsb3NlZFwiLFxuc3RhbmRhcmQ6XCJwb3NpeFwifSxcblxue1xubmFtZTpcIlNJR0lOVFwiLFxubnVtYmVyOjIsXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiVXNlciBpbnRlcnJ1cHRpb24gd2l0aCBDVFJMLUNcIixcbnN0YW5kYXJkOlwiYW5zaVwifSxcblxue1xubmFtZTpcIlNJR1FVSVRcIixcbm51bWJlcjozLFxuYWN0aW9uOlwiY29yZVwiLFxuZGVzY3JpcHRpb246XCJVc2VyIGludGVycnVwdGlvbiB3aXRoIENUUkwtXFxcXFwiLFxuc3RhbmRhcmQ6XCJwb3NpeFwifSxcblxue1xubmFtZTpcIlNJR0lMTFwiLFxubnVtYmVyOjQsXG5hY3Rpb246XCJjb3JlXCIsXG5kZXNjcmlwdGlvbjpcIkludmFsaWQgbWFjaGluZSBpbnN0cnVjdGlvblwiLFxuc3RhbmRhcmQ6XCJhbnNpXCJ9LFxuXG57XG5uYW1lOlwiU0lHVFJBUFwiLFxubnVtYmVyOjUsXG5hY3Rpb246XCJjb3JlXCIsXG5kZXNjcmlwdGlvbjpcIkRlYnVnZ2VyIGJyZWFrcG9pbnRcIixcbnN0YW5kYXJkOlwicG9zaXhcIn0sXG5cbntcbm5hbWU6XCJTSUdBQlJUXCIsXG5udW1iZXI6NixcbmFjdGlvbjpcImNvcmVcIixcbmRlc2NyaXB0aW9uOlwiQWJvcnRlZFwiLFxuc3RhbmRhcmQ6XCJhbnNpXCJ9LFxuXG57XG5uYW1lOlwiU0lHSU9UXCIsXG5udW1iZXI6NixcbmFjdGlvbjpcImNvcmVcIixcbmRlc2NyaXB0aW9uOlwiQWJvcnRlZFwiLFxuc3RhbmRhcmQ6XCJic2RcIn0sXG5cbntcbm5hbWU6XCJTSUdCVVNcIixcbm51bWJlcjo3LFxuYWN0aW9uOlwiY29yZVwiLFxuZGVzY3JpcHRpb246XG5cIkJ1cyBlcnJvciBkdWUgdG8gbWlzYWxpZ25lZCwgbm9uLWV4aXN0aW5nIGFkZHJlc3Mgb3IgcGFnaW5nIGVycm9yXCIsXG5zdGFuZGFyZDpcImJzZFwifSxcblxue1xubmFtZTpcIlNJR0VNVFwiLFxubnVtYmVyOjcsXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiQ29tbWFuZCBzaG91bGQgYmUgZW11bGF0ZWQgYnV0IGlzIG5vdCBpbXBsZW1lbnRlZFwiLFxuc3RhbmRhcmQ6XCJvdGhlclwifSxcblxue1xubmFtZTpcIlNJR0ZQRVwiLFxubnVtYmVyOjgsXG5hY3Rpb246XCJjb3JlXCIsXG5kZXNjcmlwdGlvbjpcIkZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgZXJyb3JcIixcbnN0YW5kYXJkOlwiYW5zaVwifSxcblxue1xubmFtZTpcIlNJR0tJTExcIixcbm51bWJlcjo5LFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIkZvcmNlZCB0ZXJtaW5hdGlvblwiLFxuc3RhbmRhcmQ6XCJwb3NpeFwiLFxuZm9yY2VkOnRydWV9LFxuXG57XG5uYW1lOlwiU0lHVVNSMVwiLFxubnVtYmVyOjEwLFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIkFwcGxpY2F0aW9uLXNwZWNpZmljIHNpZ25hbFwiLFxuc3RhbmRhcmQ6XCJwb3NpeFwifSxcblxue1xubmFtZTpcIlNJR1NFR1ZcIixcbm51bWJlcjoxMSxcbmFjdGlvbjpcImNvcmVcIixcbmRlc2NyaXB0aW9uOlwiU2VnbWVudGF0aW9uIGZhdWx0XCIsXG5zdGFuZGFyZDpcImFuc2lcIn0sXG5cbntcbm5hbWU6XCJTSUdVU1IyXCIsXG5udW1iZXI6MTIsXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiQXBwbGljYXRpb24tc3BlY2lmaWMgc2lnbmFsXCIsXG5zdGFuZGFyZDpcInBvc2l4XCJ9LFxuXG57XG5uYW1lOlwiU0lHUElQRVwiLFxubnVtYmVyOjEzLFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIkJyb2tlbiBwaXBlIG9yIHNvY2tldFwiLFxuc3RhbmRhcmQ6XCJwb3NpeFwifSxcblxue1xubmFtZTpcIlNJR0FMUk1cIixcbm51bWJlcjoxNCxcbmFjdGlvbjpcInRlcm1pbmF0ZVwiLFxuZGVzY3JpcHRpb246XCJUaW1lb3V0IG9yIHRpbWVyXCIsXG5zdGFuZGFyZDpcInBvc2l4XCJ9LFxuXG57XG5uYW1lOlwiU0lHVEVSTVwiLFxubnVtYmVyOjE1LFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIlRlcm1pbmF0aW9uXCIsXG5zdGFuZGFyZDpcImFuc2lcIn0sXG5cbntcbm5hbWU6XCJTSUdTVEtGTFRcIixcbm51bWJlcjoxNixcbmFjdGlvbjpcInRlcm1pbmF0ZVwiLFxuZGVzY3JpcHRpb246XCJTdGFjayBpcyBlbXB0eSBvciBvdmVyZmxvd2VkXCIsXG5zdGFuZGFyZDpcIm90aGVyXCJ9LFxuXG57XG5uYW1lOlwiU0lHQ0hMRFwiLFxubnVtYmVyOjE3LFxuYWN0aW9uOlwiaWdub3JlXCIsXG5kZXNjcmlwdGlvbjpcIkNoaWxkIHByb2Nlc3MgdGVybWluYXRlZCwgcGF1c2VkIG9yIHVucGF1c2VkXCIsXG5zdGFuZGFyZDpcInBvc2l4XCJ9LFxuXG57XG5uYW1lOlwiU0lHQ0xEXCIsXG5udW1iZXI6MTcsXG5hY3Rpb246XCJpZ25vcmVcIixcbmRlc2NyaXB0aW9uOlwiQ2hpbGQgcHJvY2VzcyB0ZXJtaW5hdGVkLCBwYXVzZWQgb3IgdW5wYXVzZWRcIixcbnN0YW5kYXJkOlwib3RoZXJcIn0sXG5cbntcbm5hbWU6XCJTSUdDT05UXCIsXG5udW1iZXI6MTgsXG5hY3Rpb246XCJ1bnBhdXNlXCIsXG5kZXNjcmlwdGlvbjpcIlVucGF1c2VkXCIsXG5zdGFuZGFyZDpcInBvc2l4XCIsXG5mb3JjZWQ6dHJ1ZX0sXG5cbntcbm5hbWU6XCJTSUdTVE9QXCIsXG5udW1iZXI6MTksXG5hY3Rpb246XCJwYXVzZVwiLFxuZGVzY3JpcHRpb246XCJQYXVzZWRcIixcbnN0YW5kYXJkOlwicG9zaXhcIixcbmZvcmNlZDp0cnVlfSxcblxue1xubmFtZTpcIlNJR1RTVFBcIixcbm51bWJlcjoyMCxcbmFjdGlvbjpcInBhdXNlXCIsXG5kZXNjcmlwdGlvbjpcIlBhdXNlZCB1c2luZyBDVFJMLVogb3IgXFxcInN1c3BlbmRcXFwiXCIsXG5zdGFuZGFyZDpcInBvc2l4XCJ9LFxuXG57XG5uYW1lOlwiU0lHVFRJTlwiLFxubnVtYmVyOjIxLFxuYWN0aW9uOlwicGF1c2VcIixcbmRlc2NyaXB0aW9uOlwiQmFja2dyb3VuZCBwcm9jZXNzIGNhbm5vdCByZWFkIHRlcm1pbmFsIGlucHV0XCIsXG5zdGFuZGFyZDpcInBvc2l4XCJ9LFxuXG57XG5uYW1lOlwiU0lHQlJFQUtcIixcbm51bWJlcjoyMSxcbmFjdGlvbjpcInRlcm1pbmF0ZVwiLFxuZGVzY3JpcHRpb246XCJVc2VyIGludGVycnVwdGlvbiB3aXRoIENUUkwtQlJFQUtcIixcbnN0YW5kYXJkOlwib3RoZXJcIn0sXG5cbntcbm5hbWU6XCJTSUdUVE9VXCIsXG5udW1iZXI6MjIsXG5hY3Rpb246XCJwYXVzZVwiLFxuZGVzY3JpcHRpb246XCJCYWNrZ3JvdW5kIHByb2Nlc3MgY2Fubm90IHdyaXRlIHRvIHRlcm1pbmFsIG91dHB1dFwiLFxuc3RhbmRhcmQ6XCJwb3NpeFwifSxcblxue1xubmFtZTpcIlNJR1VSR1wiLFxubnVtYmVyOjIzLFxuYWN0aW9uOlwiaWdub3JlXCIsXG5kZXNjcmlwdGlvbjpcIlNvY2tldCByZWNlaXZlZCBvdXQtb2YtYmFuZCBkYXRhXCIsXG5zdGFuZGFyZDpcImJzZFwifSxcblxue1xubmFtZTpcIlNJR1hDUFVcIixcbm51bWJlcjoyNCxcbmFjdGlvbjpcImNvcmVcIixcbmRlc2NyaXB0aW9uOlwiUHJvY2VzcyB0aW1lZCBvdXRcIixcbnN0YW5kYXJkOlwiYnNkXCJ9LFxuXG57XG5uYW1lOlwiU0lHWEZTWlwiLFxubnVtYmVyOjI1LFxuYWN0aW9uOlwiY29yZVwiLFxuZGVzY3JpcHRpb246XCJGaWxlIHRvbyBiaWdcIixcbnN0YW5kYXJkOlwiYnNkXCJ9LFxuXG57XG5uYW1lOlwiU0lHVlRBTFJNXCIsXG5udW1iZXI6MjYsXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiVGltZW91dCBvciB0aW1lclwiLFxuc3RhbmRhcmQ6XCJic2RcIn0sXG5cbntcbm5hbWU6XCJTSUdQUk9GXCIsXG5udW1iZXI6MjcsXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiVGltZW91dCBvciB0aW1lclwiLFxuc3RhbmRhcmQ6XCJic2RcIn0sXG5cbntcbm5hbWU6XCJTSUdXSU5DSFwiLFxubnVtYmVyOjI4LFxuYWN0aW9uOlwiaWdub3JlXCIsXG5kZXNjcmlwdGlvbjpcIlRlcm1pbmFsIHdpbmRvdyBzaXplIGNoYW5nZWRcIixcbnN0YW5kYXJkOlwiYnNkXCJ9LFxuXG57XG5uYW1lOlwiU0lHSU9cIixcbm51bWJlcjoyOSxcbmFjdGlvbjpcInRlcm1pbmF0ZVwiLFxuZGVzY3JpcHRpb246XCJJL08gaXMgYXZhaWxhYmxlXCIsXG5zdGFuZGFyZDpcIm90aGVyXCJ9LFxuXG57XG5uYW1lOlwiU0lHUE9MTFwiLFxubnVtYmVyOjI5LFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIldhdGNoZWQgZXZlbnRcIixcbnN0YW5kYXJkOlwib3RoZXJcIn0sXG5cbntcbm5hbWU6XCJTSUdJTkZPXCIsXG5udW1iZXI6MjksXG5hY3Rpb246XCJpZ25vcmVcIixcbmRlc2NyaXB0aW9uOlwiUmVxdWVzdCBmb3IgcHJvY2VzcyBpbmZvcm1hdGlvblwiLFxuc3RhbmRhcmQ6XCJvdGhlclwifSxcblxue1xubmFtZTpcIlNJR1BXUlwiLFxubnVtYmVyOjMwLFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIkRldmljZSBydW5uaW5nIG91dCBvZiBwb3dlclwiLFxuc3RhbmRhcmQ6XCJzeXN0ZW12XCJ9LFxuXG57XG5uYW1lOlwiU0lHU1lTXCIsXG5udW1iZXI6MzEsXG5hY3Rpb246XCJjb3JlXCIsXG5kZXNjcmlwdGlvbjpcIkludmFsaWQgc3lzdGVtIGNhbGxcIixcbnN0YW5kYXJkOlwib3RoZXJcIn0sXG5cbntcbm5hbWU6XCJTSUdVTlVTRURcIixcbm51bWJlcjozMSxcbmFjdGlvbjpcInRlcm1pbmF0ZVwiLFxuZGVzY3JpcHRpb246XCJJbnZhbGlkIHN5c3RlbSBjYWxsXCIsXG5zdGFuZGFyZDpcIm90aGVyXCJ9XTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvcmUuanMubWFwIiwiaW1wb3J0e2NvbnN0YW50c31mcm9tXCJvc1wiO1xuXG5pbXBvcnR7U0lHTkFMU31mcm9tXCIuL2NvcmUuanNcIjtcbmltcG9ydHtnZXRSZWFsdGltZVNpZ25hbHN9ZnJvbVwiLi9yZWFsdGltZS5qc1wiO1xuXG5cblxuZXhwb3J0IGNvbnN0IGdldFNpZ25hbHM9ZnVuY3Rpb24oKXtcbmNvbnN0IHJlYWx0aW1lU2lnbmFscz1nZXRSZWFsdGltZVNpZ25hbHMoKTtcbmNvbnN0IHNpZ25hbHM9Wy4uLlNJR05BTFMsLi4ucmVhbHRpbWVTaWduYWxzXS5tYXAobm9ybWFsaXplU2lnbmFsKTtcbnJldHVybiBzaWduYWxzO1xufTtcblxuXG5cblxuXG5cblxuY29uc3Qgbm9ybWFsaXplU2lnbmFsPWZ1bmN0aW9uKHtcbm5hbWUsXG5udW1iZXI6ZGVmYXVsdE51bWJlcixcbmRlc2NyaXB0aW9uLFxuYWN0aW9uLFxuZm9yY2VkPWZhbHNlLFxuc3RhbmRhcmR9KVxue1xuY29uc3R7XG5zaWduYWxzOntbbmFtZV06Y29uc3RhbnRTaWduYWx9fT1cbmNvbnN0YW50cztcbmNvbnN0IHN1cHBvcnRlZD1jb25zdGFudFNpZ25hbCE9PXVuZGVmaW5lZDtcbmNvbnN0IG51bWJlcj1zdXBwb3J0ZWQ/Y29uc3RhbnRTaWduYWw6ZGVmYXVsdE51bWJlcjtcbnJldHVybntuYW1lLG51bWJlcixkZXNjcmlwdGlvbixzdXBwb3J0ZWQsYWN0aW9uLGZvcmNlZCxzdGFuZGFyZH07XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2lnbmFscy5qcy5tYXAiLCJpbXBvcnR7Y29uc3RhbnRzfWZyb21cIm9zXCI7XG5cbmltcG9ydHtTSUdSVE1BWH1mcm9tXCIuL3JlYWx0aW1lLmpzXCI7XG5pbXBvcnR7Z2V0U2lnbmFsc31mcm9tXCIuL3NpZ25hbHMuanNcIjtcblxuXG5cbmNvbnN0IGdldFNpZ25hbHNCeU5hbWU9ZnVuY3Rpb24oKXtcbmNvbnN0IHNpZ25hbHM9Z2V0U2lnbmFscygpO1xucmV0dXJuIHNpZ25hbHMucmVkdWNlKGdldFNpZ25hbEJ5TmFtZSx7fSk7XG59O1xuXG5jb25zdCBnZXRTaWduYWxCeU5hbWU9ZnVuY3Rpb24oXG5zaWduYWxCeU5hbWVNZW1vLFxue25hbWUsbnVtYmVyLGRlc2NyaXB0aW9uLHN1cHBvcnRlZCxhY3Rpb24sZm9yY2VkLHN0YW5kYXJkfSlcbntcbnJldHVybntcbi4uLnNpZ25hbEJ5TmFtZU1lbW8sXG5bbmFtZV06e25hbWUsbnVtYmVyLGRlc2NyaXB0aW9uLHN1cHBvcnRlZCxhY3Rpb24sZm9yY2VkLHN0YW5kYXJkfX07XG5cbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxzQnlOYW1lPWdldFNpZ25hbHNCeU5hbWUoKTtcblxuXG5cblxuY29uc3QgZ2V0U2lnbmFsc0J5TnVtYmVyPWZ1bmN0aW9uKCl7XG5jb25zdCBzaWduYWxzPWdldFNpZ25hbHMoKTtcbmNvbnN0IGxlbmd0aD1TSUdSVE1BWCsxO1xuY29uc3Qgc2lnbmFsc0E9QXJyYXkuZnJvbSh7bGVuZ3RofSwodmFsdWUsbnVtYmVyKT0+XG5nZXRTaWduYWxCeU51bWJlcihudW1iZXIsc2lnbmFscykpO1xuXG5yZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwuLi5zaWduYWxzQSk7XG59O1xuXG5jb25zdCBnZXRTaWduYWxCeU51bWJlcj1mdW5jdGlvbihudW1iZXIsc2lnbmFscyl7XG5jb25zdCBzaWduYWw9ZmluZFNpZ25hbEJ5TnVtYmVyKG51bWJlcixzaWduYWxzKTtcblxuaWYoc2lnbmFsPT09dW5kZWZpbmVkKXtcbnJldHVybnt9O1xufVxuXG5jb25zdHtuYW1lLGRlc2NyaXB0aW9uLHN1cHBvcnRlZCxhY3Rpb24sZm9yY2VkLHN0YW5kYXJkfT1zaWduYWw7XG5yZXR1cm57XG5bbnVtYmVyXTp7XG5uYW1lLFxubnVtYmVyLFxuZGVzY3JpcHRpb24sXG5zdXBwb3J0ZWQsXG5hY3Rpb24sXG5mb3JjZWQsXG5zdGFuZGFyZH19O1xuXG5cbn07XG5cblxuXG5jb25zdCBmaW5kU2lnbmFsQnlOdW1iZXI9ZnVuY3Rpb24obnVtYmVyLHNpZ25hbHMpe1xuY29uc3Qgc2lnbmFsPXNpZ25hbHMuZmluZCgoe25hbWV9KT0+Y29uc3RhbnRzLnNpZ25hbHNbbmFtZV09PT1udW1iZXIpO1xuXG5pZihzaWduYWwhPT11bmRlZmluZWQpe1xucmV0dXJuIHNpZ25hbDtcbn1cblxucmV0dXJuIHNpZ25hbHMuZmluZCgoc2lnbmFsQSk9PnNpZ25hbEEubnVtYmVyPT09bnVtYmVyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxzQnlOdW1iZXI9Z2V0U2lnbmFsc0J5TnVtYmVyKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYWluLmpzLm1hcCIsImltcG9ydCB7c2lnbmFsc0J5TmFtZX0gZnJvbSAnaHVtYW4tc2lnbmFscyc7XG5cbmNvbnN0IGdldEVycm9yUHJlZml4ID0gKHt0aW1lZE91dCwgdGltZW91dCwgZXJyb3JDb2RlLCBzaWduYWwsIHNpZ25hbERlc2NyaXB0aW9uLCBleGl0Q29kZSwgaXNDYW5jZWxlZH0pID0+IHtcblx0aWYgKHRpbWVkT3V0KSB7XG5cdFx0cmV0dXJuIGB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0fSBtaWxsaXNlY29uZHNgO1xuXHR9XG5cblx0aWYgKGlzQ2FuY2VsZWQpIHtcblx0XHRyZXR1cm4gJ3dhcyBjYW5jZWxlZCc7XG5cdH1cblxuXHRpZiAoZXJyb3JDb2RlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gYGZhaWxlZCB3aXRoICR7ZXJyb3JDb2RlfWA7XG5cdH1cblxuXHRpZiAoc2lnbmFsICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gYHdhcyBraWxsZWQgd2l0aCAke3NpZ25hbH0gKCR7c2lnbmFsRGVzY3JpcHRpb259KWA7XG5cdH1cblxuXHRpZiAoZXhpdENvZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBgZmFpbGVkIHdpdGggZXhpdCBjb2RlICR7ZXhpdENvZGV9YDtcblx0fVxuXG5cdHJldHVybiAnZmFpbGVkJztcbn07XG5cbmV4cG9ydCBjb25zdCBtYWtlRXJyb3IgPSAoe1xuXHRzdGRvdXQsXG5cdHN0ZGVycixcblx0YWxsLFxuXHRlcnJvcixcblx0c2lnbmFsLFxuXHRleGl0Q29kZSxcblx0Y29tbWFuZCxcblx0ZXNjYXBlZENvbW1hbmQsXG5cdHRpbWVkT3V0LFxuXHRpc0NhbmNlbGVkLFxuXHRraWxsZWQsXG5cdHBhcnNlZDoge29wdGlvbnM6IHt0aW1lb3V0fX0sXG59KSA9PiB7XG5cdC8vIGBzaWduYWxgIGFuZCBgZXhpdENvZGVgIGVtaXR0ZWQgb24gYHNwYXduZWQub24oJ2V4aXQnKWAgZXZlbnQgY2FuIGJlIGBudWxsYC5cblx0Ly8gV2Ugbm9ybWFsaXplIHRoZW0gdG8gYHVuZGVmaW5lZGBcblx0ZXhpdENvZGUgPSBleGl0Q29kZSA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IGV4aXRDb2RlO1xuXHRzaWduYWwgPSBzaWduYWwgPT09IG51bGwgPyB1bmRlZmluZWQgOiBzaWduYWw7XG5cdGNvbnN0IHNpZ25hbERlc2NyaXB0aW9uID0gc2lnbmFsID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzaWduYWxzQnlOYW1lW3NpZ25hbF0uZGVzY3JpcHRpb247XG5cblx0Y29uc3QgZXJyb3JDb2RlID0gZXJyb3IgJiYgZXJyb3IuY29kZTtcblxuXHRjb25zdCBwcmVmaXggPSBnZXRFcnJvclByZWZpeCh7dGltZWRPdXQsIHRpbWVvdXQsIGVycm9yQ29kZSwgc2lnbmFsLCBzaWduYWxEZXNjcmlwdGlvbiwgZXhpdENvZGUsIGlzQ2FuY2VsZWR9KTtcblx0Y29uc3QgZXhlY2FNZXNzYWdlID0gYENvbW1hbmQgJHtwcmVmaXh9OiAke2NvbW1hbmR9YDtcblx0Y29uc3QgaXNFcnJvciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlcnJvcikgPT09ICdbb2JqZWN0IEVycm9yXSc7XG5cdGNvbnN0IHNob3J0TWVzc2FnZSA9IGlzRXJyb3IgPyBgJHtleGVjYU1lc3NhZ2V9XFxuJHtlcnJvci5tZXNzYWdlfWAgOiBleGVjYU1lc3NhZ2U7XG5cdGNvbnN0IG1lc3NhZ2UgPSBbc2hvcnRNZXNzYWdlLCBzdGRlcnIsIHN0ZG91dF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuXG5cdGlmIChpc0Vycm9yKSB7XG5cdFx0ZXJyb3Iub3JpZ2luYWxNZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcblx0XHRlcnJvci5tZXNzYWdlID0gbWVzc2FnZTtcblx0fSBlbHNlIHtcblx0XHRlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcblx0fVxuXG5cdGVycm9yLnNob3J0TWVzc2FnZSA9IHNob3J0TWVzc2FnZTtcblx0ZXJyb3IuY29tbWFuZCA9IGNvbW1hbmQ7XG5cdGVycm9yLmVzY2FwZWRDb21tYW5kID0gZXNjYXBlZENvbW1hbmQ7XG5cdGVycm9yLmV4aXRDb2RlID0gZXhpdENvZGU7XG5cdGVycm9yLnNpZ25hbCA9IHNpZ25hbDtcblx0ZXJyb3Iuc2lnbmFsRGVzY3JpcHRpb24gPSBzaWduYWxEZXNjcmlwdGlvbjtcblx0ZXJyb3Iuc3Rkb3V0ID0gc3Rkb3V0O1xuXHRlcnJvci5zdGRlcnIgPSBzdGRlcnI7XG5cblx0aWYgKGFsbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0ZXJyb3IuYWxsID0gYWxsO1xuXHR9XG5cblx0aWYgKCdidWZmZXJlZERhdGEnIGluIGVycm9yKSB7XG5cdFx0ZGVsZXRlIGVycm9yLmJ1ZmZlcmVkRGF0YTtcblx0fVxuXG5cdGVycm9yLmZhaWxlZCA9IHRydWU7XG5cdGVycm9yLnRpbWVkT3V0ID0gQm9vbGVhbih0aW1lZE91dCk7XG5cdGVycm9yLmlzQ2FuY2VsZWQgPSBpc0NhbmNlbGVkO1xuXHRlcnJvci5raWxsZWQgPSBraWxsZWQgJiYgIXRpbWVkT3V0O1xuXG5cdHJldHVybiBlcnJvcjtcbn07XG4iLCJjb25zdCBhbGlhc2VzID0gWydzdGRpbicsICdzdGRvdXQnLCAnc3RkZXJyJ107XG5cbmNvbnN0IGhhc0FsaWFzID0gb3B0aW9ucyA9PiBhbGlhc2VzLnNvbWUoYWxpYXMgPT4gb3B0aW9uc1thbGlhc10gIT09IHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVTdGRpbyA9IG9wdGlvbnMgPT4ge1xuXHRpZiAoIW9wdGlvbnMpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCB7c3RkaW99ID0gb3B0aW9ucztcblxuXHRpZiAoc3RkaW8gPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBhbGlhc2VzLm1hcChhbGlhcyA9PiBvcHRpb25zW2FsaWFzXSk7XG5cdH1cblxuXHRpZiAoaGFzQWxpYXMob3B0aW9ucykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYEl0J3Mgbm90IHBvc3NpYmxlIHRvIHByb3ZpZGUgXFxgc3RkaW9cXGAgaW4gY29tYmluYXRpb24gd2l0aCBvbmUgb2YgJHthbGlhc2VzLm1hcChhbGlhcyA9PiBgXFxgJHthbGlhc31cXGBgKS5qb2luKCcsICcpfWApO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBzdGRpbyA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gc3RkaW87XG5cdH1cblxuXHRpZiAoIUFycmF5LmlzQXJyYXkoc3RkaW8pKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXFxgc3RkaW9cXGAgdG8gYmUgb2YgdHlwZSBcXGBzdHJpbmdcXGAgb3IgXFxgQXJyYXlcXGAsIGdvdCBcXGAke3R5cGVvZiBzdGRpb31cXGBgKTtcblx0fVxuXG5cdGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KHN0ZGlvLmxlbmd0aCwgYWxpYXNlcy5sZW5ndGgpO1xuXHRyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RofSwgKHZhbHVlLCBpbmRleCkgPT4gc3RkaW9baW5kZXhdKTtcbn07XG5cbi8vIGBpcGNgIGlzIHB1c2hlZCB1bmxlc3MgaXQgaXMgYWxyZWFkeSBwcmVzZW50XG5leHBvcnQgY29uc3Qgbm9ybWFsaXplU3RkaW9Ob2RlID0gb3B0aW9ucyA9PiB7XG5cdGNvbnN0IHN0ZGlvID0gbm9ybWFsaXplU3RkaW8ob3B0aW9ucyk7XG5cblx0aWYgKHN0ZGlvID09PSAnaXBjJykge1xuXHRcdHJldHVybiAnaXBjJztcblx0fVxuXG5cdGlmIChzdGRpbyA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBzdGRpbyA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gW3N0ZGlvLCBzdGRpbywgc3RkaW8sICdpcGMnXTtcblx0fVxuXG5cdGlmIChzdGRpby5pbmNsdWRlcygnaXBjJykpIHtcblx0XHRyZXR1cm4gc3RkaW87XG5cdH1cblxuXHRyZXR1cm4gWy4uLnN0ZGlvLCAnaXBjJ107XG59O1xuIiwiaW1wb3J0IG9zIGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IG9uRXhpdCBmcm9tICdzaWduYWwtZXhpdCc7XG5cbmNvbnN0IERFRkFVTFRfRk9SQ0VfS0lMTF9USU1FT1VUID0gMTAwMCAqIDU7XG5cbi8vIE1vbmtleS1wYXRjaGVzIGBjaGlsZFByb2Nlc3Mua2lsbCgpYCB0byBhZGQgYGZvcmNlS2lsbEFmdGVyVGltZW91dGAgYmVoYXZpb3JcbmV4cG9ydCBjb25zdCBzcGF3bmVkS2lsbCA9IChraWxsLCBzaWduYWwgPSAnU0lHVEVSTScsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRjb25zdCBraWxsUmVzdWx0ID0ga2lsbChzaWduYWwpO1xuXHRzZXRLaWxsVGltZW91dChraWxsLCBzaWduYWwsIG9wdGlvbnMsIGtpbGxSZXN1bHQpO1xuXHRyZXR1cm4ga2lsbFJlc3VsdDtcbn07XG5cbmNvbnN0IHNldEtpbGxUaW1lb3V0ID0gKGtpbGwsIHNpZ25hbCwgb3B0aW9ucywga2lsbFJlc3VsdCkgPT4ge1xuXHRpZiAoIXNob3VsZEZvcmNlS2lsbChzaWduYWwsIG9wdGlvbnMsIGtpbGxSZXN1bHQpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgdGltZW91dCA9IGdldEZvcmNlS2lsbEFmdGVyVGltZW91dChvcHRpb25zKTtcblx0Y29uc3QgdCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGtpbGwoJ1NJR0tJTEwnKTtcblx0fSwgdGltZW91dCk7XG5cblx0Ly8gR3VhcmRlZCBiZWNhdXNlIHRoZXJlJ3Mgbm8gYC51bnJlZigpYCB3aGVuIGBleGVjYWAgaXMgdXNlZCBpbiB0aGUgcmVuZGVyZXJcblx0Ly8gcHJvY2VzcyBpbiBFbGVjdHJvbi4gVGhpcyBjYW5ub3QgYmUgdGVzdGVkIHNpbmNlIHdlIGRvbid0IHJ1biB0ZXN0cyBpblxuXHQvLyBFbGVjdHJvbi5cblx0Ly8gaXN0YW5idWwgaWdub3JlIGVsc2Vcblx0aWYgKHQudW5yZWYpIHtcblx0XHR0LnVucmVmKCk7XG5cdH1cbn07XG5cbmNvbnN0IHNob3VsZEZvcmNlS2lsbCA9IChzaWduYWwsIHtmb3JjZUtpbGxBZnRlclRpbWVvdXR9LCBraWxsUmVzdWx0KSA9PiBpc1NpZ3Rlcm0oc2lnbmFsKSAmJiBmb3JjZUtpbGxBZnRlclRpbWVvdXQgIT09IGZhbHNlICYmIGtpbGxSZXN1bHQ7XG5cbmNvbnN0IGlzU2lndGVybSA9IHNpZ25hbCA9PiBzaWduYWwgPT09IG9zLmNvbnN0YW50cy5zaWduYWxzLlNJR1RFUk1cblx0XHR8fCAodHlwZW9mIHNpZ25hbCA9PT0gJ3N0cmluZycgJiYgc2lnbmFsLnRvVXBwZXJDYXNlKCkgPT09ICdTSUdURVJNJyk7XG5cbmNvbnN0IGdldEZvcmNlS2lsbEFmdGVyVGltZW91dCA9ICh7Zm9yY2VLaWxsQWZ0ZXJUaW1lb3V0ID0gdHJ1ZX0pID0+IHtcblx0aWYgKGZvcmNlS2lsbEFmdGVyVGltZW91dCA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybiBERUZBVUxUX0ZPUkNFX0tJTExfVElNRU9VVDtcblx0fVxuXG5cdGlmICghTnVtYmVyLmlzRmluaXRlKGZvcmNlS2lsbEFmdGVyVGltZW91dCkgfHwgZm9yY2VLaWxsQWZ0ZXJUaW1lb3V0IDwgMCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIHRoZSBcXGBmb3JjZUtpbGxBZnRlclRpbWVvdXRcXGAgb3B0aW9uIHRvIGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIGdvdCBcXGAke2ZvcmNlS2lsbEFmdGVyVGltZW91dH1cXGAgKCR7dHlwZW9mIGZvcmNlS2lsbEFmdGVyVGltZW91dH0pYCk7XG5cdH1cblxuXHRyZXR1cm4gZm9yY2VLaWxsQWZ0ZXJUaW1lb3V0O1xufTtcblxuLy8gYGNoaWxkUHJvY2Vzcy5jYW5jZWwoKWBcbmV4cG9ydCBjb25zdCBzcGF3bmVkQ2FuY2VsID0gKHNwYXduZWQsIGNvbnRleHQpID0+IHtcblx0Y29uc3Qga2lsbFJlc3VsdCA9IHNwYXduZWQua2lsbCgpO1xuXG5cdGlmIChraWxsUmVzdWx0KSB7XG5cdFx0Y29udGV4dC5pc0NhbmNlbGVkID0gdHJ1ZTtcblx0fVxufTtcblxuY29uc3QgdGltZW91dEtpbGwgPSAoc3Bhd25lZCwgc2lnbmFsLCByZWplY3QpID0+IHtcblx0c3Bhd25lZC5raWxsKHNpZ25hbCk7XG5cdHJlamVjdChPYmplY3QuYXNzaWduKG5ldyBFcnJvcignVGltZWQgb3V0JyksIHt0aW1lZE91dDogdHJ1ZSwgc2lnbmFsfSkpO1xufTtcblxuLy8gYHRpbWVvdXRgIG9wdGlvbiBoYW5kbGluZ1xuZXhwb3J0IGNvbnN0IHNldHVwVGltZW91dCA9IChzcGF3bmVkLCB7dGltZW91dCwga2lsbFNpZ25hbCA9ICdTSUdURVJNJ30sIHNwYXduZWRQcm9taXNlKSA9PiB7XG5cdGlmICh0aW1lb3V0ID09PSAwIHx8IHRpbWVvdXQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBzcGF3bmVkUHJvbWlzZTtcblx0fVxuXG5cdGxldCB0aW1lb3V0SWQ7XG5cdGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGltZW91dEtpbGwoc3Bhd25lZCwga2lsbFNpZ25hbCwgcmVqZWN0KTtcblx0XHR9LCB0aW1lb3V0KTtcblx0fSk7XG5cblx0Y29uc3Qgc2FmZVNwYXduZWRQcm9taXNlID0gc3Bhd25lZFByb21pc2UuZmluYWxseSgoKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG5cdH0pO1xuXG5cdHJldHVybiBQcm9taXNlLnJhY2UoW3RpbWVvdXRQcm9taXNlLCBzYWZlU3Bhd25lZFByb21pc2VdKTtcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVRpbWVvdXQgPSAoe3RpbWVvdXR9KSA9PiB7XG5cdGlmICh0aW1lb3V0ICE9PSB1bmRlZmluZWQgJiYgKCFOdW1iZXIuaXNGaW5pdGUodGltZW91dCkgfHwgdGltZW91dCA8IDApKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgdGhlIFxcYHRpbWVvdXRcXGAgb3B0aW9uIHRvIGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIGdvdCBcXGAke3RpbWVvdXR9XFxgICgke3R5cGVvZiB0aW1lb3V0fSlgKTtcblx0fVxufTtcblxuLy8gYGNsZWFudXBgIG9wdGlvbiBoYW5kbGluZ1xuZXhwb3J0IGNvbnN0IHNldEV4aXRIYW5kbGVyID0gYXN5bmMgKHNwYXduZWQsIHtjbGVhbnVwLCBkZXRhY2hlZH0sIHRpbWVkUHJvbWlzZSkgPT4ge1xuXHRpZiAoIWNsZWFudXAgfHwgZGV0YWNoZWQpIHtcblx0XHRyZXR1cm4gdGltZWRQcm9taXNlO1xuXHR9XG5cblx0Y29uc3QgcmVtb3ZlRXhpdEhhbmRsZXIgPSBvbkV4aXQoKCkgPT4ge1xuXHRcdHNwYXduZWQua2lsbCgpO1xuXHR9KTtcblxuXHRyZXR1cm4gdGltZWRQcm9taXNlLmZpbmFsbHkoKCkgPT4ge1xuXHRcdHJlbW92ZUV4aXRIYW5kbGVyKCk7XG5cdH0pO1xufTtcbiIsImV4cG9ydCBmdW5jdGlvbiBpc1N0cmVhbShzdHJlYW0pIHtcblx0cmV0dXJuIHN0cmVhbSAhPT0gbnVsbFxuXHRcdCYmIHR5cGVvZiBzdHJlYW0gPT09ICdvYmplY3QnXG5cdFx0JiYgdHlwZW9mIHN0cmVhbS5waXBlID09PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXcml0YWJsZVN0cmVhbShzdHJlYW0pIHtcblx0cmV0dXJuIGlzU3RyZWFtKHN0cmVhbSlcblx0XHQmJiBzdHJlYW0ud3JpdGFibGUgIT09IGZhbHNlXG5cdFx0JiYgdHlwZW9mIHN0cmVhbS5fd3JpdGUgPT09ICdmdW5jdGlvbidcblx0XHQmJiB0eXBlb2Ygc3RyZWFtLl93cml0YWJsZVN0YXRlID09PSAnb2JqZWN0Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW0oc3RyZWFtKSB7XG5cdHJldHVybiBpc1N0cmVhbShzdHJlYW0pXG5cdFx0JiYgc3RyZWFtLnJlYWRhYmxlICE9PSBmYWxzZVxuXHRcdCYmIHR5cGVvZiBzdHJlYW0uX3JlYWQgPT09ICdmdW5jdGlvbidcblx0XHQmJiB0eXBlb2Ygc3RyZWFtLl9yZWFkYWJsZVN0YXRlID09PSAnb2JqZWN0Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRHVwbGV4U3RyZWFtKHN0cmVhbSkge1xuXHRyZXR1cm4gaXNXcml0YWJsZVN0cmVhbShzdHJlYW0pXG5cdFx0JiYgaXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUcmFuc2Zvcm1TdHJlYW0oc3RyZWFtKSB7XG5cdHJldHVybiBpc0R1cGxleFN0cmVhbShzdHJlYW0pXG5cdFx0JiYgdHlwZW9mIHN0cmVhbS5fdHJhbnNmb3JtID09PSAnZnVuY3Rpb24nO1xufVxuIiwiaW1wb3J0IHtpc1N0cmVhbX0gZnJvbSAnaXMtc3RyZWFtJztcbmltcG9ydCBnZXRTdHJlYW0gZnJvbSAnZ2V0LXN0cmVhbSc7XG5pbXBvcnQgbWVyZ2VTdHJlYW0gZnJvbSAnbWVyZ2Utc3RyZWFtJztcblxuLy8gYGlucHV0YCBvcHRpb25cbmV4cG9ydCBjb25zdCBoYW5kbGVJbnB1dCA9IChzcGF3bmVkLCBpbnB1dCkgPT4ge1xuXHQvLyBDaGVja2luZyBmb3Igc3RkaW4gaXMgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8yNjg1MlxuXHQvLyBAdG9kbyByZW1vdmUgYHx8IHNwYXduZWQuc3RkaW4gPT09IHVuZGVmaW5lZGAgb25jZSB3ZSBkcm9wIHN1cHBvcnQgZm9yIE5vZGUuanMgPD0xMi4yLjBcblx0aWYgKGlucHV0ID09PSB1bmRlZmluZWQgfHwgc3Bhd25lZC5zdGRpbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGlzU3RyZWFtKGlucHV0KSkge1xuXHRcdGlucHV0LnBpcGUoc3Bhd25lZC5zdGRpbik7XG5cdH0gZWxzZSB7XG5cdFx0c3Bhd25lZC5zdGRpbi5lbmQoaW5wdXQpO1xuXHR9XG59O1xuXG4vLyBgYWxsYCBpbnRlcmxlYXZlcyBgc3Rkb3V0YCBhbmQgYHN0ZGVycmBcbmV4cG9ydCBjb25zdCBtYWtlQWxsU3RyZWFtID0gKHNwYXduZWQsIHthbGx9KSA9PiB7XG5cdGlmICghYWxsIHx8ICghc3Bhd25lZC5zdGRvdXQgJiYgIXNwYXduZWQuc3RkZXJyKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IG1peGVkID0gbWVyZ2VTdHJlYW0oKTtcblxuXHRpZiAoc3Bhd25lZC5zdGRvdXQpIHtcblx0XHRtaXhlZC5hZGQoc3Bhd25lZC5zdGRvdXQpO1xuXHR9XG5cblx0aWYgKHNwYXduZWQuc3RkZXJyKSB7XG5cdFx0bWl4ZWQuYWRkKHNwYXduZWQuc3RkZXJyKTtcblx0fVxuXG5cdHJldHVybiBtaXhlZDtcbn07XG5cbi8vIE9uIGZhaWx1cmUsIGByZXN1bHQuc3Rkb3V0fHN0ZGVycnxhbGxgIHNob3VsZCBjb250YWluIHRoZSBjdXJyZW50bHkgYnVmZmVyZWQgc3RyZWFtXG5jb25zdCBnZXRCdWZmZXJlZERhdGEgPSBhc3luYyAoc3RyZWFtLCBzdHJlYW1Qcm9taXNlKSA9PiB7XG5cdGlmICghc3RyZWFtKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c3RyZWFtLmRlc3Ryb3koKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiBhd2FpdCBzdHJlYW1Qcm9taXNlO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdHJldHVybiBlcnJvci5idWZmZXJlZERhdGE7XG5cdH1cbn07XG5cbmNvbnN0IGdldFN0cmVhbVByb21pc2UgPSAoc3RyZWFtLCB7ZW5jb2RpbmcsIGJ1ZmZlciwgbWF4QnVmZmVyfSkgPT4ge1xuXHRpZiAoIXN0cmVhbSB8fCAhYnVmZmVyKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGVuY29kaW5nKSB7XG5cdFx0cmV0dXJuIGdldFN0cmVhbShzdHJlYW0sIHtlbmNvZGluZywgbWF4QnVmZmVyfSk7XG5cdH1cblxuXHRyZXR1cm4gZ2V0U3RyZWFtLmJ1ZmZlcihzdHJlYW0sIHttYXhCdWZmZXJ9KTtcbn07XG5cbi8vIFJldHJpZXZlIHJlc3VsdCBvZiBjaGlsZCBwcm9jZXNzOiBleGl0IGNvZGUsIHNpZ25hbCwgZXJyb3IsIHN0cmVhbXMgKHN0ZG91dC9zdGRlcnIvYWxsKVxuZXhwb3J0IGNvbnN0IGdldFNwYXduZWRSZXN1bHQgPSBhc3luYyAoe3N0ZG91dCwgc3RkZXJyLCBhbGx9LCB7ZW5jb2RpbmcsIGJ1ZmZlciwgbWF4QnVmZmVyfSwgcHJvY2Vzc0RvbmUpID0+IHtcblx0Y29uc3Qgc3Rkb3V0UHJvbWlzZSA9IGdldFN0cmVhbVByb21pc2Uoc3Rkb3V0LCB7ZW5jb2RpbmcsIGJ1ZmZlciwgbWF4QnVmZmVyfSk7XG5cdGNvbnN0IHN0ZGVyclByb21pc2UgPSBnZXRTdHJlYW1Qcm9taXNlKHN0ZGVyciwge2VuY29kaW5nLCBidWZmZXIsIG1heEJ1ZmZlcn0pO1xuXHRjb25zdCBhbGxQcm9taXNlID0gZ2V0U3RyZWFtUHJvbWlzZShhbGwsIHtlbmNvZGluZywgYnVmZmVyLCBtYXhCdWZmZXI6IG1heEJ1ZmZlciAqIDJ9KTtcblxuXHR0cnkge1xuXHRcdHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChbcHJvY2Vzc0RvbmUsIHN0ZG91dFByb21pc2UsIHN0ZGVyclByb21pc2UsIGFsbFByb21pc2VdKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoW1xuXHRcdFx0e2Vycm9yLCBzaWduYWw6IGVycm9yLnNpZ25hbCwgdGltZWRPdXQ6IGVycm9yLnRpbWVkT3V0fSxcblx0XHRcdGdldEJ1ZmZlcmVkRGF0YShzdGRvdXQsIHN0ZG91dFByb21pc2UpLFxuXHRcdFx0Z2V0QnVmZmVyZWREYXRhKHN0ZGVyciwgc3RkZXJyUHJvbWlzZSksXG5cdFx0XHRnZXRCdWZmZXJlZERhdGEoYWxsLCBhbGxQcm9taXNlKSxcblx0XHRdKTtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlSW5wdXRTeW5jID0gKHtpbnB1dH0pID0+IHtcblx0aWYgKGlzU3RyZWFtKGlucHV0KSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBgaW5wdXRgIG9wdGlvbiBjYW5ub3QgYmUgYSBzdHJlYW0gaW4gc3luYyBtb2RlJyk7XG5cdH1cbn07XG4iLCJjb25zdCBuYXRpdmVQcm9taXNlUHJvdG90eXBlID0gKGFzeW5jICgpID0+IHt9KSgpLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbmNvbnN0IGRlc2NyaXB0b3JzID0gWyd0aGVuJywgJ2NhdGNoJywgJ2ZpbmFsbHknXS5tYXAocHJvcGVydHkgPT4gW1xuXHRwcm9wZXJ0eSxcblx0UmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgcHJvcGVydHkpLFxuXSk7XG5cbi8vIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBtaXhpbiBvZiBgY2hpbGRQcm9jZXNzYCBhbmQgYFByb21pc2VgXG5leHBvcnQgY29uc3QgbWVyZ2VQcm9taXNlID0gKHNwYXduZWQsIHByb21pc2UpID0+IHtcblx0Zm9yIChjb25zdCBbcHJvcGVydHksIGRlc2NyaXB0b3JdIG9mIGRlc2NyaXB0b3JzKSB7XG5cdFx0Ly8gU3RhcnRpbmcgdGhlIG1haW4gYHByb21pc2VgIGlzIGRlZmVycmVkIHRvIGF2b2lkIGNvbnN1bWluZyBzdHJlYW1zXG5cdFx0Y29uc3QgdmFsdWUgPSB0eXBlb2YgcHJvbWlzZSA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0PyAoLi4uYXJncykgPT4gUmVmbGVjdC5hcHBseShkZXNjcmlwdG9yLnZhbHVlLCBwcm9taXNlKCksIGFyZ3MpXG5cdFx0XHQ6IGRlc2NyaXB0b3IudmFsdWUuYmluZChwcm9taXNlKTtcblxuXHRcdFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoc3Bhd25lZCwgcHJvcGVydHksIHsuLi5kZXNjcmlwdG9yLCB2YWx1ZX0pO1xuXHR9XG5cblx0cmV0dXJuIHNwYXduZWQ7XG59O1xuXG4vLyBVc2UgcHJvbWlzZXMgaW5zdGVhZCBvZiBgY2hpbGRfcHJvY2Vzc2AgZXZlbnRzXG5leHBvcnQgY29uc3QgZ2V0U3Bhd25lZFByb21pc2UgPSBzcGF3bmVkID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0c3Bhd25lZC5vbignZXhpdCcsIChleGl0Q29kZSwgc2lnbmFsKSA9PiB7XG5cdFx0cmVzb2x2ZSh7ZXhpdENvZGUsIHNpZ25hbH0pO1xuXHR9KTtcblxuXHRzcGF3bmVkLm9uKCdlcnJvcicsIGVycm9yID0+IHtcblx0XHRyZWplY3QoZXJyb3IpO1xuXHR9KTtcblxuXHRpZiAoc3Bhd25lZC5zdGRpbikge1xuXHRcdHNwYXduZWQuc3RkaW4ub24oJ2Vycm9yJywgZXJyb3IgPT4ge1xuXHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHR9KTtcblx0fVxufSk7XG4iLCJjb25zdCBub3JtYWxpemVBcmdzID0gKGZpbGUsIGFyZ3MgPSBbXSkgPT4ge1xuXHRpZiAoIUFycmF5LmlzQXJyYXkoYXJncykpIHtcblx0XHRyZXR1cm4gW2ZpbGVdO1xuXHR9XG5cblx0cmV0dXJuIFtmaWxlLCAuLi5hcmdzXTtcbn07XG5cbmNvbnN0IE5PX0VTQ0FQRV9SRUdFWFAgPSAvXltcXHcuLV0rJC87XG5jb25zdCBET1VCTEVfUVVPVEVTX1JFR0VYUCA9IC9cIi9nO1xuXG5jb25zdCBlc2NhcGVBcmcgPSBhcmcgPT4ge1xuXHRpZiAodHlwZW9mIGFyZyAhPT0gJ3N0cmluZycgfHwgTk9fRVNDQVBFX1JFR0VYUC50ZXN0KGFyZykpIHtcblx0XHRyZXR1cm4gYXJnO1xuXHR9XG5cblx0cmV0dXJuIGBcIiR7YXJnLnJlcGxhY2UoRE9VQkxFX1FVT1RFU19SRUdFWFAsICdcXFxcXCInKX1cImA7XG59O1xuXG5leHBvcnQgY29uc3Qgam9pbkNvbW1hbmQgPSAoZmlsZSwgYXJncykgPT4gbm9ybWFsaXplQXJncyhmaWxlLCBhcmdzKS5qb2luKCcgJyk7XG5cbmV4cG9ydCBjb25zdCBnZXRFc2NhcGVkQ29tbWFuZCA9IChmaWxlLCBhcmdzKSA9PiBub3JtYWxpemVBcmdzKGZpbGUsIGFyZ3MpLm1hcChhcmcgPT4gZXNjYXBlQXJnKGFyZykpLmpvaW4oJyAnKTtcblxuY29uc3QgU1BBQ0VTX1JFR0VYUCA9IC8gKy9nO1xuXG4vLyBIYW5kbGUgYGV4ZWNhQ29tbWFuZCgpYFxuZXhwb3J0IGNvbnN0IHBhcnNlQ29tbWFuZCA9IGNvbW1hbmQgPT4ge1xuXHRjb25zdCB0b2tlbnMgPSBbXTtcblx0Zm9yIChjb25zdCB0b2tlbiBvZiBjb21tYW5kLnRyaW0oKS5zcGxpdChTUEFDRVNfUkVHRVhQKSkge1xuXHRcdC8vIEFsbG93IHNwYWNlcyB0byBiZSBlc2NhcGVkIGJ5IGEgYmFja3NsYXNoIGlmIG5vdCBtZWFudCBhcyBhIGRlbGltaXRlclxuXHRcdGNvbnN0IHByZXZpb3VzVG9rZW4gPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuXHRcdGlmIChwcmV2aW91c1Rva2VuICYmIHByZXZpb3VzVG9rZW4uZW5kc1dpdGgoJ1xcXFwnKSkge1xuXHRcdFx0Ly8gTWVyZ2UgcHJldmlvdXMgdG9rZW4gd2l0aCBjdXJyZW50IG9uZVxuXHRcdFx0dG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXSA9IGAke3ByZXZpb3VzVG9rZW4uc2xpY2UoMCwgLTEpfSAke3Rva2VufWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRva2Vucy5wdXNoKHRva2VuKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG9rZW5zO1xufTtcbiIsImltcG9ydCB7QnVmZmVyfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IGNoaWxkUHJvY2VzcyBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCBjcm9zc1NwYXduIGZyb20gJ2Nyb3NzLXNwYXduJztcbmltcG9ydCBzdHJpcEZpbmFsTmV3bGluZSBmcm9tICdzdHJpcC1maW5hbC1uZXdsaW5lJztcbmltcG9ydCB7bnBtUnVuUGF0aEVudn0gZnJvbSAnbnBtLXJ1bi1wYXRoJztcbmltcG9ydCBvbmV0aW1lIGZyb20gJ29uZXRpbWUnO1xuaW1wb3J0IHttYWtlRXJyb3J9IGZyb20gJy4vbGliL2Vycm9yLmpzJztcbmltcG9ydCB7bm9ybWFsaXplU3RkaW8sIG5vcm1hbGl6ZVN0ZGlvTm9kZX0gZnJvbSAnLi9saWIvc3RkaW8uanMnO1xuaW1wb3J0IHtzcGF3bmVkS2lsbCwgc3Bhd25lZENhbmNlbCwgc2V0dXBUaW1lb3V0LCB2YWxpZGF0ZVRpbWVvdXQsIHNldEV4aXRIYW5kbGVyfSBmcm9tICcuL2xpYi9raWxsLmpzJztcbmltcG9ydCB7aGFuZGxlSW5wdXQsIGdldFNwYXduZWRSZXN1bHQsIG1ha2VBbGxTdHJlYW0sIHZhbGlkYXRlSW5wdXRTeW5jfSBmcm9tICcuL2xpYi9zdHJlYW0uanMnO1xuaW1wb3J0IHttZXJnZVByb21pc2UsIGdldFNwYXduZWRQcm9taXNlfSBmcm9tICcuL2xpYi9wcm9taXNlLmpzJztcbmltcG9ydCB7am9pbkNvbW1hbmQsIHBhcnNlQ29tbWFuZCwgZ2V0RXNjYXBlZENvbW1hbmR9IGZyb20gJy4vbGliL2NvbW1hbmQuanMnO1xuXG5jb25zdCBERUZBVUxUX01BWF9CVUZGRVIgPSAxMDAwICogMTAwMCAqIDEwMDtcblxuY29uc3QgZ2V0RW52ID0gKHtlbnY6IGVudk9wdGlvbiwgZXh0ZW5kRW52LCBwcmVmZXJMb2NhbCwgbG9jYWxEaXIsIGV4ZWNQYXRofSkgPT4ge1xuXHRjb25zdCBlbnYgPSBleHRlbmRFbnYgPyB7Li4ucHJvY2Vzcy5lbnYsIC4uLmVudk9wdGlvbn0gOiBlbnZPcHRpb247XG5cblx0aWYgKHByZWZlckxvY2FsKSB7XG5cdFx0cmV0dXJuIG5wbVJ1blBhdGhFbnYoe2VudiwgY3dkOiBsb2NhbERpciwgZXhlY1BhdGh9KTtcblx0fVxuXG5cdHJldHVybiBlbnY7XG59O1xuXG5jb25zdCBoYW5kbGVBcmd1bWVudHMgPSAoZmlsZSwgYXJncywgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGNvbnN0IHBhcnNlZCA9IGNyb3NzU3Bhd24uX3BhcnNlKGZpbGUsIGFyZ3MsIG9wdGlvbnMpO1xuXHRmaWxlID0gcGFyc2VkLmNvbW1hbmQ7XG5cdGFyZ3MgPSBwYXJzZWQuYXJncztcblx0b3B0aW9ucyA9IHBhcnNlZC5vcHRpb25zO1xuXG5cdG9wdGlvbnMgPSB7XG5cdFx0bWF4QnVmZmVyOiBERUZBVUxUX01BWF9CVUZGRVIsXG5cdFx0YnVmZmVyOiB0cnVlLFxuXHRcdHN0cmlwRmluYWxOZXdsaW5lOiB0cnVlLFxuXHRcdGV4dGVuZEVudjogdHJ1ZSxcblx0XHRwcmVmZXJMb2NhbDogZmFsc2UsXG5cdFx0bG9jYWxEaXI6IG9wdGlvbnMuY3dkIHx8IHByb2Nlc3MuY3dkKCksXG5cdFx0ZXhlY1BhdGg6IHByb2Nlc3MuZXhlY1BhdGgsXG5cdFx0ZW5jb2Rpbmc6ICd1dGY4Jyxcblx0XHRyZWplY3Q6IHRydWUsXG5cdFx0Y2xlYW51cDogdHJ1ZSxcblx0XHRhbGw6IGZhbHNlLFxuXHRcdHdpbmRvd3NIaWRlOiB0cnVlLFxuXHRcdC4uLm9wdGlvbnMsXG5cdH07XG5cblx0b3B0aW9ucy5lbnYgPSBnZXRFbnYob3B0aW9ucyk7XG5cblx0b3B0aW9ucy5zdGRpbyA9IG5vcm1hbGl6ZVN0ZGlvKG9wdGlvbnMpO1xuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInICYmIHBhdGguYmFzZW5hbWUoZmlsZSwgJy5leGUnKSA9PT0gJ2NtZCcpIHtcblx0XHQvLyAjMTE2XG5cdFx0YXJncy51bnNoaWZ0KCcvcScpO1xuXHR9XG5cblx0cmV0dXJuIHtmaWxlLCBhcmdzLCBvcHRpb25zLCBwYXJzZWR9O1xufTtcblxuY29uc3QgaGFuZGxlT3V0cHV0ID0gKG9wdGlvbnMsIHZhbHVlLCBlcnJvcikgPT4ge1xuXHRpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuXHRcdC8vIFdoZW4gYGV4ZWNhU3luYygpYCBlcnJvcnMsIHdlIG5vcm1hbGl6ZSBpdCB0byAnJyB0byBtaW1pYyBgZXhlY2EoKWBcblx0XHRyZXR1cm4gZXJyb3IgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICcnO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMuc3RyaXBGaW5hbE5ld2xpbmUpIHtcblx0XHRyZXR1cm4gc3RyaXBGaW5hbE5ld2xpbmUodmFsdWUpO1xuXHR9XG5cblx0cmV0dXJuIHZhbHVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNhKGZpbGUsIGFyZ3MsIG9wdGlvbnMpIHtcblx0Y29uc3QgcGFyc2VkID0gaGFuZGxlQXJndW1lbnRzKGZpbGUsIGFyZ3MsIG9wdGlvbnMpO1xuXHRjb25zdCBjb21tYW5kID0gam9pbkNvbW1hbmQoZmlsZSwgYXJncyk7XG5cdGNvbnN0IGVzY2FwZWRDb21tYW5kID0gZ2V0RXNjYXBlZENvbW1hbmQoZmlsZSwgYXJncyk7XG5cblx0dmFsaWRhdGVUaW1lb3V0KHBhcnNlZC5vcHRpb25zKTtcblxuXHRsZXQgc3Bhd25lZDtcblx0dHJ5IHtcblx0XHRzcGF3bmVkID0gY2hpbGRQcm9jZXNzLnNwYXduKHBhcnNlZC5maWxlLCBwYXJzZWQuYXJncywgcGFyc2VkLm9wdGlvbnMpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIEVuc3VyZSB0aGUgcmV0dXJuZWQgZXJyb3IgaXMgYWx3YXlzIGJvdGggYSBwcm9taXNlIGFuZCBhIGNoaWxkIHByb2Nlc3Ncblx0XHRjb25zdCBkdW1teVNwYXduZWQgPSBuZXcgY2hpbGRQcm9jZXNzLkNoaWxkUHJvY2VzcygpO1xuXHRcdGNvbnN0IGVycm9yUHJvbWlzZSA9IFByb21pc2UucmVqZWN0KG1ha2VFcnJvcih7XG5cdFx0XHRlcnJvcixcblx0XHRcdHN0ZG91dDogJycsXG5cdFx0XHRzdGRlcnI6ICcnLFxuXHRcdFx0YWxsOiAnJyxcblx0XHRcdGNvbW1hbmQsXG5cdFx0XHRlc2NhcGVkQ29tbWFuZCxcblx0XHRcdHBhcnNlZCxcblx0XHRcdHRpbWVkT3V0OiBmYWxzZSxcblx0XHRcdGlzQ2FuY2VsZWQ6IGZhbHNlLFxuXHRcdFx0a2lsbGVkOiBmYWxzZSxcblx0XHR9KSk7XG5cdFx0cmV0dXJuIG1lcmdlUHJvbWlzZShkdW1teVNwYXduZWQsIGVycm9yUHJvbWlzZSk7XG5cdH1cblxuXHRjb25zdCBzcGF3bmVkUHJvbWlzZSA9IGdldFNwYXduZWRQcm9taXNlKHNwYXduZWQpO1xuXHRjb25zdCB0aW1lZFByb21pc2UgPSBzZXR1cFRpbWVvdXQoc3Bhd25lZCwgcGFyc2VkLm9wdGlvbnMsIHNwYXduZWRQcm9taXNlKTtcblx0Y29uc3QgcHJvY2Vzc0RvbmUgPSBzZXRFeGl0SGFuZGxlcihzcGF3bmVkLCBwYXJzZWQub3B0aW9ucywgdGltZWRQcm9taXNlKTtcblxuXHRjb25zdCBjb250ZXh0ID0ge2lzQ2FuY2VsZWQ6IGZhbHNlfTtcblxuXHRzcGF3bmVkLmtpbGwgPSBzcGF3bmVkS2lsbC5iaW5kKG51bGwsIHNwYXduZWQua2lsbC5iaW5kKHNwYXduZWQpKTtcblx0c3Bhd25lZC5jYW5jZWwgPSBzcGF3bmVkQ2FuY2VsLmJpbmQobnVsbCwgc3Bhd25lZCwgY29udGV4dCk7XG5cblx0Y29uc3QgaGFuZGxlUHJvbWlzZSA9IGFzeW5jICgpID0+IHtcblx0XHRjb25zdCBbe2Vycm9yLCBleGl0Q29kZSwgc2lnbmFsLCB0aW1lZE91dH0sIHN0ZG91dFJlc3VsdCwgc3RkZXJyUmVzdWx0LCBhbGxSZXN1bHRdID0gYXdhaXQgZ2V0U3Bhd25lZFJlc3VsdChzcGF3bmVkLCBwYXJzZWQub3B0aW9ucywgcHJvY2Vzc0RvbmUpO1xuXHRcdGNvbnN0IHN0ZG91dCA9IGhhbmRsZU91dHB1dChwYXJzZWQub3B0aW9ucywgc3Rkb3V0UmVzdWx0KTtcblx0XHRjb25zdCBzdGRlcnIgPSBoYW5kbGVPdXRwdXQocGFyc2VkLm9wdGlvbnMsIHN0ZGVyclJlc3VsdCk7XG5cdFx0Y29uc3QgYWxsID0gaGFuZGxlT3V0cHV0KHBhcnNlZC5vcHRpb25zLCBhbGxSZXN1bHQpO1xuXG5cdFx0aWYgKGVycm9yIHx8IGV4aXRDb2RlICE9PSAwIHx8IHNpZ25hbCAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgcmV0dXJuZWRFcnJvciA9IG1ha2VFcnJvcih7XG5cdFx0XHRcdGVycm9yLFxuXHRcdFx0XHRleGl0Q29kZSxcblx0XHRcdFx0c2lnbmFsLFxuXHRcdFx0XHRzdGRvdXQsXG5cdFx0XHRcdHN0ZGVycixcblx0XHRcdFx0YWxsLFxuXHRcdFx0XHRjb21tYW5kLFxuXHRcdFx0XHRlc2NhcGVkQ29tbWFuZCxcblx0XHRcdFx0cGFyc2VkLFxuXHRcdFx0XHR0aW1lZE91dCxcblx0XHRcdFx0aXNDYW5jZWxlZDogY29udGV4dC5pc0NhbmNlbGVkIHx8IChwYXJzZWQub3B0aW9ucy5zaWduYWwgPyBwYXJzZWQub3B0aW9ucy5zaWduYWwuYWJvcnRlZCA6IGZhbHNlKSxcblx0XHRcdFx0a2lsbGVkOiBzcGF3bmVkLmtpbGxlZCxcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoIXBhcnNlZC5vcHRpb25zLnJlamVjdCkge1xuXHRcdFx0XHRyZXR1cm4gcmV0dXJuZWRFcnJvcjtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgcmV0dXJuZWRFcnJvcjtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0Y29tbWFuZCxcblx0XHRcdGVzY2FwZWRDb21tYW5kLFxuXHRcdFx0ZXhpdENvZGU6IDAsXG5cdFx0XHRzdGRvdXQsXG5cdFx0XHRzdGRlcnIsXG5cdFx0XHRhbGwsXG5cdFx0XHRmYWlsZWQ6IGZhbHNlLFxuXHRcdFx0dGltZWRPdXQ6IGZhbHNlLFxuXHRcdFx0aXNDYW5jZWxlZDogZmFsc2UsXG5cdFx0XHRraWxsZWQ6IGZhbHNlLFxuXHRcdH07XG5cdH07XG5cblx0Y29uc3QgaGFuZGxlUHJvbWlzZU9uY2UgPSBvbmV0aW1lKGhhbmRsZVByb21pc2UpO1xuXG5cdGhhbmRsZUlucHV0KHNwYXduZWQsIHBhcnNlZC5vcHRpb25zLmlucHV0KTtcblxuXHRzcGF3bmVkLmFsbCA9IG1ha2VBbGxTdHJlYW0oc3Bhd25lZCwgcGFyc2VkLm9wdGlvbnMpO1xuXG5cdHJldHVybiBtZXJnZVByb21pc2Uoc3Bhd25lZCwgaGFuZGxlUHJvbWlzZU9uY2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlY2FTeW5jKGZpbGUsIGFyZ3MsIG9wdGlvbnMpIHtcblx0Y29uc3QgcGFyc2VkID0gaGFuZGxlQXJndW1lbnRzKGZpbGUsIGFyZ3MsIG9wdGlvbnMpO1xuXHRjb25zdCBjb21tYW5kID0gam9pbkNvbW1hbmQoZmlsZSwgYXJncyk7XG5cdGNvbnN0IGVzY2FwZWRDb21tYW5kID0gZ2V0RXNjYXBlZENvbW1hbmQoZmlsZSwgYXJncyk7XG5cblx0dmFsaWRhdGVJbnB1dFN5bmMocGFyc2VkLm9wdGlvbnMpO1xuXG5cdGxldCByZXN1bHQ7XG5cdHRyeSB7XG5cdFx0cmVzdWx0ID0gY2hpbGRQcm9jZXNzLnNwYXduU3luYyhwYXJzZWQuZmlsZSwgcGFyc2VkLmFyZ3MsIHBhcnNlZC5vcHRpb25zKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHR0aHJvdyBtYWtlRXJyb3Ioe1xuXHRcdFx0ZXJyb3IsXG5cdFx0XHRzdGRvdXQ6ICcnLFxuXHRcdFx0c3RkZXJyOiAnJyxcblx0XHRcdGFsbDogJycsXG5cdFx0XHRjb21tYW5kLFxuXHRcdFx0ZXNjYXBlZENvbW1hbmQsXG5cdFx0XHRwYXJzZWQsXG5cdFx0XHR0aW1lZE91dDogZmFsc2UsXG5cdFx0XHRpc0NhbmNlbGVkOiBmYWxzZSxcblx0XHRcdGtpbGxlZDogZmFsc2UsXG5cdFx0fSk7XG5cdH1cblxuXHRjb25zdCBzdGRvdXQgPSBoYW5kbGVPdXRwdXQocGFyc2VkLm9wdGlvbnMsIHJlc3VsdC5zdGRvdXQsIHJlc3VsdC5lcnJvcik7XG5cdGNvbnN0IHN0ZGVyciA9IGhhbmRsZU91dHB1dChwYXJzZWQub3B0aW9ucywgcmVzdWx0LnN0ZGVyciwgcmVzdWx0LmVycm9yKTtcblxuXHRpZiAocmVzdWx0LmVycm9yIHx8IHJlc3VsdC5zdGF0dXMgIT09IDAgfHwgcmVzdWx0LnNpZ25hbCAhPT0gbnVsbCkge1xuXHRcdGNvbnN0IGVycm9yID0gbWFrZUVycm9yKHtcblx0XHRcdHN0ZG91dCxcblx0XHRcdHN0ZGVycixcblx0XHRcdGVycm9yOiByZXN1bHQuZXJyb3IsXG5cdFx0XHRzaWduYWw6IHJlc3VsdC5zaWduYWwsXG5cdFx0XHRleGl0Q29kZTogcmVzdWx0LnN0YXR1cyxcblx0XHRcdGNvbW1hbmQsXG5cdFx0XHRlc2NhcGVkQ29tbWFuZCxcblx0XHRcdHBhcnNlZCxcblx0XHRcdHRpbWVkT3V0OiByZXN1bHQuZXJyb3IgJiYgcmVzdWx0LmVycm9yLmNvZGUgPT09ICdFVElNRURPVVQnLFxuXHRcdFx0aXNDYW5jZWxlZDogZmFsc2UsXG5cdFx0XHRraWxsZWQ6IHJlc3VsdC5zaWduYWwgIT09IG51bGwsXG5cdFx0fSk7XG5cblx0XHRpZiAoIXBhcnNlZC5vcHRpb25zLnJlamVjdCkge1xuXHRcdFx0cmV0dXJuIGVycm9yO1xuXHRcdH1cblxuXHRcdHRocm93IGVycm9yO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRjb21tYW5kLFxuXHRcdGVzY2FwZWRDb21tYW5kLFxuXHRcdGV4aXRDb2RlOiAwLFxuXHRcdHN0ZG91dCxcblx0XHRzdGRlcnIsXG5cdFx0ZmFpbGVkOiBmYWxzZSxcblx0XHR0aW1lZE91dDogZmFsc2UsXG5cdFx0aXNDYW5jZWxlZDogZmFsc2UsXG5cdFx0a2lsbGVkOiBmYWxzZSxcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNhQ29tbWFuZChjb21tYW5kLCBvcHRpb25zKSB7XG5cdGNvbnN0IFtmaWxlLCAuLi5hcmdzXSA9IHBhcnNlQ29tbWFuZChjb21tYW5kKTtcblx0cmV0dXJuIGV4ZWNhKGZpbGUsIGFyZ3MsIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlY2FDb21tYW5kU3luYyhjb21tYW5kLCBvcHRpb25zKSB7XG5cdGNvbnN0IFtmaWxlLCAuLi5hcmdzXSA9IHBhcnNlQ29tbWFuZChjb21tYW5kKTtcblx0cmV0dXJuIGV4ZWNhU3luYyhmaWxlLCBhcmdzLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNhTm9kZShzY3JpcHRQYXRoLCBhcmdzLCBvcHRpb25zID0ge30pIHtcblx0aWYgKGFyZ3MgJiYgIUFycmF5LmlzQXJyYXkoYXJncykgJiYgdHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnKSB7XG5cdFx0b3B0aW9ucyA9IGFyZ3M7XG5cdFx0YXJncyA9IFtdO1xuXHR9XG5cblx0Y29uc3Qgc3RkaW8gPSBub3JtYWxpemVTdGRpb05vZGUob3B0aW9ucyk7XG5cdGNvbnN0IGRlZmF1bHRFeGVjQXJndiA9IHByb2Nlc3MuZXhlY0FyZ3YuZmlsdGVyKGFyZyA9PiAhYXJnLnN0YXJ0c1dpdGgoJy0taW5zcGVjdCcpKTtcblxuXHRjb25zdCB7XG5cdFx0bm9kZVBhdGggPSBwcm9jZXNzLmV4ZWNQYXRoLFxuXHRcdG5vZGVPcHRpb25zID0gZGVmYXVsdEV4ZWNBcmd2LFxuXHR9ID0gb3B0aW9ucztcblxuXHRyZXR1cm4gZXhlY2EoXG5cdFx0bm9kZVBhdGgsXG5cdFx0W1xuXHRcdFx0Li4ubm9kZU9wdGlvbnMsXG5cdFx0XHRzY3JpcHRQYXRoLFxuXHRcdFx0Li4uKEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzIDogW10pLFxuXHRcdF0sXG5cdFx0e1xuXHRcdFx0Li4ub3B0aW9ucyxcblx0XHRcdHN0ZGluOiB1bmRlZmluZWQsXG5cdFx0XHRzdGRvdXQ6IHVuZGVmaW5lZCxcblx0XHRcdHN0ZGVycjogdW5kZWZpbmVkLFxuXHRcdFx0c3RkaW8sXG5cdFx0XHRzaGVsbDogZmFsc2UsXG5cdFx0fSxcblx0KTtcbn1cbiIsImltcG9ydCByZWFkbGluZSBmcm9tICdyZWFkbGluZSdcbmltcG9ydCBjIGZyb20gJ3BpY29jb2xvcnMnXG5pbXBvcnQgdHlwZSB7IFZpdGVzdCB9IGZyb20gJy4vY29yZSdcblxuY29uc3Qga2V5cyA9IFtcbiAgWydhJywgJ3JlcnVuIGFsbCB0ZXN0cyddLFxuICBbJ2YnLCAncmVydW4gb25seSBmYWlsZWQgdGVzdHMnXSxcbiAgWyd1JywgJ3VwZGF0ZSBzbmFwc2hvdCddLFxuICBbJ3QnLCAnZmlsdGVyIGJ5IGEgdGVzdCBuYW1lIHJlZ2V4IHBhdHRlcm4nXSxcbiAgWydxJywgJ3F1aXQnXSxcbl1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW50U2hvcnRjdXRzSGVscCgpIHtcbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoXG4gICAgYFxuJHtjLmJvbGQoJyAgV2F0Y2ggVXNhZ2UnKX1cbiR7a2V5cy5tYXAoaSA9PiBjLmRpbSgnICBwcmVzcyAnKSArIGMucmVzZXQoYy5ib2xkKGlbMF0pKSArIGMuZGltKGAgdG8gJHtpWzFdfWApKS5qb2luKCdcXG4nKX1cbmAsXG4gIClcbn1cblxuZnVuY3Rpb24gdXNlQ2hhbmdlUGF0dGVybihjdHg6IFZpdGVzdCkge1xuICBsZXQgbmFtZVBhdHRlcm4gPSAnJ1xuICBsZXQgY2hhbmdpbmdQYXR0ZXJuID0gZmFsc2VcblxuICBmdW5jdGlvbiBiYWNrc3BhY2UoKSB7XG4gICAgcmVhZGxpbmUubW92ZUN1cnNvcihwcm9jZXNzLnN0ZG91dCwgLTEsIHByb2Nlc3Muc3Rkb3V0LnJvd3MpXG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyAnKVxuICAgIHJlYWRsaW5lLm1vdmVDdXJzb3IocHJvY2Vzcy5zdGRvdXQsIC0xLCBwcm9jZXNzLnN0ZG91dC5yb3dzKVxuICB9XG5cbiAgZnVuY3Rpb24gZW5kKCkge1xuICAgIGN0eC5jaGFuZ2VOYW1lUGF0dGVybihuYW1lUGF0dGVybiwgdW5kZWZpbmVkLCAnY2hhbmdlIHBhdHRlcm4nKVxuICAgIG5hbWVQYXR0ZXJuID0gJydcbiAgICBjaGFuZ2luZ1BhdHRlcm4gPSBmYWxzZVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYFxcbiR7Yy5iZ01hZ2VudGEoJyBGSUxURVIgJyl9ICR7Yy5tYWdlbnRhKCdGaWx0ZXIgdGVzdHMgYnkgdGhlaXIgbmFtZSAodXNpbmcgcmVnZXhwKTonKX0gYClcbiAgICBjaGFuZ2luZ1BhdHRlcm4gPSB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBhcHBlbmQoc3RyOiBzdHJpbmcsIGtleTogYW55KSB7XG4gICAgaWYgKGtleS5uYW1lID09PSAnYmFja3NwYWNlJykge1xuICAgICAgbmFtZVBhdHRlcm4gPSBuYW1lUGF0dGVybi5zbGljZSgwLCBuYW1lUGF0dGVybi5sZW5ndGggLSAxKVxuICAgICAgYmFja3NwYWNlKClcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBuYW1lUGF0dGVybiArPSBzdHJcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHN0cilcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGdldCBpc0NoYW5naW5nKCkge1xuICAgICAgcmV0dXJuIGNoYW5naW5nUGF0dGVyblxuICAgIH0sXG4gICAgZW5kLFxuICAgIHN0YXJ0LFxuICAgIGFwcGVuZCxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJDb25zb2xlU2hvcnRjdXRzKGN0eDogVml0ZXN0KSB7XG4gIGNvbnN0IHBhdHRlcm4gPSB1c2VDaGFuZ2VQYXR0ZXJuKGN0eClcblxuICByZWFkbGluZS5lbWl0S2V5cHJlc3NFdmVudHMocHJvY2Vzcy5zdGRpbilcbiAgcHJvY2Vzcy5zdGRpbi5zZXRSYXdNb2RlKHRydWUpXG4gIHByb2Nlc3Muc3RkaW4ub24oJ2tleXByZXNzJywgKHN0cjogc3RyaW5nLCBrZXk6IGFueSkgPT4ge1xuICAgIC8vIGN0cmwtYyBvciBlc2NcbiAgICBpZiAoc3RyID09PSAnXFx4MDMnIHx8IHN0ciA9PT0gJ1xceDFCJyB8fCAoa2V5ICYmIGtleS5jdHJsICYmIGtleS5uYW1lID09PSAnYycpKVxuICAgICAgcmV0dXJuIGN0eC5leGl0KHRydWUpXG5cbiAgICAvLyBpcyBydW5uaW5nLCBpZ25vcmUga2V5cHJlc3NcbiAgICBpZiAoY3R4LnJ1bm5pbmdQcm9taXNlKVxuICAgICAgcmV0dXJuXG5cbiAgICBjb25zdCBuYW1lID0ga2V5Py5uYW1lXG5cbiAgICBpZiAocGF0dGVybi5pc0NoYW5naW5nKSB7XG4gICAgICBpZiAobmFtZSA9PT0gJ3JldHVybicpXG4gICAgICAgIHJldHVybiBwYXR0ZXJuLmVuZCgpXG5cbiAgICAgIHJldHVybiBwYXR0ZXJuLmFwcGVuZChzdHIsIGtleSlcbiAgICB9XG5cbiAgICAvLyBoZWxwXG4gICAgaWYgKG5hbWUgPT09ICdoJylcbiAgICAgIHJldHVybiBwcmludFNob3J0Y3V0c0hlbHAoKVxuICAgIC8vIHVwZGF0ZSBzbmFwc2hvdFxuICAgIGlmIChuYW1lID09PSAndScpXG4gICAgICByZXR1cm4gY3R4LnVwZGF0ZVNuYXBzaG90KClcbiAgICAvLyByZXJ1biBhbGwgdGVzdHNcbiAgICBpZiAobmFtZSA9PT0gJ2EnIHx8IG5hbWUgPT09ICdyZXR1cm4nKVxuICAgICAgcmV0dXJuIGN0eC5yZXJ1bkZpbGVzKHVuZGVmaW5lZCwgJ3JlcnVuIGFsbCcpXG4gICAgLy8gY2hhbmdlIHRlc3ROYW1lUGF0dGVyblxuICAgIGlmIChuYW1lID09PSAndCcpXG4gICAgICByZXR1cm4gcGF0dGVybi5zdGFydCgpXG5cbiAgICAvLyBxdWl0XG4gICAgaWYgKG5hbWUgPT09ICdxJylcbiAgICAgIHJldHVybiBjdHguZXhpdCh0cnVlKVxuXG4gICAgLy8gVE9ETzogYWRkIG1vcmUgY29tbWFuZHNcbiAgfSlcbn1cbiIsImltcG9ydCBjYWMgZnJvbSAnY2FjJ1xuaW1wb3J0IHsgZXhlY2EgfSBmcm9tICdleGVjYSdcbmltcG9ydCB0eXBlIHsgVXNlckNvbmZpZyB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbidcbmltcG9ydCB7IGVuc3VyZVBhY2thZ2VJbnN0YWxsZWQgfSBmcm9tICcuLi91dGlscydcbmltcG9ydCB7IGNyZWF0ZVZpdGVzdCB9IGZyb20gJy4vY3JlYXRlJ1xuaW1wb3J0IHsgcmVnaXN0ZXJDb25zb2xlU2hvcnRjdXRzIH0gZnJvbSAnLi9zdGRpbidcblxuY29uc3QgY2xpID0gY2FjKCd2aXRlc3QnKVxuXG5jbGlcbiAgLnZlcnNpb24odmVyc2lvbilcbiAgLm9wdGlvbignLXIsIC0tcm9vdCA8cGF0aD4nLCAncm9vdCBwYXRoJylcbiAgLm9wdGlvbignLWMsIC0tY29uZmlnIDxwYXRoPicsICdwYXRoIHRvIGNvbmZpZyBmaWxlJylcbiAgLm9wdGlvbignLXUsIC0tdXBkYXRlJywgJ3VwZGF0ZSBzbmFwc2hvdCcpXG4gIC5vcHRpb24oJy13LCAtLXdhdGNoJywgJ3dhdGNoIG1vZGUnKVxuICAub3B0aW9uKCctdCwgLS10ZXN0TmFtZVBhdHRlcm4gPHBhdHRlcm4+JywgJ3J1biB0ZXN0IG5hbWVzIHdpdGggdGhlIHNwZWNpZmllZCBwYXR0ZXJuJylcbiAgLm9wdGlvbignLS11aScsICdlbmFibGUgVUknKVxuICAub3B0aW9uKCctLW9wZW4nLCAnb3BlbiBVSSBhdXRvbWF0aWNhbGx5IChkZWZhdWx0OiAhcHJvY2Vzcy5lbnYuQ0kpKScpXG4gIC5vcHRpb24oJy0tYXBpIFthcGldJywgJ3NlcnZlIEFQSSwgYXZhaWxhYmxlIG9wdGlvbnM6IC0tYXBpLnBvcnQgPHBvcnQ+LCAtLWFwaS5ob3N0IFtob3N0XSBhbmQgLS1hcGkuc3RyaWN0UG9ydCcpXG4gIC5vcHRpb24oJy0tdGhyZWFkcycsICdlbmFibGVkIHRocmVhZHMgKGRlZmF1bHQ6IHRydWUpJylcbiAgLm9wdGlvbignLS1zaWxlbnQnLCAnc2lsZW50IGNvbnNvbGUgb3V0cHV0IGZyb20gdGVzdHMnKVxuICAub3B0aW9uKCctLWlzb2xhdGUnLCAnaXNvbGF0ZSBlbnZpcm9ubWVudCBmb3IgZWFjaCB0ZXN0IGZpbGUgKGRlZmF1bHQ6IHRydWUpJylcbiAgLm9wdGlvbignLS1yZXBvcnRlciA8bmFtZT4nLCAncmVwb3J0ZXInKVxuICAub3B0aW9uKCctLW91dHB1dEZpbGUgPGZpbGVuYW1lPicsICd3cml0ZSB0ZXN0IHJlc3VsdHMgdG8gYSBmaWxlIHdoZW4gdGhlIC0tcmVwb3J0ZXI9anNvbiBvcHRpb24gaXMgYWxzbyBzcGVjaWZpZWQnKVxuICAub3B0aW9uKCctLWNvdmVyYWdlJywgJ3VzZSBjOCBmb3IgY292ZXJhZ2UnKVxuICAub3B0aW9uKCctLXJ1bicsICdkbyBub3Qgd2F0Y2gnKVxuICAub3B0aW9uKCctLW1vZGUnLCAnb3ZlcnJpZGUgVml0ZSBtb2RlIChkZWZhdWx0OiB0ZXN0KScpXG4gIC5vcHRpb24oJy0tZ2xvYmFscycsICdpbmplY3QgYXBpcyBnbG9iYWxseScpXG4gIC5vcHRpb24oJy0tZ2xvYmFsJywgJ2RlcHJlY2F0ZWQsIHVzZSAtLWdsb2JhbHMnKVxuICAub3B0aW9uKCctLWRvbScsICdtb2NrIGJyb3dzZXIgYXBpIHdpdGggaGFwcHktZG9tJylcbiAgLm9wdGlvbignLS1lbnZpcm9ubWVudCA8ZW52PicsICdydW5uZXIgZW52aXJvbm1lbnQgKGRlZmF1bHQ6IG5vZGUpJylcbiAgLm9wdGlvbignLS1wYXNzV2l0aE5vVGVzdHMnLCAncGFzcyB3aGVuIG5vIHRlc3RzIGZvdW5kJylcbiAgLm9wdGlvbignLS1hbGxvd09ubHknLCAnQWxsb3cgdGVzdHMgYW5kIHN1aXRlcyB0aGF0IGFyZSBtYXJrZWQgYXMgb25seSAoZGVmYXVsdDogIXByb2Nlc3MuZW52LkNJKScpXG4gIC5oZWxwKClcblxuY2xpXG4gIC5jb21tYW5kKCdydW4gWy4uLmZpbHRlcnNdJylcbiAgLmFjdGlvbihydW4pXG5cbmNsaVxuICAuY29tbWFuZCgncmVsYXRlZCBbLi4uZmlsdGVyc10nKVxuICAuYWN0aW9uKHJ1blJlbGF0ZWQpXG5cbmNsaVxuICAuY29tbWFuZCgnd2F0Y2ggWy4uLmZpbHRlcnNdJylcbiAgLmFjdGlvbihzdGFydClcblxuY2xpXG4gIC5jb21tYW5kKCdkZXYgWy4uLmZpbHRlcnNdJylcbiAgLmFjdGlvbihzdGFydClcblxuY2xpXG4gIC5jb21tYW5kKCdbLi4uZmlsdGVyc10nKVxuICAuYWN0aW9uKHN0YXJ0KVxuXG5jbGkucGFyc2UoKVxuXG5leHBvcnQgaW50ZXJmYWNlIENsaU9wdGlvbnMgZXh0ZW5kcyBVc2VyQ29uZmlnIHtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSB3YXRjaCBtb2RlXG4gICAqL1xuICBydW4/OiBib29sZWFuXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1blJlbGF0ZWQocmVsYXRlZEZpbGVzOiBzdHJpbmdbXSB8IHN0cmluZywgYXJndjogQ2xpT3B0aW9ucykge1xuICBhcmd2LnJlbGF0ZWQgPSByZWxhdGVkRmlsZXNcbiAgYXJndi5wYXNzV2l0aE5vVGVzdHMgPz89IHRydWVcbiAgYXdhaXQgc3RhcnQoW10sIGFyZ3YpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bihjbGlGaWx0ZXJzOiBzdHJpbmdbXSwgb3B0aW9uczogQ2xpT3B0aW9ucykge1xuICBvcHRpb25zLnJ1biA9IHRydWVcbiAgYXdhaXQgc3RhcnQoY2xpRmlsdGVycywgb3B0aW9ucylcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RhcnQoY2xpRmlsdGVyczogc3RyaW5nW10sIG9wdGlvbnM6IENsaU9wdGlvbnMpIHtcbiAgcHJvY2Vzcy5lbnYuVEVTVCA9ICd0cnVlJ1xuICBwcm9jZXNzLmVudi5WSVRFU1QgPSAndHJ1ZSdcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPz89IG9wdGlvbnMubW9kZSB8fCAndGVzdCdcblxuICBpZiAob3B0aW9ucy5ydW4pXG4gICAgb3B0aW9ucy53YXRjaCA9IGZhbHNlXG5cbiAgaWYgKCFhd2FpdCBlbnN1cmVQYWNrYWdlSW5zdGFsbGVkKCd2aXRlJykpXG4gICAgcHJvY2Vzcy5leGl0KDEpXG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmNvdmVyYWdlID09PSAnYm9vbGVhbicpXG4gICAgb3B0aW9ucy5jb3ZlcmFnZSA9IHsgZW5hYmxlZDogb3B0aW9ucy5jb3ZlcmFnZSB9XG5cbiAgY29uc3QgY3R4ID0gYXdhaXQgY3JlYXRlVml0ZXN0KG9wdGlvbnMpXG5cbiAgaWYgKGN0eC5jb25maWcuY292ZXJhZ2UuZW5hYmxlZCkge1xuICAgIGlmICghYXdhaXQgZW5zdXJlUGFja2FnZUluc3RhbGxlZCgnYzgnKSlcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuXG4gICAgaWYgKCFwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFID0gY3R4LmNvbmZpZy5jb3ZlcmFnZS50ZW1wRGlyZWN0b3J5XG4gICAgICBjb25zdCB7IGV4aXRDb2RlIH0gPSBhd2FpdCBleGVjYShwcm9jZXNzLmFyZ3YwLCBwcm9jZXNzLmFyZ3Yuc2xpY2UoMSksIHsgc3RkaW86ICdpbmhlcml0JywgcmVqZWN0OiBmYWxzZSB9KVxuICAgICAgcHJvY2Vzcy5leGl0KGV4aXRDb2RlKVxuICAgIH1cbiAgfVxuXG4gIGlmIChjdHguY29uZmlnLmVudmlyb25tZW50ICYmIGN0eC5jb25maWcuZW52aXJvbm1lbnQgIT09ICdub2RlJykge1xuICAgIGlmICghYXdhaXQgZW5zdXJlUGFja2FnZUluc3RhbGxlZChjdHguY29uZmlnLmVudmlyb25tZW50KSlcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG5cbiAgaWYgKHByb2Nlc3Muc3RkaW4uaXNUVFkgJiYgY3R4LmNvbmZpZy53YXRjaClcbiAgICByZWdpc3RlckNvbnNvbGVTaG9ydGN1dHMoY3R4KVxuXG4gIHByb2Nlc3MuY2hkaXIoY3R4LmNvbmZpZy5yb290KVxuXG4gIGN0eC5vblNlcnZlclJlc3RhcnRlZCgoKSA9PiB7XG4gICAgLy8gVE9ETzogcmUtY29uc2lkZXIgaG93IHRvIHJlLXJ1biB0aGUgdGVzdHMgdGhlIHNlcnZlciBzbWFydGx5XG4gICAgY3R4LnN0YXJ0KGNsaUZpbHRlcnMpXG4gIH0pXG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjdHguc3RhcnQoY2xpRmlsdGVycylcbiAgfVxuICBjYXRjaCAoZSkge1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxXG4gICAgdGhyb3cgZVxuICB9XG4gIGZpbmFsbHkge1xuICAgIGlmICghY3R4LmNvbmZpZy53YXRjaClcbiAgICAgIGF3YWl0IGN0eC5leGl0KClcbiAgfVxufVxuIl0sIm5hbWVzIjpbInByb2Nlc3MiLCJvcyIsIm9uRXhpdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDcEIsQ0FBQyxPQUFPLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUNEO0FBQ0EsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO0FBQ3BDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHO0FBQ3pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssSUFBSSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQy9FLElBQUksT0FBTyxHQUFHLEtBQUssU0FBUyxHQUFHLEdBQUc7QUFDbEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssT0FBTyxHQUFHLEtBQUssR0FBRyxHQUFHLEtBQUssTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3BJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUc7QUFDcEMsRUFBRSxDQUFDO0FBQ0gsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEYsQ0FBQztBQUNEO0FBQ0EsU0FBUyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtBQUMzQixDQUFDLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ25CLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFDbkI7QUFDQSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDMUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3RDO0FBQ0EsQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLENBQUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQztBQUN4QyxDQUFDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDMUM7QUFDQSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDL0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEM7QUFDQSxDQUFDLElBQUksS0FBSyxFQUFFO0FBQ1osRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3hCLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEQsSUFBSTtBQUNKLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRztBQUN2QyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RCxFQUFFO0FBQ0Y7QUFDQSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRztBQUN0QyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxFQUFFO0FBQ0Y7QUFDQSxDQUFDLElBQUksUUFBUSxFQUFFO0FBQ2YsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQzFCLEdBQUcsSUFBSSxHQUFHLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDOUIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFB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TSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDM0IsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ1IsRUFBRSxPQUFPLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVILEdBQUc7QUFDSCxDQUFDLENBQUM7QUFDRixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLEtBQUs7QUFDdkMsRUFBRSxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDN0MsSUFBSSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxlQUFlLEVBQUU7QUFDbkMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxNQUFNLElBQUksT0FBTyxTQUFTLENBQUMsaUJBQWlCLEtBQUssVUFBVSxFQUFFO0FBQzdELFFBQVEsR0FBRyxD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O0FBQzVCLFFBQVEsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7QUFDMUQsVUFBVSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsUUFBUSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDN0QsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckQsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJLElBQUksV0FBVyxFQUFFO0FBQ3JCLE1BQU0sS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzNDLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUNqQyxVQUFVLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDOUIsVUFBVSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDMUQsVUFBVSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM5QyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxQyxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJLElBQUksV0FBVyxFQUFFO0FBQ3JCLE1BQU0sTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pDLEtBQUs7QUFDTCxJQUFJ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
|
|
669
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2FjQDYuNy4xMi9ub2RlX21vZHVsZXMvY2FjL2Rpc3QvaW5kZXgubWpzIiwiLi4vc3JjL25vZGUvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5cbmZ1bmN0aW9uIHRvQXJyKGFueSkge1xuXHRyZXR1cm4gYW55ID09IG51bGwgPyBbXSA6IEFycmF5LmlzQXJyYXkoYW55KSA/IGFueSA6IFthbnldO1xufVxuXG5mdW5jdGlvbiB0b1ZhbChvdXQsIGtleSwgdmFsLCBvcHRzKSB7XG5cdHZhciB4LCBvbGQ9b3V0W2tleV0sIG54dD0oXG5cdFx0ISF+b3B0cy5zdHJpbmcuaW5kZXhPZihrZXkpID8gKHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gdHJ1ZSA/ICcnIDogU3RyaW5nKHZhbCkpXG5cdFx0OiB0eXBlb2YgdmFsID09PSAnYm9vbGVhbicgPyB2YWxcblx0XHQ6ICEhfm9wdHMuYm9vbGVhbi5pbmRleE9mKGtleSkgPyAodmFsID09PSAnZmFsc2UnID8gZmFsc2UgOiB2YWwgPT09ICd0cnVlJyB8fCAob3V0Ll8ucHVzaCgoeCA9ICt2YWwseCAqIDAgPT09IDApID8geCA6IHZhbCksISF2YWwpKVxuXHRcdDogKHggPSArdmFsLHggKiAwID09PSAwKSA/IHggOiB2YWxcblx0KTtcblx0b3V0W2tleV0gPSBvbGQgPT0gbnVsbCA/IG54dCA6IChBcnJheS5pc0FycmF5KG9sZCkgPyBvbGQuY29uY2F0KG54dCkgOiBbb2xkLCBueHRdKTtcbn1cblxuZnVuY3Rpb24gbXJpMiAoYXJncywgb3B0cykge1xuXHRhcmdzID0gYXJncyB8fCBbXTtcblx0b3B0cyA9IG9wdHMgfHwge307XG5cblx0dmFyIGssIGFyciwgYXJnLCBuYW1lLCB2YWwsIG91dD17IF86W10gfTtcblx0dmFyIGk9MCwgaj0wLCBpZHg9MCwgbGVuPWFyZ3MubGVuZ3RoO1xuXG5cdGNvbnN0IGFsaWJpID0gb3B0cy5hbGlhcyAhPT0gdm9pZCAwO1xuXHRjb25zdCBzdHJpY3QgPSBvcHRzLnVua25vd24gIT09IHZvaWQgMDtcblx0Y29uc3QgZGVmYXVsdHMgPSBvcHRzLmRlZmF1bHQgIT09IHZvaWQgMDtcblxuXHRvcHRzLmFsaWFzID0gb3B0cy5hbGlhcyB8fCB7fTtcblx0b3B0cy5zdHJpbmcgPSB0b0FycihvcHRzLnN0cmluZyk7XG5cdG9wdHMuYm9vbGVhbiA9IHRvQXJyKG9wdHMuYm9vbGVhbik7XG5cblx0aWYgKGFsaWJpKSB7XG5cdFx0Zm9yIChrIGluIG9wdHMuYWxpYXMpIHtcblx0XHRcdGFyciA9IG9wdHMuYWxpYXNba10gPSB0b0FycihvcHRzLmFsaWFzW2tdKTtcblx0XHRcdGZvciAoaT0wOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdChvcHRzLmFsaWFzW2FycltpXV0gPSBhcnIuY29uY2F0KGspKS5zcGxpY2UoaSwgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChpPW9wdHMuYm9vbGVhbi5sZW5ndGg7IGktLSA+IDA7KSB7XG5cdFx0YXJyID0gb3B0cy5hbGlhc1tvcHRzLmJvb2xlYW5baV1dIHx8IFtdO1xuXHRcdGZvciAoaj1hcnIubGVuZ3RoOyBqLS0gPiAwOykgb3B0cy5ib29sZWFuLnB1c2goYXJyW2pdKTtcblx0fVxuXG5cdGZvciAoaT1vcHRzLnN0cmluZy5sZW5ndGg7IGktLSA+IDA7KSB7XG5cdFx0YXJyID0gb3B0cy5hbGlhc1tvcHRzLnN0cmluZ1tpXV0gfHwgW107XG5cdFx0Zm9yIChqPWFyci5sZW5ndGg7IGotLSA+IDA7KSBvcHRzLnN0cmluZy5wdXNoKGFycltqXSk7XG5cdH1cblxuXHRpZiAoZGVmYXVsdHMpIHtcblx0XHRmb3IgKGsgaW4gb3B0cy5kZWZhdWx0KSB7XG5cdFx0XHRuYW1lID0gdHlwZW9mIG9wdHMuZGVmYXVsdFtrXTtcblx0XHRcdGFyciA9IG9wdHMuYWxpYXNba10gPSBvcHRzLmFsaWFzW2tdIHx8IFtdO1xuXHRcdFx0aWYgKG9wdHNbbmFtZV0gIT09IHZvaWQgMCkge1xuXHRcdFx0XHRvcHRzW25hbWVdLnB1c2goayk7XG5cdFx0XHRcdGZvciAoaT0wOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0b3B0c1tuYW1lXS5wdXNoKGFycltpXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjb25zdCBrZXlzID0gc3RyaWN0ID8gT2JqZWN0LmtleXMob3B0cy5hbGlhcykgOiBbXTtcblxuXHRmb3IgKGk9MDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0YXJnID0gYXJnc1tpXTtcblxuXHRcdGlmIChhcmcgPT09ICctLScpIHtcblx0XHRcdG91dC5fID0gb3V0Ll8uY29uY2F0KGFyZ3Muc2xpY2UoKytpKSk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRmb3IgKGo9MDsgaiA8IGFyZy5sZW5ndGg7IGorKykge1xuXHRcdFx0aWYgKGFyZy5jaGFyQ29kZUF0KGopICE9PSA0NSkgYnJlYWs7IC8vIFwiLVwiXG5cdFx0fVxuXG5cdFx0aWYgKGogPT09IDApIHtcblx0XHRcdG91dC5fLnB1c2goYXJnKTtcblx0XHR9IGVsc2UgaWYgKGFyZy5zdWJzdHJpbmcoaiwgaiArIDMpID09PSAnbm8tJykge1xuXHRcdFx0bmFtZSA9IGFyZy5zdWJzdHJpbmcoaiArIDMpO1xuXHRcdFx0aWYgKHN0cmljdCAmJiAhfmtleXMuaW5kZXhPZihuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gb3B0cy51bmtub3duKGFyZyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRbbmFtZV0gPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yIChpZHg9aisxOyBpZHggPCBhcmcubGVuZ3RoOyBpZHgrKykge1xuXHRcdFx0XHRpZiAoYXJnLmNoYXJDb2RlQXQoaWR4KSA9PT0gNjEpIGJyZWFrOyAvLyBcIj1cIlxuXHRcdFx0fVxuXG5cdFx0XHRuYW1lID0gYXJnLnN1YnN0cmluZyhqLCBpZHgpO1xuXHRcdFx0dmFsID0gYXJnLnN1YnN0cmluZygrK2lkeCkgfHwgKGkrMSA9PT0gbGVuIHx8ICgnJythcmdzW2krMV0pLmNoYXJDb2RlQXQoMCkgPT09IDQ1IHx8IGFyZ3NbKytpXSk7XG5cdFx0XHRhcnIgPSAoaiA9PT0gMiA/IFtuYW1lXSA6IG5hbWUpO1xuXG5cdFx0XHRmb3IgKGlkeD0wOyBpZHggPCBhcnIubGVuZ3RoOyBpZHgrKykge1xuXHRcdFx0XHRuYW1lID0gYXJyW2lkeF07XG5cdFx0XHRcdGlmIChzdHJpY3QgJiYgIX5rZXlzLmluZGV4T2YobmFtZSkpIHJldHVybiBvcHRzLnVua25vd24oJy0nLnJlcGVhdChqKSArIG5hbWUpO1xuXHRcdFx0XHR0b1ZhbChvdXQsIG5hbWUsIChpZHggKyAxIDwgYXJyLmxlbmd0aCkgfHwgdmFsLCBvcHRzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoZGVmYXVsdHMpIHtcblx0XHRmb3IgKGsgaW4gb3B0cy5kZWZhdWx0KSB7XG5cdFx0XHRpZiAob3V0W2tdID09PSB2b2lkIDApIHtcblx0XHRcdFx0b3V0W2tdID0gb3B0cy5kZWZhdWx0W2tdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChhbGliaSkge1xuXHRcdGZvciAoayBpbiBvdXQpIHtcblx0XHRcdGFyciA9IG9wdHMuYWxpYXNba10gfHwgW107XG5cdFx0XHR3aGlsZSAoYXJyLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b3V0W2Fyci5zaGlmdCgpXSA9IG91dFtrXTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3V0O1xufVxuXG5jb25zdCByZW1vdmVCcmFja2V0cyA9ICh2KSA9PiB2LnJlcGxhY2UoL1s8W10uKy8sIFwiXCIpLnRyaW0oKTtcbmNvbnN0IGZpbmRBbGxCcmFja2V0cyA9ICh2KSA9PiB7XG4gIGNvbnN0IEFOR0xFRF9CUkFDS0VUX1JFX0dMT0JBTCA9IC88KFtePl0rKT4vZztcbiAgY29uc3QgU1FVQVJFX0JSQUNLRVRfUkVfR0xPQkFMID0gL1xcWyhbXlxcXV0rKVxcXS9nO1xuICBjb25zdCByZXMgPSBbXTtcbiAgY29uc3QgcGFyc2UgPSAobWF0Y2gpID0+IHtcbiAgICBsZXQgdmFyaWFkaWMgPSBmYWxzZTtcbiAgICBsZXQgdmFsdWUgPSBtYXRjaFsxXTtcbiAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcIi4uLlwiKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgzKTtcbiAgICAgIHZhcmlhZGljID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVpcmVkOiBtYXRjaFswXS5zdGFydHNXaXRoKFwiPFwiKSxcbiAgICAgIHZhbHVlLFxuICAgICAgdmFyaWFkaWNcbiAgICB9O1xuICB9O1xuICBsZXQgYW5nbGVkTWF0Y2g7XG4gIHdoaWxlIChhbmdsZWRNYXRjaCA9IEFOR0xFRF9CUkFDS0VUX1JFX0dMT0JBTC5leGVjKHYpKSB7XG4gICAgcmVzLnB1c2gocGFyc2UoYW5nbGVkTWF0Y2gpKTtcbiAgfVxuICBsZXQgc3F1YXJlTWF0Y2g7XG4gIHdoaWxlIChzcXVhcmVNYXRjaCA9IFNRVUFSRV9CUkFDS0VUX1JFX0dMT0JBTC5leGVjKHYpKSB7XG4gICAgcmVzLnB1c2gocGFyc2Uoc3F1YXJlTWF0Y2gpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufTtcbmNvbnN0IGdldE1yaU9wdGlvbnMgPSAob3B0aW9ucykgPT4ge1xuICBjb25zdCByZXN1bHQgPSB7YWxpYXM6IHt9LCBib29sZWFuOiBbXX07XG4gIGZvciAoY29uc3QgW2luZGV4LCBvcHRpb25dIG9mIG9wdGlvbnMuZW50cmllcygpKSB7XG4gICAgaWYgKG9wdGlvbi5uYW1lcy5sZW5ndGggPiAxKSB7XG4gICAgICByZXN1bHQuYWxpYXNbb3B0aW9uLm5hbWVzWzBdXSA9IG9wdGlvbi5uYW1lcy5zbGljZSgxKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbi5pc0Jvb2xlYW4pIHtcbiAgICAgIGlmIChvcHRpb24ubmVnYXRlZCkge1xuICAgICAgICBjb25zdCBoYXNTdHJpbmdUeXBlT3B0aW9uID0gb3B0aW9ucy5zb21lKChvLCBpKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGkgIT09IGluZGV4ICYmIG8ubmFtZXMuc29tZSgobmFtZSkgPT4gb3B0aW9uLm5hbWVzLmluY2x1ZGVzKG5hbWUpKSAmJiB0eXBlb2Ygby5yZXF1aXJlZCA9PT0gXCJib29sZWFuXCI7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWhhc1N0cmluZ1R5cGVPcHRpb24pIHtcbiAgICAgICAgICByZXN1bHQuYm9vbGVhbi5wdXNoKG9wdGlvbi5uYW1lc1swXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5ib29sZWFuLnB1c2gob3B0aW9uLm5hbWVzWzBdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5jb25zdCBmaW5kTG9uZ2VzdCA9IChhcnIpID0+IHtcbiAgcmV0dXJuIGFyci5zb3J0KChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGEubGVuZ3RoID4gYi5sZW5ndGggPyAtMSA6IDE7XG4gIH0pWzBdO1xufTtcbmNvbnN0IHBhZFJpZ2h0ID0gKHN0ciwgbGVuZ3RoKSA9PiB7XG4gIHJldHVybiBzdHIubGVuZ3RoID49IGxlbmd0aCA/IHN0ciA6IGAke3N0cn0ke1wiIFwiLnJlcGVhdChsZW5ndGggLSBzdHIubGVuZ3RoKX1gO1xufTtcbmNvbnN0IGNhbWVsY2FzZSA9IChpbnB1dCkgPT4ge1xuICByZXR1cm4gaW5wdXQucmVwbGFjZSgvKFthLXpdKS0oW2Etel0pL2csIChfLCBwMSwgcDIpID0+IHtcbiAgICByZXR1cm4gcDEgKyBwMi50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbn07XG5jb25zdCBzZXREb3RQcm9wID0gKG9iaiwga2V5cywgdmFsKSA9PiB7XG4gIGxldCBpID0gMDtcbiAgbGV0IGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICBsZXQgdCA9IG9iajtcbiAgbGV0IHg7XG4gIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICB4ID0gdFtrZXlzW2ldXTtcbiAgICB0ID0gdFtrZXlzW2ldXSA9IGkgPT09IGxlbmd0aCAtIDEgPyB2YWwgOiB4ICE9IG51bGwgPyB4IDogISF+a2V5c1tpICsgMV0uaW5kZXhPZihcIi5cIikgfHwgISgra2V5c1tpICsgMV0gPiAtMSkgPyB7fSA6IFtdO1xuICB9XG59O1xuY29uc3Qgc2V0QnlUeXBlID0gKG9iaiwgdHJhbnNmb3JtcykgPT4ge1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0cmFuc2Zvcm1zKSkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHRyYW5zZm9ybXNba2V5XTtcbiAgICBpZiAodHJhbnNmb3JtLnNob3VsZFRyYW5zZm9ybSkge1xuICAgICAgb2JqW2tleV0gPSBBcnJheS5wcm90b3R5cGUuY29uY2F0LmNhbGwoW10sIG9ialtrZXldKTtcbiAgICAgIGlmICh0eXBlb2YgdHJhbnNmb3JtLnRyYW5zZm9ybUZ1bmN0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqW2tleV0gPSBvYmpba2V5XS5tYXAodHJhbnNmb3JtLnRyYW5zZm9ybUZ1bmN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5jb25zdCBnZXRGaWxlTmFtZSA9IChpbnB1dCkgPT4ge1xuICBjb25zdCBtID0gLyhbXlxcXFxcXC9dKykkLy5leGVjKGlucHV0KTtcbiAgcmV0dXJuIG0gPyBtWzFdIDogXCJcIjtcbn07XG5jb25zdCBjYW1lbGNhc2VPcHRpb25OYW1lID0gKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5hbWUuc3BsaXQoXCIuXCIpLm1hcCgodiwgaSkgPT4ge1xuICAgIHJldHVybiBpID09PSAwID8gY2FtZWxjYXNlKHYpIDogdjtcbiAgfSkuam9pbihcIi5cIik7XG59O1xuY2xhc3MgQ0FDRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgaWYgKHR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcihtZXNzYWdlKS5zdGFjaztcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgT3B0aW9uIHtcbiAgY29uc3RydWN0b3IocmF3TmFtZSwgZGVzY3JpcHRpb24sIGNvbmZpZykge1xuICAgIHRoaXMucmF3TmFtZSA9IHJhd05hbWU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHRoaXMuY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKTtcbiAgICByYXdOYW1lID0gcmF3TmFtZS5yZXBsYWNlKC9cXC5cXCovZywgXCJcIik7XG4gICAgdGhpcy5uZWdhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5uYW1lcyA9IHJlbW92ZUJyYWNrZXRzKHJhd05hbWUpLnNwbGl0KFwiLFwiKS5tYXAoKHYpID0+IHtcbiAgICAgIGxldCBuYW1lID0gdi50cmltKCkucmVwbGFjZSgvXi17MSwyfS8sIFwiXCIpO1xuICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aChcIm5vLVwiKSkge1xuICAgICAgICB0aGlzLm5lZ2F0ZWQgPSB0cnVlO1xuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC9ebm8tLywgXCJcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FtZWxjYXNlT3B0aW9uTmFtZShuYW1lKTtcbiAgICB9KS5zb3J0KChhLCBiKSA9PiBhLmxlbmd0aCA+IGIubGVuZ3RoID8gMSA6IC0xKTtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLm5hbWVzW3RoaXMubmFtZXMubGVuZ3RoIC0gMV07XG4gICAgaWYgKHRoaXMubmVnYXRlZCAmJiB0aGlzLmNvbmZpZy5kZWZhdWx0ID09IG51bGwpIHtcbiAgICAgIHRoaXMuY29uZmlnLmRlZmF1bHQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAocmF3TmFtZS5pbmNsdWRlcyhcIjxcIikpIHtcbiAgICAgIHRoaXMucmVxdWlyZWQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAocmF3TmFtZS5pbmNsdWRlcyhcIltcIikpIHtcbiAgICAgIHRoaXMucmVxdWlyZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0Jvb2xlYW4gPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBwcm9jZXNzQXJncyA9IHByb2Nlc3MuYXJndjtcbmNvbnN0IHBsYXRmb3JtSW5mbyA9IGAke3Byb2Nlc3MucGxhdGZvcm19LSR7cHJvY2Vzcy5hcmNofSBub2RlLSR7cHJvY2Vzcy52ZXJzaW9ufWA7XG5cbmNsYXNzIENvbW1hbmQge1xuICBjb25zdHJ1Y3RvcihyYXdOYW1lLCBkZXNjcmlwdGlvbiwgY29uZmlnID0ge30sIGNsaSkge1xuICAgIHRoaXMucmF3TmFtZSA9IHJhd05hbWU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuY2xpID0gY2xpO1xuICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgIHRoaXMuYWxpYXNOYW1lcyA9IFtdO1xuICAgIHRoaXMubmFtZSA9IHJlbW92ZUJyYWNrZXRzKHJhd05hbWUpO1xuICAgIHRoaXMuYXJncyA9IGZpbmRBbGxCcmFja2V0cyhyYXdOYW1lKTtcbiAgICB0aGlzLmV4YW1wbGVzID0gW107XG4gIH1cbiAgdXNhZ2UodGV4dCkge1xuICAgIHRoaXMudXNhZ2VUZXh0ID0gdGV4dDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBhbGxvd1Vua25vd25PcHRpb25zKCkge1xuICAgIHRoaXMuY29uZmlnLmFsbG93VW5rbm93bk9wdGlvbnMgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGlnbm9yZU9wdGlvbkRlZmF1bHRWYWx1ZSgpIHtcbiAgICB0aGlzLmNvbmZpZy5pZ25vcmVPcHRpb25EZWZhdWx0VmFsdWUgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHZlcnNpb24odmVyc2lvbiwgY3VzdG9tRmxhZ3MgPSBcIi12LCAtLXZlcnNpb25cIikge1xuICAgIHRoaXMudmVyc2lvbk51bWJlciA9IHZlcnNpb247XG4gICAgdGhpcy5vcHRpb24oY3VzdG9tRmxhZ3MsIFwiRGlzcGxheSB2ZXJzaW9uIG51bWJlclwiKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBleGFtcGxlKGV4YW1wbGUpIHtcbiAgICB0aGlzLmV4YW1wbGVzLnB1c2goZXhhbXBsZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgb3B0aW9uKHJhd05hbWUsIGRlc2NyaXB0aW9uLCBjb25maWcpIHtcbiAgICBjb25zdCBvcHRpb24gPSBuZXcgT3B0aW9uKHJhd05hbWUsIGRlc2NyaXB0aW9uLCBjb25maWcpO1xuICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgYWxpYXMobmFtZSkge1xuICAgIHRoaXMuYWxpYXNOYW1lcy5wdXNoKG5hbWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGFjdGlvbihjYWxsYmFjaykge1xuICAgIHRoaXMuY29tbWFuZEFjdGlvbiA9IGNhbGxiYWNrO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGlzTWF0Y2hlZChuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZSA9PT0gbmFtZSB8fCB0aGlzLmFsaWFzTmFtZXMuaW5jbHVkZXMobmFtZSk7XG4gIH1cbiAgZ2V0IGlzRGVmYXVsdENvbW1hbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZSA9PT0gXCJcIiB8fCB0aGlzLmFsaWFzTmFtZXMuaW5jbHVkZXMoXCIhXCIpO1xuICB9XG4gIGdldCBpc0dsb2JhbENvbW1hbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBHbG9iYWxDb21tYW5kO1xuICB9XG4gIGhhc09wdGlvbihuYW1lKSB7XG4gICAgbmFtZSA9IG5hbWUuc3BsaXQoXCIuXCIpWzBdO1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gb3B0aW9uLm5hbWVzLmluY2x1ZGVzKG5hbWUpO1xuICAgIH0pO1xuICB9XG4gIG91dHB1dEhlbHAoKSB7XG4gICAgY29uc3Qge25hbWUsIGNvbW1hbmRzfSA9IHRoaXMuY2xpO1xuICAgIGNvbnN0IHtcbiAgICAgIHZlcnNpb25OdW1iZXIsXG4gICAgICBvcHRpb25zOiBnbG9iYWxPcHRpb25zLFxuICAgICAgaGVscENhbGxiYWNrXG4gICAgfSA9IHRoaXMuY2xpLmdsb2JhbENvbW1hbmQ7XG4gICAgbGV0IHNlY3Rpb25zID0gW1xuICAgICAge1xuICAgICAgICBib2R5OiBgJHtuYW1lfSR7dmVyc2lvbk51bWJlciA/IGAvJHt2ZXJzaW9uTnVtYmVyfWAgOiBcIlwifWBcbiAgICAgIH1cbiAgICBdO1xuICAgIHNlY3Rpb25zLnB1c2goe1xuICAgICAgdGl0bGU6IFwiVXNhZ2VcIixcbiAgICAgIGJvZHk6IGAgICQgJHtuYW1lfSAke3RoaXMudXNhZ2VUZXh0IHx8IHRoaXMucmF3TmFtZX1gXG4gICAgfSk7XG4gICAgY29uc3Qgc2hvd0NvbW1hbmRzID0gKHRoaXMuaXNHbG9iYWxDb21tYW5kIHx8IHRoaXMuaXNEZWZhdWx0Q29tbWFuZCkgJiYgY29tbWFuZHMubGVuZ3RoID4gMDtcbiAgICBpZiAoc2hvd0NvbW1hbmRzKSB7XG4gICAgICBjb25zdCBsb25nZXN0Q29tbWFuZE5hbWUgPSBmaW5kTG9uZ2VzdChjb21tYW5kcy5tYXAoKGNvbW1hbmQpID0+IGNvbW1hbmQucmF3TmFtZSkpO1xuICAgICAgc2VjdGlvbnMucHVzaCh7XG4gICAgICAgIHRpdGxlOiBcIkNvbW1hbmRzXCIsXG4gICAgICAgIGJvZHk6IGNvbW1hbmRzLm1hcCgoY29tbWFuZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgICAke3BhZFJpZ2h0KGNvbW1hbmQucmF3TmFtZSwgbG9uZ2VzdENvbW1hbmROYW1lLmxlbmd0aCl9ICAke2NvbW1hbmQuZGVzY3JpcHRpb259YDtcbiAgICAgICAgfSkuam9pbihcIlxcblwiKVxuICAgICAgfSk7XG4gICAgICBzZWN0aW9ucy5wdXNoKHtcbiAgICAgICAgdGl0bGU6IGBGb3IgbW9yZSBpbmZvLCBydW4gYW55IGNvbW1hbmQgd2l0aCB0aGUgXFxgLS1oZWxwXFxgIGZsYWdgLFxuICAgICAgICBib2R5OiBjb21tYW5kcy5tYXAoKGNvbW1hbmQpID0+IGAgICQgJHtuYW1lfSR7Y29tbWFuZC5uYW1lID09PSBcIlwiID8gXCJcIiA6IGAgJHtjb21tYW5kLm5hbWV9YH0gLS1oZWxwYCkuam9pbihcIlxcblwiKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGxldCBvcHRpb25zID0gdGhpcy5pc0dsb2JhbENvbW1hbmQgPyBnbG9iYWxPcHRpb25zIDogWy4uLnRoaXMub3B0aW9ucywgLi4uZ2xvYmFsT3B0aW9ucyB8fCBbXV07XG4gICAgaWYgKCF0aGlzLmlzR2xvYmFsQ29tbWFuZCAmJiAhdGhpcy5pc0RlZmF1bHRDb21tYW5kKSB7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLm5hbWUgIT09IFwidmVyc2lvblwiKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbG9uZ2VzdE9wdGlvbk5hbWUgPSBmaW5kTG9uZ2VzdChvcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ucmF3TmFtZSkpO1xuICAgICAgc2VjdGlvbnMucHVzaCh7XG4gICAgICAgIHRpdGxlOiBcIk9wdGlvbnNcIixcbiAgICAgICAgYm9keTogb3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICAgIHJldHVybiBgICAke3BhZFJpZ2h0KG9wdGlvbi5yYXdOYW1lLCBsb25nZXN0T3B0aW9uTmFtZS5sZW5ndGgpfSAgJHtvcHRpb24uZGVzY3JpcHRpb259ICR7b3B0aW9uLmNvbmZpZy5kZWZhdWx0ID09PSB2b2lkIDAgPyBcIlwiIDogYChkZWZhdWx0OiAke29wdGlvbi5jb25maWcuZGVmYXVsdH0pYH1gO1xuICAgICAgICB9KS5qb2luKFwiXFxuXCIpXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXhhbXBsZXMubGVuZ3RoID4gMCkge1xuICAgICAgc2VjdGlvbnMucHVzaCh7XG4gICAgICAgIHRpdGxlOiBcIkV4YW1wbGVzXCIsXG4gICAgICAgIGJvZHk6IHRoaXMuZXhhbXBsZXMubWFwKChleGFtcGxlKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleGFtcGxlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBleGFtcGxlKG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZXhhbXBsZTtcbiAgICAgICAgfSkuam9pbihcIlxcblwiKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChoZWxwQ2FsbGJhY2spIHtcbiAgICAgIHNlY3Rpb25zID0gaGVscENhbGxiYWNrKHNlY3Rpb25zKSB8fCBzZWN0aW9ucztcbiAgICB9XG4gICAgY29uc29sZS5sb2coc2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gc2VjdGlvbi50aXRsZSA/IGAke3NlY3Rpb24udGl0bGV9OlxuJHtzZWN0aW9uLmJvZHl9YCA6IHNlY3Rpb24uYm9keTtcbiAgICB9KS5qb2luKFwiXFxuXFxuXCIpKTtcbiAgfVxuICBvdXRwdXRWZXJzaW9uKCkge1xuICAgIGNvbnN0IHtuYW1lfSA9IHRoaXMuY2xpO1xuICAgIGNvbnN0IHt2ZXJzaW9uTnVtYmVyfSA9IHRoaXMuY2xpLmdsb2JhbENvbW1hbmQ7XG4gICAgaWYgKHZlcnNpb25OdW1iZXIpIHtcbiAgICAgIGNvbnNvbGUubG9nKGAke25hbWV9LyR7dmVyc2lvbk51bWJlcn0gJHtwbGF0Zm9ybUluZm99YCk7XG4gICAgfVxuICB9XG4gIGNoZWNrUmVxdWlyZWRBcmdzKCkge1xuICAgIGNvbnN0IG1pbmltYWxBcmdzQ291bnQgPSB0aGlzLmFyZ3MuZmlsdGVyKChhcmcpID0+IGFyZy5yZXF1aXJlZCkubGVuZ3RoO1xuICAgIGlmICh0aGlzLmNsaS5hcmdzLmxlbmd0aCA8IG1pbmltYWxBcmdzQ291bnQpIHtcbiAgICAgIHRocm93IG5ldyBDQUNFcnJvcihgbWlzc2luZyByZXF1aXJlZCBhcmdzIGZvciBjb21tYW5kIFxcYCR7dGhpcy5yYXdOYW1lfVxcYGApO1xuICAgIH1cbiAgfVxuICBjaGVja1Vua25vd25PcHRpb25zKCkge1xuICAgIGNvbnN0IHtvcHRpb25zLCBnbG9iYWxDb21tYW5kfSA9IHRoaXMuY2xpO1xuICAgIGlmICghdGhpcy5jb25maWcuYWxsb3dVbmtub3duT3B0aW9ucykge1xuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKG9wdGlvbnMpKSB7XG4gICAgICAgIGlmIChuYW1lICE9PSBcIi0tXCIgJiYgIXRoaXMuaGFzT3B0aW9uKG5hbWUpICYmICFnbG9iYWxDb21tYW5kLmhhc09wdGlvbihuYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBDQUNFcnJvcihgVW5rbm93biBvcHRpb24gXFxgJHtuYW1lLmxlbmd0aCA+IDEgPyBgLS0ke25hbWV9YCA6IGAtJHtuYW1lfWB9XFxgYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY2hlY2tPcHRpb25WYWx1ZSgpIHtcbiAgICBjb25zdCB7b3B0aW9uczogcGFyc2VkT3B0aW9ucywgZ2xvYmFsQ29tbWFuZH0gPSB0aGlzLmNsaTtcbiAgICBjb25zdCBvcHRpb25zID0gWy4uLmdsb2JhbENvbW1hbmQub3B0aW9ucywgLi4udGhpcy5vcHRpb25zXTtcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlZE9wdGlvbnNbb3B0aW9uLm5hbWUuc3BsaXQoXCIuXCIpWzBdXTtcbiAgICAgIGlmIChvcHRpb24ucmVxdWlyZWQpIHtcbiAgICAgICAgY29uc3QgaGFzTmVnYXRlZCA9IG9wdGlvbnMuc29tZSgobykgPT4gby5uZWdhdGVkICYmIG8ubmFtZXMuaW5jbHVkZXMob3B0aW9uLm5hbWUpKTtcbiAgICAgICAgaWYgKHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSAmJiAhaGFzTmVnYXRlZCkge1xuICAgICAgICAgIHRocm93IG5ldyBDQUNFcnJvcihgb3B0aW9uIFxcYCR7b3B0aW9uLnJhd05hbWV9XFxgIHZhbHVlIGlzIG1pc3NpbmdgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuY2xhc3MgR2xvYmFsQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICBjb25zdHJ1Y3RvcihjbGkpIHtcbiAgICBzdXBlcihcIkBAZ2xvYmFsQEBcIiwgXCJcIiwge30sIGNsaSk7XG4gIH1cbn1cblxudmFyIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbmNsYXNzIENBQyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKG5hbWUgPSBcIlwiKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuY29tbWFuZHMgPSBbXTtcbiAgICB0aGlzLnJhd0FyZ3MgPSBbXTtcbiAgICB0aGlzLmFyZ3MgPSBbXTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmdsb2JhbENvbW1hbmQgPSBuZXcgR2xvYmFsQ29tbWFuZCh0aGlzKTtcbiAgICB0aGlzLmdsb2JhbENvbW1hbmQudXNhZ2UoXCI8Y29tbWFuZD4gW29wdGlvbnNdXCIpO1xuICB9XG4gIHVzYWdlKHRleHQpIHtcbiAgICB0aGlzLmdsb2JhbENvbW1hbmQudXNhZ2UodGV4dCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgY29tbWFuZChyYXdOYW1lLCBkZXNjcmlwdGlvbiwgY29uZmlnKSB7XG4gICAgY29uc3QgY29tbWFuZCA9IG5ldyBDb21tYW5kKHJhd05hbWUsIGRlc2NyaXB0aW9uIHx8IFwiXCIsIGNvbmZpZywgdGhpcyk7XG4gICAgY29tbWFuZC5nbG9iYWxDb21tYW5kID0gdGhpcy5nbG9iYWxDb21tYW5kO1xuICAgIHRoaXMuY29tbWFuZHMucHVzaChjb21tYW5kKTtcbiAgICByZXR1cm4gY29tbWFuZDtcbiAgfVxuICBvcHRpb24ocmF3TmFtZSwgZGVzY3JpcHRpb24sIGNvbmZpZykge1xuICAgIHRoaXMuZ2xvYmFsQ29tbWFuZC5vcHRpb24ocmF3TmFtZSwgZGVzY3JpcHRpb24sIGNvbmZpZyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgaGVscChjYWxsYmFjaykge1xuICAgIHRoaXMuZ2xvYmFsQ29tbWFuZC5vcHRpb24oXCItaCwgLS1oZWxwXCIsIFwiRGlzcGxheSB0aGlzIG1lc3NhZ2VcIik7XG4gICAgdGhpcy5nbG9iYWxDb21tYW5kLmhlbHBDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuc2hvd0hlbHBPbkV4aXQgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHZlcnNpb24odmVyc2lvbiwgY3VzdG9tRmxhZ3MgPSBcIi12LCAtLXZlcnNpb25cIikge1xuICAgIHRoaXMuZ2xvYmFsQ29tbWFuZC52ZXJzaW9uKHZlcnNpb24sIGN1c3RvbUZsYWdzKTtcbiAgICB0aGlzLnNob3dWZXJzaW9uT25FeGl0ID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBleGFtcGxlKGV4YW1wbGUpIHtcbiAgICB0aGlzLmdsb2JhbENvbW1hbmQuZXhhbXBsZShleGFtcGxlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBvdXRwdXRIZWxwKCkge1xuICAgIGlmICh0aGlzLm1hdGNoZWRDb21tYW5kKSB7XG4gICAgICB0aGlzLm1hdGNoZWRDb21tYW5kLm91dHB1dEhlbHAoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nbG9iYWxDb21tYW5kLm91dHB1dEhlbHAoKTtcbiAgICB9XG4gIH1cbiAgb3V0cHV0VmVyc2lvbigpIHtcbiAgICB0aGlzLmdsb2JhbENvbW1hbmQub3V0cHV0VmVyc2lvbigpO1xuICB9XG4gIHNldFBhcnNlZEluZm8oe2FyZ3MsIG9wdGlvbnN9LCBtYXRjaGVkQ29tbWFuZCwgbWF0Y2hlZENvbW1hbmROYW1lKSB7XG4gICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmIChtYXRjaGVkQ29tbWFuZCkge1xuICAgICAgdGhpcy5tYXRjaGVkQ29tbWFuZCA9IG1hdGNoZWRDb21tYW5kO1xuICAgIH1cbiAgICBpZiAobWF0Y2hlZENvbW1hbmROYW1lKSB7XG4gICAgICB0aGlzLm1hdGNoZWRDb21tYW5kTmFtZSA9IG1hdGNoZWRDb21tYW5kTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgdW5zZXRNYXRjaGVkQ29tbWFuZCgpIHtcbiAgICB0aGlzLm1hdGNoZWRDb21tYW5kID0gdm9pZCAwO1xuICAgIHRoaXMubWF0Y2hlZENvbW1hbmROYW1lID0gdm9pZCAwO1xuICB9XG4gIHBhcnNlKGFyZ3YgPSBwcm9jZXNzQXJncywge1xuICAgIHJ1biA9IHRydWVcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5yYXdBcmdzID0gYXJndjtcbiAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgdGhpcy5uYW1lID0gYXJndlsxXSA/IGdldEZpbGVOYW1lKGFyZ3ZbMV0pIDogXCJjbGlcIjtcbiAgICB9XG4gICAgbGV0IHNob3VsZFBhcnNlID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgdGhpcy5jb21tYW5kcykge1xuICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5tcmkoYXJndi5zbGljZSgyKSwgY29tbWFuZCk7XG4gICAgICBjb25zdCBjb21tYW5kTmFtZSA9IHBhcnNlZC5hcmdzWzBdO1xuICAgICAgaWYgKGNvbW1hbmQuaXNNYXRjaGVkKGNvbW1hbmROYW1lKSkge1xuICAgICAgICBzaG91bGRQYXJzZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBwYXJzZWRJbmZvID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHBhcnNlZCksIHtcbiAgICAgICAgICBhcmdzOiBwYXJzZWQuYXJncy5zbGljZSgxKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXRQYXJzZWRJbmZvKHBhcnNlZEluZm8sIGNvbW1hbmQsIGNvbW1hbmROYW1lKTtcbiAgICAgICAgdGhpcy5lbWl0KGBjb21tYW5kOiR7Y29tbWFuZE5hbWV9YCwgY29tbWFuZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzaG91bGRQYXJzZSkge1xuICAgICAgZm9yIChjb25zdCBjb21tYW5kIG9mIHRoaXMuY29tbWFuZHMpIHtcbiAgICAgICAgaWYgKGNvbW1hbmQubmFtZSA9PT0gXCJcIikge1xuICAgICAgICAgIHNob3VsZFBhcnNlID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5tcmkoYXJndi5zbGljZSgyKSwgY29tbWFuZCk7XG4gICAgICAgICAgdGhpcy5zZXRQYXJzZWRJbmZvKHBhcnNlZCwgY29tbWFuZCk7XG4gICAgICAgICAgdGhpcy5lbWl0KGBjb21tYW5kOiFgLCBjb21tYW5kKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2hvdWxkUGFyc2UpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMubXJpKGFyZ3Yuc2xpY2UoMikpO1xuICAgICAgdGhpcy5zZXRQYXJzZWRJbmZvKHBhcnNlZCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuaGVscCAmJiB0aGlzLnNob3dIZWxwT25FeGl0KSB7XG4gICAgICB0aGlzLm91dHB1dEhlbHAoKTtcbiAgICAgIHJ1biA9IGZhbHNlO1xuICAgICAgdGhpcy51bnNldE1hdGNoZWRDb21tYW5kKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudmVyc2lvbiAmJiB0aGlzLnNob3dWZXJzaW9uT25FeGl0ICYmIHRoaXMubWF0Y2hlZENvbW1hbmROYW1lID09IG51bGwpIHtcbiAgICAgIHRoaXMub3V0cHV0VmVyc2lvbigpO1xuICAgICAgcnVuID0gZmFsc2U7XG4gICAgICB0aGlzLnVuc2V0TWF0Y2hlZENvbW1hbmQoKTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkQXJndiA9IHthcmdzOiB0aGlzLmFyZ3MsIG9wdGlvbnM6IHRoaXMub3B0aW9uc307XG4gICAgaWYgKHJ1bikge1xuICAgICAgdGhpcy5ydW5NYXRjaGVkQ29tbWFuZCgpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubWF0Y2hlZENvbW1hbmQgJiYgdGhpcy5hcmdzWzBdKSB7XG4gICAgICB0aGlzLmVtaXQoXCJjb21tYW5kOipcIik7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWRBcmd2O1xuICB9XG4gIG1yaShhcmd2LCBjb21tYW5kKSB7XG4gICAgY29uc3QgY2xpT3B0aW9ucyA9IFtcbiAgICAgIC4uLnRoaXMuZ2xvYmFsQ29tbWFuZC5vcHRpb25zLFxuICAgICAgLi4uY29tbWFuZCA/IGNvbW1hbmQub3B0aW9ucyA6IFtdXG4gICAgXTtcbiAgICBjb25zdCBtcmlPcHRpb25zID0gZ2V0TXJpT3B0aW9ucyhjbGlPcHRpb25zKTtcbiAgICBsZXQgYXJnc0FmdGVyRG91YmxlRGFzaGVzID0gW107XG4gICAgY29uc3QgZG91YmxlRGFzaGVzSW5kZXggPSBhcmd2LmluZGV4T2YoXCItLVwiKTtcbiAgICBpZiAoZG91YmxlRGFzaGVzSW5kZXggPiAtMSkge1xuICAgICAgYXJnc0FmdGVyRG91YmxlRGFzaGVzID0gYXJndi5zbGljZShkb3VibGVEYXNoZXNJbmRleCArIDEpO1xuICAgICAgYXJndiA9IGFyZ3Yuc2xpY2UoMCwgZG91YmxlRGFzaGVzSW5kZXgpO1xuICAgIH1cbiAgICBsZXQgcGFyc2VkID0gbXJpMihhcmd2LCBtcmlPcHRpb25zKTtcbiAgICBwYXJzZWQgPSBPYmplY3Qua2V5cyhwYXJzZWQpLnJlZHVjZSgocmVzLCBuYW1lKSA9PiB7XG4gICAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIHJlcyksIHtcbiAgICAgICAgW2NhbWVsY2FzZU9wdGlvbk5hbWUobmFtZSldOiBwYXJzZWRbbmFtZV1cbiAgICAgIH0pO1xuICAgIH0sIHtfOiBbXX0pO1xuICAgIGNvbnN0IGFyZ3MgPSBwYXJzZWQuXztcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgXCItLVwiOiBhcmdzQWZ0ZXJEb3VibGVEYXNoZXNcbiAgICB9O1xuICAgIGNvbnN0IGlnbm9yZURlZmF1bHQgPSBjb21tYW5kICYmIGNvbW1hbmQuY29uZmlnLmlnbm9yZU9wdGlvbkRlZmF1bHRWYWx1ZSA/IGNvbW1hbmQuY29uZmlnLmlnbm9yZU9wdGlvbkRlZmF1bHRWYWx1ZSA6IHRoaXMuZ2xvYmFsQ29tbWFuZC5jb25maWcuaWdub3JlT3B0aW9uRGVmYXVsdFZhbHVlO1xuICAgIGxldCB0cmFuc2Zvcm1zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGNvbnN0IGNsaU9wdGlvbiBvZiBjbGlPcHRpb25zKSB7XG4gICAgICBpZiAoIWlnbm9yZURlZmF1bHQgJiYgY2xpT3B0aW9uLmNvbmZpZy5kZWZhdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIGNsaU9wdGlvbi5uYW1lcykge1xuICAgICAgICAgIG9wdGlvbnNbbmFtZV0gPSBjbGlPcHRpb24uY29uZmlnLmRlZmF1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNsaU9wdGlvbi5jb25maWcudHlwZSkpIHtcbiAgICAgICAgaWYgKHRyYW5zZm9ybXNbY2xpT3B0aW9uLm5hbWVdID09PSB2b2lkIDApIHtcbiAgICAgICAgICB0cmFuc2Zvcm1zW2NsaU9wdGlvbi5uYW1lXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdHJhbnNmb3Jtc1tjbGlPcHRpb24ubmFtZV1bXCJzaG91bGRUcmFuc2Zvcm1cIl0gPSB0cnVlO1xuICAgICAgICAgIHRyYW5zZm9ybXNbY2xpT3B0aW9uLm5hbWVdW1widHJhbnNmb3JtRnVuY3Rpb25cIl0gPSBjbGlPcHRpb24uY29uZmlnLnR5cGVbMF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFyc2VkKSkge1xuICAgICAgaWYgKGtleSAhPT0gXCJfXCIpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGtleS5zcGxpdChcIi5cIik7XG4gICAgICAgIHNldERvdFByb3Aob3B0aW9ucywga2V5cywgcGFyc2VkW2tleV0pO1xuICAgICAgICBzZXRCeVR5cGUob3B0aW9ucywgdHJhbnNmb3Jtcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBhcmdzLFxuICAgICAgb3B0aW9uc1xuICAgIH07XG4gIH1cbiAgcnVuTWF0Y2hlZENvbW1hbmQoKSB7XG4gICAgY29uc3Qge2FyZ3MsIG9wdGlvbnMsIG1hdGNoZWRDb21tYW5kOiBjb21tYW5kfSA9IHRoaXM7XG4gICAgaWYgKCFjb21tYW5kIHx8ICFjb21tYW5kLmNvbW1hbmRBY3Rpb24pXG4gICAgICByZXR1cm47XG4gICAgY29tbWFuZC5jaGVja1Vua25vd25PcHRpb25zKCk7XG4gICAgY29tbWFuZC5jaGVja09wdGlvblZhbHVlKCk7XG4gICAgY29tbWFuZC5jaGVja1JlcXVpcmVkQXJncygpO1xuICAgIGNvbnN0IGFjdGlvbkFyZ3MgPSBbXTtcbiAgICBjb21tYW5kLmFyZ3MuZm9yRWFjaCgoYXJnLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGFyZy52YXJpYWRpYykge1xuICAgICAgICBhY3Rpb25BcmdzLnB1c2goYXJncy5zbGljZShpbmRleCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aW9uQXJncy5wdXNoKGFyZ3NbaW5kZXhdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBhY3Rpb25BcmdzLnB1c2gob3B0aW9ucyk7XG4gICAgcmV0dXJuIGNvbW1hbmQuY29tbWFuZEFjdGlvbi5hcHBseSh0aGlzLCBhY3Rpb25BcmdzKTtcbiAgfVxufVxuXG5jb25zdCBjYWMgPSAobmFtZSA9IFwiXCIpID0+IG5ldyBDQUMobmFtZSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNhYztcbmV4cG9ydCB7IENBQywgQ29tbWFuZCwgY2FjIH07XG4iLCJpbXBvcnQgY2FjIGZyb20gJ2NhYydcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nXG5pbXBvcnQgdHlwZSB7IENsaU9wdGlvbnMgfSBmcm9tICcuL2NsaS1hcGknXG5pbXBvcnQgeyBzdGFydFZpdGVzdCB9IGZyb20gJy4vY2xpLWFwaSdcblxuY29uc3QgY2xpID0gY2FjKCd2aXRlc3QnKVxuXG5jbGlcbiAgLnZlcnNpb24odmVyc2lvbilcbiAgLm9wdGlvbignLXIsIC0tcm9vdCA8cGF0aD4nLCAncm9vdCBwYXRoJylcbiAgLm9wdGlvbignLWMsIC0tY29uZmlnIDxwYXRoPicsICdwYXRoIHRvIGNvbmZpZyBmaWxlJylcbiAgLm9wdGlvbignLXUsIC0tdXBkYXRlJywgJ3VwZGF0ZSBzbmFwc2hvdCcpXG4gIC5vcHRpb24oJy13LCAtLXdhdGNoJywgJ3dhdGNoIG1vZGUnKVxuICAub3B0aW9uKCctdCwgLS10ZXN0TmFtZVBhdHRlcm4gPHBhdHRlcm4+JywgJ3J1biB0ZXN0cyB3aXRoIGZ1bGwgbmFtZXMgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBwYXR0ZXJuJylcbiAgLm9wdGlvbignLS11aScsICdlbmFibGUgVUknKVxuICAub3B0aW9uKCctLW9wZW4nLCAnb3BlbiBVSSBhdXRvbWF0aWNhbGx5IChkZWZhdWx0OiAhcHJvY2Vzcy5lbnYuQ0kpKScpXG4gIC5vcHRpb24oJy0tYXBpIFthcGldJywgJ3NlcnZlIEFQSSwgYXZhaWxhYmxlIG9wdGlvbnM6IC0tYXBpLnBvcnQgPHBvcnQ+LCAtLWFwaS5ob3N0IFtob3N0XSBhbmQgLS1hcGkuc3RyaWN0UG9ydCcpXG4gIC5vcHRpb24oJy0tdGhyZWFkcycsICdlbmFibGVkIHRocmVhZHMgKGRlZmF1bHQ6IHRydWUpJylcbiAgLm9wdGlvbignLS1zaWxlbnQnLCAnc2lsZW50IGNvbnNvbGUgb3V0cHV0IGZyb20gdGVzdHMnKVxuICAub3B0aW9uKCctLWlzb2xhdGUnLCAnaXNvbGF0ZSBlbnZpcm9ubWVudCBmb3IgZWFjaCB0ZXN0IGZpbGUgKGRlZmF1bHQ6IHRydWUpJylcbiAgLm9wdGlvbignLS1yZXBvcnRlciA8bmFtZT4nLCAncmVwb3J0ZXInKVxuICAub3B0aW9uKCctLW91dHB1dEZpbGUgPGZpbGVuYW1lPicsICd3cml0ZSB0ZXN0IHJlc3VsdHMgdG8gYSBmaWxlIHdoZW4gdGhlIC0tcmVwb3J0ZXI9anNvbiBvcHRpb24gaXMgYWxzbyBzcGVjaWZpZWQnKVxuICAub3B0aW9uKCctLWNvdmVyYWdlJywgJ3VzZSBjOCBmb3IgY292ZXJhZ2UnKVxuICAub3B0aW9uKCctLXJ1bicsICdkbyBub3Qgd2F0Y2gnKVxuICAub3B0aW9uKCctLW1vZGUnLCAnb3ZlcnJpZGUgVml0ZSBtb2RlIChkZWZhdWx0OiB0ZXN0KScpXG4gIC5vcHRpb24oJy0tZ2xvYmFscycsICdpbmplY3QgYXBpcyBnbG9iYWxseScpXG4gIC5vcHRpb24oJy0tZ2xvYmFsJywgJ2RlcHJlY2F0ZWQsIHVzZSAtLWdsb2JhbHMnKVxuICAub3B0aW9uKCctLWRvbScsICdtb2NrIGJyb3dzZXIgYXBpIHdpdGggaGFwcHktZG9tJylcbiAgLm9wdGlvbignLS1lbnZpcm9ubWVudCA8ZW52PicsICdydW5uZXIgZW52aXJvbm1lbnQgKGRlZmF1bHQ6IG5vZGUpJylcbiAgLm9wdGlvbignLS1wYXNzV2l0aE5vVGVzdHMnLCAncGFzcyB3aGVuIG5vIHRlc3RzIGZvdW5kJylcbiAgLm9wdGlvbignLS1hbGxvd09ubHknLCAnQWxsb3cgdGVzdHMgYW5kIHN1aXRlcyB0aGF0IGFyZSBtYXJrZWQgYXMgb25seSAoZGVmYXVsdDogIXByb2Nlc3MuZW52LkNJKScpXG4gIC5oZWxwKClcblxuY2xpXG4gIC5jb21tYW5kKCdydW4gWy4uLmZpbHRlcnNdJylcbiAgLmFjdGlvbihydW4pXG5cbmNsaVxuICAuY29tbWFuZCgncmVsYXRlZCBbLi4uZmlsdGVyc10nKVxuICAuYWN0aW9uKHJ1blJlbGF0ZWQpXG5cbmNsaVxuICAuY29tbWFuZCgnd2F0Y2ggWy4uLmZpbHRlcnNdJylcbiAgLmFjdGlvbihzdGFydClcblxuY2xpXG4gIC5jb21tYW5kKCdkZXYgWy4uLmZpbHRlcnNdJylcbiAgLmFjdGlvbihzdGFydClcblxuY2xpXG4gIC5jb21tYW5kKCdbLi4uZmlsdGVyc10nKVxuICAuYWN0aW9uKHN0YXJ0KVxuXG5jbGkucGFyc2UoKVxuXG5hc3luYyBmdW5jdGlvbiBydW5SZWxhdGVkKHJlbGF0ZWRGaWxlczogc3RyaW5nW10gfCBzdHJpbmcsIGFyZ3Y6IENsaU9wdGlvbnMpIHtcbiAgYXJndi5yZWxhdGVkID0gcmVsYXRlZEZpbGVzXG4gIGFyZ3YucGFzc1dpdGhOb1Rlc3RzID8/PSB0cnVlXG4gIGF3YWl0IHN0YXJ0KFtdLCBhcmd2KVxufVxuXG5hc3luYyBmdW5jdGlvbiBydW4oY2xpRmlsdGVyczogc3RyaW5nW10sIG9wdGlvbnM6IENsaU9wdGlvbnMpIHtcbiAgb3B0aW9ucy5ydW4gPSB0cnVlXG4gIGF3YWl0IHN0YXJ0KGNsaUZpbHRlcnMsIG9wdGlvbnMpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGNsaUZpbHRlcnM6IHN0cmluZ1tdLCBvcHRpb25zOiBDbGlPcHRpb25zKSB7XG4gIGlmIChhd2FpdCBzdGFydFZpdGVzdChjbGlGaWx0ZXJzLCBvcHRpb25zKSA9PT0gZmFsc2UpXG4gICAgcHJvY2Vzcy5leGl0KClcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLFNBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRTtBQUNwQixDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFDcEMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUc7QUFDekIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxJQUFJLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDL0UsSUFBSSxPQUFPLEdBQUcsS0FBSyxTQUFTLEdBQUcsR0FBRztBQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxPQUFPLEdBQUcsS0FBSyxHQUFHLEdBQUcsS0FBSyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDcEksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRztBQUNwQyxFQUFFLENBQUM7QUFDSCxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFN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
|