@mnaoumov/obsidian-lib 10.3.0 → 10.4.1

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 (51) hide show
  1. package/command-handlers/undo-bulk-operation-command-handler/package.json +6 -0
  2. package/components/bulk-operation-commit-component/package.json +6 -0
  3. package/dist/lib/cjs/__merged.cjs +42 -1
  4. package/dist/lib/cjs/__merged.d.cts +5 -0
  5. package/dist/lib/cjs/bulk-operation-progress.cjs +120 -0
  6. package/dist/lib/cjs/bulk-operation-progress.d.cts +33 -0
  7. package/dist/lib/cjs/bulk-operation.cjs +220 -0
  8. package/dist/lib/cjs/bulk-operation.d.cts +237 -0
  9. package/dist/lib/cjs/command-handlers/index.cjs +4 -1
  10. package/dist/lib/cjs/command-handlers/index.d.cts +1 -0
  11. package/dist/lib/cjs/command-handlers/undo-bulk-operation-command-handler.cjs +164 -0
  12. package/dist/lib/cjs/command-handlers/undo-bulk-operation-command-handler.d.cts +51 -0
  13. package/dist/lib/cjs/components/bulk-operation-commit-component.cjs +337 -0
  14. package/dist/lib/cjs/components/bulk-operation-commit-component.d.cts +152 -0
  15. package/dist/lib/cjs/components/index.cjs +4 -1
  16. package/dist/lib/cjs/components/index.d.cts +1 -0
  17. package/dist/lib/cjs/data-stores/local-data-store.cjs +2 -3
  18. package/dist/lib/cjs/desktop-bulk-operation-git.cjs +534 -0
  19. package/dist/lib/cjs/desktop-bulk-operation-git.d.cts +196 -0
  20. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  21. package/dist/lib/cjs/i18n/locales/en.cjs +10 -1
  22. package/dist/lib/cjs/i18n/locales/en.d.cts +9 -0
  23. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +9 -0
  24. package/dist/lib/cjs/index.cjs +10 -1
  25. package/dist/lib/cjs/index.d.cts +3 -0
  26. package/dist/lib/cjs/loop.cjs +3 -1
  27. package/dist/lib/esm/__merged.d.mts +5 -0
  28. package/dist/lib/esm/__merged.mjs +43 -1
  29. package/dist/lib/esm/bulk-operation-progress.d.mts +33 -0
  30. package/dist/lib/esm/bulk-operation-progress.mjs +31 -0
  31. package/dist/lib/esm/bulk-operation.d.mts +237 -0
  32. package/dist/lib/esm/bulk-operation.mjs +125 -0
  33. package/dist/lib/esm/command-handlers/index.d.mts +1 -0
  34. package/dist/lib/esm/command-handlers/index.mjs +3 -1
  35. package/dist/lib/esm/command-handlers/undo-bulk-operation-command-handler.d.mts +51 -0
  36. package/dist/lib/esm/command-handlers/undo-bulk-operation-command-handler.mjs +76 -0
  37. package/dist/lib/esm/components/bulk-operation-commit-component.d.mts +152 -0
  38. package/dist/lib/esm/components/bulk-operation-commit-component.mjs +245 -0
  39. package/dist/lib/esm/components/index.d.mts +1 -0
  40. package/dist/lib/esm/components/index.mjs +3 -1
  41. package/dist/lib/esm/data-stores/local-data-store.mjs +2 -3
  42. package/dist/lib/esm/desktop-bulk-operation-git.d.mts +196 -0
  43. package/dist/lib/esm/desktop-bulk-operation-git.mjs +463 -0
  44. package/dist/lib/esm/generated-during-build.mjs +1 -1
  45. package/dist/lib/esm/i18n/locales/en.d.mts +9 -0
  46. package/dist/lib/esm/i18n/locales/en.mjs +10 -1
  47. package/dist/lib/esm/i18n/locales/translations-map.d.mts +9 -0
  48. package/dist/lib/esm/index.d.mts +3 -0
  49. package/dist/lib/esm/index.mjs +7 -1
  50. package/dist/lib/esm/loop.mjs +3 -1
  51. package/package.json +2 -1
@@ -0,0 +1,152 @@
1
+ /// <reference path="../library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Contains class {@link BulkOperationCommitComponent} that wraps a plugin's bulk operations in git commits, so
6
+ * `git revert` undoes one.
7
+ */
8
+ import type { App } from 'obsidian' with { 'resolution-mode': 'import' };
9
+ import type { Promisable } from 'type-fest' with { 'resolution-mode': 'import' };
10
+ import type { PluginNoticeComponent } from './plugin-notice-component.cjs';
11
+ import { ComponentEx } from './component-ex.cjs';
12
+ /**
13
+ * Constructor parameters for {@link BulkOperationCommitComponent}.
14
+ */
15
+ export interface BulkOperationCommitComponentConstructorParams {
16
+ /**
17
+ * The Obsidian app instance.
18
+ */
19
+ readonly app: App;
20
+ /**
21
+ * Whether the plugin's opt-in setting for bulk-operation commits is on. Read on every operation, so a settings
22
+ * change applies to the next one.
23
+ */
24
+ readonly isEnabled: () => boolean;
25
+ /**
26
+ * The longest the settle step waits for the vault to go quiet after an operation.
27
+ *
28
+ * @default `60_000`
29
+ */
30
+ readonly maxSettleTimeInMilliseconds?: number;
31
+ /**
32
+ * The id of the plugin whose operations are committed.
33
+ */
34
+ readonly pluginId: string;
35
+ /**
36
+ * The notice component used to report problems.
37
+ */
38
+ readonly pluginNoticeComponent: PluginNoticeComponent;
39
+ /**
40
+ * How long the vault must go without a change after an operation before its commit is made.
41
+ *
42
+ * @default `2000`
43
+ */
44
+ readonly quietPeriodInMilliseconds?: number;
45
+ }
46
+ /**
47
+ * Parameters for {@link BulkOperationCommitComponent.runBulkOperation}.
48
+ *
49
+ * @typeParam T - The type of the operation's result.
50
+ */
51
+ export interface BulkOperationCommitComponentRunBulkOperationParams<T> {
52
+ /**
53
+ * Runs the bulk operation.
54
+ *
55
+ * @returns The operation's result.
56
+ */
57
+ readonly operation: () => Promisable<T>;
58
+ /**
59
+ * A one-line description of the operation, used in the commit subject, such as `Collect attachments in Notes`.
60
+ */
61
+ readonly summary: string;
62
+ }
63
+ /**
64
+ * Wraps a plugin's bulk operations in git commits, so `git revert` of one commit undoes one operation.
65
+ *
66
+ * @remarks
67
+ * Opt-in through the plugin's own setting, and active only on desktop, for a vault inside a git work tree. When it
68
+ * is not active, {@link runBulkOperation} simply runs the operation. When it is, the operation runs between a
69
+ * `chore: before OP<n>` commit of whatever was pending and an `OP<n>: <summary>` commit of what it changed, under
70
+ * a lease lock in the repo's git directory that the scheduled vault autocommit honors. The lock's heartbeat
71
+ * is refreshed by the operation's progress: every `loop()` item, or an explicit `reportBulkOperationProgress()`.
72
+ *
73
+ * On load it recovers a lock left stale by a crash, committing the leftovers as `OP<n> interrupted`.
74
+ *
75
+ * Pair it with `UndoBulkOperationCommandHandler`, which lists the plugin's operations and reverts one.
76
+ *
77
+ * @example
78
+ * ```ts
79
+ * this.bulkOperationCommitComponent = this.addChild(new BulkOperationCommitComponent({
80
+ * app: this.app,
81
+ * isEnabled: () => this.settings.shouldCommitBulkOperations,
82
+ * pluginId: this.manifest.id,
83
+ * pluginNoticeComponent: this.pluginNoticeComponent
84
+ * }));
85
+ *
86
+ * await this.bulkOperationCommitComponent.runBulkOperation({
87
+ * operation: () => collectAttachmentsInFolder(folder),
88
+ * summary: `Collect attachments in ${folder.path}`
89
+ * });
90
+ * ```
91
+ */
92
+ export declare class BulkOperationCommitComponent extends ComponentEx {
93
+ /**
94
+ * The Obsidian app instance.
95
+ */
96
+ protected readonly app: App;
97
+ /**
98
+ * Whether the plugin's opt-in setting is on.
99
+ */
100
+ protected readonly isEnabled: () => boolean;
101
+ /**
102
+ * The id of the plugin whose operations are committed.
103
+ */
104
+ protected readonly pluginId: string;
105
+ /**
106
+ * The notice component used to report problems.
107
+ */
108
+ protected readonly pluginNoticeComponent: PluginNoticeComponent;
109
+ private readonly maxSettleTimeInMilliseconds;
110
+ private readonly quietPeriodInMilliseconds;
111
+ private repoPromise;
112
+ /**
113
+ * Creates a new instance.
114
+ *
115
+ * @param params - The constructor parameters.
116
+ */
117
+ constructor(params: BulkOperationCommitComponentConstructorParams);
118
+ /**
119
+ * Checks whether bulk operations are currently committed: the setting is on, the app is desktop and the vault is
120
+ * inside a git work tree.
121
+ *
122
+ * @returns Whether bulk operations are committed.
123
+ */
124
+ checkActive(): Promise<boolean>;
125
+ /**
126
+ * Recovers a stale lock left by a crashed operation once the component loads.
127
+ */
128
+ onload(): void;
129
+ /**
130
+ * Runs a bulk operation, wrapped in git commits when bulk-operation commits are active.
131
+ *
132
+ * @typeParam T - The type of the operation's result.
133
+ * @param params - The parameters.
134
+ * @returns The operation's result.
135
+ */
136
+ runBulkOperation<T>(params: BulkOperationCommitComponentRunBulkOperationParams<T>): Promise<T>;
137
+ /**
138
+ * Lets the user pick one of the plugin's bulk operations and reverts its commit.
139
+ *
140
+ * A conflict is reported and left for the user to resolve; the revert is never aborted.
141
+ *
142
+ * @param operationId - The operation to undo, such as `OP12`. When omitted, the user picks from every operation
143
+ * of the plugin. When two commits share the id (two machines minted it before syncing), the user picks between
144
+ * them.
145
+ */
146
+ undoBulkOperation(operationId?: string): Promise<void>;
147
+ private findRepo;
148
+ private getRepo;
149
+ private recoverStaleLock;
150
+ private settle;
151
+ private waitForQuietVault;
152
+ }
@@ -101,6 +101,7 @@ __export(components_exports, {
101
101
  "all-windows-event-component": () => all_windows_event_component,
102
102
  "async-error-handler-component": () => async_error_handler_component,
103
103
  "async-events-component": () => async_events_component,
104
+ "bulk-operation-commit-component": () => bulk_operation_commit_component,
104
105
  "case-insensitive-file-index-component": () => case_insensitive_file_index_component,
105
106
  "component-ex": () => component_ex,
106
107
  "console-debug-component": () => console_debug_component,
@@ -134,6 +135,7 @@ var abort_signal_component = __toESM(((module) => module && module.__esModule &&
134
135
  var all_windows_event_component = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./all-windows-event-component.cjs')), 1);
135
136
  var async_error_handler_component = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./async-error-handler-component.cjs')), 1);
136
137
  var async_events_component = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./async-events-component.cjs')), 1);
138
+ var bulk_operation_commit_component = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./bulk-operation-commit-component.cjs')), 1);
137
139
  var case_insensitive_file_index_component = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./case-insensitive-file-index-component.cjs')), 1);
138
140
  var component_ex = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./component-ex.cjs')), 1);
139
141
  var console_debug_component = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./console-debug-component.cjs')), 1);
@@ -167,6 +169,7 @@ var templates_language_component = __toESM(((module) => module && module.__esMod
167
169
  "all-windows-event-component": null,
168
170
  "async-error-handler-component": null,
169
171
  "async-events-component": null,
172
+ "bulk-operation-commit-component": null,
170
173
  "case-insensitive-file-index-component": null,
171
174
  "component-ex": null,
172
175
  "console-debug-component": null,
@@ -195,4 +198,4 @@ var templates_language_component = __toESM(((module) => module && module.__esMod
195
198
  "syntax-highlighting-component": null,
196
199
  "templates-language-component": null
197
200
  });
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnYWJvcnQtc2lnbmFsLWNvbXBvbmVudCcgZnJvbSAnLi9hYm9ydC1zaWduYWwtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdhbGwtd2luZG93cy1ldmVudC1jb21wb25lbnQnIGZyb20gJy4vYWxsLXdpbmRvd3MtZXZlbnQtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdhc3luYy1lcnJvci1oYW5kbGVyLWNvbXBvbmVudCcgZnJvbSAnLi9hc3luYy1lcnJvci1oYW5kbGVyLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnYXN5bmMtZXZlbnRzLWNvbXBvbmVudCcgZnJvbSAnLi9hc3luYy1ldmVudHMtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdjYXNlLWluc2Vuc2l0aXZlLWZpbGUtaW5kZXgtY29tcG9uZW50JyBmcm9tICcuL2Nhc2UtaW5zZW5zaXRpdmUtZmlsZS1pbmRleC1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ2NvbXBvbmVudC1leCcgZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuZXhwb3J0ICogYXMgJ2NvbnNvbGUtZGVidWctY29tcG9uZW50JyBmcm9tICcuL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdjb3JlLXBsdWdpbi10b2dnbGUtY29tcG9uZW50JyBmcm9tICcuL2NvcmUtcGx1Z2luLXRvZ2dsZS1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ2Rpc3Bvc2FibGUtY29tcG9uZW50JyBmcm9tICcuL2Rpc3Bvc2FibGUtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdlbWJlZC1leHRlbnNpb25zLWNvbXBvbmVudCcgZnJvbSAnLi9lbWJlZC1leHRlbnNpb25zLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnZmlsZS1leHBsb3Jlci1yb290LW1lbnUtY29tcG9uZW50JyBmcm9tICcuL2ZpbGUtZXhwbG9yZXItcm9vdC1tZW51LWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnZ2VuZXJhdGUtbWFya2Rvd24tbGluay1kZWZhdWx0LXBhcmFtcy1jb21wb25lbnQnIGZyb20gJy4vZ2VuZXJhdGUtbWFya2Rvd24tbGluay1kZWZhdWx0LXBhcmFtcy1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ2luY3JlbWVudGFsLWZpbGUtaW5kZXgtY29tcG9uZW50JyBmcm9tICcuL2luY3JlbWVudGFsLWZpbGUtaW5kZXgtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdsYXlvdXQtcmVhZHktY29tcG9uZW50JyBmcm9tICcuL2xheW91dC1yZWFkeS1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ21lbnUtZXZlbnQtcmVnaXN0cmFyLWNvbXBvbmVudCcgZnJvbSAnLi9tZW51LWV2ZW50LXJlZ2lzdHJhci1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ21vbmtleS1hcm91bmQtY29tcG9uZW50JyBmcm9tICcuL21vbmtleS1hcm91bmQtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdub3RlYm9vay1uYXZpZ2F0b3ItbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50JyBmcm9tICcuL25vdGVib29rLW5hdmlnYXRvci1tZW51LWV2ZW50LXJlZ2lzdHJhci1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1jb250ZXh0LWNvbXBvbmVudCcgZnJvbSAnLi9wbHVnaW4tY29udGV4dC1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1nYXRlLWNvbXBvbmVudCcgZnJvbSAnLi9wbHVnaW4tZ2F0ZS1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1ub3RpY2UtY29tcG9uZW50JyBmcm9tICcuL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tc2V0dGluZ3MtY29tcG9uZW50JyBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1zZXR0aW5ncy10YWItY29tcG9uZW50JyBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy10YWItY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tc3VnZ2VzdGlvbi1jb21wb25lbnQnIGZyb20gJy4vcGx1Z2luLXN1Z2dlc3Rpb24tY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdwb2ludGVyLXBvc2l0aW9uLWNvbXBvbmVudCcgZnJvbSAnLi9wb2ludGVyLXBvc2l0aW9uLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAncmVnaXN0cnktY29tcG9uZW50JyBmcm9tICcuL3JlZ2lzdHJ5LWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAncmVsZWFzZS1ub3Rlcy1jb21wb25lbnQnIGZyb20gJy4vcmVsZWFzZS1ub3Rlcy1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3JlbmFtZS1kZWxldGUtaGFuZGxlci1jb21wb25lbnQnIGZyb20gJy4vcmVuYW1lLWRlbGV0ZS1oYW5kbGVyLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAncm1kaXItZ3VhcmQtY29tcG9uZW50JyBmcm9tICcuL3JtZGlyLWd1YXJkLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnc2V0dGluZ3MtbWlncmF0aW9uLWNvbXBvbmVudCcgZnJvbSAnLi9zZXR0aW5ncy1taWdyYXRpb24tY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdzeW50YXgtaGlnaGxpZ2h0aW5nLWNvbXBvbmVudCcgZnJvbSAnLi9zeW50YXgtaGlnaGxpZ2h0aW5nLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAndGVtcGxhdGVzLWxhbmd1YWdlLWNvbXBvbmVudCcgZnJvbSAnLi90ZW1wbGF0ZXMtbGFuZ3VhZ2UtY29tcG9uZW50LnRzJztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQSxrQ0FBQUE7QUFBQSxFQUFBLHFDQUFBQztBQUFBLEVBQUEsdUNBQUFDO0FBQUEsRUFBQSxnQ0FBQUM7QUFBQSxFQUFBLCtDQUFBQztBQUFBLEVBQUEsc0JBQUFDO0FBQUEsRUFBQSxpQ0FBQUM7QUFBQSxFQUFBLHNDQUFBQztBQUFBLEVBQUEsOEJBQUFDO0FBQUEsRUFBQSxvQ0FBQUM7QUFBQSxFQUFBLDJDQUFBQztBQUFBLEVBQUEseURBQUFDO0FBQUEsRUFBQSwwQ0FBQUM7QUFBQSxFQUFBLGdDQUFBQztBQUFBLEVBQUEsd0NBQUFDO0FBQUEsRUFBQSxpQ0FBQUM7QUFBQSxFQUFBLDJEQUFBQztBQUFBLEVBQUEsa0NBQUFDO0FBQUEsRUFBQSwrQkFBQUM7QUFBQSxFQUFBLGlDQUFBQztBQUFBLEVBQUEsbUNBQUFDO0FBQUEsRUFBQSx1Q0FBQUM7QUFBQSxFQUFBLHFDQUFBQztBQUFBLEVBQUEsb0NBQUFDO0FBQUEsRUFBQSw0QkFBQUM7QUFBQSxFQUFBLGlDQUFBQztBQUFBLEVBQUEseUNBQUFDO0FBQUEsRUFBQSwrQkFBQUM7QUFBQSxFQUFBLHNDQUFBQztBQUFBLEVBQUEsdUNBQUFDO0FBQUEsRUFBQSxzQ0FBQUM7QUFBQTtBQUFBO0FBRUEsSUFBQTlCLHlCQUEwQztBQUMxQyxJQUFBQyw4QkFBK0M7QUFDL0MsSUFBQUMsZ0NBQWlEO0FBQ2pELElBQUFDLHlCQUEwQztBQUMxQyxJQUFBQyx3Q0FBeUQ7QUFDekQsSUFBQUMsZUFBZ0M7QUFDaEMsSUFBQUMsMEJBQTJDO0FBQzNDLElBQUFDLCtCQUFnRDtBQUNoRCxJQUFBQyx1QkFBd0M7QUFDeEMsSUFBQUMsNkJBQThDO0FBQzlDLElBQUFDLG9DQUFxRDtBQUNyRCxJQUFBQyxrREFBbUU7QUFDbkUsSUFBQUMsbUNBQW9EO0FBQ3BELElBQUFDLHlCQUEwQztBQUMxQyxJQUFBQyxpQ0FBa0Q7QUFDbEQsSUFBQUMsMEJBQTJDO0FBQzNDLElBQUFDLG9EQUFxRTtBQUNyRSxJQUFBQywyQkFBNEM7QUFDNUMsSUFBQUMsd0JBQXlDO0FBQ3pDLElBQUFDLDBCQUEyQztBQUMzQyxJQUFBQyw0QkFBNkM7QUFDN0MsSUFBQUMsZ0NBQWlEO0FBQ2pELElBQUFDLDhCQUErQztBQUMvQyxJQUFBQyw2QkFBOEM7QUFDOUMsSUFBQUMscUJBQXNDO0FBQ3RDLElBQUFDLDBCQUEyQztBQUMzQyxJQUFBQyxrQ0FBbUQ7QUFDbkQsSUFBQUMsd0JBQXlDO0FBQ3pDLElBQUFDLCtCQUFnRDtBQUNoRCxJQUFBQyxnQ0FBaUQ7QUFDakQsSUFBQUMsK0JBQWdEOyIsIm5hbWVzIjpbImFib3J0LXNpZ25hbC1jb21wb25lbnQiLCJhbGwtd2luZG93cy1ldmVudC1jb21wb25lbnQiLCJhc3luYy1lcnJvci1oYW5kbGVyLWNvbXBvbmVudCIsImFzeW5jLWV2ZW50cy1jb21wb25lbnQiLCJjYXNlLWluc2Vuc2l0aXZlLWZpbGUtaW5kZXgtY29tcG9uZW50IiwiY29tcG9uZW50LWV4IiwiY29uc29sZS1kZWJ1Zy1jb21wb25lbnQiLCJjb3JlLXBsdWdpbi10b2dnbGUtY29tcG9uZW50IiwiZGlzcG9zYWJsZS1jb21wb25lbnQiLCJlbWJlZC1leHRlbnNpb25zLWNvbXBvbmVudCIsImZpbGUtZXhwbG9yZXItcm9vdC1tZW51LWNvbXBvbmVudCIsImdlbmVyYXRlLW1hcmtkb3duLWxpbmstZGVmYXVsdC1wYXJhbXMtY29tcG9uZW50IiwiaW5jcmVtZW50YWwtZmlsZS1pbmRleC1jb21wb25lbnQiLCJsYXlvdXQtcmVhZHktY29tcG9uZW50IiwibWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50IiwibW9ua2V5LWFyb3VuZC1jb21wb25lbnQiLCJub3RlYm9vay1uYXZpZ2F0b3ItbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50IiwicGx1Z2luLWNvbnRleHQtY29tcG9uZW50IiwicGx1Z2luLWdhdGUtY29tcG9uZW50IiwicGx1Z2luLW5vdGljZS1jb21wb25lbnQiLCJwbHVnaW4tc2V0dGluZ3MtY29tcG9uZW50IiwicGx1Z2luLXNldHRpbmdzLXRhYi1jb21wb25lbnQiLCJwbHVnaW4tc3VnZ2VzdGlvbi1jb21wb25lbnQiLCJwb2ludGVyLXBvc2l0aW9uLWNvbXBvbmVudCIsInJlZ2lzdHJ5LWNvbXBvbmVudCIsInJlbGVhc2Utbm90ZXMtY29tcG9uZW50IiwicmVuYW1lLWRlbGV0ZS1oYW5kbGVyLWNvbXBvbmVudCIsInJtZGlyLWd1YXJkLWNvbXBvbmVudCIsInNldHRpbmdzLW1pZ3JhdGlvbi1jb21wb25lbnQiLCJzeW50YXgtaGlnaGxpZ2h0aW5nLWNvbXBvbmVudCIsInRlbXBsYXRlcy1sYW5ndWFnZS1jb21wb25lbnQiXX0=
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnYWJvcnQtc2lnbmFsLWNvbXBvbmVudCcgZnJvbSAnLi9hYm9ydC1zaWduYWwtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdhbGwtd2luZG93cy1ldmVudC1jb21wb25lbnQnIGZyb20gJy4vYWxsLXdpbmRvd3MtZXZlbnQtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdhc3luYy1lcnJvci1oYW5kbGVyLWNvbXBvbmVudCcgZnJvbSAnLi9hc3luYy1lcnJvci1oYW5kbGVyLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnYXN5bmMtZXZlbnRzLWNvbXBvbmVudCcgZnJvbSAnLi9hc3luYy1ldmVudHMtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdidWxrLW9wZXJhdGlvbi1jb21taXQtY29tcG9uZW50JyBmcm9tICcuL2J1bGstb3BlcmF0aW9uLWNvbW1pdC1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ2Nhc2UtaW5zZW5zaXRpdmUtZmlsZS1pbmRleC1jb21wb25lbnQnIGZyb20gJy4vY2FzZS1pbnNlbnNpdGl2ZS1maWxlLWluZGV4LWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnY29tcG9uZW50LWV4JyBmcm9tICcuL2NvbXBvbmVudC1leC50cyc7XG5leHBvcnQgKiBhcyAnY29uc29sZS1kZWJ1Zy1jb21wb25lbnQnIGZyb20gJy4vY29uc29sZS1kZWJ1Zy1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ2NvcmUtcGx1Z2luLXRvZ2dsZS1jb21wb25lbnQnIGZyb20gJy4vY29yZS1wbHVnaW4tdG9nZ2xlLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnZGlzcG9zYWJsZS1jb21wb25lbnQnIGZyb20gJy4vZGlzcG9zYWJsZS1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ2VtYmVkLWV4dGVuc2lvbnMtY29tcG9uZW50JyBmcm9tICcuL2VtYmVkLWV4dGVuc2lvbnMtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdmaWxlLWV4cGxvcmVyLXJvb3QtbWVudS1jb21wb25lbnQnIGZyb20gJy4vZmlsZS1leHBsb3Jlci1yb290LW1lbnUtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdnZW5lcmF0ZS1tYXJrZG93bi1saW5rLWRlZmF1bHQtcGFyYW1zLWNvbXBvbmVudCcgZnJvbSAnLi9nZW5lcmF0ZS1tYXJrZG93bi1saW5rLWRlZmF1bHQtcGFyYW1zLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnaW5jcmVtZW50YWwtZmlsZS1pbmRleC1jb21wb25lbnQnIGZyb20gJy4vaW5jcmVtZW50YWwtZmlsZS1pbmRleC1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ2xheW91dC1yZWFkeS1jb21wb25lbnQnIGZyb20gJy4vbGF5b3V0LXJlYWR5LWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50JyBmcm9tICcuL21lbnUtZXZlbnQtcmVnaXN0cmFyLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnbW9ua2V5LWFyb3VuZC1jb21wb25lbnQnIGZyb20gJy4vbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ25vdGVib29rLW5hdmlnYXRvci1tZW51LWV2ZW50LXJlZ2lzdHJhci1jb21wb25lbnQnIGZyb20gJy4vbm90ZWJvb2stbmF2aWdhdG9yLW1lbnUtZXZlbnQtcmVnaXN0cmFyLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAncGx1Z2luLWNvbnRleHQtY29tcG9uZW50JyBmcm9tICcuL3BsdWdpbi1jb250ZXh0LWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAncGx1Z2luLWdhdGUtY29tcG9uZW50JyBmcm9tICcuL3BsdWdpbi1nYXRlLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAncGx1Z2luLW5vdGljZS1jb21wb25lbnQnIGZyb20gJy4vcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQnIGZyb20gJy4vcGx1Z2luLXNldHRpbmdzLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAncGx1Z2luLXNldHRpbmdzLXRhYi1jb21wb25lbnQnIGZyb20gJy4vcGx1Z2luLXNldHRpbmdzLXRhYi1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1zdWdnZXN0aW9uLWNvbXBvbmVudCcgZnJvbSAnLi9wbHVnaW4tc3VnZ2VzdGlvbi1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BvaW50ZXItcG9zaXRpb24tY29tcG9uZW50JyBmcm9tICcuL3BvaW50ZXItcG9zaXRpb24tY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdyZWdpc3RyeS1jb21wb25lbnQnIGZyb20gJy4vcmVnaXN0cnktY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdyZWxlYXNlLW5vdGVzLWNvbXBvbmVudCcgZnJvbSAnLi9yZWxlYXNlLW5vdGVzLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAncmVuYW1lLWRlbGV0ZS1oYW5kbGVyLWNvbXBvbmVudCcgZnJvbSAnLi9yZW5hbWUtZGVsZXRlLWhhbmRsZXItY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdybWRpci1ndWFyZC1jb21wb25lbnQnIGZyb20gJy4vcm1kaXItZ3VhcmQtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdzZXR0aW5ncy1taWdyYXRpb24tY29tcG9uZW50JyBmcm9tICcuL3NldHRpbmdzLW1pZ3JhdGlvbi1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3N5bnRheC1oaWdobGlnaHRpbmctY29tcG9uZW50JyBmcm9tICcuL3N5bnRheC1oaWdobGlnaHRpbmctY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICd0ZW1wbGF0ZXMtbGFuZ3VhZ2UtY29tcG9uZW50JyBmcm9tICcuL3RlbXBsYXRlcy1sYW5ndWFnZS1jb21wb25lbnQudHMnO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBLGtDQUFBQTtBQUFBLEVBQUEscUNBQUFDO0FBQUEsRUFBQSx1Q0FBQUM7QUFBQSxFQUFBLGdDQUFBQztBQUFBLEVBQUEseUNBQUFDO0FBQUEsRUFBQSwrQ0FBQUM7QUFBQSxFQUFBLHNCQUFBQztBQUFBLEVBQUEsaUNBQUFDO0FBQUEsRUFBQSxzQ0FBQUM7QUFBQSxFQUFBLDhCQUFBQztBQUFBLEVBQUEsb0NBQUFDO0FBQUEsRUFBQSwyQ0FBQUM7QUFBQSxFQUFBLHlEQUFBQztBQUFBLEVBQUEsMENBQUFDO0FBQUEsRUFBQSxnQ0FBQUM7QUFBQSxFQUFBLHdDQUFBQztBQUFBLEVBQUEsaUNBQUFDO0FBQUEsRUFBQSwyREFBQUM7QUFBQSxFQUFBLGtDQUFBQztBQUFBLEVBQUEsK0JBQUFDO0FBQUEsRUFBQSxpQ0FBQUM7QUFBQSxFQUFBLG1DQUFBQztBQUFBLEVBQUEsdUNBQUFDO0FBQUEsRUFBQSxxQ0FBQUM7QUFBQSxFQUFBLG9DQUFBQztBQUFBLEVBQUEsNEJBQUFDO0FBQUEsRUFBQSxpQ0FBQUM7QUFBQSxFQUFBLHlDQUFBQztBQUFBLEVBQUEsK0JBQUFDO0FBQUEsRUFBQSxzQ0FBQUM7QUFBQSxFQUFBLHVDQUFBQztBQUFBLEVBQUEsc0NBQUFDO0FBQUE7QUFBQTtBQUVBLElBQUEvQix5QkFBMEM7QUFDMUMsSUFBQUMsOEJBQStDO0FBQy9DLElBQUFDLGdDQUFpRDtBQUNqRCxJQUFBQyx5QkFBMEM7QUFDMUMsSUFBQUMsa0NBQW1EO0FBQ25ELElBQUFDLHdDQUF5RDtBQUN6RCxJQUFBQyxlQUFnQztBQUNoQyxJQUFBQywwQkFBMkM7QUFDM0MsSUFBQUMsK0JBQWdEO0FBQ2hELElBQUFDLHVCQUF3QztBQUN4QyxJQUFBQyw2QkFBOEM7QUFDOUMsSUFBQUMsb0NBQXFEO0FBQ3JELElBQUFDLGtEQUFtRTtBQUNuRSxJQUFBQyxtQ0FBb0Q7QUFDcEQsSUFBQUMseUJBQTBDO0FBQzFDLElBQUFDLGlDQUFrRDtBQUNsRCxJQUFBQywwQkFBMkM7QUFDM0MsSUFBQUMsb0RBQXFFO0FBQ3JFLElBQUFDLDJCQUE0QztBQUM1QyxJQUFBQyx3QkFBeUM7QUFDekMsSUFBQUMsMEJBQTJDO0FBQzNDLElBQUFDLDRCQUE2QztBQUM3QyxJQUFBQyxnQ0FBaUQ7QUFDakQsSUFBQUMsOEJBQStDO0FBQy9DLElBQUFDLDZCQUE4QztBQUM5QyxJQUFBQyxxQkFBc0M7QUFDdEMsSUFBQUMsMEJBQTJDO0FBQzNDLElBQUFDLGtDQUFtRDtBQUNuRCxJQUFBQyx3QkFBeUM7QUFDekMsSUFBQUMsK0JBQWdEO0FBQ2hELElBQUFDLGdDQUFpRDtBQUNqRCxJQUFBQywrQkFBZ0Q7IiwibmFtZXMiOlsiYWJvcnQtc2lnbmFsLWNvbXBvbmVudCIsImFsbC13aW5kb3dzLWV2ZW50LWNvbXBvbmVudCIsImFzeW5jLWVycm9yLWhhbmRsZXItY29tcG9uZW50IiwiYXN5bmMtZXZlbnRzLWNvbXBvbmVudCIsImJ1bGstb3BlcmF0aW9uLWNvbW1pdC1jb21wb25lbnQiLCJjYXNlLWluc2Vuc2l0aXZlLWZpbGUtaW5kZXgtY29tcG9uZW50IiwiY29tcG9uZW50LWV4IiwiY29uc29sZS1kZWJ1Zy1jb21wb25lbnQiLCJjb3JlLXBsdWdpbi10b2dnbGUtY29tcG9uZW50IiwiZGlzcG9zYWJsZS1jb21wb25lbnQiLCJlbWJlZC1leHRlbnNpb25zLWNvbXBvbmVudCIsImZpbGUtZXhwbG9yZXItcm9vdC1tZW51LWNvbXBvbmVudCIsImdlbmVyYXRlLW1hcmtkb3duLWxpbmstZGVmYXVsdC1wYXJhbXMtY29tcG9uZW50IiwiaW5jcmVtZW50YWwtZmlsZS1pbmRleC1jb21wb25lbnQiLCJsYXlvdXQtcmVhZHktY29tcG9uZW50IiwibWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50IiwibW9ua2V5LWFyb3VuZC1jb21wb25lbnQiLCJub3RlYm9vay1uYXZpZ2F0b3ItbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50IiwicGx1Z2luLWNvbnRleHQtY29tcG9uZW50IiwicGx1Z2luLWdhdGUtY29tcG9uZW50IiwicGx1Z2luLW5vdGljZS1jb21wb25lbnQiLCJwbHVnaW4tc2V0dGluZ3MtY29tcG9uZW50IiwicGx1Z2luLXNldHRpbmdzLXRhYi1jb21wb25lbnQiLCJwbHVnaW4tc3VnZ2VzdGlvbi1jb21wb25lbnQiLCJwb2ludGVyLXBvc2l0aW9uLWNvbXBvbmVudCIsInJlZ2lzdHJ5LWNvbXBvbmVudCIsInJlbGVhc2Utbm90ZXMtY29tcG9uZW50IiwicmVuYW1lLWRlbGV0ZS1oYW5kbGVyLWNvbXBvbmVudCIsInJtZGlyLWd1YXJkLWNvbXBvbmVudCIsInNldHRpbmdzLW1pZ3JhdGlvbi1jb21wb25lbnQiLCJzeW50YXgtaGlnaGxpZ2h0aW5nLWNvbXBvbmVudCIsInRlbXBsYXRlcy1sYW5ndWFnZS1jb21wb25lbnQiXX0=
@@ -3,6 +3,7 @@ export * as 'abort-signal-component' from './abort-signal-component.cjs';
3
3
  export * as 'all-windows-event-component' from './all-windows-event-component.cjs';
4
4
  export * as 'async-error-handler-component' from './async-error-handler-component.cjs';
5
5
  export * as 'async-events-component' from './async-events-component.cjs';
6
+ export * as 'bulk-operation-commit-component' from './bulk-operation-commit-component.cjs';
6
7
  export * as 'case-insensitive-file-index-component' from './case-insensitive-file-index-component.cjs';
7
8
  export * as 'component-ex' from './component-ex.cjs';
8
9
  export * as 'console-debug-component' from './console-debug-component.cjs';
@@ -151,7 +151,6 @@ class LocalDataStore {
151
151
  for (const [key, value] of params.entries) {
152
152
  store.put(value, key);
153
153
  }
154
- return store.count();
155
154
  });
156
155
  }
157
156
  /**
@@ -246,7 +245,7 @@ class LocalDataStore {
246
245
  return;
247
246
  }
248
247
  transaction.oncomplete = () => {
249
- resolve(request.result);
248
+ resolve(request?.result);
250
249
  };
251
250
  transaction.addEventListener("abort", () => {
252
251
  reject(new Error("Local data-store transaction aborted", { cause: transaction.error }));
@@ -258,4 +257,4 @@ class LocalDataStore {
258
257
  0 && (module.exports = {
259
258
  LocalDataStore
260
259
  });
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0b3Jlcy9sb2NhbC1kYXRhLXN0b3JlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG4vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyAtLSBUaGVzZSBhcmUgT2JzaWRpYW4gcmVuZGVyZXIgV2ViIEFQSXMsIG5vdCBOb2RlIGJ1aWx0aW5zLiAqL1xuLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlY29yZC1iYXNlZCBkZXZpY2UtbG9jYWwgcGVyc2lzdGVuY2UsIGlzb2xhdGVkIGJ5IHZhdWx0LCBwbHVnaW4gYW5kIHN0b3JlLlxuICovXG5cbi8qKlxuICogQXRvbWljIG11dGF0aW9ucyBvZiBhIGxvY2FsIHJlY29yZCBzdG9yZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbERhdGFTdG9yZUNvbW1pdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBLZXkvdmFsdWUgcGFpcnMgdG8gd3JpdGUuXG4gICAqL1xuICByZWFkb25seSBlbnRyaWVzOiByZWFkb25seSAocmVhZG9ubHkgW3N0cmluZywgdW5rbm93bl0pW107XG4gIC8qKlxuICAgKiBLZXlzIHJlbW92ZWQgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gYXMgdGhlIHdyaXRlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYFtdYFxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZlZEtleXM/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIERlbGV0ZXMgZXZlcnkgcmVjb3JkIG9mIHRoaXMgc3RvcmUgZmlyc3QsIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIGFzIHRoZSB3cml0ZXMuXG4gICAqXG4gICAqIEVpdGhlciB0aGUgc3RvcmUgaXMgcmVwbGFjZWQgYnkgYGVudHJpZXNgIGFzIGEgd2hvbGUsIG9yLCB3aGVuIHRoZSB0cmFuc2FjdGlvbiBmYWlscywgZXZlcnkgcHJldmlvdXMgcmVjb3JkIHN1cnZpdmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRDbGVhcj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Igb3BlbmluZyBhIGxvY2FsIHN0b3JlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsRGF0YVN0b3JlT3BlblBhcmFtcyB7XG4gIC8qKlxuICAgKiBJbmRleGVkREIgaW1wbGVtZW50YXRpb24sIGluamVjdGFibGUgZm9yIHRlc3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgZmFjdG9yeT86IElEQkZhY3Rvcnk7XG4gIC8qKlxuICAgKiBQbHVnaW4gbWFuaWZlc3QgaWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuICAvKipcbiAgICogU3RvcmUgbmFtZSBhbmQgc2NoZW1hIHZlcnNpb24gY2hvc2VuIGJ5IHRoZSBjb25zdW1lci5cbiAgICovXG4gIHJlYWRvbmx5IHN0b3JlSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFN0YWJsZSwgZGV2aWNlLWxvY2FsIHZhdWx0IGlkZW50aXR5OyBuZXZlciB0aGUgdmF1bHQgZGlzcGxheSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHRJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbG9jYWwgc3RvcmUgaG9sZHMgc3RydWN0dXJlZC1jbG9uZWFibGUgdmFsdWVzOyBpdCBuZXZlciB3cml0ZXMgdG8gdGhlIHZhdWx0LlxuICovXG5leHBvcnQgY2xhc3MgTG9jYWxEYXRhU3RvcmUge1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGF0YWJhc2U6IElEQkRhdGFiYXNlKSB7fVxuXG4gIC8qKlxuICAgKiBPcGVucyBhbiBpc29sYXRlZCBkYXRhYmFzZS4gV3JpdGVzIHJlc29sdmUgb25seSBvbmNlIHRoZWlyIHRyYW5zYWN0aW9uIGNvbW1pdHMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBTdG9yZSBpZGVudGl0eSBhbmQgb3B0aW9uYWwgSW5kZXhlZERCIGltcGxlbWVudGF0aW9uLlxuICAgKiBAcmV0dXJucyBUaGUgY29ubmVjdGVkIHN0b3JlOyBjbG9zZSBpdCB3aGVuIGl0cyBvd25lciB1bmxvYWRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyBvcGVuKHBhcmFtczogTG9jYWxEYXRhU3RvcmVPcGVuUGFyYW1zKTogUHJvbWlzZTxMb2NhbERhdGFTdG9yZT4ge1xuICAgIGNvbnN0IG5hbWUgPSBgb2JzaWRpYW4tbGliOiR7SlNPTi5zdHJpbmdpZnkoW3BhcmFtcy52YXVsdElkLCBwYXJhbXMucGx1Z2luSWQsIHBhcmFtcy5zdG9yZUlkXSl9YDtcbiAgICBjb25zdCByZXF1ZXN0ID0gKHBhcmFtcy5mYWN0b3J5ID8/IGluZGV4ZWREQikub3BlbihuYW1lLCAxKTtcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHJlcXVlc3QucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKCdyZWNvcmRzJyk7XG4gICAgICB9O1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsICgpOiB2b2lkID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ291bGQgbm90IG9wZW4gbG9jYWwgZGF0YSBzdG9yZScsIHsgY2F1c2U6IHJlcXVlc3QuZXJyb3IgfSkpO1xuICAgICAgfSk7XG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgZGF0YWJhc2UgPSByZXF1ZXN0LnJlc3VsdDtcbiAgICAgICAgZGF0YWJhc2Uub252ZXJzaW9uY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIGRhdGFiYXNlLmNsb3NlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHJlc29sdmUobmV3IExvY2FsRGF0YVN0b3JlKGRhdGFiYXNlKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgZXZlcnkgcmVjb3JkIGluIHRoaXMgc3RvcmUgb25seS5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgY29tbWl0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNsZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucnVuKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHN0b3JlLmNsZWFyKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGlzIGNvbm5lY3Rpb24gd2l0aG91dCBkZWxldGluZyBpdHMgcmVjb3Jkcy5cbiAgICovXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFiYXNlLmNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tbWl0cyBzZXZlcmFsIHJlY29yZCBjaGFuZ2VzIGF0b21pY2FsbHkgd2l0aG91dCBzZXJpYWxpemluZyB0aGUgcmVzdCBvZiB0aGUgZGF0YWJhc2UuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBXcml0ZXMgYW5kIGRlbGV0aW9ucyBpbiBvbmUgdHJhbnNhY3Rpb24sIG9wdGlvbmFsbHkgYWZ0ZXIgY2xlYXJpbmcgdGhlIHN0b3JlLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmx5IGFmdGVyIGFsbCBjaGFuZ2VzIGNvbW1pdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb21taXQocGFyYW1zOiBMb2NhbERhdGFTdG9yZUNvbW1pdFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucnVuKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHtcbiAgICAgIGlmIChwYXJhbXMuc2hvdWxkQ2xlYXIpIHtcbiAgICAgICAgc3RvcmUuY2xlYXIoKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIHBhcmFtcy5yZW1vdmVkS2V5cyA/PyBbXSkge1xuICAgICAgICBzdG9yZS5kZWxldGUoa2V5KTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHBhcmFtcy5lbnRyaWVzKSB7XG4gICAgICAgIHN0b3JlLnB1dCh2YWx1ZSwga2V5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdG9yZS5jb3VudCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSByZWNvcmQuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBSZWNvcmQga2V5LlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciBjb21taXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGVsZXRlKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5ydW4oJ3JlYWR3cml0ZScsIChzdG9yZSkgPT4gc3RvcmUuZGVsZXRlKGtleSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGFsbCByZWNvcmRzIGluIGtleSBvcmRlci5cbiAgICpcbiAgICogQHJldHVybnMgRGV0YWNoZWQga2V5L3ZhbHVlIHBhaXJzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVudHJpZXMoKTogUHJvbWlzZTxbc3RyaW5nLCB1bmtub3duXVtdPiB7XG4gICAgY29uc3QgcmVjb3JkczogW3N0cmluZywgdW5rbm93bl1bXSA9IFtdO1xuICAgIC8vIFR3byBidWxrIHJlYWRzIGluIG9uZSB0cmFuc2FjdGlvbiBzZWUgdGhlIHNhbWUgc25hcHNob3QgaW4gdGhlIHNhbWUga2V5IG9yZGVyLCBzbyB0aGV5IHBhaXIgdXAgYnkgaW5kZXguXG4gICAgLy8gQSBjdXJzb3IgZGlzcGF0Y2hlcyBvbmUgZXZlbnQgcGVyIHJlY29yZCBpbnN0ZWFkOyBhdCA5MCwwMDAgcmVjb3JkcyBpbiBPYnNpZGlhbiBpdCB0b29rIDEuNSB0byAyIHRpbWVzIGFzIGxvbmcuXG4gICAgYXdhaXQgdGhpcy5ydW4oJ3JlYWRvbmx5JywgKHN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBrZXlzUmVxdWVzdCA9IHN0b3JlLmdldEFsbEtleXMoKTtcbiAgICAgIGNvbnN0IHZhbHVlc1JlcXVlc3QgPSBzdG9yZS5nZXRBbGwoKTtcbiAgICAgIHZhbHVlc1JlcXVlc3Qub25zdWNjZXNzID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBrZXlzID0ga2V5c1JlcXVlc3QucmVzdWx0O1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB2YWx1ZXNSZXF1ZXN0LnJlc3VsdDtcbiAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIGtleV0gb2Yga2V5cy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0xvY2FsIGRhdGEtc3RvcmUga2V5IGlzIG5vdCBhIHN0cmluZycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZWNvcmRzLnB1c2goW2tleSwgdmFsdWVzW2luZGV4XV0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHZhbHVlc1JlcXVlc3Q7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlY29yZHM7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIHNoYXJlZC1zdG9yZSBvcGVyYXRpb24gYWNyb3NzIGNvbm5lY3Rpb25zLCB3aW5kb3dzIGFuZCBidW5kbGVkIGxpYnJhcnkgY29waWVzLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFQgLSBDYWxsYmFjayByZXN1bHQuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFdvcmsgcGVyZm9ybWVkIHdoaWxlIGhvbGRpbmcgdGhpcyBkYXRhYmFzZSdzIFdlYiBMb2NrLlxuICAgKiBAcmV0dXJucyBUaGUgY2FsbGJhY2sgcmVzdWx0IGFmdGVyIHJlbGVhc2luZyB0aGUgbG9jay5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBleGNsdXNpdmU8VD4oY2FsbGJhY2s6ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93Lm5hdmlnYXRvci5sb2Nrcy5yZXF1ZXN0KHRoaXMuZGF0YWJhc2UubmFtZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGEgcmVjb3JkLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gUmVjb3JkIGtleS5cbiAgICogQHJldHVybnMgSXRzIHZhbHVlLCBvciBgdW5kZWZpbmVkYCB3aGVuIGFic2VudC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ydW48dW5rbm93bj4oJ3JlYWRvbmx5JywgKHN0b3JlKSA9PiBzdG9yZS5nZXQoa2V5KSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgYSByZWNvcmQgb25jZSwgYXRvbWljYWxseSBhY3Jvc3MgY29ubmVjdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBSZWNvcmQga2V5LlxuICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB1c2VkIG9ubHkgd2hlbiB0aGUga2V5IGlzIGFic2VudC5cbiAgICogQHJldHVybnMgVGhlIGV4aXN0aW5nIG9yIG5ld2x5IGNvbW1pdHRlZCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRPckNyZWF0ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiBQcm9taXNlPHVua25vd24+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ydW48dW5rbm93bj4oJ3JlYWR3cml0ZScsIChzdG9yZSkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHN0b3JlLmdldChrZXkpO1xuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChyZXF1ZXN0LnJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RvcmUucHV0KHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfSkudGhlbigoZXhpc3RpbmcpID0+IGV4aXN0aW5nID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGV4aXN0aW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZXMgYSBzdHJ1Y3R1cmVkLWNsb25lYWJsZSB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFJlY29yZCBrZXkuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIHBlcnNpc3QuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIGNvbW1pdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5ydW4oJ3JlYWR3cml0ZScsIChzdG9yZSkgPT4gc3RvcmUucHV0KHZhbHVlLCBrZXkpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcnVuPFQ+KG1vZGU6IElEQlRyYW5zYWN0aW9uTW9kZSwgYWN0aW9uOiAoc3RvcmU6IElEQk9iamVjdFN0b3JlKSA9PiBJREJSZXF1ZXN0PFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYXRhYmFzZS50cmFuc2FjdGlvbigncmVjb3JkcycsIG1vZGUpO1xuICAgICAgbGV0IHJlcXVlc3Q6IElEQlJlcXVlc3Q8VD47XG4gICAgICB0cnkge1xuICAgICAgICByZXF1ZXN0ID0gYWN0aW9uKHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdyZWNvcmRzJykpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdHJhbnNhY3Rpb24uYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcignTG9jYWwgZGF0YS1zdG9yZSB0cmFuc2FjdGlvbiBmYWlsZWQnLCB7IGNhdXNlOiBlcnJvciB9KSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuICAgICAgfTtcbiAgICAgIHRyYW5zYWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCk6IHZvaWQgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKCdMb2NhbCBkYXRhLXN0b3JlIHRyYW5zYWN0aW9uIGFib3J0ZWQnLCB7IGNhdXNlOiB0cmFuc2FjdGlvbi5lcnJvciB9KSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKiBlc2xpbnQtZW5hYmxlIG4vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyAtLSBUaGVzZSBhcmUgT2JzaWRpYW4gcmVuZGVyZXIgV2ViIEFQSXMsIG5vdCBOb2RlIGJ1aWx0aW5zLiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0RPLE1BQU0sZUFBZTtBQUFBLEVBQ2xCLFlBQTZCLFVBQXVCO0FBQXZCO0FBQUEsRUFBd0I7QUFBQSxFQUF4QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUXJDLGFBQW9CLEtBQUssUUFBMkQ7QUFDbEYsVUFBTSxPQUFPLGdCQUFnQixLQUFLLFVBQVUsQ0FBQyxPQUFPLFNBQVMsT0FBTyxVQUFVLE9BQU8sT0FBTyxDQUFDLENBQUM7QUFDOUYsVUFBTSxXQUFXLE9BQU8sV0FBVyxXQUFXLEtBQUssTUFBTSxDQUFDO0FBQzFELFdB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
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0b3Jlcy9sb2NhbC1kYXRhLXN0b3JlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG4vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyAtLSBUaGVzZSBhcmUgT2JzaWRpYW4gcmVuZGVyZXIgV2ViIEFQSXMsIG5vdCBOb2RlIGJ1aWx0aW5zLiAqL1xuLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlY29yZC1iYXNlZCBkZXZpY2UtbG9jYWwgcGVyc2lzdGVuY2UsIGlzb2xhdGVkIGJ5IHZhdWx0LCBwbHVnaW4gYW5kIHN0b3JlLlxuICovXG5cbi8qKlxuICogQXRvbWljIG11dGF0aW9ucyBvZiBhIGxvY2FsIHJlY29yZCBzdG9yZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbERhdGFTdG9yZUNvbW1pdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBLZXkvdmFsdWUgcGFpcnMgdG8gd3JpdGUuXG4gICAqL1xuICByZWFkb25seSBlbnRyaWVzOiByZWFkb25seSAocmVhZG9ubHkgW3N0cmluZywgdW5rbm93bl0pW107XG4gIC8qKlxuICAgKiBLZXlzIHJlbW92ZWQgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gYXMgdGhlIHdyaXRlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYFtdYFxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZlZEtleXM/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIERlbGV0ZXMgZXZlcnkgcmVjb3JkIG9mIHRoaXMgc3RvcmUgZmlyc3QsIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIGFzIHRoZSB3cml0ZXMuXG4gICAqXG4gICAqIEVpdGhlciB0aGUgc3RvcmUgaXMgcmVwbGFjZWQgYnkgYGVudHJpZXNgIGFzIGEgd2hvbGUsIG9yLCB3aGVuIHRoZSB0cmFuc2FjdGlvbiBmYWlscywgZXZlcnkgcHJldmlvdXMgcmVjb3JkIHN1cnZpdmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRDbGVhcj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Igb3BlbmluZyBhIGxvY2FsIHN0b3JlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsRGF0YVN0b3JlT3BlblBhcmFtcyB7XG4gIC8qKlxuICAgKiBJbmRleGVkREIgaW1wbGVtZW50YXRpb24sIGluamVjdGFibGUgZm9yIHRlc3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgZmFjdG9yeT86IElEQkZhY3Rvcnk7XG4gIC8qKlxuICAgKiBQbHVnaW4gbWFuaWZlc3QgaWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuICAvKipcbiAgICogU3RvcmUgbmFtZSBhbmQgc2NoZW1hIHZlcnNpb24gY2hvc2VuIGJ5IHRoZSBjb25zdW1lci5cbiAgICovXG4gIHJlYWRvbmx5IHN0b3JlSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFN0YWJsZSwgZGV2aWNlLWxvY2FsIHZhdWx0IGlkZW50aXR5OyBuZXZlciB0aGUgdmF1bHQgZGlzcGxheSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHRJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbG9jYWwgc3RvcmUgaG9sZHMgc3RydWN0dXJlZC1jbG9uZWFibGUgdmFsdWVzOyBpdCBuZXZlciB3cml0ZXMgdG8gdGhlIHZhdWx0LlxuICovXG5leHBvcnQgY2xhc3MgTG9jYWxEYXRhU3RvcmUge1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGF0YWJhc2U6IElEQkRhdGFiYXNlKSB7fVxuXG4gIC8qKlxuICAgKiBPcGVucyBhbiBpc29sYXRlZCBkYXRhYmFzZS4gV3JpdGVzIHJlc29sdmUgb25seSBvbmNlIHRoZWlyIHRyYW5zYWN0aW9uIGNvbW1pdHMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBTdG9yZSBpZGVudGl0eSBhbmQgb3B0aW9uYWwgSW5kZXhlZERCIGltcGxlbWVudGF0aW9uLlxuICAgKiBAcmV0dXJucyBUaGUgY29ubmVjdGVkIHN0b3JlOyBjbG9zZSBpdCB3aGVuIGl0cyBvd25lciB1bmxvYWRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyBvcGVuKHBhcmFtczogTG9jYWxEYXRhU3RvcmVPcGVuUGFyYW1zKTogUHJvbWlzZTxMb2NhbERhdGFTdG9yZT4ge1xuICAgIGNvbnN0IG5hbWUgPSBgb2JzaWRpYW4tbGliOiR7SlNPTi5zdHJpbmdpZnkoW3BhcmFtcy52YXVsdElkLCBwYXJhbXMucGx1Z2luSWQsIHBhcmFtcy5zdG9yZUlkXSl9YDtcbiAgICBjb25zdCByZXF1ZXN0ID0gKHBhcmFtcy5mYWN0b3J5ID8/IGluZGV4ZWREQikub3BlbihuYW1lLCAxKTtcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHJlcXVlc3QucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKCdyZWNvcmRzJyk7XG4gICAgICB9O1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsICgpOiB2b2lkID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ291bGQgbm90IG9wZW4gbG9jYWwgZGF0YSBzdG9yZScsIHsgY2F1c2U6IHJlcXVlc3QuZXJyb3IgfSkpO1xuICAgICAgfSk7XG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgZGF0YWJhc2UgPSByZXF1ZXN0LnJlc3VsdDtcbiAgICAgICAgZGF0YWJhc2Uub252ZXJzaW9uY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIGRhdGFiYXNlLmNsb3NlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHJlc29sdmUobmV3IExvY2FsRGF0YVN0b3JlKGRhdGFiYXNlKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgZXZlcnkgcmVjb3JkIGluIHRoaXMgc3RvcmUgb25seS5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgY29tbWl0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNsZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucnVuKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHN0b3JlLmNsZWFyKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGlzIGNvbm5lY3Rpb24gd2l0aG91dCBkZWxldGluZyBpdHMgcmVjb3Jkcy5cbiAgICovXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFiYXNlLmNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tbWl0cyBzZXZlcmFsIHJlY29yZCBjaGFuZ2VzIGF0b21pY2FsbHkgd2l0aG91dCBzZXJpYWxpemluZyB0aGUgcmVzdCBvZiB0aGUgZGF0YWJhc2UuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBXcml0ZXMgYW5kIGRlbGV0aW9ucyBpbiBvbmUgdHJhbnNhY3Rpb24sIG9wdGlvbmFsbHkgYWZ0ZXIgY2xlYXJpbmcgdGhlIHN0b3JlLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmx5IGFmdGVyIGFsbCBjaGFuZ2VzIGNvbW1pdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb21taXQocGFyYW1zOiBMb2NhbERhdGFTdG9yZUNvbW1pdFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucnVuKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHtcbiAgICAgIGlmIChwYXJhbXMuc2hvdWxkQ2xlYXIpIHtcbiAgICAgICAgc3RvcmUuY2xlYXIoKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIHBhcmFtcy5yZW1vdmVkS2V5cyA/PyBbXSkge1xuICAgICAgICBzdG9yZS5kZWxldGUoa2V5KTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHBhcmFtcy5lbnRyaWVzKSB7XG4gICAgICAgIHN0b3JlLnB1dCh2YWx1ZSwga2V5KTtcbiAgICAgIH1cbiAgICAgIC8vIE5vIHJlcXVlc3QgdG8gcmVzb2x2ZSB3aXRoOiBhIGNsb3NpbmcgYHN0b3JlLmNvdW50KClgIHdvdWxkIHdhbGsgZXZlcnkgcmVjb3JkIG9mIHRoZSBzdG9yZSBvbiBlYWNoIGNvbW1pdC5cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEgcmVjb3JkLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gUmVjb3JkIGtleS5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgY29tbWl0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlbGV0ZShrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucnVuKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHN0b3JlLmRlbGV0ZShrZXkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhbGwgcmVjb3JkcyBpbiBrZXkgb3JkZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIERldGFjaGVkIGtleS92YWx1ZSBwYWlycy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBlbnRyaWVzKCk6IFByb21pc2U8W3N0cmluZywgdW5rbm93bl1bXT4ge1xuICAgIGNvbnN0IHJlY29yZHM6IFtzdHJpbmcsIHVua25vd25dW10gPSBbXTtcbiAgICAvLyBUd28gYnVsayByZWFkcyBpbiBvbmUgdHJhbnNhY3Rpb24gc2VlIHRoZSBzYW1lIHNuYXBzaG90IGluIHRoZSBzYW1lIGtleSBvcmRlciwgc28gdGhleSBwYWlyIHVwIGJ5IGluZGV4LlxuICAgIC8vIEEgY3Vyc29yIGRpc3BhdGNoZXMgb25lIGV2ZW50IHBlciByZWNvcmQgaW5zdGVhZDsgYXQgOTAsMDAwIHJlY29yZHMgaW4gT2JzaWRpYW4gaXQgdG9vayAxLjUgdG8gMiB0aW1lcyBhcyBsb25nLlxuICAgIGF3YWl0IHRoaXMucnVuKCdyZWFkb25seScsIChzdG9yZSkgPT4ge1xuICAgICAgY29uc3Qga2V5c1JlcXVlc3QgPSBzdG9yZS5nZXRBbGxLZXlzKCk7XG4gICAgICBjb25zdCB2YWx1ZXNSZXF1ZXN0ID0gc3RvcmUuZ2V0QWxsKCk7XG4gICAgICB2YWx1ZXNSZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGtleXNSZXF1ZXN0LnJlc3VsdDtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gdmFsdWVzUmVxdWVzdC5yZXN1bHQ7XG4gICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBrZXldIG9mIGtleXMuZW50cmllcygpKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMb2NhbCBkYXRhLXN0b3JlIGtleSBpcyBub3QgYSBzdHJpbmcnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVjb3Jkcy5wdXNoKFtrZXksIHZhbHVlc1tpbmRleF1dKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB2YWx1ZXNSZXF1ZXN0O1xuICAgIH0pO1xuICAgIHJldHVybiByZWNvcmRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBzaGFyZWQtc3RvcmUgb3BlcmF0aW9uIGFjcm9zcyBjb25uZWN0aW9ucywgd2luZG93cyBhbmQgYnVuZGxlZCBsaWJyYXJ5IGNvcGllcy5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUIC0gQ2FsbGJhY2sgcmVzdWx0LlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBXb3JrIHBlcmZvcm1lZCB3aGlsZSBob2xkaW5nIHRoaXMgZGF0YWJhc2UncyBXZWIgTG9jay5cbiAgICogQHJldHVybnMgVGhlIGNhbGxiYWNrIHJlc3VsdCBhZnRlciByZWxlYXNpbmcgdGhlIGxvY2suXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXhjbHVzaXZlPFQ+KGNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy5uYXZpZ2F0b3IubG9ja3MucmVxdWVzdCh0aGlzLmRhdGFiYXNlLm5hbWUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhIHJlY29yZC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFJlY29yZCBrZXkuXG4gICAqIEByZXR1cm5zIEl0cyB2YWx1ZSwgb3IgYHVuZGVmaW5lZGAgd2hlbiBhYnNlbnQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucnVuPHVua25vd24+KCdyZWFkb25seScsIChzdG9yZSkgPT4gc3RvcmUuZ2V0KGtleSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGEgcmVjb3JkIG9uY2UsIGF0b21pY2FsbHkgYWNyb3NzIGNvbm5lY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gUmVjb3JkIGtleS5cbiAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdXNlZCBvbmx5IHdoZW4gdGhlIGtleSBpcyBhYnNlbnQuXG4gICAqIEByZXR1cm5zIFRoZSBleGlzdGluZyBvciBuZXdseSBjb21taXR0ZWQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0T3JDcmVhdGUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucnVuPHVua25vd24+KCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBzdG9yZS5nZXQoa2V5KTtcbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAocmVxdWVzdC5yZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN0b3JlLnB1dCh2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgIH0pLnRoZW4oKGV4aXN0aW5nKSA9PiBleGlzdGluZyA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBleGlzdGluZyk7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIGEgc3RydWN0dXJlZC1jbG9uZWFibGUgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBSZWNvcmQga2V5LlxuICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBwZXJzaXN0LlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciBjb21taXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucnVuKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHN0b3JlLnB1dCh2YWx1ZSwga2V5KSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1bjxUPihtb2RlOiBJREJUcmFuc2FjdGlvbk1vZGUsIGFjdGlvbjogKHN0b3JlOiBJREJPYmplY3RTdG9yZSkgPT4gSURCUmVxdWVzdDxUPiB8IHVuZGVmaW5lZCk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGF0YWJhc2UudHJhbnNhY3Rpb24oJ3JlY29yZHMnLCBtb2RlKTtcbiAgICAgIGxldCByZXF1ZXN0OiBJREJSZXF1ZXN0PFQ+IHwgdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVxdWVzdCA9IGFjdGlvbih0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgncmVjb3JkcycpKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uLmFib3J0KCk7XG4gICAgICAgIHJlamVjdChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoJ0xvY2FsIGRhdGEtc3RvcmUgdHJhbnNhY3Rpb24gZmFpbGVkJywgeyBjYXVzZTogZXJyb3IgfSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAvLyBBbiBhY3Rpb24gdGhhdCBpc3N1ZWQgbm8gcmVxdWVzdCBvZiBpdHMgb3duIHJlc29sdmVzIHdpdGggYHVuZGVmaW5lZGAgb25jZSBpdHMgd3JpdGVzIGNvbW1pdC5cbiAgICAgICAgcmVzb2x2ZShyZXF1ZXN0Py5yZXN1bHQpO1xuICAgICAgfTtcbiAgICAgIHRyYW5zYWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCk6IHZvaWQgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKCdMb2NhbCBkYXRhLXN0b3JlIHRyYW5zYWN0aW9uIGFib3J0ZWQnLCB7IGNhdXNlOiB0cmFuc2FjdGlvbi5lcnJvciB9KSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKiBlc2xpbnQtZW5hYmxlIG4vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyAtLSBUaGVzZSBhcmUgT2JzaWRpYW4gcmVuZGVyZXIgV2ViIEFQSXMsIG5vdCBOb2RlIGJ1aWx0aW5zLiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0RPLE1BQU0sZUFBZTtBQUFBLEVBQ2xC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