@mnaoumov/obsidian-dev-toolkit 1.0.0 → 1.1.0

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 (140) hide show
  1. package/README.md +9 -1
  2. package/dist/demo-vault-helper/main.js +499 -17
  3. package/dist/integration-test-plugin/main.js +11251 -2472
  4. package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +9 -22
  5. package/dist/lib/cjs/bundlers/esbuild-impl/dependency.cjs +9 -22
  6. package/dist/lib/cjs/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +9 -22
  7. package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +9 -22
  8. package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +9 -22
  9. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +9 -22
  10. package/dist/lib/cjs/bundlers/esbuild-impl/rename-css-plugin.cjs +9 -22
  11. package/dist/lib/cjs/bundlers/esbuild.cjs +9 -22
  12. package/dist/lib/cjs/bundlers/index.cjs +9 -22
  13. package/dist/lib/cjs/demo-vault-app-json.cjs +9 -22
  14. package/dist/lib/cjs/demo-vault-buttons.cjs +9 -22
  15. package/dist/lib/cjs/demo-vault-buttons.d.cts +7 -7
  16. package/dist/lib/cjs/demo-vault-coverage.cjs +11 -23
  17. package/dist/lib/cjs/demo-vault.cjs +9 -22
  18. package/dist/lib/cjs/formatters/dprint.cjs +9 -22
  19. package/dist/lib/cjs/formatters/index.cjs +9 -22
  20. package/dist/lib/cjs/index.cjs +9 -22
  21. package/dist/lib/cjs/integration-test-setup.cjs +9 -22
  22. package/dist/lib/cjs/integration-test-vitest-global-setup.cjs +9 -22
  23. package/dist/lib/cjs/jest-setup.cjs +9 -22
  24. package/dist/lib/cjs/linters/eslint-config.cjs +60 -22
  25. package/dist/lib/cjs/linters/eslint-rules/index.cjs +23 -24
  26. package/dist/lib/cjs/linters/eslint-rules/index.d.cts +4 -0
  27. package/dist/lib/cjs/linters/eslint-rules/manifest-description.cjs +9 -22
  28. package/dist/lib/cjs/linters/eslint-rules/manifest-helpers.cjs +9 -22
  29. package/dist/lib/cjs/linters/eslint-rules/manifest-id.cjs +9 -22
  30. package/dist/lib/cjs/linters/eslint-rules/manifest-name.cjs +9 -22
  31. package/dist/lib/cjs/linters/eslint-rules/manifest-schema.cjs +9 -22
  32. package/dist/lib/cjs/linters/eslint-rules/no-local-obsidian-internals.cjs +259 -0
  33. package/dist/lib/cjs/linters/eslint-rules/no-local-obsidian-internals.d.cts +10 -0
  34. package/dist/lib/cjs/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.cjs +9 -22
  35. package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.cjs +9 -22
  36. package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +18 -23
  37. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code-in-ui.cjs +263 -0
  38. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code-in-ui.d.cts +30 -0
  39. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code.cjs +215 -0
  40. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code.d.cts +29 -0
  41. package/dist/lib/cjs/linters/eslint-rules/require-component-suffix.cjs +9 -22
  42. package/dist/lib/cjs/linters/eslint-rules/require-plugin-api-contract-schemas.cjs +306 -0
  43. package/dist/lib/cjs/linters/eslint-rules/require-plugin-api-contract-schemas.d.cts +10 -0
  44. package/dist/lib/cjs/linters/eslint.cjs +9 -22
  45. package/dist/lib/cjs/linters/index.cjs +20 -24
  46. package/dist/lib/cjs/linters/index.d.cts +3 -0
  47. package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +171 -0
  48. package/dist/lib/cjs/linters/markdownlint-cli2-config.d.cts +12 -0
  49. package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +164 -0
  50. package/dist/lib/cjs/linters/markdownlint-rules/index.d.cts +2 -0
  51. package/dist/lib/cjs/linters/markdownlint-rules/plugin-name-as-code.cjs +246 -0
  52. package/dist/lib/cjs/linters/markdownlint-rules/plugin-name-as-code.d.cts +32 -0
  53. package/dist/lib/cjs/linters/markdownlint.cjs +9 -22
  54. package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.cjs +9 -22
  55. package/dist/lib/cjs/linters/plugin-names.cjs +249 -0
  56. package/dist/lib/cjs/linters/plugin-names.d.cts +81 -0
  57. package/dist/lib/cjs/obsidian-plugin-repo-paths.cjs +9 -22
  58. package/dist/lib/cjs/setup.cjs +9 -22
  59. package/dist/lib/cjs/templates.cjs +9 -22
  60. package/dist/lib/cjs/test-runners/index.cjs +9 -22
  61. package/dist/lib/cjs/test-runners/integration-test-plugin.cjs +9 -22
  62. package/dist/lib/cjs/test-runners/performance-eval-cap.cjs +9 -22
  63. package/dist/lib/cjs/test-runners/stale-build-global-setup.cjs +9 -22
  64. package/dist/lib/cjs/test-runners/vitest-config.cjs +9 -22
  65. package/dist/lib/cjs/version.cjs +9 -22
  66. package/dist/lib/cjs/vitest-setup.cjs +9 -22
  67. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +6 -14
  68. package/dist/lib/esm/bundlers/esbuild-impl/dependency.mjs +6 -14
  69. package/dist/lib/esm/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +6 -14
  70. package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +6 -14
  71. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +6 -14
  72. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +6 -14
  73. package/dist/lib/esm/bundlers/esbuild-impl/rename-css-plugin.mjs +6 -14
  74. package/dist/lib/esm/bundlers/esbuild.mjs +6 -14
  75. package/dist/lib/esm/bundlers/index.mjs +6 -14
  76. package/dist/lib/esm/demo-vault-app-json.mjs +6 -14
  77. package/dist/lib/esm/demo-vault-buttons.d.mts +7 -7
  78. package/dist/lib/esm/demo-vault-buttons.mjs +6 -14
  79. package/dist/lib/esm/demo-vault-coverage.mjs +8 -15
  80. package/dist/lib/esm/demo-vault.mjs +6 -14
  81. package/dist/lib/esm/formatters/dprint.mjs +6 -14
  82. package/dist/lib/esm/formatters/index.mjs +6 -14
  83. package/dist/lib/esm/index.mjs +6 -14
  84. package/dist/lib/esm/integration-test-setup.mjs +6 -14
  85. package/dist/lib/esm/integration-test-vitest-global-setup.mjs +6 -14
  86. package/dist/lib/esm/jest-setup.mjs +6 -14
  87. package/dist/lib/esm/linters/eslint-config.mjs +57 -14
  88. package/dist/lib/esm/linters/eslint-rules/index.d.mts +4 -0
  89. package/dist/lib/esm/linters/eslint-rules/index.mjs +15 -15
  90. package/dist/lib/esm/linters/eslint-rules/manifest-description.mjs +6 -14
  91. package/dist/lib/esm/linters/eslint-rules/manifest-helpers.mjs +6 -14
  92. package/dist/lib/esm/linters/eslint-rules/manifest-id.mjs +6 -14
  93. package/dist/lib/esm/linters/eslint-rules/manifest-name.mjs +6 -14
  94. package/dist/lib/esm/linters/eslint-rules/manifest-schema.mjs +6 -14
  95. package/dist/lib/esm/linters/eslint-rules/no-local-obsidian-internals.d.mts +10 -0
  96. package/dist/lib/esm/linters/eslint-rules/no-local-obsidian-internals.mjs +150 -0
  97. package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.mjs +6 -14
  98. package/dist/lib/esm/linters/eslint-rules/no-untrusted-input-events.mjs +6 -14
  99. package/dist/lib/esm/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +15 -15
  100. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code-in-ui.d.mts +30 -0
  101. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code-in-ui.mjs +157 -0
  102. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code.d.mts +29 -0
  103. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code.mjs +108 -0
  104. package/dist/lib/esm/linters/eslint-rules/require-component-suffix.mjs +6 -14
  105. package/dist/lib/esm/linters/eslint-rules/require-plugin-api-contract-schemas.d.mts +10 -0
  106. package/dist/lib/esm/linters/eslint-rules/require-plugin-api-contract-schemas.mjs +197 -0
  107. package/dist/lib/esm/linters/eslint.mjs +6 -14
  108. package/dist/lib/esm/linters/index.d.mts +3 -0
  109. package/dist/lib/esm/linters/index.mjs +13 -15
  110. package/dist/lib/esm/linters/markdownlint-cli2-config.d.mts +12 -0
  111. package/dist/lib/esm/linters/markdownlint-cli2-config.mjs +66 -0
  112. package/dist/lib/esm/linters/markdownlint-rules/index.d.mts +2 -0
  113. package/dist/lib/esm/linters/markdownlint-rules/index.mjs +46 -0
  114. package/dist/lib/esm/linters/markdownlint-rules/plugin-name-as-code.d.mts +32 -0
  115. package/dist/lib/esm/linters/markdownlint-rules/plugin-name-as-code.mjs +130 -0
  116. package/dist/lib/esm/linters/markdownlint.mjs +6 -14
  117. package/dist/lib/esm/linters/obsidianmd-rule-custom-message.mjs +6 -14
  118. package/dist/lib/esm/linters/plugin-names.d.mts +81 -0
  119. package/dist/lib/esm/linters/plugin-names.mjs +141 -0
  120. package/dist/lib/esm/obsidian-plugin-repo-paths.mjs +6 -14
  121. package/dist/lib/esm/setup.mjs +6 -14
  122. package/dist/lib/esm/templates.mjs +6 -14
  123. package/dist/lib/esm/test-runners/index.mjs +6 -14
  124. package/dist/lib/esm/test-runners/integration-test-plugin.mjs +6 -14
  125. package/dist/lib/esm/test-runners/performance-eval-cap.mjs +6 -14
  126. package/dist/lib/esm/test-runners/stale-build-global-setup.mjs +6 -14
  127. package/dist/lib/esm/test-runners/vitest-config.mjs +6 -14
  128. package/dist/lib/esm/version.mjs +6 -14
  129. package/dist/lib/esm/vitest-setup.mjs +6 -14
  130. package/dist/templates/scripts/markdownlint-cli2-config.ts +2 -2
  131. package/linters/eslint-rules/no-local-obsidian-internals/package.json +6 -0
  132. package/linters/eslint-rules/plugin-name-as-code/package.json +6 -0
  133. package/linters/eslint-rules/plugin-name-as-code-in-ui/package.json +6 -0
  134. package/linters/eslint-rules/require-plugin-api-contract-schemas/package.json +6 -0
  135. package/linters/markdownlint-cli2-config/package.json +6 -0
  136. package/linters/markdownlint-rules/index/package.json +6 -0
  137. package/linters/markdownlint-rules/package.json +6 -0
  138. package/linters/markdownlint-rules/plugin-name-as-code/package.json +6 -0
  139. package/linters/plugin-names/package.json +6 -0
  140. package/package.json +84 -23
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  function keepName($unknown) {
@@ -46,17 +38,13 @@ function keepName($unknown) {
46
38
  }
47
39
 
48
40
  (function initCjs() {
49
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
41
  const globalThisRecord = globalThis;
51
42
  ensureDisposeSymbols();
52
- globalThisRecord['__name'] ??= keepName;
53
- globalThisRecord['__extractDefault'] ??= extractDefault;
54
-
43
+ globalThisRecord["__name"] ??= keepName;
44
+ globalThisRecord["__extractDefault"] ??= extractDefault;
55
45
  ensureBrowserProcess();
56
-
57
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
58
46
  function extractDefault(module) {
59
- return module && module.__esModule && 'default' in module ? module.default : module;
47
+ return module && module.__esModule && "default" in module ? module.default : module;
60
48
  }
61
49
  })();
62
50
  })();
@@ -66,7 +54,6 @@ function keepName($unknown) {
66
54
  return;
67
55
  }
68
56
 
69
- // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
70
57
  require = Object.assign(
71
58
  (id) => requirePatched(id),
72
59
  originalRequire,
@@ -144,4 +131,4 @@ var import_setup = require('./setup.cjs');
144
131
  afterEach: import_globals.afterEach,
145
132
  beforeEach: import_globals.beforeEach
146
133
  });
147
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2plc3Qtc2V0dXAudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBKZXN0IHNldHVwIGZpbGUgZm9yIE9ic2lkaWFuIHBsdWdpbnMgYnVpbHQgb24gYEBtbmFvdW1vdi9vYnNpZGlhbi1saWJgLlxuICpcbiAqIEFkZCBpdCB0byB5b3VyIEplc3QgY29uZmlnJ3MgYHNldHVwRmlsZXNBZnRlckVhY2hgIChvciBpbXBvcnQgaXQgZnJvbSBhbm90aGVyIHNldHVwIGZpbGUpLiBCZWZvcmVcbiAqIGVhY2ggdGVzdCBpdCByZXNldHMgdGhlIGdlbmVyaWMgc2hhcmVkLXN0YXRlIHNsb3QsIHRoZSBgX19vYnNpZGlhbkRldlV0aWxzYCBiYWcgYW5kIHRoZSBsaWJyYXJ5IGNvbnRleHRzLCBhbmQgZW5hYmxlcyBhc3luYy1vcGVyYXRpb24gdHJhY2tpbmc7IGFmdGVyIGVhY2ggdGVzdCBpdFxuICogZGlzYWJsZXMgdHJhY2tpbmcsIHNvIHRlc3RzIGNhbiBgYXdhaXQgd2FpdEZvckFsbEFzeW5jT3BlcmF0aW9ucygpYCBhZ2FpbnN0IGlzb2xhdGVkIHN0YXRlLlxuICpcbiAqIFRoaXMgaXMgYSBwZXItdGVzdCBzZXR1cCBmaWxlLCBub3QgYSBKZXN0IGBnbG9iYWxTZXR1cGAgbW9kdWxlLCBzbyBpdCBoYXMgbm8gZGVmYXVsdCBleHBvcnQuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoaW4gSmVzdCBzZXR1cC1maWxlIGdsdWU7IHNldHVwIGlzIHVuaXQtdGVzdGVkIHNlcGFyYXRlbHkuICovXG5pbXBvcnQge1xuICBhZnRlckFsbCxcbiAgYWZ0ZXJFYWNoLFxuICBiZWZvcmVFYWNoXG59IGZyb20gJ0BqZXN0L2dsb2JhbHMnO1xuXG5pbXBvcnQgeyBzZXR1cCB9IGZyb20gJy4vc2V0dXAudHMnO1xuXG5zZXR1cCh7XG4gIGFmdGVyQWxsLFxuICBhZnRlckVhY2gsXG4gIGJlZm9yZUVhY2hcbn0pO1xuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhQSxxQkFJTztBQUVQLG1CQUFzQjtBQUFBLElBRXRCLG9CQUFNO0FBQUEsRUFDSjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0YsQ0FBQzsiLAogICJuYW1lcyI6IFtdCn0K
134
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2plc3Qtc2V0dXAudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBKZXN0IHNldHVwIGZpbGUgZm9yIE9ic2lkaWFuIHBsdWdpbnMgYnVpbHQgb24gYEBtbmFvdW1vdi9vYnNpZGlhbi1saWJgLlxuICpcbiAqIEFkZCBpdCB0byB5b3VyIEplc3QgY29uZmlnJ3MgYHNldHVwRmlsZXNBZnRlckVhY2hgIChvciBpbXBvcnQgaXQgZnJvbSBhbm90aGVyIHNldHVwIGZpbGUpLiBCZWZvcmVcbiAqIGVhY2ggdGVzdCBpdCByZXNldHMgdGhlIGdlbmVyaWMgc2hhcmVkLXN0YXRlIHNsb3QsIHRoZSBgX19vYnNpZGlhbkRldlV0aWxzYCBiYWcgYW5kIHRoZSBsaWJyYXJ5IGNvbnRleHRzLCBhbmQgZW5hYmxlcyBhc3luYy1vcGVyYXRpb24gdHJhY2tpbmc7IGFmdGVyIGVhY2ggdGVzdCBpdFxuICogZGlzYWJsZXMgdHJhY2tpbmcsIHNvIHRlc3RzIGNhbiBgYXdhaXQgd2FpdEZvckFsbEFzeW5jT3BlcmF0aW9ucygpYCBhZ2FpbnN0IGlzb2xhdGVkIHN0YXRlLlxuICpcbiAqIFRoaXMgaXMgYSBwZXItdGVzdCBzZXR1cCBmaWxlLCBub3QgYSBKZXN0IGBnbG9iYWxTZXR1cGAgbW9kdWxlLCBzbyBpdCBoYXMgbm8gZGVmYXVsdCBleHBvcnQuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoaW4gSmVzdCBzZXR1cC1maWxlIGdsdWU7IHNldHVwIGlzIHVuaXQtdGVzdGVkIHNlcGFyYXRlbHkuICovXG5pbXBvcnQge1xuICBhZnRlckFsbCxcbiAgYWZ0ZXJFYWNoLFxuICBiZWZvcmVFYWNoXG59IGZyb20gJ0BqZXN0L2dsb2JhbHMnO1xuXG5pbXBvcnQgeyBzZXR1cCB9IGZyb20gJy4vc2V0dXAudHMnO1xuXG5zZXR1cCh7XG4gIGFmdGVyQWxsLFxuICBhZnRlckVhY2gsXG4gIGJlZm9yZUVhY2hcbn0pO1xuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWFBLHFCQUlPO0FBRVAsbUJBQXNCO0FBQUEsSUFFdEIsb0JBQU07QUFBQSxFQUNKO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  function keepName($unknown) {
@@ -46,17 +38,13 @@ function keepName($unknown) {
46
38
  }
47
39
 
48
40
  (function initCjs() {
49
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
41
  const globalThisRecord = globalThis;
51
42
  ensureDisposeSymbols();
52
- globalThisRecord['__name'] ??= keepName;
53
- globalThisRecord['__extractDefault'] ??= extractDefault;
54
-
43
+ globalThisRecord["__name"] ??= keepName;
44
+ globalThisRecord["__extractDefault"] ??= extractDefault;
55
45
  ensureBrowserProcess();
56
-
57
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
58
46
  function extractDefault(module) {
59
- return module && module.__esModule && 'default' in module ? module.default : module;
47
+ return module && module.__esModule && "default" in module ? module.default : module;
60
48
  }
61
49
  })();
62
50
  })();
@@ -66,7 +54,6 @@ function keepName($unknown) {
66
54
  return;
67
55
  }
68
56
 
69
- // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
70
57
  require = Object.assign(
71
58
  (id) => requirePatched(id),
72
59
  originalRequire,
@@ -354,6 +341,57 @@ function getObsidianOverrideConfigs(context) {
354
341
  */
355
342
  "unicorn/prefer-global-this": "off"
356
343
  }
344
+ },
345
+ {
346
+ /*
347
+ * Obsidian's internal API is typed in `obsidian-typings`, so a `declare module 'obsidian'` augmentation in
348
+ * shipped source may carry only the plugin's own custom-event overloads. Tests are exempt: a mock shape or a
349
+ * harness global never ships.
350
+ */
351
+ files: context.sourceFiles,
352
+ ignores: context.testFiles,
353
+ plugins: {
354
+ "obsidian-dev-utils": import_obsidian_dev_utils_plugin.obsidianDevUtilsPlugin
355
+ },
356
+ rules: {
357
+ "obsidian-dev-utils/no-local-obsidian-internals": "error"
358
+ }
359
+ },
360
+ {
361
+ /*
362
+ * Every method entry of a plugin API contract carries an `input` and an `output` schema, so a `{}` entry that
363
+ * validates nothing cannot come back where the contract type is untyped and the compiler does not refuse it.
364
+ * Tests are exempt: they may publish a deliberately broken contract.
365
+ *
366
+ * Registered but OFF: several providers and consumers still carry `{}` entries, and turning it on first would
367
+ * make their lint red. Switch it to `'error'` once none is left.
368
+ */
369
+ files: context.sourceFiles,
370
+ ignores: context.testFiles,
371
+ plugins: {
372
+ "obsidian-dev-utils": import_obsidian_dev_utils_plugin.obsidianDevUtilsPlugin
373
+ },
374
+ rules: {
375
+ "obsidian-dev-utils/require-plugin-api-contract-schemas": "off"
376
+ }
377
+ },
378
+ {
379
+ /*
380
+ * A plugin's display name is marked as code: backticks in a comment (`plugin-name-as-code`, autofixed), a
381
+ * `<code>` element in UI (`plugin-name-as-code-in-ui`, reported only).
382
+ *
383
+ * Registered but OFF: repositories still carry plain plugin names from before the rules existed, and turning
384
+ * them on first would make their lint red. Switch them to `'error'` once those are fixed. Both take
385
+ * `{ additionalPluginNames: [...] }` for names the shared list lacks.
386
+ */
387
+ files: context.allFiles(),
388
+ plugins: {
389
+ "obsidian-dev-utils": import_obsidian_dev_utils_plugin.obsidianDevUtilsPlugin
390
+ },
391
+ rules: {
392
+ "obsidian-dev-utils/plugin-name-as-code": "off",
393
+ "obsidian-dev-utils/plugin-name-as-code-in-ui": "off"
394
+ }
357
395
  }
358
396
  ]);
359
397
  }
@@ -362,4 +400,4 @@ function getObsidianOverrideConfigs(context) {
362
400
  EslintConfigContext,
363
401
  defineEslintConfigs
364
402
  });
365
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBzaGFyZWQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZm9yIE9ic2lkaWFuIHBsdWdpbnMuXG4gKlxuICogSXQgaXMgdGhlIGdlbmVyaWMgY29uZmlndXJhdGlvbiBvZiBgQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXRgIHBsdXMgdGhlIE9ic2lkaWFuIGxheWVycyBhbG9uZTpcbiAqIGBlc2xpbnQtcGx1Z2luLW9ic2lkaWFubWRgJ3MgcmVjb21tZW5kZWQgcnVsZXMsIHRoZSByb290IGBtYW5pZmVzdC5qc29uYCBhbmQgYExJQ0VOU0VgLCB0aGUgTm9kZS1idWlsdGlucyBleGVtcHRpb25zXG4gKiBvZiBkZXNrdG9wLW9ubHkgbW9kdWxlcyBhbmQgdGVzdHMsIHRoZSBpbnRlZ3JhdGlvbi10ZXN0IHJ1bGVzIGFuZCB0aGUgT2JzaWRpYW4gaW4taG91c2UgcnVsZXMuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIERlY2xhcmF0aXZlIEVTTGludCBydWxlL3BsdWdpbiBjb25maWd1cmF0aW9uOyBjb3JyZWN0bmVzcyBpcyB2ZXJpZmllZCBieSBydW5uaW5nIEVTTGludCwgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgRGVmaW5lRXNsaW50Q29uZmlnc09wdGlvbnMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9saW50ZXJzL2VzbGludC1jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBMaW50ZXIgfSBmcm9tICdlc2xpbnQnO1xuXG5pbXBvcnQge1xuICBjcmVhdGVEZWZhdWx0RXNsaW50Q29uZmlnQ29udGV4dCxcbiAgRXNsaW50Q29uZmlnQ29udGV4dCxcbiAgZ2V0RXNsaW50Q29yZUNvbmZpZ3MsXG4gIGdldEdsb2JhbElnbm9yZUNvbmZpZ3MsXG4gIGdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2xpbnRlcnMvZXNsaW50LWNvbmZpZyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBwbHVnaW5gIGlzIHRvbyBjb25mdXNpbmcuXG5pbXBvcnQgb2JzaWRpYW5tZCBmcm9tICdlc2xpbnQtcGx1Z2luLW9ic2lkaWFubWQnO1xuaW1wb3J0IHsgUGxhaW5UZXh0UGFyc2VyIH0gZnJvbSAnZXNsaW50LXBsdWdpbi1vYnNpZGlhbm1kL2Rpc3QvbGliL3BsYWluVGV4dFBhcnNlci5qcyc7XG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tICdlc2xpbnQvY29uZmlnJztcblxuaW1wb3J0IHsgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMgfSBmcm9tICcuLi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5pbXBvcnQgeyBqc29uUGx1Z2luIH0gZnJvbSAnLi9lc2xpbnQtcnVsZXMvbWFuaWZlc3QtaGVscGVycy50cyc7XG5pbXBvcnQgeyBvYnNpZGlhbkRldlV0aWxzUGx1Z2luIH0gZnJvbSAnLi9lc2xpbnQtcnVsZXMvb2JzaWRpYW4tZGV2LXV0aWxzLXBsdWdpbi50cyc7XG5pbXBvcnQgeyBzdHJpcE93bmVkUnVsZUN1c3RvbU1lc3NhZ2VFbnRyaWVzIH0gZnJvbSAnLi9vYnNpZGlhbm1kLXJ1bGUtY3VzdG9tLW1lc3NhZ2UudHMnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZXhwb3J0LWZyb20gLS0gUmUtZXhwb3J0ZWQgc28gYSBwbHVnaW4ncyBgc2NyaXB0cy9lc2xpbnQtY29uZmlnLnRzYCBrZWVwcyBpbXBvcnRpbmcgYm90aCBmcm9tIGhlcmUuXG5leHBvcnQgdHlwZSB7IERlZmluZUVzbGludENvbmZpZ3NPcHRpb25zIH07XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZXhwb3J0LWZyb20gLS0gUmUtZXhwb3J0ZWQgc28gYSBwbHVnaW4ncyBgc2NyaXB0cy9lc2xpbnQtY29uZmlnLnRzYCBrZWVwcyBpbXBvcnRpbmcgYm90aCBmcm9tIGhlcmUuXG5leHBvcnQgeyBFc2xpbnRDb25maWdDb250ZXh0IH07XG5cbi8qXG4gKiBUaGUgbWluaW11bSBPYnNpZGlhbiBpbnN0YWxsZXIgdGhhdCBzdGlsbCByZWNlaXZlcyBhcHAgdXBkYXRlcyBhbmQgd29ya3MgaXMgMS4xLjksIHdoaWNoIHNoaXBzIEVsZWN0cm9uXG4gKiAyMS4zLjMgYW5kIHJ1bnMgTm9kZSAxNi4xNi4wLiBTaGlwcGVkIHNvdXJjZSBtdXN0IHRoZXJlZm9yZSBhdm9pZCBOb2RlL0VTIHJ1bnRpbWUgYnVpbHRpbnMgdW5hdmFpbGFibGUgaW5cbiAqIHRoYXQgdmVyc2lvbi4gVGVzdHMgYW5kIHNjcmlwdHMgYXJlIGRldi1vbmx5IGFuZCBleGVtcHQuXG4gKlxuICogU291cmNlIG9mIHRydXRoOiBgb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZy9tZXRhZGF0YS5qc29uYCBcdTIwMTQgdGhlIG5ld2VzdCByZWxlYXNlIGNhcnJ5aW5nIHRoZSBmaWVsZFxuICogKDEuMTMuMSkgZGVjbGFyZXMgYG1pblJ1bm5hYmxlSW5zdGFsbGVyVmVyc2lvbjogXCIxLjEuOVwiYCwgYW5kIHRoYXQgaW5zdGFsbGVyJ3MgYHJ1bnRpbWVWZXJzaW9uc2AgZ2l2ZXMgdGhlXG4gKiBFbGVjdHJvbiBhbmQgTm9kZSB2ZXJzaW9ucyBhYm92ZS4gUmUtZGVyaXZlIGZyb20gdGhlcmUgcmF0aGVyIHRoYW4gZWRpdGluZyB0aGlzIG51bWJlciBieSBoYW5kLlxuICovXG5jb25zdCBNSU5JTVVNX05PREVfVkVSU0lPTiA9ICc+PTE2LjE2LjAnO1xuXG4vKipcbiAqIEJ1aWxkIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGJ1aWxkcyB0aGUgRVNMaW50IGNvbmZpZ3VyYXRpb25zIG9mIGFuIE9ic2lkaWFuIHBsdWdpbjogdGhlIGdlbmVyaWMgY29uZmlndXJhdGlvbiBvZlxuICogYEBtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0YCBwbHVzIHRoZSBPYnNpZGlhbiBsYXllcnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgZGVmaW5pbmcgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICogQHJldHVybnMgVGhlIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUVzbGludENvbmZpZ3Mob3B0aW9uczogRGVmaW5lRXNsaW50Q29uZmlnc09wdGlvbnMgPSB7fSk6IExpbnRlci5Db25maWdbXSB7XG4gIGNvbnN0IGNvbnRleHQgPSBjcmVhdGVEZWZhdWx0RXNsaW50Q29uZmlnQ29udGV4dCgpO1xuXG4gIGlmIChvcHRpb25zLmVkaXRDb250ZXh0KSB7XG4gICAgb3B0aW9ucy5lZGl0Q29udGV4dChjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGN1c3RvbUNvbmZpZ3MgPSBvcHRpb25zLmN1c3RvbUNvbmZpZ3M/Lihjb250ZXh0KSA/PyBbXTtcblxuICByZXR1cm4gZGVmaW5lQ29uZmlnKFxuICAgIC4uLmdldEdsb2JhbElnbm9yZUNvbmZpZ3MoKSxcbiAgICAvLyBPYnNpZGlhbm1kIGNvbmZpZ3MgcnVuIGZpcnN0IHNvIG91ciBzdHJpY3RlciBydWxlcyBvdmVycmlkZSB0aGVpciByZWxheGVkIGRlZmF1bHRzXG4gICAgLi4uZ2V0T2JzaWRpYW5MaW50Q29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlncyh7IGNvbnRleHQsIGluSG91c2VQbHVnaW46IG9ic2lkaWFuRGV2VXRpbHNQbHVnaW4sIG1pbmltdW1Ob2RlVmVyc2lvbjogTUlOSU1VTV9OT0RFX1ZFUlNJT04gfSksXG4gICAgLi4uZ2V0T2JzaWRpYW5PdmVycmlkZUNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0Tm9kZUJ1aWx0aW5zQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXRJbnRlZ3JhdGlvblRlc3RDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldE1hbmlmZXN0Q29uZmlncygpLFxuICAgIC4uLmdldExpY2Vuc2VDb25maWdzKCksXG4gICAgLi4uY3VzdG9tQ29uZmlnc1xuICApO1xufVxuZnVuY3Rpb24gZ2V0SW50ZWdyYXRpb25UZXN0Q29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgLypcbiAgICAgICAqIEFuIGludGVncmF0aW9uIHRlc3QgdGhhdCBkcml2ZXMgdGhlIFVJIHdpdGggYGRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoLi4uKSlgIHByb2R1Y2VzIGFuXG4gICAgICAgKiBVTlRSVVNURUQgZXZlbnQsIGFuZCBPYnNpZGlhbiBhbmQgQ29kZU1pcnJvciBnYXRlIG9uIGBpc1RydXN0ZWRgIFx1MjAxNCBzbyB0aGUgdGVzdCBjYW4gZXhlcmNpc2VcbiAgICAgICAqIG5vdGhpbmcgd2hpbGUgc3RpbGwgcGFzc2luZy4gT25seSBpbnRlZ3JhdGlvbiB0ZXN0cyBhcmUgY292ZXJlZDogYSB1bml0IHRlc3QgaGFzIG5vIHJlYWwgaW5wdXRcbiAgICAgICAqIHBpcGVsaW5lIHRvIHJlYWNoLCBzbyBkaXNwYXRjaGluZyBpcyB0aGUgb25seSB0aGluZyBpdCBjYW4gZG8uXG4gICAgICAgKlxuICAgICAgICogQW5kcm9pZCBmaWxlcyB1c2VkIHRvIGJlIGV4ZW1wdCBCWSBGSUxFTkFNRSwgb24gdGhlIGdyb3VuZHMgdGhhdCB0aGUgdHJ1c3RlZCBoZWxwZXJzIHdlcmUgYnVpbHQgb25cbiAgICAgICAqIGB3aW5kb3cuZWxlY3Ryb25gIGFuZCBzbyBjb3VsZCBub3QgYmUgcmVhY2hlZCBmcm9tIGEgcGhvbmUgYXQgYWxsLiBUaGF0IGV4ZW1wdGlvbiBpcyBnb25lOiB0aGVcbiAgICAgICAqIGhhcm5lc3MgZ2FpbmVkIGEgbW9iaWxlIHRydXN0ZWQtaW5wdXQgcGF0aCwgYW5kIGBjbGlja0VsZW1lbnRgLCBgY2xpY2tNb3VzZWAsIGBwcmVzc0tleWAgYW5kXG4gICAgICAgKiBgdHlwZUludG9FZGl0b3JgIGFsbCB3b3JrIHRoZXJlLiBPbmx5IHRoZSBob3ZlciBoZWxwZXJzIHN0aWxsIHRocm93LCBiZWNhdXNlIGA6aG92ZXJgIGhhcyBubyB0b3VjaFxuICAgICAgICogZXF1aXZhbGVudCBcdTIwMTQgYSBmaWxlIHJlYWNoaW5nIGZvciB0aG9zZSBoYXMgdG8gYnJhbmNoIG9uIGBQbGF0Zm9ybS5pc0Rlc2t0b3BBcHBgLCB3aGljaCBpcyB0aGUgc2FtZVxuICAgICAgICogdGhpbmcgYSBgKi5jcm9zcy1wbGF0Zm9ybS4qYCBmaWxlIGhhcyBhbHdheXMgaGFkIHRvIGRvLlxuICAgICAgICovXG4gICAgICBmaWxlczogY29udGV4dC5zb3VyY2VGb2xkZXJzLm1hcCgoc291cmNlRm9sZGVyKSA9PiBqb2luKHNvdXJjZUZvbGRlciwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55UGF0aCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55SW50ZWdyYXRpb25UZXN0VHMpKSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cyc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKlxuICogVGhlIENvbW11bml0eSBkaXJlY3RvcnkgcmVxdWlyZXMgYSByb290IGBMSUNFTlNFYCwgYW5kIGBvYnNpZGlhbm1kL3ZhbGlkYXRlLWxpY2Vuc2VgIGlzIHRoZSBvbmx5IGNoZWNrXG4gKiBvbiB3aGF0IGl0IHNheXM6IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG11c3Qgbm90IHN0aWxsIGJlIHRoZSBzYW1wbGUgcGx1Z2luJ3MsIGFuZCB0aGUgeWVhciBtdXN0IGJlXG4gKiBjdXJyZW50LiBCb3RoIG5lZWQgYFBsYWluVGV4dFBhcnNlcmAsIHdoaWNoIHRoZSBwbHVnaW4gZG9lcyBub3QgZXhwb3J0LCBzbyBpdCBpcyByZWFjaGVkIHRocm91Z2ggaXRzXG4gKiBidWlsZCBvdXRwdXQgLS0gdGhlIHBhY2thZ2UgZGVjbGFyZXMgbm8gYGV4cG9ydHNgIG1hcCBhbmQgc2hpcHMgYSBkZWNsYXJhdGlvbiBiZXNpZGUgdGhlIG1vZHVsZSwgc28gdGhlXG4gKiBkZWVwIHBhdGggcmVzb2x2ZXMsIGJ1dCBpdCBpcyB0aGUgb25lIGltcG9ydCBoZXJlIHRoYXQgYSBwYXRjaCByZWxlYXNlIHVwc3RyZWFtIGNvdWxkIGJyZWFrLlxuICpcbiAqIFRoZSBydWxlIGNvbXBhcmVzIHRoZSB5ZWFyIGFnYWluc3QgYG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKWAgYXQgbGludCB0aW1lLCBzbyBhIHJlcG8gZ29lcyByZWQgYXQgdGhlXG4gKiB0dXJuIG9mIHRoZSB5ZWFyIHVudGlsIGl0cyBMSUNFTlNFIGlzIGJ1bXBlZC4gYC5naXRodWIvd29ya2Zsb3dzL3VwZGF0ZS1saWNlbnNlLXllYXIueW1sYCBkb2VzIHRoYXQgb25cbiAqIDEgSmFudWFyeTsgYSByZXBvIGFkb3B0aW5nIHRoaXMgY29uZmlnIG5lZWRzIHRoZSBzYW1lIHdvcmtmbG93LCBvciB0aGUgeWVhciBjaGVjayB3aWxsIGZhaWwgaXRzIENJLlxuICovXG5mdW5jdGlvbiBnZXRMaWNlbnNlQ29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBmaWxlczogW09ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkxpY2Vuc2VdLFxuICAgICAgbGFuZ3VhZ2VPcHRpb25zOiB7XG4gICAgICAgIHBhcnNlcjogUGxhaW5UZXh0UGFyc2VyXG4gICAgICB9LFxuICAgICAgcGx1Z2luczoge1xuICAgICAgICBvYnNpZGlhbm1kXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ29ic2lkaWFubWQvdmFsaWRhdGUtbGljZW5zZSc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKlxuICogVGhlIHJvb3QgYG1hbmlmZXN0Lmpzb25gIGlzIHdoYXQgdGhlIENvbW11bml0eSBkaXJlY3RvcnkncyBhdXRvbWF0ZWQgcmV2aWV3IGFjdHVhbGx5IHJlYWRzLCBhbmQgdW50aWxcbiAqIHRoaXMgY29uZmlnIGV4aXN0ZWQgbm8gbGludGVyIHJlYWQgaXQgYXQgYWxsOiBgb2JzaWRpYW5tZC92YWxpZGF0ZS1tYW5pZmVzdGAgcmVnaXN0ZXJzIGEgYFByb2dyYW1gXG4gKiB2aXNpdG9yIGFuZCBleHBlY3RzIGFuIEVTVHJlZSBgT2JqZWN0RXhwcmVzc2lvbmAsIHdoaWxlIGV2ZXJ5IEpTT04gcGFyc2VyIHRoYXQgc2hpcHMgcHJvZHVjZXMgc29tZXRoaW5nXG4gKiBlbHNlIC0tIGBAZXNsaW50L2pzb25gIHByb2R1Y2VzIE1vbW9hIChgRG9jdW1lbnRgKSwgYGpzb25jLWVzbGludC1wYXJzZXJgIHByb2R1Y2VzXG4gKiBgSlNPTk9iamVjdEV4cHJlc3Npb25gIC0tIHNvIHRoZSBydWxlIHNpbGVudGx5IG1hdGNoZXMgbm90aGluZyBubyBtYXR0ZXIgd2hpY2ggZmlsZXMgaXQgaXMgc2NvcGVkIHRvLlxuICogVGhlIGluLWhvdXNlIHJ1bGVzIGJlbG93IHZpc2l0IHRoZSBNb21vYSBBU1QgaW5zdGVhZC5cbiAqXG4gKiBgbWFuaWZlc3QuanNvbmAgaXMgc3RyaWN0IEpTT04sIHNvIGFuIGBlc2xpbnQtZGlzYWJsZWAgY29tbWVudCBpbiBpdCBpcyBhIHBhcnNlIGVycm9yIEFORCB3b3VsZCBzdG9wXG4gKiBPYnNpZGlhbiBsb2FkaW5nIHRoZSBwbHVnaW4uIFRoYXQgbWFrZXMgdGhlIGNvbmZpZyB0aGUgb25seSBwbGFjZSBhIGNoZWNrIGNhbiBiZSB3YWl2ZWQsIHdoaWNoIGlzIHdoeVxuICogdGhlc2UgYXJlIGZvdXIgcnVsZXMgcmF0aGVyIHRoYW4gb25lOiBhIHJlcG8gd2l0aCBhIGdyYW5kZmF0aGVyZWQgYGlkYCBjYW4gdHVybiBvZmYgYG1hbmlmZXN0LWlkYCBhbG9uZVxuICogYW5kIGtlZXAgdGhlIHJlc3QuXG4gKi9cbmZ1bmN0aW9uIGdldE1hbmlmZXN0Q29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBmaWxlczogW09ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbl0sXG4gICAgICBsYW5ndWFnZTogJ2pzb24vanNvbicsXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgICdqc29uJzoganNvblBsdWdpbixcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscyc6IG9ic2lkaWFuRGV2VXRpbHNQbHVnaW5cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL21hbmlmZXN0LWRlc2NyaXB0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9tYW5pZmVzdC1pZCc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbWFuaWZlc3QtbmFtZSc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbWFuaWZlc3Qtc2NoZW1hJzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbi8qXG4gKiBFdmVyeSBmaWxlIHNldCB0aGF0IGlzIGV4ZW1wdCBmcm9tIHRoZSBOb2RlLWJ1aWx0aW5zIGJhbnMsIGluIG9uZSBwbGFjZS5cbiAqXG4gKiBUd28gcnVsZXMgYmFuIE5vZGUgYnVpbHRpbnMsIGFuZCB0aGV5IGFyZSBOT1QgaW50ZXJjaGFuZ2VhYmxlLiBgaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXNgIGlzIG91cnMsIGl0IGlzXG4gKiBhbiBlcnJvciwgYW5kIGl0cyB3YWl2ZXJzIGFyZSB0b2xlcmF0ZWQgYnkgdGhlIGNvbW11bml0eS1kaXJlY3RvcnkgcmV2aWV3IHJ1bm5lci4gYG9ic2lkaWFubWQvbm8tbm9kZWpzLW1vZHVsZXNgXG4gKiBhcnJpdmVzIHZpYSBgb2JzaWRpYW5tZC5jb25maWdzLnJlY29tbWVuZGVkYCAoc2VlIGBnZXRPYnNpZGlhbkxpbnRDb25maWdzYCkgYW5kIGlzIHN0cmljdGx5IHdlYWtlciBvbiBzdGF0aWNcbiAqIGltcG9ydHMgXHUyMDE0IGl0cyBvd24gc291cmNlIHNheXMgXCJTdGF0aWMgaW1wb3J0IGRlY2xhcmF0aW9ucyBjYW4gbmV2ZXIgYmUgZ3VhcmRlZCBhdCBydW50aW1lXCIsIHNvIGl0IHJlcG9ydHMgZXZlcnlcbiAqIGBJbXBvcnREZWNsYXJhdGlvbmAgb2YgYSBidWlsdGluIHVuY29uZGl0aW9uYWxseSBhbmQgb25seSBgaW1wb3J0KClgIC8gYHJlcXVpcmUoKWAgZ2V0IGd1YXJkLWF3YXJlbmVzcy4gSXQgaXNcbiAqIGFsc28gb25lIHRoZSBjb25zdW1lciBDQU5OT1QgV0FJVkU6IHRoZSBkaXJlY3RvcnkgcnVubmVyIHNldHNcbiAqIGBlc2xpbnQtY29tbWVudHMvbm8tcmVzdHJpY3RlZC1kaXNhYmxlOiBbJ2Vycm9yJywgJ29ic2lkaWFubWQvKicsIC4uLl1gLCB3aGl0ZWxpc3Rpbmcgb25seVxuICogYG9ic2lkaWFubWQvdWkvc2VudGVuY2UtY2FzZWAsIHNvIGFuIGlubGluZSBkaXNhYmxlIG9mIGl0IHRyYWRlcyBhIHdhcm5pbmcgZm9yIGFuIGVycm9yIGluIGEgcmV2aWV3LiBUaGF0IGlzIHdoeVxuICogZXZlcnkgZXhlbXB0aW9uIGJlbG93IGhhcyB0byBsaXZlIGhlcmUgaW4gdGhlIHNoYXJlZCBjb25maWcgcmF0aGVyIHRoYW4gYXMgYSBjb21tZW50IGF0IHRoZSBjYWxsIHNpdGUuXG4gKlxuICogT25lIGZ1cnRoZXIgZXhlbXB0aW9uIGRlbGliZXJhdGVseSBsaXZlcyBlbHNld2hlcmU6IGBnZXRJbXBvcnRYQ29uZmlnc2AgdHVybnMgb2ZmIG9ubHkgYGltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzYFxuICogZm9yIGBjb250ZXh0LnNjcmlwdEZpbGVzYC4gSXQgbmVlZHMgbm8gYG9ic2lkaWFubWRgIHR3aW4sIGJlY2F1c2UgYGdldE9ic2lkaWFuTGludENvbmZpZ3NgIHNjb3BlcyB0aGUgb2JzaWRpYW5tZFxuICogcnVsZXMgdG8gYGNvbnRleHQuc291cmNlRmlsZXNgLCBzbyB0aGV5IG5ldmVyIHJlYWNoIHNjcmlwdHMgaW4gdGhlIGZpcnN0IHBsYWNlLlxuICovXG5mdW5jdGlvbiBnZXROb2RlQnVpbHRpbnNDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICAvLyBJbnRlZ3JhdGlvbiB0ZXN0cyBydW4gaW4gYSBOb2RlIGVudmlyb25tZW50IGFuZCBsZWdpdGltYXRlbHkgcmVhZCBmaWxlcyAvIHBhdGhzLCBzbyB0aGUgTm9kZS1idWlsdGlucyBiYW5zIGRvIG5vdCBhcHBseSB0byB0aGVtLlxuICAgICAgZmlsZXM6IGNvbnRleHQuc291cmNlRm9sZGVycy5tYXAoKHNvdXJjZUZvbGRlcikgPT4gam9pbihzb3VyY2VGb2xkZXIsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVBhdGgsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueUludGVncmF0aW9uVGVzdFRzKSksXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnb2ZmJyxcbiAgICAgICAgJ29ic2lkaWFubWQvbm8tbm9kZWpzLW1vZHVsZXMnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLypcbiAgICAgICAqIEEgYGRlc2t0b3AtYCBwcmVmaXhlZCBtb2R1bGUgaXMgZGVza3RvcC1vbmx5IGJ5IGNvbnZlbnRpb246IGl0IGlzIHJlYWNoZWQgb25seSB0aHJvdWdoIGFcbiAgICAgICAqIGBQbGF0Zm9ybS5pc0Rlc2t0b3BBcHBgLWdhdGVkIGR5bmFtaWMgYGltcG9ydCgpYCBpbiBpdHMgY2FsbGVyLCBzbyBpdHMgc3RhdGljIE5vZGUgaW1wb3J0cyBuZXZlclxuICAgICAgICogbG9hZCBvbiBtb2JpbGUuIE5laXRoZXIgcnVsZSBjYW4gc2VlIHRoYXQgZ2F0ZSwgYmVjYXVzZSBpdCBzaXRzIG9uZSBmaWxlIHVwIFx1MjAxNCB0aGUgY29ycmVjdGx5LXdyaXR0ZW4gcGF0dGVyblxuICAgICAgICogcmVwb3J0cyBhbnl3YXksIGFuZCBubyBhdXRob3Itc2lkZSByZXdyaXRlIHNpbGVuY2VzIGl0LlxuICAgICAgICpcbiAgICAgICAqIEV4ZW1wdGluZyBCWSBGSUxFTkFNRSByYXRoZXIgdGhhbiBieSBhIGRpc2FibGUgY29tbWVudCBjYXJyaWVzIGEgdHJhZGUtb2ZmIGtub3dpbmdseTogdGhlIGV4ZW1wdGlvbiBrZXlzXG4gICAgICAgKiBvZmYgd2hhdCB0aGUgZmlsZSBpcyBOQU1FRCByYXRoZXIgdGhhbiB3aGF0IGl0IGRvZXMsIHNvIHRoZSBwcmVmaXggaXMgbG9hZC1iZWFyaW5nLiBBIGRlc2t0b3Atb25seSBtb2R1bGVcbiAgICAgICAqIHRoYXQgc2tpcHMgdGhlIHByZWZpeCBrZWVwcyByZXBvcnRpbmcsIGFuZCBhIGNyb3NzLXBsYXRmb3JtIG1vZHVsZSB0aGF0IHdyb25nbHkgdGFrZXMgaXQgZ2V0cyBhbiBleGVtcHRpb25cbiAgICAgICAqIGl0IHNob3VsZCBub3QgaGF2ZS5cbiAgICAgICAqL1xuICAgICAgZmlsZXM6IGNvbnRleHQuc291cmNlRm9sZGVycy5tYXAoKHNvdXJjZUZvbGRlcikgPT4gam9pbihzb3VyY2VGb2xkZXIsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVBhdGgsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueURlc2t0b3BUcykpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZicsXG4gICAgICAgICdvYnNpZGlhbm1kL25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIC8qXG4gICAgICAgKiBBIHVuaXQgdGVzdCBydW5zIHVuZGVyIHZpdGVzdCBpbiBOb2RlIGFuZCBpcyBuZXZlciBidW5kbGVkIGludG8gYG1haW4uanNgLCBzbyB0aGUgTm9kZS1idWlsdGlucyBiYW5zIGRvIG5vdFxuICAgICAgICogYXBwbHkgdG8gaXQgZWl0aGVyIFx1MjAxNCB0aGUgaWRlbnRpY2FsIGFyZ3VtZW50IHRoZSBpbnRlZ3JhdGlvbi10ZXN0IGJsb2NrIGFib3ZlIGFscmVhZHkgYWNjZXB0cy4gVGhpcyBhbHNvXG4gICAgICAgKiBjb3ZlcnMgdGhlIFNVVC1ncm91cGVkIGAqLmRlc2t0b3AudGVzdC50c2Agc2hhcGUsIHdoaWNoIG5hbWVzIHRoZSBwbGF0Zm9ybSBhcyBhIGRvdCBzZWdtZW50IGFmdGVyIHRoZVxuICAgICAgICogc3ViamVjdCB1bmRlciB0ZXN0IHJhdGhlciB0aGFuIGFzIGEgYGRlc2t0b3AtYCBwcmVmaXguXG4gICAgICAgKi9cbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdpbXBvcnQteC9uby1ub2RlanMtbW9kdWxlcyc6ICdvZmYnLFxuICAgICAgICAnb2JzaWRpYW5tZC9uby1ub2RlanMtbW9kdWxlcyc6ICdvZmYnXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0T2JzaWRpYW5MaW50Q29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3Qgb2JzaWRpYW5SZWNvbW1lbmRlZENvbmZpZ3MgPSBvYnNpZGlhbm1kLmNvbmZpZ3MucmVjb21tZW5kZWQ7XG5cbiAgLypcbiAgICogQSBidWlsdGluIHRoaXMgY29uZmlnIHNldHMgaXRzZWxmIG11c3Qgbm90IEFMU08gcnVuIHRocm91Z2ggYG9ic2lkaWFubWQvcnVsZS1jdXN0b20tbWVzc2FnZWAsIG9yIGEgY29uc3VtZXIncyBvd25cbiAgICogYCduby1jb25zb2xlJzogJ29mZidgIGlzIGluZXJ0IGFuZCBldmVyeSBjb25zb2xlIGxpbmUgaXMgcmVwb3J0ZWQgdHdpY2UuIFNlZSBgb2JzaWRpYW5tZC1ydWxlLWN1c3RvbS1tZXNzYWdlLnRzYC5cbiAgICovXG4gIGNvbnN0IG93bmVkUnVsZU5hbWVzID0gbmV3IFNldChnZXRFc2xpbnRDb3JlQ29uZmlncyhjb250ZXh0KS5mbGF0TWFwKChjb25maWcpID0+IE9iamVjdC5rZXlzKGNvbmZpZy5ydWxlcyA/PyB7fSkpKTtcblxuICBjb25zdCBzY29wZWRPYnNpZGlhblJlY29tbWVuZGVkQ29uZmlncyA9IG9ic2lkaWFuUmVjb21tZW5kZWRDb25maWdzLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgcmV0dXJuIGNvbmZpZy5maWxlcz8uaW5jbHVkZXMoJ3BhY2thZ2UuanNvbicpXG4gICAgICA/IGNvbmZpZ1xuICAgICAgOiB7XG4gICAgICAgIC4uLnN0cmlwT3duZWRSdWxlQ3VzdG9tTWVzc2FnZUVudHJpZXMoeyBjb25maWcsIG93bmVkUnVsZU5hbWVzIH0pLFxuICAgICAgICBmaWxlczogY29udGV4dC5zb3VyY2VGaWxlc1xuICAgICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW3Njb3BlZE9ic2lkaWFuUmVjb21tZW5kZWRDb25maWdzXSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgb2JzaWRpYW5tZFxuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldE9ic2lkaWFuT3ZlcnJpZGVDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBmaWxlczogY29udGV4dC5zb3VyY2VGb2xkZXJzLm1hcCgoc291cmNlRm9sZGVyKSA9PiBqb2luKHNvdXJjZUZvbGRlciwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFpblRzKSksXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvbm8tZGVmYXVsdC1leHBvcnQnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscyc6IG9ic2lkaWFuRGV2VXRpbHNQbHVnaW5cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAvKlxuICAgICAgICAgKiBEZWxpYmVyYXRlbHkgaGVyZSwgb24gYGFsbEZpbGVzKClgLCByYXRoZXIgdGhhbiBiZXNpZGUgYG5vLXVudHJ1c3RlZC1pbnB1dC1ldmVudHNgIGluXG4gICAgICAgICAqIGBnZXRJbnRlZ3JhdGlvblRlc3RDb25maWdzKClgIChvd25lciwgMjAyNi0wOS0wOSkuIEFuIGBldmFsSW5PYnNpZGlhbmAgY2FsbCBpcyB1bm1pc3Rha2FibGUsIHNvIGFcbiAgICAgICAgICogZmlsZSB0aGF0IG1ha2VzIG5vbmUgaXMgdW50b3VjaGVkIGFuZCBhIGJyb2FkIGdsb2IgY29zdHMgbm90aGluZyAtLSB3aGlsZSBzY3JpcHQgY29kZSB0aGF0IGRyaXZlc1xuICAgICAgICAgKiBhIHJlYWwgT2JzaWRpYW4gb3V0c2lkZSBhIHRlc3QgKGBkZW1vLXZhdWx0LWJ1dHRvbnMudHNgKSBpcyB1bmRlciB0aGUgc2FtZSB0cmFuc3BvcnQgY2FwIGFuZCB3b3VsZFxuICAgICAgICAgKiBvdGhlcndpc2UgYmUgZW5mb3JjZWQgbm93aGVyZS5cbiAgICAgICAgICovXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbm8tb3Zlci1jYXAtd2FpdC1pbi1ldmFsLWluLW9ic2lkaWFuJzogJ2Vycm9yJyxcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9yZXF1aXJlLWNvbXBvbmVudC1zdWZmaXgnOiAnZXJyb3InLFxuICAgICAgICAvKlxuICAgICAgICAgKiBPYnNpZGlhbidzIGBDb21wb25lbnRgIGhhcyBpdHMgb3duIGByZW1vdmVDaGlsZChjb21wb25lbnQpYCBmb3IgdGhlIGNvbXBvbmVudCBsaWZlY3ljbGUsIHVucmVsYXRlZFxuICAgICAgICAgKiB0byBgTm9kZSNyZW1vdmVDaGlsZGAuIFRoZSBydWxlIG1hdGNoZXMgb24gdGhlIG1ldGhvZCBuYW1lIGFsb25lLCBzbyBldmVyeSByZXBvcnQgaGVyZSBpcyBhXG4gICAgICAgICAqIGNvbXBvbmVudCBiZWluZyB1bmxvYWRlZCwgYW5kIGZvbGxvd2luZyB0aGUgYWR2aWNlIGNhbGxzIGEgYHJlbW92ZSgpYCB0aGF0IGRvZXMgbm90IGV4aXN0IC0tIHdoaWNoXG4gICAgICAgICAqIGlzIHdoYXQgYHRzY2Agc2FpZCB3aGVuIHRoZSBmaXhlciB3YXMgbGV0IGxvb3NlIG9uIHRoZW0uXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItZG9tLW5vZGUtcmVtb3ZlJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIERpcmVjdGx5IGNvbnRyYWRpY3RzIGBvYnNpZGlhbm1kL25vLWdsb2JhbC10aGlzYDogdGhpcyBydWxlIHJld3JpdGVzIGB3aW5kb3cueGAgdG8gYGdsb2JhbFRoaXMueGAsIGFuZFxuICAgICAgICAgKiB0aGF0IG9uZSBmb3JiaWRzIGBnbG9iYWxUaGlzYCBvdXRyaWdodC4gV2l0aCBib3RoIGVuYWJsZWQsIGAtLWZpeGAgYXBwbGllcyBvbmUgYW5kIHRoZW4gdGhlIG90aGVyXG4gICAgICAgICAqIHJldmVydHMgaXQsIHdoaWNoIEVTTGludCByZXBvcnRzIGFzIGBFU0xpbnRDaXJjdWxhckZpeGVzV2FybmluZ2AgYWNyb3NzIDI5IGZpbGVzLiBPYnNpZGlhbidzIG93blxuICAgICAgICAgKiBndWlkYW5jZSB3aW5zIGluIGFuIE9ic2lkaWFuIGxpYnJhcnksIHNvIHRoaXMgaXMgdGhlIHJ1bGUgdGhhdCBnaXZlcyB3YXkuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItZ2xvYmFsLXRoaXMnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZUEsMkJBTU87QUFDUCxrQkFBcUI7QUFFckIsc0NBQXVCO0FBQ3ZCLDZCQUFnQztBQUNoQyxvQkFBNkI7QUFFN0Isd0NBQXdDO0FBQ3hDLDhCQUEyQjtBQUMzQix1Q0FBdUM7QUFDdkMsNENBQW1EO0FBZ0JuRCxNQUFNLHVCQUF1QjtBQVd0QixTQUFTLG9CQUFvQixVQUFzQyxDQUFDLEdBQW9CO0FBQzdGLFFBQU0sY0FBVSx1REFBaUM7QUFFakQsTUFBSSxRQUFRLGFBQWE7QUFDdkIsWUFBUSxZQUFZLE9BQU87QUFBQSxFQUM3QjtBQUVBLFFBQU0sZ0JBQWdCLFFBQVEsZ0JBQWdCLE9BQU8sS0FBSyxDQUFDO0FBRTNELGFBQU87QUFBQSxJQUNMLE9BQUcsNkNBQXVCO0FBQUEsSUFFMUIsR0FBRyx1QkFBdUIsT0FBTztBQUFBLElBQ2pDLE9BQUcsaURBQTJCLEVBQUUsU0FBUyxlQUFlLHlEQUF3QixvQkFBb0IscUJBQXFCLENBQUM7QUFBQSxJQUMxSCxHQUFHLDJCQUEyQixPQUFPO0FBQUEsSUFD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
403
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBzaGFyZWQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZm9yIE9ic2lkaWFuIHBsdWdpbnMuXG4gKlxuICogSXQgaXMgdGhlIGdlbmVyaWMgY29uZmlndXJhdGlvbiBvZiBgQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXRgIHBsdXMgdGhlIE9ic2lkaWFuIGxheWVycyBhbG9uZTpcbiAqIGBlc2xpbnQtcGx1Z2luLW9ic2lkaWFubWRgJ3MgcmVjb21tZW5kZWQgcnVsZXMsIHRoZSByb290IGBtYW5pZmVzdC5qc29uYCBhbmQgYExJQ0VOU0VgLCB0aGUgTm9kZS1idWlsdGlucyBleGVtcHRpb25zXG4gKiBvZiBkZXNrdG9wLW9ubHkgbW9kdWxlcyBhbmQgdGVzdHMsIHRoZSBpbnRlZ3JhdGlvbi10ZXN0IHJ1bGVzIGFuZCB0aGUgT2JzaWRpYW4gaW4taG91c2UgcnVsZXMuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIERlY2xhcmF0aXZlIEVTTGludCBydWxlL3BsdWdpbiBjb25maWd1cmF0aW9uOyBjb3JyZWN0bmVzcyBpcyB2ZXJpZmllZCBieSBydW5uaW5nIEVTTGludCwgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgRGVmaW5lRXNsaW50Q29uZmlnc09wdGlvbnMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9saW50ZXJzL2VzbGludC1jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBMaW50ZXIgfSBmcm9tICdlc2xpbnQnO1xuXG5pbXBvcnQge1xuICBjcmVhdGVEZWZhdWx0RXNsaW50Q29uZmlnQ29udGV4dCxcbiAgRXNsaW50Q29uZmlnQ29udGV4dCxcbiAgZ2V0RXNsaW50Q29yZUNvbmZpZ3MsXG4gIGdldEdsb2JhbElnbm9yZUNvbmZpZ3MsXG4gIGdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2xpbnRlcnMvZXNsaW50LWNvbmZpZyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBwbHVnaW5gIGlzIHRvbyBjb25mdXNpbmcuXG5pbXBvcnQgb2JzaWRpYW5tZCBmcm9tICdlc2xpbnQtcGx1Z2luLW9ic2lkaWFubWQnO1xuaW1wb3J0IHsgUGxhaW5UZXh0UGFyc2VyIH0gZnJvbSAnZXNsaW50LXBsdWdpbi1vYnNpZGlhbm1kL2Rpc3QvbGliL3BsYWluVGV4dFBhcnNlci5qcyc7XG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tICdlc2xpbnQvY29uZmlnJztcblxuaW1wb3J0IHsgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMgfSBmcm9tICcuLi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5pbXBvcnQgeyBqc29uUGx1Z2luIH0gZnJvbSAnLi9lc2xpbnQtcnVsZXMvbWFuaWZlc3QtaGVscGVycy50cyc7XG5pbXBvcnQgeyBvYnNpZGlhbkRldlV0aWxzUGx1Z2luIH0gZnJvbSAnLi9lc2xpbnQtcnVsZXMvb2JzaWRpYW4tZGV2LXV0aWxzLXBsdWdpbi50cyc7XG5pbXBvcnQgeyBzdHJpcE93bmVkUnVsZUN1c3RvbU1lc3NhZ2VFbnRyaWVzIH0gZnJvbSAnLi9vYnNpZGlhbm1kLXJ1bGUtY3VzdG9tLW1lc3NhZ2UudHMnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZXhwb3J0LWZyb20gLS0gUmUtZXhwb3J0ZWQgc28gYSBwbHVnaW4ncyBgc2NyaXB0cy9lc2xpbnQtY29uZmlnLnRzYCBrZWVwcyBpbXBvcnRpbmcgYm90aCBmcm9tIGhlcmUuXG5leHBvcnQgdHlwZSB7IERlZmluZUVzbGludENvbmZpZ3NPcHRpb25zIH07XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZXhwb3J0LWZyb20gLS0gUmUtZXhwb3J0ZWQgc28gYSBwbHVnaW4ncyBgc2NyaXB0cy9lc2xpbnQtY29uZmlnLnRzYCBrZWVwcyBpbXBvcnRpbmcgYm90aCBmcm9tIGhlcmUuXG5leHBvcnQgeyBFc2xpbnRDb25maWdDb250ZXh0IH07XG5cbi8qXG4gKiBUaGUgbWluaW11bSBPYnNpZGlhbiBpbnN0YWxsZXIgdGhhdCBzdGlsbCByZWNlaXZlcyBhcHAgdXBkYXRlcyBhbmQgd29ya3MgaXMgMS4xLjksIHdoaWNoIHNoaXBzIEVsZWN0cm9uXG4gKiAyMS4zLjMgYW5kIHJ1bnMgTm9kZSAxNi4xNi4wLiBTaGlwcGVkIHNvdXJjZSBtdXN0IHRoZXJlZm9yZSBhdm9pZCBOb2RlL0VTIHJ1bnRpbWUgYnVpbHRpbnMgdW5hdmFpbGFibGUgaW5cbiAqIHRoYXQgdmVyc2lvbi4gVGVzdHMgYW5kIHNjcmlwdHMgYXJlIGRldi1vbmx5IGFuZCBleGVtcHQuXG4gKlxuICogU291cmNlIG9mIHRydXRoOiBgb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZy9tZXRhZGF0YS5qc29uYCBcdTIwMTQgdGhlIG5ld2VzdCByZWxlYXNlIGNhcnJ5aW5nIHRoZSBmaWVsZFxuICogKDEuMTMuMSkgZGVjbGFyZXMgYG1pblJ1bm5hYmxlSW5zdGFsbGVyVmVyc2lvbjogXCIxLjEuOVwiYCwgYW5kIHRoYXQgaW5zdGFsbGVyJ3MgYHJ1bnRpbWVWZXJzaW9uc2AgZ2l2ZXMgdGhlXG4gKiBFbGVjdHJvbiBhbmQgTm9kZSB2ZXJzaW9ucyBhYm92ZS4gUmUtZGVyaXZlIGZyb20gdGhlcmUgcmF0aGVyIHRoYW4gZWRpdGluZyB0aGlzIG51bWJlciBieSBoYW5kLlxuICovXG5jb25zdCBNSU5JTVVNX05PREVfVkVSU0lPTiA9ICc+PTE2LjE2LjAnO1xuXG4vKipcbiAqIEJ1aWxkIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGJ1aWxkcyB0aGUgRVNMaW50IGNvbmZpZ3VyYXRpb25zIG9mIGFuIE9ic2lkaWFuIHBsdWdpbjogdGhlIGdlbmVyaWMgY29uZmlndXJhdGlvbiBvZlxuICogYEBtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0YCBwbHVzIHRoZSBPYnNpZGlhbiBsYXllcnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgZGVmaW5pbmcgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICogQHJldHVybnMgVGhlIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUVzbGludENvbmZpZ3Mob3B0aW9uczogRGVmaW5lRXNsaW50Q29uZmlnc09wdGlvbnMgPSB7fSk6IExpbnRlci5Db25maWdbXSB7XG4gIGNvbnN0IGNvbnRleHQgPSBjcmVhdGVEZWZhdWx0RXNsaW50Q29uZmlnQ29udGV4dCgpO1xuXG4gIGlmIChvcHRpb25zLmVkaXRDb250ZXh0KSB7XG4gICAgb3B0aW9ucy5lZGl0Q29udGV4dChjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGN1c3RvbUNvbmZpZ3MgPSBvcHRpb25zLmN1c3RvbUNvbmZpZ3M/Lihjb250ZXh0KSA/PyBbXTtcblxuICByZXR1cm4gZGVmaW5lQ29uZmlnKFxuICAgIC4uLmdldEdsb2JhbElnbm9yZUNvbmZpZ3MoKSxcbiAgICAvLyBPYnNpZGlhbm1kIGNvbmZpZ3MgcnVuIGZpcnN0IHNvIG91ciBzdHJpY3RlciBydWxlcyBvdmVycmlkZSB0aGVpciByZWxheGVkIGRlZmF1bHRzXG4gICAgLi4uZ2V0T2JzaWRpYW5MaW50Q29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlncyh7IGNvbnRleHQsIGluSG91c2VQbHVnaW46IG9ic2lkaWFuRGV2VXRpbHNQbHVnaW4sIG1pbmltdW1Ob2RlVmVyc2lvbjogTUlOSU1VTV9OT0RFX1ZFUlNJT04gfSksXG4gICAgLi4uZ2V0T2JzaWRpYW5PdmVycmlkZUNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0Tm9kZUJ1aWx0aW5zQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXRJbnRlZ3JhdGlvblRlc3RDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldE1hbmlmZXN0Q29uZmlncygpLFxuICAgIC4uLmdldExpY2Vuc2VDb25maWdzKCksXG4gICAgLi4uY3VzdG9tQ29uZmlnc1xuICApO1xufVxuZnVuY3Rpb24gZ2V0SW50ZWdyYXRpb25UZXN0Q29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgLypcbiAgICAgICAqIEFuIGludGVncmF0aW9uIHRlc3QgdGhhdCBkcml2ZXMgdGhlIFVJIHdpdGggYGRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoLi4uKSlgIHByb2R1Y2VzIGFuXG4gICAgICAgKiBVTlRSVVNURUQgZXZlbnQsIGFuZCBPYnNpZGlhbiBhbmQgQ29kZU1pcnJvciBnYXRlIG9uIGBpc1RydXN0ZWRgIFx1MjAxNCBzbyB0aGUgdGVzdCBjYW4gZXhlcmNpc2VcbiAgICAgICAqIG5vdGhpbmcgd2hpbGUgc3RpbGwgcGFzc2luZy4gT25seSBpbnRlZ3JhdGlvbiB0ZXN0cyBhcmUgY292ZXJlZDogYSB1bml0IHRlc3QgaGFzIG5vIHJlYWwgaW5wdXRcbiAgICAgICAqIHBpcGVsaW5lIHRvIHJlYWNoLCBzbyBkaXNwYXRjaGluZyBpcyB0aGUgb25seSB0aGluZyBpdCBjYW4gZG8uXG4gICAgICAgKlxuICAgICAgICogQW5kcm9pZCBmaWxlcyB1c2VkIHRvIGJlIGV4ZW1wdCBCWSBGSUxFTkFNRSwgb24gdGhlIGdyb3VuZHMgdGhhdCB0aGUgdHJ1c3RlZCBoZWxwZXJzIHdlcmUgYnVpbHQgb25cbiAgICAgICAqIGB3aW5kb3cuZWxlY3Ryb25gIGFuZCBzbyBjb3VsZCBub3QgYmUgcmVhY2hlZCBmcm9tIGEgcGhvbmUgYXQgYWxsLiBUaGF0IGV4ZW1wdGlvbiBpcyBnb25lOiB0aGVcbiAgICAgICAqIGhhcm5lc3MgZ2FpbmVkIGEgbW9iaWxlIHRydXN0ZWQtaW5wdXQgcGF0aCwgYW5kIGBjbGlja0VsZW1lbnRgLCBgY2xpY2tNb3VzZWAsIGBwcmVzc0tleWAgYW5kXG4gICAgICAgKiBgdHlwZUludG9FZGl0b3JgIGFsbCB3b3JrIHRoZXJlLiBPbmx5IHRoZSBob3ZlciBoZWxwZXJzIHN0aWxsIHRocm93LCBiZWNhdXNlIGA6aG92ZXJgIGhhcyBubyB0b3VjaFxuICAgICAgICogZXF1aXZhbGVudCBcdTIwMTQgYSBmaWxlIHJlYWNoaW5nIGZvciB0aG9zZSBoYXMgdG8gYnJhbmNoIG9uIGBQbGF0Zm9ybS5pc0Rlc2t0b3BBcHBgLCB3aGljaCBpcyB0aGUgc2FtZVxuICAgICAgICogdGhpbmcgYSBgKi5jcm9zcy1wbGF0Zm9ybS4qYCBmaWxlIGhhcyBhbHdheXMgaGFkIHRvIGRvLlxuICAgICAgICovXG4gICAgICBmaWxlczogY29udGV4dC5zb3VyY2VGb2xkZXJzLm1hcCgoc291cmNlRm9sZGVyKSA9PiBqb2luKHNvdXJjZUZvbGRlciwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55UGF0aCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55SW50ZWdyYXRpb25UZXN0VHMpKSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cyc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKlxuICogVGhlIENvbW11bml0eSBkaXJlY3RvcnkgcmVxdWlyZXMgYSByb290IGBMSUNFTlNFYCwgYW5kIGBvYnNpZGlhbm1kL3ZhbGlkYXRlLWxpY2Vuc2VgIGlzIHRoZSBvbmx5IGNoZWNrXG4gKiBvbiB3aGF0IGl0IHNheXM6IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG11c3Qgbm90IHN0aWxsIGJlIHRoZSBzYW1wbGUgcGx1Z2luJ3MsIGFuZCB0aGUgeWVhciBtdXN0IGJlXG4gKiBjdXJyZW50LiBCb3RoIG5lZWQgYFBsYWluVGV4dFBhcnNlcmAsIHdoaWNoIHRoZSBwbHVnaW4gZG9lcyBub3QgZXhwb3J0LCBzbyBpdCBpcyByZWFjaGVkIHRocm91Z2ggaXRzXG4gKiBidWlsZCBvdXRwdXQgLS0gdGhlIHBhY2thZ2UgZGVjbGFyZXMgbm8gYGV4cG9ydHNgIG1hcCBhbmQgc2hpcHMgYSBkZWNsYXJhdGlvbiBiZXNpZGUgdGhlIG1vZHVsZSwgc28gdGhlXG4gKiBkZWVwIHBhdGggcmVzb2x2ZXMsIGJ1dCBpdCBpcyB0aGUgb25lIGltcG9ydCBoZXJlIHRoYXQgYSBwYXRjaCByZWxlYXNlIHVwc3RyZWFtIGNvdWxkIGJyZWFrLlxuICpcbiAqIFRoZSBydWxlIGNvbXBhcmVzIHRoZSB5ZWFyIGFnYWluc3QgYG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKWAgYXQgbGludCB0aW1lLCBzbyBhIHJlcG8gZ29lcyByZWQgYXQgdGhlXG4gKiB0dXJuIG9mIHRoZSB5ZWFyIHVudGlsIGl0cyBMSUNFTlNFIGlzIGJ1bXBlZC4gYC5naXRodWIvd29ya2Zsb3dzL3VwZGF0ZS1saWNlbnNlLXllYXIueW1sYCBkb2VzIHRoYXQgb25cbiAqIDEgSmFudWFyeTsgYSByZXBvIGFkb3B0aW5nIHRoaXMgY29uZmlnIG5lZWRzIHRoZSBzYW1lIHdvcmtmbG93LCBvciB0aGUgeWVhciBjaGVjayB3aWxsIGZhaWwgaXRzIENJLlxuICovXG5mdW5jdGlvbiBnZXRMaWNlbnNlQ29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBmaWxlczogW09ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkxpY2Vuc2VdLFxuICAgICAgbGFuZ3VhZ2VPcHRpb25zOiB7XG4gICAgICAgIHBhcnNlcjogUGxhaW5UZXh0UGFyc2VyXG4gICAgICB9LFxuICAgICAgcGx1Z2luczoge1xuICAgICAgICBvYnNpZGlhbm1kXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ29ic2lkaWFubWQvdmFsaWRhdGUtbGljZW5zZSc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKlxuICogVGhlIHJvb3QgYG1hbmlmZXN0Lmpzb25gIGlzIHdoYXQgdGhlIENvbW11bml0eSBkaXJlY3RvcnkncyBhdXRvbWF0ZWQgcmV2aWV3IGFjdHVhbGx5IHJlYWRzLCBhbmQgdW50aWxcbiAqIHRoaXMgY29uZmlnIGV4aXN0ZWQgbm8gbGludGVyIHJlYWQgaXQgYXQgYWxsOiBgb2JzaWRpYW5tZC92YWxpZGF0ZS1tYW5pZmVzdGAgcmVnaXN0ZXJzIGEgYFByb2dyYW1gXG4gKiB2aXNpdG9yIGFuZCBleHBlY3RzIGFuIEVTVHJlZSBgT2JqZWN0RXhwcmVzc2lvbmAsIHdoaWxlIGV2ZXJ5IEpTT04gcGFyc2VyIHRoYXQgc2hpcHMgcHJvZHVjZXMgc29tZXRoaW5nXG4gKiBlbHNlIC0tIGBAZXNsaW50L2pzb25gIHByb2R1Y2VzIE1vbW9hIChgRG9jdW1lbnRgKSwgYGpzb25jLWVzbGludC1wYXJzZXJgIHByb2R1Y2VzXG4gKiBgSlNPTk9iamVjdEV4cHJlc3Npb25gIC0tIHNvIHRoZSBydWxlIHNpbGVudGx5IG1hdGNoZXMgbm90aGluZyBubyBtYXR0ZXIgd2hpY2ggZmlsZXMgaXQgaXMgc2NvcGVkIHRvLlxuICogVGhlIGluLWhvdXNlIHJ1bGVzIGJlbG93IHZpc2l0IHRoZSBNb21vYSBBU1QgaW5zdGVhZC5cbiAqXG4gKiBgbWFuaWZlc3QuanNvbmAgaXMgc3RyaWN0IEpTT04sIHNvIGFuIGBlc2xpbnQtZGlzYWJsZWAgY29tbWVudCBpbiBpdCBpcyBhIHBhcnNlIGVycm9yIEFORCB3b3VsZCBzdG9wXG4gKiBPYnNpZGlhbiBsb2FkaW5nIHRoZSBwbHVnaW4uIFRoYXQgbWFrZXMgdGhlIGNvbmZpZyB0aGUgb25seSBwbGFjZSBhIGNoZWNrIGNhbiBiZSB3YWl2ZWQsIHdoaWNoIGlzIHdoeVxuICogdGhlc2UgYXJlIGZvdXIgcnVsZXMgcmF0aGVyIHRoYW4gb25lOiBhIHJlcG8gd2l0aCBhIGdyYW5kZmF0aGVyZWQgYGlkYCBjYW4gdHVybiBvZmYgYG1hbmlmZXN0LWlkYCBhbG9uZVxuICogYW5kIGtlZXAgdGhlIHJlc3QuXG4gKi9cbmZ1bmN0aW9uIGdldE1hbmlmZXN0Q29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBmaWxlczogW09ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbl0sXG4gICAgICBsYW5ndWFnZTogJ2pzb24vanNvbicsXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgICdqc29uJzoganNvblBsdWdpbixcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscyc6IG9ic2lkaWFuRGV2VXRpbHNQbHVnaW5cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL21hbmlmZXN0LWRlc2NyaXB0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9tYW5pZmVzdC1pZCc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbWFuaWZlc3QtbmFtZSc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbWFuaWZlc3Qtc2NoZW1hJzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbi8qXG4gKiBFdmVyeSBmaWxlIHNldCB0aGF0IGlzIGV4ZW1wdCBmcm9tIHRoZSBOb2RlLWJ1aWx0aW5zIGJhbnMsIGluIG9uZSBwbGFjZS5cbiAqXG4gKiBUd28gcnVsZXMgYmFuIE5vZGUgYnVpbHRpbnMsIGFuZCB0aGV5IGFyZSBOT1QgaW50ZXJjaGFuZ2VhYmxlLiBgaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXNgIGlzIG91cnMsIGl0IGlzXG4gKiBhbiBlcnJvciwgYW5kIGl0cyB3YWl2ZXJzIGFyZSB0b2xlcmF0ZWQgYnkgdGhlIGNvbW11bml0eS1kaXJlY3RvcnkgcmV2aWV3IHJ1bm5lci4gYG9ic2lkaWFubWQvbm8tbm9kZWpzLW1vZHVsZXNgXG4gKiBhcnJpdmVzIHZpYSBgb2JzaWRpYW5tZC5jb25maWdzLnJlY29tbWVuZGVkYCAoc2VlIGBnZXRPYnNpZGlhbkxpbnRDb25maWdzYCkgYW5kIGlzIHN0cmljdGx5IHdlYWtlciBvbiBzdGF0aWNcbiAqIGltcG9ydHMgXHUyMDE0IGl0cyBvd24gc291cmNlIHNheXMgXCJTdGF0aWMgaW1wb3J0IGRlY2xhcmF0aW9ucyBjYW4gbmV2ZXIgYmUgZ3VhcmRlZCBhdCBydW50aW1lXCIsIHNvIGl0IHJlcG9ydHMgZXZlcnlcbiAqIGBJbXBvcnREZWNsYXJhdGlvbmAgb2YgYSBidWlsdGluIHVuY29uZGl0aW9uYWxseSBhbmQgb25seSBgaW1wb3J0KClgIC8gYHJlcXVpcmUoKWAgZ2V0IGd1YXJkLWF3YXJlbmVzcy4gSXQgaXNcbiAqIGFsc28gb25lIHRoZSBjb25zdW1lciBDQU5OT1QgV0FJVkU6IHRoZSBkaXJlY3RvcnkgcnVubmVyIHNldHNcbiAqIGBlc2xpbnQtY29tbWVudHMvbm8tcmVzdHJpY3RlZC1kaXNhYmxlOiBbJ2Vycm9yJywgJ29ic2lkaWFubWQvKicsIC4uLl1gLCB3aGl0ZWxpc3Rpbmcgb25seVxuICogYG9ic2lkaWFubWQvdWkvc2VudGVuY2UtY2FzZWAsIHNvIGFuIGlubGluZSBkaXNhYmxlIG9mIGl0IHRyYWRlcyBhIHdhcm5pbmcgZm9yIGFuIGVycm9yIGluIGEgcmV2aWV3LiBUaGF0IGlzIHdoeVxuICogZXZlcnkgZXhlbXB0aW9uIGJlbG93IGhhcyB0byBsaXZlIGhlcmUgaW4gdGhlIHNoYXJlZCBjb25maWcgcmF0aGVyIHRoYW4gYXMgYSBjb21tZW50IGF0IHRoZSBjYWxsIHNpdGUuXG4gKlxuICogT25lIGZ1cnRoZXIgZXhlbXB0aW9uIGRlbGliZXJhdGVseSBsaXZlcyBlbHNld2hlcmU6IGBnZXRJbXBvcnRYQ29uZmlnc2AgdHVybnMgb2ZmIG9ubHkgYGltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzYFxuICogZm9yIGBjb250ZXh0LnNjcmlwdEZpbGVzYC4gSXQgbmVlZHMgbm8gYG9ic2lkaWFubWRgIHR3aW4sIGJlY2F1c2UgYGdldE9ic2lkaWFuTGludENvbmZpZ3NgIHNjb3BlcyB0aGUgb2JzaWRpYW5tZFxuICogcnVsZXMgdG8gYGNvbnRleHQuc291cmNlRmlsZXNgLCBzbyB0aGV5IG5ldmVyIHJlYWNoIHNjcmlwdHMgaW4gdGhlIGZpcnN0IHBsYWNlLlxuICovXG5mdW5jdGlvbiBnZXROb2RlQnVpbHRpbnNDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICAvLyBJbnRlZ3JhdGlvbiB0ZXN0cyBydW4gaW4gYSBOb2RlIGVudmlyb25tZW50IGFuZCBsZWdpdGltYXRlbHkgcmVhZCBmaWxlcyAvIHBhdGhzLCBzbyB0aGUgTm9kZS1idWlsdGlucyBiYW5zIGRvIG5vdCBhcHBseSB0byB0aGVtLlxuICAgICAgZmlsZXM6IGNvbnRleHQuc291cmNlRm9sZGVycy5tYXAoKHNvdXJjZUZvbGRlcikgPT4gam9pbihzb3VyY2VGb2xkZXIsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVBhdGgsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueUludGVncmF0aW9uVGVzdFRzKSksXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnb2ZmJyxcbiAgICAgICAgJ29ic2lkaWFubWQvbm8tbm9kZWpzLW1vZHVsZXMnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLypcbiAgICAgICAqIEEgYGRlc2t0b3AtYCBwcmVmaXhlZCBtb2R1bGUgaXMgZGVza3RvcC1vbmx5IGJ5IGNvbnZlbnRpb246IGl0IGlzIHJlYWNoZWQgb25seSB0aHJvdWdoIGFcbiAgICAgICAqIGBQbGF0Zm9ybS5pc0Rlc2t0b3BBcHBgLWdhdGVkIGR5bmFtaWMgYGltcG9ydCgpYCBpbiBpdHMgY2FsbGVyLCBzbyBpdHMgc3RhdGljIE5vZGUgaW1wb3J0cyBuZXZlclxuICAgICAgICogbG9hZCBvbiBtb2JpbGUuIE5laXRoZXIgcnVsZSBjYW4gc2VlIHRoYXQgZ2F0ZSwgYmVjYXVzZSBpdCBzaXRzIG9uZSBmaWxlIHVwIFx1MjAxNCB0aGUgY29ycmVjdGx5LXdyaXR0ZW4gcGF0dGVyblxuICAgICAgICogcmVwb3J0cyBhbnl3YXksIGFuZCBubyBhdXRob3Itc2lkZSByZXdyaXRlIHNpbGVuY2VzIGl0LlxuICAgICAgICpcbiAgICAgICAqIEV4ZW1wdGluZyBCWSBGSUxFTkFNRSByYXRoZXIgdGhhbiBieSBhIGRpc2FibGUgY29tbWVudCBjYXJyaWVzIGEgdHJhZGUtb2ZmIGtub3dpbmdseTogdGhlIGV4ZW1wdGlvbiBrZXlzXG4gICAgICAgKiBvZmYgd2hhdCB0aGUgZmlsZSBpcyBOQU1FRCByYXRoZXIgdGhhbiB3aGF0IGl0IGRvZXMsIHNvIHRoZSBwcmVmaXggaXMgbG9hZC1iZWFyaW5nLiBBIGRlc2t0b3Atb25seSBtb2R1bGVcbiAgICAgICAqIHRoYXQgc2tpcHMgdGhlIHByZWZpeCBrZWVwcyByZXBvcnRpbmcsIGFuZCBhIGNyb3NzLXBsYXRmb3JtIG1vZHVsZSB0aGF0IHdyb25nbHkgdGFrZXMgaXQgZ2V0cyBhbiBleGVtcHRpb25cbiAgICAgICAqIGl0IHNob3VsZCBub3QgaGF2ZS5cbiAgICAgICAqL1xuICAgICAgZmlsZXM6IGNvbnRleHQuc291cmNlRm9sZGVycy5tYXAoKHNvdXJjZUZvbGRlcikgPT4gam9pbihzb3VyY2VGb2xkZXIsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVBhdGgsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueURlc2t0b3BUcykpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZicsXG4gICAgICAgICdvYnNpZGlhbm1kL25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIC8qXG4gICAgICAgKiBBIHVuaXQgdGVzdCBydW5zIHVuZGVyIHZpdGVzdCBpbiBOb2RlIGFuZCBpcyBuZXZlciBidW5kbGVkIGludG8gYG1haW4uanNgLCBzbyB0aGUgTm9kZS1idWlsdGlucyBiYW5zIGRvIG5vdFxuICAgICAgICogYXBwbHkgdG8gaXQgZWl0aGVyIFx1MjAxNCB0aGUgaWRlbnRpY2FsIGFyZ3VtZW50IHRoZSBpbnRlZ3JhdGlvbi10ZXN0IGJsb2NrIGFib3ZlIGFscmVhZHkgYWNjZXB0cy4gVGhpcyBhbHNvXG4gICAgICAgKiBjb3ZlcnMgdGhlIFNVVC1ncm91cGVkIGAqLmRlc2t0b3AudGVzdC50c2Agc2hhcGUsIHdoaWNoIG5hbWVzIHRoZSBwbGF0Zm9ybSBhcyBhIGRvdCBzZWdtZW50IGFmdGVyIHRoZVxuICAgICAgICogc3ViamVjdCB1bmRlciB0ZXN0IHJhdGhlciB0aGFuIGFzIGEgYGRlc2t0b3AtYCBwcmVmaXguXG4gICAgICAgKi9cbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdpbXBvcnQteC9uby1ub2RlanMtbW9kdWxlcyc6ICdvZmYnLFxuICAgICAgICAnb2JzaWRpYW5tZC9uby1ub2RlanMtbW9kdWxlcyc6ICdvZmYnXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0T2JzaWRpYW5MaW50Q29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3Qgb2JzaWRpYW5SZWNvbW1lbmRlZENvbmZpZ3MgPSBvYnNpZGlhbm1kLmNvbmZpZ3MucmVjb21tZW5kZWQ7XG5cbiAgLypcbiAgICogQSBidWlsdGluIHRoaXMgY29uZmlnIHNldHMgaXRzZWxmIG11c3Qgbm90IEFMU08gcnVuIHRocm91Z2ggYG9ic2lkaWFubWQvcnVsZS1jdXN0b20tbWVzc2FnZWAsIG9yIGEgY29uc3VtZXIncyBvd25cbiAgICogYCduby1jb25zb2xlJzogJ29mZidgIGlzIGluZXJ0IGFuZCBldmVyeSBjb25zb2xlIGxpbmUgaXMgcmVwb3J0ZWQgdHdpY2UuIFNlZSBgb2JzaWRpYW5tZC1ydWxlLWN1c3RvbS1tZXNzYWdlLnRzYC5cbiAgICovXG4gIGNvbnN0IG93bmVkUnVsZU5hbWVzID0gbmV3IFNldChnZXRFc2xpbnRDb3JlQ29uZmlncyhjb250ZXh0KS5mbGF0TWFwKChjb25maWcpID0+IE9iamVjdC5rZXlzKGNvbmZpZy5ydWxlcyA/PyB7fSkpKTtcblxuICBjb25zdCBzY29wZWRPYnNpZGlhblJlY29tbWVuZGVkQ29uZmlncyA9IG9ic2lkaWFuUmVjb21tZW5kZWRDb25maWdzLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgcmV0dXJuIGNvbmZpZy5maWxlcz8uaW5jbHVkZXMoJ3BhY2thZ2UuanNvbicpXG4gICAgICA/IGNvbmZpZ1xuICAgICAgOiB7XG4gICAgICAgIC4uLnN0cmlwT3duZWRSdWxlQ3VzdG9tTWVzc2FnZUVudHJpZXMoeyBjb25maWcsIG93bmVkUnVsZU5hbWVzIH0pLFxuICAgICAgICBmaWxlczogY29udGV4dC5zb3VyY2VGaWxlc1xuICAgICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW3Njb3BlZE9ic2lkaWFuUmVjb21tZW5kZWRDb25maWdzXSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgb2JzaWRpYW5tZFxuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldE9ic2lkaWFuT3ZlcnJpZGVDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBmaWxlczogY29udGV4dC5zb3VyY2VGb2xkZXJzLm1hcCgoc291cmNlRm9sZGVyKSA9PiBqb2luKHNvdXJjZUZvbGRlciwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFpblRzKSksXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvbm8tZGVmYXVsdC1leHBvcnQnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscyc6IG9ic2lkaWFuRGV2VXRpbHNQbHVnaW5cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAvKlxuICAgICAgICAgKiBEZWxpYmVyYXRlbHkgaGVyZSwgb24gYGFsbEZpbGVzKClgLCByYXRoZXIgdGhhbiBiZXNpZGUgYG5vLXVudHJ1c3RlZC1pbnB1dC1ldmVudHNgIGluXG4gICAgICAgICAqIGBnZXRJbnRlZ3JhdGlvblRlc3RDb25maWdzKClgIChvd25lciwgMjAyNi0wOS0wOSkuIEFuIGBldmFsSW5PYnNpZGlhbmAgY2FsbCBpcyB1bm1pc3Rha2FibGUsIHNvIGFcbiAgICAgICAgICogZmlsZSB0aGF0IG1ha2VzIG5vbmUgaXMgdW50b3VjaGVkIGFuZCBhIGJyb2FkIGdsb2IgY29zdHMgbm90aGluZyAtLSB3aGlsZSBzY3JpcHQgY29kZSB0aGF0IGRyaXZlc1xuICAgICAgICAgKiBhIHJlYWwgT2JzaWRpYW4gb3V0c2lkZSBhIHRlc3QgKGBkZW1vLXZhdWx0LWJ1dHRvbnMudHNgKSBpcyB1bmRlciB0aGUgc2FtZSB0cmFuc3BvcnQgY2FwIGFuZCB3b3VsZFxuICAgICAgICAgKiBvdGhlcndpc2UgYmUgZW5mb3JjZWQgbm93aGVyZS5cbiAgICAgICAgICovXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbm8tb3Zlci1jYXAtd2FpdC1pbi1ldmFsLWluLW9ic2lkaWFuJzogJ2Vycm9yJyxcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9yZXF1aXJlLWNvbXBvbmVudC1zdWZmaXgnOiAnZXJyb3InLFxuICAgICAgICAvKlxuICAgICAgICAgKiBPYnNpZGlhbidzIGBDb21wb25lbnRgIGhhcyBpdHMgb3duIGByZW1vdmVDaGlsZChjb21wb25lbnQpYCBmb3IgdGhlIGNvbXBvbmVudCBsaWZlY3ljbGUsIHVucmVsYXRlZFxuICAgICAgICAgKiB0byBgTm9kZSNyZW1vdmVDaGlsZGAuIFRoZSBydWxlIG1hdGNoZXMgb24gdGhlIG1ldGhvZCBuYW1lIGFsb25lLCBzbyBldmVyeSByZXBvcnQgaGVyZSBpcyBhXG4gICAgICAgICAqIGNvbXBvbmVudCBiZWluZyB1bmxvYWRlZCwgYW5kIGZvbGxvd2luZyB0aGUgYWR2aWNlIGNhbGxzIGEgYHJlbW92ZSgpYCB0aGF0IGRvZXMgbm90IGV4aXN0IC0tIHdoaWNoXG4gICAgICAgICAqIGlzIHdoYXQgYHRzY2Agc2FpZCB3aGVuIHRoZSBmaXhlciB3YXMgbGV0IGxvb3NlIG9uIHRoZW0uXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItZG9tLW5vZGUtcmVtb3ZlJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIERpcmVjdGx5IGNvbnRyYWRpY3RzIGBvYnNpZGlhbm1kL25vLWdsb2JhbC10aGlzYDogdGhpcyBydWxlIHJld3JpdGVzIGB3aW5kb3cueGAgdG8gYGdsb2JhbFRoaXMueGAsIGFuZFxuICAgICAgICAgKiB0aGF0IG9uZSBmb3JiaWRzIGBnbG9iYWxUaGlzYCBvdXRyaWdodC4gV2l0aCBib3RoIGVuYWJsZWQsIGAtLWZpeGAgYXBwbGllcyBvbmUgYW5kIHRoZW4gdGhlIG90aGVyXG4gICAgICAgICAqIHJldmVydHMgaXQsIHdoaWNoIEVTTGludCByZXBvcnRzIGFzIGBFU0xpbnRDaXJjdWxhckZpeGVzV2FybmluZ2AgYWNyb3NzIDI5IGZpbGVzLiBPYnNpZGlhbidzIG93blxuICAgICAgICAgKiBndWlkYW5jZSB3aW5zIGluIGFuIE9ic2lkaWFuIGxpYnJhcnksIHNvIHRoaXMgaXMgdGhlIHJ1bGUgdGhhdCBnaXZlcyB3YXkuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItZ2xvYmFsLXRoaXMnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLypcbiAgICAgICAqIE9ic2lkaWFuJ3MgaW50ZXJuYWwgQVBJIGlzIHR5cGVkIGluIGBvYnNpZGlhbi10eXBpbmdzYCwgc28gYSBgZGVjbGFyZSBtb2R1bGUgJ29ic2lkaWFuJ2AgYXVnbWVudGF0aW9uIGluXG4gICAgICAgKiBzaGlwcGVkIHNvdXJjZSBtYXkgY2Fycnkgb25seSB0aGUgcGx1Z2luJ3Mgb3duIGN1c3RvbS1ldmVudCBvdmVybG9hZHMuIFRlc3RzIGFyZSBleGVtcHQ6IGEgbW9jayBzaGFwZSBvciBhXG4gICAgICAgKiBoYXJuZXNzIGdsb2JhbCBuZXZlciBzaGlwcy5cbiAgICAgICAqL1xuICAgICAgZmlsZXM6IGNvbnRleHQuc291cmNlRmlsZXMsXG4gICAgICBpZ25vcmVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscyc6IG9ic2lkaWFuRGV2VXRpbHNQbHVnaW5cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL25vLWxvY2FsLW9ic2lkaWFuLWludGVybmFscyc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIC8qXG4gICAgICAgKiBFdmVyeSBtZXRob2QgZW50cnkgb2YgYSBwbHVnaW4gQVBJIGNvbnRyYWN0IGNhcnJpZXMgYW4gYGlucHV0YCBhbmQgYW4gYG91dHB1dGAgc2NoZW1hLCBzbyBhIGB7fWAgZW50cnkgdGhhdFxuICAgICAgICogdmFsaWRhdGVzIG5vdGhpbmcgY2Fubm90IGNvbWUgYmFjayB3aGVyZSB0aGUgY29udHJhY3QgdHlwZSBpcyB1bnR5cGVkIGFuZCB0aGUgY29tcGlsZXIgZG9lcyBub3QgcmVmdXNlIGl0LlxuICAgICAgICogVGVzdHMgYXJlIGV4ZW1wdDogdGhleSBtYXkgcHVibGlzaCBhIGRlbGliZXJhdGVseSBicm9rZW4gY29udHJhY3QuXG4gICAgICAgKlxuICAgICAgICogUmVnaXN0ZXJlZCBidXQgT0ZGOiBzZXZlcmFsIHByb3ZpZGVycyBhbmQgY29uc3VtZXJzIHN0aWxsIGNhcnJ5IGB7fWAgZW50cmllcywgYW5kIHR1cm5pbmcgaXQgb24gZmlyc3Qgd291bGRcbiAgICAgICAqIG1ha2UgdGhlaXIgbGludCByZWQuIFN3aXRjaCBpdCB0byBgJ2Vycm9yJ2Agb25jZSBub25lIGlzIGxlZnQuXG4gICAgICAgKi9cbiAgICAgIGZpbGVzOiBjb250ZXh0LnNvdXJjZUZpbGVzLFxuICAgICAgaWdub3JlczogY29udGV4dC50ZXN0RmlsZXMsXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMnOiBvYnNpZGlhbkRldlV0aWxzUGx1Z2luXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9yZXF1aXJlLXBsdWdpbi1hcGktY29udHJhY3Qtc2NoZW1hcyc6ICdvZmYnXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAvKlxuICAgICAgICogQSBwbHVnaW4ncyBkaXNwbGF5IG5hbWUgaXMgbWFya2VkIGFzIGNvZGU6IGJhY2t0aWNrcyBpbiBhIGNvbW1lbnQgKGBwbHVnaW4tbmFtZS1hcy1jb2RlYCwgYXV0b2ZpeGVkKSwgYVxuICAgICAgICogYDxjb2RlPmAgZWxlbWVudCBpbiBVSSAoYHBsdWdpbi1uYW1lLWFzLWNvZGUtaW4tdWlgLCByZXBvcnRlZCBvbmx5KS5cbiAgICAgICAqXG4gICAgICAgKiBSZWdpc3RlcmVkIGJ1dCBPRkY6IHJlcG9zaXRvcmllcyBzdGlsbCBjYXJyeSBwbGFpbiBwbHVnaW4gbmFtZXMgZnJvbSBiZWZvcmUgdGhlIHJ1bGVzIGV4aXN0ZWQsIGFuZCB0dXJuaW5nXG4gICAgICAgKiB0aGVtIG9uIGZpcnN0IHdvdWxkIG1ha2UgdGhlaXIgbGludCByZWQuIFN3aXRjaCB0aGVtIHRvIGAnZXJyb3InYCBvbmNlIHRob3NlIGFyZSBmaXhlZC4gQm90aCB0YWtlXG4gICAgICAgKiBgeyBhZGRpdGlvbmFsUGx1Z2luTmFtZXM6IFsuLi5dIH1gIGZvciBuYW1lcyB0aGUgc2hhcmVkIGxpc3QgbGFja3MuXG4gICAgICAgKi9cbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMnOiBvYnNpZGlhbkRldlV0aWxzUGx1Z2luXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9wbHVnaW4tbmFtZS1hcy1jb2RlJzogJ29mZicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvcGx1Z2luLW5hbWUtYXMtY29kZS1pbi11aSc6ICdvZmYnXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVBLDJCQU1PO0FBQ1Asa0JBQXFCO0FBRXJCLHNDQUF1QjtBQUN2Qiw2QkFBZ0M7QUFDaEMsb0JBQTZCO0FBRTdCLHdDQUF3QztBQUN4Qyw4QkFBMkI7QUFDM0IsdUNBQXVDO0FBQ3ZDLDRD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
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  function keepName($unknown) {
@@ -46,17 +38,13 @@ function keepName($unknown) {
46
38
  }
47
39
 
48
40
  (function initCjs() {
49
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
41
  const globalThisRecord = globalThis;
51
42
  ensureDisposeSymbols();
52
- globalThisRecord['__name'] ??= keepName;
53
- globalThisRecord['__extractDefault'] ??= extractDefault;
54
-
43
+ globalThisRecord["__name"] ??= keepName;
44
+ globalThisRecord["__extractDefault"] ??= extractDefault;
55
45
  ensureBrowserProcess();
56
-
57
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
58
46
  function extractDefault(module) {
59
- return module && module.__esModule && 'default' in module ? module.default : module;
47
+ return module && module.__esModule && "default" in module ? module.default : module;
60
48
  }
61
49
  })();
62
50
  })();
@@ -66,7 +54,6 @@ function keepName($unknown) {
66
54
  return;
67
55
  }
68
56
 
69
- // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
70
57
  require = Object.assign(
71
58
  (id) => requirePatched(id),
72
59
  originalRequire,
@@ -171,10 +158,14 @@ __export(eslint_rules_exports, {
171
158
  "manifest-id": () => manifest_id,
172
159
  "manifest-name": () => manifest_name,
173
160
  "manifest-schema": () => manifest_schema,
161
+ "no-local-obsidian-internals": () => no_local_obsidian_internals,
174
162
  "no-over-cap-wait-in-eval-in-obsidian": () => no_over_cap_wait_in_eval_in_obsidian,
175
163
  "no-untrusted-input-events": () => no_untrusted_input_events,
176
164
  "obsidian-dev-utils-plugin": () => obsidian_dev_utils_plugin,
177
- "require-component-suffix": () => require_component_suffix
165
+ "plugin-name-as-code": () => plugin_name_as_code,
166
+ "plugin-name-as-code-in-ui": () => plugin_name_as_code_in_ui,
167
+ "require-component-suffix": () => require_component_suffix,
168
+ "require-plugin-api-contract-schemas": () => require_plugin_api_contract_schemas
178
169
  });
179
170
  module.exports = __toCommonJS(eslint_rules_exports);
180
171
  var manifest_description = __toESM(__extractDefault(require('./manifest-description.cjs')), 1);
@@ -182,10 +173,14 @@ var manifest_helpers = __toESM(__extractDefault(require('./manifest-helpers.cjs'
182
173
  var manifest_id = __toESM(__extractDefault(require('./manifest-id.cjs')), 1);
183
174
  var manifest_name = __toESM(__extractDefault(require('./manifest-name.cjs')), 1);
184
175
  var manifest_schema = __toESM(__extractDefault(require('./manifest-schema.cjs')), 1);
176
+ var no_local_obsidian_internals = __toESM(__extractDefault(require('./no-local-obsidian-internals.cjs')), 1);
185
177
  var no_over_cap_wait_in_eval_in_obsidian = __toESM(__extractDefault(require('./no-over-cap-wait-in-eval-in-obsidian.cjs')), 1);
186
178
  var no_untrusted_input_events = __toESM(__extractDefault(require('./no-untrusted-input-events.cjs')), 1);
187
179
  var obsidian_dev_utils_plugin = __toESM(__extractDefault(require('./obsidian-dev-utils-plugin.cjs')), 1);
180
+ var plugin_name_as_code_in_ui = __toESM(__extractDefault(require('./plugin-name-as-code-in-ui.cjs')), 1);
181
+ var plugin_name_as_code = __toESM(__extractDefault(require('./plugin-name-as-code.cjs')), 1);
188
182
  var require_component_suffix = __toESM(__extractDefault(require('./require-component-suffix.cjs')), 1);
183
+ var require_plugin_api_contract_schemas = __toESM(__extractDefault(require('./require-plugin-api-contract-schemas.cjs')), 1);
189
184
  // Annotate the CommonJS export names for ESM import in node:
190
185
  0 && (module.exports = {
191
186
  "manifest-description": null,
@@ -193,9 +188,13 @@ var require_component_suffix = __toESM(__extractDefault(require('./require-compo
193
188
  "manifest-id": null,
194
189
  "manifest-name": null,
195
190
  "manifest-schema": null,
191
+ "no-local-obsidian-internals": null,
196
192
  "no-over-cap-wait-in-eval-in-obsidian": null,
197
193
  "no-untrusted-input-events": null,
198
194
  "obsidian-dev-utils-plugin": null,
199
- "require-component-suffix": null
195
+ "plugin-name-as-code": null,
196
+ "plugin-name-as-code-in-ui": null,
197
+ "require-component-suffix": null,
198
+ "require-plugin-api-contract-schemas": null
200
199
  });
201
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ21hbmlmZXN0LWRlc2NyaXB0aW9uJyBmcm9tICcuL21hbmlmZXN0LWRlc2NyaXB0aW9uLnRzJztcbmV4cG9ydCAqIGFzICdtYW5pZmVzdC1oZWxwZXJzJyBmcm9tICcuL21hbmlmZXN0LWhlbHBlcnMudHMnO1xuZXhwb3J0ICogYXMgJ21hbmlmZXN0LWlkJyBmcm9tICcuL21hbmlmZXN0LWlkLnRzJztcbmV4cG9ydCAqIGFzICdtYW5pZmVzdC1uYW1lJyBmcm9tICcuL21hbmlmZXN0LW5hbWUudHMnO1xuZXhwb3J0ICogYXMgJ21hbmlmZXN0LXNjaGVtYScgZnJvbSAnLi9tYW5pZmVzdC1zY2hlbWEudHMnO1xuZXhwb3J0ICogYXMgJ25vLW92ZXItY2FwLXdhaXQtaW4tZXZhbC1pbi1vYnNpZGlhbicgZnJvbSAnLi9uby1vdmVyLWNhcC13YWl0LWluLWV2YWwtaW4tb2JzaWRpYW4udHMnO1xuZXhwb3J0ICogYXMgJ25vLXVudHJ1c3RlZC1pbnB1dC1ldmVudHMnIGZyb20gJy4vbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cy50cyc7XG5leHBvcnQgKiBhcyAnb2JzaWRpYW4tZGV2LXV0aWxzLXBsdWdpbicgZnJvbSAnLi9vYnNpZGlhbi1kZXYtdXRpbHMtcGx1Z2luLnRzJztcbmV4cG9ydCAqIGFzICdyZXF1aXJlLWNvbXBvbmVudC1zdWZmaXgnIGZyb20gJy4vcmVxdWlyZS1jb21wb25lbnQtc3VmZml4LnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUEsZ0NBQUFBO0FBQUEsRUFBQSwwQkFBQUM7QUFBQSxFQUFBLHFCQUFBQztBQUFBLEVBQUEsdUJBQUFDO0FBQUEsRUFBQSx5QkFBQUM7QUFBQSxFQUFBLDhDQUFBQztBQUFBLEVBQUEsbUNBQUFDO0FBQUEsRUFBQSxtQ0FBQUM7QUFBQSxFQUFBLGtDQUFBQztBQUFBO0FBQUE7QUFFQSxJQUFBUix1QkFBd0M7QUFDeEMsSUFBQUMsbUJBQW9DO0FBQ3BDLElBQUFDLGNBQStCO0FBQy9CLElBQUFDLGdCQUFpQztBQUNqQyxJQUFBQyxrQkFBbUM7QUFDbkMsSUFBQUMsdUNBQXdEO0FBQ3hELElBQUFDLDRCQUE2QztBQUM3QyxJQUFBQyw0QkFBNkM7QUFDN0MsSUFBQUMsMkJBQTRDOyIsCiAgIm5hbWVzIjogWyJtYW5pZmVzdC1kZXNjcmlwdGlvbiIsICJtYW5pZmVzdC1oZWxwZXJzIiwgIm1hbmlmZXN0LWlkIiwgIm1hbmlmZXN0LW5hbWUiLCAibWFuaWZlc3Qtc2NoZW1hIiwgIm5vLW92ZXItY2FwLXdhaXQtaW4tZXZhbC1pbi1vYnNpZGlhbiIsICJuby11bnRydXN0ZWQtaW5wdXQtZXZlbnRzIiwgIm9ic2lkaWFuLWRldi11dGlscy1wbHVnaW4iLCAicmVxdWlyZS1jb21wb25lbnQtc3VmZml4Il0KfQo=
200
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ21hbmlmZXN0LWRlc2NyaXB0aW9uJyBmcm9tICcuL21hbmlmZXN0LWRlc2NyaXB0aW9uLnRzJztcbmV4cG9ydCAqIGFzICdtYW5pZmVzdC1oZWxwZXJzJyBmcm9tICcuL21hbmlmZXN0LWhlbHBlcnMudHMnO1xuZXhwb3J0ICogYXMgJ21hbmlmZXN0LWlkJyBmcm9tICcuL21hbmlmZXN0LWlkLnRzJztcbmV4cG9ydCAqIGFzICdtYW5pZmVzdC1uYW1lJyBmcm9tICcuL21hbmlmZXN0LW5hbWUudHMnO1xuZXhwb3J0ICogYXMgJ21hbmlmZXN0LXNjaGVtYScgZnJvbSAnLi9tYW5pZmVzdC1zY2hlbWEudHMnO1xuZXhwb3J0ICogYXMgJ25vLWxvY2FsLW9ic2lkaWFuLWludGVybmFscycgZnJvbSAnLi9uby1sb2NhbC1vYnNpZGlhbi1pbnRlcm5hbHMudHMnO1xuZXhwb3J0ICogYXMgJ25vLW92ZXItY2FwLXdhaXQtaW4tZXZhbC1pbi1vYnNpZGlhbicgZnJvbSAnLi9uby1vdmVyLWNhcC13YWl0LWluLWV2YWwtaW4tb2JzaWRpYW4udHMnO1xuZXhwb3J0ICogYXMgJ25vLXVudHJ1c3RlZC1pbnB1dC1ldmVudHMnIGZyb20gJy4vbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cy50cyc7XG5leHBvcnQgKiBhcyAnb2JzaWRpYW4tZGV2LXV0aWxzLXBsdWdpbicgZnJvbSAnLi9vYnNpZGlhbi1kZXYtdXRpbHMtcGx1Z2luLnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tbmFtZS1hcy1jb2RlLWluLXVpJyBmcm9tICcuL3BsdWdpbi1uYW1lLWFzLWNvZGUtaW4tdWkudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1uYW1lLWFzLWNvZGUnIGZyb20gJy4vcGx1Z2luLW5hbWUtYXMtY29kZS50cyc7XG5leHBvcnQgKiBhcyAncmVxdWlyZS1jb21wb25lbnQtc3VmZml4JyBmcm9tICcuL3JlcXVpcmUtY29tcG9uZW50LXN1ZmZpeC50cyc7XG5leHBvcnQgKiBhcyAncmVxdWlyZS1wbHVnaW4tYXBpLWNvbnRyYWN0LXNjaGVtYXMnIGZyb20gJy4vcmVxdWlyZS1wbHVnaW4tYXBpLWNvbnRyYWN0LXNjaGVtYXMudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBLGdDQUFBQTtBQUFBLEVBQUEsMEJBQUFDO0FBQUEsRUFBQSxxQkFBQUM7QUFBQSxFQUFBLHVCQUFBQztBQUFBLEVBQUEseUJBQUFDO0FBQUEsRUFBQSxxQ0FBQUM7QUFBQSxFQUFBLDhDQUFBQztBQUFBLEVBQUEsbUNBQUFDO0FBQUEsRUFBQSxtQ0FBQUM7QUFBQSxFQUFBLDZCQUFBQztBQUFBLEVBQUEsbUNBQUFDO0FBQUEsRUFBQSxrQ0FBQUM7QUFBQSxFQUFBLDZDQUFBQztBQUFBO0FBQUE7QUFFQSxJQUFBWix1QkFBd0M7QUFDeEMsSUFBQUMsbUJBQW9DO0FBQ3BDLElBQUFDLGNBQStCO0FBQy9CLElBQUFDLGdCQUFpQztBQUNqQyxJQUFBQyxrQkFBbUM7QUFDbkMsSUFBQUMsOEJBQStDO0FBQy9DLElBQUFDLHVDQUF3RDtBQUN4RCxJQUFBQyw0QkFBNkM7QUFDN0MsSUFBQUMsNEJBQTZDO0FBQzdDLElBQUFFLDRCQUE2QztBQUM3QyxJQUFBRCxzQkFBdUM7QUFDdkMsSUFBQUUsMkJBQTRDO0FBQzVDLElBQUFDLHNDQUF1RDsiLAogICJuYW1lcyI6IFsibWFuaWZlc3QtZGVzY3JpcHRpb24iLCAibWFuaWZlc3QtaGVscGVycyIsICJtYW5pZmVzdC1pZCIsICJtYW5pZmVzdC1uYW1lIiwgIm1hbmlmZXN0LXNjaGVtYSIsICJuby1sb2NhbC1vYnNpZGlhbi1pbnRlcm5hbHMiLCAibm8tb3Zlci1jYXAtd2FpdC1pbi1ldmFsLWluLW9ic2lkaWFuIiwgIm5vLXVudHJ1c3RlZC1pbnB1dC1ldmVudHMiLCAib2JzaWRpYW4tZGV2LXV0aWxzLXBsdWdpbiIsICJwbHVnaW4tbmFtZS1hcy1jb2RlIiwgInBsdWdpbi1uYW1lLWFzLWNvZGUtaW4tdWkiLCAicmVxdWlyZS1jb21wb25lbnQtc3VmZml4IiwgInJlcXVpcmUtcGx1Z2luLWFwaS1jb250cmFjdC1zY2hlbWFzIl0KfQo=
@@ -4,7 +4,11 @@ export * as 'manifest-helpers' from './manifest-helpers.cjs';
4
4
  export * as 'manifest-id' from './manifest-id.cjs';
5
5
  export * as 'manifest-name' from './manifest-name.cjs';
6
6
  export * as 'manifest-schema' from './manifest-schema.cjs';
7
+ export * as 'no-local-obsidian-internals' from './no-local-obsidian-internals.cjs';
7
8
  export * as 'no-over-cap-wait-in-eval-in-obsidian' from './no-over-cap-wait-in-eval-in-obsidian.cjs';
8
9
  export * as 'no-untrusted-input-events' from './no-untrusted-input-events.cjs';
9
10
  export * as 'obsidian-dev-utils-plugin' from './obsidian-dev-utils-plugin.cjs';
11
+ export * as 'plugin-name-as-code-in-ui' from './plugin-name-as-code-in-ui.cjs';
12
+ export * as 'plugin-name-as-code' from './plugin-name-as-code.cjs';
10
13
  export * as 'require-component-suffix' from './require-component-suffix.cjs';
14
+ export * as 'require-plugin-api-contract-schemas' from './require-plugin-api-contract-schemas.cjs';
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  function keepName($unknown) {
@@ -46,17 +38,13 @@ function keepName($unknown) {
46
38
  }
47
39
 
48
40
  (function initCjs() {
49
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
41
  const globalThisRecord = globalThis;
51
42
  ensureDisposeSymbols();
52
- globalThisRecord['__name'] ??= keepName;
53
- globalThisRecord['__extractDefault'] ??= extractDefault;
54
-
43
+ globalThisRecord["__name"] ??= keepName;
44
+ globalThisRecord["__extractDefault"] ??= extractDefault;
55
45
  ensureBrowserProcess();
56
-
57
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
58
46
  function extractDefault(module) {
59
- return module && module.__esModule && 'default' in module ? module.default : module;
47
+ return module && module.__esModule && "default" in module ? module.default : module;
60
48
  }
61
49
  })();
62
50
  })();
@@ -66,7 +54,6 @@ function keepName($unknown) {
66
54
  return;
67
55
  }
68
56
 
69
- // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
70
57
  require = Object.assign(
71
58
  (id) => requirePatched(id),
72
59
  originalRequire,
@@ -265,4 +252,4 @@ const manifestDescription = {
265
252
  MESSAGE_ID_TOO_SHORT,
266
253
  manifestDescription
267
254
  });
268
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL21hbmlmZXN0LWRlc2NyaXB0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHJ1bGU6IG1hbmlmZXN0LWRlc2NyaXB0aW9uXG4gKlxuICogRW5mb3JjZXMgdGhlIENvbW11bml0eSBkaXJlY3RvcnkncyBjb25zdHJhaW50cyBvbiBhIHBsdWdpbidzIGBtYW5pZmVzdC5qc29uYCBgZGVzY3JpcHRpb25gLlxuICpcbiAqIFR3byBvZiB0aGVzZSBjaGVja3MgZGVsaWJlcmF0ZWx5IGRpdmVyZ2UgZnJvbSBgb2JzaWRpYW5tZC92YWxpZGF0ZS1tYW5pZmVzdGA6XG4gKlxuICogLSAqKlNlbGYtcmVmZXJlbmNlLCBub3QgdGhlIHdvcmQgYHBsdWdpbmAuKiogVXBzdHJlYW0ncyBgRk9SQklEREVOX1dPUkRTYCBiYW5zIHRoZSBiYXJlIHN1YnN0cmluZ1xuICogICBgcGx1Z2luYCBpbiB0aGUgZGVzY3JpcHRpb24sIHdoaWNoIHJlamVjdHMgdHdvIGRlc2NyaXB0aW9ucyB0aGUgZGlyZWN0b3J5IGl0c2VsZiBwYXNzZWQgdW50b3VjaGVkIC1cbiAqICAgYEVuaGFuY2VzIE5vdGUgY29tcG9zZXIgY29yZSBwbHVnaW4uYCBhbmQgYC4uLm5vdCBwbHVnaW4gdXBkYXRlcy4uLmAgLSBiZWNhdXNlIGVhY2ggbmFtZXMgc29tZXRoaW5nXG4gKiAgIG90aGVyIHRoYW4gaXRzZWxmLiBUaGUgZGlyZWN0b3J5J3MgYWN0dWFsIG9iamVjdGlvbiBpcyBzZWxmLXJlZmVyZW5jZSwgc28gb25seSBzZWxmLXJlZmVyZW50aWFsXG4gKiAgIHBocmFzZXMgYXJlIG1hdGNoZWQgaGVyZS5cbiAqIC0gKipObyBjaGFyYWN0ZXIgd2hpdGVsaXN0LioqIFVwc3RyZWFtJ3MgZm9ybWF0IGNoZWNrIHJlamVjdHMgYW55dGhpbmcgb3V0c2lkZVxuICogICBgW0EtWmEtejAtOVxccy4sIT8nXCItXWAsIHdoaWNoIGZhaWxzIGJhY2t0aWNrcywgZW0gZGFzaGVzLCBwYXJlbnRoZXNlcywgY29sb25zIGFuZCBzbGFzaGVzLiBTZXZlblxuICogICBsaXZlIGxpc3RpbmdzIGNhcnJ5IHRob3NlIGFuZCB0aGUgZGlyZWN0b3J5IGZsYWdnZWQgbm9uZSwgc28gdGhlIGNoZWNrIGlzIG5vaXNlIHJhdGhlciB0aGFuIGEgZ2F0ZS5cbiAqXG4gKiBUaGUgbm8tYE9ic2lkaWFuYCBjaGVjayBoYXMgdGhlIG9wcG9zaXRlIHByb3ZlbmFuY2U6IHRoZSBkaXJlY3RvcnkgZW5mb3JjZXMgaXQgYW5kIG5vIE9ic2lkaWFuXG4gKiBkb2N1bWVudCBzdGF0ZXMgaXQsIHdoaWNoIGlzIHdoYXQgY29zdCBhIHJlbGVhc2VkIHBsdWdpbiBhIHZlcnNpb24gYnVtcCBmb3Igb25lIHdvcmQuXG4gKlxuICogUnVucyBvbiB0aGUgYEBlc2xpbnQvanNvbmAgYGpzb24vanNvbmAgbGFuZ3VhZ2U7IHNlZSBgbWFuaWZlc3QtaGVscGVycy50c2AgZm9yIHdoeSB0aGUgQVNUIGlzIE1vbW9hXG4gKiByYXRoZXIgdGhhbiBFU1RyZWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHtcbiAgZmluZE1hbmlmZXN0TWVtYmVyLFxuICBnZXRNYW5pZmVzdE9iamVjdCxcbiAgZ2V0U3RyaW5nVmFsdWUsXG4gIHRvUmVwb3J0Tm9kZVxufSBmcm9tICcuL21hbmlmZXN0LWhlbHBlcnMudHMnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiB0aGUgZGVzY3JpcHRpb24gY29udGFpbnMgdGhlIHdvcmQgYE9ic2lkaWFuYC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfQ09OVEFJTlNfT0JTSURJQU4gPSAnZGVzY3JpcHRpb25Db250YWluc09ic2lkaWFuJztcblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gdGhlIGRlc2NyaXB0aW9uIGRvZXMgbm90IGVuZCB3aXRoIGEgcGVyaW9kLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9NSVNTSU5HX1BFUklPRCA9ICdkZXNjcmlwdGlvbk1pc3NpbmdQZXJpb2QnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiB0aGUgZGVzY3JpcHRpb24gZG9lcyBub3Qgc3RhcnQgd2l0aCBhIGNhcGl0YWwgbGV0dGVyLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9OT1RfQ0FQSVRBTElaRUQgPSAnZGVzY3JpcHRpb25Ob3RDYXBpdGFsaXplZCc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIHRoZSBkZXNjcmlwdGlvbiByZWZlcnMgdG8gaXRzZWxmLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9TRUxGX1JFRkVSRU5DRSA9ICdkZXNjcmlwdGlvblNlbGZSZWZlcmVuY2UnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiB0aGUgZGVzY3JpcHRpb24gaXMgbG9uZ2VyIHRoYW4gdGhlIGRpcmVjdG9yeSBhbGxvd3MuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX1RPT19MT05HID0gJ2Rlc2NyaXB0aW9uVG9vTG9uZyc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIHRoZSBkZXNjcmlwdGlvbiBpcyB0b28gc2hvcnQgdG8gZGVzY3JpYmUgYW55dGhpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX1RPT19TSE9SVCA9ICdkZXNjcmlwdGlvblRvb1Nob3J0JztcblxuLyoqXG5UaGUgbG9uZ2VzdCBkZXNjcmlwdGlvbiB0aGUgQ29tbXVuaXR5IGRpcmVjdG9yeSBhY2NlcHRzLlxuICovXG5jb25zdCBNQVhfREVTQ1JJUFRJT05fTEVOR1RIID0gMjUwO1xuXG4vKipcblRoZSBzaG9ydGVzdCBkZXNjcmlwdGlvbiB0aGF0IGNhbiBwbGF1c2libHkgc2F5IHdoYXQgYSBwbHVnaW4gZG9lcy5cbiAqL1xuY29uc3QgTUlOX0RFU0NSSVBUSU9OX0xFTkdUSCA9IDEwO1xuXG4vKipcblRoZSB3b3JkIGBPYnNpZGlhbmAsIHdoaWNoIHRoZSBkaXJlY3RvcnkgcmVqZWN0cyBpbiBhIGRlc2NyaXB0aW9uIGV2ZW4gdGhvdWdoIG5vIE9ic2lkaWFuIGRvY3VtZW50IHNheXMgc28uXG4gKi9cbmNvbnN0IE9CU0lESUFOX1dPUkQgPSAvXFxib2JzaWRpYW5cXGIvaTtcblxuLyoqXG5UaGUgcGhyYXNpbmdzIHRoZSBkaXJlY3RvcnkgY2FsbHMgb3V0IGFzIHNlbGYtcmVmZXJlbmNlLiBBIGJhcmUgYHBsdWdpbmAgaXMgZGVsaWJlcmF0ZWx5IG5vdCBhbW9uZyB0aGVtOlxubmFtaW5nIGFub3RoZXIgcGx1Z2luLCBvciBwbHVnaW5zIGluIGdlbmVyYWwsIGlzIG5vdCByZWZlcnJpbmcgdG8gb25lc2VsZi5cbiAqL1xuY29uc3QgU0VMRl9SRUZFUkVOQ0VfUEFUVEVSTlMgPSBbXG4gIC9cXGJ0aGlzIHBsdWdpblxcYi9pLFxuICAvXFxidGhpcyBpcyBhIHBsdWdpblxcYi9pLFxuICAvXFxiYSBwbHVnaW4gKD86dGhhdHx3aGljaClcXGIvaSxcbiAgL150aGUgcGx1Z2luXFxiL2ksXG4gIC9ecGx1Z2luXFxiL2lcbl07XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgZW5mb3JjaW5nIHRoZSBDb21tdW5pdHkgZGlyZWN0b3J5J3MgY29uc3RyYWludHMgb24gYSBwbHVnaW4ncyBgbWFuaWZlc3QuanNvbmAgYGRlc2NyaXB0aW9uYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hbmlmZXN0RGVzY3JpcHRpb246IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgRG9jdW1lbnQobm9kZTogdW5rbm93bik6IHZvaWQge1xuICAgICAgICBjb25zdCBtYW5pZmVzdE9iamVjdCA9IGdldE1hbmlmZXN0T2JqZWN0KG5vZGUpO1xuXG4gICAgICAgIGlmICghbWFuaWZlc3RPYmplY3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZW1iZXIgPSBmaW5kTWFuaWZlc3RNZW1iZXIobWFuaWZlc3RPYmplY3QsICdkZXNjcmlwdGlvbicpO1xuXG4gICAgICAgIGlmICghbWVtYmVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBnZXRTdHJpbmdWYWx1ZShtZW1iZXIudmFsdWUpO1xuXG4gICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcG9ydE5vZGUgPSB0b1JlcG9ydE5vZGUobWVtYmVyLnZhbHVlKTtcblxuICAgICAgICBpZiAoT0JTSURJQU5fV09SRC50ZXN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9DT05UQUlOU19PQlNJRElBTixcbiAgICAgICAgICAgIG5vZGU6IHJlcG9ydE5vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChTRUxGX1JFRkVSRU5DRV9QQVRURVJOUy5zb21lKChwYXR0ZXJuKSA9PiBwYXR0ZXJuLnRlc3QoZGVzY3JpcHRpb24pKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9TRUxGX1JFRkVSRU5DRSxcbiAgICAgICAgICAgIG5vZGU6IHJlcG9ydE5vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXNjcmlwdGlvbi5sZW5ndGggPCBNSU5fREVTQ1JJUFRJT05fTEVOR1RIKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX1RPT19TSE9SVCxcbiAgICAgICAgICAgIG5vZGU6IHJlcG9ydE5vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXNjcmlwdGlvbi5sZW5ndGggPiBNQVhfREVTQ1JJUFRJT05fTEVOR1RIKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgZGF0YTogeyBtYXhMZW5ndGg6IE1BWF9ERVNDUklQVElPTl9MRU5HVEgudG9TdHJpbmcoKSB9LFxuICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX1RPT19MT05HLFxuICAgICAgICAgICAgbm9kZTogcmVwb3J0Tm9kZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEvXltBLVpdLy50ZXN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9OT1RfQ0FQSVRBTElaRUQsXG4gICAgICAgICAgICBub2RlOiByZXBvcnROb2RlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRlc2NyaXB0aW9uLmVuZHNXaXRoKCcuJykpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfTUlTU0lOR19QRVJJT0QsXG4gICAgICAgICAgICBub2RlOiByZXBvcnROb2RlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdFbmZvcmNlIHRoZSBDb21tdW5pdHkgZGlyZWN0b3J5XFwncyBjb25zdHJhaW50cyBvbiBhIHBsdWdpblxcJ3MgYG1hbmlmZXN0Lmpzb25gIGBkZXNjcmlwdGlvbmAnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURfQ09OVEFJTlNfT0JTSURJQU5dOiAnVGhlIGBkZXNjcmlwdGlvbmAgbXVzdCBub3QgY29udGFpbiB0aGUgd29yZCBgT2JzaWRpYW5gLiBJdCBpcyBpbXBsaWVkIGJ5IHRoZSBjb250ZXh0IG9mIHRoZSBwbHVnaW4gZGlyZWN0b3J5LicsXG4gICAgICBbTUVTU0FHRV9JRF9NSVNTSU5HX1BFUklPRF06ICdUaGUgYGRlc2NyaXB0aW9uYCBtdXN0IGVuZCB3aXRoIGEgcGVyaW9kLicsXG4gICAgICBbTUVTU0FHRV9JRF9OT1RfQ0FQSVRBTElaRURdOiAnVGhlIGBkZXNjcmlwdGlvbmAgbXVzdCBzdGFydCB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIuJyxcbiAgICAgIFtNRVNTQUdFX0lEX1NFTEZfUkVGRVJFTkNFXTogJ1RoZSBgZGVzY3JpcHRpb25gIG11c3Qgbm90IHJlZmVyIHRvIGl0c2VsZiwgZS5nLiBgdGhpcyBwbHVnaW5gIG9yIGBhIHBsdWdpbiB0aGF0YC4gRGVzY3JpYmUgd2hhdCBpdCBkb2VzIGluc3RlYWQuJyxcbiAgICAgIFtNRVNTQUdFX0lEX1RPT19MT05HXTogJ1RoZSBgZGVzY3JpcHRpb25gIG11c3QgYmUgYXQgbW9zdCB7eyBtYXhMZW5ndGggfX0gY2hhcmFjdGVycy4nLFxuICAgICAgW01FU1NBR0VfSURfVE9PX1NIT1JUXTogJ1RoZSBgZGVzY3JpcHRpb25gIGlzIHRvbyBzaG9ydCB0byBzYXkgd2hhdCB0aGUgcGx1Z2luIGRvZXMuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAncHJvYmxlbSdcbiAgfVxufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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
255
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL21hbmlmZXN0LWRlc2NyaXB0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHJ1bGU6IG1hbmlmZXN0LWRlc2NyaXB0aW9uXG4gKlxuICogRW5mb3JjZXMgdGhlIENvbW11bml0eSBkaXJlY3RvcnkncyBjb25zdHJhaW50cyBvbiBhIHBsdWdpbidzIGBtYW5pZmVzdC5qc29uYCBgZGVzY3JpcHRpb25gLlxuICpcbiAqIFR3byBvZiB0aGVzZSBjaGVja3MgZGVsaWJlcmF0ZWx5IGRpdmVyZ2UgZnJvbSBgb2JzaWRpYW5tZC92YWxpZGF0ZS1tYW5pZmVzdGA6XG4gKlxuICogLSAqKlNlbGYtcmVmZXJlbmNlLCBub3QgdGhlIHdvcmQgYHBsdWdpbmAuKiogVXBzdHJlYW0ncyBgRk9SQklEREVOX1dPUkRTYCBiYW5zIHRoZSBiYXJlIHN1YnN0cmluZ1xuICogICBgcGx1Z2luYCBpbiB0aGUgZGVzY3JpcHRpb24sIHdoaWNoIHJlamVjdHMgdHdvIGRlc2NyaXB0aW9ucyB0aGUgZGlyZWN0b3J5IGl0c2VsZiBwYXNzZWQgdW50b3VjaGVkIC1cbiAqICAgYEVuaGFuY2VzIE5vdGUgY29tcG9zZXIgY29yZSBwbHVnaW4uYCBhbmQgYC4uLm5vdCBwbHVnaW4gdXBkYXRlcy4uLmAgLSBiZWNhdXNlIGVhY2ggbmFtZXMgc29tZXRoaW5nXG4gKiAgIG90aGVyIHRoYW4gaXRzZWxmLiBUaGUgZGlyZWN0b3J5J3MgYWN0dWFsIG9iamVjdGlvbiBpcyBzZWxmLXJlZmVyZW5jZSwgc28gb25seSBzZWxmLXJlZmVyZW50aWFsXG4gKiAgIHBocmFzZXMgYXJlIG1hdGNoZWQgaGVyZS5cbiAqIC0gKipObyBjaGFyYWN0ZXIgd2hpdGVsaXN0LioqIFVwc3RyZWFtJ3MgZm9ybWF0IGNoZWNrIHJlamVjdHMgYW55dGhpbmcgb3V0c2lkZVxuICogICBgW0EtWmEtejAtOVxccy4sIT8nXCItXWAsIHdoaWNoIGZhaWxzIGJhY2t0aWNrcywgZW0gZGFzaGVzLCBwYXJlbnRoZXNlcywgY29sb25zIGFuZCBzbGFzaGVzLiBTZXZlblxuICogICBsaXZlIGxpc3RpbmdzIGNhcnJ5IHRob3NlIGFuZCB0aGUgZGlyZWN0b3J5IGZsYWdnZWQgbm9uZSwgc28gdGhlIGNoZWNrIGlzIG5vaXNlIHJhdGhlciB0aGFuIGEgZ2F0ZS5cbiAqXG4gKiBUaGUgbm8tYE9ic2lkaWFuYCBjaGVjayBoYXMgdGhlIG9wcG9zaXRlIHByb3ZlbmFuY2U6IHRoZSBkaXJlY3RvcnkgZW5mb3JjZXMgaXQgYW5kIG5vIE9ic2lkaWFuXG4gKiBkb2N1bWVudCBzdGF0ZXMgaXQsIHdoaWNoIGlzIHdoYXQgY29zdCBhIHJlbGVhc2VkIHBsdWdpbiBhIHZlcnNpb24gYnVtcCBmb3Igb25lIHdvcmQuXG4gKlxuICogUnVucyBvbiB0aGUgYEBlc2xpbnQvanNvbmAgYGpzb24vanNvbmAgbGFuZ3VhZ2U7IHNlZSBgbWFuaWZlc3QtaGVscGVycy50c2AgZm9yIHdoeSB0aGUgQVNUIGlzIE1vbW9hXG4gKiByYXRoZXIgdGhhbiBFU1RyZWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHtcbiAgZmluZE1hbmlmZXN0TWVtYmVyLFxuICBnZXRNYW5pZmVzdE9iamVjdCxcbiAgZ2V0U3RyaW5nVmFsdWUsXG4gIHRvUmVwb3J0Tm9kZVxufSBmcm9tICcuL21hbmlmZXN0LWhlbHBlcnMudHMnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiB0aGUgZGVzY3JpcHRpb24gY29udGFpbnMgdGhlIHdvcmQgYE9ic2lkaWFuYC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfQ09OVEFJTlNfT0JTSURJQU4gPSAnZGVzY3JpcHRpb25Db250YWluc09ic2lkaWFuJztcblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gdGhlIGRlc2NyaXB0aW9uIGRvZXMgbm90IGVuZCB3aXRoIGEgcGVyaW9kLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9NSVNTSU5HX1BFUklPRCA9ICdkZXNjcmlwdGlvbk1pc3NpbmdQZXJpb2QnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiB0aGUgZGVzY3JpcHRpb24gZG9lcyBub3Qgc3RhcnQgd2l0aCBhIGNhcGl0YWwgbGV0dGVyLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9OT1RfQ0FQSVRBTElaRUQgPSAnZGVzY3JpcHRpb25Ob3RDYXBpdGFsaXplZCc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIHRoZSBkZXNjcmlwdGlvbiByZWZlcnMgdG8gaXRzZWxmLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9TRUxGX1JFRkVSRU5DRSA9ICdkZXNjcmlwdGlvblNlbGZSZWZlcmVuY2UnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiB0aGUgZGVzY3JpcHRpb24gaXMgbG9uZ2VyIHRoYW4gdGhlIGRpcmVjdG9yeSBhbGxvd3MuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX1RPT19MT05HID0gJ2Rlc2NyaXB0aW9uVG9vTG9uZyc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIHRoZSBkZXNjcmlwdGlvbiBpcyB0b28gc2hvcnQgdG8gZGVzY3JpYmUgYW55dGhpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX1RPT19TSE9SVCA9ICdkZXNjcmlwdGlvblRvb1Nob3J0JztcblxuLyoqXG5UaGUgbG9uZ2VzdCBkZXNjcmlwdGlvbiB0aGUgQ29tbXVuaXR5IGRpcmVjdG9yeSBhY2NlcHRzLlxuICovXG5jb25zdCBNQVhfREVTQ1JJUFRJT05fTEVOR1RIID0gMjUwO1xuXG4vKipcblRoZSBzaG9ydGVzdCBkZXNjcmlwdGlvbiB0aGF0IGNhbiBwbGF1c2libHkgc2F5IHdoYXQgYSBwbHVnaW4gZG9lcy5cbiAqL1xuY29uc3QgTUlOX0RFU0NSSVBUSU9OX0xFTkdUSCA9IDEwO1xuXG4vKipcblRoZSB3b3JkIGBPYnNpZGlhbmAsIHdoaWNoIHRoZSBkaXJlY3RvcnkgcmVqZWN0cyBpbiBhIGRlc2NyaXB0aW9uIGV2ZW4gdGhvdWdoIG5vIE9ic2lkaWFuIGRvY3VtZW50IHNheXMgc28uXG4gKi9cbmNvbnN0IE9CU0lESUFOX1dPUkQgPSAvXFxib2JzaWRpYW5cXGIvaTtcblxuLyoqXG5UaGUgcGhyYXNpbmdzIHRoZSBkaXJlY3RvcnkgY2FsbHMgb3V0IGFzIHNlbGYtcmVmZXJlbmNlLiBBIGJhcmUgYHBsdWdpbmAgaXMgZGVsaWJlcmF0ZWx5IG5vdCBhbW9uZyB0aGVtOlxubmFtaW5nIGFub3RoZXIgcGx1Z2luLCBvciBwbHVnaW5zIGluIGdlbmVyYWwsIGlzIG5vdCByZWZlcnJpbmcgdG8gb25lc2VsZi5cbiAqL1xuY29uc3QgU0VMRl9SRUZFUkVOQ0VfUEFUVEVSTlMgPSBbXG4gIC9cXGJ0aGlzIHBsdWdpblxcYi9pLFxuICAvXFxidGhpcyBpcyBhIHBsdWdpblxcYi9pLFxuICAvXFxiYSBwbHVnaW4gKD86dGhhdHx3aGljaClcXGIvaSxcbiAgL150aGUgcGx1Z2luXFxiL2ksXG4gIC9ecGx1Z2luXFxiL2lcbl07XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgZW5mb3JjaW5nIHRoZSBDb21tdW5pdHkgZGlyZWN0b3J5J3MgY29uc3RyYWludHMgb24gYSBwbHVnaW4ncyBgbWFuaWZlc3QuanNvbmAgYGRlc2NyaXB0aW9uYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hbmlmZXN0RGVzY3JpcHRpb246IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgRG9jdW1lbnQobm9kZTogdW5rbm93bik6IHZvaWQge1xuICAgICAgICBjb25zdCBtYW5pZmVzdE9iamVjdCA9IGdldE1hbmlmZXN0T2JqZWN0KG5vZGUpO1xuXG4gICAgICAgIGlmICghbWFuaWZlc3RPYmplY3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZW1iZXIgPSBmaW5kTWFuaWZlc3RNZW1iZXIobWFuaWZlc3RPYmplY3QsICdkZXNjcmlwdGlvbicpO1xuXG4gICAgICAgIGlmICghbWVtYmVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBnZXRTdHJpbmdWYWx1ZShtZW1iZXIudmFsdWUpO1xuXG4gICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcG9ydE5vZGUgPSB0b1JlcG9ydE5vZGUobWVtYmVyLnZhbHVlKTtcblxuICAgICAgICBpZiAoT0JTSURJQU5fV09SRC50ZXN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9DT05UQUlOU19PQlNJRElBTixcbiAgICAgICAgICAgIG5vZGU6IHJlcG9ydE5vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChTRUxGX1JFRkVSRU5DRV9QQVRURVJOUy5zb21lKChwYXR0ZXJuKSA9PiBwYXR0ZXJuLnRlc3QoZGVzY3JpcHRpb24pKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9TRUxGX1JFRkVSRU5DRSxcbiAgICAgICAgICAgIG5vZGU6IHJlcG9ydE5vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXNjcmlwdGlvbi5sZW5ndGggPCBNSU5fREVTQ1JJUFRJT05fTEVOR1RIKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX1RPT19TSE9SVCxcbiAgICAgICAgICAgIG5vZGU6IHJlcG9ydE5vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXNjcmlwdGlvbi5sZW5ndGggPiBNQVhfREVTQ1JJUFRJT05fTEVOR1RIKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgZGF0YTogeyBtYXhMZW5ndGg6IE1BWF9ERVNDUklQVElPTl9MRU5HVEgudG9TdHJpbmcoKSB9LFxuICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX1RPT19MT05HLFxuICAgICAgICAgICAgbm9kZTogcmVwb3J0Tm9kZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEvXltBLVpdLy50ZXN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9OT1RfQ0FQSVRBTElaRUQsXG4gICAgICAgICAgICBub2RlOiByZXBvcnROb2RlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRlc2NyaXB0aW9uLmVuZHNXaXRoKCcuJykpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfTUlTU0lOR19QRVJJT0QsXG4gICAgICAgICAgICBub2RlOiByZXBvcnROb2RlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdFbmZvcmNlIHRoZSBDb21tdW5pdHkgZGlyZWN0b3J5XFwncyBjb25zdHJhaW50cyBvbiBhIHBsdWdpblxcJ3MgYG1hbmlmZXN0Lmpzb25gIGBkZXNjcmlwdGlvbmAnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURfQ09OVEFJTlNfT0JTSURJQU5dOiAnVGhlIGBkZXNjcmlwdGlvbmAgbXVzdCBub3QgY29udGFpbiB0aGUgd29yZCBgT2JzaWRpYW5gLiBJdCBpcyBpbXBsaWVkIGJ5IHRoZSBjb250ZXh0IG9mIHRoZSBwbHVnaW4gZGlyZWN0b3J5LicsXG4gICAgICBbTUVTU0FHRV9JRF9NSVNTSU5HX1BFUklPRF06ICdUaGUgYGRlc2NyaXB0aW9uYCBtdXN0IGVuZCB3aXRoIGEgcGVyaW9kLicsXG4gICAgICBbTUVTU0FHRV9JRF9OT1RfQ0FQSVRBTElaRURdOiAnVGhlIGBkZXNjcmlwdGlvbmAgbXVzdCBzdGFydCB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIuJyxcbiAgICAgIFtNRVNTQUdFX0lEX1NFTEZfUkVGRVJFTkNFXTogJ1RoZSBgZGVzY3JpcHRpb25gIG11c3Qgbm90IHJlZmVyIHRvIGl0c2VsZiwgZS5nLiBgdGhpcyBwbHVnaW5gIG9yIGBhIHBsdWdpbiB0aGF0YC4gRGVzY3JpYmUgd2hhdCBpdCBkb2VzIGluc3RlYWQuJyxcbiAgICAgIFtNRVNTQUdFX0lEX1RPT19MT05HXTogJ1RoZSBgZGVzY3JpcHRpb25gIG11c3QgYmUgYXQgbW9zdCB7eyBtYXhMZW5ndGggfX0gY2hhcmFjdGVycy4nLFxuICAgICAgW01FU1NBR0VfSURfVE9PX1NIT1JUXTogJ1RoZSBgZGVzY3JpcHRpb25gIGlzIHRvbyBzaG9ydCB0byBzYXkgd2hhdCB0aGUgcGx1Z2luIGRvZXMuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAncHJvYmxlbSdcbiAgfVxufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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