obsidian-dev-utils 98.0.0 → 99.0.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 (43) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/integration-test-plugin/main.js +122 -16
  3. package/dist/lib/cjs/__merged.cjs +9 -1
  4. package/dist/lib/cjs/__merged.d.cts +2 -2
  5. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  6. package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +36 -1
  7. package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +21 -0
  8. package/dist/lib/cjs/obsidian/components/plugin-suggestion-component.cjs +20 -6
  9. package/dist/lib/cjs/obsidian/components/plugin-suggestion-component.d.cts +26 -4
  10. package/dist/lib/cjs/obsidian/file-change.cjs +6 -6
  11. package/dist/lib/cjs/obsidian/link.cjs +33 -6
  12. package/dist/lib/cjs/obsidian/link.d.cts +35 -0
  13. package/dist/lib/cjs/obsidian/reference.cjs +9 -1
  14. package/dist/lib/cjs/obsidian/reference.d.cts +33 -0
  15. package/dist/lib/cjs/obsidian/validation.cjs +22 -3
  16. package/dist/lib/cjs/obsidian/validation.d.cts +37 -0
  17. package/dist/lib/cjs/obsidian/vault.cjs +4 -1
  18. package/dist/lib/cjs/obsidian/vault.d.cts +8 -1
  19. package/dist/lib/cjs/script-utils/nano-staged-config.cjs +7 -5
  20. package/dist/lib/cjs/script-utils/nano-staged-config.d.cts +5 -2
  21. package/dist/lib/cjs/script-utils/package-manager.cjs +113 -30
  22. package/dist/lib/cjs/script-utils/package-manager.d.cts +20 -4
  23. package/dist/lib/esm/__merged.d.mts +2 -2
  24. package/dist/lib/esm/__merged.mjs +9 -1
  25. package/dist/lib/esm/generated-during-build.mjs +1 -1
  26. package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +21 -0
  27. package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +36 -1
  28. package/dist/lib/esm/obsidian/components/plugin-suggestion-component.d.mts +26 -4
  29. package/dist/lib/esm/obsidian/components/plugin-suggestion-component.mjs +20 -6
  30. package/dist/lib/esm/obsidian/file-change.mjs +6 -6
  31. package/dist/lib/esm/obsidian/link.d.mts +35 -0
  32. package/dist/lib/esm/obsidian/link.mjs +38 -7
  33. package/dist/lib/esm/obsidian/reference.d.mts +33 -0
  34. package/dist/lib/esm/obsidian/reference.mjs +8 -1
  35. package/dist/lib/esm/obsidian/validation.d.mts +37 -0
  36. package/dist/lib/esm/obsidian/validation.mjs +21 -2
  37. package/dist/lib/esm/obsidian/vault.d.mts +8 -1
  38. package/dist/lib/esm/obsidian/vault.mjs +4 -1
  39. package/dist/lib/esm/script-utils/nano-staged-config.d.mts +5 -2
  40. package/dist/lib/esm/script-utils/nano-staged-config.mjs +7 -5
  41. package/dist/lib/esm/script-utils/package-manager.d.mts +20 -4
  42. package/dist/lib/esm/script-utils/package-manager.mjs +113 -30
  43. package/package.json +1 -1
@@ -50,6 +50,7 @@ import {
50
50
  } from "../path.mjs";
51
51
  import { getMandatoryNamedGroup } from "../reg-exp.mjs";
52
52
  import { assertNever } from "../type-guards.mjs";
53
+ import { readJsonSync } from "./json.mjs";
53
54
  import { ObsidianDevUtilsRepoPaths } from "./obsidian-dev-utils-repo-paths.mjs";
54
55
  import { getRootFolder } from "./root.mjs";
55
56
  var PackageManager = /* @__PURE__ */ ((PackageManager2) => {
@@ -61,19 +62,25 @@ var PackageManager = /* @__PURE__ */ ((PackageManager2) => {
61
62
  })(PackageManager || {});
62
63
  function getPackageManager(cwd) {
63
64
  const root = getStartFolder(cwd);
64
- if (existsSync(join(root, ObsidianDevUtilsRepoPaths.BunLock)) || existsSync(join(root, ObsidianDevUtilsRepoPaths.BunLockb))) {
65
- return "bun" /* Bun */;
65
+ const declaredPackageManager = detectPackageManagerFromPackageJson(root);
66
+ const lockfiles = LOCKFILES.filter((lockfile) => existsSync(join(root, lockfile.fileName)));
67
+ const claimants = new Set(lockfiles.map((lockfile) => lockfile.packageManager));
68
+ if (declaredPackageManager !== null) {
69
+ claimants.add(declaredPackageManager);
66
70
  }
67
- if (existsSync(join(root, ObsidianDevUtilsRepoPaths.PnpmLockYaml))) {
68
- return "pnpm" /* Pnpm */;
71
+ const packageManager = resolvePackageManager({
72
+ claimants,
73
+ declaredPackageManager
74
+ });
75
+ if (claimants.size > 1) {
76
+ warnAboutSeveralClaimants({
77
+ declaredPackageManager,
78
+ lockfiles,
79
+ packageManager,
80
+ root
81
+ });
69
82
  }
70
- if (existsSync(join(root, ObsidianDevUtilsRepoPaths.YarnLock))) {
71
- return "yarn" /* Yarn */;
72
- }
73
- if (existsSync(join(root, ObsidianDevUtilsRepoPaths.PackageLockJson))) {
74
- return "npm" /* Npm */;
75
- }
76
- return detectPackageManagerFromUserAgent() ?? "npm" /* Npm */;
83
+ return packageManager;
77
84
  }
78
85
  function getPackageManagerRunCommand(cwd) {
79
86
  return [getPackageManager(cwd), "run"];
@@ -86,7 +93,37 @@ function resolveToolCommand(params) {
86
93
  }
87
94
  return [...getPackageManagerExecCommand(cwd), tool];
88
95
  }
96
+ const DECLARATION_NAME_REG_EXP = /^(?<name>[^@\s]+)@/;
97
+ const LOCKFILES = [
98
+ { fileName: ObsidianDevUtilsRepoPaths.BunLock, packageManager: "bun" /* Bun */ },
99
+ { fileName: ObsidianDevUtilsRepoPaths.BunLockb, packageManager: "bun" /* Bun */ },
100
+ { fileName: ObsidianDevUtilsRepoPaths.PnpmLockYaml, packageManager: "pnpm" /* Pnpm */ },
101
+ { fileName: ObsidianDevUtilsRepoPaths.YarnLock, packageManager: "yarn" /* Yarn */ },
102
+ { fileName: ObsidianDevUtilsRepoPaths.PackageLockJson, packageManager: "npm" /* Npm */ }
103
+ ];
89
104
  const USER_AGENT_NAME_REG_EXP = /^(?<name>[^/\s]+)\//;
105
+ const reportedDisagreements = /* @__PURE__ */ new Set();
106
+ function detectPackageManagerFromPackageJson(root) {
107
+ const packageJsonPath = join(root, ObsidianDevUtilsRepoPaths.PackageJson);
108
+ if (!existsSync(packageJsonPath)) {
109
+ return null;
110
+ }
111
+ let packageJson;
112
+ try {
113
+ packageJson = readJsonSync(packageJsonPath);
114
+ } catch {
115
+ return null;
116
+ }
117
+ const declaration = packageJson.packageManager;
118
+ if (!declaration) {
119
+ return null;
120
+ }
121
+ const match = DECLARATION_NAME_REG_EXP.exec(declaration);
122
+ if (!match) {
123
+ return null;
124
+ }
125
+ return parsePackageManagerName(getMandatoryNamedGroup(match, "name"));
126
+ }
90
127
  function detectPackageManagerFromUserAgent() {
91
128
  const userAgent = process.env["npm_config_user_agent"];
92
129
  if (!userAgent) {
@@ -96,24 +133,7 @@ function detectPackageManagerFromUserAgent() {
96
133
  if (!match) {
97
134
  return null;
98
135
  }
99
- const name = getMandatoryNamedGroup(match, "name");
100
- switch (name) {
101
- case "bun" /* Bun */: {
102
- return "bun" /* Bun */;
103
- }
104
- case "npm" /* Npm */: {
105
- return "npm" /* Npm */;
106
- }
107
- case "pnpm" /* Pnpm */: {
108
- return "pnpm" /* Pnpm */;
109
- }
110
- case "yarn" /* Yarn */: {
111
- return "yarn" /* Yarn */;
112
- }
113
- default: {
114
- return null;
115
- }
116
- }
136
+ return parsePackageManagerName(getMandatoryNamedGroup(match, "name"));
117
137
  }
118
138
  function findBinShim(params) {
119
139
  const { cwd, tool } = params;
@@ -164,10 +184,73 @@ function getShimCandidates(tool) {
164
184
  function getStartFolder(cwd) {
165
185
  return getRootFolder(cwd) ?? toPosixPath(cwd ?? process.cwd());
166
186
  }
187
+ function parsePackageManagerName(name) {
188
+ switch (name) {
189
+ case "bun" /* Bun */: {
190
+ return "bun" /* Bun */;
191
+ }
192
+ case "npm" /* Npm */: {
193
+ return "npm" /* Npm */;
194
+ }
195
+ case "pnpm" /* Pnpm */: {
196
+ return "pnpm" /* Pnpm */;
197
+ }
198
+ case "yarn" /* Yarn */: {
199
+ return "yarn" /* Yarn */;
200
+ }
201
+ default: {
202
+ return null;
203
+ }
204
+ }
205
+ }
206
+ function resolvePackageManager(params) {
207
+ const {
208
+ claimants,
209
+ declaredPackageManager
210
+ } = params;
211
+ if (declaredPackageManager !== null) {
212
+ return declaredPackageManager;
213
+ }
214
+ const lockfileOwners = [...claimants];
215
+ const [firstLockfileOwner] = lockfileOwners;
216
+ if (firstLockfileOwner === void 0) {
217
+ return detectPackageManagerFromUserAgent() ?? "npm" /* Npm */;
218
+ }
219
+ if (lockfileOwners.length === 1) {
220
+ return firstLockfileOwner;
221
+ }
222
+ const launchedBy = detectPackageManagerFromUserAgent();
223
+ if (launchedBy !== null && claimants.has(launchedBy)) {
224
+ return launchedBy;
225
+ }
226
+ return firstLockfileOwner;
227
+ }
228
+ function warnAboutSeveralClaimants(params) {
229
+ const {
230
+ declaredPackageManager,
231
+ lockfiles,
232
+ packageManager,
233
+ root
234
+ } = params;
235
+ const lockfileNames = lockfiles.map((lockfile) => lockfile.fileName).join(", ");
236
+ const advice = declaredPackageManager === null ? 'Delete the stale lockfile, or declare "packageManager" in package.json, to settle it.' : "Delete the stale lockfile to settle it.";
237
+ const message = [
238
+ `obsidian-dev-utils: more than one package manager claims ${root}.`,
239
+ `Lockfiles: ${lockfileNames}.`,
240
+ `package.json "packageManager": ${declaredPackageManager ?? "not set"}.`,
241
+ `Using ${packageManager}.`,
242
+ advice
243
+ ].join(" ");
244
+ if (reportedDisagreements.has(message)) {
245
+ return;
246
+ }
247
+ reportedDisagreements.add(message);
248
+ console.warn(message);
249
+ }
167
250
  export {
168
251
  PackageManager,
169
252
  getPackageManager,
170
253
  getPackageManagerRunCommand,
171
254
  resolveToolCommand
172
255
  };
173
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9wYWNrYWdlLW1hbmFnZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZXNvbHZlcyBsb2NhbGx5LWluc3RhbGxlZCB0b29sIGJpbmFyaWVzIGFuZCBwYWNrYWdlLXNjcmlwdCBydW5uZXJzIHdpdGhvdXQgYXNzdW1pbmcgYG5wbWAuXG4gKlxuICogRGVsZWdhdGluZyB0byBgbnB4YCBzaWxlbnRseSBhc3N1bWVzIGFuIG5wbS1pbnN0YWxsZWQgdHJlZS4gT24gV2luZG93cyB0aGF0IGFzc3VtcHRpb24gaXMgZmF0YWwgdW5kZXJcbiAqIGBidW5gOiBgYnVuIGluc3RhbGxgIHdyaXRlcyBgbm9kZV9tb2R1bGVzLy5iaW4vPHRvb2w+LmV4ZWAsIG5vdCB0aGUgYDx0b29sPi5jbWRgIHRoYXQgbnBtJ3MgYG5weGAgbG9va3NcbiAqIGZvciwgc28gYG5weGAgbWlzc2VzIHRoZSBsb2NhbCBpbnN0YWxsIGVudGlyZWx5IGFuZCBkb3dubG9hZHMgdGhlIHRvb2wgZnJvbSB0aGUgcmVnaXN0cnkgaW5zdGVhZCBcdTIwMTQgd2hpY2hcbiAqIGZvciBgdHNjYCBpcyB0aGUgd2VsbC1rbm93biBkZWNveSBwYWNrYWdlLCBub3QgVHlwZVNjcmlwdC4gUmVzb2x2aW5nIHRoZSBzaGltIGZyb20gYG5vZGVfbW9kdWxlcy8uYmluYFxuICogb3Vyc2VsdmVzIHNpZGVzdGVwcyB0aGUgd2hvbGUgc2hpbS1mb3JtYXQgcXVlc3Rpb24sIGJlY2F1c2UgZXZlcnkgcGFja2FnZSBtYW5hZ2VyIHdyaXRlcyBvbmUgdGhlcmUuXG4gKi9cblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgdG9Qb3NpeFBhdGhcbn0gZnJvbSAnLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwIH0gZnJvbSAnLi4vcmVnLWV4cC50cyc7XG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMgfSBmcm9tICcuL29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7IGdldFJvb3RGb2xkZXIgfSBmcm9tICcuL3Jvb3QudHMnO1xuXG4vKipcbiAqIEEgcGFja2FnZSBtYW5hZ2VyIHRoYXQgY2FuIG93biBhIHByb2plY3QncyBkZXBlbmRlbmN5IHRyZWUuXG4gKi9cbmV4cG9ydCBlbnVtIFBhY2thZ2VNYW5hZ2VyIHtcbiAgLyoqXG4gICAqIFRoZSBgYnVuYCBwYWNrYWdlIG1hbmFnZXIuXG4gICAqL1xuICBCdW4gPSAnYnVuJyxcblxuICAvKipcbiAgICogVGhlIGBucG1gIHBhY2thZ2UgbWFuYWdlci5cbiAgICovXG4gIE5wbSA9ICducG0nLFxuXG4gIC8qKlxuICAgKiBUaGUgYHBucG1gIHBhY2thZ2UgbWFuYWdlci5cbiAgICovXG4gIFBucG0gPSAncG5wbScsXG5cbiAgLyoqXG4gICAqIFRoZSBgeWFybmAgcGFja2FnZSBtYW5hZ2VyLlxuICAgKi9cbiAgWWFybiA9ICd5YXJuJ1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXNvbHZlVG9vbENvbW1hbmR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVUb29sQ29tbWFuZFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB0byByZXNvbHZlIGZyb20uXG4gICAqL1xuICByZWFkb25seSBjd2Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBsb2NhbGx5LWluc3RhbGxlZCB0b29sLCBhcyBpdCBhcHBlYXJzIGluIGBub2RlX21vZHVsZXMvLmJpbmAuXG4gICAqL1xuICByZWFkb25seSB0b29sOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGljaCBwYWNrYWdlIG1hbmFnZXIgb3ducyB0aGUgcHJvamVjdCdzIGRlcGVuZGVuY3kgdHJlZS5cbiAqXG4gKiBUaGUgbG9ja2ZpbGUgaXMgdGhlIHByaW1hcnkgc2lnbmFsLCBiZWNhdXNlIGl0IGRlc2NyaWJlcyB0aGUgdHJlZSBpdHNlbGYgcmF0aGVyIHRoYW4gd2hpY2hldmVyIG1hbmFnZXJcbiAqIGhhcHBlbnMgdG8gaGF2ZSBsYXVuY2hlZCB0aGUgY3VycmVudCBwcm9jZXNzLiBXaGVuIG5vIGxvY2tmaWxlIGlzIHByZXNlbnQsIHRoZSBtYW5hZ2VyIHRoYXQgbGF1bmNoZWQgdXNcbiAqIGlzIHRoZSBuZXh0IGJlc3QgYW5zd2VyLCBhbmQgZXZlcnkgbWFuYWdlciByZXBvcnRzIGl0c2VsZiBpbiBgbnBtX2NvbmZpZ191c2VyX2FnZW50YCBhcyBhIGxlYWRpbmdcbiAqIGA8bmFtZT4vPHZlcnNpb24+YCB0b2tlbi5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgdG8gcmVzb2x2ZSBmcm9tLlxuICogQHJldHVybnMgVGhlIGRldGVjdGVkIHBhY2thZ2UgbWFuYWdlciwgb3Ige0BsaW5rIFBhY2thZ2VNYW5hZ2VyLk5wbX0gd2hlbiBub3RoaW5nIGluZGljYXRlcyBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlTWFuYWdlcihjd2Q/OiBzdHJpbmcpOiBQYWNrYWdlTWFuYWdlciB7XG4gIGNvbnN0IHJvb3QgPSBnZXRTdGFydEZvbGRlcihjd2QpO1xuXG4gIGlmIChcbiAgICBleGlzdHNTeW5jKGpvaW4ocm9vdCwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5CdW5Mb2NrKSlcbiAgICB8fCBleGlzdHNTeW5jKGpvaW4ocm9vdCwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5CdW5Mb2NrYikpXG4gICkge1xuICAgIHJldHVybiBQYWNrYWdlTWFuYWdlci5CdW47XG4gIH1cblxuICBpZiAoZXhpc3RzU3luYyhqb2luKHJvb3QsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuUG5wbUxvY2tZYW1sKSkpIHtcbiAgICByZXR1cm4gUGFja2FnZU1hbmFnZXIuUG5wbTtcbiAgfVxuXG4gIGlmIChleGlzdHNTeW5jKGpvaW4ocm9vdCwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5ZYXJuTG9jaykpKSB7XG4gICAgcmV0dXJuIFBhY2thZ2VNYW5hZ2VyLllhcm47XG4gIH1cblxuICBpZiAoZXhpc3RzU3luYyhqb2luKHJvb3QsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuUGFja2FnZUxvY2tKc29uKSkpIHtcbiAgICByZXR1cm4gUGFja2FnZU1hbmFnZXIuTnBtO1xuICB9XG5cbiAgcmV0dXJuIGRldGVjdFBhY2thZ2VNYW5hZ2VyRnJvbVVzZXJBZ2VudCgpID8/IFBhY2thZ2VNYW5hZ2VyLk5wbTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGNvbW1hbmQgcGFydHMgdGhhdCBydW4gYSBwYWNrYWdlIHNjcmlwdCB0aHJvdWdoIHRoZSBtYW5hZ2VyIHRoYXQgb3ducyB0aGUgdHJlZS5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgdG8gcmVzb2x2ZSBmcm9tLlxuICogQHJldHVybnMgVGhlIGNvbW1hbmQgcGFydHMsIGUuZy4gYFsnYnVuJywgJ3J1biddYC4gVGhlIHNjcmlwdCBuYW1lIGlzIGFwcGVuZGVkIGJ5IHRoZSBjYWxsZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlTWFuYWdlclJ1bkNvbW1hbmQoY3dkPzogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gW2dldFBhY2thZ2VNYW5hZ2VyKGN3ZCksICdydW4nXTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGNvbW1hbmQgcGFydHMgdGhhdCBydW4gYSBsb2NhbGx5LWluc3RhbGxlZCB0b29sLCB3aXRoIHRoZSB0b29sIGl0c2VsZiBhbHJlYWR5IGluY2x1ZGVkLlxuICpcbiAqIFByZWZlcnMgdGhlIHNoaW0gaW4gdGhlIG5lYXJlc3QgYG5vZGVfbW9kdWxlcy8uYmluYCwgd2Fsa2luZyB1cCB0aHJvdWdoIGFuY2VzdG9yIGZvbGRlcnMgc28gYSBob2lzdGVkXG4gKiB3b3Jrc3BhY2UgaW5zdGFsbCBpcyBzdGlsbCBmb3VuZC4gRmFsbHMgYmFjayB0byB0aGUgb3duaW5nIG1hbmFnZXIncyBleGVjIGZvcm0gd2hlbiBubyBzaGltIHJlc29sdmVzIFx1MjAxNFxuICogd2hpY2ggaXMgYm90aCB0aGUgcHJldmlvdXMgYmVoYXZpb3IgYW5kIHRoZSBvbmx5IHRoaW5nIHRoYXQgd29ya3MgdW5kZXIgeWFybidzIFBsdWcnbidQbGF5LCB3aGVyZVxuICogYG5vZGVfbW9kdWxlcy8uYmluYCBkb2VzIG5vdCBleGlzdCBhdCBhbGwuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcmVzb2x1dGlvbi5cbiAqIEByZXR1cm5zIFRoZSBjb21tYW5kIHBhcnRzLCBlLmcuIGBbJy9wcm9qZWN0L25vZGVfbW9kdWxlcy8uYmluL3RzYyddYCBvciBgWydidW4nLCAneCcsICd0c2MnXWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVG9vbENvbW1hbmQocGFyYW1zOiBSZXNvbHZlVG9vbENvbW1hbmRQYXJhbXMpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHsgY3dkLCB0b29sIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHNoaW1QYXRoID0gZmluZEJpblNoaW0oeyBjd2QsIHRvb2wgfSk7XG5cbiAgaWYgKHNoaW1QYXRoICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtzaGltUGF0aF07XG4gIH1cblxuICByZXR1cm4gWy4uLmdldFBhY2thZ2VNYW5hZ2VyRXhlY0NvbW1hbmQoY3dkKSwgdG9vbF07XG59XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgbGVhZGluZyBgPG5hbWU+L2AgdG9rZW4gb2YgYW4gYG5wbV9jb25maWdfdXNlcl9hZ2VudGAgdmFsdWUuXG4gKi9cbmNvbnN0IFVTRVJfQUdFTlRfTkFNRV9SRUdfRVhQID0gL14oPzxuYW1lPlteL1xcc10rKVxcLy87XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGZpbmRCaW5TaGltfS5cbiAqL1xuaW50ZXJmYWNlIEZpbmRCaW5TaGltUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHRvIHJlc29sdmUgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IGN3ZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGxvY2FsbHktaW5zdGFsbGVkIHRvb2wuXG4gICAqL1xuICByZWFkb25seSB0b29sOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIHBhY2thZ2UgbWFuYWdlciBvdXQgb2YgYG5wbV9jb25maWdfdXNlcl9hZ2VudGAsIHdoaWNoIGV2ZXJ5IG1hbmFnZXIgc2V0cyBmb3IgdGhlIHByb2Nlc3NlcyBpdFxuICogbGF1bmNoZXMuXG4gKlxuICogQHJldHVybnMgVGhlIGRldGVjdGVkIHBhY2thZ2UgbWFuYWdlciwgb3IgYG51bGxgIHdoZW4gdGhlIHZhcmlhYmxlIGlzIGFic2VudCwgbWFsZm9ybWVkLCBvciBuYW1lcyBhXG4gKiBydW50aW1lIHdlIGRvIG5vdCBoYW5kbGUuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFBhY2thZ2VNYW5hZ2VyRnJvbVVzZXJBZ2VudCgpOiBudWxsIHwgUGFja2FnZU1hbmFnZXIge1xuICBjb25zdCB1c2VyQWdlbnQgPSBwcm9jZXNzLmVudlsnbnBtX2NvbmZpZ191c2VyX2FnZW50J107XG5cbiAgaWYgKCF1c2VyQWdlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gVVNFUl9BR0VOVF9OQU1FX1JFR19FWFAuZXhlYyh1c2VyQWdlbnQpO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5hbWUgPSBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnbmFtZScpO1xuXG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgUGFja2FnZU1hbmFnZXIuQnVuIGFzIHN0cmluZzoge1xuICAgICAgcmV0dXJuIFBhY2thZ2VNYW5hZ2VyLkJ1bjtcbiAgICB9XG4gICAgY2FzZSBQYWNrYWdlTWFuYWdlci5OcG0gYXMgc3RyaW5nOiB7XG4gICAgICByZXR1cm4gUGFja2FnZU1hbmFnZXIuTnBtO1xuICAgIH1cbiAgICBjYXNlIFBhY2thZ2VNYW5hZ2VyLlBucG0gYXMgc3RyaW5nOiB7XG4gICAgICByZXR1cm4gUGFja2FnZU1hbmFnZXIuUG5wbTtcbiAgICB9XG4gICAgY2FzZSBQYWNrYWdlTWFuYWdlci5ZYXJuIGFzIHN0cmluZzoge1xuICAgICAgcmV0dXJuIFBhY2thZ2VNYW5hZ2VyLllhcm47XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBgbm9kZV9tb2R1bGVzLy5iaW5gIHNoaW0gZm9yIGEgdG9vbCwgd2Fsa2luZyB1cCBmcm9tIHRoZSBwcm9qZWN0IHJvb3QgdGhyb3VnaCBhbmNlc3RvciBmb2xkZXJzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGxvb2t1cC5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBzaGltLCBvciBgbnVsbGAgd2hlbiBub25lIGV4aXN0cy5cbiAqL1xuZnVuY3Rpb24gZmluZEJpblNoaW0ocGFyYW1zOiBGaW5kQmluU2hpbVBhcmFtcyk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCB7IGN3ZCwgdG9vbCB9ID0gcGFyYW1zO1xuICBjb25zdCBjYW5kaWRhdGVzID0gZ2V0U2hpbUNhbmRpZGF0ZXModG9vbCk7XG4gIGxldCBjdXJyZW50Rm9sZGVyID0gZ2V0U3RhcnRGb2xkZXIoY3dkKTtcblxuICB3aGlsZSAoXG4gICAgY3VycmVudEZvbGRlciAhPT0gT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5DdXJyZW50Rm9sZGVyIGFzIHN0cmluZ1xuICAgICYmIGN1cnJlbnRGb2xkZXIgIT09IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuUm9vdEZvbGRlciBhcyBzdHJpbmdcbiAgKSB7XG4gICAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgY2FuZGlkYXRlcykge1xuICAgICAgY29uc3Qgc2hpbVBhdGggPSBqb2luKGN1cnJlbnRGb2xkZXIsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuTm9kZU1vZHVsZXMsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuQmluLCBjYW5kaWRhdGUpO1xuICAgICAgaWYgKGV4aXN0c1N5bmMoc2hpbVBhdGgpKSB7XG4gICAgICAgIHJldHVybiBzaGltUGF0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjdXJyZW50Rm9sZGVyID0gZGlybmFtZShjdXJyZW50Rm9sZGVyKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgY29tbWFuZCBwYXJ0cyB0aGF0IHJ1biBhIG9uZS1vZmYgdG9vbCB0aHJvdWdoIHRoZSBtYW5hZ2VyIHRoYXQgb3ducyB0aGUgdHJlZS5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgdG8gcmVzb2x2ZSBmcm9tLlxuICogQHJldHVybnMgVGhlIGNvbW1hbmQgcGFydHMsIGUuZy4gYFsnYnVuJywgJ3gnXWAuIFRoZSB0b29sIG5hbWUgaXMgYXBwZW5kZWQgYnkgdGhlIGNhbGxlci5cbiAqL1xuZnVuY3Rpb24gZ2V0UGFja2FnZU1hbmFnZXJFeGVjQ29tbWFuZChjd2Q/OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHBhY2thZ2VNYW5hZ2VyID0gZ2V0UGFja2FnZU1hbmFnZXIoY3dkKTtcblxuICBzd2l0Y2ggKHBhY2thZ2VNYW5hZ2VyKSB7XG4gICAgY2FzZSBQYWNrYWdlTWFuYWdlci5CdW46IHtcbiAgICAgIHJldHVybiBbJ2J1bicsICd4J107XG4gICAgfVxuICAgIGNhc2UgUGFja2FnZU1hbmFnZXIuTnBtOiB7XG4gICAgICByZXR1cm4gWyducHgnXTtcbiAgICB9XG4gICAgY2FzZSBQYWNrYWdlTWFuYWdlci5QbnBtOiB7XG4gICAgICByZXR1cm4gWydwbnBtJywgJ2V4ZWMnXTtcbiAgICB9XG4gICAgY2FzZSBQYWNrYWdlTWFuYWdlci5ZYXJuOiB7XG4gICAgICByZXR1cm4gWyd5YXJuJywgJ2V4ZWMnXTtcbiAgICB9XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEV4aGF1c3RpdmUgc3dpdGNoIGd1YXJkOyBkZWZhdWx0IGJyYW5jaCBpcyB1bnJlYWNoYWJsZS4gKi9cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gYXNzZXJ0TmV2ZXIocGFja2FnZU1hbmFnZXIpO1xuICAgIH1cbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIH1cbn1cblxuLyoqXG4gKiBMaXN0cyB0aGUgc2hpbSBmaWxlIG5hbWVzIHRvIHRyeSBmb3IgYSB0b29sLCBtb3N0IHNwZWNpZmljIGZpcnN0LlxuICpcbiAqIE9uIFdpbmRvd3Mgb25seSB0aGUgZXhlY3V0YWJsZSBmb3JtcyBhcmUgdmlhYmxlOiBucG0gYW5kIHBucG0gYWxzbyB3cml0ZSBhIHNoaW0gd2l0aCBubyBleHRlbnNpb24sIGJ1dFxuICogdGhhdCBvbmUgaXMgYSBgc2hgIHNjcmlwdCB0aGF0IGBjbWQuZXhlYCBjYW5ub3QgcnVuLCBzbyBpdCBtdXN0IG5ldmVyIGJlIGNob3NlbiB0aGVyZS5cbiAqXG4gKiBAcGFyYW0gdG9vbCAtIFRoZSBuYW1lIG9mIHRoZSBsb2NhbGx5LWluc3RhbGxlZCB0b29sLlxuICogQHJldHVybnMgVGhlIGNhbmRpZGF0ZSBmaWxlIG5hbWVzLCBpbiB0aGUgb3JkZXIgdGhleSBzaG91bGQgYmUgdHJpZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFNoaW1DYW5kaWRhdGVzKHRvb2w6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gW3Rvb2xdO1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICBgJHt0b29sfSR7T2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5Db21tYW5kRXh0ZW5zaW9ufWAsXG4gICAgYCR7dG9vbH0ke09ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRXhlRXh0ZW5zaW9ufWAsXG4gICAgYCR7dG9vbH0ke09ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuQmF0RXh0ZW5zaW9ufWBcbiAgXTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgZm9sZGVyIHRvIHN0YXJ0IGEgbG9va3VwIGZyb20gXHUyMDE0IHRoZSBwcm9qZWN0IHJvb3Qgd2hlbiB0aGVyZSBpcyBvbmUsIHRoZSB3b3JraW5nIGZvbGRlclxuICogb3RoZXJ3aXNlLlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB0byByZXNvbHZlIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgZm9sZGVyIHRvIHN0YXJ0IGZyb20uXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXJ0Rm9sZGVyKGN3ZD86IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRSb290Rm9sZGVyKGN3ZCkgPz8gdG9Qb3NpeFBhdGgoY3dkID8/IHByb2Nlc3MuY3dkKCkpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVlBLFNBQVMsa0JBQWtCO0FBQzNCLE9BQU8sYUFBYTtBQUVwQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLGlDQUFpQztBQUMx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
256
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9wYWNrYWdlLW1hbmFnZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZXNvbHZlcyBsb2NhbGx5LWluc3RhbGxlZCB0b29sIGJpbmFyaWVzIGFuZCBwYWNrYWdlLXNjcmlwdCBydW5uZXJzIHdpdGhvdXQgYXNzdW1pbmcgYG5wbWAuXG4gKlxuICogRGVsZWdhdGluZyB0byBgbnB4YCBzaWxlbnRseSBhc3N1bWVzIGFuIG5wbS1pbnN0YWxsZWQgdHJlZS4gT24gV2luZG93cyB0aGF0IGFzc3VtcHRpb24gaXMgZmF0YWwgdW5kZXJcbiAqIGBidW5gOiBgYnVuIGluc3RhbGxgIHdyaXRlcyBgbm9kZV9tb2R1bGVzLy5iaW4vPHRvb2w+LmV4ZWAsIG5vdCB0aGUgYDx0b29sPi5jbWRgIHRoYXQgbnBtJ3MgYG5weGAgbG9va3NcbiAqIGZvciwgc28gYG5weGAgbWlzc2VzIHRoZSBsb2NhbCBpbnN0YWxsIGVudGlyZWx5IGFuZCBkb3dubG9hZHMgdGhlIHRvb2wgZnJvbSB0aGUgcmVnaXN0cnkgaW5zdGVhZCBcdTIwMTQgd2hpY2hcbiAqIGZvciBgdHNjYCBpcyB0aGUgd2VsbC1rbm93biBkZWNveSBwYWNrYWdlLCBub3QgVHlwZVNjcmlwdC4gUmVzb2x2aW5nIHRoZSBzaGltIGZyb20gYG5vZGVfbW9kdWxlcy8uYmluYFxuICogb3Vyc2VsdmVzIHNpZGVzdGVwcyB0aGUgd2hvbGUgc2hpbS1mb3JtYXQgcXVlc3Rpb24sIGJlY2F1c2UgZXZlcnkgcGFja2FnZSBtYW5hZ2VyIHdyaXRlcyBvbmUgdGhlcmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQYWNrYWdlSnNvbiB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7XG4gIGRpcm5hbWUsXG4gIGpvaW4sXG4gIHRvUG9zaXhQYXRoXG59IGZyb20gJy4uL3BhdGgudHMnO1xuaW1wb3J0IHsgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCB9IGZyb20gJy4uL3JlZy1leHAudHMnO1xuaW1wb3J0IHsgYXNzZXJ0TmV2ZXIgfSBmcm9tICcuLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgeyByZWFkSnNvblN5bmMgfSBmcm9tICcuL2pzb24udHMnO1xuaW1wb3J0IHsgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocyB9IGZyb20gJy4vb2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHsgZ2V0Um9vdEZvbGRlciB9IGZyb20gJy4vcm9vdC50cyc7XG5cbi8qKlxuICogQSBwYWNrYWdlIG1hbmFnZXIgdGhhdCBjYW4gb3duIGEgcHJvamVjdCdzIGRlcGVuZGVuY3kgdHJlZS5cbiAqL1xuZXhwb3J0IGVudW0gUGFja2FnZU1hbmFnZXIge1xuICAvKipcbiAgICogVGhlIGBidW5gIHBhY2thZ2UgbWFuYWdlci5cbiAgICovXG4gIEJ1biA9ICdidW4nLFxuXG4gIC8qKlxuICAgKiBUaGUgYG5wbWAgcGFja2FnZSBtYW5hZ2VyLlxuICAgKi9cbiAgTnBtID0gJ25wbScsXG5cbiAgLyoqXG4gICAqIFRoZSBgcG5wbWAgcGFja2FnZSBtYW5hZ2VyLlxuICAgKi9cbiAgUG5wbSA9ICdwbnBtJyxcblxuICAvKipcbiAgICogVGhlIGB5YXJuYCBwYWNrYWdlIG1hbmFnZXIuXG4gICAqL1xuICBZYXJuID0gJ3lhcm4nXG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVUb29sQ29tbWFuZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZVRvb2xDb21tYW5kUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHRvIHJlc29sdmUgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IGN3ZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGxvY2FsbHktaW5zdGFsbGVkIHRvb2wsIGFzIGl0IGFwcGVhcnMgaW4gYG5vZGVfbW9kdWxlcy8uYmluYC5cbiAgICovXG4gIHJlYWRvbmx5IHRvb2w6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIHBhY2thZ2UgbWFuYWdlciBvd25zIHRoZSBwcm9qZWN0J3MgZGVwZW5kZW5jeSB0cmVlLlxuICpcbiAqIEV2ZXJ5IHNpZ25hbCBpcyBjb2xsZWN0ZWQgYmVmb3JlIGFueSBvZiB0aGVtIGlzIGJlbGlldmVkLCBiZWNhdXNlIGEgcmVwbyBjYXJyeWluZyB0d28gbG9ja2ZpbGVzIHVzZWQgdG9cbiAqIHJlc29sdmUgdG8gd2hpY2hldmVyIHNhdCBlYXJsaWVyIGluIGEgZml4ZWQgbGlzdCBcdTIwMTQgc2lsZW50bHkgcmVhc3NpZ25pbmcgZXZlcnkgcGFja2FnZSBzY3JpcHQgYW5kIGV2ZXJ5XG4gKiB0b29sIGludm9jYXRpb24gdG8gYSBtYW5hZ2VyIHRoYXQgbmV2ZXIgaW5zdGFsbGVkIHRoZSB0cmVlLlxuICpcbiAqIFRoZSBvcmRlciBpczpcbiAqXG4gKiAxLiBUaGUgYHBhY2thZ2VNYW5hZ2VyYCBmaWVsZCBvZiBgcGFja2FnZS5qc29uYC4gSXQgaXMgYSBkZWxpYmVyYXRlIGRlY2xhcmF0aW9uIGJ5IHRoZSByZXBvJ3MgYXV0aG9yXG4gKiAgICByYXRoZXIgdGhhbiBhbiBhcnRpZmFjdCBsZWZ0IGJlaGluZCBieSB3aGF0ZXZlciByYW4gbGFzdCwgc28gaXQgb3V0cmFua3MgZXZlcnkgbG9ja2ZpbGUgXHUyMDE0IGFuZCBpdCBpc1xuICogICAgdGhlIG9ubHkgc2lnbmFsIHRoYXQgaGVscHMgYXQgYWxsIGJlZm9yZSB0aGUgZmlyc3QgaW5zdGFsbCwgd2hlbiBubyBsb2NrZmlsZSBleGlzdHMgeWV0LlxuICogMi4gVGhlIHNvbGUgbG9ja2ZpbGUsIHdoZW4gZXhhY3RseSBvbmUgbWFuYWdlciBjbGFpbXMgdGhlIHRyZWUuXG4gKiAzLiBBbW9uZyBzZXZlcmFsIGxvY2tmaWxlcywgdGhlIG1hbmFnZXIgdGhhdCBsYXVuY2hlZCB1cyAoYG5wbV9jb25maWdfdXNlcl9hZ2VudGApLCB3aGVuIGl0IG93bnMgb25lIG9mXG4gKiAgICB0aGVtIFx1MjAxNCBhIGxpdmUgc2lnbmFsIGJlYXRzIGEgZmlsZSB0aGF0IG1heSBoYXZlIGJlZW4gYWJhbmRvbmVkIG1pZC1taWdyYXRpb24uIE90aGVyd2lzZSB0aGVcbiAqICAgIGRvY3VtZW50ZWQgZmFsbGJhY2sgb3JkZXIgaW4ge0BsaW5rIExPQ0tGSUxFU30gZGVjaWRlcy4gTm90ZSB0aGlzIGlzIGRlbGliZXJhdGVseSBOT1QgXCJ0aGUgbW9zdFxuICogICAgcmVjZW50bHkgbW9kaWZpZWQgbG9ja2ZpbGVcIjogYSBzdHJheSBsb2NrZmlsZSBpcyB0eXBpY2FsbHkgdGhlIG5ld2VzdCBmaWxlLCBzbyBtdGltZSBwaWNrcyBwcmVjaXNlbHlcbiAqICAgIHRoZSB3cm9uZyBvbmUuXG4gKiA0LiBgbnBtX2NvbmZpZ191c2VyX2FnZW50YCBvbiBpdHMgb3duLCB3aGVuIHRoZXJlIGlzIG5vIGxvY2tmaWxlLlxuICogNS4ge0BsaW5rIFBhY2thZ2VNYW5hZ2VyLk5wbX0uXG4gKlxuICogV2hlbmV2ZXIgbW9yZSB0aGFuIG9uZSBtYW5hZ2VyIGNsYWltcyB0aGUgdHJlZSwgdGhlIGRpc2FncmVlbWVudCBpcyByZXBvcnRlZCBvbmNlIHBlciBwcm9qZWN0IHRocm91Z2hcbiAqIHtAbGluayB3YXJuQWJvdXRTZXZlcmFsQ2xhaW1hbnRzfSBcdTIwMTQgdGhlIHJlc29sdXRpb24gc3RheXMgZGV0ZXJtaW5pc3RpYywgYnV0IGl0IHN0b3BzIGJlaW5nIHNpbGVudC5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgdG8gcmVzb2x2ZSBmcm9tLlxuICogQHJldHVybnMgVGhlIGRldGVjdGVkIHBhY2thZ2UgbWFuYWdlciwgb3Ige0BsaW5rIFBhY2thZ2VNYW5hZ2VyLk5wbX0gd2hlbiBub3RoaW5nIGluZGljYXRlcyBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlTWFuYWdlcihjd2Q/OiBzdHJpbmcpOiBQYWNrYWdlTWFuYWdlciB7XG4gIGNvbnN0IHJvb3QgPSBnZXRTdGFydEZvbGRlcihjd2QpO1xuICBjb25zdCBkZWNsYXJlZFBhY2thZ2VNYW5hZ2VyID0gZGV0ZWN0UGFja2FnZU1hbmFnZXJGcm9tUGFja2FnZUpzb24ocm9vdCk7XG4gIGNvbnN0IGxvY2tmaWxlcyA9IExPQ0tGSUxFUy5maWx0ZXIoKGxvY2tmaWxlKSA9PiBleGlzdHNTeW5jKGpvaW4ocm9vdCwgbG9ja2ZpbGUuZmlsZU5hbWUpKSk7XG4gIGNvbnN0IGNsYWltYW50cyA9IG5ldyBTZXQobG9ja2ZpbGVzLm1hcCgobG9ja2ZpbGUpID0+IGxvY2tmaWxlLnBhY2thZ2VNYW5hZ2VyKSk7XG5cbiAgaWYgKGRlY2xhcmVkUGFja2FnZU1hbmFnZXIgIT09IG51bGwpIHtcbiAgICBjbGFpbWFudHMuYWRkKGRlY2xhcmVkUGFja2FnZU1hbmFnZXIpO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZU1hbmFnZXIgPSByZXNvbHZlUGFja2FnZU1hbmFnZXIoe1xuICAgIGNsYWltYW50cyxcbiAgICBkZWNsYXJlZFBhY2thZ2VNYW5hZ2VyXG4gIH0pO1xuXG4gIGlmIChjbGFpbWFudHMuc2l6ZSA+IDEpIHtcbiAgICB3YXJuQWJvdXRTZXZlcmFsQ2xhaW1hbnRzKHtcbiAgICAgIGRlY2xhcmVkUGFja2FnZU1hbmFnZXIsXG4gICAgICBsb2NrZmlsZXMsXG4gICAgICBwYWNrYWdlTWFuYWdlcixcbiAgICAgIHJvb3RcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBwYWNrYWdlTWFuYWdlcjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGNvbW1hbmQgcGFydHMgdGhhdCBydW4gYSBwYWNrYWdlIHNjcmlwdCB0aHJvdWdoIHRoZSBtYW5hZ2VyIHRoYXQgb3ducyB0aGUgdHJlZS5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgdG8gcmVzb2x2ZSBmcm9tLlxuICogQHJldHVybnMgVGhlIGNvbW1hbmQgcGFydHMsIGUuZy4gYFsnYnVuJywgJ3J1biddYC4gVGhlIHNjcmlwdCBuYW1lIGlzIGFwcGVuZGVkIGJ5IHRoZSBjYWxsZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlTWFuYWdlclJ1bkNvbW1hbmQoY3dkPzogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gW2dldFBhY2thZ2VNYW5hZ2VyKGN3ZCksICdydW4nXTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGNvbW1hbmQgcGFydHMgdGhhdCBydW4gYSBsb2NhbGx5LWluc3RhbGxlZCB0b29sLCB3aXRoIHRoZSB0b29sIGl0c2VsZiBhbHJlYWR5IGluY2x1ZGVkLlxuICpcbiAqIFByZWZlcnMgdGhlIHNoaW0gaW4gdGhlIG5lYXJlc3QgYG5vZGVfbW9kdWxlcy8uYmluYCwgd2Fsa2luZyB1cCB0aHJvdWdoIGFuY2VzdG9yIGZvbGRlcnMgc28gYSBob2lzdGVkXG4gKiB3b3Jrc3BhY2UgaW5zdGFsbCBpcyBzdGlsbCBmb3VuZC4gRmFsbHMgYmFjayB0byB0aGUgb3duaW5nIG1hbmFnZXIncyBleGVjIGZvcm0gd2hlbiBubyBzaGltIHJlc29sdmVzIFx1MjAxNFxuICogd2hpY2ggaXMgYm90aCB0aGUgcHJldmlvdXMgYmVoYXZpb3IgYW5kIHRoZSBvbmx5IHRoaW5nIHRoYXQgd29ya3MgdW5kZXIgeWFybidzIFBsdWcnbidQbGF5LCB3aGVyZVxuICogYG5vZGVfbW9kdWxlcy8uYmluYCBkb2VzIG5vdCBleGlzdCBhdCBhbGwuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcmVzb2x1dGlvbi5cbiAqIEByZXR1cm5zIFRoZSBjb21tYW5kIHBhcnRzLCBlLmcuIGBbJy9wcm9qZWN0L25vZGVfbW9kdWxlcy8uYmluL3RzYyddYCBvciBgWydidW4nLCAneCcsICd0c2MnXWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVG9vbENvbW1hbmQocGFyYW1zOiBSZXNvbHZlVG9vbENvbW1hbmRQYXJhbXMpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHsgY3dkLCB0b29sIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHNoaW1QYXRoID0gZmluZEJpblNoaW0oeyBjd2QsIHRvb2wgfSk7XG5cbiAgaWYgKHNoaW1QYXRoICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtzaGltUGF0aF07XG4gIH1cblxuICByZXR1cm4gWy4uLmdldFBhY2thZ2VNYW5hZ2VyRXhlY0NvbW1hbmQoY3dkKSwgdG9vbF07XG59XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgbGVhZGluZyBgPG5hbWU+QGAgdG9rZW4gb2YgYSBgcGFja2FnZS5qc29uYCBgcGFja2FnZU1hbmFnZXJgIHZhbHVlLlxuICpcbiAqIFRoZSBgQGAgaXMgcmVxdWlyZWQsIGJlY2F1c2UgY29yZXBhY2sncyBmb3JtYXQgaXMgYDxuYW1lPkA8dmVyc2lvbj5gIFx1MjAxNCBhIGJhcmUgbmFtZSBpcyBhIG1hbGZvcm1lZFxuICogZGVjbGFyYXRpb24gcmF0aGVyIHRoYW4gYSBzaG9ydGhhbmQsIGFuZCBpcyBpZ25vcmVkIGluc3RlYWQgb2YgZ3Vlc3NlZCBhdC5cbiAqL1xuY29uc3QgREVDTEFSQVRJT05fTkFNRV9SRUdfRVhQID0gL14oPzxuYW1lPlteQFxcc10rKUAvO1xuXG4vKipcbiAqIFRoZSBsb2NrZmlsZXMgdGhhdCBpZGVudGlmeSBhIHBhY2thZ2UgbWFuYWdlciwgaW4gdGhlIG9yZGVyIHRoZXkgZGVjaWRlIGEgdGllIG5vIG90aGVyIHNpZ25hbCBzZXR0bGVzLlxuICpcbiAqIEJvdGggYnVuIGxvY2tmaWxlIGZvcm1hdHMgbWFwIHRvIHRoZSBzYW1lIG1hbmFnZXIsIHNvIGEgcmVwbyBob2xkaW5nIGJvdGggaXMgb25lIGNsYWltYW50LCBub3QgdHdvLlxuICovXG5jb25zdCBMT0NLRklMRVM6IExvY2tmaWxlQ2xhaW1bXSA9IFtcbiAgeyBmaWxlTmFtZTogT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5CdW5Mb2NrLCBwYWNrYWdlTWFuYWdlcjogUGFja2FnZU1hbmFnZXIuQnVuIH0sXG4gIHsgZmlsZU5hbWU6IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuQnVuTG9ja2IsIHBhY2thZ2VNYW5hZ2VyOiBQYWNrYWdlTWFuYWdlci5CdW4gfSxcbiAgeyBmaWxlTmFtZTogT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5QbnBtTG9ja1lhbWwsIHBhY2thZ2VNYW5hZ2VyOiBQYWNrYWdlTWFuYWdlci5QbnBtIH0sXG4gIHsgZmlsZU5hbWU6IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuWWFybkxvY2ssIHBhY2thZ2VNYW5hZ2VyOiBQYWNrYWdlTWFuYWdlci5ZYXJuIH0sXG4gIHsgZmlsZU5hbWU6IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuUGFja2FnZUxvY2tKc29uLCBwYWNrYWdlTWFuYWdlcjogUGFja2FnZU1hbmFnZXIuTnBtIH1cbl07XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgbGVhZGluZyBgPG5hbWU+L2AgdG9rZW4gb2YgYW4gYG5wbV9jb25maWdfdXNlcl9hZ2VudGAgdmFsdWUuXG4gKi9cbmNvbnN0IFVTRVJfQUdFTlRfTkFNRV9SRUdfRVhQID0gL14oPzxuYW1lPlteL1xcc10rKVxcLy87XG5cbi8qKlxuICogVGhlIGRpc2FncmVlbWVudHMgYWxyZWFkeSByZXBvcnRlZCwgc28gYSBidWlsZCB0aGF0IHJlc29sdmVzIHRoZSBtYW5hZ2VyIG9uY2UgcGVyIHNjcmlwdCBob3AgYW5kIG9uY2VcbiAqIHBlciB0b29sIGludm9jYXRpb24gc3RpbGwgc2F5cyBpdCBvbmx5IG9uY2UuXG4gKi9cbmNvbnN0IHJlcG9ydGVkRGlzYWdyZWVtZW50cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmaW5kQmluU2hpbX0uXG4gKi9cbmludGVyZmFjZSBGaW5kQmluU2hpbVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB0byByZXNvbHZlIGZyb20uXG4gICAqL1xuICByZWFkb25seSBjd2Q/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBsb2NhbGx5LWluc3RhbGxlZCB0b29sLlxuICAgKi9cbiAgcmVhZG9ubHkgdG9vbDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbG9ja2ZpbGUgYW5kIHRoZSBwYWNrYWdlIG1hbmFnZXIgd2hvc2UgcHJlc2VuY2UgaXQgcHJvdmVzLlxuICovXG5pbnRlcmZhY2UgTG9ja2ZpbGVDbGFpbSB7XG4gIC8qKlxuICAgKiBUaGUgbG9ja2ZpbGUgbmFtZSwgYXMgaXQgYXBwZWFycyBhdCB0aGUgcHJvamVjdCByb290LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhY2thZ2UgbWFuYWdlciB0aGF0IHdyaXRlcyB0aGlzIGxvY2tmaWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZU1hbmFnZXI6IFBhY2thZ2VNYW5hZ2VyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXNvbHZlUGFja2FnZU1hbmFnZXJ9LlxuICovXG5pbnRlcmZhY2UgUmVzb2x2ZVBhY2thZ2VNYW5hZ2VyUGFyYW1zIHtcbiAgLyoqXG4gICAqIEV2ZXJ5IHBhY2thZ2UgbWFuYWdlciBjbGFpbWluZyB0aGUgdHJlZSBcdTIwMTQgdGhlIGxvY2tmaWxlIG93bmVycyBpbiB7QGxpbmsgTE9DS0ZJTEVTfSBvcmRlciwgcGx1cyB0aGVcbiAgICogZGVjbGFyZWQgb25lLiBPbmx5IGNvbnN1bHRlZCB3aGVuIG5vdGhpbmcgaXMgZGVjbGFyZWQsIGluIHdoaWNoIGNhc2UgaXQgaG9sZHMgZXhhY3RseSB0aGUgbG9ja2ZpbGVcbiAgICogb3duZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xhaW1hbnRzOiBSZWFkb25seVNldDxQYWNrYWdlTWFuYWdlcj47XG5cbiAgLyoqXG4gICAqIFRoZSBwYWNrYWdlIG1hbmFnZXIgZGVjbGFyZWQgaW4gYHBhY2thZ2UuanNvbmAsIG9yIGBudWxsYCB3aGVuIG5vbmUgaXMuXG4gICAqL1xuICByZWFkb25seSBkZWNsYXJlZFBhY2thZ2VNYW5hZ2VyOiBudWxsIHwgUGFja2FnZU1hbmFnZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHdhcm5BYm91dFNldmVyYWxDbGFpbWFudHN9LlxuICovXG5pbnRlcmZhY2UgV2FybkFib3V0U2V2ZXJhbENsYWltYW50c1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIGRlY2xhcmVkIGluIGBwYWNrYWdlLmpzb25gLCBvciBgbnVsbGAgd2hlbiBub25lIGlzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVjbGFyZWRQYWNrYWdlTWFuYWdlcjogbnVsbCB8IFBhY2thZ2VNYW5hZ2VyO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9ja2ZpbGVzIGFjdHVhbGx5IGZvdW5kIGF0IHRoZSBwcm9qZWN0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSBsb2NrZmlsZXM6IHJlYWRvbmx5IExvY2tmaWxlQ2xhaW1bXTtcblxuICAvKipcbiAgICogVGhlIHBhY2thZ2UgbWFuYWdlciB0aGF0IHdvbi5cbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VNYW5hZ2VyOiBQYWNrYWdlTWFuYWdlcjtcblxuICAvKipcbiAgICogVGhlIHByb2plY3Qgcm9vdCB0aGUgbG9ja2ZpbGVzIHdlcmUgZm91bmQgaW4uXG4gICAqL1xuICByZWFkb25seSByb290OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIHBhY2thZ2UgbWFuYWdlciBvdXQgb2YgdGhlIGBwYWNrYWdlTWFuYWdlcmAgZmllbGQgb2YgdGhlIHByb2plY3QncyBgcGFja2FnZS5qc29uYCwgd2hpY2ggaXNcbiAqIGNvcmVwYWNrJ3MgYDxuYW1lPkA8dmVyc2lvbj5gIGRlY2xhcmF0aW9uLlxuICpcbiAqIEBwYXJhbSByb290IC0gVGhlIHByb2plY3Qgcm9vdCB0byByZWFkIGBwYWNrYWdlLmpzb25gIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgZGVjbGFyZWQgcGFja2FnZSBtYW5hZ2VyLCBvciBgbnVsbGAgd2hlbiB0aGVyZSBpcyBubyBgcGFja2FnZS5qc29uYCwgaXQgY2Fubm90IGJlIHBhcnNlZCxcbiAqIHRoZSBmaWVsZCBpcyBhYnNlbnQgb3IgbWFsZm9ybWVkLCBvciBpdCBuYW1lcyBhIG1hbmFnZXIgd2UgZG8gbm90IGhhbmRsZS5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0UGFja2FnZU1hbmFnZXJGcm9tUGFja2FnZUpzb24ocm9vdDogc3RyaW5nKTogbnVsbCB8IFBhY2thZ2VNYW5hZ2VyIHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gam9pbihyb290LCBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLlBhY2thZ2VKc29uKTtcblxuICBpZiAoIWV4aXN0c1N5bmMocGFja2FnZUpzb25QYXRoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbjtcblxuICB0cnkge1xuICAgIHBhY2thZ2VKc29uID0gcmVhZEpzb25TeW5jPFBhY2thZ2VKc29uPihwYWNrYWdlSnNvblBhdGgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gcGFja2FnZUpzb24ucGFja2FnZU1hbmFnZXI7XG5cbiAgaWYgKCFkZWNsYXJhdGlvbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSBERUNMQVJBVElPTl9OQU1FX1JFR19FWFAuZXhlYyhkZWNsYXJhdGlvbik7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlUGFja2FnZU1hbmFnZXJOYW1lKGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICduYW1lJykpO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBwYWNrYWdlIG1hbmFnZXIgb3V0IG9mIGBucG1fY29uZmlnX3VzZXJfYWdlbnRgLCB3aGljaCBldmVyeSBtYW5hZ2VyIHNldHMgZm9yIHRoZSBwcm9jZXNzZXMgaXRcbiAqIGxhdW5jaGVzLlxuICpcbiAqIEByZXR1cm5zIFRoZSBkZXRlY3RlZCBwYWNrYWdlIG1hbmFnZXIsIG9yIGBudWxsYCB3aGVuIHRoZSB2YXJpYWJsZSBpcyBhYnNlbnQsIG1hbGZvcm1lZCwgb3IgbmFtZXMgYVxuICogcnVudGltZSB3ZSBkbyBub3QgaGFuZGxlLlxuICovXG5mdW5jdGlvbiBkZXRlY3RQYWNrYWdlTWFuYWdlckZyb21Vc2VyQWdlbnQoKTogbnVsbCB8IFBhY2thZ2VNYW5hZ2VyIHtcbiAgY29uc3QgdXNlckFnZW50ID0gcHJvY2Vzcy5lbnZbJ25wbV9jb25maWdfdXNlcl9hZ2VudCddO1xuXG4gIGlmICghdXNlckFnZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IFVTRVJfQUdFTlRfTkFNRV9SRUdfRVhQLmV4ZWModXNlckFnZW50KTtcblxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gcGFyc2VQYWNrYWdlTWFuYWdlck5hbWUoZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ25hbWUnKSk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGBub2RlX21vZHVsZXMvLmJpbmAgc2hpbSBmb3IgYSB0b29sLCB3YWxraW5nIHVwIGZyb20gdGhlIHByb2plY3Qgcm9vdCB0aHJvdWdoIGFuY2VzdG9yIGZvbGRlcnMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbG9va3VwLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIHNoaW0sIG9yIGBudWxsYCB3aGVuIG5vbmUgZXhpc3RzLlxuICovXG5mdW5jdGlvbiBmaW5kQmluU2hpbShwYXJhbXM6IEZpbmRCaW5TaGltUGFyYW1zKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IHsgY3dkLCB0b29sIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBnZXRTaGltQ2FuZGlkYXRlcyh0b29sKTtcbiAgbGV0IGN1cnJlbnRGb2xkZXIgPSBnZXRTdGFydEZvbGRlcihjd2QpO1xuXG4gIHdoaWxlIChcbiAgICBjdXJyZW50Rm9sZGVyICE9PSBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkN1cnJlbnRGb2xkZXIgYXMgc3RyaW5nXG4gICAgJiYgY3VycmVudEZvbGRlciAhPT0gT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5Sb290Rm9sZGVyIGFzIHN0cmluZ1xuICApIHtcbiAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgICBjb25zdCBzaGltUGF0aCA9IGpvaW4oY3VycmVudEZvbGRlciwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5Ob2RlTW9kdWxlcywgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5CaW4sIGNhbmRpZGF0ZSk7XG4gICAgICBpZiAoZXhpc3RzU3luYyhzaGltUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHNoaW1QYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN1cnJlbnRGb2xkZXIgPSBkaXJuYW1lKGN1cnJlbnRGb2xkZXIpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBjb21tYW5kIHBhcnRzIHRoYXQgcnVuIGEgb25lLW9mZiB0b29sIHRocm91Z2ggdGhlIG1hbmFnZXIgdGhhdCBvd25zIHRoZSB0cmVlLlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB0byByZXNvbHZlIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgY29tbWFuZCBwYXJ0cywgZS5nLiBgWydidW4nLCAneCddYC4gVGhlIHRvb2wgbmFtZSBpcyBhcHBlbmRlZCBieSB0aGUgY2FsbGVyLlxuICovXG5mdW5jdGlvbiBnZXRQYWNrYWdlTWFuYWdlckV4ZWNDb21tYW5kKGN3ZD86IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGFja2FnZU1hbmFnZXIgPSBnZXRQYWNrYWdlTWFuYWdlcihjd2QpO1xuXG4gIHN3aXRjaCAocGFja2FnZU1hbmFnZXIpIHtcbiAgICBjYXNlIFBhY2thZ2VNYW5hZ2VyLkJ1bjoge1xuICAgICAgcmV0dXJuIFsnYnVuJywgJ3gnXTtcbiAgICB9XG4gICAgY2FzZSBQYWNrYWdlTWFuYWdlci5OcG06IHtcbiAgICAgIHJldHVybiBbJ25weCddO1xuICAgIH1cbiAgICBjYXNlIFBhY2thZ2VNYW5hZ2VyLlBucG06IHtcbiAgICAgIHJldHVybiBbJ3BucG0nLCAnZXhlYyddO1xuICAgIH1cbiAgICBjYXNlIFBhY2thZ2VNYW5hZ2VyLllhcm46IHtcbiAgICAgIHJldHVybiBbJ3lhcm4nLCAnZXhlYyddO1xuICAgIH1cbiAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gRXhoYXVzdGl2ZSBzd2l0Y2ggZ3VhcmQ7IGRlZmF1bHQgYnJhbmNoIGlzIHVucmVhY2hhYmxlLiAqL1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBhc3NlcnROZXZlcihwYWNrYWdlTWFuYWdlcik7XG4gICAgfVxuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgfVxufVxuXG4vKipcbiAqIExpc3RzIHRoZSBzaGltIGZpbGUgbmFtZXMgdG8gdHJ5IGZvciBhIHRvb2wsIG1vc3Qgc3BlY2lmaWMgZmlyc3QuXG4gKlxuICogT24gV2luZG93cyBvbmx5IHRoZSBleGVjdXRhYmxlIGZvcm1zIGFyZSB2aWFibGU6IG5wbSBhbmQgcG5wbSBhbHNvIHdyaXRlIGEgc2hpbSB3aXRoIG5vIGV4dGVuc2lvbiwgYnV0XG4gKiB0aGF0IG9uZSBpcyBhIGBzaGAgc2NyaXB0IHRoYXQgYGNtZC5leGVgIGNhbm5vdCBydW4sIHNvIGl0IG11c3QgbmV2ZXIgYmUgY2hvc2VuIHRoZXJlLlxuICpcbiAqIEBwYXJhbSB0b29sIC0gVGhlIG5hbWUgb2YgdGhlIGxvY2FsbHktaW5zdGFsbGVkIHRvb2wuXG4gKiBAcmV0dXJucyBUaGUgY2FuZGlkYXRlIGZpbGUgbmFtZXMsIGluIHRoZSBvcmRlciB0aGV5IHNob3VsZCBiZSB0cmllZC5cbiAqL1xuZnVuY3Rpb24gZ2V0U2hpbUNhbmRpZGF0ZXModG9vbDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBbdG9vbF07XG4gIH1cblxuICByZXR1cm4gW1xuICAgIGAke3Rvb2x9JHtPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkNvbW1hbmRFeHRlbnNpb259YCxcbiAgICBgJHt0b29sfSR7T2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5FeGVFeHRlbnNpb259YCxcbiAgICBgJHt0b29sfSR7T2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5CYXRFeHRlbnNpb259YFxuICBdO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBmb2xkZXIgdG8gc3RhcnQgYSBsb29rdXAgZnJvbSBcdTIwMTQgdGhlIHByb2plY3Qgcm9vdCB3aGVuIHRoZXJlIGlzIG9uZSwgdGhlIHdvcmtpbmcgZm9sZGVyXG4gKiBvdGhlcndpc2UuXG4gKlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHRvIHJlc29sdmUgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBmb2xkZXIgdG8gc3RhcnQgZnJvbS5cbiAqL1xuZnVuY3Rpb24gZ2V0U3RhcnRGb2xkZXIoY3dkPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldFJvb3RGb2xkZXIoY3dkKSA/PyB0b1Bvc2l4UGF0aChjd2QgPz8gcHJvY2Vzcy5jd2QoKSk7XG59XG5cbi8qKlxuICogTWFwcyB0aGUgYmFyZSBuYW1lIGEgbG9ja2ZpbGUgZGVjbGFyYXRpb24gb3IgYSB1c2VyIGFnZW50IHJlcG9ydHMgb250byB0aGUgcGFja2FnZSBtYW5hZ2VyIGl0IG5hbWVzLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHJlcG9ydGVkIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgbWF0Y2hpbmcgcGFja2FnZSBtYW5hZ2VyLCBvciBgbnVsbGAgZm9yIGEgcnVudGltZSB3ZSBkbyBub3QgaGFuZGxlLlxuICovXG5mdW5jdGlvbiBwYXJzZVBhY2thZ2VNYW5hZ2VyTmFtZShuYW1lOiBzdHJpbmcpOiBudWxsIHwgUGFja2FnZU1hbmFnZXIge1xuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlIFBhY2thZ2VNYW5hZ2VyLkJ1biBhcyBzdHJpbmc6IHtcbiAgICAgIHJldHVybiBQYWNrYWdlTWFuYWdlci5CdW47XG4gICAgfVxuICAgIGNhc2UgUGFja2FnZU1hbmFnZXIuTnBtIGFzIHN0cmluZzoge1xuICAgICAgcmV0dXJuIFBhY2thZ2VNYW5hZ2VyLk5wbTtcbiAgICB9XG4gICAgY2FzZSBQYWNrYWdlTWFuYWdlci5QbnBtIGFzIHN0cmluZzoge1xuICAgICAgcmV0dXJuIFBhY2thZ2VNYW5hZ2VyLlBucG07XG4gICAgfVxuICAgIGNhc2UgUGFja2FnZU1hbmFnZXIuWWFybiBhcyBzdHJpbmc6IHtcbiAgICAgIHJldHVybiBQYWNrYWdlTWFuYWdlci5ZYXJuO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQaWNrcyB0aGUgd2lubmVyIG91dCBvZiB0aGUgY29sbGVjdGVkIHNpZ25hbHMsIHBlciB0aGUgb3JkZXIgZG9jdW1lbnRlZCBvbiB7QGxpbmsgZ2V0UGFja2FnZU1hbmFnZXJ9LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHJlc29sdXRpb24uXG4gKiBAcmV0dXJucyBUaGUgcGFja2FnZSBtYW5hZ2VyIHRoYXQgb3ducyB0aGUgdHJlZS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVBhY2thZ2VNYW5hZ2VyKHBhcmFtczogUmVzb2x2ZVBhY2thZ2VNYW5hZ2VyUGFyYW1zKTogUGFja2FnZU1hbmFnZXIge1xuICBjb25zdCB7XG4gICAgY2xhaW1hbnRzLFxuICAgIGRlY2xhcmVkUGFja2FnZU1hbmFnZXJcbiAgfSA9IHBhcmFtcztcblxuICBpZiAoZGVjbGFyZWRQYWNrYWdlTWFuYWdlciAhPT0gbnVsbCkge1xuICAgIHJldHVybiBkZWNsYXJlZFBhY2thZ2VNYW5hZ2VyO1xuICB9XG5cbiAgY29uc3QgbG9ja2ZpbGVPd25lcnMgPSBbLi4uY2xhaW1hbnRzXTtcbiAgY29uc3QgW2ZpcnN0TG9ja2ZpbGVPd25lcl0gPSBsb2NrZmlsZU93bmVycztcblxuICBpZiAoZmlyc3RMb2NrZmlsZU93bmVyID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGV0ZWN0UGFja2FnZU1hbmFnZXJGcm9tVXNlckFnZW50KCkgPz8gUGFja2FnZU1hbmFnZXIuTnBtO1xuICB9XG5cbiAgaWYgKGxvY2tmaWxlT3duZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBmaXJzdExvY2tmaWxlT3duZXI7XG4gIH1cblxuICBjb25zdCBsYXVuY2hlZEJ5ID0gZGV0ZWN0UGFja2FnZU1hbmFnZXJGcm9tVXNlckFnZW50KCk7XG5cbiAgaWYgKGxhdW5jaGVkQnkgIT09IG51bGwgJiYgY2xhaW1hbnRzLmhhcyhsYXVuY2hlZEJ5KSkge1xuICAgIHJldHVybiBsYXVuY2hlZEJ5O1xuICB9XG5cbiAgcmV0dXJuIGZpcnN0TG9ja2ZpbGVPd25lcjtcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHRoYXQgc2V2ZXJhbCBwYWNrYWdlIG1hbmFnZXJzIGNsYWltIHRoZSBzYW1lIHRyZWUsIG5hbWluZyBlYWNoIGxvY2tmaWxlIGZvdW5kLCB3aGF0XG4gKiBgcGFja2FnZS5qc29uYCBkZWNsYXJlcywgYW5kIHdoaWNoIG1hbmFnZXIgd29uLlxuICpcbiAqIGBjb25zb2xlLndhcm5gIHJhdGhlciB0aGFuIGEgZGVidWcgY2hhbm5lbDogdGhpcyBydW5zIGluIHRoZSBidWlsZCdzIG93biB0ZXJtaW5hbCwgYW5kIGEgbWVzc2FnZSBub2JvZHlcbiAqIHNlZXMgdW5sZXNzIHRoZXkgYWxyZWFkeSBzdXNwZWN0IHRoZSBwcm9ibGVtIGxlYXZlcyB0aGUgZmFpbHVyZSBleGFjdGx5IGFzIHNpbGVudCBhcyBpdCB3YXMuIEVhY2hcbiAqIGRpc3RpbmN0IG1lc3NhZ2UgaXMgcHJpbnRlZCBvbmNlLCBiZWNhdXNlIHRoZSBtYW5hZ2VyIGlzIHJlc29sdmVkIG9uY2UgcGVyIHBhY2thZ2Utc2NyaXB0IGhvcCBhbmQgb25jZVxuICogcGVyIHRvb2wgaW52b2NhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSByZXBvcnQuXG4gKi9cbmZ1bmN0aW9uIHdhcm5BYm91dFNldmVyYWxDbGFpbWFudHMocGFyYW1zOiBXYXJuQWJvdXRTZXZlcmFsQ2xhaW1hbnRzUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBkZWNsYXJlZFBhY2thZ2VNYW5hZ2VyLFxuICAgIGxvY2tmaWxlcyxcbiAgICBwYWNrYWdlTWFuYWdlcixcbiAgICByb290XG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgbG9ja2ZpbGVOYW1lcyA9IGxvY2tmaWxlcy5tYXAoKGxvY2tmaWxlKSA9PiBsb2NrZmlsZS5maWxlTmFtZSkuam9pbignLCAnKTtcbiAgY29uc3QgYWR2aWNlID0gZGVjbGFyZWRQYWNrYWdlTWFuYWdlciA9PT0gbnVsbFxuICAgID8gJ0RlbGV0ZSB0aGUgc3RhbGUgbG9ja2ZpbGUsIG9yIGRlY2xhcmUgXCJwYWNrYWdlTWFuYWdlclwiIGluIHBhY2thZ2UuanNvbiwgdG8gc2V0dGxlIGl0LidcbiAgICA6ICdEZWxldGUgdGhlIHN0YWxlIGxvY2tmaWxlIHRvIHNldHRsZSBpdC4nO1xuICBjb25zdCBtZXNzYWdlID0gW1xuICAgIGBvYnNpZGlhbi1kZXYtdXRpbHM6IG1vcmUgdGhhbiBvbmUgcGFja2FnZSBtYW5hZ2VyIGNsYWltcyAke3Jvb3R9LmAsXG4gICAgYExvY2tmaWxlczogJHtsb2NrZmlsZU5hbWVzfS5gLFxuICAgIGBwYWNrYWdlLmpzb24gXCJwYWNrYWdlTWFuYWdlclwiOiAke2RlY2xhcmVkUGFja2FnZU1hbmFnZXIgPz8gJ25vdCBzZXQnfS5gLFxuICAgIGBVc2luZyAke3BhY2thZ2VNYW5hZ2VyfS5gLFxuICAgIGFkdmljZVxuICBdLmpvaW4oJyAnKTtcblxuICBpZiAocmVwb3J0ZWREaXNhZ3JlZW1lbnRzLmhhcyhtZXNzYWdlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJlcG9ydGVkRGlzYWdyZWVtZW50cy5hZGQobWVzc2FnZSk7XG4gIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQSxTQUFTLGtCQUFrQjtBQUMzQixPQUFPLGFBQWE7QUFFcEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyw4QkFBOEI7QUFDdkMsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxpQ0FBaUM7QUFDMUMsU0FBUyxxQkFBcUI7QUFLdkIsSUFBSyxpQkFBTCxrQkFBS0Esb0JBQUw7QUFJTCxFQUFBQSxnQkFBQSxTQUFNO0FBS04sRUFBQUEsZ0JBQUEsU0FBTTtBQUtOLEVBQUFBLGdCQUFBLFVBQU87QUFLUCxFQUFBQSxnQkFBQSxVQUFPO0FBbkJHLFNBQUFBO0FBQUEsR0FBQTtBQWdFTCxTQUFTLGtCQUFrQixLQUE4QjtBQUM5RCxRQUFNLE9BQU8sZUFBZSxHQUFHO0FBQy9CLFFBQU0seUJBQXlCLG9DQUFvQyxJQUFJO0FBQ3ZFLFFBQU0sWUFBWSxVQUFVLE9BQU8sQ0FBQyxhQUFhLFdBQVcsS0FBSyxNQUFNLFNBQVMsUUFBUSxDQUFDLENBQUM7QUFDMUYsUUFBTSxZQUFZLElBQUksSUFBSSxVQUFVLElBQUksQ0FBQyxhQUFhLFNBQVMsY0FBYyxDQUFDO0FBRTlFLE1BQUksMkJBQTJCLE1BQU07QUFDbkMsY0FBVSxJQUFJLHNCQUFzQjtBQUFBLEVBQ3RDO0FBRUEsUUFBTSxpQkFBaUIsc0JBQXNCO0FBQUEsSUFDM0M7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBRUQsTUFBSSxVQUFVLE9BQU8sR0FBRztBQUN0Qiw4QkFBMEI7QUFBQSxNQUN4QjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFFQSxTQUFPO0FBQ1Q7QUFRTyxTQUFTLDRCQUE0QixLQUF3QjtBQUNsRSxTQUFPLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxLQUFLO0FBQ3ZDO0FBYU8sU0FBUyxtQkFBbUIsUUFBNEM7QUFDN0UsUUFBTSxFQUFFLEtBQUssS0FBSyxJQUFJO0FBQ3RCLFFBQU0sV0FBVyxZQUFZLEVBQUUsS0FBSyxLQUFLLENBQUM7QUFFMUMsTUFBSSxhQUFhLE1BQU07QUFDckIsV0FBTyxDQUFDLFFBQVE7QUFBQSxFQUNsQjtBQUVBLFNBQU8sQ0FBQyxHQUFHLDZCQUE2QixHQUFHLEdBQUcsSUFBSTtBQUNwRDtBQVFBLE1BQU0sMkJBQTJCO0FBT2pDLE1BQU0sWUFBNkI7QUFBQSxFQUNqQyxFQUFFLFVBQVUsMEJBQTBCLFNBQVMsZ0JBQWdCLGdCQUFtQjtBQUFBLEVBQ2xGLEVBQUUsVUFBVSwwQkFBMEIsVUFBVSxnQkFBZ0IsZ0JBQW1CO0FBQUEsRUFDbkYsRUFBRSxVQUFVLDBCQUEwQixjQUFjLGdCQUFnQixrQkFBb0I7QUFBQSxFQUN4RixFQUFFLFVBQVUsMEJBQTBCLFVBQVUsZ0JBQWdCLGtCQUFvQjtBQUFBLEVBQ3BGLEVBQUUsVUFBVSwwQkFBMEIsaUJBQWlCLGdCQUFnQixnQkFBbUI7QUFDNUY7QUFLQSxNQUFNLDBCQUEwQjtBQU1oQyxNQUFNLHdCQUF3QixvQkFBSSxJQUFZO0FBa0Y5QyxTQUFTLG9DQUFvQyxNQUFxQztBQUNoRixRQUFNLGtCQUFrQixLQUFLLE1BQU0sMEJBQTBCLFdBQVc7QUFFeEUsTUFBSSxDQUFDLFdBQVcsZUFBZSxHQUFHO0FBQ2hDLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSTtBQUVKLE1BQUk7QUFDRixrQkFBYyxhQUEwQixlQUFlO0FBQUEsRUFDekQsUUFBUTtBQUNOLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxjQUFjLFlBQVk7QUFFaEMsTUFBSSxDQUFDLGFBQWE7QUFDaEIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFFBQVEseUJBQXlCLEtBQUssV0FBVztBQUV2RCxNQUFJLENBQUMsT0FBTztBQUNWLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyx3QkFBd0IsdUJBQXVCLE9BQU8sTUFBTSxDQUFDO0FBQ3RFO0FBU0EsU0FBUyxvQ0FBMkQ7QUFDbEUsUUFBTSxZQUFZLFFBQVEsSUFBSSx1QkFBdUI7QUFFckQsTUFBSSxDQUFDLFdBQVc7QUFDZCxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sUUFBUSx3QkFBd0IsS0FBSyxTQUFTO0FBRXBELE1BQUksQ0FBQyxPQUFPO0FBQ1YsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLHdCQUF3Qix1QkFBdUIsT0FBTyxNQUFNLENBQUM7QUFDdEU7QUFRQSxTQUFTLFlBQVksUUFBMEM7QUFDN0QsUUFBTSxFQUFFLEtBQUssS0FBSyxJQUFJO0FBQ3RCLFFBQU0sYUFBYSxrQkFBa0IsSUFBSTtBQUN6QyxNQUFJLGdCQUFnQixlQUFlLEdBQUc7QUFFdEMsU0FDRSxrQkFBa0IsMEJBQTBCLGlCQUN6QyxrQkFBa0IsMEJBQTBCLFlBQy9DO0FBQ0EsZUFBVyxhQUFhLFlBQVk7QUFDbEMsWUFBTSxXQUFXLEtBQUssZUFBZSwwQkFBMEIsYUFBYSwwQkFBMEIsS0FBSyxTQUFTO0FBQ3BILFVBQUksV0FBVyxRQUFRLEdBQUc7QUFDeEIsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBRUEsb0JBQWdCLFFBQVEsYUFBYTtBQUFBLEVBQ3ZDO0FBRUEsU0FBTztBQUNUO0FBUUEsU0FBUyw2QkFBNkIsS0FBd0I7QUFDNUQsUUFBTSxpQkFBaUIsa0JBQWtCLEdBQUc7QUFFNUMsVUFBUSxnQkFBZ0I7QUFBQSxJQUN0QixLQUFLLGlCQUFvQjtBQUN2QixhQUFPLENBQUMsT0FBTyxHQUFHO0FBQUEsSUFDcEI7QUFBQSxJQUNBLEtBQUssaUJBQW9CO0FBQ3ZCLGFBQU8sQ0FBQyxLQUFLO0FBQUEsSUFDZjtBQUFBLElBQ0EsS0FBSyxtQkFBcUI7QUFDeEIsYUFBTyxDQUFDLFFBQVEsTUFBTTtBQUFBLElBQ3hCO0FBQUEsSUFDQSxLQUFLLG1CQUFxQjtBQUN4QixhQUFPLENBQUMsUUFBUSxNQUFNO0FBQUEsSUFDeEI7QUFBQTtBQUFBLElBRUEsU0FBUztBQUNQLGFBQU8sWUFBWSxjQUFjO0FBQUEsSUFDbkM7QUFBQSxFQUVGO0FBQ0Y7QUFXQSxTQUFTLGtCQUFrQixNQUF3QjtBQUNqRCxNQUFJLFFBQVEsYUFBYSxTQUFTO0FBQ2hDLFdBQU8sQ0FBQyxJQUFJO0FBQUEsRUFDZDtBQUVBLFNBQU87QUFBQSxJQUNMLEdBQUcsSUFBSSxHQUFHLDBCQUEwQixnQkFBZ0I7QUFBQSxJQUNwRCxHQUFHLElBQUksR0FBRywwQkFBMEIsWUFBWTtBQUFBLElBQ2hELEdBQUcsSUFBSSxHQUFHLDBCQUEwQixZQUFZO0FBQUEsRUFDbEQ7QUFDRjtBQVNBLFNBQVMsZUFBZSxLQUFzQjtBQUM1QyxTQUFPLGNBQWMsR0FBRyxLQUFLLFlBQVksT0FBTyxRQUFRLElBQUksQ0FBQztBQUMvRDtBQVFBLFNBQVMsd0JBQXdCLE1BQXFDO0FBQ3BFLFVBQVEsTUFBTTtBQUFBLElBQ1osS0FBSyxpQkFBOEI7QUFDakMsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEtBQUssaUJBQThCO0FBQ2pDLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxLQUFLLG1CQUErQjtBQUNsQyxhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsS0FBSyxtQkFBK0I7QUFDbEMsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLFNBQVM7QUFDUCxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFDRjtBQVFBLFNBQVMsc0JBQXNCLFFBQXFEO0FBQ2xGLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUVKLE1BQUksMkJBQTJCLE1BQU07QUFDbkMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGlCQUFpQixDQUFDLEdBQUcsU0FBUztBQUNwQyxRQUFNLENBQUMsa0JBQWtCLElBQUk7QUFFN0IsTUFBSSx1QkFBdUIsUUFBVztBQUNwQyxXQUFPLGtDQUFrQyxLQUFLO0FBQUEsRUFDaEQ7QUFFQSxNQUFJLGVBQWUsV0FBVyxHQUFHO0FBQy9CLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxhQUFhLGtDQUFrQztBQUVyRCxNQUFJLGVBQWUsUUFBUSxVQUFVLElBQUksVUFBVSxHQUFHO0FBQ3BELFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTztBQUNUO0FBYUEsU0FBUywwQkFBMEIsUUFBK0M7QUFDaEYsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFFSixRQUFNLGdCQUFnQixVQUFVLElBQUksQ0FBQyxhQUFhLFNBQVMsUUFBUSxFQUFFLEtBQUssSUFBSTtBQUM5RSxRQUFNLFNBQVMsMkJBQTJCLE9BQ3RDLDBGQUNBO0FBQ0osUUFBTSxVQUFVO0FBQUEsSUFDZCw0REFBNEQsSUFBSTtBQUFBLElBQ2hFLGNBQWMsYUFBYTtBQUFBLElBQzNCLGtDQUFrQywwQkFBMEIsU0FBUztBQUFBLElBQ3JFLFNBQVMsY0FBYztBQUFBLElBQ3ZCO0FBQUEsRUFDRixFQUFFLEtBQUssR0FBRztBQUVWLE1BQUksc0JBQXNCLElBQUksT0FBTyxHQUFHO0FBQ3RDO0FBQUEsRUFDRjtBQUVBLHdCQUFzQixJQUFJLE9BQU87QUFDakMsVUFBUSxLQUFLLE9BQU87QUFDdEI7IiwKICAibmFtZXMiOiBbIlBhY2thZ2VNYW5hZ2VyIl0KfQo=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-dev-utils",
3
- "version": "98.0.0",
3
+ "version": "99.0.0",
4
4
  "description": "This is the collection of useful functions that you can use for your Obsidian plugin development.",
5
5
  "keywords": [
6
6
  "obsidian"