serverless-spy 2.2.4 → 2.2.6
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/.jsii +3 -3
- package/cli/package.json +1 -1
- package/dist/releasetag.txt +1 -1
- package/lib/cli/package.json +1 -1
- package/lib/src/ServerlessSpy.js +1 -1
- package/node_modules/bundle-name/index.js +2 -2
- package/node_modules/bundle-name/package.json +6 -5
- package/node_modules/bundle-name/readme.md +2 -2
- package/node_modules/default-browser/index.d.ts +5 -4
- package/node_modules/default-browser/index.js +13 -11
- package/node_modules/default-browser/package.json +14 -12
- package/node_modules/default-browser/windows.js +11 -5
- package/node_modules/default-browser-id/index.js +8 -32
- package/node_modules/default-browser-id/package.json +5 -8
- package/node_modules/default-browser-id/readme.md +2 -2
- package/node_modules/open/index.js +10 -10
- package/node_modules/{is-wsl → open/node_modules/is-wsl}/index.d.ts +2 -2
- package/node_modules/open/node_modules/is-wsl/index.js +27 -0
- package/node_modules/{is-wsl → open/node_modules/is-wsl}/package.json +21 -9
- package/node_modules/open/node_modules/is-wsl/readme.md +21 -0
- package/node_modules/open/package.json +9 -8
- package/node_modules/open/xdg-open +338 -137
- package/node_modules/run-applescript/index.d.ts +28 -4
- package/node_modules/run-applescript/index.js +20 -7
- package/node_modules/run-applescript/package.json +10 -9
- package/node_modules/run-applescript/readme.md +44 -6
- package/package.json +2 -2
- package/node_modules/big-integer/BigInteger.d.ts +0 -2393
- package/node_modules/big-integer/BigInteger.js +0 -1453
- package/node_modules/big-integer/BigInteger.min.js +0 -1
- package/node_modules/big-integer/LICENSE +0 -24
- package/node_modules/big-integer/README.md +0 -589
- package/node_modules/big-integer/bower.json +0 -29
- package/node_modules/big-integer/package.json +0 -48
- package/node_modules/big-integer/tsconfig.json +0 -24
- package/node_modules/bplist-parser/README.md +0 -48
- package/node_modules/bplist-parser/bplistParser.js +0 -363
- package/node_modules/bplist-parser/package.json +0 -34
- package/node_modules/bplist-parser/test/airplay.bplist +0 -0
- package/node_modules/bplist-parser/test/iTunes-small.bplist +0 -0
- package/node_modules/bplist-parser/test/int64.bplist +0 -0
- package/node_modules/bplist-parser/test/int64.xml +0 -10
- package/node_modules/bplist-parser/test/parseTest.js +0 -104
- package/node_modules/bplist-parser/test/sample1.bplist +0 -0
- package/node_modules/bplist-parser/test/sample2.bplist +0 -0
- package/node_modules/bplist-parser/test/uid.bplist +0 -0
- package/node_modules/bplist-parser/test/utf16.bplist +0 -0
- package/node_modules/bplist-parser/test/utf16_chinese.plist +0 -0
- package/node_modules/cross-spawn/CHANGELOG.md +0 -130
- package/node_modules/cross-spawn/LICENSE +0 -21
- package/node_modules/cross-spawn/README.md +0 -96
- package/node_modules/cross-spawn/index.js +0 -39
- package/node_modules/cross-spawn/lib/enoent.js +0 -59
- package/node_modules/cross-spawn/lib/parse.js +0 -91
- package/node_modules/cross-spawn/lib/util/escape.js +0 -45
- package/node_modules/cross-spawn/lib/util/readShebang.js +0 -23
- package/node_modules/cross-spawn/lib/util/resolveCommand.js +0 -52
- package/node_modules/cross-spawn/package.json +0 -73
- package/node_modules/default-browser/node_modules/execa/index.d.ts +0 -937
- package/node_modules/default-browser/node_modules/execa/index.js +0 -309
- package/node_modules/default-browser/node_modules/execa/lib/command.js +0 -120
- package/node_modules/default-browser/node_modules/execa/lib/error.js +0 -87
- package/node_modules/default-browser/node_modules/execa/lib/kill.js +0 -102
- package/node_modules/default-browser/node_modules/execa/lib/pipe.js +0 -42
- package/node_modules/default-browser/node_modules/execa/lib/promise.js +0 -36
- package/node_modules/default-browser/node_modules/execa/lib/stdio.js +0 -49
- package/node_modules/default-browser/node_modules/execa/lib/stream.js +0 -119
- package/node_modules/default-browser/node_modules/execa/lib/verbose.js +0 -19
- package/node_modules/default-browser/node_modules/execa/package.json +0 -87
- package/node_modules/default-browser/node_modules/execa/readme.md +0 -824
- package/node_modules/default-browser/node_modules/human-signals/LICENSE +0 -201
- package/node_modules/default-browser/node_modules/human-signals/README.md +0 -178
- package/node_modules/default-browser/node_modules/human-signals/build/src/core.js +0 -273
- package/node_modules/default-browser/node_modules/human-signals/build/src/main.d.ts +0 -73
- package/node_modules/default-browser/node_modules/human-signals/build/src/main.js +0 -70
- package/node_modules/default-browser/node_modules/human-signals/build/src/realtime.js +0 -16
- package/node_modules/default-browser/node_modules/human-signals/build/src/signals.js +0 -34
- package/node_modules/default-browser/node_modules/human-signals/package.json +0 -61
- package/node_modules/default-browser/node_modules/is-stream/index.d.ts +0 -81
- package/node_modules/default-browser/node_modules/is-stream/index.js +0 -29
- package/node_modules/default-browser/node_modules/is-stream/license +0 -9
- package/node_modules/default-browser/node_modules/is-stream/package.json +0 -44
- package/node_modules/default-browser/node_modules/is-stream/readme.md +0 -60
- package/node_modules/default-browser/node_modules/mimic-fn/index.d.ts +0 -52
- package/node_modules/default-browser/node_modules/mimic-fn/index.js +0 -71
- package/node_modules/default-browser/node_modules/mimic-fn/license +0 -9
- package/node_modules/default-browser/node_modules/mimic-fn/package.json +0 -45
- package/node_modules/default-browser/node_modules/mimic-fn/readme.md +0 -90
- package/node_modules/default-browser/node_modules/npm-run-path/index.d.ts +0 -90
- package/node_modules/default-browser/node_modules/npm-run-path/index.js +0 -52
- package/node_modules/default-browser/node_modules/npm-run-path/license +0 -9
- package/node_modules/default-browser/node_modules/npm-run-path/package.json +0 -49
- package/node_modules/default-browser/node_modules/npm-run-path/readme.md +0 -104
- package/node_modules/default-browser/node_modules/onetime/index.d.ts +0 -59
- package/node_modules/default-browser/node_modules/onetime/index.js +0 -41
- package/node_modules/default-browser/node_modules/onetime/license +0 -9
- package/node_modules/default-browser/node_modules/onetime/package.json +0 -45
- package/node_modules/default-browser/node_modules/onetime/readme.md +0 -94
- package/node_modules/default-browser/node_modules/path-key/index.d.ts +0 -31
- package/node_modules/default-browser/node_modules/path-key/index.js +0 -12
- package/node_modules/default-browser/node_modules/path-key/license +0 -9
- package/node_modules/default-browser/node_modules/path-key/package.json +0 -41
- package/node_modules/default-browser/node_modules/path-key/readme.md +0 -57
- package/node_modules/default-browser/node_modules/strip-final-newline/index.js +0 -14
- package/node_modules/default-browser/node_modules/strip-final-newline/license +0 -9
- package/node_modules/default-browser/node_modules/strip-final-newline/package.json +0 -43
- package/node_modules/default-browser/node_modules/strip-final-newline/readme.md +0 -35
- package/node_modules/execa/index.d.ts +0 -564
- package/node_modules/execa/index.js +0 -268
- package/node_modules/execa/lib/command.js +0 -52
- package/node_modules/execa/lib/error.js +0 -88
- package/node_modules/execa/lib/kill.js +0 -115
- package/node_modules/execa/lib/promise.js +0 -46
- package/node_modules/execa/lib/stdio.js +0 -52
- package/node_modules/execa/lib/stream.js +0 -97
- package/node_modules/execa/license +0 -9
- package/node_modules/execa/package.json +0 -74
- package/node_modules/execa/readme.md +0 -663
- package/node_modules/get-stream/buffer-stream.js +0 -52
- package/node_modules/get-stream/index.d.ts +0 -105
- package/node_modules/get-stream/index.js +0 -61
- package/node_modules/get-stream/license +0 -9
- package/node_modules/get-stream/package.json +0 -47
- package/node_modules/get-stream/readme.md +0 -124
- package/node_modules/human-signals/CHANGELOG.md +0 -11
- package/node_modules/human-signals/LICENSE +0 -201
- package/node_modules/human-signals/README.md +0 -165
- package/node_modules/human-signals/build/src/core.js +0 -273
- package/node_modules/human-signals/build/src/core.js.map +0 -1
- package/node_modules/human-signals/build/src/main.d.ts +0 -52
- package/node_modules/human-signals/build/src/main.js +0 -71
- package/node_modules/human-signals/build/src/main.js.map +0 -1
- package/node_modules/human-signals/build/src/realtime.js +0 -19
- package/node_modules/human-signals/build/src/realtime.js.map +0 -1
- package/node_modules/human-signals/build/src/signals.js +0 -35
- package/node_modules/human-signals/build/src/signals.js.map +0 -1
- package/node_modules/human-signals/package.json +0 -64
- package/node_modules/is-stream/index.d.ts +0 -79
- package/node_modules/is-stream/index.js +0 -28
- package/node_modules/is-stream/license +0 -9
- package/node_modules/is-stream/package.json +0 -42
- package/node_modules/is-stream/readme.md +0 -60
- package/node_modules/is-wsl/index.js +0 -31
- package/node_modules/is-wsl/license +0 -9
- package/node_modules/is-wsl/node_modules/is-docker/cli.js +0 -5
- package/node_modules/is-wsl/node_modules/is-docker/index.d.ts +0 -15
- package/node_modules/is-wsl/node_modules/is-docker/index.js +0 -29
- package/node_modules/is-wsl/node_modules/is-docker/license +0 -9
- package/node_modules/is-wsl/node_modules/is-docker/package.json +0 -42
- package/node_modules/is-wsl/node_modules/is-docker/readme.md +0 -27
- package/node_modules/is-wsl/readme.md +0 -36
- package/node_modules/isexe/.npmignore +0 -2
- package/node_modules/isexe/LICENSE +0 -15
- package/node_modules/isexe/README.md +0 -51
- package/node_modules/isexe/index.js +0 -57
- package/node_modules/isexe/mode.js +0 -41
- package/node_modules/isexe/package.json +0 -31
- package/node_modules/isexe/test/basic.js +0 -221
- package/node_modules/isexe/windows.js +0 -42
- package/node_modules/merge-stream/LICENSE +0 -21
- package/node_modules/merge-stream/README.md +0 -78
- package/node_modules/merge-stream/index.js +0 -41
- package/node_modules/merge-stream/package.json +0 -19
- package/node_modules/mimic-fn/index.d.ts +0 -54
- package/node_modules/mimic-fn/index.js +0 -13
- package/node_modules/mimic-fn/license +0 -9
- package/node_modules/mimic-fn/package.json +0 -42
- package/node_modules/mimic-fn/readme.md +0 -69
- package/node_modules/npm-run-path/index.d.ts +0 -89
- package/node_modules/npm-run-path/index.js +0 -47
- package/node_modules/npm-run-path/license +0 -9
- package/node_modules/npm-run-path/package.json +0 -44
- package/node_modules/npm-run-path/readme.md +0 -115
- package/node_modules/onetime/index.d.ts +0 -64
- package/node_modules/onetime/index.js +0 -44
- package/node_modules/onetime/license +0 -9
- package/node_modules/onetime/package.json +0 -43
- package/node_modules/onetime/readme.md +0 -94
- package/node_modules/path-key/index.d.ts +0 -40
- package/node_modules/path-key/index.js +0 -16
- package/node_modules/path-key/license +0 -9
- package/node_modules/path-key/package.json +0 -39
- package/node_modules/path-key/readme.md +0 -61
- package/node_modules/shebang-command/index.js +0 -19
- package/node_modules/shebang-command/license +0 -9
- package/node_modules/shebang-command/package.json +0 -34
- package/node_modules/shebang-command/readme.md +0 -34
- package/node_modules/shebang-regex/index.d.ts +0 -22
- package/node_modules/shebang-regex/index.js +0 -2
- package/node_modules/shebang-regex/license +0 -9
- package/node_modules/shebang-regex/package.json +0 -35
- package/node_modules/shebang-regex/readme.md +0 -33
- package/node_modules/signal-exit/LICENSE.txt +0 -16
- package/node_modules/signal-exit/README.md +0 -39
- package/node_modules/signal-exit/index.js +0 -202
- package/node_modules/signal-exit/package.json +0 -38
- package/node_modules/signal-exit/signals.js +0 -53
- package/node_modules/strip-final-newline/index.js +0 -16
- package/node_modules/strip-final-newline/license +0 -9
- package/node_modules/strip-final-newline/package.json +0 -40
- package/node_modules/strip-final-newline/readme.md +0 -30
- package/node_modules/titleize/index.d.ts +0 -17
- package/node_modules/titleize/index.js +0 -7
- package/node_modules/titleize/license +0 -9
- package/node_modules/titleize/package.json +0 -42
- package/node_modules/titleize/readme.md +0 -25
- package/node_modules/untildify/index.d.ts +0 -14
- package/node_modules/untildify/index.js +0 -12
- package/node_modules/untildify/license +0 -9
- package/node_modules/untildify/package.json +0 -43
- package/node_modules/untildify/readme.md +0 -30
- package/node_modules/which/CHANGELOG.md +0 -166
- package/node_modules/which/LICENSE +0 -15
- package/node_modules/which/README.md +0 -54
- package/node_modules/which/bin/node-which +0 -52
- package/node_modules/which/package.json +0 -43
- package/node_modules/which/which.js +0 -125
- /package/node_modules/{default-browser/node_modules/execa → open/node_modules/is-wsl}/license +0 -0
package/.jsii
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"bootstrap-icons": "^1.9.1",
|
|
28
28
|
"caporal": "^1.4.0",
|
|
29
29
|
"json-format-highlight": "^1.0.4",
|
|
30
|
-
"open": "
|
|
30
|
+
"open": "10.1.0",
|
|
31
31
|
"serialize-error": "^11.0.3",
|
|
32
32
|
"ws": "^8.17.1"
|
|
33
33
|
},
|
|
@@ -4096,6 +4096,6 @@
|
|
|
4096
4096
|
"symbolId": "src/ServerlessSpy:SpyFilter"
|
|
4097
4097
|
}
|
|
4098
4098
|
},
|
|
4099
|
-
"version": "2.2.
|
|
4100
|
-
"fingerprint": "
|
|
4099
|
+
"version": "2.2.6",
|
|
4100
|
+
"fingerprint": "hFmEpBe99KanYWYbzUQ+md1WUEcHIqr9unvJaVhx6Zc="
|
|
4101
4101
|
}
|
package/cli/package.json
CHANGED
package/dist/releasetag.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
v2.2.
|
|
1
|
+
v2.2.6
|
package/lib/cli/package.json
CHANGED
package/lib/src/ServerlessSpy.js
CHANGED
|
@@ -622,5 +622,5 @@ class ServerlessSpy extends constructs_1.Construct {
|
|
|
622
622
|
}
|
|
623
623
|
exports.ServerlessSpy = ServerlessSpy;
|
|
624
624
|
_a = JSII_RTTI_SYMBOL_1;
|
|
625
|
-
ServerlessSpy[_a] = { fqn: "serverless-spy.ServerlessSpy", version: "2.2.
|
|
625
|
+
ServerlessSpy[_a] = { fqn: "serverless-spy.ServerlessSpy", version: "2.2.6" };
|
|
626
626
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVybGVzc1NweS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9TZXJ2ZXJsZXNzU3B5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3Qiw4RUFBc0U7QUFDdEUsNkNBUXFCO0FBQ3JCLHFEQUFxRDtBQUNyRCxpREFBaUQ7QUFDakQsMERBQTBEO0FBQzFELGlEQUE2QztBQUM3QyxpREFBaUQ7QUFDakQsdURBSWdDO0FBQ2hDLHVFQUF1RTtBQUN2RSxtRkFBc0U7QUFDdEUsNERBQTREO0FBQzVELHFFQUErRDtBQUMvRCx5Q0FBeUM7QUFDekMsNERBQTREO0FBQzVELDJDQUEyQztBQUMzQyw2REFBNkQ7QUFDN0QsMkNBQTJDO0FBQzNDLDJDQUFtRDtBQUNuRCxnRUFBNkQ7QUFtQjdELE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFnQixFQUEyQixFQUFFLENBQ3JFLGNBQWMsSUFBSSxJQUFJLElBQUksYUFBYSxJQUFJLElBQUksQ0FBQztBQUVsRCxNQUFNLG9DQUFvQyxHQUFHLDBCQUEwQixDQUFDO0FBRXhFLE1BQWEsYUFBYyxTQUFRLHNCQUFTO0lBVTFDLFlBQ0UsS0FBZ0IsRUFDaEIsRUFBVSxFQUNGLEtBQTBCO1FBRWxDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFGVCxVQUFLLEdBQUwsS0FBSyxDQUFxQjtRQVo1QiwyQkFBc0IsR0FBaUIsRUFBRSxDQUFDO1FBQzFDLDJCQUFzQixHQUF5QixFQUFFLENBQUM7UUFFbEQsaUJBQVksR0FBa0IsRUFBRSxDQUFDO1FBQ2xDLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBQzFCLGVBQVUsR0FBaUIsRUFBRSxDQUFDO1FBQzlCLGFBQVEsR0FBMkMsRUFBRSxDQUFDO1FBVTVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQUssQ0FBQyxFQUFFLENB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LElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxHQUFHLFFBQVEsSUFBSSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7O0FBdnpCSCxzQ0F3ekJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFB5dGhvbkxheWVyVmVyc2lvbiB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtcHl0aG9uLWFscGhhJztcbmltcG9ydCB7XG4gIGF3c19pYW0sXG4gIEJ1bmRsaW5nRmlsZUFjY2VzcyxcbiAgQ2ZuT3V0cHV0LFxuICBjdXN0b21fcmVzb3VyY2VzLFxuICBEdXJhdGlvbixcbiAgTmVzdGVkU3RhY2ssXG4gIFN0YWNrLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBkeW5hbW9EYiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGInO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQge1xuICBBcmNoaXRlY3R1cmUsXG4gIElMYXllclZlcnNpb24sXG4gIFNpbmdsZXRvbkZ1bmN0aW9uLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGR5bmFtb0RiU3RyZWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEtZXZlbnQtc291cmNlcyc7XG5pbXBvcnQgeyBTcXNFdmVudFNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEtZXZlbnQtc291cmNlcyc7XG5pbXBvcnQgKiBhcyBsYW1iZGFOb2RlIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzJztcbmltcG9ydCB7IE5vZGVqc0Z1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHMzbm90aWYgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLW5vdGlmaWNhdGlvbnMnO1xuaW1wb3J0ICogYXMgc25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMnO1xuaW1wb3J0ICogYXMgc25zU3VicyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc25zLXN1YnNjcmlwdGlvbnMnO1xuaW1wb3J0ICogYXMgc3FzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zcXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBlbnZWYXJpYWJsZU5hbWVzIH0gZnJvbSAnLi9jb21tb24vZW52VmFyaWFibGVOYW1lcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVybGVzc1NweVByb3BzIHtcbiAgcmVhZG9ubHkgZ2VuZXJhdGVTcHlFdmVudHNGaWxlTG9jYXRpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNweVNxc1dpdGhOb1N1YnNjcmlwdGlvbkFuZERyb3BBbGxNZXNzYWdlcz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGRlYnVnTW9kZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3B5RmlsdGVyIHtcbiAgcmVhZG9ubHkgc3B5TGFtYmRhPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc3B5U3FzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc3B5U25zVG9waWM/OiBib29sZWFuO1xuICByZWFkb25seSBzcHlTbnNTdWJzcmlwdGlvbj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNweUV2ZW50QnJpZGdlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc3B5RXZlbnRCcmlkZ2VSdWxlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc3B5UzM/OiBib29sZWFuO1xuICByZWFkb25seSBzcHlEeW5hbW9EQj86IGJvb2xlYW47XG59XG5cbmNvbnN0IGlzTGFtYmRhRnVuY3Rpb24gPSAobm9kZTogSUNvbnN0cnVjdCk6IG5vZGUgaXMgbGFtYmRhLkZ1bmN0aW9uID0+XG4gICdmdW5jdGlvbk5hbWUnIGluIG5vZGUgJiYgJ2Z1bmN0aW9uQXJuJyBpbiBub2RlO1xuXG5jb25zdCBzZXJ2ZXJsZXNzU3B5SW90RW5kcG9pbnRDck5hbWVQcmVmaXggPSAnU2VydmVybGVzc1NweUlvdEVuZHBvaW50JztcblxuZXhwb3J0IGNsYXNzIFNlcnZlcmxlc3NTcHkgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIGNyZWF0ZWRSZXNvdXJjZXNCeVNTcHk6IElDb25zdHJ1Y3RbXSA9IFtdO1xuICBwcml2YXRlIGxhbWJkYVN1YnNjcmlwdGlvblBvb2w6IExhbWJkYVN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgbGFtYmRhU3Vic2NyaXB0aW9uTWFpbjogTGFtYmRhU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGxhbWJkYXNTcGllZDogTGFtYmRhU3BpZWRbXSA9IFtdO1xuICBwdWJsaWMgc2VydmljZUtleXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgc3BpZWROb2RlczogSUNvbnN0cnVjdFtdID0gW107XG4gIHByaXZhdGUgbGF5ZXJNYXA6IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgSUxheWVyVmVyc2lvbj4+ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgaW90RW5kcG9pbnQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBwcm9wcz86IFNlcnZlcmxlc3NTcHlQcm9wc1xuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qgcm9vdFN0YWNrID0gdGhpcy5jbGVhbk5hbWUoXG4gICAgICB0aGlzLmZpbmRSb290U3RhY2soU3RhY2sub2YodGhpcykpLm5vZGUuaWRcbiAgICApO1xuXG4gICAgY29uc3QgZ2V0SW9URW5kcG9pbnQgPSBuZXcgY3VzdG9tX3Jlc291cmNlcy5Bd3NDdXN0b21SZXNvdXJjZShcbiAgICAgIHRoaXMsXG4gICAgICBzZXJ2ZXJsZXNzU3B5SW90RW5kcG9pbnRDck5hbWVQcmVmaXgsXG4gICAgICB7XG4gICAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgICAgc2VydmljZTogJ0lvdCcsXG4gICAgICAgICAgYWN0aW9uOiAnZGVzY3JpYmVFbmRwb2ludCcsXG4gICAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOlxuICAgICAgICAgICAgY3VzdG9tX3Jlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQuZnJvbVJlc3BvbnNlKCdlbmRwb2ludEFkZHJlc3MnKSxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBlbmRwb2ludFR5cGU6ICdpb3Q6RGF0YS1BVFMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGluc3RhbGxMYXRlc3RBd3NTZGs6IGZhbHNlLFxuICAgICAgICBwb2xpY3k6IGN1c3RvbV9yZXNvdXJjZXMuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuZnJvbVNka0NhbGxzKHtcbiAgICAgICAgICByZXNvdXJjZXM6IGN1c3RvbV9yZXNvdXJjZXMuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuQU5ZX1JFU09VUkNFLFxuICAgICAgICB9KSxcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzZXJ2ZXJsZXNzU3B5SW90RW5kcG9pbnRDck5hbWVQcmVmaXggKyByb290U3RhY2ssXG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmlvdEVuZHBvaW50ID0gZ2V0SW9URW5kcG9pbnQuZ2V0UmVzcG9uc2VGaWVsZCgnZW5kcG9pbnRBZGRyZXNzJyk7XG5cbiAgICB0aGlzLmNyZWF0ZWRSZXNvdXJjZXNCeVNTcHkucHVzaChnZXRJb1RFbmRwb2ludCk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsICdTZXJ2ZXJsZXNzU3B5SW9URW5kcG9pbnQnLCB7XG4gICAgICBrZXk6ICdTZXJ2ZXJsZXNzU3B5V3NVcmwnLFxuICAgICAgdmFsdWU6IGAke3RoaXMuaW90RW5kcG9pbnR9LyR7cm9vdFN0YWNrfWAsXG4gICAgfSk7XG5cbiAgICB0aGlzLmxhbWJkYVN1YnNjcmlwdGlvbk1haW4gPSB0aGlzLnByb3ZpZGVGdW5jdGlvbkZvclN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0TGFtYmRhRW52aXJvbm1lbnRWYXJpYWJsZXMoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIE5PREVfT1BUSU9OUzogJy0tZW5hYmxlLXNvdXJjZS1tYXBzJyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRhbGl6ZSBzcHlpbmcgb24gcmVzb3VyY2VzIGdpdmVuIGFzIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIG5vZGVzIFdoaWNoIHJlb3VyY2VzIGFuZCB0aGVpciBjaGlsZHJlbiB0byBzcHkgb24uXG4gICAqL1xuICBwdWJsaWMgc3B5Tm9kZXMobm9kZXM6IElDb25zdHJ1Y3RbXSkge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgbGV0IG5zID0gdGhpcy5nZXRBbGxOb2Rlcyhub2RlKTtcbiAgICAgIHRoaXMuaW50ZXJuYWxTcHlOb2Rlcyhucyk7XG4gICAgfVxuXG4gICAgdGhpcy5maW5hbGl6ZVNweSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRhbGl6ZSBzcHlpbmcgb24gcmVzb3VyY2VzLlxuICAgKiBAcGFyYW0gZmlsdGVyIExpbWl0IHdoaWNoIHJlc291cmNlcyB0byBzcHkgb24uXG4gICAqL1xuICBwdWJsaWMgc3B5KGZpbHRlcj86IFNweUZpbHRlcikge1xuICAgIGxldCBub2RlcyA9IHRoaXMuZ2V0QWxsTm9kZXMoU3RhY2sub2YodGhpcykpO1xuXG4gICAgY29uc3QgZmlsdGVyV2l0aERlZmF1bHRzOiBSZXF1aXJlZDxTcHlGaWx0ZXI+ID0ge1xuICAgICAgc3B5TGFtYmRhOiB0cnVlLFxuICAgICAgc3B5U3FzOiB0cnVlLFxuICAgICAgc3B5U25zVG9waWM6IHRydWUsXG4gICAgICBzcHlTbnNTdWJzcmlwdGlvbjogdHJ1ZSxcbiAgICAgIHNweUV2ZW50QnJpZGdlOiB0cnVlLFxuICAgICAgc3B5RXZlbnRCcmlkZ2VSdWxlOiB0cnVlLFxuICAgICAgc3B5UzM6IHRydWUsXG4gICAgICBzcHlEeW5hbW9EQjogdHJ1ZSxcbiAgICAgIC4uLmZpbHRlcixcbiAgICB9O1xuXG4gICAgY29uc3QgQ1JJRCA9XG4gICAgICAnQVdTJyArXG4gICAgICBjdXN0b21fcmVzb3VyY2VzLkF3c0N1c3RvbVJlc291cmNlLlBST1ZJREVSX0ZVTkNUSU9OX1VVSUQucmVwbGFjZShcbiAgICAgICAgLy0vZ2ksXG4gICAgICAgICcnXG4gICAgICApLnN1YnN0cmluZygwLCAxNik7XG5cbiAgICBub2RlcyA9IG5vZGVzLmZpbHRlcigobm9kZSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAvLyBJZ25vcmUgdGhlIGN1c3RvbSByZXNvdXJjZSBhbmQgdGhlIFByb3ZpZGVyIChhcyB3ZWxsIGFzIGFueSBvdGhlciBQcm92aWRlcnMgdXNpbmcgdGhlIHNhbWUgcHJvdmlkZXIgZnVuY3Rpb24pLCBvdGhlcndpc2Ugd2UgY2F1c2VcbiAgICAgICAgLy8gY2lyY3VsYXIgZGVwZW5kZW5jaWVzXG4gICAgICAgIG5vZGUubm9kZS5pZC5zdGFydHNXaXRoKENSSUQpIHx8XG4gICAgICAgIG5vZGUubm9kZS5pZCA9PT0gJ1Byb3ZpZGVyJyB8fFxuICAgICAgICAvLyBJZ25vcmUgc2luZ2xldG9uIGZ1bmN0aW9ucyBhcyB0aGV5IGNhbiBjYXVzZSB2ZXJ5IG9kZCBiZWhhdmlvciBhbmQgY3Jhc2hlc1xuICAgICAgICBub2RlIGluc3RhbmNlb2YgU2luZ2xldG9uRnVuY3Rpb25cbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcz8uZGVidWdNb2RlKSB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKGBTa2lwcGluZyAke25vZGUubm9kZS5pZH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmaWx0ZXJXaXRoRGVmYXVsdHMuc3B5TGFtYmRhICYmXG4gICAgICAgIChub2RlIGluc3RhbmNlb2YgbGFtYmRhLkZ1bmN0aW9uIHx8XG4gICAgICAgICAgbm9kZSBpbnN0YW5jZW9mIE5vZGVqc0Z1bmN0aW9uIHx8XG4gICAgICAgICAgaXNMYW1iZGFGdW5jdGlvbihub2RlKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoZmlsdGVyV2l0aERlZmF1bHRzLnNweVNuc1RvcGljICYmIG5vZGUgaW5zdGFuY2VvZiBzbnMuVG9waWMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmaWx0ZXJXaXRoRGVmYXVsdHMuc3B5U25zU3Vic3JpcHRpb24gJiZcbiAgICAgICAgbm9kZSBpbnN0YW5jZW9mIHNucy5TdWJzY3JpcHRpb25cbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoZmlsdGVyV2l0aERlZmF1bHRzLnNweVMzICYmIG5vZGUgaW5zdGFuY2VvZiBzMy5CdWNrZXQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmaWx0ZXJXaXRoRGVmYXVsdHMuc3B5RHluYW1vREIgJiZcbiAgICAgICAgbm9kZSBpbnN0YW5jZW9mIGR5bmFtb0RiLlRhYmxlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmaWx0ZXJXaXRoRGVmYXVsdHMuc3B5RHluYW1vREIgJiZcbiAgICAgICAgbm9kZSBpbnN0YW5jZW9mIGR5bmFtb0RiLlRhYmxlVjJcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGZpbHRlcldpdGhEZWZhdWx0cy5zcHlFdmVudEJyaWRnZSAmJlxuICAgICAgICBub2RlIGluc3RhbmNlb2YgZXZlbnRzLkV2ZW50QnVzXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmaWx0ZXJXaXRoRGVmYXVsdHMuc3B5RXZlbnRCcmlkZ2VSdWxlICYmXG4gICAgICAgIG5vZGUgaW5zdGFuY2VvZiBldmVudHMuUnVsZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZmlsdGVyV2l0aERlZmF1bHRzLnNweVNxcyAmJlxuICAgICAgICBub2RlIGluc3RhbmNlb2YgbGFtYmRhLkNmbkV2ZW50U291cmNlTWFwcGluZ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZmlsdGVyV2l0aERlZmF1bHRzLnNweVNxcyAmJlxuICAgICAgICB0aGlzLnByb3BzPy5zcHlTcXNXaXRoTm9TdWJzY3JpcHRpb25BbmREcm9wQWxsTWVzc2FnZXMgJiZcbiAgICAgICAgbm9kZSBpbnN0YW5jZW9mIHNxcy5RdWV1ZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICB0aGlzLmludGVybmFsU3B5Tm9kZXMobm9kZXMpO1xuICAgIHRoaXMuZmluYWxpemVTcHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW50ZXJuYWxTcHlOb2Rlcyhub2RlczogSUNvbnN0cnVjdFtdKSB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICB0aGlzLmludGVybmFsU3B5Tm9kZShub2RlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmFsaXplU3B5KCkge1xuICAgIC8vc2V0IG1hcHBpbmcgcHJvcGVydHkgZm9yIGFsbCBmdW5jdGlvbnMgd2UgY3JlYXRlZFxuICAgIGZvciAoY29uc3QgZnVuYyBvZiB0aGlzLmxhbWJkYVN1YnNjcmlwdGlvblBvb2wpIHtcbiAgICAgIGZ1bmMuZnVuY3Rpb24uYWRkRW52aXJvbm1lbnQoXG4gICAgICAgIGVudlZhcmlhYmxlTmFtZXMuU1NQWV9JTkZSQV9NQVBQSU5HLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShmdW5jLm1hcHBpbmcpXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vc2V0IG1hcHBpbmcgcHJvcGVydHkgZm9yIGFsbCBmdW5jdGlvbnMgd2Ugc3B5IG9uXG4gICAgZm9yIChjb25zdCBmdW5jIG9mIHRoaXMubGFtYmRhc1NwaWVkKSB7XG4gICAgICBmdW5jLmZ1bmN0aW9uLmFkZEVudmlyb25tZW50KFxuICAgICAgICBlbnZWYXJpYWJsZU5hbWVzLlNTUFlfSU5GUkFfTUFQUElORyxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoZnVuYy5tYXBwaW5nKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcz8uZ2VuZXJhdGVTcHlFdmVudHNGaWxlTG9jYXRpb24pIHtcbiAgICAgIHRoaXMud3JpdGVTcHlFdmVudHNDbGFzcyh0aGlzLnByb3BzPy5nZW5lcmF0ZVNweUV2ZW50c0ZpbGVMb2NhdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeHRlbnNpb25Bc3NldExvY2F0aW9uKCkge1xuICAgIGxldCBleHRlbnNpb25Bc3NldExvY2F0aW9uID0gcGF0aC5qb2luKFxuICAgICAgX19kaXJuYW1lLFxuICAgICAgJy4uL2V4dGVuc2lvbi9kaXN0L2xheWVyJ1xuICAgICk7XG5cbiAgICBjb25zdCBleHRlbnNpb25Bc3NldExvY2F0aW9uQWx0ID0gcGF0aC5qb2luKFxuICAgICAgX19kaXJuYW1lLFxuICAgICAgJy4uL2xpYi9leHRlbnNpb24vZGlzdC9sYXllcidcbiAgICApO1xuXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGV4dGVuc2lvbkFzc2V0TG9jYXRpb24pKSB7XG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZXh0ZW5zaW9uQXNzZXRMb2NhdGlvbkFsdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBGb2xkZXIgd2l0aCBhc3NldHMgZm9yIGV4dGVuc2lvbiBkb2VzIG5vdCBleGlzdHMgYXQgJHtleHRlbnNpb25Bc3NldExvY2F0aW9ufSBvciBhdCAke2V4dGVuc2lvbkFzc2V0TG9jYXRpb25BbHR9IGBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4dGVuc2lvbkFzc2V0TG9jYXRpb24gPSBleHRlbnNpb25Bc3NldExvY2F0aW9uQWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuc2lvbkFzc2V0TG9jYXRpb25XcmFwcGVyID0gcGF0aC5qb2luKFxuICAgICAgZXh0ZW5zaW9uQXNzZXRMb2NhdGlvbixcbiAgICAgICdzcHktd3JhcHBlcidcbiAgICApO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhleHRlbnNpb25Bc3NldExvY2F0aW9uV3JhcHBlcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFdyYXBwZXIgc2NyaXB0IGZvciBleHRlbnNpb24gZG9lcyBub3QgZXhpc3RzICR7ZXh0ZW5zaW9uQXNzZXRMb2NhdGlvbn1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuc2lvbkFzc2V0TG9jYXRpb25Db2RlID0gcGF0aC5qb2luKFxuICAgICAgZXh0ZW5zaW9uQXNzZXRMb2NhdGlvbixcbiAgICAgIGBub2RlanMvbm9kZV9tb2R1bGVzL2ludGVyY2VwdG9yLmpzYFxuICAgICk7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGV4dGVuc2lvbkFzc2V0TG9jYXRpb25Db2RlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ29kZSBmb3IgZXh0ZW5zaW9uIGRvZXMgbm90IGV4aXN0cyAke2V4dGVuc2lvbkFzc2V0TG9jYXRpb25Db2RlfWBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBleHRlbnNpb25Bc3NldExvY2F0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYW5ndWFnZUV4dGVuc2lvbkFzc2V0TG9jYXRpb24obGFuZ3VhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IHJvb3REaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nKTtcblxuICAgIGxldCBleHRlbnNpb25Bc3NldExvY2F0aW9uID0gcGF0aC5qb2luKHJvb3REaXIsIGBleHRlbnNpb25zLyR7bGFuZ3VhZ2V9YCk7XG5cbiAgICBjb25zdCBleHRlbnNpb25Bc3NldExvY2F0aW9uQWx0ID0gcGF0aC5qb2luKFxuICAgICAgcm9vdERpcixcbiAgICAgIGBsaWIvZXh0ZW5zaW9ucy8ke2xhbmd1YWdlfWBcbiAgICApO1xuXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGV4dGVuc2lvbkFzc2V0TG9jYXRpb24pKSB7XG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZXh0ZW5zaW9uQXNzZXRMb2NhdGlvbkFsdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBGb2xkZXIgd2l0aCBhc3NldHMgZm9yIGV4dGVuc2lvbiBmb3IgJHtsYW5ndWFnZX0gZG9lcyBub3QgZXhpc3RzIGF0ICR7ZXh0ZW5zaW9uQXNzZXRMb2NhdGlvbn0gb3IgYXQgJHtleHRlbnNpb25Bc3NldExvY2F0aW9uQWx0fSBgXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleHRlbnNpb25Bc3NldExvY2F0aW9uID0gZXh0ZW5zaW9uQXNzZXRMb2NhdGlvbkFsdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBleHRlbnNpb25Bc3NldExvY2F0aW9uV3JhcHBlciA9IHBhdGguam9pbihcbiAgICAgIC8vIGV4dGVuc2lvbkFzc2V0TG9jYXRpb24uc3Vic3RyaW5nKFxuICAgICAgLy8gICAwLFxuICAgICAgLy8gICBleHRlbnNpb25Bc3NldExvY2F0aW9uLmxhc3RJbmRleE9mKHBhdGguc2VwKVxuICAgICAgLy8gKSxcbiAgICAgIGV4dGVuc2lvbkFzc2V0TG9jYXRpb24sXG4gICAgICAnc3B5LXdyYXBwZXInXG4gICAgKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZXh0ZW5zaW9uQXNzZXRMb2NhdGlvbldyYXBwZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBXcmFwcGVyIHNjcmlwdCBmb3IgZXh0ZW5zaW9uIGRvZXMgbm90IGV4aXN0cyBhdCAke2V4dGVuc2lvbkFzc2V0TG9jYXRpb25XcmFwcGVyfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dGVuc2lvbkFzc2V0TG9jYXRpb247XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgU3B5RXZlbnRzIGNsYXNzLCB3aGljaCBoZWxwcyB3aXRoIHdyaXRpbmcgdGhlIGNvZGUgZm9yIHRlc3RzLlxuICAgKiBAcGFyYW0gZmlsZUxvY2F0aW9uXG4gICAqL1xuICBwcml2YXRlIHdyaXRlU3B5RXZlbnRzQ2xhc3MoZmlsZUxvY2F0aW9uOiBzdHJpbmcpIHtcbiAgICBmcy5ta2RpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVMb2NhdGlvbiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuc2VydmljZUtleXNcbiAgICAgIC5tYXAoKHNrKSA9PiBgICAke3NrLnJlcGxhY2UoLyMvZywgJycpfTogJyR7c2t9JyA9ICcke3NrfSc7XFxuYClcbiAgICAgIC5qb2luKCcnKTtcblxuICAgIGNvbnN0IGNvZGUgPSBgLyogZXNsaW50LWRpc2FibGUgKi9cXG5leHBvcnQgY2xhc3MgU2VydmVybGVzc1NweUV2ZW50cyB7XFxuJHtwcm9wZXJ0aWVzfX1cXG5gO1xuXG4gICAgZnMud3JpdGVGaWxlU3luYyhmaWxlTG9jYXRpb24sIGNvZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBbGxOb2RlcyhwYXJlbnQ6IElDb25zdHJ1Y3QpIHtcbiAgICBjb25zdCBub2RlczogSUNvbnN0cnVjdFtdID0gW107XG4gICAgbm9kZXMucHVzaChwYXJlbnQpO1xuICAgIHRoaXMuZ2V0QWxsTm9kZXNSZWN1cnNpdmUocGFyZW50LCBub2Rlcyk7XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBbGxOb2Rlc1JlY3Vyc2l2ZShwYXJlbnQ6IElDb25zdHJ1Y3QsIG5vZGVzOiBJQ29uc3RydWN0W10pIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgcGFyZW50Lm5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICB0aGlzLmdldEFsbE5vZGVzUmVjdXJzaXZlKG5vZGUsIG5vZGVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGludGVybmFsU3B5Tm9kZShub2RlOiBJQ29uc3RydWN0KSB7XG4gICAgaWYgKHRoaXMuc3BpZWROb2Rlcy5pbmNsdWRlcyhub2RlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3BpZWROb2Rlcy5wdXNoKG5vZGUpO1xuXG4gICAgaWYgKHRoaXMuY3JlYXRlZFJlc291cmNlc0J5U1NweS5pbmNsdWRlcyhub2RlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxhbWJkYVN1YnNjcmlwdGlvblBvb2wuZmluZCgocykgPT4gcy5mdW5jdGlvbiA9PT0gbm9kZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcz8uZGVidWdNb2RlKSB7XG4gICAgICBjb25zb2xlLmluZm8oJ1NweSBvbiBub2RlJywgdGhpcy5nZXRDb25zdHJ1Y3ROYW1lKG5vZGUpKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBub2RlIGluc3RhbmNlb2YgbGFtYmRhLkZ1bmN0aW9uIHx8XG4gICAgICBub2RlIGluc3RhbmNlb2YgTm9kZWpzRnVuY3Rpb24gfHxcbiAgICAgIGlzTGFtYmRhRnVuY3Rpb24obm9kZSlcbiAgICApIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxTcHlMYW1iZGEobm9kZSk7XG4gICAgfSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2Ygc25zLlRvcGljKSB7XG4gICAgICB0aGlzLmludGVybmFsU3B5U25zVG9waWMobm9kZSk7XG4gICAgfSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2Ygc25zLlN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5pbnRlcm5hbFNweVNuc1N1YnNjcmlwdGlvbihub2RlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBzMy5CdWNrZXQpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxTcHlTMyhub2RlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBkeW5hbW9EYi5UYWJsZSkge1xuICAgICAgdGhpcy5pbnRlcm5hbFNweUR5bmFtb2RiKG5vZGUpO1xuICAgIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIGR5bmFtb0RiLlRhYmxlVjIpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxTcHlEeW5hbW9kYihub2RlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBldmVudHMuRXZlbnRCdXMpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxTcHlFdmVudEJ1cyhub2RlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBldmVudHMuUnVsZSkge1xuICAgICAgdGhpcy5pbnRlcm5hbFNweUV2ZW50QnVzUnVsZShub2RlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBsYW1iZGEuQ2ZuRXZlbnRTb3VyY2VNYXBwaW5nKSB7XG4gICAgICB0aGlzLmludGVybmFsU3B5U3FzKG5vZGUpO1xuICAgIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIHNxcy5RdWV1ZSkge1xuICAgICAgaWYgKHRoaXMucHJvcHM/LnNweVNxc1dpdGhOb1N1YnNjcmlwdGlvbkFuZERyb3BBbGxNZXNzYWdlcykge1xuICAgICAgICB0aGlzLmludGVybmFsU3B5U3B5U3FzV2l0aE5vU3Vic2NyaXB0aW9uKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXh0ZW5zaW9uRm9yUnVudGltZShcbiAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZSxcbiAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYS5BcmNoaXRlY3R1cmVcbiAgKTogeyBsYXllcjogbGFtYmRhLklMYXllclZlcnNpb247IHNweVdyYXBwZXJQYXRoOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbGF5ZXJLZXkgPSAocjogbGFtYmRhLlJ1bnRpbWUsIGE6IGxhbWJkYS5BcmNoaXRlY3R1cmUpID0+XG4gICAgICBgJHtyLnRvU3RyaW5nKCl9XyR7YS5uYW1lLnRvU3RyaW5nKCl9YDtcbiAgICBsZXQgbGF5ZXIgPSB0aGlzLmxheWVyTWFwW2xheWVyS2V5KHJ1bnRpbWUsIGFyY2hpdGVjdHVyZSldO1xuICAgIGxldCBzcHlXcmFwcGVyUGF0aCA9ICcvb3B0L3NweS13cmFwcGVyJztcblxuICAgIHN3aXRjaCAocnVudGltZS5uYW1lKSB7XG4gICAgICBjYXNlIGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzgubmFtZTpcbiAgICAgIGNhc2UgbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfOS5uYW1lOlxuICAgICAgY2FzZSBsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMC5uYW1lOlxuICAgICAgY2FzZSBsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMS5uYW1lOlxuICAgICAgY2FzZSBsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMi5uYW1lOlxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuZ2V0TGFuZ3VhZ2VFeHRlbnNpb25Bc3NldExvY2F0aW9uKCdweXRob24nKTtcbiAgICAgICAgc3B5V3JhcHBlclBhdGggPSAnL29wdC9weXRob24vc3B5LXdyYXBwZXInO1xuICAgICAgICBsYXllciA9XG4gICAgICAgICAgbGF5ZXIgfHxcbiAgICAgICAgICBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHRoaXMsICdQeXRob25FeHRlbnNpb24nLCB7XG4gICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtydW50aW1lXSxcbiAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbYXJjaGl0ZWN0dXJlXSxcbiAgICAgICAgICAgIGVudHJ5OiBsb2NhdGlvbixcbiAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgIGJ1bmRsaW5nRmlsZUFjY2VzczogQnVuZGxpbmdGaWxlQWNjZXNzLlZPTFVNRV9DT1BZLFxuICAgICAgICAgICAgICAvLyBjb21tYW5kOiBbXG4gICAgICAgICAgICAgIC8vICAgYGNwICR7cGF0aC5qb2luKFxuICAgICAgICAgICAgICAvLyAgICAgbG9jYXRpb24uc3Vic3RyaW5nKDAsIGxvY2F0aW9uLmxhc3RJbmRleE9mKHBhdGguc2VwKSksXG4gICAgICAgICAgICAgIC8vICAgICAnc3B5LXdyYXBwZXIvc3B5LXdyYXBwZXInXG4gICAgICAgICAgICAgIC8vICAgKX0gL2Fzc2V0LW91dHB1dC9weXRob25gLFxuICAgICAgICAgICAgICAvLyBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGxhbWJkYS5SdW50aW1lLk5PREVKU18xMl9YLm5hbWU6XG4gICAgICBjYXNlIGxhbWJkYS5SdW50aW1lLk5PREVKU18xNF9YLm5hbWU6XG4gICAgICBjYXNlIGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLm5hbWU6XG4gICAgICBjYXNlIGxhbWJkYS5SdW50aW1lLk5PREVKU18xOF9YLm5hbWU6XG4gICAgICBjYXNlIGxhbWJkYS5SdW50aW1lLk5PREVKU18yMF9YLm5hbWU6XG4gICAgICAgIGxheWVyID1cbiAgICAgICAgICBsYXllciB8fFxuICAgICAgICAgIG5ldyBsYW1iZGEuTGF5ZXJWZXJzaW9uKHRoaXMsICdFeHRlbnNpb24nLCB7XG4gICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtydW50aW1lXSxcbiAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbYXJjaGl0ZWN0dXJlXSxcbiAgICAgICAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldCh0aGlzLmdldEV4dGVuc2lvbkFzc2V0TG9jYXRpb24oKSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5sb2coYE5vIGV4dGVuc2lvbnMgYXZhaWxhYmxlIGZvciAke3J1bnRpbWUudG9TdHJpbmcoKX1gKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvbXBhdGlibGVSdW50aW1lIG9mIGxheWVyLmNvbXBhdGlibGVSdW50aW1lcyEpIHtcbiAgICAgIHRoaXMubGF5ZXJNYXBbbGF5ZXJLZXkoY29tcGF0aWJsZVJ1bnRpbWUsIGFyY2hpdGVjdHVyZSldID0gbGF5ZXI7XG4gICAgfVxuICAgIHRoaXMuY3JlYXRlZFJlc291cmNlc0J5U1NweS5wdXNoKGxheWVyKTtcbiAgICByZXR1cm4geyBsYXllciwgc3B5V3JhcHBlclBhdGggfTtcbiAgfVxuXG4gIHByaXZhdGUgaW50ZXJuYWxTcHlTcHlTcXNXaXRoTm9TdWJzY3JpcHRpb24ocXVldWU6IHNxcy5RdWV1ZSkge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuZmluZEVsZW1lbnQ8bGFtYmRhLkNmbkV2ZW50U291cmNlTWFwcGluZz4oXG4gICAgICAobjogSUNvbnN0cnVjdCkgPT5cbiAgICAgICAgbiBpbnN0YW5jZW9mIGxhbWJkYS5DZm5FdmVudFNvdXJjZU1hcHBpbmcgJiZcbiAgICAgICAgKG4gYXMgbGFtYmRhLkNmbkV2ZW50U291cmNlTWFwcGluZykuZXZlbnRTb3VyY2VBcm4gPT09IHF1ZXVlLnF1ZXVlQXJuXG4gICAgKTtcblxuICAgIGlmIChzdWJzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybjsgLy9hbHJlYWR5IGhhdmUgc3Vic2NyaXB0aW9uXG4gICAgfVxuXG4gICAgY29uc3QgcXVldWVOYW1lID0gdGhpcy5nZXRDb25zdHJ1Y3ROYW1lKHF1ZXVlKTtcbiAgICBjb25zdCBmdW5jID0gbmV3IE5vZGVqc0Z1bmN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3F1ZXVlTmFtZX1TcXNTdWJzY3JpcHRpb25BbmREcm9wQWxsTWVzc2FnZXNgLFxuICAgICAge1xuICAgICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgICBoYW5kbGVyOiAnaGFuZGxlcicsXG4gICAgICAgIGVudHJ5OiB0aGlzLmdldEFzc2V0TG9jYXRpb24oXG4gICAgICAgICAgJ2Z1bmN0aW9ucy9zcXNTdWJzY3JpcHRpb25BbmREcm9wQWxsTWVzc2FnZXMuanMnXG4gICAgICAgICksXG4gICAgICAgIGVudmlyb25tZW50OiB0aGlzLmdldERlZmF1bHRMYW1iZGFFbnZpcm9ubWVudFZhcmlhYmxlcygpLFxuICAgICAgfVxuICAgICk7XG4gICAgZnVuYy5hZGRFdmVudFNvdXJjZShuZXcgU3FzRXZlbnRTb3VyY2UocXVldWUpKTtcbiAgICB0aGlzLnNldHVwRm9ySW9UKGZ1bmMpO1xuICAgIGNvbnN0IHsgbGF5ZXIsIHNweVdyYXBwZXJQYXRoIH0gPSB0aGlzLmdldEV4dGVuc2lvbkZvclJ1bnRpbWUoXG4gICAgICBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGZ1bmMuYXJjaGl0ZWN0dXJlXG4gICAgKSE7XG4gICAgZnVuYy5hZGRMYXllcnMobGF5ZXIpO1xuXG4gICAgZnVuYy5hZGRFbnZpcm9ubWVudCgnQVdTX0xBTUJEQV9FWEVDX1dSQVBQRVInLCBzcHlXcmFwcGVyUGF0aCk7XG5cbiAgICBpZiAodGhpcy5wcm9wcz8uZGVidWdNb2RlKSB7XG4gICAgICBmdW5jLmFkZEVudmlyb25tZW50KGVudlZhcmlhYmxlTmFtZXMuU1NQWV9ERUJVRywgJ3RydWUnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNyZWF0ZWRSZXNvdXJjZXNCeVNTcHkucHVzaChmdW5jKTtcblxuICAgIGNvbnN0IHNlcnZpY2VLZXkgPSBgU3FzIyR7cXVldWVOYW1lfWA7XG5cbiAgICB0aGlzLmFkZE1hcHBpbmdUb0Z1bmN0aW9uKGZ1bmMsIHtcbiAgICAgIGtleTogcXVldWUucXVldWVBcm4sXG4gICAgICB2YWx1ZTogc2VydmljZUtleSxcbiAgICB9KTtcblxuICAgIHRoaXMuc2VydmljZUtleXMucHVzaChzZXJ2aWNlS2V5KTtcbiAgICBmdW5jLmFkZEVudmlyb25tZW50KGVudlZhcmlhYmxlTmFtZXMuU1NQWV9TVUJTQ1JJQkVEX1RPX1NRUywgJ3RydWUnKTtcbiAgfVxuXG4gIHByaXZhdGUgaW50ZXJuYWxTcHlTcXMobm9kZTogbGFtYmRhLkNmbkV2ZW50U291cmNlTWFwcGluZykge1xuICAgIGNvbnN0IHF1ZXVlID0gdGhpcy5maW5kRWxlbWVudDxzcXMuUXVldWU+KFxuICAgICAgKG46IElDb25zdHJ1Y3QpID0+XG4gICAgICAgIG4gaW5zdGFuY2VvZiBzcXMuUXVldWUgJiZcbiAgICAgICAgKG4gYXMgc3FzLlF1ZXVlKS5xdWV1ZUFybiA9PT0gbm9kZS5ldmVudFNvdXJjZUFyblxuICAgICk7XG5cbiAgICBjb25zdCBmdW5jID0gdGhpcy5maW5kRWxlbWVudDxsYW1iZGEuRnVuY3Rpb24+KFxuICAgICAgKG46IElDb25zdHJ1Y3QpID0+XG4gICAgICAgIG4gaW5zdGFuY2VvZiBsYW1iZGEuRnVuY3Rpb24gJiZcbiAgICAgICAgKG4gYXMgbGFtYmRhLkZ1bmN0aW9uKS5mdW5jdGlvbk5hbWUgPT09IG5vZGUuZnVuY3Rpb25OYW1lXG4gICAgKTtcblxuICAgIGlmIChxdWV1ZSAmJiBmdW5jKSB7XG4gICAgICBjb25zdCBxdWV1ZU5hbWUgPSB0aGlzLmdldENvbnN0cnVjdE5hbWUocXVldWUpO1xuXG4gICAgICBjb25zdCBzZXJ2aWNlS2V5ID0gYFNxcyMke3F1ZXVlTmFtZX1gO1xuXG4gICAgICB0aGlzLmFkZE1hcHBpbmdUb0Z1bmN0aW9uKGZ1bmMsIHtcbiAgICAgICAga2V5OiBxdWV1ZS5xdWV1ZUFybixcbiAgICAgICAgdmFsdWU6IHNlcnZpY2VLZXksXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZXJ2aWNlS2V5cy5wdXNoKHNlcnZpY2VLZXkpO1xuICAgICAgZnVuYy5hZGRFbnZpcm9ubWVudChlbnZWYXJpYWJsZU5hbWVzLlNTUFlfU1VCU0NSSUJFRF9UT19TUVMsICd0cnVlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGdW5jdGlvbkZvclN1YnNjcmlwdGlvbihpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgZnVuYyA9IG5ldyBsYW1iZGFOb2RlLk5vZGVqc0Z1bmN0aW9uKHRoaXMsIGBTdWJzY3JpcHRpb24ke2luZGV4fWAsIHtcbiAgICAgIG1lbW9yeVNpemU6IDUxMixcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6ICdoYW5kbGVyJyxcbiAgICAgIGVudHJ5OiB0aGlzLmdldEFzc2V0TG9jYXRpb24oJ2Z1bmN0aW9ucy9zZW5kTWVzc2FnZS5qcycpLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgTk9ERV9PUFRJT05TOiAnLS1lbmFibGUtc291cmNlLW1hcHMnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnNldHVwRm9ySW9UKGZ1bmMpO1xuICAgIHJldHVybiBmdW5jO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnRlcm5hbFNweVMzKHMzQnVja2V0OiBzMy5CdWNrZXQpIHtcbiAgICBzM0J1Y2tldC5hZGRFdmVudE5vdGlmaWNhdGlvbihcbiAgICAgIHMzLkV2ZW50VHlwZS5PQkpFQ1RfQ1JFQVRFRF9QVVQsXG4gICAgICBuZXcgczNub3RpZi5MYW1iZGFEZXN0aW5hdGlvbih0aGlzLmxhbWJkYVN1YnNjcmlwdGlvbk1haW4uZnVuY3Rpb24pXG4gICAgKTtcblxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldENvbnN0cnVjdE5hbWUoczNCdWNrZXQpO1xuXG4gICAgY29uc3Qgc2VydmljZUtleSA9IGBTMyMke25hbWV9YDtcbiAgICB0aGlzLmxhbWJkYVN1YnNjcmlwdGlvbk1haW4ubWFwcGluZ1tzM0J1Y2tldC5idWNrZXRBcm5dID0gc2VydmljZUtleTtcbiAgICB0aGlzLnNlcnZpY2VLZXlzLnB1c2goc2VydmljZUtleSk7XG4gIH1cblxuICBwcml2YXRlIGludGVybmFsU3B5RHluYW1vZGIodGFibGU6IGR5bmFtb0RiLlRhYmxlIHwgZHluYW1vRGIuVGFibGVWMikge1xuICAgIC8vIGVuYWJsZSBEeW5hbW9EQiBzdHJlYW1zIHdpdGggYSBoYWNrXG4gICAgKHRhYmxlLm5vZGUuZGVmYXVsdENoaWxkIGFzIGR5bmFtb0RiLkNmblRhYmxlKS5zdHJlYW1TcGVjaWZpY2F0aW9uID0ge1xuICAgICAgc3RyZWFtVmlld1R5cGU6IGR5bmFtb0RiLlN0cmVhbVZpZXdUeXBlLk5FV19BTkRfT0xEX0lNQUdFUyxcbiAgICB9O1xuICAgICh0YWJsZSBhcyBhbnkpLnRhYmxlU3RyZWFtQXJuID0gKFxuICAgICAgdGFibGUubm9kZS5kZWZhdWx0Q2hpbGQgYXMgZHluYW1vRGIuQ2ZuVGFibGVcbiAgICApLmF0dHJTdHJlYW1Bcm47XG5cbiAgICB0aGlzLmxhbWJkYVN1YnNjcmlwdGlvbk1haW4uZnVuY3Rpb24uYWRkRXZlbnRTb3VyY2UoXG4gICAgICBuZXcgZHluYW1vRGJTdHJlYW0uRHluYW1vRXZlbnRTb3VyY2UodGFibGUsIHtcbiAgICAgICAgc3RhcnRpbmdQb3NpdGlvbjogbGFtYmRhLlN0YXJ0aW5nUG9zaXRpb24uTEFURVNULFxuICAgICAgICBiYXRjaFNpemU6IDEsXG4gICAgICAgIHJldHJ5QXR0ZW1wdHM6IDAsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRDb25zdHJ1Y3ROYW1lKHRhYmxlKTtcblxuICAgIGNvbnN0IHNlcnZpY2VLZXkgPSBgRHluYW1vREIjJHtuYW1lfWA7XG4gICAgdGhpcy5sYW1iZGFTdWJzY3JpcHRpb25NYWluLm1hcHBpbmdbdGFibGUudGFibGVBcm5dID0gc2VydmljZUtleTtcbiAgICB0aGlzLnNlcnZpY2VLZXlzLnB1c2goc2VydmljZUtleSk7XG4gIH1cblxuICBwcml2YXRlIGludGVybmFsU3B5RXZlbnRCdXNSdWxlKHJ1bGU6IGV2ZW50cy5SdWxlKSB7XG4gICAgY29uc3QgeyBldmVudEJ1c05hbWUgfSA9IHJ1bGUubm9kZS5kZWZhdWx0Q2hpbGQgYXMgZXZlbnRzLkNmblJ1bGU7XG4gICAgbGV0IGJyaWRnZU5hbWUgPSAnRGVmYXVsdCc7XG4gICAgaWYgKCEhZXZlbnRCdXNOYW1lKSB7XG4gICAgICBjb25zdCBldmVudEJyaWRnZSA9IHRoaXMuZ2V0RXZlbnRCcmlkZ2UoZXZlbnRCdXNOYW1lKTtcblxuICAgICAgaWYgKCFldmVudEJyaWRnZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZmluZCBFdmVudEJyaWRnZSB3aXRoIG5hbWUgXCIke2V2ZW50QnVzTmFtZX1cImApO1xuICAgICAgfVxuICAgICAgYnJpZGdlTmFtZSA9IHRoaXMuZ2V0Q29uc3RydWN0TmFtZShldmVudEJyaWRnZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZnVuY3Rpb25TdWJzY3JpcHRpb24gPSB0aGlzLnByb3ZpZGVGdW5jdGlvbkZvclN1YnNjcmlwdGlvbihcbiAgICAgIChzKSA9PiAhcy51c2VkRm9yRXZlbnRCcmlkZ2VcbiAgICApO1xuICAgIGZ1bmN0aW9uU3Vic2NyaXB0aW9uLnVzZWRGb3JFdmVudEJyaWRnZSA9IHRydWU7XG5cbiAgICBydWxlLmFkZFRhcmdldChuZXcgdGFyZ2V0cy5MYW1iZGFGdW5jdGlvbihmdW5jdGlvblN1YnNjcmlwdGlvbi5mdW5jdGlvbikpO1xuXG4gICAgY29uc3QgcnVsZU5hbWUgPSB0aGlzLmdldENvbnN0cnVjdE5hbWUocnVsZSk7XG4gICAgY29uc3Qgc2VydmljZUtleSA9IGBFdmVudEJyaWRnZVJ1bGUjJHticmlkZ2VOYW1lfSMke3J1bGVOYW1lfWA7XG4gICAgZnVuY3Rpb25TdWJzY3JpcHRpb24ubWFwcGluZy5ldmVudEJyaWRnZSA9IHNlcnZpY2VLZXk7XG4gICAgdGhpcy5zZXJ2aWNlS2V5cy5wdXNoKHNlcnZpY2VLZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnRlcm5hbFNweUV2ZW50QnVzKGV2ZW50QnVzOiBldmVudHMuRXZlbnRCdXMpIHtcbiAgICBjb25zdCBmdW5jdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMucHJvdmlkZUZ1bmN0aW9uRm9yU3Vic2NyaXB0aW9uKFxuICAgICAgKHMpID0+ICFzLnVzZWRGb3JFdmVudEJyaWRnZVxuICAgICk7XG4gICAgZnVuY3Rpb25TdWJzY3JpcHRpb24udXNlZEZvckV2ZW50QnJpZGdlID0gdHJ1ZTtcblxuICAgIGNvbnN0IGJyaWRnZU5hbWUgPSB0aGlzLmdldENvbnN0cnVjdE5hbWUoZXZlbnRCdXMpO1xuICAgIGNvbnN0IHJ1bGUgPSBuZXcgZXZlbnRzLlJ1bGUodGhpcywgYFJ1bGVBbGwke2JyaWRnZU5hbWV9YCwge1xuICAgICAgZXZlbnRCdXMsXG4gICAgICBldmVudFBhdHRlcm46IHsgdmVyc2lvbjogWycwJ10gfSxcbiAgICAgIHRhcmdldHM6IFtuZXcgdGFyZ2V0cy5MYW1iZGFGdW5jdGlvbihmdW5jdGlvblN1YnNjcmlwdGlvbi5mdW5jdGlvbildLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jcmVhdGVkUmVzb3VyY2VzQnlTU3B5LnB1c2gocnVsZSk7XG4gICAgY29uc3Qgc2VydmljZUtleSA9IGBFdmVudEJyaWRnZSMke2JyaWRnZU5hbWV9YDtcbiAgICBmdW5jdGlvblN1YnNjcmlwdGlvbi5tYXBwaW5nLmV2ZW50QnJpZGdlID0gc2VydmljZUtleTtcbiAgICB0aGlzLnNlcnZpY2VLZXlzLnB1c2goc2VydmljZUtleSk7XG4gIH1cblxuICBwcml2YXRlIGludGVybmFsU3B5U25zVG9waWModG9waWM6IHNucy5Ub3BpYykge1xuICAgIGNvbnN0IGZ1bmN0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5wcm92aWRlRnVuY3Rpb25Gb3JTdWJzY3JpcHRpb24oXG4gICAgICAocykgPT4gIXMuc3Vic3JpYmVkVG9waWNzLmluY2x1ZGVzKHRvcGljKVxuICAgICk7XG5cbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0b3BpYy5hZGRTdWJzY3JpcHRpb24oXG4gICAgICBuZXcgc25zU3Vicy5MYW1iZGFTdWJzY3JpcHRpb24oZnVuY3Rpb25TdWJzY3JpcHRpb24uZnVuY3Rpb24pXG4gICAgKTtcbiAgICB0aGlzLmNyZWF0ZWRSZXNvdXJjZXNCeVNTcHkucHVzaChzdWJzY3JpcHRpb24pO1xuICAgIGNvbnN0IHRvcGljTmFtZSA9IHRoaXMuZ2V0Q29uc3RydWN0TmFtZSh0b3BpYyk7XG4gICAgY29uc3Qgc2VydmljZUtleSA9IGBTbnNUb3BpYyMke3RvcGljTmFtZX1gO1xuICAgIGZ1bmN0aW9uU3Vic2NyaXB0aW9uLm1hcHBpbmdbdG9waWMudG9waWNBcm5dID0gc2VydmljZUtleTtcbiAgICB0aGlzLnNlcnZpY2VLZXlzLnB1c2goc2VydmljZUtleSk7XG4gICAgZnVuY3Rpb25TdWJzY3JpcHRpb24uc3Vic3JpYmVkVG9waWNzLnB1c2godG9waWMpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnRlcm5hbFNweVNuc1N1YnNjcmlwdGlvbihzdWJzY3JpcHRpb246IHNucy5TdWJzY3JpcHRpb24pIHtcbiAgICBpZiAoIXN1YnNjcmlwdGlvbi5ub2RlLnNjb3BlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdG9waWMgPSB0aGlzLmdldFRvcGljKFxuICAgICAgKHN1YnNjcmlwdGlvbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBzbnMuQ2ZuU3Vic2NyaXB0aW9uKS50b3BpY0FyblxuICAgICk7XG5cbiAgICBpZiAoIXRvcGljKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBUb3BpYycpO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bmN0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5wcm92aWRlRnVuY3Rpb25Gb3JTdWJzY3JpcHRpb24oXG4gICAgICAocykgPT4gIXMuc3Vic3JpYmVkVG9waWNzLmluY2x1ZGVzKHRvcGljKVxuICAgICk7XG5cbiAgICBjb25zdCB7IGZpbHRlclBvbGljeSB9ID0gc3Vic2NyaXB0aW9uLm5vZGVcbiAgICAgIC5kZWZhdWx0Q2hpbGQgYXMgc25zLkNmblN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbkNsb25lID0gdG9waWMuYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgbmV3IHNuc1N1YnMuTGFtYmRhU3Vic2NyaXB0aW9uKGZ1bmN0aW9uU3Vic2NyaXB0aW9uLmZ1bmN0aW9uKVxuICAgICk7XG4gICAgKHN1YnNjcmlwdGlvbkNsb25lLm5vZGUuZGVmYXVsdENoaWxkIGFzIHNucy5DZm5TdWJzY3JpcHRpb24pLmZpbHRlclBvbGljeSA9XG4gICAgICBmaWx0ZXJQb2xpY3k7XG5cbiAgICB0aGlzLmNyZWF0ZWRSZXNvdXJjZXNCeVNTcHkucHVzaChzdWJzY3JpcHRpb25DbG9uZSk7XG5cbiAgICBjb25zdCB0b3BpY05hbWUgPSB0aGlzLmdldENvbnN0cnVjdE5hbWUodG9waWMpO1xuICAgIGNvbnN0IHRhcmdldE5hbWUgPSB0aGlzLmdldENvbnN0cnVjdE5hbWUoc3Vic2NyaXB0aW9uLm5vZGUuc2NvcGUpO1xuXG4gICAgZnVuY3Rpb25TdWJzY3JpcHRpb24uc3Vic3JpYmVkVG9waWNzLnB1c2godG9waWMpO1xuICAgIGNvbnN0IHNlcnZpY2VLZXkgPSBgU25zU3Vic2NyaXB0aW9uIyR7dG9waWNOYW1lfSMke3RhcmdldE5hbWV9YDtcbiAgICBmdW5jdGlvblN1YnNjcmlwdGlvbi5tYXBwaW5nW3RvcGljLnRvcGljQXJuXSA9IHNlcnZpY2VLZXk7XG4gICAgdGhpcy5zZXJ2aWNlS2V5cy5wdXNoKHNlcnZpY2VLZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm92aWRlRnVuY3Rpb25Gb3JTdWJzY3JpcHRpb24oXG4gICAgZmlsdGVyRnVuY3Rpb24/OiAoc3Vic2NyaXB0aW9uOiBMYW1iZGFTdWJzY3JpcHRpb24pID0+IGJvb2xlYW5cbiAgKSB7XG4gICAgbGV0IGZ1bmN0aW9uU3Vic2NyaXB0aW9uOiBMYW1iZGFTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZmlsdGVyRnVuY3Rpb24pIHtcbiAgICAgIGZ1bmN0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5sYW1iZGFTdWJzY3JpcHRpb25Qb29sLmZpbmQoZmlsdGVyRnVuY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sYW1iZGFTdWJzY3JpcHRpb25Qb29sLmxlbmd0aCA+IDApIHtcbiAgICAgIGZ1bmN0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5sYW1iZGFTdWJzY3JpcHRpb25Qb29sWzBdO1xuICAgIH1cblxuICAgIGlmICghZnVuY3Rpb25TdWJzY3JpcHRpb24pIHtcbiAgICAgIGZ1bmN0aW9uU3Vic2NyaXB0aW9uID0ge1xuICAgICAgICBzdWJzcmliZWRUb3BpY3M6IFtdLFxuICAgICAgICB1c2VkRm9yRXZlbnRCcmlkZ2U6IGZhbHNlLFxuICAgICAgICBtYXBwaW5nOiB7fSxcbiAgICAgICAgZnVuY3Rpb246IHRoaXMuY3JlYXRlRnVuY3Rpb25Gb3JTdWJzY3JpcHRpb24oXG4gICAgICAgICAgdGhpcy5sYW1iZGFTdWJzY3JpcHRpb25Qb29sLmxlbmd0aFxuICAgICAgICApLFxuICAgICAgfTtcbiAgICAgIHRoaXMubGFtYmRhU3Vic2NyaXB0aW9uUG9vbC5wdXNoKGZ1bmN0aW9uU3Vic2NyaXB0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uU3Vic2NyaXB0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEZvcklvVChmdW5jOiBsYW1iZGEuRnVuY3Rpb24pIHtcbiAgICBmdW5jLmFkZEVudmlyb25tZW50KFxuICAgICAgZW52VmFyaWFibGVOYW1lcy5TU1BZX1JPT1RfU1RBQ0ssXG4gICAgICB0aGlzLmNsZWFuTmFtZSh0aGlzLmZpbmRSb290U3RhY2soU3RhY2sub2YodGhpcykpLm5vZGUuaWQpXG4gICAgKTtcbiAgICBmdW5jLmFkZEVudmlyb25tZW50KGVudlZhcmlhYmxlTmFtZXMuU1NQWV9JT1RfRU5EUE9JTlQsIHRoaXMuaW90RW5kcG9pbnQpO1xuXG4gICAgZnVuYy5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgYXdzX2lhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ2lvdDoqJ10sXG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnRlcm5hbFNweUxhbWJkYShmdW5jOiBsYW1iZGEuRnVuY3Rpb24pIHtcbiAgICBjb25zdCB7IGxheWVyLCBzcHlXcmFwcGVyUGF0aCB9ID0gdGhpcy5nZXRFeHRlbnNpb25Gb3JSdW50aW1lKFxuICAgICAgZnVuYy5ydW50aW1lLFxuICAgICAgZnVuYy5hcmNoaXRlY3R1cmUgfHwgQXJjaGl0ZWN0dXJlLlg4Nl82NFxuICAgICkhO1xuICAgIGlmICghbGF5ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZnVuYy5hZGRMYXllcnMobGF5ZXIpO1xuXG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gdGhpcy5nZXRDb25zdHJ1Y3ROYW1lKGZ1bmMpO1xuXG4gICAgZnVuYy5hZGRFbnZpcm9ubWVudChlbnZWYXJpYWJsZU5hbWVzLlNTUFlfRlVOQ1RJT05fTkFNRSwgZnVuY3Rpb25OYW1lKTtcbiAgICBmdW5jLmFkZEVudmlyb25tZW50KCdBV1NfTEFNQkRBX0VYRUNfV1JBUFBFUicsIHNweVdyYXBwZXJQYXRoKTtcblxuICAgIGlmICh0aGlzLnByb3BzPy5kZWJ1Z01vZGUpIHtcbiAgICAgIGZ1bmMuYWRkRW52aXJvbm1lbnQoZW52VmFyaWFibGVOYW1lcy5TU1BZX0RFQlVHLCAndHJ1ZScpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dXBGb3JJb1QoZnVuYyk7XG5cbiAgICB0aGlzLnNlcnZpY2VLZXlzLnB1c2goYEZ1bmN0aW9uIyR7ZnVuY3Rpb25OYW1lfSNSZXF1ZXN0YCk7XG4gICAgdGhpcy5zZXJ2aWNlS2V5cy5wdXNoKGBGdW5jdGlvbiMke2Z1bmN0aW9uTmFtZX0jRXJyb3JgKTtcbiAgICB0aGlzLnNlcnZpY2VLZXlzLnB1c2goYEZ1bmN0aW9uIyR7ZnVuY3Rpb25OYW1lfSNDb25zb2xlYCk7XG4gICAgdGhpcy5zZXJ2aWNlS2V5cy5wdXNoKGBGdW5jdGlvbiMke2Z1bmN0aW9uTmFtZX0jUmVzcG9uc2VgKTtcblxuICAgIHRoaXMuYWRkTWFwcGluZ1RvRnVuY3Rpb24oZnVuYyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29uc3RydWN0TmFtZShjb25zdHJ1Y3Q6IElDb25zdHJ1Y3QpIHtcbiAgICBsZXQgY29uc3RydWN0TmFtZSA9IGNvbnN0cnVjdC5ub2RlLnBhdGg7XG4gICAgY29uc3QgeyBub2RlIH0gPSBTdGFjay5vZih0aGlzKTtcblxuICAgIGlmIChjb25zdHJ1Y3ROYW1lLnN0YXJ0c1dpdGgobm9kZS5pZCkpIHtcbiAgICAgIGNvbnN0cnVjdE5hbWUgPSBjb25zdHJ1Y3ROYW1lLnN1YnN0cmluZyhub2RlLmlkLmxlbmd0aCArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNsZWFuTmFtZShjb25zdHJ1Y3ROYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5OYW1lKG5hbWU6IHN0cmluZykge1xuICAgIC8vc25ha2UgY2FzZSB0byBjYW1lbCBjYXNlIGluY2x1ZGluZyBkYXNoIGFuZCBmaXJzdCBsZXR0ZXIgdG8gdXBwZXIgY2FzZVxuICAgIHJldHVybiBuYW1lXG4gICAgICAucmVwbGFjZSgvWy1fXSsvZywgJyAnKVxuICAgICAgLnJlcGxhY2UoL1teXFx3XFxzXS9nLCAnJylcbiAgICAgIC5yZXBsYWNlKC9cXHMoLikvZywgKCQxKSA9PiAkMS50b1VwcGVyQ2FzZSgpKVxuICAgICAgLnJlcGxhY2UoL1xccy9nLCAnJylcbiAgICAgIC5yZXBsYWNlKC9eKC4pLywgKCQxKSA9PiAkMS50b1VwcGVyQ2FzZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VG9waWModG9waWNBcm46IHN0cmluZyk6IHNucy5Ub3BpYyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdG9waWMgPSB0aGlzLmZpbmRFbGVtZW50PHNucy5Ub3BpYz4oXG4gICAgICAobm9kZTogSUNvbnN0cnVjdCkgPT5cbiAgICAgICAgbm9kZSBpbnN0YW5jZW9mIHNucy5Ub3BpYyAmJiAobm9kZSBhcyBzbnMuVG9waWMpLnRvcGljQXJuID09PSB0b3BpY0FyblxuICAgICk7XG5cbiAgICByZXR1cm4gdG9waWM7XG4gIH1cblxuICBwcml2YXRlIGdldEV2ZW50QnJpZGdlKGV2ZW50QnVzTmFtZTogc3RyaW5nKTogZXZlbnRzLklFdmVudEJ1cyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZXZlbnRCcmlkZ2UgPSB0aGlzLmZpbmRFbGVtZW50PGV2ZW50cy5JRXZlbnRCdXM+KFxuICAgICAgKG5vZGU6IElDb25zdHJ1Y3QpID0+XG4gICAgICAgIChub2RlIGluc3RhbmNlb2YgZXZlbnRzLkV2ZW50QnVzIHx8XG4gICAgICAgICAgbm9kZS5jb25zdHJ1Y3Rvci5uYW1lID09PSAnSW1wb3J0ZWRFdmVudEJ1cycpICYmXG4gICAgICAgIChub2RlIGFzIGV2ZW50cy5JRXZlbnRCdXMpLmV2ZW50QnVzTmFtZSA9PT0gZXZlbnRCdXNOYW1lXG4gICAgKTtcblxuICAgIHJldHVybiBldmVudEJyaWRnZTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFJvb3RTdGFjayhzdGFjazogU3RhY2spOiBTdGFjayB7XG4gICAgaWYgKHN0YWNrLm5lc3RlZCkge1xuICAgICAgY29uc3QgcGFyZW50U3RhY2sgPSAoc3RhY2sgYXMgTmVzdGVkU3RhY2spLm5lc3RlZFN0YWNrUGFyZW50O1xuICAgICAgaWYgKHBhcmVudFN0YWNrKSByZXR1cm4gdGhpcy5maW5kUm9vdFN0YWNrKHBhcmVudFN0YWNrKTtcbiAgICAgIHJldHVybiBzdGFjaztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0YWNrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZEVsZW1lbnQ8VCBleHRlbmRzIElDb25zdHJ1Y3QgPSBJQ29uc3RydWN0PihcbiAgICBmaWx0ZXJGdW5jOiAobm9kZTogSUNvbnN0cnVjdCkgPT4gYm9vbGVhbixcbiAgICBwYXJlbnQ/OiBJQ29uc3RydWN0XG4gICk6IFQgfCB1bmRlZmluZWQge1xuICAgIGlmICghcGFyZW50KSB7XG4gICAgICBwYXJlbnQgPSB0aGlzLmZpbmRSb290U3RhY2soU3RhY2sub2YodGhpcykpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBwYXJlbnQubm9kZS5jaGlsZHJlbikge1xuICAgICAgaWYgKGZpbHRlckZ1bmMobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUgYXMgVDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVsZW1lbnRGb3VuZEluQ2hpbGQgPSB0aGlzLmZpbmRFbGVtZW50PFQ+KGZpbHRlckZ1bmMsIG5vZGUpO1xuICAgICAgaWYgKGVsZW1lbnRGb3VuZEluQ2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRGb3VuZEluQ2hpbGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYWRkTWFwcGluZ1RvRnVuY3Rpb24oXG4gICAgZnVuYzogbGFtYmRhLkZ1bmN0aW9uLFxuICAgIGtleVZhbHVlPzogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9XG4gICkge1xuICAgIGZvciAoY29uc3QgZnMgb2YgdGhpcy5sYW1iZGFzU3BpZWQpIHtcbiAgICAgIGlmIChmcy5mdW5jdGlvbiA9PT0gZnVuYykge1xuICAgICAgICBpZiAoa2V5VmFsdWUpIHtcbiAgICAgICAgICBmcy5tYXBwaW5nW2tleVZhbHVlLmtleV0gPSBrZXlWYWx1ZS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZnM6IExhbWJkYVNwaWVkID0ge1xuICAgICAgZnVuY3Rpb246IGZ1bmMsXG4gICAgICBtYXBwaW5nOiB7fSxcbiAgICB9O1xuXG4gICAgaWYgKGtleVZhbHVlKSB7XG4gICAgICBmcy5tYXBwaW5nW2tleVZhbHVlLmtleV0gPSBrZXlWYWx1ZS52YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmxhbWJkYXNTcGllZC5wdXNoKGZzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXNzZXRMb2NhdGlvbihsb2NhdGlvbjogc3RyaW5nKSB7XG4gICAgY29uc3QgbG9jID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xpYi8nICsgbG9jYXRpb24pO1xuXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMobG9jKSkge1xuICAgICAgcmV0dXJuIGxvYztcbiAgICB9XG5cbiAgICBjb25zdCBsb2MyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uL2xpYi8nICsgbG9jYXRpb24pO1xuXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMobG9jMikpIHtcbiAgICAgIHJldHVybiBsb2MyO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgTG9jYXRpb24gJHtsb2N9IGFuZCAke2xvYzJ9IGRvZXMgbm90IGV4aXN0cy5gKTtcbiAgfVxufVxuXG50eXBlIExhbWJkYVN1YnNjcmlwdGlvbiA9IHtcbiAgc3Vic3JpYmVkVG9waWNzOiBzbnMuVG9waWNbXTtcbiAgdXNlZEZvckV2ZW50QnJpZGdlOiBib29sZWFuO1xuICBmdW5jdGlvbjogbGFtYmRhTm9kZS5Ob2RlanNGdW5jdGlvbjtcbiAgbWFwcGluZzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG5cbnR5cGUgTGFtYmRhU3BpZWQgPSB7XG4gIGZ1bmN0aW9uOiBsYW1iZGEuRnVuY3Rpb247XG4gIG1hcHBpbmc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {runAppleScript} from 'run-applescript';
|
|
2
2
|
|
|
3
3
|
export default async function bundleName(bundleId) {
|
|
4
|
-
return
|
|
4
|
+
return runAppleScript(`tell application "Finder" to set app_path to application file id "${bundleId}" as string\ntell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`);
|
|
5
5
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bundle-name",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.1.0",
|
|
4
4
|
"description": "Get bundle name from a bundle identifier (macOS): `com.apple.Safari` → `Safari`",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "sindresorhus/bundle-name",
|
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
},
|
|
13
13
|
"type": "module",
|
|
14
14
|
"exports": "./index.js",
|
|
15
|
+
"sideEffects": false,
|
|
15
16
|
"engines": {
|
|
16
|
-
"node": ">=
|
|
17
|
+
"node": ">=18"
|
|
17
18
|
},
|
|
18
19
|
"scripts": {
|
|
19
20
|
"test": "xo && ava"
|
|
@@ -35,10 +36,10 @@
|
|
|
35
36
|
"uti"
|
|
36
37
|
],
|
|
37
38
|
"dependencies": {
|
|
38
|
-
"run-applescript": "^
|
|
39
|
+
"run-applescript": "^7.0.0"
|
|
39
40
|
},
|
|
40
41
|
"devDependencies": {
|
|
41
|
-
"ava": "^
|
|
42
|
-
"xo": "^0.
|
|
42
|
+
"ava": "^6.0.1",
|
|
43
|
+
"xo": "^0.56.0"
|
|
43
44
|
}
|
|
44
45
|
}
|
|
@@ -5,10 +5,10 @@ export type Browser = {
|
|
|
5
5
|
name: string;
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
|
|
9
|
-
- On macOS, it's the
|
|
10
|
-
- On Linux, it's the desktop file
|
|
11
|
-
- On Windows, it's an invented
|
|
8
|
+
The unique identifier for the browser on the current platform:
|
|
9
|
+
- On macOS, it's the app's bundle identifier.
|
|
10
|
+
- On Linux, it's the desktop file identifier (from `xdg-mime`).
|
|
11
|
+
- On Windows, it's an invented identifier, because apps on Windows does not have identifiers.
|
|
12
12
|
*/
|
|
13
13
|
id: string;
|
|
14
14
|
};
|
|
@@ -18,6 +18,7 @@ Get the default browser for the current platform.
|
|
|
18
18
|
|
|
19
19
|
@returns A promise for the browser.
|
|
20
20
|
|
|
21
|
+
@example
|
|
21
22
|
```
|
|
22
23
|
import defaultBrowser from 'default-browser';
|
|
23
24
|
|
|
@@ -1,27 +1,29 @@
|
|
|
1
|
+
import {promisify} from 'node:util';
|
|
1
2
|
import process from 'node:process';
|
|
3
|
+
import {execFile} from 'node:child_process';
|
|
2
4
|
import defaultBrowserId from 'default-browser-id';
|
|
3
5
|
import bundleName from 'bundle-name';
|
|
4
|
-
import titleize from 'titleize';
|
|
5
|
-
import {execa} from 'execa';
|
|
6
6
|
import windows from './windows.js';
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
if (process.platform === 'linux') {
|
|
10
|
-
const {stdout} = await execa('xdg-mime', ['query', 'default', 'x-scheme-handler/http']);
|
|
11
|
-
const name = titleize(stdout.trim().replace(/.desktop$/, '').replace('-', ' '));
|
|
8
|
+
const execFileAsync = promisify(execFile);
|
|
12
9
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
id: stdout,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
10
|
+
// Inlined: https://github.com/sindresorhus/titleize/blob/main/index.js
|
|
11
|
+
const titleize = string => string.toLowerCase().replaceAll(/(?:^|\s|-)\S/g, x => x.toUpperCase());
|
|
18
12
|
|
|
13
|
+
export default async function defaultBrowser() {
|
|
19
14
|
if (process.platform === 'darwin') {
|
|
20
15
|
const id = await defaultBrowserId();
|
|
21
16
|
const name = await bundleName(id);
|
|
22
17
|
return {name, id};
|
|
23
18
|
}
|
|
24
19
|
|
|
20
|
+
if (process.platform === 'linux') {
|
|
21
|
+
const {stdout} = await execFileAsync('xdg-mime', ['query', 'default', 'x-scheme-handler/http']);
|
|
22
|
+
const id = stdout.trim();
|
|
23
|
+
const name = titleize(id.replace(/.desktop$/, '').replace('-', ' '));
|
|
24
|
+
return {name, id};
|
|
25
|
+
}
|
|
26
|
+
|
|
25
27
|
if (process.platform === 'win32') {
|
|
26
28
|
return windows();
|
|
27
29
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "default-browser",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.2.1",
|
|
4
4
|
"description": "Get the default browser",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "sindresorhus/default-browser",
|
|
@@ -11,17 +11,21 @@
|
|
|
11
11
|
"url": "https://sindresorhus.com"
|
|
12
12
|
},
|
|
13
13
|
"type": "module",
|
|
14
|
-
"exports":
|
|
14
|
+
"exports": {
|
|
15
|
+
"types": "./index.d.ts",
|
|
16
|
+
"default": "./index.js"
|
|
17
|
+
},
|
|
18
|
+
"sideEffects": false,
|
|
15
19
|
"engines": {
|
|
16
|
-
"node": ">=
|
|
20
|
+
"node": ">=18"
|
|
17
21
|
},
|
|
18
22
|
"scripts": {
|
|
19
23
|
"test": "xo && ava && tsd"
|
|
20
24
|
},
|
|
21
25
|
"files": [
|
|
22
26
|
"index.js",
|
|
23
|
-
"
|
|
24
|
-
"
|
|
27
|
+
"index.d.ts",
|
|
28
|
+
"windows.js"
|
|
25
29
|
],
|
|
26
30
|
"keywords": [
|
|
27
31
|
"macos",
|
|
@@ -39,14 +43,12 @@
|
|
|
39
43
|
"applescript"
|
|
40
44
|
],
|
|
41
45
|
"dependencies": {
|
|
42
|
-
"bundle-name": "^
|
|
43
|
-
"default-browser-id": "^
|
|
44
|
-
"execa": "^7.1.1",
|
|
45
|
-
"titleize": "^3.0.0"
|
|
46
|
+
"bundle-name": "^4.1.0",
|
|
47
|
+
"default-browser-id": "^5.0.0"
|
|
46
48
|
},
|
|
47
49
|
"devDependencies": {
|
|
48
|
-
"ava": "^
|
|
49
|
-
"tsd": "^0.
|
|
50
|
-
"xo": "^0.
|
|
50
|
+
"ava": "^6.0.1",
|
|
51
|
+
"tsd": "^0.30.0",
|
|
52
|
+
"xo": "^0.56.0"
|
|
51
53
|
}
|
|
52
54
|
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {promisify} from 'node:util';
|
|
2
|
+
import {execFile} from 'node:child_process';
|
|
3
|
+
|
|
4
|
+
const execFileAsync = promisify(execFile);
|
|
2
5
|
|
|
3
6
|
// Windows doesn't have browser IDs in the same way macOS/Linux does so we give fake
|
|
4
7
|
// ones that look real and match the macOS/Linux versions for cross-platform apps.
|
|
@@ -9,21 +12,24 @@ const windowsBrowserProgIds = {
|
|
|
9
12
|
'IE.HTTP': {name: 'Internet Explorer', id: 'com.microsoft.ie'},
|
|
10
13
|
FirefoxURL: {name: 'Firefox', id: 'org.mozilla.firefox'},
|
|
11
14
|
ChromeHTML: {name: 'Chrome', id: 'com.google.chrome'},
|
|
15
|
+
BraveHTML: {name: 'Brave', id: 'com.brave.Browser'},
|
|
16
|
+
BraveBHTML: {name: 'Brave Beta', id: 'com.brave.Browser.beta'},
|
|
17
|
+
BraveSSHTM: {name: 'Brave Nightly', id: 'com.brave.Browser.nightly'},
|
|
12
18
|
};
|
|
13
19
|
|
|
14
20
|
export class UnknownBrowserError extends Error {}
|
|
15
21
|
|
|
16
|
-
export default async function defaultBrowser(
|
|
17
|
-
const
|
|
22
|
+
export default async function defaultBrowser(_execFileAsync = execFileAsync) {
|
|
23
|
+
const {stdout} = await _execFileAsync('reg', [
|
|
18
24
|
'QUERY',
|
|
19
25
|
' HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice',
|
|
20
26
|
'/v',
|
|
21
27
|
'ProgId',
|
|
22
28
|
]);
|
|
23
29
|
|
|
24
|
-
const match = /ProgId\s*REG_SZ\s*(?<id>\S+)/.exec(
|
|
30
|
+
const match = /ProgId\s*REG_SZ\s*(?<id>\S+)/.exec(stdout);
|
|
25
31
|
if (!match) {
|
|
26
|
-
throw new UnknownBrowserError(`Cannot find Windows browser in stdout: ${JSON.stringify(
|
|
32
|
+
throw new UnknownBrowserError(`Cannot find Windows browser in stdout: ${JSON.stringify(stdout)}`);
|
|
27
33
|
}
|
|
28
34
|
|
|
29
35
|
const {id} = match.groups;
|
|
@@ -1,42 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import untildify from 'untildify';
|
|
1
|
+
import {promisify} from 'node:util';
|
|
2
|
+
import process from 'node:process';
|
|
3
|
+
import {execFile} from 'node:child_process';
|
|
5
4
|
|
|
6
|
-
const
|
|
7
|
-
const filePath = untildify(macOsVersion >= 14 ? '~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist' : '~/Library/Preferences/com.apple.LaunchServices.plist');
|
|
5
|
+
const execFileAsync = promisify(execFile);
|
|
8
6
|
|
|
9
7
|
export default async function defaultBrowserId() {
|
|
10
8
|
if (process.platform !== 'darwin') {
|
|
11
9
|
throw new Error('macOS only');
|
|
12
10
|
}
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
const {stdout} = await execFileAsync('defaults', ['read', 'com.apple.LaunchServices/com.apple.launchservices.secure', 'LSHandlers']);
|
|
15
13
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
buffer = await fs.readFile(filePath);
|
|
19
|
-
} catch (error) {
|
|
20
|
-
if (error.code === 'ENOENT') {
|
|
21
|
-
return bundleId;
|
|
22
|
-
}
|
|
14
|
+
// `(?!-)` is to prevent matching `LSHandlerRoleAll = "-";`.
|
|
15
|
+
const match = /LSHandlerRoleAll = "(?!-)(?<id>[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec(stdout);
|
|
23
16
|
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const data = bplist.parseBuffer(buffer);
|
|
28
|
-
const handlers = data && data[0].LSHandlers;
|
|
29
|
-
|
|
30
|
-
if (!handlers || handlers.length === 0) {
|
|
31
|
-
return bundleId;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
for (const handler of handlers) {
|
|
35
|
-
if (handler.LSHandlerURLScheme === 'http' && handler.LSHandlerRoleAll) {
|
|
36
|
-
bundleId = handler.LSHandlerRoleAll;
|
|
37
|
-
break;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return bundleId;
|
|
17
|
+
return match?.groups.id ?? 'com.apple.Safari';
|
|
42
18
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "default-browser-id",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"description": "Get the bundle identifier of the default browser (macOS). Example: com.apple.Safari",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "sindresorhus/default-browser-id",
|
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
},
|
|
13
13
|
"type": "module",
|
|
14
14
|
"exports": "./index.js",
|
|
15
|
+
"sideEffects": false,
|
|
15
16
|
"engines": {
|
|
16
|
-
"node": ">=
|
|
17
|
+
"node": ">=18"
|
|
17
18
|
},
|
|
18
19
|
"scripts": {
|
|
19
20
|
"test": "xo && ava"
|
|
@@ -33,12 +34,8 @@
|
|
|
33
34
|
"identifier",
|
|
34
35
|
"uti"
|
|
35
36
|
],
|
|
36
|
-
"dependencies": {
|
|
37
|
-
"bplist-parser": "^0.2.0",
|
|
38
|
-
"untildify": "^4.0.0"
|
|
39
|
-
},
|
|
40
37
|
"devDependencies": {
|
|
41
|
-
"ava": "^
|
|
42
|
-
"xo": "^0.
|
|
38
|
+
"ava": "^6.0.1",
|
|
39
|
+
"xo": "^0.56.0"
|
|
43
40
|
}
|
|
44
41
|
}
|
|
@@ -3,8 +3,7 @@ import {Buffer} from 'node:buffer';
|
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import {fileURLToPath} from 'node:url';
|
|
5
5
|
import childProcess from 'node:child_process';
|
|
6
|
-
import fs from 'node:fs/promises';
|
|
7
|
-
import {constants as fsConstants} from 'node:fs'; // TODO: Move this to the above import when targeting Node.js 18.
|
|
6
|
+
import fs, {constants as fsConstants} from 'node:fs/promises';
|
|
8
7
|
import isWsl from 'is-wsl';
|
|
9
8
|
import defineLazyProperty from 'define-lazy-prop';
|
|
10
9
|
import defaultBrowser from 'default-browser';
|
|
@@ -170,7 +169,7 @@ const baseOpen = async options => {
|
|
|
170
169
|
|
|
171
170
|
command = isWsl
|
|
172
171
|
? `${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`
|
|
173
|
-
: `${process.env.SYSTEMROOT}\\System32\\WindowsPowerShell\\v1.0\\powershell`;
|
|
172
|
+
: `${process.env.SYSTEMROOT || process.env.windir || 'C:\\Windows'}\\System32\\WindowsPowerShell\\v1.0\\powershell`;
|
|
174
173
|
|
|
175
174
|
cliArguments.push(
|
|
176
175
|
'-NoProfile',
|
|
@@ -202,7 +201,7 @@ const baseOpen = async options => {
|
|
|
202
201
|
}
|
|
203
202
|
|
|
204
203
|
if (appArguments.length > 0) {
|
|
205
|
-
appArguments = appArguments.map(
|
|
204
|
+
appArguments = appArguments.map(argument => `"\`"${argument}\`""`);
|
|
206
205
|
encodedArguments.push('-ArgumentList', appArguments.join(','));
|
|
207
206
|
}
|
|
208
207
|
|
|
@@ -239,14 +238,15 @@ const baseOpen = async options => {
|
|
|
239
238
|
}
|
|
240
239
|
}
|
|
241
240
|
|
|
242
|
-
if (options.target) {
|
|
243
|
-
cliArguments.push(options.target);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
241
|
if (platform === 'darwin' && appArguments.length > 0) {
|
|
247
242
|
cliArguments.push('--args', ...appArguments);
|
|
248
243
|
}
|
|
249
244
|
|
|
245
|
+
// This has to come after `--args`.
|
|
246
|
+
if (options.target) {
|
|
247
|
+
cliArguments.push(options.target);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
250
|
const subprocess = childProcess.spawn(command, cliArguments, childProcessOptions);
|
|
251
251
|
|
|
252
252
|
if (options.wait) {
|
|
@@ -281,8 +281,8 @@ const open = (target, options) => {
|
|
|
281
281
|
};
|
|
282
282
|
|
|
283
283
|
export const openApp = (name, options) => {
|
|
284
|
-
if (typeof name !== 'string') {
|
|
285
|
-
throw new TypeError('Expected a `name`');
|
|
284
|
+
if (typeof name !== 'string' && !Array.isArray(name)) {
|
|
285
|
+
throw new TypeError('Expected a valid `name`');
|
|
286
286
|
}
|
|
287
287
|
|
|
288
288
|
const {arguments: appArguments = []} = options ?? {};
|
|
@@ -3,7 +3,7 @@ Check if the process is running inside [Windows Subsystem for Linux](https://msd
|
|
|
3
3
|
|
|
4
4
|
@example
|
|
5
5
|
```
|
|
6
|
-
import isWsl
|
|
6
|
+
import isWsl from 'is-wsl';
|
|
7
7
|
|
|
8
8
|
// When running inside Windows Subsystem for Linux
|
|
9
9
|
console.log(isWsl);
|
|
@@ -12,4 +12,4 @@ console.log(isWsl);
|
|
|
12
12
|
*/
|
|
13
13
|
declare const isWsl: boolean;
|
|
14
14
|
|
|
15
|
-
export
|
|
15
|
+
export default isWsl;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import process from 'node:process';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import isInsideContainer from 'is-inside-container';
|
|
5
|
+
|
|
6
|
+
const isWsl = () => {
|
|
7
|
+
if (process.platform !== 'linux') {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
if (os.release().toLowerCase().includes('microsoft')) {
|
|
12
|
+
if (isInsideContainer()) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
return fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft')
|
|
21
|
+
? !isInsideContainer() : false;
|
|
22
|
+
} catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export default process.env.__IS_WSL_TEST__ ? isWsl : isWsl();
|