@dbx-tools/core 0.9.19 → 0.9.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/._LICENSE +0 -0
  2. package/._README.md +0 -0
  3. package/._index.ts +0 -0
  4. package/._package.json +0 -0
  5. package/README.md +1 -2
  6. package/index.ts +1 -1
  7. package/lib/._index.d.ts +0 -0
  8. package/lib/._index.js +0 -0
  9. package/lib/._tsconfig.tsbuildinfo +0 -0
  10. package/lib/index.d.ts +1 -1
  11. package/lib/index.js +2 -2
  12. package/lib/src/._bin.d.ts +0 -0
  13. package/lib/src/._bin.js +0 -0
  14. package/lib/src/._brand-files.d.ts +0 -0
  15. package/lib/src/._brand-files.js +0 -0
  16. package/lib/src/._bundle.d.ts +0 -0
  17. package/lib/src/._bundle.js +0 -0
  18. package/lib/src/._config-utils.d.ts +0 -0
  19. package/lib/src/._config-utils.js +0 -0
  20. package/lib/src/._dependency-resolver.d.ts +0 -0
  21. package/lib/src/._dependency-resolver.js +0 -0
  22. package/lib/src/._exec.d.ts +0 -0
  23. package/lib/src/._exec.js +0 -0
  24. package/lib/src/._file-lock.d.ts +0 -0
  25. package/lib/src/._file-lock.js +0 -0
  26. package/lib/src/._file.d.ts +0 -0
  27. package/lib/src/._file.js +0 -0
  28. package/lib/src/._npm-resolver.d.ts +0 -0
  29. package/lib/src/._npm-resolver.js +0 -0
  30. package/lib/src/._process-lock.d.ts +0 -0
  31. package/lib/src/._process-lock.js +0 -0
  32. package/lib/src/._project-utils.d.ts +0 -0
  33. package/lib/src/._project-utils.js +0 -0
  34. package/lib/src/bin.d.ts +0 -5
  35. package/lib/src/bin.js +4 -7
  36. package/lib/src/npm-resolver.d.ts +44 -0
  37. package/lib/src/npm-resolver.js +367 -0
  38. package/package.json +3 -3
  39. package/src/._bin.ts +0 -0
  40. package/src/._brand-files.ts +0 -0
  41. package/src/._bundle.ts +0 -0
  42. package/src/._config-utils.ts +0 -0
  43. package/src/._dependency-resolver.ts +0 -0
  44. package/src/._exec.ts +0 -0
  45. package/src/._file-lock.ts +0 -0
  46. package/src/._file.ts +0 -0
  47. package/src/._process-lock.ts +0 -0
  48. package/src/._project-utils.ts +0 -0
  49. package/src/bin.ts +3 -13
package/._LICENSE ADDED
Binary file
package/._README.md ADDED
Binary file
package/._index.ts ADDED
Binary file
package/._package.json ADDED
Binary file
package/README.md CHANGED
@@ -55,8 +55,7 @@ be unpacked automatically; a single-file archive needs no selector, while a
55
55
  selector can choose a binary from a larger archive. The selected file is
56
56
  normalized to mode `0755` and must report an acceptable version before it is
57
57
  atomically moved into place; the final renamed path runs the same validation
58
- again before returning. `trustVersion` on a `BinSource` skips `--version` when
59
- the producer already identified the requested version.
58
+ again before returning.
60
59
 
61
60
  Every candidate runs with `--version` before it is accepted. Set
62
61
  `versionArgument` for a different argument and `minVersion` to require a partial
package/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/core";
6
- export const PACKAGE_VERSION = "0.9.19";
6
+ export const PACKAGE_VERSION = "0.9.21";
7
7
  export * as bin from "./src/bin.ts";
8
8
  export * as brandFiles from "./src/brand-files.ts";
9
9
  export * as bundle from "./src/bundle.ts";
Binary file
package/lib/._index.js ADDED
Binary file
Binary file
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/core";
2
- export declare const PACKAGE_VERSION = "0.9.19";
2
+ export declare const PACKAGE_VERSION = "0.9.21";
3
3
  export * as bin from "./src/bin.ts";
4
4
  export * as brandFiles from "./src/brand-files.ts";
5
5
  export * as bundle from "./src/bundle.ts";
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/core";
5
- export const PACKAGE_VERSION = "0.9.19";
5
+ export const PACKAGE_VERSION = "0.9.21";
6
6
  export * as bin from "./src/bin.js";
7
7
  export * as brandFiles from "./src/brand-files.js";
8
8
  export * as bundle from "./src/bundle.js";
@@ -16,4 +16,4 @@ export * as projectUtils from "./src/project-utils.js";
16
16
  export { BrandContextSchema, defaultBrandContext, parseBrandContext, brandContextJsonSchema, brandContextPrompt } from "./src/brand-files.js";
17
17
  export { MAX_TCP_PORT, ENV_ONLY, valueSchema, bundleResourceSchema, bundleEnvEntrySchema, bundleAppSchema, appEnvEntrySchema, appSchema } from "./src/config-utils.js";
18
18
  export { COMMAND_NOT_FOUND_EXIT_CODE } from "./src/exec.js";
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztBQUNwRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxrQkFBa0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssUUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5SSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3ZLLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvY29yZVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjE5XCI7XG5leHBvcnQgKiBhcyBiaW4gZnJvbSBcIi4vc3JjL2Jpbi50c1wiO1xuZXhwb3J0ICogYXMgYnJhbmRGaWxlcyBmcm9tIFwiLi9zcmMvYnJhbmQtZmlsZXMudHNcIjtcbmV4cG9ydCAqIGFzIGJ1bmRsZSBmcm9tIFwiLi9zcmMvYnVuZGxlLnRzXCI7XG5leHBvcnQgKiBhcyBjb25maWdVdGlscyBmcm9tIFwiLi9zcmMvY29uZmlnLXV0aWxzLnRzXCI7XG5leHBvcnQgKiBhcyBkZXBlbmRlbmN5UmVzb2x2ZXIgZnJvbSBcIi4vc3JjL2RlcGVuZGVuY3ktcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCAqIGFzIGV4ZWMgZnJvbSBcIi4vc3JjL2V4ZWMudHNcIjtcbmV4cG9ydCAqIGFzIGZpbGUgZnJvbSBcIi4vc3JjL2ZpbGUudHNcIjtcbmV4cG9ydCAqIGFzIGZpbGVMb2NrIGZyb20gXCIuL3NyYy9maWxlLWxvY2sudHNcIjtcbmV4cG9ydCAqIGFzIHByb2Nlc3NMb2NrIGZyb20gXCIuL3NyYy9wcm9jZXNzLWxvY2sudHNcIjtcbmV4cG9ydCAqIGFzIHByb2plY3RVdGlscyBmcm9tIFwiLi9zcmMvcHJvamVjdC11dGlscy50c1wiO1xuZXhwb3J0IHR5cGUgeyBCaW5Db250ZXh0LCBCaW5TZWxlY3Rpb25Db250ZXh0LCBCaW5TZWxlY3RvciwgQmluVmVyc2lvbk91dHB1dCwgQmluVmVyc2lvblBhcnNlciwgQmluT3B0aW9ucywgQmluVXJsUmVzb2x2ZUNvbnRleHQsIEJpblNvdXJjZSwgQmluVXJsIH0gZnJvbSBcIi4vc3JjL2Jpbi50c1wiO1xuZXhwb3J0IHsgQnJhbmRDb250ZXh0U2NoZW1hLCBkZWZhdWx0QnJhbmRDb250ZXh0LCBwYXJzZUJyYW5kQ29udGV4dCwgYnJhbmRDb250ZXh0SnNvblNjaGVtYSwgYnJhbmRDb250ZXh0UHJvbXB0IH0gZnJvbSBcIi4vc3JjL2JyYW5kLWZpbGVzLnRzXCI7XG5leHBvcnQgdHlwZSB7IEJyYW5kQ29udGV4dCwgQnJhbmRDb250ZXh0SW5wdXQgfSBmcm9tIFwiLi9zcmMvYnJhbmQtZmlsZXMudHNcIjtcbmV4cG9ydCB7IE1BWF9UQ1BfUE9SVCwgRU5WX09OTFksIHZhbHVlU2NoZW1hLCBidW5kbGVSZXNvdXJjZVNjaGVtYSwgYnVuZGxlRW52RW50cnlTY2hlbWEsIGJ1bmRsZUFwcFNjaGVtYSwgYXBwRW52RW50cnlTY2hlbWEsIGFwcFNjaGVtYSB9IGZyb20gXCIuL3NyYy9jb25maWctdXRpbHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ29uZmlnTWFwVmFsdWUsIENvbmZpZ0RhdGEsIENvbmZpZ1NvdXJjZSwgQ29uZmlnT3B0aW9ucywgQ29uZmlnRmlsZSB9IGZyb20gXCIuL3NyYy9jb25maWctdXRpbHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGVwZW5kZW5jeVJlc29sdmVyT3B0aW9ucywgRGVwZW5kZW5jeUluZm8sIFJlc29sdmVkTnBtVmVyc2lvbiwgTnBtU3BlY2lmaWVySW5wdXQsIFJlc29sdmVkTnBtRGVwZW5kZW5jaWVzLCBNaXNzaW5nRGVwZW5kZW5jeUluZm8gfSBmcm9tIFwiLi9zcmMvZGVwZW5kZW5jeS1yZXNvbHZlci50c1wiO1xuZXhwb3J0IHsgQ09NTUFORF9OT1RfRk9VTkRfRVhJVF9DT0RFIH0gZnJvbSBcIi4vc3JjL2V4ZWMudHNcIjtcbmV4cG9ydCB0eXBlIHsgRXhlY1N0ZGlvLCBMaW5lSGFuZGxlciwgU3RkaW9PcHRpb24sIEV4ZWNSZXN1bHQsIENoaWxkUHJvY2Vzc1Jlc3VsdCwgRXhlY09wdGlvbnMsIFN5bmNFeGVjU3RkaW8sIFN5bmNFeGVjT3B0aW9ucywgU3Bhd25BcmdzIH0gZnJvbSBcIi4vc3JjL2V4ZWMudHNcIjtcbmV4cG9ydCB0eXBlIHsgRmlsZUxvY2tCYWNrZW5kLCBGaWxlTG9ja0FjcXVpc2l0aW9uLCBGaWxlTG9ja09wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZmlsZS1sb2NrLnRzXCI7XG5leHBvcnQgdHlwZSB7IFByb2plY3RDb250ZXh0LCBOcG1SZWdpc3RyeU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvcHJvamVjdC11dGlscy50c1wiO1xuIl19
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztBQUNwRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxrQkFBa0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssUUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5SSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3ZLLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvY29yZVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjIxXCI7XG5leHBvcnQgKiBhcyBiaW4gZnJvbSBcIi4vc3JjL2Jpbi50c1wiO1xuZXhwb3J0ICogYXMgYnJhbmRGaWxlcyBmcm9tIFwiLi9zcmMvYnJhbmQtZmlsZXMudHNcIjtcbmV4cG9ydCAqIGFzIGJ1bmRsZSBmcm9tIFwiLi9zcmMvYnVuZGxlLnRzXCI7XG5leHBvcnQgKiBhcyBjb25maWdVdGlscyBmcm9tIFwiLi9zcmMvY29uZmlnLXV0aWxzLnRzXCI7XG5leHBvcnQgKiBhcyBkZXBlbmRlbmN5UmVzb2x2ZXIgZnJvbSBcIi4vc3JjL2RlcGVuZGVuY3ktcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCAqIGFzIGV4ZWMgZnJvbSBcIi4vc3JjL2V4ZWMudHNcIjtcbmV4cG9ydCAqIGFzIGZpbGUgZnJvbSBcIi4vc3JjL2ZpbGUudHNcIjtcbmV4cG9ydCAqIGFzIGZpbGVMb2NrIGZyb20gXCIuL3NyYy9maWxlLWxvY2sudHNcIjtcbmV4cG9ydCAqIGFzIHByb2Nlc3NMb2NrIGZyb20gXCIuL3NyYy9wcm9jZXNzLWxvY2sudHNcIjtcbmV4cG9ydCAqIGFzIHByb2plY3RVdGlscyBmcm9tIFwiLi9zcmMvcHJvamVjdC11dGlscy50c1wiO1xuZXhwb3J0IHR5cGUgeyBCaW5Db250ZXh0LCBCaW5TZWxlY3Rpb25Db250ZXh0LCBCaW5TZWxlY3RvciwgQmluVmVyc2lvbk91dHB1dCwgQmluVmVyc2lvblBhcnNlciwgQmluT3B0aW9ucywgQmluVXJsUmVzb2x2ZUNvbnRleHQsIEJpblNvdXJjZSwgQmluVXJsIH0gZnJvbSBcIi4vc3JjL2Jpbi50c1wiO1xuZXhwb3J0IHsgQnJhbmRDb250ZXh0U2NoZW1hLCBkZWZhdWx0QnJhbmRDb250ZXh0LCBwYXJzZUJyYW5kQ29udGV4dCwgYnJhbmRDb250ZXh0SnNvblNjaGVtYSwgYnJhbmRDb250ZXh0UHJvbXB0IH0gZnJvbSBcIi4vc3JjL2JyYW5kLWZpbGVzLnRzXCI7XG5leHBvcnQgdHlwZSB7IEJyYW5kQ29udGV4dCwgQnJhbmRDb250ZXh0SW5wdXQgfSBmcm9tIFwiLi9zcmMvYnJhbmQtZmlsZXMudHNcIjtcbmV4cG9ydCB7IE1BWF9UQ1BfUE9SVCwgRU5WX09OTFksIHZhbHVlU2NoZW1hLCBidW5kbGVSZXNvdXJjZVNjaGVtYSwgYnVuZGxlRW52RW50cnlTY2hlbWEsIGJ1bmRsZUFwcFNjaGVtYSwgYXBwRW52RW50cnlTY2hlbWEsIGFwcFNjaGVtYSB9IGZyb20gXCIuL3NyYy9jb25maWctdXRpbHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ29uZmlnTWFwVmFsdWUsIENvbmZpZ0RhdGEsIENvbmZpZ1NvdXJjZSwgQ29uZmlnT3B0aW9ucywgQ29uZmlnRmlsZSB9IGZyb20gXCIuL3NyYy9jb25maWctdXRpbHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGVwZW5kZW5jeVJlc29sdmVyT3B0aW9ucywgRGVwZW5kZW5jeUluZm8sIFJlc29sdmVkTnBtVmVyc2lvbiwgTnBtU3BlY2lmaWVySW5wdXQsIFJlc29sdmVkTnBtRGVwZW5kZW5jaWVzLCBNaXNzaW5nRGVwZW5kZW5jeUluZm8gfSBmcm9tIFwiLi9zcmMvZGVwZW5kZW5jeS1yZXNvbHZlci50c1wiO1xuZXhwb3J0IHsgQ09NTUFORF9OT1RfRk9VTkRfRVhJVF9DT0RFIH0gZnJvbSBcIi4vc3JjL2V4ZWMudHNcIjtcbmV4cG9ydCB0eXBlIHsgRXhlY1N0ZGlvLCBMaW5lSGFuZGxlciwgU3RkaW9PcHRpb24sIEV4ZWNSZXN1bHQsIENoaWxkUHJvY2Vzc1Jlc3VsdCwgRXhlY09wdGlvbnMsIFN5bmNFeGVjU3RkaW8sIFN5bmNFeGVjT3B0aW9ucywgU3Bhd25BcmdzIH0gZnJvbSBcIi4vc3JjL2V4ZWMudHNcIjtcbmV4cG9ydCB0eXBlIHsgRmlsZUxvY2tCYWNrZW5kLCBGaWxlTG9ja0FjcXVpc2l0aW9uLCBGaWxlTG9ja09wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZmlsZS1sb2NrLnRzXCI7XG5leHBvcnQgdHlwZSB7IFByb2plY3RDb250ZXh0LCBOcG1SZWdpc3RyeU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvcHJvamVjdC11dGlscy50c1wiO1xuIl19
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/lib/src/bin.d.ts CHANGED
@@ -46,11 +46,6 @@ export interface BinUrlResolveContext {
46
46
  export interface BinSource {
47
47
  url: string;
48
48
  sha256?: string;
49
- /**
50
- * Skip `--version` on this candidate. Use when the source already identified
51
- * the requested version, such as `cargo install --version`.
52
- */
53
- trustVersion?: boolean;
54
49
  }
55
50
  /** A download source resolved only when the executable is not already installed. */
56
51
  export type BinUrl = string | BinSource | ((context: BinUrlResolveContext) => string | BinSource | Promise<string | BinSource>);
package/lib/src/bin.js CHANGED
@@ -296,11 +296,8 @@ export async function ensure(name, url, options = {}) {
296
296
  logger.debug("resolved binary source", { name, from });
297
297
  const selected = await selectedBin(destination, source, temp, options);
298
298
  await chmod(selected, 0o755);
299
- const accepted = source.trustVersion ? { ...options, skipVersionCheck: true } : options;
300
- if (!(await isValidBin(selected, accepted))) {
301
- throw new Error(source.trustVersion
302
- ? `selected binary is not executable: ${selected}`
303
- : `selected binary has no acceptable version: ${selected}`);
299
+ if (!(await isValidBin(selected, options))) {
300
+ throw new Error(`selected binary has no acceptable version: ${selected}`);
304
301
  }
305
302
  await mkdir(destination.binDir, { recursive: true });
306
303
  staged = join(destination.binDir, `.${name}-${randomUUID()}`);
@@ -308,7 +305,7 @@ export async function ensure(name, url, options = {}) {
308
305
  await chmod(staged, 0o755);
309
306
  await rename(staged, destination.path);
310
307
  staged = undefined;
311
- if (!(await isValidBin(destination.path, accepted))) {
308
+ if (!(await isValidBin(destination.path, options))) {
312
309
  throw new Error(`installed binary is invalid after rename: ${destination.path}`);
313
310
  }
314
311
  logger.info("installed binary", {
@@ -325,4 +322,4 @@ export async function ensure(name, url, options = {}) {
325
322
  }
326
323
  });
327
324
  }
328
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JELE9BQU8sRUFDTCxLQUFLLEVBQ0wsUUFBUSxFQUNSLEtBQUssRUFDTCxPQUFPLEVBQ1AsT0FBTyxFQUNQLE1BQU0sRUFDTixFQUFFLEVBQ0YsSUFBSSxFQUNKLFNBQVMsR0FDVixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLFVBQVUsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFnRnRDLFNBQVMsT0FBTyxDQUFDLElBQVksRUFBRSxPQUFlLEVBQUUsV0FBd0I7SUFDdEUsSUFBSSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJ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LEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUQsTUFBTSxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzQixNQUFNLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDbkIsSUFBSSxDQUFDLENBQUMsTUFBTSxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ25GLENBQUM7WUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUM5QixJQUFJO2dCQUNKLElBQUk7Z0JBQ0osRUFBRSxFQUFFLFdBQVcsQ0FBQyxJQUFJO2FBQ3JCLENBQUMsQ0FBQztZQUNILE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksTUFBTTtnQkFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM5QyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluc3RhbGwgYW5kIHJldXNlIGV4ZWN1dGFibGUgYmluYXJpZXMgdW5kZXIgYSBwZXItdG9vbCBob21lIGRpcmVjdG9yeS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IGV4ZWNGaWxlIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCwgcmFuZG9tVVVJRCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHtcbiAgY2htb2QsXG4gIGNvcHlGaWxlLFxuICBta2RpcixcbiAgbWtkdGVtcCxcbiAgcmVhZGRpcixcbiAgcmVuYW1lLFxuICBybSxcbiAgc3RhdCxcbiAgd3JpdGVGaWxlLFxufSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgaG9tZWRpciwgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJub2RlOnVybFwiO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSBcIm5vZGU6dXRpbFwiO1xuXG5pbXBvcnQgeyBlcnJvclV0aWxzLCBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IGV4dHJhY3RaaXAgZnJvbSBcImV4dHJhY3QtemlwXCI7XG5pbXBvcnQgeyB4IGFzIGV4dHJhY3RUYXIgfSBmcm9tIFwidGFyXCI7XG5cbmltcG9ydCB7IHdpdGhGaWxlTG9jayB9IGZyb20gXCIuL2ZpbGUtbG9jay50c1wiO1xuXG5jb25zdCBleGVjRmlsZUFzeW5jID0gcHJvbWlzaWZ5KGV4ZWNGaWxlKTtcbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJjb3JlOmJpblwiKTtcblxuaW50ZXJmYWNlIFBhcnNlZFZlcnNpb24ge1xuICByYXc6IHN0cmluZztcbiAgcGFydHM6IG51bWJlcltdO1xufVxuXG5pbnRlcmZhY2UgQmluQWNjZXNzQ29udGV4dCB7XG4gIGZpbGU6IGJvb2xlYW47XG4gIGV4ZWN1dGFibGU6IGJvb2xlYW47XG59XG5cbi8qKiBTdGFibGUgcGF0aHMgZm9yIGFuIGluc3RhbGxlZCBiaW5hcnkuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbkNvbnRleHQge1xuICByb290OiBzdHJpbmc7XG4gIGJpbkRpcjogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG59XG5cbi8qKiBUZW1wb3JhcnkgZG93bmxvYWQgYW5kIGV4dHJhY3Rpb24gcGF0aHMgc3VwcGxpZWQgdG8gYSBjdXN0b20gc2VsZWN0b3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpblNlbGVjdGlvbkNvbnRleHQge1xuICBkZXN0aW5hdGlvbjogQmluQ29udGV4dDtcbiAgZG93bmxvYWRQYXRoOiBzdHJpbmc7XG4gIHNvdXJjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlbGVjdCB0aGUgZXhlY3V0YWJsZSBmcm9tIGEgZG93bmxvYWQgb3IgdW5wYWNrZWQgYXJjaGl2ZS4gQSBzZWxlY3RvciBtYXlcbiAqIGFsc28gcHJlcGFyZSB0aGUgZmlsZSwgc3VjaCBhcyBhcHBseWluZyBpdHMgZXhlY3V0YWJsZSBtb2RlLlxuICovXG5leHBvcnQgdHlwZSBCaW5TZWxlY3RvciA9IChjb250ZXh0OiBCaW5TZWxlY3Rpb25Db250ZXh0KSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG5cbi8qKiBDYXB0dXJlZCBvdXRwdXQgcGFzc2VkIHRvIGEgY3VzdG9tIGJpbmFyeSB2ZXJzaW9uIHBhcnNlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluVmVyc2lvbk91dHB1dCB7XG4gIHN0ZG91dDogc3RyaW5nO1xuICBzdGRlcnI6IHN0cmluZztcbn1cblxuLyoqIEV4dHJhY3QgYSB2ZXJzaW9uIHN0cmluZyBmcm9tIGEgc3VjY2Vzc2Z1bCB2ZXJzaW9uLWNvbW1hbmQgcmVzdWx0LiAqL1xuZXhwb3J0IHR5cGUgQmluVmVyc2lvblBhcnNlciA9IChvdXRwdXQ6IEJpblZlcnNpb25PdXRwdXQpID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayBlbnN1cmV9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5PcHRpb25zIHtcbiAgYXV0b1VucGFja2FnZT86IGJvb2xlYW47XG4gIHNlbGVjdG9yPzogQmluU2VsZWN0b3I7XG4gIGhvbWVEaXI/OiBzdHJpbmc7XG4gIC8qKiBFeGFjdCBpbnN0YWxsYXRpb24gcGF0aHMuIE9taXNzaW9uIGtlZXBzIGAkSE9NRS8uPG5hbWU+L2Jpbi88bmFtZT5gLiAqL1xuICBkZXN0aW5hdGlvbj86IEJpbkNvbnRleHQ7XG4gIC8qKiBNaW5pbXVtIGFjY2VwdGVkIG51bWVyaWMgdmVyc2lvbiwgd2l0aCBvbmUgdG8gdGhyZWUgY29tcG9uZW50cy4gKi9cbiAgbWluVmVyc2lvbj86IHN0cmluZztcbiAgLyoqIEFyZ3VtZW50IHBhc3NlZCB0byB0aGUgYmluYXJ5IGZvciB2ZXJzaW9uIGRldGVjdGlvbi4gRGVmYXVsdHMgdG8gYC0tdmVyc2lvbmAuICovXG4gIHZlcnNpb25Bcmd1bWVudD86IHN0cmluZztcbiAgLyoqIFZlcnNpb24gb3V0cHV0IHBhcnNlci4gRGVmYXVsdHMgdG8ge0BsaW5rIHBhcnNlVmVyc2lvbn0uICovXG4gIHZlcnNpb25QYXJzZXI/OiBCaW5WZXJzaW9uUGFyc2VyO1xuICAvKiogU2tpcCBgLS12ZXJzaW9uYCBhbmQgdHJlYXQgYW4gZXhlY3V0YWJsZSBmaWxlIGFzIGFjY2VwdGFibGUuICovXG4gIHNraXBWZXJzaW9uQ2hlY2s/OiBib29sZWFuO1xufVxuXG4vKiogVGVtcG9yYXJ5IGRpcmVjdG9yeSBjcmVhdGVkIGZvciBvbmUgYGVuc3VyZWAgYXR0ZW1wdCBhZnRlciB0aGUgaW5zdGFsbCBsb2NrLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5VcmxSZXNvbHZlQ29udGV4dCB7XG4gIHJlYWRvbmx5IHRlbXBEaXI6IHN0cmluZztcbn1cblxuLyoqIERvd25sb2FkIHNvdXJjZSByZXNvbHZlZCBvbmx5IHdoZW4gdGhlIGV4ZWN1dGFibGUgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5Tb3VyY2Uge1xuICB1cmw6IHN0cmluZztcbiAgc2hhMjU2Pzogc3RyaW5nO1xuICAvKipcbiAgICogU2tpcCBgLS12ZXJzaW9uYCBvbiB0aGlzIGNhbmRpZGF0ZS4gVXNlIHdoZW4gdGhlIHNvdXJjZSBhbHJlYWR5IGlkZW50aWZpZWRcbiAgICogdGhlIHJlcXVlc3RlZCB2ZXJzaW9uLCBzdWNoIGFzIGBjYXJnbyBpbnN0YWxsIC0tdmVyc2lvbmAuXG4gICAqL1xuICB0cnVzdFZlcnNpb24/OiBib29sZWFuO1xufVxuXG4vKiogQSBkb3dubG9hZCBzb3VyY2UgcmVzb2x2ZWQgb25seSB3aGVuIHRoZSBleGVjdXRhYmxlIGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZC4gKi9cbmV4cG9ydCB0eXBlIEJpblVybCA9XG4gIHwgc3RyaW5nXG4gIHwgQmluU291cmNlXG4gIHwgKChjb250ZXh0OiBCaW5VcmxSZXNvbHZlQ29udGV4dCkgPT4gc3RyaW5nIHwgQmluU291cmNlIHwgUHJvbWlzZTxzdHJpbmcgfCBCaW5Tb3VyY2U+KTtcblxuZnVuY3Rpb24gY29udGV4dChuYW1lOiBzdHJpbmcsIGhvbWVEaXI6IHN0cmluZywgZGVzdGluYXRpb24/OiBCaW5Db250ZXh0KTogQmluQ29udGV4dCB7XG4gIGlmICghbmFtZSB8fCBiYXNlbmFtZShuYW1lKSAhPT0gbmFtZSB8fCBuYW1lID09PSBcIi5cIiB8fCBuYW1lID09PSBcIi4uXCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIGJpbmFyeSBuYW1lOiAke25hbWV9YCk7XG4gIH1cbiAgaWYgKGRlc3RpbmF0aW9uKSByZXR1cm4gZGVzdGluYXRpb247XG4gIGNvbnN0IHJvb3QgPSBqb2luKGhvbWVEaXIsIGAuJHtuYW1lfWApO1xuICBjb25zdCBiaW5EaXIgPSBqb2luKHJvb3QsIFwiYmluXCIpO1xuICByZXR1cm4geyByb290LCBiaW5EaXIsIHBhdGg6IGpvaW4oYmluRGlyLCBuYW1lKSB9O1xufVxuXG5mdW5jdGlvbiBkaXNwbGF5VXJsKHJhdzogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJhdyk7XG4gICAgaWYgKHVybC5wcm90b2NvbCA9PT0gXCJkYXRhOlwiKSByZXR1cm4gXCJkYXRhOlwiO1xuICAgIHVybC51c2VybmFtZSA9IFwiXCI7XG4gICAgdXJsLnBhc3N3b3JkID0gXCJcIjtcbiAgICB1cmwuc2VhcmNoID0gXCJcIjtcbiAgICB1cmwuaGFzaCA9IFwiXCI7XG4gICAgcmV0dXJuIHVybC50b1N0cmluZygpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gcmF3O1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFjY2Vzc0NvbnRleHQocGF0aDogc3RyaW5nKTogUHJvbWlzZTxCaW5BY2Nlc3NDb250ZXh0PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCBzdGF0KHBhdGgpO1xuICAgIGNvbnN0IGZpbGUgPSBlbnRyeS5pc0ZpbGUoKTtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsZSxcbiAgICAgIGV4ZWN1dGFibGU6IGZpbGUgJiYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIiB8fCAoZW50cnkubW9kZSAmIDBvMTExKSAhPT0gMCksXG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgZmlsZTogZmFsc2UsIGV4ZWN1dGFibGU6IGZhbHNlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0ZWN0ZWRWZXJzaW9ucyhvdXRwdXQ6IHN0cmluZyk6IFBhcnNlZFZlcnNpb25bXSB7XG4gIGNvbnN0IHZlcnNpb25zOiBQYXJzZWRWZXJzaW9uW10gPSBbXTtcbiAgY29uc3QgcGF0dGVybiA9IC9cXGJ2PyhcXGQrKD86XFwuXFxkKyl7MCwyfSkoPzpbLSsuX10/W2Etel1bMC05YS16LitfLV0qKT8vZ2k7XG4gIGZvciAoY29uc3QgbWF0Y2ggb2Ygb3V0cHV0Lm1hdGNoQWxsKHBhdHRlcm4pKSB7XG4gICAgY29uc3QgcmF3ID0gbWF0Y2hbMF0ucmVwbGFjZSgvXnYvaSwgXCJcIik7XG4gICAgY29uc3QgcGFydHMgPSBtYXRjaFsxXT8uc3BsaXQoXCIuXCIpLm1hcChOdW1iZXIpO1xuICAgIGlmIChwYXJ0cz8uZXZlcnkoTnVtYmVyLmlzRmluaXRlKSkgdmVyc2lvbnMucHVzaCh7IHJhdywgcGFydHMgfSk7XG4gIH1cbiAgcmV0dXJuIHZlcnNpb25zLnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAoYS5wYXJ0cy5sZW5ndGggIT09IGIucGFydHMubGVuZ3RoKSByZXR1cm4gYi5wYXJ0cy5sZW5ndGggLSBhLnBhcnRzLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYS5wYXJ0cy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IG9yZGVyID0gKGIucGFydHNbaW5kZXhdID8/IDApIC0gKGEucGFydHNbaW5kZXhdID8/IDApO1xuICAgICAgaWYgKG9yZGVyICE9PSAwKSByZXR1cm4gb3JkZXI7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9KTtcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgZGVlcGVzdCwgaGlnaGVzdCB2ZXJzaW9uIGZyb20gc3Rkb3V0LCBmYWxsaW5nIGJhY2sgdG8gc3RkZXJyIG9ubHlcbiAqIHdoZW4gc3Rkb3V0IGNvbnRhaW5zIG5vIHZlcnNpb24uIFN1cHBvcnRzIG9uZSB0byB0aHJlZSBudW1lcmljIGNvbXBvbmVudHNcbiAqIGFuZCBjb21tb24gc3VmZml4ZXMgc3VjaCBhcyBgcmMxYCwgYC5wb3N0MWAsIGFuZCBgLWRldi4yYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVmVyc2lvbih7IHN0ZG91dCwgc3RkZXJyIH06IEJpblZlcnNpb25PdXRwdXQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gZGV0ZWN0ZWRWZXJzaW9ucyhzdGRvdXQpLmF0KDApPy5yYXcgPz8gZGV0ZWN0ZWRWZXJzaW9ucyhzdGRlcnIpLmF0KDApPy5yYXc7XG59XG5cbmZ1bmN0aW9uIG51bWVyaWNWZXJzaW9uKHZlcnNpb246IHN0cmluZywgc3RyaWN0OiBib29sZWFuKTogbnVtYmVyW10gfCB1bmRlZmluZWQge1xuICBjb25zdCBwYXR0ZXJuID0gc3RyaWN0ID8gL15cXHMqdj8oXFxkKyg/OlxcLlxcZCspezAsMn0pXFxzKiQvaSA6IC9cXGJ2PyhcXGQrKD86XFwuXFxkKyl7MCwyfSkvaTtcbiAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWModmVyc2lvbik7XG4gIHJldHVybiBtYXRjaD8uWzFdPy5zcGxpdChcIi5cIikubWFwKE51bWJlcik7XG59XG5cbmZ1bmN0aW9uIG1lZXRzTWluVmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcsIG1pblZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICBpZiAoIW1pblZlcnNpb24pIHJldHVybiB0cnVlO1xuICBjb25zdCBhY3R1YWwgPSBudW1lcmljVmVyc2lvbih2ZXJzaW9uLCBmYWxzZSk7XG4gIGNvbnN0IG1pbmltdW0gPSBudW1lcmljVmVyc2lvbihtaW5WZXJzaW9uLCB0cnVlKTtcbiAgaWYgKCFtaW5pbXVtKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW52YWxpZCBtaW5pbXVtIGJpbmFyeSB2ZXJzaW9uOiAke21pblZlcnNpb259YCk7XG4gIH1cbiAgaWYgKCFhY3R1YWwpIHJldHVybiBmYWxzZTtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IE1hdGgubWF4KGFjdHVhbC5sZW5ndGgsIG1pbmltdW0ubGVuZ3RoKTsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSAoYWN0dWFsW2luZGV4XSA/PyAwKSAtIChtaW5pbXVtW2luZGV4XSA/PyAwKTtcbiAgICBpZiAoZGlmZmVyZW5jZSAhPT0gMCkgcmV0dXJuIGRpZmZlcmVuY2UgPiAwO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc1ZhbGlkQmluKHBhdGg6IHN0cmluZywgb3B0aW9uczogQmluT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBsb2dnZXIuZGVidWcoXCJjaGVja2luZyBiaW5hcnlcIiwge1xuICAgIHBhdGgsXG4gICAgbWluVmVyc2lvbjogb3B0aW9ucy5taW5WZXJzaW9uLFxuICAgIHZlcnNpb25Bcmd1bWVudDogb3B0aW9ucy52ZXJzaW9uQXJndW1lbnQgPz8gXCItLXZlcnNpb25cIixcbiAgfSk7XG4gIGNvbnN0IGFjY2VzcyA9IGF3YWl0IGFjY2Vzc0NvbnRleHQocGF0aCk7XG4gIGlmICghYWNjZXNzLmZpbGUgfHwgIWFjY2Vzcy5leGVjdXRhYmxlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYmluYXJ5IGFjY2VzcyBjaGVjayBmYWlsZWRcIiwgeyBwYXRoLCAuLi5hY2Nlc3MgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChvcHRpb25zLnNraXBWZXJzaW9uQ2hlY2spIHtcbiAgICBsb2dnZXIuZGVidWcoXCJiaW5hcnkgdmVyc2lvbiBjaGVjayBza2lwcGVkXCIsIHsgcGF0aCB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBsZXQgc3Rkb3V0OiBzdHJpbmc7XG4gIGxldCBzdGRlcnI6IHN0cmluZztcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjRmlsZUFzeW5jKHBhdGgsIFtvcHRpb25zLnZlcnNpb25Bcmd1bWVudCA/PyBcIi0tdmVyc2lvblwiXSwge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0pO1xuICAgIHN0ZG91dCA9IHJlc3VsdC5zdGRvdXQ7XG4gICAgc3RkZXJyID0gcmVzdWx0LnN0ZGVycjtcbiAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJiaW5hcnkgdmVyc2lvbiBjb21tYW5kIGZhaWxlZFwiLCB7XG4gICAgICBwYXRoLFxuICAgICAgZXJyb3I6IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGNhdXNlKSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgdmVyc2lvbiA9IChvcHRpb25zLnZlcnNpb25QYXJzZXIgPz8gcGFyc2VWZXJzaW9uKSh7XG4gICAgc3Rkb3V0LFxuICAgIHN0ZGVycixcbiAgfSk7XG4gIGNvbnN0IHZhbGlkID0gdmVyc2lvbiAhPT0gdW5kZWZpbmVkICYmIG1lZXRzTWluVmVyc2lvbih2ZXJzaW9uLCBvcHRpb25zLm1pblZlcnNpb24pO1xuICBsb2dnZXIuZGVidWcoXCJiaW5hcnkgdmVyc2lvbiBjaGVja2VkXCIsIHtcbiAgICBwYXRoLFxuICAgIHZlcnNpb24sXG4gICAgbWluVmVyc2lvbjogb3B0aW9ucy5taW5WZXJzaW9uLFxuICAgIHZhbGlkLFxuICB9KTtcbiAgcmV0dXJuIHZhbGlkO1xufVxuXG5mdW5jdGlvbiBkb3dubG9hZE5hbWUodXJsOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gYmFzZW5hbWUoZGVjb2RlVVJJQ29tcG9uZW50KG5ldyBVUkwodXJsKS5wYXRobmFtZSkpO1xuICAgIHJldHVybiBjYW5kaWRhdGUgJiYgQnVmZmVyLmJ5dGVMZW5ndGgoY2FuZGlkYXRlKSA8PSAyMDAgPyBjYW5kaWRhdGUgOiBuYW1lO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB1bnBhY2soYXJjaGl2ZTogc3RyaW5nLCBkZXN0aW5hdGlvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGZpbGVuYW1lID0gYXJjaGl2ZS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoZmlsZW5hbWUuZW5kc1dpdGgoXCIuemlwXCIpKSB7XG4gICAgYXdhaXQgZXh0cmFjdFppcChhcmNoaXZlLCB7IGRpcjogZGVzdGluYXRpb24gfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChmaWxlbmFtZS5lbmRzV2l0aChcIi50YXJcIikgfHwgZmlsZW5hbWUuZW5kc1dpdGgoXCIudGFyLmd6XCIpIHx8IGZpbGVuYW1lLmVuZHNXaXRoKFwiLnRnelwiKSkge1xuICAgIGF3YWl0IGV4dHJhY3RUYXIoeyBmaWxlOiBhcmNoaXZlLCBjd2Q6IGRlc3RpbmF0aW9uIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGJpbmFyeSBhcmNoaXZlOiAke2Jhc2VuYW1lKGFyY2hpdmUpfWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaWxlc1VuZGVyKHJvb3Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IHJlYWRkaXIocm9vdCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICBjb25zdCBmaWxlczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgcGF0aCA9IGpvaW4ocm9vdCwgZW50cnkubmFtZSk7XG4gICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGZpbGVzLnB1c2goLi4uKGF3YWl0IGZpbGVzVW5kZXIocGF0aCkpKTtcbiAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRmlsZSgpKSB7XG4gICAgICBmaWxlcy5wdXNoKHBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsZXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbGVjdFNpbmdsZUZpbGUoc291cmNlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IGZpbGVzVW5kZXIoc291cmNlKTtcbiAgY29uc3Qgc2VsZWN0ZWQgPSBmaWxlcy5hdCgwKTtcbiAgaWYgKGZpbGVzLmxlbmd0aCAhPT0gMSB8fCAhc2VsZWN0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGJpbmFyeSBhcmNoaXZlIG11c3QgY29udGFpbiBvbmUgZmlsZSwgZm91bmQgJHtmaWxlcy5sZW5ndGh9YCk7XG4gIH1cbiAgcmV0dXJuIHNlbGVjdGVkO1xufVxuXG5mdW5jdGlvbiBmaWxlVXJsUGF0aCh1cmw6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGlmIChwYXJzZWQucHJvdG9jb2wgIT09IFwiZmlsZTpcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZmlsZVVSTFRvUGF0aChwYXJzZWQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbGVjdGVkQmluKFxuICBkZXN0aW5hdGlvbjogQmluQ29udGV4dCxcbiAgc291cmNlOiBCaW5Tb3VyY2UsXG4gIHRlbXA6IHN0cmluZyxcbiAgb3B0aW9uczogQmluT3B0aW9ucyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHsgdXJsIH0gPSBzb3VyY2U7XG4gIGNvbnN0IGxvY2FsUGF0aCA9IGZpbGVVcmxQYXRoKHVybCk7XG4gIGlmIChsb2NhbFBhdGgpIHtcbiAgICBjb25zdCBhY2Nlc3MgPSBhd2FpdCBhY2Nlc3NDb250ZXh0KGxvY2FsUGF0aCk7XG4gICAgaWYgKCFhY2Nlc3MuZmlsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBiaW5hcnkgZmlsZSBVUkwgZG9lcyBub3QgZXhpc3Q6ICR7ZGlzcGxheVVybCh1cmwpfWApO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoXCJ1c2luZyBsb2NhbCBiaW5hcnlcIiwgeyBmcm9tOiBkaXNwbGF5VXJsKHVybCksIHBhdGg6IGxvY2FsUGF0aCB9KTtcbiAgICByZXR1cm4gbG9jYWxQYXRoO1xuICB9XG4gIGNvbnN0IG5hbWUgPSBkb3dubG9hZE5hbWUodXJsLCBiYXNlbmFtZShkZXN0aW5hdGlvbi5wYXRoKSk7XG4gIGNvbnN0IGRvd25sb2FkUGF0aCA9IGpvaW4odGVtcCwgbmFtZSk7XG4gIGxvZ2dlci5kZWJ1ZyhcImRvd25sb2FkaW5nIGJpbmFyeVwiLCB7XG4gICAgZnJvbTogZGlzcGxheVVybCh1cmwpLFxuICAgIHRvOiBkb3dubG9hZFBhdGgsXG4gIH0pO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGJpbmFyeSBkb3dubG9hZCBmYWlsZWQgKCR7cmVzcG9uc2Uuc3RhdHVzfSlgKTtcbiAgfVxuICBjb25zdCBkb3dubG9hZGVkID0gQnVmZmVyLmZyb20oYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSk7XG4gIGlmIChzb3VyY2Uuc2hhMjU2KSB7XG4gICAgaWYgKCEvXlswLTlhLWZdezY0fSQvaS50ZXN0KHNvdXJjZS5zaGEyNTYpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYmluYXJ5IGRvd25sb2FkIFNIQS0yNTYgZGlnZXN0IG11c3QgY29udGFpbiA2NCBoZXhhZGVjaW1hbCBjaGFyYWN0ZXJzXCIpO1xuICAgIH1cbiAgICBjb25zdCBhY3R1YWwgPSBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShkb3dubG9hZGVkKS5kaWdlc3QoXCJoZXhcIik7XG4gICAgaWYgKGFjdHVhbC50b0xvd2VyQ2FzZSgpICE9PSBzb3VyY2Uuc2hhMjU2LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYmluYXJ5IGRvd25sb2FkIGRpZ2VzdCBtaXNtYXRjaDogJHtkaXNwbGF5VXJsKHVybCl9YCk7XG4gICAgfVxuICB9XG4gIGF3YWl0IHdyaXRlRmlsZShkb3dubG9hZFBhdGgsIGRvd25sb2FkZWQsIHsgbW9kZTogMG83NTUgfSk7XG5cbiAgbGV0IHNlbGVjdGVkU291cmNlID0gZG93bmxvYWRQYXRoO1xuICBpZiAob3B0aW9ucy5hdXRvVW5wYWNrYWdlKSB7XG4gICAgc2VsZWN0ZWRTb3VyY2UgPSBqb2luKHRlbXAsIGB1bnBhY2tlZC0ke3JhbmRvbVVVSUQoKX1gKTtcbiAgICBhd2FpdCBta2RpcihzZWxlY3RlZFNvdXJjZSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwidW5wYWNraW5nIGJpbmFyeSBhcmNoaXZlXCIsIHtcbiAgICAgIGFyY2hpdmU6IGRvd25sb2FkUGF0aCxcbiAgICAgIHRvOiBzZWxlY3RlZFNvdXJjZSxcbiAgICB9KTtcbiAgICBhd2FpdCB1bnBhY2soZG93bmxvYWRQYXRoLCBzZWxlY3RlZFNvdXJjZSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5zZWxlY3Rvcikge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gYXdhaXQgb3B0aW9ucy5zZWxlY3Rvcih7XG4gICAgICBkZXN0aW5hdGlvbixcbiAgICAgIGRvd25sb2FkUGF0aCxcbiAgICAgIHNvdXJjZTogc2VsZWN0ZWRTb3VyY2UsXG4gICAgfSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwic2VsZWN0ZWQgYmluYXJ5XCIsIHsgcGF0aDogc2VsZWN0ZWQgfSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkO1xuICB9XG4gIGNvbnN0IHNlbGVjdGVkID0gb3B0aW9ucy5hdXRvVW5wYWNrYWdlID8gYXdhaXQgc2VsZWN0U2luZ2xlRmlsZShzZWxlY3RlZFNvdXJjZSkgOiBzZWxlY3RlZFNvdXJjZTtcbiAgbG9nZ2VyLmRlYnVnKFwic2VsZWN0ZWQgYmluYXJ5XCIsIHsgcGF0aDogc2VsZWN0ZWQgfSk7XG4gIHJldHVybiBzZWxlY3RlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gZXhpc3RpbmcgZXhlY3V0YWJsZSBvciBpbnN0YWxsIGl0IGF0b21pY2FsbHkgdW5kZXJcbiAqIGAkSE9NRS8uPG5hbWU+L2Jpbi88bmFtZT5gLiBJbnN0YWxsYXRpb24gdXNlcyBhIGNoZWNrLWxvY2stY2hlY2stbG9hZFxuICogc2VxdWVuY2Ugc28gY29uY3VycmVudCBjYWxsZXJzIHJlc29sdmUgYW5kIGRvd25sb2FkIHRoZSBiaW5hcnkgb25seSBvbmNlLlxuICogVGhlIGRvd25sb2FkZWQgY2FuZGlkYXRlIGFuZCBmaW5hbCByZW5hbWVkIGV4ZWN1dGFibGUgbXVzdCBib3RoIHBhc3MgdGhlXG4gKiBzYW1lIGV4ZWN1dGFibGUgYW5kIHZlcnNpb24gY2hlY2tzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlKFxuICBuYW1lOiBzdHJpbmcsXG4gIHVybDogQmluVXJsLFxuICBvcHRpb25zOiBCaW5PcHRpb25zID0ge30sXG4pOiBQcm9taXNlPEJpbkNvbnRleHQ+IHtcbiAgaWYgKG9wdGlvbnMubWluVmVyc2lvbiAmJiAhbnVtZXJpY1ZlcnNpb24ob3B0aW9ucy5taW5WZXJzaW9uLCB0cnVlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgbWluaW11bSBiaW5hcnkgdmVyc2lvbjogJHtvcHRpb25zLm1pblZlcnNpb259YCk7XG4gIH1cbiAgY29uc3QgZGVzdGluYXRpb24gPSBjb250ZXh0KG5hbWUsIG9wdGlvbnMuaG9tZURpciA/PyBob21lZGlyKCksIG9wdGlvbnMuZGVzdGluYXRpb24pO1xuICBpZiAoYXdhaXQgaXNWYWxpZEJpbihkZXN0aW5hdGlvbi5wYXRoLCBvcHRpb25zKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInVzaW5nIGluc3RhbGxlZCBiaW5hcnlcIiwgeyBuYW1lLCBwYXRoOiBkZXN0aW5hdGlvbi5wYXRoIH0pO1xuICAgIHJldHVybiBkZXN0aW5hdGlvbjtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhcIndhaXRpbmcgZm9yIGJpbmFyeSBpbnN0YWxsIGxvY2tcIiwgeyBuYW1lLCBwYXRoOiBkZXN0aW5hdGlvbi5wYXRoIH0pO1xuICByZXR1cm4gd2l0aEZpbGVMb2NrKFtcImJpbi5lbnN1cmVcIiwgZGVzdGluYXRpb24ucGF0aF0sIGFzeW5jICgpID0+IHtcbiAgICBpZiAoYXdhaXQgaXNWYWxpZEJpbihkZXN0aW5hdGlvbi5wYXRoLCBvcHRpb25zKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwidXNpbmcgYmluYXJ5IGluc3RhbGxlZCBieSBhbm90aGVyIGNhbGxlclwiLCB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHBhdGg6IGRlc3RpbmF0aW9uLnBhdGgsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZXN0aW5hdGlvbjtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoXCJpbnN0YWxsaW5nIGJpbmFyeVwiLCB7XG4gICAgICBuYW1lLFxuICAgICAgdG86IGRlc3RpbmF0aW9uLnBhdGgsXG4gICAgICBtaW5WZXJzaW9uOiBvcHRpb25zLm1pblZlcnNpb24sXG4gICAgfSk7XG4gICAgY29uc3QgdGVtcCA9IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgYCR7bmFtZX0tYCkpO1xuICAgIGxldCBzdGFnZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSB0eXBlb2YgdXJsID09PSBcImZ1bmN0aW9uXCIgPyBhd2FpdCB1cmwoeyB0ZW1wRGlyOiB0ZW1wIH0pIDogdXJsO1xuICAgICAgY29uc3Qgc291cmNlID0gdHlwZW9mIHJlc29sdmVkID09PSBcInN0cmluZ1wiID8geyB1cmw6IHJlc29sdmVkIH0gOiByZXNvbHZlZDtcbiAgICAgIGNvbnN0IGZyb20gPSBkaXNwbGF5VXJsKHNvdXJjZS51cmwpO1xuICAgICAgbG9nZ2VyLmRlYnVnKFwicmVzb2x2ZWQgYmluYXJ5IHNvdXJjZVwiLCB7IG5hbWUsIGZyb20gfSk7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IGF3YWl0IHNlbGVjdGVkQmluKGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRlbXAsIG9wdGlvbnMpO1xuICAgICAgYXdhaXQgY2htb2Qoc2VsZWN0ZWQsIDBvNzU1KTtcbiAgICAgIGNvbnN0IGFjY2VwdGVkID0gc291cmNlLnRydXN0VmVyc2lvbiA/IHsgLi4ub3B0aW9ucywgc2tpcFZlcnNpb25DaGVjazogdHJ1ZSB9IDogb3B0aW9ucztcbiAgICAgIGlmICghKGF3YWl0IGlzVmFsaWRCaW4oc2VsZWN0ZWQsIGFjY2VwdGVkKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIHNvdXJjZS50cnVzdFZlcnNpb25cbiAgICAgICAgICAgID8gYHNlbGVjdGVkIGJpbmFyeSBpcyBub3QgZXhlY3V0YWJsZTogJHtzZWxlY3RlZH1gXG4gICAgICAgICAgICA6IGBzZWxlY3RlZCBiaW5hcnkgaGFzIG5vIGFjY2VwdGFibGUgdmVyc2lvbjogJHtzZWxlY3RlZH1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBta2RpcihkZXN0aW5hdGlvbi5iaW5EaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgc3RhZ2VkID0gam9pbihkZXN0aW5hdGlvbi5iaW5EaXIsIGAuJHtuYW1lfS0ke3JhbmRvbVVVSUQoKX1gKTtcbiAgICAgIGF3YWl0IGNvcHlGaWxlKHNlbGVjdGVkLCBzdGFnZWQpO1xuICAgICAgYXdhaXQgY2htb2Qoc3RhZ2VkLCAwbzc1NSk7XG4gICAgICBhd2FpdCByZW5hbWUoc3RhZ2VkLCBkZXN0aW5hdGlvbi5wYXRoKTtcbiAgICAgIHN0YWdlZCA9IHVuZGVmaW5lZDtcbiAgICAgIGlmICghKGF3YWl0IGlzVmFsaWRCaW4oZGVzdGluYXRpb24ucGF0aCwgYWNjZXB0ZWQpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGluc3RhbGxlZCBiaW5hcnkgaXMgaW52YWxpZCBhZnRlciByZW5hbWU6ICR7ZGVzdGluYXRpb24ucGF0aH1gKTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5pbmZvKFwiaW5zdGFsbGVkIGJpbmFyeVwiLCB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGZyb20sXG4gICAgICAgIHRvOiBkZXN0aW5hdGlvbi5wYXRoLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGVzdGluYXRpb247XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzdGFnZWQpIGF3YWl0IHJtKHN0YWdlZCwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IHJtKHRlbXAsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuIl19
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JELE9BQU8sRUFDTCxLQUFLLEVBQ0wsUUFBUSxFQUNSLEtBQUssRUFDTCxPQUFPLEVBQ1AsT0FBTyxFQUNQLE1BQU0sRUFDTixFQUFFLEVBQ0YsSUFBSSxFQUNKLFNBQVMsR0FDVixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLFVBQVUsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUEyRXRDLFNBQVMsT0FBTyxDQUFDLElBQVksRUFBRSxPQUFlLEVBQUUsV0FBd0I7SUFDdEUsSUFBSSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJ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LFNBQVMsQ0FBQztZQUNuQixJQUFJLENBQUMsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbkYsQ0FBQztZQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzlCLElBQUk7Z0JBQ0osSUFBSTtnQkFDSixFQUFFLEVBQUUsV0FBVyxDQUFDLElBQUk7YUFDckIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxNQUFNO2dCQUFFLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW5zdGFsbCBhbmQgcmV1c2UgZXhlY3V0YWJsZSBiaW5hcmllcyB1bmRlciBhIHBlci10b29sIGhvbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBjcmVhdGVIYXNoLCByYW5kb21VVUlEIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQge1xuICBjaG1vZCxcbiAgY29weUZpbGUsXG4gIG1rZGlyLFxuICBta2R0ZW1wLFxuICByZWFkZGlyLFxuICByZW5hbWUsXG4gIHJtLFxuICBzdGF0LFxuICB3cml0ZUZpbGUsXG59IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBob21lZGlyLCB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tIFwibm9kZTp1dGlsXCI7XG5cbmltcG9ydCB7IGVycm9yVXRpbHMsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgZXh0cmFjdFppcCBmcm9tIFwiZXh0cmFjdC16aXBcIjtcbmltcG9ydCB7IHggYXMgZXh0cmFjdFRhciB9IGZyb20gXCJ0YXJcIjtcblxuaW1wb3J0IHsgd2l0aEZpbGVMb2NrIH0gZnJvbSBcIi4vZmlsZS1sb2NrLnRzXCI7XG5cbmNvbnN0IGV4ZWNGaWxlQXN5bmMgPSBwcm9taXNpZnkoZXhlY0ZpbGUpO1xuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImNvcmU6YmluXCIpO1xuXG5pbnRlcmZhY2UgUGFyc2VkVmVyc2lvbiB7XG4gIHJhdzogc3RyaW5nO1xuICBwYXJ0czogbnVtYmVyW107XG59XG5cbmludGVyZmFjZSBCaW5BY2Nlc3NDb250ZXh0IHtcbiAgZmlsZTogYm9vbGVhbjtcbiAgZXhlY3V0YWJsZTogYm9vbGVhbjtcbn1cblxuLyoqIFN0YWJsZSBwYXRocyBmb3IgYW4gaW5zdGFsbGVkIGJpbmFyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluQ29udGV4dCB7XG4gIHJvb3Q6IHN0cmluZztcbiAgYmluRGlyOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbn1cblxuLyoqIFRlbXBvcmFyeSBkb3dubG9hZCBhbmQgZXh0cmFjdGlvbiBwYXRocyBzdXBwbGllZCB0byBhIGN1c3RvbSBzZWxlY3Rvci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluU2VsZWN0aW9uQ29udGV4dCB7XG4gIGRlc3RpbmF0aW9uOiBCaW5Db250ZXh0O1xuICBkb3dubG9hZFBhdGg6IHN0cmluZztcbiAgc291cmNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VsZWN0IHRoZSBleGVjdXRhYmxlIGZyb20gYSBkb3dubG9hZCBvciB1bnBhY2tlZCBhcmNoaXZlLiBBIHNlbGVjdG9yIG1heVxuICogYWxzbyBwcmVwYXJlIHRoZSBmaWxlLCBzdWNoIGFzIGFwcGx5aW5nIGl0cyBleGVjdXRhYmxlIG1vZGUuXG4gKi9cbmV4cG9ydCB0eXBlIEJpblNlbGVjdG9yID0gKGNvbnRleHQ6IEJpblNlbGVjdGlvbkNvbnRleHQpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcblxuLyoqIENhcHR1cmVkIG91dHB1dCBwYXNzZWQgdG8gYSBjdXN0b20gYmluYXJ5IHZlcnNpb24gcGFyc2VyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5WZXJzaW9uT3V0cHV0IHtcbiAgc3Rkb3V0OiBzdHJpbmc7XG4gIHN0ZGVycjogc3RyaW5nO1xufVxuXG4vKiogRXh0cmFjdCBhIHZlcnNpb24gc3RyaW5nIGZyb20gYSBzdWNjZXNzZnVsIHZlcnNpb24tY29tbWFuZCByZXN1bHQuICovXG5leHBvcnQgdHlwZSBCaW5WZXJzaW9uUGFyc2VyID0gKG91dHB1dDogQmluVmVyc2lvbk91dHB1dCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIGVuc3VyZX0uICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbk9wdGlvbnMge1xuICBhdXRvVW5wYWNrYWdlPzogYm9vbGVhbjtcbiAgc2VsZWN0b3I/OiBCaW5TZWxlY3RvcjtcbiAgaG9tZURpcj86IHN0cmluZztcbiAgLyoqIEV4YWN0IGluc3RhbGxhdGlvbiBwYXRocy4gT21pc3Npb24ga2VlcHMgYCRIT01FLy48bmFtZT4vYmluLzxuYW1lPmAuICovXG4gIGRlc3RpbmF0aW9uPzogQmluQ29udGV4dDtcbiAgLyoqIE1pbmltdW0gYWNjZXB0ZWQgbnVtZXJpYyB2ZXJzaW9uLCB3aXRoIG9uZSB0byB0aHJlZSBjb21wb25lbnRzLiAqL1xuICBtaW5WZXJzaW9uPzogc3RyaW5nO1xuICAvKiogQXJndW1lbnQgcGFzc2VkIHRvIHRoZSBiaW5hcnkgZm9yIHZlcnNpb24gZGV0ZWN0aW9uLiBEZWZhdWx0cyB0byBgLS12ZXJzaW9uYC4gKi9cbiAgdmVyc2lvbkFyZ3VtZW50Pzogc3RyaW5nO1xuICAvKiogVmVyc2lvbiBvdXRwdXQgcGFyc2VyLiBEZWZhdWx0cyB0byB7QGxpbmsgcGFyc2VWZXJzaW9ufS4gKi9cbiAgdmVyc2lvblBhcnNlcj86IEJpblZlcnNpb25QYXJzZXI7XG4gIC8qKiBTa2lwIGAtLXZlcnNpb25gIGFuZCB0cmVhdCBhbiBleGVjdXRhYmxlIGZpbGUgYXMgYWNjZXB0YWJsZS4gKi9cbiAgc2tpcFZlcnNpb25DaGVjaz86IGJvb2xlYW47XG59XG5cbi8qKiBUZW1wb3JhcnkgZGlyZWN0b3J5IGNyZWF0ZWQgZm9yIG9uZSBgZW5zdXJlYCBhdHRlbXB0IGFmdGVyIHRoZSBpbnN0YWxsIGxvY2suICovXG5leHBvcnQgaW50ZXJmYWNlIEJpblVybFJlc29sdmVDb250ZXh0IHtcbiAgcmVhZG9ubHkgdGVtcERpcjogc3RyaW5nO1xufVxuXG4vKiogRG93bmxvYWQgc291cmNlIHJlc29sdmVkIG9ubHkgd2hlbiB0aGUgZXhlY3V0YWJsZSBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpblNvdXJjZSB7XG4gIHVybDogc3RyaW5nO1xuICBzaGEyNTY/OiBzdHJpbmc7XG59XG5cbi8qKiBBIGRvd25sb2FkIHNvdXJjZSByZXNvbHZlZCBvbmx5IHdoZW4gdGhlIGV4ZWN1dGFibGUgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkLiAqL1xuZXhwb3J0IHR5cGUgQmluVXJsID1cbiAgfCBzdHJpbmdcbiAgfCBCaW5Tb3VyY2VcbiAgfCAoKGNvbnRleHQ6IEJpblVybFJlc29sdmVDb250ZXh0KSA9PiBzdHJpbmcgfCBCaW5Tb3VyY2UgfCBQcm9taXNlPHN0cmluZyB8IEJpblNvdXJjZT4pO1xuXG5mdW5jdGlvbiBjb250ZXh0KG5hbWU6IHN0cmluZywgaG9tZURpcjogc3RyaW5nLCBkZXN0aW5hdGlvbj86IEJpbkNvbnRleHQpOiBCaW5Db250ZXh0IHtcbiAgaWYgKCFuYW1lIHx8IGJhc2VuYW1lKG5hbWUpICE9PSBuYW1lIHx8IG5hbWUgPT09IFwiLlwiIHx8IG5hbWUgPT09IFwiLi5cIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgYmluYXJ5IG5hbWU6ICR7bmFtZX1gKTtcbiAgfVxuICBpZiAoZGVzdGluYXRpb24pIHJldHVybiBkZXN0aW5hdGlvbjtcbiAgY29uc3Qgcm9vdCA9IGpvaW4oaG9tZURpciwgYC4ke25hbWV9YCk7XG4gIGNvbnN0IGJpbkRpciA9IGpvaW4ocm9vdCwgXCJiaW5cIik7XG4gIHJldHVybiB7IHJvb3QsIGJpbkRpciwgcGF0aDogam9pbihiaW5EaXIsIG5hbWUpIH07XG59XG5cbmZ1bmN0aW9uIGRpc3BsYXlVcmwocmF3OiBzdHJpbmcpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmF3KTtcbiAgICBpZiAodXJsLnByb3RvY29sID09PSBcImRhdGE6XCIpIHJldHVybiBcImRhdGE6XCI7XG4gICAgdXJsLnVzZXJuYW1lID0gXCJcIjtcbiAgICB1cmwucGFzc3dvcmQgPSBcIlwiO1xuICAgIHVybC5zZWFyY2ggPSBcIlwiO1xuICAgIHVybC5oYXNoID0gXCJcIjtcbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiByYXc7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYWNjZXNzQ29udGV4dChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPEJpbkFjY2Vzc0NvbnRleHQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlbnRyeSA9IGF3YWl0IHN0YXQocGF0aCk7XG4gICAgY29uc3QgZmlsZSA9IGVudHJ5LmlzRmlsZSgpO1xuICAgIHJldHVybiB7XG4gICAgICBmaWxlLFxuICAgICAgZXhlY3V0YWJsZTogZmlsZSAmJiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiIHx8IChlbnRyeS5tb2RlICYgMG8xMTEpICE9PSAwKSxcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyBmaWxlOiBmYWxzZSwgZXhlY3V0YWJsZTogZmFsc2UgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRlY3RlZFZlcnNpb25zKG91dHB1dDogc3RyaW5nKTogUGFyc2VkVmVyc2lvbltdIHtcbiAgY29uc3QgdmVyc2lvbnM6IFBhcnNlZFZlcnNpb25bXSA9IFtdO1xuICBjb25zdCBwYXR0ZXJuID0gL1xcYnY/KFxcZCsoPzpcXC5cXGQrKXswLDJ9KSg/OlstKy5fXT9bYS16XVswLTlhLXouK18tXSopPy9naTtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiBvdXRwdXQubWF0Y2hBbGwocGF0dGVybikpIHtcbiAgICBjb25zdCByYXcgPSBtYXRjaFswXS5yZXBsYWNlKC9edi9pLCBcIlwiKTtcbiAgICBjb25zdCBwYXJ0cyA9IG1hdGNoWzFdPy5zcGxpdChcIi5cIikubWFwKE51bWJlcik7XG4gICAgaWYgKHBhcnRzPy5ldmVyeShOdW1iZXIuaXNGaW5pdGUpKSB2ZXJzaW9ucy5wdXNoKHsgcmF3LCBwYXJ0cyB9KTtcbiAgfVxuICByZXR1cm4gdmVyc2lvbnMuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChhLnBhcnRzLmxlbmd0aCAhPT0gYi5wYXJ0cy5sZW5ndGgpIHJldHVybiBiLnBhcnRzLmxlbmd0aCAtIGEucGFydHMubGVuZ3RoO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhLnBhcnRzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgY29uc3Qgb3JkZXIgPSAoYi5wYXJ0c1tpbmRleF0gPz8gMCkgLSAoYS5wYXJ0c1tpbmRleF0gPz8gMCk7XG4gICAgICBpZiAob3JkZXIgIT09IDApIHJldHVybiBvcmRlcjtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBkZWVwZXN0LCBoaWdoZXN0IHZlcnNpb24gZnJvbSBzdGRvdXQsIGZhbGxpbmcgYmFjayB0byBzdGRlcnIgb25seVxuICogd2hlbiBzdGRvdXQgY29udGFpbnMgbm8gdmVyc2lvbi4gU3VwcG9ydHMgb25lIHRvIHRocmVlIG51bWVyaWMgY29tcG9uZW50c1xuICogYW5kIGNvbW1vbiBzdWZmaXhlcyBzdWNoIGFzIGByYzFgLCBgLnBvc3QxYCwgYW5kIGAtZGV2LjJgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VWZXJzaW9uKHsgc3Rkb3V0LCBzdGRlcnIgfTogQmluVmVyc2lvbk91dHB1dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBkZXRlY3RlZFZlcnNpb25zKHN0ZG91dCkuYXQoMCk/LnJhdyA/PyBkZXRlY3RlZFZlcnNpb25zKHN0ZGVycikuYXQoMCk/LnJhdztcbn1cblxuZnVuY3Rpb24gbnVtZXJpY1ZlcnNpb24odmVyc2lvbjogc3RyaW5nLCBzdHJpY3Q6IGJvb2xlYW4pOiBudW1iZXJbXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhdHRlcm4gPSBzdHJpY3QgPyAvXlxccyp2PyhcXGQrKD86XFwuXFxkKyl7MCwyfSlcXHMqJC9pIDogL1xcYnY/KFxcZCsoPzpcXC5cXGQrKXswLDJ9KS9pO1xuICBjb25zdCBtYXRjaCA9IHBhdHRlcm4uZXhlYyh2ZXJzaW9uKTtcbiAgcmV0dXJuIG1hdGNoPy5bMV0/LnNwbGl0KFwiLlwiKS5tYXAoTnVtYmVyKTtcbn1cblxuZnVuY3Rpb24gbWVldHNNaW5WZXJzaW9uKHZlcnNpb246IHN0cmluZywgbWluVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIGlmICghbWluVmVyc2lvbikgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGFjdHVhbCA9IG51bWVyaWNWZXJzaW9uKHZlcnNpb24sIGZhbHNlKTtcbiAgY29uc3QgbWluaW11bSA9IG51bWVyaWNWZXJzaW9uKG1pblZlcnNpb24sIHRydWUpO1xuICBpZiAoIW1pbmltdW0pIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIG1pbmltdW0gYmluYXJ5IHZlcnNpb246ICR7bWluVmVyc2lvbn1gKTtcbiAgfVxuICBpZiAoIWFjdHVhbCkgcmV0dXJuIGZhbHNlO1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgTWF0aC5tYXgoYWN0dWFsLmxlbmd0aCwgbWluaW11bS5sZW5ndGgpOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IChhY3R1YWxbaW5kZXhdID8/IDApIC0gKG1pbmltdW1baW5kZXhdID8/IDApO1xuICAgIGlmIChkaWZmZXJlbmNlICE9PSAwKSByZXR1cm4gZGlmZmVyZW5jZSA+IDA7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzVmFsaWRCaW4ocGF0aDogc3RyaW5nLCBvcHRpb25zOiBCaW5PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGxvZ2dlci5kZWJ1ZyhcImNoZWNraW5nIGJpbmFyeVwiLCB7XG4gICAgcGF0aCxcbiAgICBtaW5WZXJzaW9uOiBvcHRpb25zLm1pblZlcnNpb24sXG4gICAgdmVyc2lvbkFyZ3VtZW50OiBvcHRpb25zLnZlcnNpb25Bcmd1bWVudCA/PyBcIi0tdmVyc2lvblwiLFxuICB9KTtcbiAgY29uc3QgYWNjZXNzID0gYXdhaXQgYWNjZXNzQ29udGV4dChwYXRoKTtcbiAgaWYgKCFhY2Nlc3MuZmlsZSB8fCAhYWNjZXNzLmV4ZWN1dGFibGUpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJiaW5hcnkgYWNjZXNzIGNoZWNrIGZhaWxlZFwiLCB7IHBhdGgsIC4uLmFjY2VzcyB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKG9wdGlvbnMuc2tpcFZlcnNpb25DaGVjaykge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImJpbmFyeSB2ZXJzaW9uIGNoZWNrIHNraXBwZWRcIiwgeyBwYXRoIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxldCBzdGRvdXQ6IHN0cmluZztcbiAgbGV0IHN0ZGVycjogc3RyaW5nO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNGaWxlQXN5bmMocGF0aCwgW29wdGlvbnMudmVyc2lvbkFyZ3VtZW50ID8/IFwiLS12ZXJzaW9uXCJdLCB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSk7XG4gICAgc3Rkb3V0ID0gcmVzdWx0LnN0ZG91dDtcbiAgICBzdGRlcnIgPSByZXN1bHQuc3RkZXJyO1xuICB9IGNhdGNoIChjYXVzZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImJpbmFyeSB2ZXJzaW9uIGNvbW1hbmQgZmFpbGVkXCIsIHtcbiAgICAgIHBhdGgsXG4gICAgICBlcnJvcjogZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoY2F1c2UpLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCB2ZXJzaW9uID0gKG9wdGlvbnMudmVyc2lvblBhcnNlciA/PyBwYXJzZVZlcnNpb24pKHtcbiAgICBzdGRvdXQsXG4gICAgc3RkZXJyLFxuICB9KTtcbiAgY29uc3QgdmFsaWQgPSB2ZXJzaW9uICE9PSB1bmRlZmluZWQgJiYgbWVldHNNaW5WZXJzaW9uKHZlcnNpb24sIG9wdGlvbnMubWluVmVyc2lvbik7XG4gIGxvZ2dlci5kZWJ1ZyhcImJpbmFyeSB2ZXJzaW9uIGNoZWNrZWRcIiwge1xuICAgIHBhdGgsXG4gICAgdmVyc2lvbixcbiAgICBtaW5WZXJzaW9uOiBvcHRpb25zLm1pblZlcnNpb24sXG4gICAgdmFsaWQsXG4gIH0pO1xuICByZXR1cm4gdmFsaWQ7XG59XG5cbmZ1bmN0aW9uIGRvd25sb2FkTmFtZSh1cmw6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBiYXNlbmFtZShkZWNvZGVVUklDb21wb25lbnQobmV3IFVSTCh1cmwpLnBhdGhuYW1lKSk7XG4gICAgcmV0dXJuIGNhbmRpZGF0ZSAmJiBCdWZmZXIuYnl0ZUxlbmd0aChjYW5kaWRhdGUpIDw9IDIwMCA/IGNhbmRpZGF0ZSA6IG5hbWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBuYW1lO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVucGFjayhhcmNoaXZlOiBzdHJpbmcsIGRlc3RpbmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZmlsZW5hbWUgPSBhcmNoaXZlLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChmaWxlbmFtZS5lbmRzV2l0aChcIi56aXBcIikpIHtcbiAgICBhd2FpdCBleHRyYWN0WmlwKGFyY2hpdmUsIHsgZGlyOiBkZXN0aW5hdGlvbiB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKFwiLnRhclwiKSB8fCBmaWxlbmFtZS5lbmRzV2l0aChcIi50YXIuZ3pcIikgfHwgZmlsZW5hbWUuZW5kc1dpdGgoXCIudGd6XCIpKSB7XG4gICAgYXdhaXQgZXh0cmFjdFRhcih7IGZpbGU6IGFyY2hpdmUsIGN3ZDogZGVzdGluYXRpb24gfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgYmluYXJ5IGFyY2hpdmU6ICR7YmFzZW5hbWUoYXJjaGl2ZSl9YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbGVzVW5kZXIocm9vdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihyb290LCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBwYXRoID0gam9pbihyb290LCBlbnRyeS5uYW1lKTtcbiAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgZmlsZXMucHVzaCguLi4oYXdhaXQgZmlsZXNVbmRlcihwYXRoKSkpO1xuICAgIH0gZWxzZSBpZiAoZW50cnkuaXNGaWxlKCkpIHtcbiAgICAgIGZpbGVzLnB1c2gocGF0aCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWxlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VsZWN0U2luZ2xlRmlsZShzb3VyY2U6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgZmlsZXNVbmRlcihzb3VyY2UpO1xuICBjb25zdCBzZWxlY3RlZCA9IGZpbGVzLmF0KDApO1xuICBpZiAoZmlsZXMubGVuZ3RoICE9PSAxIHx8ICFzZWxlY3RlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgYmluYXJ5IGFyY2hpdmUgbXVzdCBjb250YWluIG9uZSBmaWxlLCBmb3VuZCAke2ZpbGVzLmxlbmd0aH1gKTtcbiAgfVxuICByZXR1cm4gc2VsZWN0ZWQ7XG59XG5cbmZ1bmN0aW9uIGZpbGVVcmxQYXRoKHVybDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgaWYgKHBhcnNlZC5wcm90b2NvbCAhPT0gXCJmaWxlOlwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBmaWxlVVJMVG9QYXRoKHBhcnNlZCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VsZWN0ZWRCaW4oXG4gIGRlc3RpbmF0aW9uOiBCaW5Db250ZXh0LFxuICBzb3VyY2U6IEJpblNvdXJjZSxcbiAgdGVtcDogc3RyaW5nLFxuICBvcHRpb25zOiBCaW5PcHRpb25zLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyB1cmwgfSA9IHNvdXJjZTtcbiAgY29uc3QgbG9jYWxQYXRoID0gZmlsZVVybFBhdGgodXJsKTtcbiAgaWYgKGxvY2FsUGF0aCkge1xuICAgIGNvbnN0IGFjY2VzcyA9IGF3YWl0IGFjY2Vzc0NvbnRleHQobG9jYWxQYXRoKTtcbiAgICBpZiAoIWFjY2Vzcy5maWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGJpbmFyeSBmaWxlIFVSTCBkb2VzIG5vdCBleGlzdDogJHtkaXNwbGF5VXJsKHVybCl9YCk7XG4gICAgfVxuICAgIGxvZ2dlci5kZWJ1ZyhcInVzaW5nIGxvY2FsIGJpbmFyeVwiLCB7IGZyb206IGRpc3BsYXlVcmwodXJsKSwgcGF0aDogbG9jYWxQYXRoIH0pO1xuICAgIHJldHVybiBsb2NhbFBhdGg7XG4gIH1cbiAgY29uc3QgbmFtZSA9IGRvd25sb2FkTmFtZSh1cmwsIGJhc2VuYW1lKGRlc3RpbmF0aW9uLnBhdGgpKTtcbiAgY29uc3QgZG93bmxvYWRQYXRoID0gam9pbih0ZW1wLCBuYW1lKTtcbiAgbG9nZ2VyLmRlYnVnKFwiZG93bmxvYWRpbmcgYmluYXJ5XCIsIHtcbiAgICBmcm9tOiBkaXNwbGF5VXJsKHVybCksXG4gICAgdG86IGRvd25sb2FkUGF0aCxcbiAgfSk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgYmluYXJ5IGRvd25sb2FkIGZhaWxlZCAoJHtyZXNwb25zZS5zdGF0dXN9KWApO1xuICB9XG4gIGNvbnN0IGRvd25sb2FkZWQgPSBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKTtcbiAgaWYgKHNvdXJjZS5zaGEyNTYpIHtcbiAgICBpZiAoIS9eWzAtOWEtZl17NjR9JC9pLnRlc3Qoc291cmNlLnNoYTI1NikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJiaW5hcnkgZG93bmxvYWQgU0hBLTI1NiBkaWdlc3QgbXVzdCBjb250YWluIDY0IGhleGFkZWNpbWFsIGNoYXJhY3RlcnNcIik7XG4gICAgfVxuICAgIGNvbnN0IGFjdHVhbCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGRvd25sb2FkZWQpLmRpZ2VzdChcImhleFwiKTtcbiAgICBpZiAoYWN0dWFsLnRvTG93ZXJDYXNlKCkgIT09IHNvdXJjZS5zaGEyNTYudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBiaW5hcnkgZG93bmxvYWQgZGlnZXN0IG1pc21hdGNoOiAke2Rpc3BsYXlVcmwodXJsKX1gKTtcbiAgICB9XG4gIH1cbiAgYXdhaXQgd3JpdGVGaWxlKGRvd25sb2FkUGF0aCwgZG93bmxvYWRlZCwgeyBtb2RlOiAwbzc1NSB9KTtcblxuICBsZXQgc2VsZWN0ZWRTb3VyY2UgPSBkb3dubG9hZFBhdGg7XG4gIGlmIChvcHRpb25zLmF1dG9VbnBhY2thZ2UpIHtcbiAgICBzZWxlY3RlZFNvdXJjZSA9IGpvaW4odGVtcCwgYHVucGFja2VkLSR7cmFuZG9tVVVJRCgpfWApO1xuICAgIGF3YWl0IG1rZGlyKHNlbGVjdGVkU291cmNlKTtcbiAgICBsb2dnZXIuZGVidWcoXCJ1bnBhY2tpbmcgYmluYXJ5IGFyY2hpdmVcIiwge1xuICAgICAgYXJjaGl2ZTogZG93bmxvYWRQYXRoLFxuICAgICAgdG86IHNlbGVjdGVkU291cmNlLFxuICAgIH0pO1xuICAgIGF3YWl0IHVucGFjayhkb3dubG9hZFBhdGgsIHNlbGVjdGVkU291cmNlKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnNlbGVjdG9yKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBhd2FpdCBvcHRpb25zLnNlbGVjdG9yKHtcbiAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgZG93bmxvYWRQYXRoLFxuICAgICAgc291cmNlOiBzZWxlY3RlZFNvdXJjZSxcbiAgICB9KTtcbiAgICBsb2dnZXIuZGVidWcoXCJzZWxlY3RlZCBiaW5hcnlcIiwgeyBwYXRoOiBzZWxlY3RlZCB9KTtcbiAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gIH1cbiAgY29uc3Qgc2VsZWN0ZWQgPSBvcHRpb25zLmF1dG9VbnBhY2thZ2UgPyBhd2FpdCBzZWxlY3RTaW5nbGVGaWxlKHNlbGVjdGVkU291cmNlKSA6IHNlbGVjdGVkU291cmNlO1xuICBsb2dnZXIuZGVidWcoXCJzZWxlY3RlZCBiaW5hcnlcIiwgeyBwYXRoOiBzZWxlY3RlZCB9KTtcbiAgcmV0dXJuIHNlbGVjdGVkO1xufVxuXG4vKipcbiAqIFJldHVybiBhbiBleGlzdGluZyBleGVjdXRhYmxlIG9yIGluc3RhbGwgaXQgYXRvbWljYWxseSB1bmRlclxuICogYCRIT01FLy48bmFtZT4vYmluLzxuYW1lPmAuIEluc3RhbGxhdGlvbiB1c2VzIGEgY2hlY2stbG9jay1jaGVjay1sb2FkXG4gKiBzZXF1ZW5jZSBzbyBjb25jdXJyZW50IGNhbGxlcnMgcmVzb2x2ZSBhbmQgZG93bmxvYWQgdGhlIGJpbmFyeSBvbmx5IG9uY2UuXG4gKiBUaGUgZG93bmxvYWRlZCBjYW5kaWRhdGUgYW5kIGZpbmFsIHJlbmFtZWQgZXhlY3V0YWJsZSBtdXN0IGJvdGggcGFzcyB0aGVcbiAqIHNhbWUgZXhlY3V0YWJsZSBhbmQgdmVyc2lvbiBjaGVja3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmUoXG4gIG5hbWU6IHN0cmluZyxcbiAgdXJsOiBCaW5VcmwsXG4gIG9wdGlvbnM6IEJpbk9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8QmluQ29udGV4dD4ge1xuICBpZiAob3B0aW9ucy5taW5WZXJzaW9uICYmICFudW1lcmljVmVyc2lvbihvcHRpb25zLm1pblZlcnNpb24sIHRydWUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW52YWxpZCBtaW5pbXVtIGJpbmFyeSB2ZXJzaW9uOiAke29wdGlvbnMubWluVmVyc2lvbn1gKTtcbiAgfVxuICBjb25zdCBkZXN0aW5hdGlvbiA9IGNvbnRleHQobmFtZSwgb3B0aW9ucy5ob21lRGlyID8/IGhvbWVkaXIoKSwgb3B0aW9ucy5kZXN0aW5hdGlvbik7XG4gIGlmIChhd2FpdCBpc1ZhbGlkQmluKGRlc3RpbmF0aW9uLnBhdGgsIG9wdGlvbnMpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwidXNpbmcgaW5zdGFsbGVkIGJpbmFyeVwiLCB7IG5hbWUsIHBhdGg6IGRlc3RpbmF0aW9uLnBhdGggfSk7XG4gICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKFwid2FpdGluZyBmb3IgYmluYXJ5IGluc3RhbGwgbG9ja1wiLCB7IG5hbWUsIHBhdGg6IGRlc3RpbmF0aW9uLnBhdGggfSk7XG4gIHJldHVybiB3aXRoRmlsZUxvY2soW1wiYmluLmVuc3VyZVwiLCBkZXN0aW5hdGlvbi5wYXRoXSwgYXN5bmMgKCkgPT4ge1xuICAgIGlmIChhd2FpdCBpc1ZhbGlkQmluKGRlc3RpbmF0aW9uLnBhdGgsIG9wdGlvbnMpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJ1c2luZyBiaW5hcnkgaW5zdGFsbGVkIGJ5IGFub3RoZXIgY2FsbGVyXCIsIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcGF0aDogZGVzdGluYXRpb24ucGF0aCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZyhcImluc3RhbGxpbmcgYmluYXJ5XCIsIHtcbiAgICAgIG5hbWUsXG4gICAgICB0bzogZGVzdGluYXRpb24ucGF0aCxcbiAgICAgIG1pblZlcnNpb246IG9wdGlvbnMubWluVmVyc2lvbixcbiAgICB9KTtcbiAgICBjb25zdCB0ZW1wID0gYXdhaXQgbWtkdGVtcChqb2luKHRtcGRpcigpLCBgJHtuYW1lfS1gKSk7XG4gICAgbGV0IHN0YWdlZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNvbHZlZCA9IHR5cGVvZiB1cmwgPT09IFwiZnVuY3Rpb25cIiA/IGF3YWl0IHVybCh7IHRlbXBEaXI6IHRlbXAgfSkgOiB1cmw7XG4gICAgICBjb25zdCBzb3VyY2UgPSB0eXBlb2YgcmVzb2x2ZWQgPT09IFwic3RyaW5nXCIgPyB7IHVybDogcmVzb2x2ZWQgfSA6IHJlc29sdmVkO1xuICAgICAgY29uc3QgZnJvbSA9IGRpc3BsYXlVcmwoc291cmNlLnVybCk7XG4gICAgICBsb2dnZXIuZGVidWcoXCJyZXNvbHZlZCBiaW5hcnkgc291cmNlXCIsIHsgbmFtZSwgZnJvbSB9KTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gYXdhaXQgc2VsZWN0ZWRCaW4oZGVzdGluYXRpb24sIHNvdXJjZSwgdGVtcCwgb3B0aW9ucyk7XG4gICAgICBhd2FpdCBjaG1vZChzZWxlY3RlZCwgMG83NTUpO1xuICAgICAgaWYgKCEoYXdhaXQgaXNWYWxpZEJpbihzZWxlY3RlZCwgb3B0aW9ucykpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgc2VsZWN0ZWQgYmluYXJ5IGhhcyBubyBhY2NlcHRhYmxlIHZlcnNpb246ICR7c2VsZWN0ZWR9YCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IG1rZGlyKGRlc3RpbmF0aW9uLmJpbkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBzdGFnZWQgPSBqb2luKGRlc3RpbmF0aW9uLmJpbkRpciwgYC4ke25hbWV9LSR7cmFuZG9tVVVJRCgpfWApO1xuICAgICAgYXdhaXQgY29weUZpbGUoc2VsZWN0ZWQsIHN0YWdlZCk7XG4gICAgICBhd2FpdCBjaG1vZChzdGFnZWQsIDBvNzU1KTtcbiAgICAgIGF3YWl0IHJlbmFtZShzdGFnZWQsIGRlc3RpbmF0aW9uLnBhdGgpO1xuICAgICAgc3RhZ2VkID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKCEoYXdhaXQgaXNWYWxpZEJpbihkZXN0aW5hdGlvbi5wYXRoLCBvcHRpb25zKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnN0YWxsZWQgYmluYXJ5IGlzIGludmFsaWQgYWZ0ZXIgcmVuYW1lOiAke2Rlc3RpbmF0aW9uLnBhdGh9YCk7XG4gICAgICB9XG4gICAgICBsb2dnZXIuaW5mbyhcImluc3RhbGxlZCBiaW5hcnlcIiwge1xuICAgICAgICBuYW1lLFxuICAgICAgICBmcm9tLFxuICAgICAgICB0bzogZGVzdGluYXRpb24ucGF0aCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoc3RhZ2VkKSBhd2FpdCBybShzdGFnZWQsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICBhd2FpdCBybSh0ZW1wLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Resolve npm dependency specifiers against the configured registry.
3
+ *
4
+ * Callers pass an already-parsed `package.json`. The function never writes that
5
+ * project: it copies the manifest into a temporary directory, proves that this
6
+ * Bun version's missing-package errors are parseable, then pins unavailable
7
+ * packages (or their parents) until `bun install` succeeds. The returned maps
8
+ * are the resolvable registry specifiers.
9
+ *
10
+ * @module
11
+ */
12
+ type InstallResult = {
13
+ ok: boolean;
14
+ stdout: string;
15
+ stderr: string;
16
+ missing: string[];
17
+ };
18
+ type PackageInfo = {
19
+ name: string;
20
+ versions: string[];
21
+ latest?: string;
22
+ dependencies: Record<string, Record<string, string>>;
23
+ };
24
+ type ResolveDependenciesOptions = {
25
+ verify?: () => Promise<void>;
26
+ install?: (manifest: Record<string, unknown>) => Promise<InstallResult>;
27
+ packageInfo?: (name: string) => Promise<PackageInfo | undefined>;
28
+ };
29
+ /** Registry dependency maps that `bun install` can resolve. */
30
+ export type ResolvedNpmDependencies = {
31
+ dependencies: Record<string, string>;
32
+ devDependencies: Record<string, string>;
33
+ optionalDependencies: Record<string, string>;
34
+ peerDependencies: Record<string, string>;
35
+ overrides: Record<string, string>;
36
+ };
37
+ /**
38
+ * Return resolvable dependency specifiers for an in-memory `package.json`.
39
+ *
40
+ * The input object is not mutated. Bun missing-package parsing is self-tested
41
+ * once per process before any install attempt.
42
+ */
43
+ export declare function resolveDependencies(manifest: Record<string, unknown>, options?: ResolveDependenciesOptions): Promise<ResolvedNpmDependencies>;
44
+ export {};
@@ -0,0 +1,367 @@
1
+ /**
2
+ * Resolve npm dependency specifiers against the configured registry.
3
+ *
4
+ * Callers pass an already-parsed `package.json`. The function never writes that
5
+ * project: it copies the manifest into a temporary directory, proves that this
6
+ * Bun version's missing-package errors are parseable, then pins unavailable
7
+ * packages (or their parents) until `bun install` succeeds. The returned maps
8
+ * are the resolvable registry specifiers.
9
+ *
10
+ * @module
11
+ */
12
+ import { randomUUID } from "node:crypto";
13
+ import { mkdtemp, rm, writeFile } from "node:fs/promises";
14
+ import { tmpdir } from "node:os";
15
+ import { delimiter, dirname, join } from "node:path";
16
+ import { functionUtils, json, object } from "@dbx-tools/shared-core";
17
+ import { spawn } from "./exec.js";
18
+ import { npmRegistry } from "./project-utils.js";
19
+ const DEPENDENCY_FIELDS = [
20
+ "dependencies",
21
+ "devDependencies",
22
+ "optionalDependencies",
23
+ "peerDependencies",
24
+ ];
25
+ const INSTALL_ARGS = ["install", "--ignore-scripts", "--no-cache"];
26
+ const MAX_ITERATIONS = 100;
27
+ /**
28
+ * Return resolvable dependency specifiers for an in-memory `package.json`.
29
+ *
30
+ * The input object is not mutated. Bun missing-package parsing is self-tested
31
+ * once per process before any install attempt.
32
+ */
33
+ export async function resolveDependencies(manifest, options = {}) {
34
+ const working = structuredClone(manifest);
35
+ await (options.verify ?? verifyBunErrorParsing)();
36
+ const install = options.install ?? installManifest;
37
+ const packageInfo = options.packageInfo ?? createPackageInfoLookup();
38
+ const attempted = new Set();
39
+ for (let iteration = 1; iteration <= MAX_ITERATIONS; iteration += 1) {
40
+ const result = await install(working);
41
+ if (result.ok)
42
+ return snapshot(working);
43
+ if (result.missing.length === 0) {
44
+ throw new Error([
45
+ "bun install failed without a parseable missing package.",
46
+ "",
47
+ "Raw Bun output:",
48
+ `${result.stdout}\n${result.stderr}`,
49
+ ].join("\n"));
50
+ }
51
+ let changed = false;
52
+ for (const missing of result.missing) {
53
+ const pin = await pinForMissing(missing, working, packageInfo, attempted);
54
+ if (pin)
55
+ changed = pinPackage(working, pin.name, pin.version) || changed;
56
+ }
57
+ if (!changed) {
58
+ throw new Error(`No remaining registry pin for: ${result.missing.join(", ")}`);
59
+ }
60
+ }
61
+ throw new Error(`Reached ${MAX_ITERATIONS} install attempts without a successful bun install.`);
62
+ }
63
+ const verifyBunErrorParsing = functionUtils.memoize(async () => {
64
+ const impossible = `__npm_resolver_missing_${randomUUID()}__`;
65
+ const result = await installManifest({
66
+ private: true,
67
+ dependencies: { [impossible]: "1.0.0" },
68
+ });
69
+ if (result.ok) {
70
+ throw new Error(`Bun self-test unexpectedly succeeded for ${impossible}`);
71
+ }
72
+ if (!result.missing.includes(impossible)) {
73
+ throw new Error([
74
+ "Bun's missing-package output is not parseable.",
75
+ "",
76
+ `Expected: ${impossible}`,
77
+ `Parsed: ${JSON.stringify(result.missing)}`,
78
+ "",
79
+ "Raw Bun output:",
80
+ `${result.stdout}\n${result.stderr}`,
81
+ ].join("\n"));
82
+ }
83
+ });
84
+ async function installManifest(manifest) {
85
+ const dir = await mkdtemp(join(tmpdir(), "npm-resolver-"));
86
+ try {
87
+ await writeFile(join(dir, "package.json"), `${JSON.stringify(manifest, null, 2)}\n`);
88
+ const [command, ...prefix] = bunArgv();
89
+ const url = registryUrl();
90
+ const registryArgs = url ? ["--registry", url] : [];
91
+ const result = await spawn(command, [...prefix, ...INSTALL_ARGS, ...registryArgs], {
92
+ cwd: dir,
93
+ stdin: "ignore",
94
+ stdout: "capture",
95
+ stderr: "capture",
96
+ env: registryEnv(),
97
+ });
98
+ const stdout = result.stdout;
99
+ const stderr = result.stderr;
100
+ return {
101
+ ok: result.exitCode === 0,
102
+ stdout,
103
+ stderr,
104
+ missing: parseMissingPackages(`${stdout}\n${stderr}`),
105
+ };
106
+ }
107
+ finally {
108
+ await rm(dir, { recursive: true, force: true });
109
+ }
110
+ }
111
+ function parseMissingPackages(output) {
112
+ const packages = new Set();
113
+ const url404 = /(?:GET|HEAD)\s+https?:\/\/[^/\s]+\/((?:@[^/\s]+(?:%2[fF]|\/)[^/?\s]+)|(?:[^/?\s]+))[^\s]*\s+-\s+404/g;
114
+ for (const match of output.matchAll(url404)) {
115
+ packages.add(decodePackageName(match[1] ?? ""));
116
+ }
117
+ const packageNotFound = /package\s+["']([^"']+)["']\s+(?:was\s+)?not\s+found/gi;
118
+ for (const match of output.matchAll(packageNotFound)) {
119
+ packages.add(match[1] ?? "");
120
+ }
121
+ const failedResolve = /failed\s+to\s+resolve\s+["']([^"']+)["']/gi;
122
+ for (const match of output.matchAll(failedResolve)) {
123
+ packages.add(stripVersion(match[1] ?? ""));
124
+ }
125
+ const failedAt = /((?:@[^/\s]+\/)?[^@\s]+)@[^\s]+\s+failed to resolve/gi;
126
+ for (const match of output.matchAll(failedAt)) {
127
+ packages.add(match[1] ?? "");
128
+ }
129
+ packages.delete("");
130
+ return [...packages];
131
+ }
132
+ function decodePackageName(value) {
133
+ let name = value;
134
+ try {
135
+ name = decodeURIComponent(name);
136
+ }
137
+ catch {
138
+ // Leave it encoded when the segment is not a valid URI component.
139
+ }
140
+ return name.replace(/%2f/gi, "/");
141
+ }
142
+ function stripVersion(value) {
143
+ if (value.startsWith("@")) {
144
+ const slash = value.indexOf("/");
145
+ const at = value.indexOf("@", slash + 1);
146
+ return at === -1 ? value : value.slice(0, at);
147
+ }
148
+ const at = value.indexOf("@");
149
+ return at === -1 ? value : value.slice(0, at);
150
+ }
151
+ function registryUrl() {
152
+ return npmRegistry(null, { overrideOnly: true, envVars: true })?.toString();
153
+ }
154
+ function registryEnv() {
155
+ const env = { ...process.env };
156
+ const runtimeBin = dirname(process.execPath);
157
+ const pathEntries = (env.PATH ?? "").split(delimiter).filter(Boolean);
158
+ if (!pathEntries.includes(runtimeBin)) {
159
+ env.PATH = [runtimeBin, ...pathEntries].join(delimiter);
160
+ }
161
+ const url = registryUrl();
162
+ if (url) {
163
+ env.npm_config_registry = url;
164
+ env.NPM_CONFIG_REGISTRY = url;
165
+ env.BUN_CONFIG_REGISTRY = url;
166
+ }
167
+ return env;
168
+ }
169
+ function bunArgv() {
170
+ return /\bbun\b/i.test(process.execPath) ? [process.execPath] : ["bun"];
171
+ }
172
+ function snapshot(manifest) {
173
+ return {
174
+ dependencies: dependencyMap(manifest, "dependencies"),
175
+ devDependencies: dependencyMap(manifest, "devDependencies"),
176
+ optionalDependencies: dependencyMap(manifest, "optionalDependencies"),
177
+ peerDependencies: dependencyMap(manifest, "peerDependencies"),
178
+ overrides: overrideMap(manifest),
179
+ };
180
+ }
181
+ function dependencyMap(manifest, field) {
182
+ const value = manifest[field];
183
+ if (!object.isRecord(value))
184
+ return {};
185
+ const out = {};
186
+ for (const [name, spec] of Object.entries(value)) {
187
+ if (typeof spec === "string")
188
+ out[name] = spec;
189
+ }
190
+ return out;
191
+ }
192
+ function declaredDependencies(manifest) {
193
+ const out = {};
194
+ for (const field of DEPENDENCY_FIELDS)
195
+ Object.assign(out, dependencyMap(manifest, field));
196
+ return out;
197
+ }
198
+ function isRegistrySpecifier(spec) {
199
+ return !/^(workspace:|catalog:|file:|link:|git\+|github:|https?:|npm:)/i.test(spec);
200
+ }
201
+ function overrideMap(manifest) {
202
+ const value = manifest.overrides;
203
+ if (!object.isRecord(value))
204
+ return {};
205
+ const out = {};
206
+ for (const [name, spec] of Object.entries(value)) {
207
+ if (typeof spec === "string")
208
+ out[name] = spec;
209
+ }
210
+ return out;
211
+ }
212
+ function pinPackage(manifest, name, version) {
213
+ let changed = false;
214
+ const overrides = overrideMap(manifest);
215
+ if (overrides[name] !== version) {
216
+ overrides[name] = version;
217
+ manifest.overrides = overrides;
218
+ changed = true;
219
+ }
220
+ for (const field of DEPENDENCY_FIELDS) {
221
+ const deps = dependencyMap(manifest, field);
222
+ if (name in deps && deps[name] !== version && isRegistrySpecifier(deps[name] ?? "")) {
223
+ deps[name] = version;
224
+ manifest[field] = deps;
225
+ changed = true;
226
+ }
227
+ }
228
+ return changed;
229
+ }
230
+ function newestFirst(versions) {
231
+ return [...versions].sort((left, right) => right.localeCompare(left, undefined, { numeric: true, sensitivity: "base" }));
232
+ }
233
+ async function pinForMissing(missing, manifest, packageInfo, attempted) {
234
+ const available = await packageInfo(missing);
235
+ if (available) {
236
+ const version = nextUnusedVersion(missing, available, attempted);
237
+ if (version) {
238
+ attempted.add(`${missing}@${version}`);
239
+ return { name: missing, version };
240
+ }
241
+ }
242
+ for (const parent of await parentPackages(missing, manifest, packageInfo)) {
243
+ const info = await packageInfo(parent);
244
+ if (!info)
245
+ continue;
246
+ const version = compatibleParentVersion(missing, info, attempted);
247
+ if (!version)
248
+ continue;
249
+ attempted.add(`${parent}@${version}`);
250
+ return { name: parent, version };
251
+ }
252
+ return undefined;
253
+ }
254
+ function nextUnusedVersion(name, info, attempted) {
255
+ const preferred = info.latest
256
+ ? [info.latest, ...newestFirst(info.versions)]
257
+ : newestFirst(info.versions);
258
+ for (const version of preferred) {
259
+ if (!attempted.has(`${name}@${version}`))
260
+ return version;
261
+ }
262
+ return undefined;
263
+ }
264
+ function compatibleParentVersion(missing, info, attempted) {
265
+ for (const version of newestFirst(info.versions)) {
266
+ if (attempted.has(`${info.name}@${version}`))
267
+ continue;
268
+ if (!(missing in (info.dependencies[version] ?? {})))
269
+ return version;
270
+ }
271
+ return undefined;
272
+ }
273
+ async function parentPackages(missing, manifest, packageInfo) {
274
+ const declared = declaredDependencies(manifest);
275
+ if (missing in declared && isRegistrySpecifier(declared[missing] ?? ""))
276
+ return [];
277
+ const parents = [];
278
+ for (const name of Object.keys(declared)) {
279
+ if (name === missing || !isRegistrySpecifier(declared[name] ?? ""))
280
+ continue;
281
+ const info = await packageInfo(name);
282
+ if (!info)
283
+ continue;
284
+ if (Object.values(info.dependencies).some((map) => missing in map))
285
+ parents.push(name);
286
+ }
287
+ return parents;
288
+ }
289
+ function createPackageInfoLookup() {
290
+ const cache = new Map();
291
+ return (name) => {
292
+ const cached = cache.get(name);
293
+ if (cached)
294
+ return cached;
295
+ const pending = loadPackageInfo(name);
296
+ cache.set(name, pending);
297
+ void pending.then(undefined, () => {
298
+ cache.delete(name);
299
+ });
300
+ return pending;
301
+ };
302
+ }
303
+ async function loadPackageInfo(name) {
304
+ const result = await spawn("npm", ["view", name, "--json"], {
305
+ stdin: "ignore",
306
+ stdout: "capture",
307
+ stderr: "capture",
308
+ env: registryEnv(),
309
+ });
310
+ if (result.exitCode !== 0)
311
+ return undefined;
312
+ const packument = json.parse(result.stdout);
313
+ if (!object.isRecord(packument))
314
+ return undefined;
315
+ const versions = publishedVersions(packument);
316
+ if (versions.length === 0)
317
+ return undefined;
318
+ return {
319
+ name,
320
+ versions,
321
+ latest: latestTag(packument) ?? versions.at(-1),
322
+ dependencies: versionDependencies(packument),
323
+ };
324
+ }
325
+ function publishedVersions(packument) {
326
+ if (typeof packument.version === "string" && !packument.versions) {
327
+ return [packument.version];
328
+ }
329
+ const versions = packument.versions;
330
+ if (Array.isArray(versions)) {
331
+ return versions.filter((value) => typeof value === "string");
332
+ }
333
+ if (object.isRecord(versions))
334
+ return Object.keys(versions);
335
+ return [];
336
+ }
337
+ function latestTag(packument) {
338
+ const tags = packument["dist-tags"];
339
+ if (!object.isRecord(tags) || typeof tags.latest !== "string")
340
+ return undefined;
341
+ return tags.latest;
342
+ }
343
+ function versionDependencies(packument) {
344
+ const versions = packument.versions;
345
+ if (!object.isRecord(versions)) {
346
+ return typeof packument.version === "string"
347
+ ? { [packument.version]: stringMap(packument.dependencies) }
348
+ : {};
349
+ }
350
+ const out = {};
351
+ for (const [version, value] of Object.entries(versions)) {
352
+ if (object.isRecord(value))
353
+ out[version] = stringMap(value.dependencies);
354
+ }
355
+ return out;
356
+ }
357
+ function stringMap(value) {
358
+ if (!object.isRecord(value))
359
+ return {};
360
+ const out = {};
361
+ for (const [name, spec] of Object.entries(value)) {
362
+ if (typeof spec === "string")
363
+ out[name] = spec;
364
+ }
365
+ return out;
366
+ }
367
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25wbS1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRCxNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsc0JBQXNCO0lBQ3RCLGtCQUFrQjtDQUNWLENBQUM7QUFFWCxNQUFNLFlBQVksR0FBRyxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLENBQVUsQ0FBQztBQUM1RSxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFpQzNCOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsUUFBaUMsRUFDakMsVUFBc0MsRUFBRTtJQUV4QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUkscUJBQXFCLENBQUMsRUFBRSxDQUFDO0lBQ2xELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksZUFBZSxDQUFDO0lBQ25E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QU8sRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDeEQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxLQUFjO0lBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3ZDLE1BQU0sR0FBRyxHQUEyQixFQUFFLENBQUM7SUFDdkMsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2pELENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlc29sdmUgbnBtIGRlcGVuZGVuY3kgc3BlY2lmaWVycyBhZ2FpbnN0IHRoZSBjb25maWd1cmVkIHJlZ2lzdHJ5LlxuICpcbiAqIENhbGxlcnMgcGFzcyBhbiBhbHJlYWR5LXBhcnNlZCBgcGFja2FnZS5qc29uYC4gVGhlIGZ1bmN0aW9uIG5ldmVyIHdyaXRlcyB0aGF0XG4gKiBwcm9qZWN0OiBpdCBjb3BpZXMgdGhlIG1hbmlmZXN0IGludG8gYSB0ZW1wb3JhcnkgZGlyZWN0b3J5LCBwcm92ZXMgdGhhdCB0aGlzXG4gKiBCdW4gdmVyc2lvbidzIG1pc3NpbmctcGFja2FnZSBlcnJvcnMgYXJlIHBhcnNlYWJsZSwgdGhlbiBwaW5zIHVuYXZhaWxhYmxlXG4gKiBwYWNrYWdlcyAob3IgdGhlaXIgcGFyZW50cykgdW50aWwgYGJ1biBpbnN0YWxsYCBzdWNjZWVkcy4gVGhlIHJldHVybmVkIG1hcHNcbiAqIGFyZSB0aGUgcmVzb2x2YWJsZSByZWdpc3RyeSBzcGVjaWZpZXJzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyBta2R0ZW1wLCBybSwgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBkZWxpbWl0ZXIsIGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmltcG9ydCB7IGZ1bmN0aW9uVXRpbHMsIGpzb24sIG9iamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIi4vZXhlYy50c1wiO1xuaW1wb3J0IHsgbnBtUmVnaXN0cnkgfSBmcm9tIFwiLi9wcm9qZWN0LXV0aWxzLnRzXCI7XG5cbmNvbnN0IERFUEVOREVOQ1lfRklFTERTID0gW1xuICBcImRlcGVuZGVuY2llc1wiLFxuICBcImRldkRlcGVuZGVuY2llc1wiLFxuICBcIm9wdGlvbmFsRGVwZW5kZW5jaWVzXCIsXG4gIFwicGVlckRlcGVuZGVuY2llc1wiLFxuXSBhcyBjb25zdDtcblxuY29uc3QgSU5TVEFMTF9BUkdTID0gW1wiaW5zdGFsbFwiLCBcIi0taWdub3JlLXNjcmlwdHNcIiwgXCItLW5vLWNhY2hlXCJdIGFzIGNvbnN0O1xuY29uc3QgTUFYX0lURVJBVElPTlMgPSAxMDA7XG5cbnR5cGUgRGVwZW5kZW5jeUZpZWxkID0gKHR5cGVvZiBERVBFTkRFTkNZX0ZJRUxEUylbbnVtYmVyXTtcblxudHlwZSBJbnN0YWxsUmVzdWx0ID0ge1xuICBvazogYm9vbGVhbjtcbiAgc3Rkb3V0OiBzdHJpbmc7XG4gIHN0ZGVycjogc3RyaW5nO1xuICBtaXNzaW5nOiBzdHJpbmdbXTtcbn07XG5cbnR5cGUgUGFja2FnZUluZm8gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbnM6IHN0cmluZ1tdO1xuICBsYXRlc3Q/OiBzdHJpbmc7XG4gIGRlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG59O1xuXG50eXBlIFJlc29sdmVEZXBlbmRlbmNpZXNPcHRpb25zID0ge1xuICB2ZXJpZnk/OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBpbnN0YWxsPzogKG1hbmlmZXN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gUHJvbWlzZTxJbnN0YWxsUmVzdWx0PjtcbiAgcGFja2FnZUluZm8/OiAobmFtZTogc3RyaW5nKSA9PiBQcm9taXNlPFBhY2thZ2VJbmZvIHwgdW5kZWZpbmVkPjtcbn07XG5cbi8qKiBSZWdpc3RyeSBkZXBlbmRlbmN5IG1hcHMgdGhhdCBgYnVuIGluc3RhbGxgIGNhbiByZXNvbHZlLiAqL1xuZXhwb3J0IHR5cGUgUmVzb2x2ZWROcG1EZXBlbmRlbmNpZXMgPSB7XG4gIGRlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZGV2RGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBvcHRpb25hbERlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcGVlckRlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgb3ZlcnJpZGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuLyoqXG4gKiBSZXR1cm4gcmVzb2x2YWJsZSBkZXBlbmRlbmN5IHNwZWNpZmllcnMgZm9yIGFuIGluLW1lbW9yeSBgcGFja2FnZS5qc29uYC5cbiAqXG4gKiBUaGUgaW5wdXQgb2JqZWN0IGlzIG5vdCBtdXRhdGVkLiBCdW4gbWlzc2luZy1wYWNrYWdlIHBhcnNpbmcgaXMgc2VsZi10ZXN0ZWRcbiAqIG9uY2UgcGVyIHByb2Nlc3MgYmVmb3JlIGFueSBpbnN0YWxsIGF0dGVtcHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlRGVwZW5kZW5jaWVzKFxuICBtYW5pZmVzdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIG9wdGlvbnM6IFJlc29sdmVEZXBlbmRlbmNpZXNPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPFJlc29sdmVkTnBtRGVwZW5kZW5jaWVzPiB7XG4gIGNvbnN0IHdvcmtpbmcgPSBzdHJ1Y3R1cmVkQ2xvbmUobWFuaWZlc3QpO1xuICBhd2FpdCAob3B0aW9ucy52ZXJpZnkgPz8gdmVyaWZ5QnVuRXJyb3JQYXJzaW5nKSgpO1xuICBjb25zdCBpbnN0YWxsID0gb3B0aW9ucy5pbnN0YWxsID8/IGluc3RhbGxNYW5pZmVzdDtcbiAgY29uc3QgcGFja2FnZUluZm8gPSBvcHRpb25zLnBhY2thZ2VJbmZvID8/IGNyZWF0ZVBhY2thZ2VJbmZvTG9va3VwKCk7XG4gIGNvbnN0IGF0dGVtcHRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGZvciAobGV0IGl0ZXJhdGlvbiA9IDE7IGl0ZXJhdGlvbiA8PSBNQVhfSVRFUkFUSU9OUzsgaXRlcmF0aW9uICs9IDEpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbnN0YWxsKHdvcmtpbmcpO1xuICAgIGlmIChyZXN1bHQub2spIHJldHVybiBzbmFwc2hvdCh3b3JraW5nKTtcbiAgICBpZiAocmVzdWx0Lm1pc3NpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFtcbiAgICAgICAgICBcImJ1biBpbnN0YWxsIGZhaWxlZCB3aXRob3V0IGEgcGFyc2VhYmxlIG1pc3NpbmcgcGFja2FnZS5cIixcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIFwiUmF3IEJ1biBvdXRwdXQ6XCIsXG4gICAgICAgICAgYCR7cmVzdWx0LnN0ZG91dH1cXG4ke3Jlc3VsdC5zdGRlcnJ9YCxcbiAgICAgICAgXS5qb2luKFwiXFxuXCIpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgbWlzc2luZyBvZiByZXN1bHQubWlzc2luZykge1xuICAgICAgY29uc3QgcGluID0gYXdhaXQgcGluRm9yTWlzc2luZyhtaXNzaW5nLCB3b3JraW5nLCBwYWNrYWdlSW5mbywgYXR0ZW1wdGVkKTtcbiAgICAgIGlmIChwaW4pIGNoYW5nZWQgPSBwaW5QYWNrYWdlKHdvcmtpbmcsIHBpbi5uYW1lLCBwaW4udmVyc2lvbikgfHwgY2hhbmdlZDtcbiAgICB9XG4gICAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJlbWFpbmluZyByZWdpc3RyeSBwaW4gZm9yOiAke3Jlc3VsdC5taXNzaW5nLmpvaW4oXCIsIFwiKX1gKTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYFJlYWNoZWQgJHtNQVhfSVRFUkFUSU9OU30gaW5zdGFsbCBhdHRlbXB0cyB3aXRob3V0IGEgc3VjY2Vzc2Z1bCBidW4gaW5zdGFsbC5gKTtcbn1cblxuY29uc3QgdmVyaWZ5QnVuRXJyb3JQYXJzaW5nID0gZnVuY3Rpb25VdGlscy5tZW1vaXplKGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgaW1wb3NzaWJsZSA9IGBfX25wbV9yZXNvbHZlcl9taXNzaW5nXyR7cmFuZG9tVVVJRCgpfV9fYDtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5zdGFsbE1hbmlmZXN0KHtcbiAgICBwcml2YXRlOiB0cnVlLFxuICAgIGRlcGVuZGVuY2llczogeyBbaW1wb3NzaWJsZV06IFwiMS4wLjBcIiB9LFxuICB9KTtcbiAgaWYgKHJlc3VsdC5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgQnVuIHNlbGYtdGVzdCB1bmV4cGVjdGVkbHkgc3VjY2VlZGVkIGZvciAke2ltcG9zc2libGV9YCk7XG4gIH1cbiAgaWYgKCFyZXN1bHQubWlzc2luZy5pbmNsdWRlcyhpbXBvc3NpYmxlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFtcbiAgICAgICAgXCJCdW4ncyBtaXNzaW5nLXBhY2thZ2Ugb3V0cHV0IGlzIG5vdCBwYXJzZWFibGUuXCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIGBFeHBlY3RlZDogJHtpbXBvc3NpYmxlfWAsXG4gICAgICAgIGBQYXJzZWQ6ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0Lm1pc3NpbmcpfWAsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFwiUmF3IEJ1biBvdXRwdXQ6XCIsXG4gICAgICAgIGAke3Jlc3VsdC5zdGRvdXR9XFxuJHtyZXN1bHQuc3RkZXJyfWAsXG4gICAgICBdLmpvaW4oXCJcXG5cIiksXG4gICAgKTtcbiAgfVxufSk7XG5cbmFzeW5jIGZ1bmN0aW9uIGluc3RhbGxNYW5pZmVzdChtYW5pZmVzdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPEluc3RhbGxSZXN1bHQ+IHtcbiAgY29uc3QgZGlyID0gYXdhaXQgbWtkdGVtcChqb2luKHRtcGRpcigpLCBcIm5wbS1yZXNvbHZlci1cIikpO1xuICB0cnkge1xuICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKGRpciwgXCJwYWNrYWdlLmpzb25cIiksIGAke0pTT04uc3RyaW5naWZ5KG1hbmlmZXN0LCBudWxsLCAyKX1cXG5gKTtcbiAgICBjb25zdCBbY29tbWFuZCwgLi4ucHJlZml4XSA9IGJ1bkFyZ3YoKTtcbiAgICBjb25zdCB1cmwgPSByZWdpc3RyeVVybCgpO1xuICAgIGNvbnN0IHJlZ2lzdHJ5QXJncyA9IHVybCA/IFtcIi0tcmVnaXN0cnlcIiwgdXJsXSA6IFtdO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNwYXduKGNvbW1hbmQsIFsuLi5wcmVmaXgsIC4uLklOU1RBTExfQVJHUywgLi4ucmVnaXN0cnlBcmdzXSwge1xuICAgICAgY3dkOiBkaXIsXG4gICAgICBzdGRpbjogXCJpZ25vcmVcIixcbiAgICAgIHN0ZG91dDogXCJjYXB0dXJlXCIsXG4gICAgICBzdGRlcnI6IFwiY2FwdHVyZVwiLFxuICAgICAgZW52OiByZWdpc3RyeUVudigpLFxuICAgIH0pO1xuICAgIGNvbnN0IHN0ZG91dCA9IHJlc3VsdC5zdGRvdXQ7XG4gICAgY29uc3Qgc3RkZXJyID0gcmVzdWx0LnN0ZGVycjtcbiAgICByZXR1cm4ge1xuICAgICAgb2s6IHJlc3VsdC5leGl0Q29kZSA9PT0gMCxcbiAgICAgIHN0ZG91dCxcbiAgICAgIHN0ZGVycixcbiAgICAgIG1pc3Npbmc6IHBhcnNlTWlzc2luZ1BhY2thZ2VzKGAke3N0ZG91dH1cXG4ke3N0ZGVycn1gKSxcbiAgICB9O1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJtKGRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWlzc2luZ1BhY2thZ2VzKG91dHB1dDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBwYWNrYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB1cmw0MDQgPVxuICAgIC8oPzpHRVR8SEVBRClcXHMraHR0cHM/OlxcL1xcL1teL1xcc10rXFwvKCg/OkBbXi9cXHNdKyg/OiUyW2ZGXXxcXC8pW14vP1xcc10rKXwoPzpbXi8/XFxzXSspKVteXFxzXSpcXHMrLVxccys0MDQvZztcbiAgZm9yIChjb25zdCBtYXRjaCBvZiBvdXRwdXQubWF0Y2hBbGwodXJsNDA0KSkge1xuICAgIHBhY2thZ2VzLmFkZChkZWNvZGVQYWNrYWdlTmFtZShtYXRjaFsxXSA/PyBcIlwiKSk7XG4gIH1cbiAgY29uc3QgcGFja2FnZU5vdEZvdW5kID0gL3BhY2thZ2VcXHMrW1wiJ10oW15cIiddKylbXCInXVxccysoPzp3YXNcXHMrKT9ub3RcXHMrZm91bmQvZ2k7XG4gIGZvciAoY29uc3QgbWF0Y2ggb2Ygb3V0cHV0Lm1hdGNoQWxsKHBhY2thZ2VOb3RGb3VuZCkpIHtcbiAgICBwYWNrYWdlcy5hZGQobWF0Y2hbMV0gPz8gXCJcIik7XG4gIH1cbiAgY29uc3QgZmFpbGVkUmVzb2x2ZSA9IC9mYWlsZWRcXHMrdG9cXHMrcmVzb2x2ZVxccytbXCInXShbXlwiJ10rKVtcIiddL2dpO1xuICBmb3IgKGNvbnN0IG1hdGNoIG9mIG91dHB1dC5tYXRjaEFsbChmYWlsZWRSZXNvbHZlKSkge1xuICAgIHBhY2thZ2VzLmFkZChzdHJpcFZlcnNpb24obWF0Y2hbMV0gPz8gXCJcIikpO1xuICB9XG4gIGNvbnN0IGZhaWxlZEF0ID0gLygoPzpAW14vXFxzXStcXC8pP1teQFxcc10rKUBbXlxcc10rXFxzK2ZhaWxlZCB0byByZXNvbHZlL2dpO1xuICBmb3IgKGNvbnN0IG1hdGNoIG9mIG91dHB1dC5tYXRjaEFsbChmYWlsZWRBdCkpIHtcbiAgICBwYWNrYWdlcy5hZGQobWF0Y2hbMV0gPz8gXCJcIik7XG4gIH1cbiAgcGFja2FnZXMuZGVsZXRlKFwiXCIpO1xuICByZXR1cm4gWy4uLnBhY2thZ2VzXTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlUGFja2FnZU5hbWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBuYW1lID0gdmFsdWU7XG4gIHRyeSB7XG4gICAgbmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChuYW1lKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gTGVhdmUgaXQgZW5jb2RlZCB3aGVuIHRoZSBzZWdtZW50IGlzIG5vdCBhIHZhbGlkIFVSSSBjb21wb25lbnQuXG4gIH1cbiAgcmV0dXJuIG5hbWUucmVwbGFjZSgvJTJmL2dpLCBcIi9cIik7XG59XG5cbmZ1bmN0aW9uIHN0cmlwVmVyc2lvbih2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJAXCIpKSB7XG4gICAgY29uc3Qgc2xhc2ggPSB2YWx1ZS5pbmRleE9mKFwiL1wiKTtcbiAgICBjb25zdCBhdCA9IHZhbHVlLmluZGV4T2YoXCJAXCIsIHNsYXNoICsgMSk7XG4gICAgcmV0dXJuIGF0ID09PSAtMSA/IHZhbHVlIDogdmFsdWUuc2xpY2UoMCwgYXQpO1xuICB9XG4gIGNvbnN0IGF0ID0gdmFsdWUuaW5kZXhPZihcIkBcIik7XG4gIHJldHVybiBhdCA9PT0gLTEgPyB2YWx1ZSA6IHZhbHVlLnNsaWNlKDAsIGF0KTtcbn1cblxuZnVuY3Rpb24gcmVnaXN0cnlVcmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIG5wbVJlZ2lzdHJ5KG51bGwsIHsgb3ZlcnJpZGVPbmx5OiB0cnVlLCBlbnZWYXJzOiB0cnVlIH0pPy50b1N0cmluZygpO1xufVxuXG5mdW5jdGlvbiByZWdpc3RyeUVudigpOiBOb2RlSlMuUHJvY2Vzc0VudiB7XG4gIGNvbnN0IGVudjogTm9kZUpTLlByb2Nlc3NFbnYgPSB7IC4uLnByb2Nlc3MuZW52IH07XG4gIGNvbnN0IHJ1bnRpbWVCaW4gPSBkaXJuYW1lKHByb2Nlc3MuZXhlY1BhdGgpO1xuICBjb25zdCBwYXRoRW50cmllcyA9IChlbnYuUEFUSCA/PyBcIlwiKS5zcGxpdChkZWxpbWl0ZXIpLmZpbHRlcihCb29sZWFuKTtcbiAgaWYgKCFwYXRoRW50cmllcy5pbmNsdWRlcyhydW50aW1lQmluKSkge1xuICAgIGVudi5QQVRIID0gW3J1bnRpbWVCaW4sIC4uLnBhdGhFbnRyaWVzXS5qb2luKGRlbGltaXRlcik7XG4gIH1cbiAgY29uc3QgdXJsID0gcmVnaXN0cnlVcmwoKTtcbiAgaWYgKHVybCkge1xuICAgIGVudi5ucG1fY29uZmlnX3JlZ2lzdHJ5ID0gdXJsO1xuICAgIGVudi5OUE1fQ09ORklHX1JFR0lTVFJZID0gdXJsO1xuICAgIGVudi5CVU5fQ09ORklHX1JFR0lTVFJZID0gdXJsO1xuICB9XG4gIHJldHVybiBlbnY7XG59XG5cbmZ1bmN0aW9uIGJ1bkFyZ3YoKTogc3RyaW5nW10ge1xuICByZXR1cm4gL1xcYmJ1blxcYi9pLnRlc3QocHJvY2Vzcy5leGVjUGF0aCkgPyBbcHJvY2Vzcy5leGVjUGF0aF0gOiBbXCJidW5cIl07XG59XG5cbmZ1bmN0aW9uIHNuYXBzaG90KG1hbmlmZXN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlc29sdmVkTnBtRGVwZW5kZW5jaWVzIHtcbiAgcmV0dXJuIHtcbiAgICBkZXBlbmRlbmNpZXM6IGRlcGVuZGVuY3lNYXAobWFuaWZlc3QsIFwiZGVwZW5kZW5jaWVzXCIpLFxuICAgIGRldkRlcGVuZGVuY2llczogZGVwZW5kZW5jeU1hcChtYW5pZmVzdCwgXCJkZXZEZXBlbmRlbmNpZXNcIiksXG4gICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IGRlcGVuZGVuY3lNYXAobWFuaWZlc3QsIFwib3B0aW9uYWxEZXBlbmRlbmNpZXNcIiksXG4gICAgcGVlckRlcGVuZGVuY2llczogZGVwZW5kZW5jeU1hcChtYW5pZmVzdCwgXCJwZWVyRGVwZW5kZW5jaWVzXCIpLFxuICAgIG92ZXJyaWRlczogb3ZlcnJpZGVNYXAobWFuaWZlc3QpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBkZXBlbmRlbmN5TWFwKFxuICBtYW5pZmVzdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGZpZWxkOiBEZXBlbmRlbmN5RmllbGQsXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgdmFsdWUgPSBtYW5pZmVzdFtmaWVsZF07XG4gIGlmICghb2JqZWN0LmlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIHt9O1xuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBbbmFtZSwgc3BlY10gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgaWYgKHR5cGVvZiBzcGVjID09PSBcInN0cmluZ1wiKSBvdXRbbmFtZV0gPSBzcGVjO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIGRlY2xhcmVkRGVwZW5kZW5jaWVzKG1hbmlmZXN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBmaWVsZCBvZiBERVBFTkRFTkNZX0ZJRUxEUykgT2JqZWN0LmFzc2lnbihvdXQsIGRlcGVuZGVuY3lNYXAobWFuaWZlc3QsIGZpZWxkKSk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIGlzUmVnaXN0cnlTcGVjaWZpZXIoc3BlYzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAhL14od29ya3NwYWNlOnxjYXRhbG9nOnxmaWxlOnxsaW5rOnxnaXRcXCt8Z2l0aHViOnxodHRwcz86fG5wbTopL2kudGVzdChzcGVjKTtcbn1cblxuZnVuY3Rpb24gb3ZlcnJpZGVNYXAobWFuaWZlc3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHZhbHVlID0gbWFuaWZlc3Qub3ZlcnJpZGVzO1xuICBpZiAoIW9iamVjdC5pc1JlY29yZCh2YWx1ZSkpIHJldHVybiB7fTtcbiAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW25hbWUsIHNwZWNdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgIGlmICh0eXBlb2Ygc3BlYyA9PT0gXCJzdHJpbmdcIikgb3V0W25hbWVdID0gc3BlYztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBwaW5QYWNrYWdlKG1hbmlmZXN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgbmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgY29uc3Qgb3ZlcnJpZGVzID0gb3ZlcnJpZGVNYXAobWFuaWZlc3QpO1xuICBpZiAob3ZlcnJpZGVzW25hbWVdICE9PSB2ZXJzaW9uKSB7XG4gICAgb3ZlcnJpZGVzW25hbWVdID0gdmVyc2lvbjtcbiAgICBtYW5pZmVzdC5vdmVycmlkZXMgPSBvdmVycmlkZXM7XG4gICAgY2hhbmdlZCA9IHRydWU7XG4gIH1cbiAgZm9yIChjb25zdCBmaWVsZCBvZiBERVBFTkRFTkNZX0ZJRUxEUykge1xuICAgIGNvbnN0IGRlcHMgPSBkZXBlbmRlbmN5TWFwKG1hbmlmZXN0LCBmaWVsZCk7XG4gICAgaWYgKG5hbWUgaW4gZGVwcyAmJiBkZXBzW25hbWVdICE9PSB2ZXJzaW9uICYmIGlzUmVnaXN0cnlTcGVjaWZpZXIoZGVwc1tuYW1lXSA/PyBcIlwiKSkge1xuICAgICAgZGVwc1tuYW1lXSA9IHZlcnNpb247XG4gICAgICBtYW5pZmVzdFtmaWVsZF0gPSBkZXBzO1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGFuZ2VkO1xufVxuXG5mdW5jdGlvbiBuZXdlc3RGaXJzdCh2ZXJzaW9uczogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4udmVyc2lvbnNdLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PlxuICAgIHJpZ2h0LmxvY2FsZUNvbXBhcmUobGVmdCwgdW5kZWZpbmVkLCB7IG51bWVyaWM6IHRydWUsIHNlbnNpdGl2aXR5OiBcImJhc2VcIiB9KSxcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGluRm9yTWlzc2luZyhcbiAgbWlzc2luZzogc3RyaW5nLFxuICBtYW5pZmVzdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHBhY2thZ2VJbmZvOiAobmFtZTogc3RyaW5nKSA9PiBQcm9taXNlPFBhY2thZ2VJbmZvIHwgdW5kZWZpbmVkPixcbiAgYXR0ZW1wdGVkOiBTZXQ8c3RyaW5nPixcbik6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9IHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IGF2YWlsYWJsZSA9IGF3YWl0IHBhY2thZ2VJbmZvKG1pc3NpbmcpO1xuICBpZiAoYXZhaWxhYmxlKSB7XG4gICAgY29uc3QgdmVyc2lvbiA9IG5leHRVbnVzZWRWZXJzaW9uKG1pc3NpbmcsIGF2YWlsYWJsZSwgYXR0ZW1wdGVkKTtcbiAgICBpZiAodmVyc2lvbikge1xuICAgICAgYXR0ZW1wdGVkLmFkZChgJHttaXNzaW5nfUAke3ZlcnNpb259YCk7XG4gICAgICByZXR1cm4geyBuYW1lOiBtaXNzaW5nLCB2ZXJzaW9uIH07XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBwYXJlbnQgb2YgYXdhaXQgcGFyZW50UGFja2FnZXMobWlzc2luZywgbWFuaWZlc3QsIHBhY2thZ2VJbmZvKSkge1xuICAgIGNvbnN0IGluZm8gPSBhd2FpdCBwYWNrYWdlSW5mbyhwYXJlbnQpO1xuICAgIGlmICghaW5mbykgY29udGludWU7XG4gICAgY29uc3QgdmVyc2lvbiA9IGNvbXBhdGlibGVQYXJlbnRWZXJzaW9uKG1pc3NpbmcsIGluZm8sIGF0dGVtcHRlZCk7XG4gICAgaWYgKCF2ZXJzaW9uKSBjb250aW51ZTtcbiAgICBhdHRlbXB0ZWQuYWRkKGAke3BhcmVudH1AJHt2ZXJzaW9ufWApO1xuICAgIHJldHVybiB7IG5hbWU6IHBhcmVudCwgdmVyc2lvbiB9O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIG5leHRVbnVzZWRWZXJzaW9uKFxuICBuYW1lOiBzdHJpbmcsXG4gIGluZm86IFBhY2thZ2VJbmZvLFxuICBhdHRlbXB0ZWQ6IFNldDxzdHJpbmc+LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcHJlZmVycmVkID0gaW5mby5sYXRlc3RcbiAgICA/IFtpbmZvLmxhdGVzdCwgLi4ubmV3ZXN0Rmlyc3QoaW5mby52ZXJzaW9ucyldXG4gICAgOiBuZXdlc3RGaXJzdChpbmZvLnZlcnNpb25zKTtcbiAgZm9yIChjb25zdCB2ZXJzaW9uIG9mIHByZWZlcnJlZCkge1xuICAgIGlmICghYXR0ZW1wdGVkLmhhcyhgJHtuYW1lfUAke3ZlcnNpb259YCkpIHJldHVybiB2ZXJzaW9uO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNvbXBhdGlibGVQYXJlbnRWZXJzaW9uKFxuICBtaXNzaW5nOiBzdHJpbmcsXG4gIGluZm86IFBhY2thZ2VJbmZvLFxuICBhdHRlbXB0ZWQ6IFNldDxzdHJpbmc+LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCB2ZXJzaW9uIG9mIG5ld2VzdEZpcnN0KGluZm8udmVyc2lvbnMpKSB7XG4gICAgaWYgKGF0dGVtcHRlZC5oYXMoYCR7aW5mby5uYW1lfUAke3ZlcnNpb259YCkpIGNvbnRpbnVlO1xuICAgIGlmICghKG1pc3NpbmcgaW4gKGluZm8uZGVwZW5kZW5jaWVzW3ZlcnNpb25dID8/IHt9KSkpIHJldHVybiB2ZXJzaW9uO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhcmVudFBhY2thZ2VzKFxuICBtaXNzaW5nOiBzdHJpbmcsXG4gIG1hbmlmZXN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgcGFja2FnZUluZm86IChuYW1lOiBzdHJpbmcpID0+IFByb21pc2U8UGFja2FnZUluZm8gfCB1bmRlZmluZWQ+LFxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBkZWNsYXJlZCA9IGRlY2xhcmVkRGVwZW5kZW5jaWVzKG1hbmlmZXN0KTtcbiAgaWYgKG1pc3NpbmcgaW4gZGVjbGFyZWQgJiYgaXNSZWdpc3RyeVNwZWNpZmllcihkZWNsYXJlZFttaXNzaW5nXSA/PyBcIlwiKSkgcmV0dXJuIFtdO1xuICBjb25zdCBwYXJlbnRzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoZGVjbGFyZWQpKSB7XG4gICAgaWYgKG5hbWUgPT09IG1pc3NpbmcgfHwgIWlzUmVnaXN0cnlTcGVjaWZpZXIoZGVjbGFyZWRbbmFtZV0gPz8gXCJcIikpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGluZm8gPSBhd2FpdCBwYWNrYWdlSW5mbyhuYW1lKTtcbiAgICBpZiAoIWluZm8pIGNvbnRpbnVlO1xuICAgIGlmIChPYmplY3QudmFsdWVzKGluZm8uZGVwZW5kZW5jaWVzKS5zb21lKChtYXApID0+IG1pc3NpbmcgaW4gbWFwKSkgcGFyZW50cy5wdXNoKG5hbWUpO1xuICB9XG4gIHJldHVybiBwYXJlbnRzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQYWNrYWdlSW5mb0xvb2t1cCgpOiAobmFtZTogc3RyaW5nKSA9PiBQcm9taXNlPFBhY2thZ2VJbmZvIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8UGFja2FnZUluZm8gfCB1bmRlZmluZWQ+PigpO1xuICByZXR1cm4gKG5hbWUpID0+IHtcbiAgICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXQobmFtZSk7XG4gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcbiAgICBjb25zdCBwZW5kaW5nID0gbG9hZFBhY2thZ2VJbmZvKG5hbWUpO1xuICAgIGNhY2hlLnNldChuYW1lLCBwZW5kaW5nKTtcbiAgICB2b2lkIHBlbmRpbmcudGhlbih1bmRlZmluZWQsICgpID0+IHtcbiAgICAgIGNhY2hlLmRlbGV0ZShuYW1lKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcGVuZGluZztcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZFBhY2thZ2VJbmZvKG5hbWU6IHN0cmluZyk6IFByb21pc2U8UGFja2FnZUluZm8gfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3Bhd24oXCJucG1cIiwgW1widmlld1wiLCBuYW1lLCBcIi0tanNvblwiXSwge1xuICAgIHN0ZGluOiBcImlnbm9yZVwiLFxuICAgIHN0ZG91dDogXCJjYXB0dXJlXCIsXG4gICAgc3RkZXJyOiBcImNhcHR1cmVcIixcbiAgICBlbnY6IHJlZ2lzdHJ5RW52KCksXG4gIH0pO1xuICBpZiAocmVzdWx0LmV4aXRDb2RlICE9PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBwYWNrdW1lbnQgPSBqc29uLnBhcnNlKHJlc3VsdC5zdGRvdXQpO1xuICBpZiAoIW9iamVjdC5pc1JlY29yZChwYWNrdW1lbnQpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB2ZXJzaW9ucyA9IHB1Ymxpc2hlZFZlcnNpb25zKHBhY2t1bWVudCk7XG4gIGlmICh2ZXJzaW9ucy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB7XG4gICAgbmFtZSxcbiAgICB2ZXJzaW9ucyxcbiAgICBsYXRlc3Q6IGxhdGVzdFRhZyhwYWNrdW1lbnQpID8/IHZlcnNpb25zLmF0KC0xKSxcbiAgICBkZXBlbmRlbmNpZXM6IHZlcnNpb25EZXBlbmRlbmNpZXMocGFja3VtZW50KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHVibGlzaGVkVmVyc2lvbnMocGFja3VtZW50OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZ1tdIHtcbiAgaWYgKHR5cGVvZiBwYWNrdW1lbnQudmVyc2lvbiA9PT0gXCJzdHJpbmdcIiAmJiAhcGFja3VtZW50LnZlcnNpb25zKSB7XG4gICAgcmV0dXJuIFtwYWNrdW1lbnQudmVyc2lvbl07XG4gIH1cbiAgY29uc3QgdmVyc2lvbnMgPSBwYWNrdW1lbnQudmVyc2lvbnM7XG4gIGlmIChBcnJheS5pc0FycmF5KHZlcnNpb25zKSkge1xuICAgIHJldHVybiB2ZXJzaW9ucy5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgc3RyaW5nID0+IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIik7XG4gIH1cbiAgaWYgKG9iamVjdC5pc1JlY29yZCh2ZXJzaW9ucykpIHJldHVybiBPYmplY3Qua2V5cyh2ZXJzaW9ucyk7XG4gIHJldHVybiBbXTtcbn1cblxuZnVuY3Rpb24gbGF0ZXN0VGFnKHBhY2t1bWVudDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0YWdzID0gcGFja3VtZW50W1wiZGlzdC10YWdzXCJdO1xuICBpZiAoIW9iamVjdC5pc1JlY29yZCh0YWdzKSB8fCB0eXBlb2YgdGFncy5sYXRlc3QgIT09IFwic3RyaW5nXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB0YWdzLmxhdGVzdDtcbn1cblxuZnVuY3Rpb24gdmVyc2lvbkRlcGVuZGVuY2llcyhcbiAgcGFja3VtZW50OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgdmVyc2lvbnMgPSBwYWNrdW1lbnQudmVyc2lvbnM7XG4gIGlmICghb2JqZWN0LmlzUmVjb3JkKHZlcnNpb25zKSkge1xuICAgIHJldHVybiB0eXBlb2YgcGFja3VtZW50LnZlcnNpb24gPT09IFwic3RyaW5nXCJcbiAgICAgID8geyBbcGFja3VtZW50LnZlcnNpb25dOiBzdHJpbmdNYXAocGFja3VtZW50LmRlcGVuZGVuY2llcykgfVxuICAgICAgOiB7fTtcbiAgfVxuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge307XG4gIGZvciAoY29uc3QgW3ZlcnNpb24sIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2ZXJzaW9ucykpIHtcbiAgICBpZiAob2JqZWN0LmlzUmVjb3JkKHZhbHVlKSkgb3V0W3ZlcnNpb25dID0gc3RyaW5nTWFwKHZhbHVlLmRlcGVuZGVuY2llcyk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gc3RyaW5nTWFwKHZhbHVlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGlmICghb2JqZWN0LmlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIHt9O1xuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBbbmFtZSwgc3BlY10gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgaWYgKHR5cGVvZiBzcGVjID09PSBcInN0cmluZ1wiKSBvdXRbbmFtZV0gPSBzcGVjO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iXX0=
package/package.json CHANGED
@@ -26,8 +26,8 @@
26
26
  "typescript": "^5.9.3"
27
27
  },
28
28
  "dependencies": {
29
- "@dbx-tools/core-rs": "^0.9.19",
30
- "@dbx-tools/shared-core": "^0.9.19",
29
+ "@dbx-tools/core-rs": "^0.9.21",
30
+ "@dbx-tools/shared-core": "^0.9.21",
31
31
  "extract-zip": "^2.0.1",
32
32
  "proper-lockfile": "^4.1.2",
33
33
  "semver": "^7.7.3",
@@ -69,7 +69,7 @@
69
69
  "./package.json": "./package.json"
70
70
  }
71
71
  },
72
- "version": "0.9.19",
72
+ "version": "0.9.21",
73
73
  "types": "./lib/index.d.ts",
74
74
  "type": "module",
75
75
  "exports": {
package/src/._bin.ts ADDED
Binary file
Binary file
Binary file
Binary file
Binary file
package/src/._exec.ts ADDED
Binary file
Binary file
package/src/._file.ts ADDED
Binary file
Binary file
Binary file
package/src/bin.ts CHANGED
@@ -95,11 +95,6 @@ export interface BinUrlResolveContext {
95
95
  export interface BinSource {
96
96
  url: string;
97
97
  sha256?: string;
98
- /**
99
- * Skip `--version` on this candidate. Use when the source already identified
100
- * the requested version, such as `cargo install --version`.
101
- */
102
- trustVersion?: boolean;
103
98
  }
104
99
 
105
100
  /** A download source resolved only when the executable is not already installed. */
@@ -400,13 +395,8 @@ export async function ensure(
400
395
  logger.debug("resolved binary source", { name, from });
401
396
  const selected = await selectedBin(destination, source, temp, options);
402
397
  await chmod(selected, 0o755);
403
- const accepted = source.trustVersion ? { ...options, skipVersionCheck: true } : options;
404
- if (!(await isValidBin(selected, accepted))) {
405
- throw new Error(
406
- source.trustVersion
407
- ? `selected binary is not executable: ${selected}`
408
- : `selected binary has no acceptable version: ${selected}`,
409
- );
398
+ if (!(await isValidBin(selected, options))) {
399
+ throw new Error(`selected binary has no acceptable version: ${selected}`);
410
400
  }
411
401
 
412
402
  await mkdir(destination.binDir, { recursive: true });
@@ -415,7 +405,7 @@ export async function ensure(
415
405
  await chmod(staged, 0o755);
416
406
  await rename(staged, destination.path);
417
407
  staged = undefined;
418
- if (!(await isValidBin(destination.path, accepted))) {
408
+ if (!(await isValidBin(destination.path, options))) {
419
409
  throw new Error(`installed binary is invalid after rename: ${destination.path}`);
420
410
  }
421
411
  logger.info("installed binary", {