obsidian-integration-testing 16.0.0 → 17.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 (71) hide show
  1. package/dist/lib/cjs/adb.cjs +2 -2
  2. package/dist/lib/cjs/adb.d.cts +10 -0
  3. package/dist/lib/cjs/avd-name-channel.cjs +74 -0
  4. package/dist/lib/cjs/avd-name-channel.d.cts +152 -0
  5. package/dist/lib/cjs/avd-probe-verdict.cjs +11 -4
  6. package/dist/lib/cjs/avd-probe-verdict.d.cts +7 -0
  7. package/dist/lib/cjs/device-screenshot.cjs +1 -1
  8. package/dist/lib/cjs/device-screenshot.d.cts +3 -1
  9. package/dist/lib/cjs/emulator-backend.cjs +22 -1
  10. package/dist/lib/cjs/emulator-backend.d.cts +81 -0
  11. package/dist/lib/cjs/emulator-reclaim.cjs +78 -34
  12. package/dist/lib/cjs/emulator-reclaim.d.cts +57 -9
  13. package/dist/lib/cjs/enable-plugin.cjs +17 -8
  14. package/dist/lib/cjs/enable-plugin.d.cts +3 -1
  15. package/dist/lib/cjs/host-process-query-verdict.cjs +103 -0
  16. package/dist/lib/cjs/host-process-query-verdict.d.cts +196 -0
  17. package/dist/lib/cjs/index.cjs +14 -1
  18. package/dist/lib/cjs/index.d.cts +3 -1
  19. package/dist/lib/cjs/launched-device-selection.cjs +46 -0
  20. package/dist/lib/cjs/launched-device-selection.d.cts +112 -0
  21. package/dist/lib/cjs/library.cjs +1 -1
  22. package/dist/lib/cjs/paint-out-status-bar.cjs +170 -0
  23. package/dist/lib/cjs/paint-out-status-bar.d.cts +236 -0
  24. package/dist/lib/cjs/port-owner-query-verdict.cjs +94 -0
  25. package/dist/lib/cjs/port-owner-query-verdict.d.cts +161 -0
  26. package/dist/lib/cjs/resolve-emulator-device-id.cjs +27 -4
  27. package/dist/lib/cjs/sharp-loader.cjs +1 -1
  28. package/dist/lib/cjs/sharp-loader.d.cts +67 -2
  29. package/dist/lib/cjs/soft-keyboard-geometry.cjs +12 -2
  30. package/dist/lib/cjs/soft-keyboard-geometry.d.cts +17 -2
  31. package/dist/lib/cjs/soft-keyboard.cjs +130 -28
  32. package/dist/lib/cjs/soft-keyboard.d.cts +65 -6
  33. package/dist/lib/cjs/transport-appium.cjs +74 -4
  34. package/dist/lib/cjs/transport-appium.d.cts +49 -2
  35. package/dist/lib/cjs/transport-factory.cjs +162 -42
  36. package/dist/lib/esm/adb.d.mts +10 -0
  37. package/dist/lib/esm/adb.mjs +2 -2
  38. package/dist/lib/esm/avd-name-channel.d.mts +152 -0
  39. package/dist/lib/esm/avd-name-channel.mjs +45 -0
  40. package/dist/lib/esm/avd-probe-verdict.d.mts +7 -0
  41. package/dist/lib/esm/avd-probe-verdict.mjs +15 -4
  42. package/dist/lib/esm/device-screenshot.d.mts +3 -1
  43. package/dist/lib/esm/device-screenshot.mjs +1 -1
  44. package/dist/lib/esm/emulator-backend.d.mts +81 -0
  45. package/dist/lib/esm/emulator-backend.mjs +19 -1
  46. package/dist/lib/esm/emulator-reclaim.d.mts +57 -9
  47. package/dist/lib/esm/emulator-reclaim.mjs +84 -36
  48. package/dist/lib/esm/enable-plugin.d.mts +3 -1
  49. package/dist/lib/esm/enable-plugin.mjs +17 -8
  50. package/dist/lib/esm/host-process-query-verdict.d.mts +196 -0
  51. package/dist/lib/esm/host-process-query-verdict.mjs +74 -0
  52. package/dist/lib/esm/index.d.mts +3 -1
  53. package/dist/lib/esm/index.mjs +15 -1
  54. package/dist/lib/esm/launched-device-selection.d.mts +112 -0
  55. package/dist/lib/esm/launched-device-selection.mjs +21 -0
  56. package/dist/lib/esm/library.mjs +1 -1
  57. package/dist/lib/esm/paint-out-status-bar.d.mts +236 -0
  58. package/dist/lib/esm/paint-out-status-bar.mjs +142 -0
  59. package/dist/lib/esm/port-owner-query-verdict.d.mts +161 -0
  60. package/dist/lib/esm/port-owner-query-verdict.mjs +73 -0
  61. package/dist/lib/esm/resolve-emulator-device-id.mjs +32 -4
  62. package/dist/lib/esm/sharp-loader.d.mts +67 -2
  63. package/dist/lib/esm/sharp-loader.mjs +1 -1
  64. package/dist/lib/esm/soft-keyboard-geometry.d.mts +17 -2
  65. package/dist/lib/esm/soft-keyboard-geometry.mjs +11 -2
  66. package/dist/lib/esm/soft-keyboard.d.mts +65 -6
  67. package/dist/lib/esm/soft-keyboard.mjs +131 -28
  68. package/dist/lib/esm/transport-appium.d.mts +49 -2
  69. package/dist/lib/esm/transport-appium.mjs +74 -4
  70. package/dist/lib/esm/transport-factory.mjs +176 -44
  71. package/package.json +1 -1
@@ -0,0 +1,196 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Pure classification of the host process listing — deciding, from how
5
+ * `tasklist` / `ps` ended, *which* way it failed, and saying so in one line.
6
+ *
7
+ * The listing is what names the emulator backend a run owns, and therefore the
8
+ * only PID teardown can escalate to (**L56**). It is best-effort by design: a
9
+ * listing that cannot be produced yields no PIDs rather than failing the run.
10
+ * What it must never be is **unexplained**, and for three weeks it was:
11
+ *
12
+ * ```text
13
+ * Warning: could not list host processes (`tasklist`): Command failed: tasklist /FO CSV /NH
14
+ *
15
+ * Warning: `tasklist` listed no processes.
16
+ * ```
17
+ *
18
+ * Two defects in four lines. The pair is *contradictory* — the first says the
19
+ * command failed, the second says it ran and found nothing — and they were
20
+ * emitted together for a single failure, because a failed call resolves `''`
21
+ * and an empty string parses to zero rows. `zero-rows` exists to catch a
22
+ * listing that succeeded and yet returned nothing, which on a real host can
23
+ * only be a failed query; it is not a second opinion on a call that already
24
+ * reported an error.
25
+ *
26
+ * And the surviving diagnostic is `error.message` alone, which for `execFile`
27
+ * is `Command failed: <cmd>\n<stderr>` — so the log carried the command back
28
+ * to the reader and threw away everything that identifies the failure:
29
+ * `error.code`, `error.killed`, `error.signal`, and how long the call took.
30
+ * Measured 2026-09-23 on this host, that discarded evidence is decisive:
31
+ *
32
+ * - `tasklist` **always** writes `ERROR: <reason>` to stderr when it objects —
33
+ * a bad filter, an unreachable host — and exits 1. So a non-zero exit with
34
+ * **empty** stderr is not `tasklist` refusing; it is the host killing the
35
+ * child, and `crashed` says so.
36
+ * - The exact spawn the harness makes succeeds 39 times out of 39 from an idle
37
+ * Node process (0.6-4.3s, 26 KB, ~530 rows, against a 30s budget and an 8 MB
38
+ * ceiling). So "the spawn is wrong" — a missing shell, a PATH the child did
39
+ * not inherit, an undersized buffer — is ruled out: each has its **own** message
40
+ * (`spawn tasklist ENOENT`, `stdout maxBuffer length exceeded`), and none of
41
+ * them is the one observed.
42
+ * - Under an emulator boot the same call inflates to ~9x its idle cost, which
43
+ * is the contention `HOST_PROCESS_QUERY_TIMEOUT_IN_MILLISECONDS` is sized
44
+ * for and the failure the old line could not distinguish from a crash.
45
+ *
46
+ * This is the same fault `avd-probe-verdict.ts` was written for — a probe that
47
+ * discarded its error, leaving "never answered" indistinguishable from "the
48
+ * answer is no" — and it is fixed the same way: classify, name the
49
+ * consequence, and keep the classification pure so it is unit-testable while
50
+ * the `execFile` glue stays in the integration-only caller.
51
+ */
52
+ /**
53
+ * Parameters for {@link buildHostProcessQueryMessage}.
54
+ */
55
+ export interface BuildHostProcessQueryMessageParams {
56
+ /**
57
+ The command that was run, for the reader to try by hand — e.g. `tasklist /FO CSV /NH`.
58
+ */
59
+ readonly command: string;
60
+ /**
61
+ What the failure costs the caller, closing the line. Defaults to the teardown consequence, which is what the harness's own listing loses; the wedge probe states what *it* loses instead.
62
+ */
63
+ readonly consequence?: string | undefined;
64
+ /**
65
+ How long the call took before it ended, in milliseconds.
66
+ */
67
+ readonly elapsedInMilliseconds: number;
68
+ /**
69
+ The child's exit code, when it exited rather than failing to start or being killed.
70
+ */
71
+ readonly exitCode: null | number;
72
+ /**
73
+ The verdict from {@link resolveHostProcessQueryOutcome}.
74
+ */
75
+ readonly outcome: HostProcessQueryOutcome;
76
+ /**
77
+ How many processes the output parsed to — the *partial* listing on a failure, which is the evidence that the command was working when it died.
78
+ */
79
+ readonly partialRowCount: number;
80
+ /**
81
+ The signal the child was killed with, when it was killed.
82
+ */
83
+ readonly signal: null | string;
84
+ /**
85
+ Whatever the child wrote to stderr — quoted for `refused`, and the emptiness that identifies `crashed`.
86
+ */
87
+ readonly standardError: string;
88
+ /**
89
+ The budget the call was given, in milliseconds.
90
+ */
91
+ readonly timeoutInMilliseconds: number;
92
+ }
93
+ /**
94
+ * How the host process listing ended.
95
+ *
96
+ * `listed` is the only success. The rest are distinct failures on purpose: they
97
+ * need different fixes, and the line they used to share named none of them.
98
+ */
99
+ export type HostProcessQueryOutcome = 'listed' | 'zero-rows' | HostQueryFailure;
100
+ /**
101
+ * The ways a host query can fail, shared by every query that classifies its ending.
102
+ */
103
+ export type HostQueryFailure = 'crashed' | 'not-found' | 'output-overran' | 'refused' | 'timed-out';
104
+ /**
105
+ * Parameters for {@link resolveHostProcessQueryOutcome}.
106
+ */
107
+ export interface ResolveHostProcessQueryOutcomeParams {
108
+ /**
109
+ `execFile`'s `error.code`: the numeric exit code, or a string like `ENOENT` when the child never ran.
110
+ */
111
+ readonly errorCode: null | number | string;
112
+ /**
113
+ Whether `execFile` reported an error at all.
114
+ */
115
+ readonly hasFailed: boolean;
116
+ /**
117
+ Whether a **filtered** query affirmatively reported that nothing matched (`checkIsNoMatchReported`) — the one way an empty answer is an answer.
118
+ */
119
+ readonly hasReportedNoMatch: boolean;
120
+ /**
121
+ `execFile`'s `error.killed`: whether the budget expired and the child was killed.
122
+ */
123
+ readonly isKilled: boolean;
124
+ /**
125
+ How many processes the output parsed to.
126
+ */
127
+ readonly rowCount: number;
128
+ /**
129
+ Whatever the child wrote to stderr.
130
+ */
131
+ readonly standardError: string;
132
+ }
133
+ /**
134
+ * Parameters for {@link resolveHostQueryFailure}.
135
+ */
136
+ export type ResolveHostQueryFailureParams = Pick<ResolveHostProcessQueryOutcomeParams, 'errorCode' | 'isKilled' | 'standardError'>;
137
+ /**
138
+ * Builds the single line the listing logs for an outcome.
139
+ *
140
+ * One line, never two: the contradictory pair in this file's header is the
141
+ * defect this replaces. `listed` has nothing to report, so it returns
142
+ * `undefined` rather than a cheerful line on the hot path.
143
+ *
144
+ * @param params - The outcome plus the command, the budget and what the child left behind.
145
+ * @returns The warning to log, or `undefined` when the listing succeeded.
146
+ */
147
+ export declare function buildHostProcessQueryMessage(params: BuildHostProcessQueryMessageParams): string | undefined;
148
+ /**
149
+ * Renders a millisecond duration for a log line.
150
+ *
151
+ * @param durationInMilliseconds - The duration.
152
+ * @returns Whole milliseconds under a second, and seconds to one decimal above it.
153
+ */
154
+ export declare function formatDuration(durationInMilliseconds: number): string;
155
+ /**
156
+ * Renders a child's exit code, in the base a reader can look it up in.
157
+ *
158
+ * @param exitCode - The exit code, or `null` when the child was killed before exiting.
159
+ * @returns The code in hex when it is an `NTSTATUS` failure, in decimal otherwise.
160
+ */
161
+ export declare function formatExitCode(exitCode: null | number): string;
162
+ /**
163
+ * Renders what the command said when it refused, as one sentence.
164
+ *
165
+ * `tasklist` ends its own `ERROR: …` with a period and a `\r\r\n`, so quoting it
166
+ * verbatim and adding the sentence break this line needs produced `recognized..`
167
+ * — the terminator is supplied only when the tool did not supply one.
168
+ *
169
+ * @param standardError - Whatever the child wrote to stderr.
170
+ * @returns The refusal, trimmed, ending in exactly one period.
171
+ */
172
+ export declare function formatRefusal(standardError: string): string;
173
+ /**
174
+ * Decides how the listing ended, from what `execFile` reported.
175
+ *
176
+ * The order of the branches is the order of specificity: the two failures Node
177
+ * names itself (`ENOENT`, the buffer ceiling) are recognized before the ones
178
+ * that have to be inferred from the child's exit, and `crashed` is last
179
+ * because it is defined by the *absence* of an explanation on stderr.
180
+ *
181
+ * @param params - What `execFile` reported, and how many rows the output parsed to.
182
+ * @returns The outcome.
183
+ */
184
+ export declare function resolveHostProcessQueryOutcome(params: ResolveHostProcessQueryOutcomeParams): HostProcessQueryOutcome;
185
+ /**
186
+ * Decides which way a host query that **did** fail failed.
187
+ *
188
+ * Split out of {@link resolveHostProcessQueryOutcome} so a sibling query whose
189
+ * success rules differ — the port-owner query, where zero owners is an answer —
190
+ * can share one definition of each failure without inheriting `listed` and
191
+ * `zero-rows`.
192
+ *
193
+ * @param params - What `execFile` reported for the failed call.
194
+ * @returns The failure outcome.
195
+ */
196
+ export declare function resolveHostQueryFailure(params: ResolveHostQueryFailureParams): HostQueryFailure;
@@ -0,0 +1,74 @@
1
+ import { assertNever } from "./type-guards.mjs";
2
+ const NTSTATUS_FAILURE_FLOOR = 3221225472;
3
+ const HEXADECIMAL_RADIX = 16;
4
+ const MILLISECONDS_PER_SECOND = 1e3;
5
+ function buildHostProcessQueryMessage(params) {
6
+ const cost = `after ${formatDuration(params.elapsedInMilliseconds)}`;
7
+ const consequence = params.consequence ?? "Teardown falls back to `adb devices` alone and has no PID to escalate to.";
8
+ switch (params.outcome) {
9
+ case "crashed": {
10
+ return `Warning: \`${params.command}\` died ${cost} without explaining itself (exit ${formatExitCode(params.exitCode)}, nothing on stderr, ${String(params.partialRowCount)} process(es) listed) \u2014 it did not refuse the request, since it always explains a refusal on stderr. Suspect a crash or an interfering security product, and try the command by hand. ${consequence}`;
11
+ }
12
+ case "listed": {
13
+ return void 0;
14
+ }
15
+ case "not-found": {
16
+ return `Warning: \`${params.command}\` could not be run at all ${cost}: the executable was not found on PATH. ${consequence}`;
17
+ }
18
+ case "output-overran": {
19
+ return `Warning: \`${params.command}\` produced more output ${cost} than the listing's buffer allows, so none of it could be read. Raise the buffer. ${consequence}`;
20
+ }
21
+ case "refused": {
22
+ return `Warning: \`${params.command}\` refused the request ${cost} (exit ${formatExitCode(params.exitCode)}): ${formatRefusal(params.standardError)} ${consequence}`;
23
+ }
24
+ case "timed-out": {
25
+ return `Warning: \`${params.command}\` did not finish within its ${formatDuration(params.timeoutInMilliseconds)} budget and was killed ${cost}${params.signal === null ? "" : ` (${params.signal})`}, having listed ${String(params.partialRowCount)} process(es) by then \u2014 so it was working, not refusing, and the budget is what ran out. The partial listing is discarded rather than used: the owned set is a *difference* between two listings, and a truncated one on either side would both miss a process this run owns and claim one it does not. ${consequence}`;
26
+ }
27
+ case "zero-rows": {
28
+ return `Warning: \`${params.command}\` exited cleanly ${cost} but its output parsed to no processes and carried no no-match notice \u2014 a whole-host listing cannot be empty on a running host, and a filtered one says so when nothing matches. Treating it as a failed query. ${consequence}`;
29
+ }
30
+ default: {
31
+ return assertNever(params.outcome);
32
+ }
33
+ }
34
+ }
35
+ function formatDuration(durationInMilliseconds) {
36
+ return durationInMilliseconds < MILLISECONDS_PER_SECOND ? `${String(durationInMilliseconds)}ms` : `${(durationInMilliseconds / MILLISECONDS_PER_SECOND).toFixed(1)}s`;
37
+ }
38
+ function formatExitCode(exitCode) {
39
+ if (exitCode === null) {
40
+ return "unknown";
41
+ }
42
+ return exitCode >= NTSTATUS_FAILURE_FLOOR ? `0x${exitCode.toString(HEXADECIMAL_RADIX).toUpperCase()}` : String(exitCode);
43
+ }
44
+ function formatRefusal(standardError) {
45
+ const refusal = standardError.trim();
46
+ return refusal.endsWith(".") ? refusal : `${refusal}.`;
47
+ }
48
+ function resolveHostProcessQueryOutcome(params) {
49
+ if (!params.hasFailed) {
50
+ return params.rowCount === 0 && !params.hasReportedNoMatch ? "zero-rows" : "listed";
51
+ }
52
+ return resolveHostQueryFailure(params);
53
+ }
54
+ function resolveHostQueryFailure(params) {
55
+ if (params.errorCode === "ENOENT") {
56
+ return "not-found";
57
+ }
58
+ if (params.errorCode === "ERR_CHILD_PROCESS_STDIO_MAXBUFFER") {
59
+ return "output-overran";
60
+ }
61
+ if (params.isKilled) {
62
+ return "timed-out";
63
+ }
64
+ return params.standardError.trim() === "" ? "crashed" : "refused";
65
+ }
66
+ export {
67
+ buildHostProcessQueryMessage,
68
+ formatDuration,
69
+ formatExitCode,
70
+ formatRefusal,
71
+ resolveHostProcessQueryOutcome,
72
+ resolveHostQueryFailure
73
+ };
74
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2hvc3QtcHJvY2Vzcy1xdWVyeS12ZXJkaWN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHVyZSBjbGFzc2lmaWNhdGlvbiBvZiB0aGUgaG9zdCBwcm9jZXNzIGxpc3RpbmcgXHUyMDE0IGRlY2lkaW5nLCBmcm9tIGhvd1xuICogYHRhc2tsaXN0YCAvIGBwc2AgZW5kZWQsICp3aGljaCogd2F5IGl0IGZhaWxlZCwgYW5kIHNheWluZyBzbyBpbiBvbmUgbGluZS5cbiAqXG4gKiBUaGUgbGlzdGluZyBpcyB3aGF0IG5hbWVzIHRoZSBlbXVsYXRvciBiYWNrZW5kIGEgcnVuIG93bnMsIGFuZCB0aGVyZWZvcmUgdGhlXG4gKiBvbmx5IFBJRCB0ZWFyZG93biBjYW4gZXNjYWxhdGUgdG8gKCoqTDU2KiopLiBJdCBpcyBiZXN0LWVmZm9ydCBieSBkZXNpZ246IGFcbiAqIGxpc3RpbmcgdGhhdCBjYW5ub3QgYmUgcHJvZHVjZWQgeWllbGRzIG5vIFBJRHMgcmF0aGVyIHRoYW4gZmFpbGluZyB0aGUgcnVuLlxuICogV2hhdCBpdCBtdXN0IG5ldmVyIGJlIGlzICoqdW5leHBsYWluZWQqKiwgYW5kIGZvciB0aHJlZSB3ZWVrcyBpdCB3YXM6XG4gKlxuICogYGBgdGV4dFxuICogV2FybmluZzogY291bGQgbm90IGxpc3QgaG9zdCBwcm9jZXNzZXMgKGB0YXNrbGlzdGApOiBDb21tYW5kIGZhaWxlZDogdGFza2xpc3QgL0ZPIENTViAvTkhcbiAqXG4gKiBXYXJuaW5nOiBgdGFza2xpc3RgIGxpc3RlZCBubyBwcm9jZXNzZXMuXG4gKiBgYGBcbiAqXG4gKiBUd28gZGVmZWN0cyBpbiBmb3VyIGxpbmVzLiBUaGUgcGFpciBpcyAqY29udHJhZGljdG9yeSogXHUyMDE0IHRoZSBmaXJzdCBzYXlzIHRoZVxuICogY29tbWFuZCBmYWlsZWQsIHRoZSBzZWNvbmQgc2F5cyBpdCByYW4gYW5kIGZvdW5kIG5vdGhpbmcgXHUyMDE0IGFuZCB0aGV5IHdlcmVcbiAqIGVtaXR0ZWQgdG9nZXRoZXIgZm9yIGEgc2luZ2xlIGZhaWx1cmUsIGJlY2F1c2UgYSBmYWlsZWQgY2FsbCByZXNvbHZlcyBgJydgXG4gKiBhbmQgYW4gZW1wdHkgc3RyaW5nIHBhcnNlcyB0byB6ZXJvIHJvd3MuIGB6ZXJvLXJvd3NgIGV4aXN0cyB0byBjYXRjaCBhXG4gKiBsaXN0aW5nIHRoYXQgc3VjY2VlZGVkIGFuZCB5ZXQgcmV0dXJuZWQgbm90aGluZywgd2hpY2ggb24gYSByZWFsIGhvc3QgY2FuXG4gKiBvbmx5IGJlIGEgZmFpbGVkIHF1ZXJ5OyBpdCBpcyBub3QgYSBzZWNvbmQgb3BpbmlvbiBvbiBhIGNhbGwgdGhhdCBhbHJlYWR5XG4gKiByZXBvcnRlZCBhbiBlcnJvci5cbiAqXG4gKiBBbmQgdGhlIHN1cnZpdmluZyBkaWFnbm9zdGljIGlzIGBlcnJvci5tZXNzYWdlYCBhbG9uZSwgd2hpY2ggZm9yIGBleGVjRmlsZWBcbiAqIGlzIGBDb21tYW5kIGZhaWxlZDogPGNtZD5cXG48c3RkZXJyPmAgXHUyMDE0IHNvIHRoZSBsb2cgY2FycmllZCB0aGUgY29tbWFuZCBiYWNrXG4gKiB0byB0aGUgcmVhZGVyIGFuZCB0aHJldyBhd2F5IGV2ZXJ5dGhpbmcgdGhhdCBpZGVudGlmaWVzIHRoZSBmYWlsdXJlOlxuICogYGVycm9yLmNvZGVgLCBgZXJyb3Iua2lsbGVkYCwgYGVycm9yLnNpZ25hbGAsIGFuZCBob3cgbG9uZyB0aGUgY2FsbCB0b29rLlxuICogTWVhc3VyZWQgMjAyNi0wOS0yMyBvbiB0aGlzIGhvc3QsIHRoYXQgZGlzY2FyZGVkIGV2aWRlbmNlIGlzIGRlY2lzaXZlOlxuICpcbiAqIC0gYHRhc2tsaXN0YCAqKmFsd2F5cyoqIHdyaXRlcyBgRVJST1I6IDxyZWFzb24+YCB0byBzdGRlcnIgd2hlbiBpdCBvYmplY3RzIFx1MjAxNFxuICogICBhIGJhZCBmaWx0ZXIsIGFuIHVucmVhY2hhYmxlIGhvc3QgXHUyMDE0IGFuZCBleGl0cyAxLiBTbyBhIG5vbi16ZXJvIGV4aXQgd2l0aFxuICogICAqKmVtcHR5Kiogc3RkZXJyIGlzIG5vdCBgdGFza2xpc3RgIHJlZnVzaW5nOyBpdCBpcyB0aGUgaG9zdCBraWxsaW5nIHRoZVxuICogICBjaGlsZCwgYW5kIGBjcmFzaGVkYCBzYXlzIHNvLlxuICogLSBUaGUgZXhhY3Qgc3Bhd24gdGhlIGhhcm5lc3MgbWFrZXMgc3VjY2VlZHMgMzkgdGltZXMgb3V0IG9mIDM5IGZyb20gYW4gaWRsZVxuICogICBOb2RlIHByb2Nlc3MgKDAuNi00LjNzLCAyNiBLQiwgfjUzMCByb3dzLCBhZ2FpbnN0IGEgMzBzIGJ1ZGdldCBhbmQgYW4gOCBNQlxuICogICBjZWlsaW5nKS4gU28gXCJ0aGUgc3Bhd24gaXMgd3JvbmdcIiBcdTIwMTQgYSBtaXNzaW5nIHNoZWxsLCBhIFBBVEggdGhlIGNoaWxkIGRpZFxuICogICBub3QgaW5oZXJpdCwgYW4gdW5kZXJzaXplZCBidWZmZXIgXHUyMDE0IGlzIHJ1bGVkIG91dDogZWFjaCBoYXMgaXRzICoqb3duKiogbWVzc2FnZVxuICogICAoYHNwYXduIHRhc2tsaXN0IEVOT0VOVGAsIGBzdGRvdXQgbWF4QnVmZmVyIGxlbmd0aCBleGNlZWRlZGApLCBhbmQgbm9uZSBvZlxuICogICB0aGVtIGlzIHRoZSBvbmUgb2JzZXJ2ZWQuXG4gKiAtIFVuZGVyIGFuIGVtdWxhdG9yIGJvb3QgdGhlIHNhbWUgY2FsbCBpbmZsYXRlcyB0byB+OXggaXRzIGlkbGUgY29zdCwgd2hpY2hcbiAqICAgaXMgdGhlIGNvbnRlbnRpb24gYEhPU1RfUFJPQ0VTU19RVUVSWV9USU1FT1VUX0lOX01JTExJU0VDT05EU2AgaXMgc2l6ZWRcbiAqICAgZm9yIGFuZCB0aGUgZmFpbHVyZSB0aGUgb2xkIGxpbmUgY291bGQgbm90IGRpc3Rpbmd1aXNoIGZyb20gYSBjcmFzaC5cbiAqXG4gKiBUaGlzIGlzIHRoZSBzYW1lIGZhdWx0IGBhdmQtcHJvYmUtdmVyZGljdC50c2Agd2FzIHdyaXR0ZW4gZm9yIFx1MjAxNCBhIHByb2JlIHRoYXRcbiAqIGRpc2NhcmRlZCBpdHMgZXJyb3IsIGxlYXZpbmcgXCJuZXZlciBhbnN3ZXJlZFwiIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gXCJ0aGVcbiAqIGFuc3dlciBpcyBub1wiIFx1MjAxNCBhbmQgaXQgaXMgZml4ZWQgdGhlIHNhbWUgd2F5OiBjbGFzc2lmeSwgbmFtZSB0aGVcbiAqIGNvbnNlcXVlbmNlLCBhbmQga2VlcCB0aGUgY2xhc3NpZmljYXRpb24gcHVyZSBzbyBpdCBpcyB1bml0LXRlc3RhYmxlIHdoaWxlXG4gKiB0aGUgYGV4ZWNGaWxlYCBnbHVlIHN0YXlzIGluIHRoZSBpbnRlZ3JhdGlvbi1vbmx5IGNhbGxlci5cbiAqL1xuXG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJy4vdHlwZS1ndWFyZHMubWpzJztcblxuLyoqXG4gKiBUaGUgbG93ZXN0IGV4aXQgY29kZSBXaW5kb3dzIHJlc2VydmVzIGZvciBhbiBgTlRTVEFUVVNgIGZhaWx1cmUuXG4gKlxuICogQSBjaGlsZCBraWxsZWQgYnkgdGhlIE9TIFx1MjAxNCBhbiBhY2Nlc3MgdmlvbGF0aW9uLCBhIHN0YWNrIG92ZXJmbG93IFx1MjAxNCBleGl0cyB3aXRoXG4gKiBpdHMgYE5UU1RBVFVTYCBhcyB0aGUgY29kZSwgYW5kIGAweEMwMDAwMDA1YCBpcyB1bnJlYWRhYmxlIGluIGRlY2ltYWxcbiAqIChgMzIyMTIyNTQ3N2ApLiBDb2RlcyBhdCBvciBhYm92ZSB0aGlzIGFyZSB0aGVyZWZvcmUgcmVwb3J0ZWQgaW4gaGV4LCB3aGljaFxuICogaXMgdGhlIG9ubHkgZm9ybSBhIHJlYWRlciBjYW4gbG9vayB1cC5cbiAqL1xuY29uc3QgTlRTVEFUVVNfRkFJTFVSRV9GTE9PUiA9IDB4QzBfMDBfMDBfMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgYW4gYE5UU1RBVFVTYCBleGl0IGNvZGUgaXMgcmVuZGVyZWQgaW4uXG4gKi9cbmNvbnN0IEhFWEFERUNJTUFMX1JBRElYID0gMTY7XG5cbi8qKlxuICogTWlsbGlzZWNvbmRzIGluIGEgc2Vjb25kLCBmb3IgcmVuZGVyaW5nIGEgZHVyYXRpb24uXG4gKi9cbmNvbnN0IE1JTExJU0VDT05EU19QRVJfU0VDT05EID0gMTAwMDtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgYnVpbGRIb3N0UHJvY2Vzc1F1ZXJ5TWVzc2FnZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRIb3N0UHJvY2Vzc1F1ZXJ5TWVzc2FnZVBhcmFtcyB7XG4gIC8qKlxuICBUaGUgY29tbWFuZCB0aGF0IHdhcyBydW4sIGZvciB0aGUgcmVhZGVyIHRvIHRyeSBieSBoYW5kIFx1MjAxNCBlLmcuIGB0YXNrbGlzdCAvRk8gQ1NWIC9OSGAuXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFdoYXQgdGhlIGZhaWx1cmUgY29zdHMgdGhlIGNhbGxlciwgY2xvc2luZyB0aGUgbGluZS4gRGVmYXVsdHMgdG8gdGhlIHRlYXJkb3duIGNvbnNlcXVlbmNlLCB3aGljaCBpcyB3aGF0IHRoZSBoYXJuZXNzJ3Mgb3duIGxpc3RpbmcgbG9zZXM7IHRoZSB3ZWRnZSBwcm9iZSBzdGF0ZXMgd2hhdCAqaXQqIGxvc2VzIGluc3RlYWQuXG4gICAqL1xuICByZWFkb25seSBjb25zZXF1ZW5jZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgSG93IGxvbmcgdGhlIGNhbGwgdG9vayBiZWZvcmUgaXQgZW5kZWQsIGluIG1pbGxpc2Vjb25kcy5cbiAgICovXG4gIHJlYWRvbmx5IGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuXG4gIC8qKlxuICBUaGUgY2hpbGQncyBleGl0IGNvZGUsIHdoZW4gaXQgZXhpdGVkIHJhdGhlciB0aGFuIGZhaWxpbmcgdG8gc3RhcnQgb3IgYmVpbmcga2lsbGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhpdENvZGU6IG51bGwgfCBudW1iZXI7XG5cbiAgLyoqXG4gIFRoZSB2ZXJkaWN0IGZyb20ge0BsaW5rIHJlc29sdmVIb3N0UHJvY2Vzc1F1ZXJ5T3V0Y29tZX0uXG4gICAqL1xuICByZWFkb25seSBvdXRjb21lOiBIb3N0UHJvY2Vzc1F1ZXJ5T3V0Y29tZTtcblxuICAvKipcbiAgSG93IG1hbnkgcHJvY2Vzc2VzIHRoZSBvdXRwdXQgcGFyc2VkIHRvIFx1MjAxNCB0aGUgKnBhcnRpYWwqIGxpc3Rpbmcgb24gYSBmYWlsdXJlLCB3aGljaCBpcyB0aGUgZXZpZGVuY2UgdGhhdCB0aGUgY29tbWFuZCB3YXMgd29ya2luZyB3aGVuIGl0IGRpZWQuXG4gICAqL1xuICByZWFkb25seSBwYXJ0aWFsUm93Q291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgVGhlIHNpZ25hbCB0aGUgY2hpbGQgd2FzIGtpbGxlZCB3aXRoLCB3aGVuIGl0IHdhcyBraWxsZWQuXG4gICAqL1xuICByZWFkb25seSBzaWduYWw6IG51bGwgfCBzdHJpbmc7XG5cbiAgLyoqXG4gIFdoYXRldmVyIHRoZSBjaGlsZCB3cm90ZSB0byBzdGRlcnIgXHUyMDE0IHF1b3RlZCBmb3IgYHJlZnVzZWRgLCBhbmQgdGhlIGVtcHRpbmVzcyB0aGF0IGlkZW50aWZpZXMgYGNyYXNoZWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhbmRhcmRFcnJvcjogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgYnVkZ2V0IHRoZSBjYWxsIHdhcyBnaXZlbiwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogSG93IHRoZSBob3N0IHByb2Nlc3MgbGlzdGluZyBlbmRlZC5cbiAqXG4gKiBgbGlzdGVkYCBpcyB0aGUgb25seSBzdWNjZXNzLiBUaGUgcmVzdCBhcmUgZGlzdGluY3QgZmFpbHVyZXMgb24gcHVycG9zZTogdGhleVxuICogbmVlZCBkaWZmZXJlbnQgZml4ZXMsIGFuZCB0aGUgbGluZSB0aGV5IHVzZWQgdG8gc2hhcmUgbmFtZWQgbm9uZSBvZiB0aGVtLlxuICovXG5leHBvcnQgdHlwZSBIb3N0UHJvY2Vzc1F1ZXJ5T3V0Y29tZSA9ICdsaXN0ZWQnIHwgJ3plcm8tcm93cycgfCBIb3N0UXVlcnlGYWlsdXJlO1xuXG4vKipcbiAqIFRoZSB3YXlzIGEgaG9zdCBxdWVyeSBjYW4gZmFpbCwgc2hhcmVkIGJ5IGV2ZXJ5IHF1ZXJ5IHRoYXQgY2xhc3NpZmllcyBpdHMgZW5kaW5nLlxuICovXG5leHBvcnQgdHlwZSBIb3N0UXVlcnlGYWlsdXJlID0gJ2NyYXNoZWQnIHwgJ25vdC1mb3VuZCcgfCAnb3V0cHV0LW92ZXJyYW4nIHwgJ3JlZnVzZWQnIHwgJ3RpbWVkLW91dCc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVIb3N0UHJvY2Vzc1F1ZXJ5T3V0Y29tZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZUhvc3RQcm9jZXNzUXVlcnlPdXRjb21lUGFyYW1zIHtcbiAgLyoqXG4gIGBleGVjRmlsZWAncyBgZXJyb3IuY29kZWA6IHRoZSBudW1lcmljIGV4aXQgY29kZSwgb3IgYSBzdHJpbmcgbGlrZSBgRU5PRU5UYCB3aGVuIHRoZSBjaGlsZCBuZXZlciByYW4uXG4gICAqL1xuICByZWFkb25seSBlcnJvckNvZGU6IG51bGwgfCBudW1iZXIgfCBzdHJpbmc7XG5cbiAgLyoqXG4gIFdoZXRoZXIgYGV4ZWNGaWxlYCByZXBvcnRlZCBhbiBlcnJvciBhdCBhbGwuXG4gICAqL1xuICByZWFkb25seSBoYXNGYWlsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gIFdoZXRoZXIgYSAqKmZpbHRlcmVkKiogcXVlcnkgYWZmaXJtYXRpdmVseSByZXBvcnRlZCB0aGF0IG5vdGhpbmcgbWF0Y2hlZCAoYGNoZWNrSXNOb01hdGNoUmVwb3J0ZWRgKSBcdTIwMTQgdGhlIG9uZSB3YXkgYW4gZW1wdHkgYW5zd2VyIGlzIGFuIGFuc3dlci5cbiAgICovXG4gIHJlYWRvbmx5IGhhc1JlcG9ydGVkTm9NYXRjaDogYm9vbGVhbjtcblxuICAvKipcbiAgYGV4ZWNGaWxlYCdzIGBlcnJvci5raWxsZWRgOiB3aGV0aGVyIHRoZSBidWRnZXQgZXhwaXJlZCBhbmQgdGhlIGNoaWxkIHdhcyBraWxsZWQuXG4gICAqL1xuICByZWFkb25seSBpc0tpbGxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgSG93IG1hbnkgcHJvY2Vzc2VzIHRoZSBvdXRwdXQgcGFyc2VkIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcm93Q291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgV2hhdGV2ZXIgdGhlIGNoaWxkIHdyb3RlIHRvIHN0ZGVyci5cbiAgICovXG4gIHJlYWRvbmx5IHN0YW5kYXJkRXJyb3I6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUhvc3RRdWVyeUZhaWx1cmV9LlxuICovXG5leHBvcnQgdHlwZSBSZXNvbHZlSG9zdFF1ZXJ5RmFpbHVyZVBhcmFtcyA9IFBpY2s8UmVzb2x2ZUhvc3RQcm9jZXNzUXVlcnlPdXRjb21lUGFyYW1zLCAnZXJyb3JDb2RlJyB8ICdpc0tpbGxlZCcgfCAnc3RhbmRhcmRFcnJvcic+O1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgc2luZ2xlIGxpbmUgdGhlIGxpc3RpbmcgbG9ncyBmb3IgYW4gb3V0Y29tZS5cbiAqXG4gKiBPbmUgbGluZSwgbmV2ZXIgdHdvOiB0aGUgY29udHJhZGljdG9yeSBwYWlyIGluIHRoaXMgZmlsZSdzIGhlYWRlciBpcyB0aGVcbiAqIGRlZmVjdCB0aGlzIHJlcGxhY2VzLiBgbGlzdGVkYCBoYXMgbm90aGluZyB0byByZXBvcnQsIHNvIGl0IHJldHVybnNcbiAqIGB1bmRlZmluZWRgIHJhdGhlciB0aGFuIGEgY2hlZXJmdWwgbGluZSBvbiB0aGUgaG90IHBhdGguXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBvdXRjb21lIHBsdXMgdGhlIGNvbW1hbmQsIHRoZSBidWRnZXQgYW5kIHdoYXQgdGhlIGNoaWxkIGxlZnQgYmVoaW5kLlxuICogQHJldHVybnMgVGhlIHdhcm5pbmcgdG8gbG9nLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSBsaXN0aW5nIHN1Y2NlZWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSG9zdFByb2Nlc3NRdWVyeU1lc3NhZ2UocGFyYW1zOiBCdWlsZEhvc3RQcm9jZXNzUXVlcnlNZXNzYWdlUGFyYW1zKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY29zdCA9IGBhZnRlciAke2Zvcm1hdER1cmF0aW9uKHBhcmFtcy5lbGFwc2VkSW5NaWxsaXNlY29uZHMpfWA7XG4gIGNvbnN0IGNvbnNlcXVlbmNlID0gcGFyYW1zLmNvbnNlcXVlbmNlID8/ICdUZWFyZG93biBmYWxscyBiYWNrIHRvIGBhZGIgZGV2aWNlc2AgYWxvbmUgYW5kIGhhcyBubyBQSUQgdG8gZXNjYWxhdGUgdG8uJztcblxuICBzd2l0Y2ggKHBhcmFtcy5vdXRjb21lKSB7XG4gICAgY2FzZSAnY3Jhc2hlZCc6IHtcbiAgICAgIHJldHVybiBgV2FybmluZzogXFxgJHtwYXJhbXMuY29tbWFuZH1cXGAgZGllZCAke2Nvc3R9IHdpdGhvdXQgZXhwbGFpbmluZyBpdHNlbGYgKGV4aXQgJHtmb3JtYXRFeGl0Q29kZShwYXJhbXMuZXhpdENvZGUpfSwgbm90aGluZyBvbiBzdGRlcnIsICR7U3RyaW5nKHBhcmFtcy5wYXJ0aWFsUm93Q291bnQpfSBwcm9jZXNzKGVzKSBsaXN0ZWQpIFx1MjAxNCBpdCBkaWQgbm90IHJlZnVzZSB0aGUgcmVxdWVzdCwgc2luY2UgaXQgYWx3YXlzIGV4cGxhaW5zIGEgcmVmdXNhbCBvbiBzdGRlcnIuIFN1c3BlY3QgYSBjcmFzaCBvciBhbiBpbnRlcmZlcmluZyBzZWN1cml0eSBwcm9kdWN0LCBhbmQgdHJ5IHRoZSBjb21tYW5kIGJ5IGhhbmQuICR7Y29uc2VxdWVuY2V9YDtcbiAgICB9XG4gICAgY2FzZSAnbGlzdGVkJzoge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY2FzZSAnbm90LWZvdW5kJzoge1xuICAgICAgcmV0dXJuIGBXYXJuaW5nOiBcXGAke3BhcmFtcy5jb21tYW5kfVxcYCBjb3VsZCBub3QgYmUgcnVuIGF0IGFsbCAke2Nvc3R9OiB0aGUgZXhlY3V0YWJsZSB3YXMgbm90IGZvdW5kIG9uIFBBVEguICR7Y29uc2VxdWVuY2V9YDtcbiAgICB9XG4gICAgY2FzZSAnb3V0cHV0LW92ZXJyYW4nOiB7XG4gICAgICByZXR1cm4gYFdhcm5pbmc6IFxcYCR7cGFyYW1zLmNvbW1hbmR9XFxgIHByb2R1Y2VkIG1vcmUgb3V0cHV0ICR7Y29zdH0gdGhhbiB0aGUgbGlzdGluZydzIGJ1ZmZlciBhbGxvd3MsIHNvIG5vbmUgb2YgaXQgY291bGQgYmUgcmVhZC4gUmFpc2UgdGhlIGJ1ZmZlci4gJHtjb25zZXF1ZW5jZX1gO1xuICAgIH1cbiAgICBjYXNlICdyZWZ1c2VkJzoge1xuICAgICAgcmV0dXJuIGBXYXJuaW5nOiBcXGAke3BhcmFtcy5jb21tYW5kfVxcYCByZWZ1c2VkIHRoZSByZXF1ZXN0ICR7Y29zdH0gKGV4aXQgJHtmb3JtYXRFeGl0Q29kZShwYXJhbXMuZXhpdENvZGUpfSk6ICR7Zm9ybWF0UmVmdXNhbChwYXJhbXMuc3RhbmRhcmRFcnJvcil9ICR7Y29uc2VxdWVuY2V9YDtcbiAgICB9XG4gICAgY2FzZSAndGltZWQtb3V0Jzoge1xuICAgICAgcmV0dXJuIGBXYXJuaW5nOiBcXGAke3BhcmFtcy5jb21tYW5kfVxcYCBkaWQgbm90IGZpbmlzaCB3aXRoaW4gaXRzICR7Zm9ybWF0RHVyYXRpb24ocGFyYW1zLnRpbWVvdXRJbk1pbGxpc2Vjb25kcyl9IGJ1ZGdldCBhbmQgd2FzIGtpbGxlZCAke2Nvc3R9JHtwYXJhbXMuc2lnbmFsID09PSBudWxsID8gJycgOiBgICgke3BhcmFtcy5zaWduYWx9KWB9LCBoYXZpbmcgbGlzdGVkICR7U3RyaW5nKHBhcmFtcy5wYXJ0aWFsUm93Q291bnQpfSBwcm9jZXNzKGVzKSBieSB0aGVuIFx1MjAxNCBzbyBpdCB3YXMgd29ya2luZywgbm90IHJlZnVzaW5nLCBhbmQgdGhlIGJ1ZGdldCBpcyB3aGF0IHJhbiBvdXQuIFRoZSBwYXJ0aWFsIGxpc3RpbmcgaXMgZGlzY2FyZGVkIHJhdGhlciB0aGFuIHVzZWQ6IHRoZSBvd25lZCBzZXQgaXMgYSAqZGlmZmVyZW5jZSogYmV0d2VlbiB0d28gbGlzdGluZ3MsIGFuZCBhIHRydW5jYXRlZCBvbmUgb24gZWl0aGVyIHNpZGUgd291bGQgYm90aCBtaXNzIGEgcHJvY2VzcyB0aGlzIHJ1biBvd25zIGFuZCBjbGFpbSBvbmUgaXQgZG9lcyBub3QuICR7Y29uc2VxdWVuY2V9YDtcbiAgICB9XG4gICAgY2FzZSAnemVyby1yb3dzJzoge1xuICAgICAgcmV0dXJuIGBXYXJuaW5nOiBcXGAke3BhcmFtcy5jb21tYW5kfVxcYCBleGl0ZWQgY2xlYW5seSAke2Nvc3R9IGJ1dCBpdHMgb3V0cHV0IHBhcnNlZCB0byBubyBwcm9jZXNzZXMgYW5kIGNhcnJpZWQgbm8gbm8tbWF0Y2ggbm90aWNlIFx1MjAxNCBhIHdob2xlLWhvc3QgbGlzdGluZyBjYW5ub3QgYmUgZW1wdHkgb24gYSBydW5uaW5nIGhvc3QsIGFuZCBhIGZpbHRlcmVkIG9uZSBzYXlzIHNvIHdoZW4gbm90aGluZyBtYXRjaGVzLiBUcmVhdGluZyBpdCBhcyBhIGZhaWxlZCBxdWVyeS4gJHtjb25zZXF1ZW5jZX1gO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gYXNzZXJ0TmV2ZXIocGFyYW1zLm91dGNvbWUpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBtaWxsaXNlY29uZCBkdXJhdGlvbiBmb3IgYSBsb2cgbGluZS5cbiAqXG4gKiBAcGFyYW0gZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyAtIFRoZSBkdXJhdGlvbi5cbiAqIEByZXR1cm5zIFdob2xlIG1pbGxpc2Vjb25kcyB1bmRlciBhIHNlY29uZCwgYW5kIHNlY29uZHMgdG8gb25lIGRlY2ltYWwgYWJvdmUgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREdXJhdGlvbihkdXJhdGlvbkluTWlsbGlzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA8IE1JTExJU0VDT05EU19QRVJfU0VDT05EXG4gICAgPyBgJHtTdHJpbmcoZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyl9bXNgXG4gICAgOiBgJHsoZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyAvIE1JTExJU0VDT05EU19QRVJfU0VDT05EKS50b0ZpeGVkKDEpfXNgO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBjaGlsZCdzIGV4aXQgY29kZSwgaW4gdGhlIGJhc2UgYSByZWFkZXIgY2FuIGxvb2sgaXQgdXAgaW4uXG4gKlxuICogQHBhcmFtIGV4aXRDb2RlIC0gVGhlIGV4aXQgY29kZSwgb3IgYG51bGxgIHdoZW4gdGhlIGNoaWxkIHdhcyBraWxsZWQgYmVmb3JlIGV4aXRpbmcuXG4gKiBAcmV0dXJucyBUaGUgY29kZSBpbiBoZXggd2hlbiBpdCBpcyBhbiBgTlRTVEFUVVNgIGZhaWx1cmUsIGluIGRlY2ltYWwgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RXhpdENvZGUoZXhpdENvZGU6IG51bGwgfCBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAoZXhpdENvZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ3Vua25vd24nO1xuICB9XG5cbiAgcmV0dXJuIGV4aXRDb2RlID49IE5UU1RBVFVTX0ZBSUxVUkVfRkxPT1IgPyBgMHgke2V4aXRDb2RlLnRvU3RyaW5nKEhFWEFERUNJTUFMX1JBRElYKS50b1VwcGVyQ2FzZSgpfWAgOiBTdHJpbmcoZXhpdENvZGUpO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgd2hhdCB0aGUgY29tbWFuZCBzYWlkIHdoZW4gaXQgcmVmdXNlZCwgYXMgb25lIHNlbnRlbmNlLlxuICpcbiAqIGB0YXNrbGlzdGAgZW5kcyBpdHMgb3duIGBFUlJPUjogXHUyMDI2YCB3aXRoIGEgcGVyaW9kIGFuZCBhIGBcXHJcXHJcXG5gLCBzbyBxdW90aW5nIGl0XG4gKiB2ZXJiYXRpbSBhbmQgYWRkaW5nIHRoZSBzZW50ZW5jZSBicmVhayB0aGlzIGxpbmUgbmVlZHMgcHJvZHVjZWQgYHJlY29nbml6ZWQuLmBcbiAqIFx1MjAxNCB0aGUgdGVybWluYXRvciBpcyBzdXBwbGllZCBvbmx5IHdoZW4gdGhlIHRvb2wgZGlkIG5vdCBzdXBwbHkgb25lLlxuICpcbiAqIEBwYXJhbSBzdGFuZGFyZEVycm9yIC0gV2hhdGV2ZXIgdGhlIGNoaWxkIHdyb3RlIHRvIHN0ZGVyci5cbiAqIEByZXR1cm5zIFRoZSByZWZ1c2FsLCB0cmltbWVkLCBlbmRpbmcgaW4gZXhhY3RseSBvbmUgcGVyaW9kLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UmVmdXNhbChzdGFuZGFyZEVycm9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZWZ1c2FsID0gc3RhbmRhcmRFcnJvci50cmltKCk7XG5cbiAgcmV0dXJuIHJlZnVzYWwuZW5kc1dpdGgoJy4nKSA/IHJlZnVzYWwgOiBgJHtyZWZ1c2FsfS5gO1xufVxuXG4vKipcbiAqIERlY2lkZXMgaG93IHRoZSBsaXN0aW5nIGVuZGVkLCBmcm9tIHdoYXQgYGV4ZWNGaWxlYCByZXBvcnRlZC5cbiAqXG4gKiBUaGUgb3JkZXIgb2YgdGhlIGJyYW5jaGVzIGlzIHRoZSBvcmRlciBvZiBzcGVjaWZpY2l0eTogdGhlIHR3byBmYWlsdXJlcyBOb2RlXG4gKiBuYW1lcyBpdHNlbGYgKGBFTk9FTlRgLCB0aGUgYnVmZmVyIGNlaWxpbmcpIGFyZSByZWNvZ25pemVkIGJlZm9yZSB0aGUgb25lc1xuICogdGhhdCBoYXZlIHRvIGJlIGluZmVycmVkIGZyb20gdGhlIGNoaWxkJ3MgZXhpdCwgYW5kIGBjcmFzaGVkYCBpcyBsYXN0XG4gKiBiZWNhdXNlIGl0IGlzIGRlZmluZWQgYnkgdGhlICphYnNlbmNlKiBvZiBhbiBleHBsYW5hdGlvbiBvbiBzdGRlcnIuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFdoYXQgYGV4ZWNGaWxlYCByZXBvcnRlZCwgYW5kIGhvdyBtYW55IHJvd3MgdGhlIG91dHB1dCBwYXJzZWQgdG8uXG4gKiBAcmV0dXJucyBUaGUgb3V0Y29tZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVIb3N0UHJvY2Vzc1F1ZXJ5T3V0Y29tZShwYXJhbXM6IFJlc29sdmVIb3N0UHJvY2Vzc1F1ZXJ5T3V0Y29tZVBhcmFtcyk6IEhvc3RQcm9jZXNzUXVlcnlPdXRjb21lIHtcbiAgaWYgKCFwYXJhbXMuaGFzRmFpbGVkKSB7XG4gICAgLypcbiAgICAgKiBBIGhvc3QgYWx3YXlzIGhhcyBwcm9jZXNzZXMsIHNvIGEgd2hvbGUtaG9zdCBsaXN0aW5nIHRoYXQgcGFyc2VzIHRvIG5vdGhpbmcgaXMgYSBmYWlsZWQgcXVlcnkgaG93ZXZlciBpdFxuICAgICAqIGV4aXRlZC4gQSBmaWx0ZXJlZCBvbmUgbWF5IGxlZ2l0aW1hdGVseSBtYXRjaCBub3RoaW5nIFx1MjAxNCBidXQgb25seSB3aGVuIGl0IHNheXMgc287IHNpbGVuY2UgaXMgc3RpbGwgYSBmYWlsdXJlLlxuICAgICAqL1xuICAgIHJldHVybiBwYXJhbXMucm93Q291bnQgPT09IDAgJiYgIXBhcmFtcy5oYXNSZXBvcnRlZE5vTWF0Y2ggPyAnemVyby1yb3dzJyA6ICdsaXN0ZWQnO1xuICB9XG5cbiAgcmV0dXJuIHJlc29sdmVIb3N0UXVlcnlGYWlsdXJlKHBhcmFtcyk7XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGljaCB3YXkgYSBob3N0IHF1ZXJ5IHRoYXQgKipkaWQqKiBmYWlsIGZhaWxlZC5cbiAqXG4gKiBTcGxpdCBvdXQgb2Yge0BsaW5rIHJlc29sdmVIb3N0UHJvY2Vzc1F1ZXJ5T3V0Y29tZX0gc28gYSBzaWJsaW5nIHF1ZXJ5IHdob3NlXG4gKiBzdWNjZXNzIHJ1bGVzIGRpZmZlciBcdTIwMTQgdGhlIHBvcnQtb3duZXIgcXVlcnksIHdoZXJlIHplcm8gb3duZXJzIGlzIGFuIGFuc3dlciBcdTIwMTRcbiAqIGNhbiBzaGFyZSBvbmUgZGVmaW5pdGlvbiBvZiBlYWNoIGZhaWx1cmUgd2l0aG91dCBpbmhlcml0aW5nIGBsaXN0ZWRgIGFuZFxuICogYHplcm8tcm93c2AuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFdoYXQgYGV4ZWNGaWxlYCByZXBvcnRlZCBmb3IgdGhlIGZhaWxlZCBjYWxsLlxuICogQHJldHVybnMgVGhlIGZhaWx1cmUgb3V0Y29tZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVIb3N0UXVlcnlGYWlsdXJlKHBhcmFtczogUmVzb2x2ZUhvc3RRdWVyeUZhaWx1cmVQYXJhbXMpOiBIb3N0UXVlcnlGYWlsdXJlIHtcbiAgaWYgKHBhcmFtcy5lcnJvckNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgcmV0dXJuICdub3QtZm91bmQnO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5lcnJvckNvZGUgPT09ICdFUlJfQ0hJTERfUFJPQ0VTU19TVERJT19NQVhCVUZGRVInKSB7XG4gICAgcmV0dXJuICdvdXRwdXQtb3ZlcnJhbic7XG4gIH1cblxuICBpZiAocGFyYW1zLmlzS2lsbGVkKSB7XG4gICAgcmV0dXJuICd0aW1lZC1vdXQnO1xuICB9XG5cbiAgLy8gYHRhc2tsaXN0YCBhbmQgYHBzYCBib3RoIGV4cGxhaW4gYSByZWZ1c2FsIG9uIHN0ZGVyciwgc28gc2lsZW5jZSBtZWFucyB0aGUgY2hpbGQgbmV2ZXIgZ290IHRvIG9iamVjdC5cbiAgcmV0dXJuIHBhcmFtcy5zdGFuZGFyZEVycm9yLnRyaW0oKSA9PT0gJycgPyAnY3Jhc2hlZCcgOiAncmVmdXNlZCc7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFvREEsU0FBUyxtQkFBbUI7QUFVNUIsTUFBTSx5QkFBeUI7QUFLL0IsTUFBTSxvQkFBb0I7QUFLMUIsTUFBTSwwQkFBMEI7QUFtSHpCLFNBQVMsNkJBQTZCLFFBQWdFO0FBQzNHLFFBQU0sT0FBTyxTQUFTLGVBQWUsT0FBTyxxQkFBcUIsQ0FBQztBQUNsRSxRQUFNLGNBQWMsT0FBTyxlQUFlO0FBRTFDLFVBQVEsT0FBTyxTQUFTO0FBQUEsSUFDdEIsS0FBSyxXQUFXO0FBQ2QsYUFBTyxjQUFjLE9BQU8sT0FBTyxXQUFXLElBQUksb0NBQW9DLGVBQWUsT0FBTyxRQUFRLENBQUMsd0JBQXdCLE9BQU8sT0FBTyxlQUFlLENBQUMsNkxBQXdMLFdBQVc7QUFBQSxJQUNoWDtBQUFBLElBQ0EsS0FBSyxVQUFVO0FBQ2IsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEtBQUssYUFBYTtBQUNoQixhQUFPLGNBQWMsT0FBTyxPQUFPLDhCQUE4QixJQUFJLDJDQUEyQyxXQUFXO0FBQUEsSUFDN0g7QUFBQSxJQUNBLEtBQUssa0JBQWtCO0FBQ3JCLGFBQU8sY0FBYyxPQUFPLE9BQU8sMkJBQTJCLElBQUkscUZBQXFGLFdBQVc7QUFBQSxJQUNwSztBQUFBLElBQ0EsS0FBSyxXQUFXO0FBQ2QsYUFBTyxjQUFjLE9BQU8sT0FBTywwQkFBMEIsSUFBSSxVQUFVLGVBQWUsT0FBTyxRQUFRLENBQUMsTUFBTSxjQUFjLE9BQU8sYUFBYSxDQUFDLElBQUksV0FBVztBQUFBLElBQ3BLO0FBQUEsSUFDQSxLQUFLLGFBQWE7QUFDaEIsYUFBTyxjQUFjLE9BQU8sT0FBTyxnQ0FBZ0MsZUFBZSxPQUFPLHFCQUFxQixDQUFDLDBCQUEwQixJQUFJLEdBQUcsT0FBTyxXQUFXLE9BQU8sS0FBSyxLQUFLLE9BQU8sTUFBTSxHQUFHLG1CQUFtQixPQUFPLE9BQU8sZUFBZSxDQUFDLCtTQUEwUyxXQUFXO0FBQUEsSUFDM2lCO0FBQUEsSUFDQSxLQUFLLGFBQWE7QUFDaEIsYUFBTyxjQUFjLE9BQU8sT0FBTyxxQkFBcUIsSUFBSSx3TkFBbU4sV0FBVztBQUFBLElBQzVSO0FBQUEsSUFDQSxTQUFTO0FBQ1AsYUFBTyxZQUFZLE9BQU8sT0FBTztBQUFBLElBQ25DO0FBQUEsRUFDRjtBQUNGO0FBUU8sU0FBUyxlQUFlLHdCQUF3QztBQUNyRSxTQUFPLHlCQUF5QiwwQkFDNUIsR0FBRyxPQUFPLHNCQUFzQixDQUFDLE9BQ2pDLElBQUkseUJBQXlCLHlCQUF5QixRQUFRLENBQUMsQ0FBQztBQUN0RTtBQVFPLFNBQVMsZUFBZSxVQUFpQztBQUM5RCxNQUFJLGFBQWEsTUFBTTtBQUNyQixXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU8sWUFBWSx5QkFBeUIsS0FBSyxTQUFTLFNBQVMsaUJBQWlCLEVBQUUsWUFBWSxDQUFDLEtBQUssT0FBTyxRQUFRO0FBQ3pIO0FBWU8sU0FBUyxjQUFjLGVBQStCO0FBQzNELFFBQU0sVUFBVSxjQUFjLEtBQUs7QUFFbkMsU0FBTyxRQUFRLFNBQVMsR0FBRyxJQUFJLFVBQVUsR0FBRyxPQUFPO0FBQ3JEO0FBYU8sU0FBUywrQkFBK0IsUUFBdUU7QUFDcEgsTUFBSSxDQUFDLE9BQU8sV0FBVztBQUtyQixXQUFPLE9BQU8sYUFBYSxLQUFLLENBQUMsT0FBTyxxQkFBcUIsY0FBYztBQUFBLEVBQzdFO0FBRUEsU0FBTyx3QkFBd0IsTUFBTTtBQUN2QztBQWFPLFNBQVMsd0JBQXdCLFFBQXlEO0FBQy9GLE1BQUksT0FBTyxjQUFjLFVBQVU7QUFDakMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLE9BQU8sY0FBYyxxQ0FBcUM7QUFDNUQsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLE9BQU8sVUFBVTtBQUNuQixXQUFPO0FBQUEsRUFDVDtBQUdBLFNBQU8sT0FBTyxjQUFjLEtBQUssTUFBTSxLQUFLLFlBQVk7QUFDMUQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -69,6 +69,8 @@ export type { OpenObsidianSettingsTabParams } from './open-obsidian-settings-tab
69
69
  export { openObsidianSettingsTab } from './open-obsidian-settings-tab.mjs';
70
70
  export type { OwnedInstanceExitedErrorConstructorParams } from './owned-instance-exited-error.mjs';
71
71
  export { OwnedInstanceExitedError } from './owned-instance-exited-error.mjs';
72
+ export type { BuildStatusBarBandFailureMessageParams, PaintOutStatusBarOptions, ResolveStatusBarBandParams, StatusBarBandColor, StatusBarBandVerdict } from './paint-out-status-bar.mjs';
73
+ export { buildStatusBarBandFailureMessage, DEFAULT_STATUS_BAR_EDGE_MARGIN_IN_PIXELS, DEFAULT_STATUS_BAR_SAMPLE_INSET_IN_PIXELS, paintOutStatusBar, resolveStatusBarBand } from './paint-out-status-bar.mjs';
72
74
  export type { PollInObsidianParams } from './poll-in-obsidian.mjs';
73
75
  export { pollInObsidian } from './poll-in-obsidian.mjs';
74
76
  export { RendererFailedToInitializeError } from './renderer-failed-to-initialize-error.mjs';
@@ -79,7 +81,7 @@ export { runObsidianVersionMatrix } from './run-version-matrix.mjs';
79
81
  export type { SilentAsarFallbackErrorConstructorParams } from './silent-asar-fallback-error.mjs';
80
82
  export { SilentAsarFallbackError } from './silent-asar-fallback-error.mjs';
81
83
  export type { BuildSoftKeyboardDiagnosticMessageParams, CheckIsSoftKeyboardUpParams, ElementRect, ResolveSoftKeyboardTapPointsParams, SoftKeyboardTapPoint, SoftKeyboardViewportSnapshot } from './soft-keyboard-geometry.mjs';
82
- export { buildSoftKeyboardDiagnosticMessage, checkIsSoftKeyboardUp, DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS, parseInputMethodState, resolveSoftKeyboardTapPoints } from './soft-keyboard-geometry.mjs';
84
+ export { buildSoftKeyboardDiagnosticMessage, checkIsInputMethodShown, checkIsSoftKeyboardUp, DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS, parseInputMethodState, resolveSoftKeyboardTapPoints } from './soft-keyboard-geometry.mjs';
83
85
  export type { RaiseSoftKeyboardParams, TapDeviceParams } from './soft-keyboard.mjs';
84
86
  export { raiseSoftKeyboard, tapDevice } from './soft-keyboard.mjs';
85
87
  export type { StaleBuildErrorConstructorParams } from './stale-build-error.mjs';
@@ -87,6 +87,13 @@ import {
87
87
  } from "./obsidian-version.mjs";
88
88
  import { openObsidianSettingsTab } from "./open-obsidian-settings-tab.mjs";
89
89
  import { OwnedInstanceExitedError } from "./owned-instance-exited-error.mjs";
90
+ import {
91
+ buildStatusBarBandFailureMessage,
92
+ DEFAULT_STATUS_BAR_EDGE_MARGIN_IN_PIXELS,
93
+ DEFAULT_STATUS_BAR_SAMPLE_INSET_IN_PIXELS,
94
+ paintOutStatusBar,
95
+ resolveStatusBarBand
96
+ } from "./paint-out-status-bar.mjs";
90
97
  import { pollInObsidian } from "./poll-in-obsidian.mjs";
91
98
  import { RendererFailedToInitializeError } from "./renderer-failed-to-initialize-error.mjs";
92
99
  import { resolveEmulatorDeviceId } from "./resolve-emulator-device-id.mjs";
@@ -94,6 +101,7 @@ import { runObsidianVersionMatrix } from "./run-version-matrix.mjs";
94
101
  import { SilentAsarFallbackError } from "./silent-asar-fallback-error.mjs";
95
102
  import {
96
103
  buildSoftKeyboardDiagnosticMessage,
104
+ checkIsInputMethodShown,
97
105
  checkIsSoftKeyboardUp,
98
106
  DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS,
99
107
  parseInputMethodState,
@@ -124,6 +132,8 @@ export {
124
132
  DEFAULT_EVAL_CAP_IN_MILLISECONDS,
125
133
  DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS,
126
134
  DEFAULT_OBSIDIAN_VERSION_SPECS,
135
+ DEFAULT_STATUS_BAR_EDGE_MARGIN_IN_PIXELS,
136
+ DEFAULT_STATUS_BAR_SAMPLE_INSET_IN_PIXELS,
127
137
  DesktopCdpTransport,
128
138
  DesktopOnlyPluginSkipError,
129
139
  DeviceSettingNamespace,
@@ -146,8 +156,10 @@ export {
146
156
  buildDeviceSettingsCommandArguments,
147
157
  buildLabelSvg,
148
158
  buildSoftKeyboardDiagnosticMessage,
159
+ buildStatusBarBandFailureMessage,
149
160
  captureDeviceScreenshot,
150
161
  captureObsidianScreenshot,
162
+ checkIsInputMethodShown,
151
163
  checkIsMobileTransport,
152
164
  checkIsSoftKeyboardUp,
153
165
  computeFitToCanvas,
@@ -167,6 +179,7 @@ export {
167
179
  labelScreenshot,
168
180
  measureLabelCaption,
169
181
  openObsidianSettingsTab,
182
+ paintOutStatusBar,
170
183
  parseInputMethodState,
171
184
  pollInObsidian,
172
185
  raiseSoftKeyboard,
@@ -182,6 +195,7 @@ export {
182
195
  resolveInstallerCompatibility,
183
196
  resolveMissingInjectedPlugins,
184
197
  resolveSoftKeyboardTapPoints,
198
+ resolveStatusBarBand,
185
199
  restoreAppConfig,
186
200
  runAdbBinary,
187
201
  runAdbText,
@@ -198,4 +212,4 @@ export {
198
212
  withSoftKeyboardEnabled,
199
213
  writeDeviceSetting
200
214
  };
201
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUgeyBSdW5BZGJQYXJhbXMgfSBmcm9tICcuL2FkYi5tanMnO1xuZXhwb3J0IHtcbiAgcnVuQWRiQmluYXJ5LFxuICBydW5BZGJUZXh0LFxuICBydW5BZGJUZXh0V2l0aG91dERldmljZVxufSBmcm9tICcuL2FkYi5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBBcHBDb25maWdSZXN0b3JlLFxuICBHZXRBcHBDb25maWdQYXJhbXMsXG4gIFNldEFwcENvbmZpZ1BhcmFtcyxcbiAgV2l0aEFwcENvbmZpZ1BhcmFtc1xufSBmcm9tICcuL2FwcC1jb25maWcubWpzJztcbmV4cG9ydCB7XG4gIGdldEFwcENvbmZpZyxcbiAgcmVzdG9yZUFwcENvbmZpZyxcbiAgc2V0QXBwQ29uZmlnLFxuICB3aXRoQXBwQ29uZmlnXG59IGZyb20gJy4vYXBwLWNvbmZpZy5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBBc2FyRmFsbGJhY2ssXG4gIEFzYXJGYWxsYmFja1RpZXIsXG4gIFJlc29sdmVBc2FyRmFsbGJhY2tQYXJhbXNcbn0gZnJvbSAnLi9hc2FyLWZhbGxiYWNrLWRldGVjdGlvbi5tanMnO1xuZXhwb3J0IHsgcmVzb2x2ZUFzYXJGYWxsYmFjayB9IGZyb20gJy4vYXNhci1mYWxsYmFjay1kZXRlY3Rpb24ubWpzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdE9wdGlvbnMgfSBmcm9tICcuL2NhcHR1cmUtb2JzaWRpYW4tc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHsgY2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdCB9IGZyb20gJy4vY2FwdHVyZS1vYnNpZGlhbi1zY3JlZW5zaG90Lm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLFxuICBQbmdEaW1lbnNpb25zXG59IGZyb20gJy4vY2FwdHVyZS1zY3JlZW5zaG90Lm1qcyc7XG5leHBvcnQge1xuICBidWlsZERldmljZU1ldHJpY3NPdmVycmlkZSxcbiAgZGVjb2RlQmFzZTY0UG5nLFxuICBpc1BuZyxcbiAgcmVhZFBuZ0RpbWVuc2lvbnNcbn0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB0eXBlIHsgQ2RwQ29tbWFuZFRpbWVvdXRFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9jZHAtY29tbWFuZC10aW1lb3V0LWVycm9yLm1qcyc7XG5leHBvcnQgeyBDZHBDb21tYW5kVGltZW91dEVycm9yIH0gZnJvbSAnLi9jZHAtY29tbWFuZC10aW1lb3V0LWVycm9yLm1qcyc7XG5leHBvcnQgdHlwZSB7IENvbmZpZ0RpcmVjdG9yeUZhbGxiYWNrRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS1mYWxsYmFjay1lcnJvci5tanMnO1xuZXhwb3J0IHsgQ29uZmlnRGlyZWN0b3J5RmFsbGJhY2tFcnJvciB9IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS1mYWxsYmFjay1lcnJvci5tanMnO1xuZXhwb3J0IHtcbiAgYXNzZXJ0VmFsaWRDb25maWdEaXJlY3RvcnksXG4gIERFRkFVTFRfQ09ORklHX0RJUkVDVE9SWVxufSBmcm9tICcuL2NvbmZpZy1kaXJlY3RvcnkubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ2RwQ29ubmVjdGlvbixcbiAgQ29ubmVjdFRvQ2RwT3B0aW9uc1xufSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLm1qcyc7XG5leHBvcnQgeyBjb25uZWN0VG9DZHAgfSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENvbnRleHRBcmd1bWVudHMsXG4gIENvbnRleHRPZlxufSBmcm9tICcuL2NvbnRleHQtaWQubWpzJztcbmV4cG9ydCB7IENvbnRleHRJZCB9IGZyb20gJy4vY29udGV4dC1pZC5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBTZXR1cEVycm9yUmVzb2x2ZXIsXG4gIFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgVmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLm1qcyc7XG5leHBvcnQge1xuICBzZXRTZXR1cEVycm9yUmVzb2x2ZXIsXG4gIHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgc2V0VmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXMsXG4gIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNSZXN1bHQsXG4gIEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY1BhcmFtcyxcbiAgSW5zdGFsbGVkUGx1Z2luSW5mb1xufSBmcm9tICcuL2RlbW8tdmF1bHQtYm9vdHN0cmFwLm1qcyc7XG5leHBvcnQge1xuICBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zLFxuICBidWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LWJvb3RzdHJhcC5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zLFxuICBJbmplY3RQbHVnaW5QYXJhbXMsXG4gIFJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zUGFyYW1zXG59IGZyb20gJy4vZGVtby12YXVsdC1wb3B1bGF0ZS5tanMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZSxcbiAgcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLm1qcyc7XG5leHBvcnQgdHlwZSB7IFJlYWREZW1vVmF1bHRUcmVlUGFyYW1zIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUubWpzJztcbmV4cG9ydCB7IHJlYWREZW1vVmF1bHRUcmVlIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUubWpzJztcbmV4cG9ydCB7IERlc2t0b3BPbmx5UGx1Z2luU2tpcEVycm9yIH0gZnJvbSAnLi9kZXNrdG9wLW9ubHktcGx1Z2luLXNraXAtZXJyb3IubWpzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZURldmljZVNjcmVlbnNob3RQYXJhbXMgfSBmcm9tICcuL2RldmljZS1zY3JlZW5zaG90Lm1qcyc7XG5leHBvcnQgeyBjYXB0dXJlRGV2aWNlU2NyZWVuc2hvdCB9IGZyb20gJy4vZGV2aWNlLXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmUsXG4gIERldmljZVNldHRpbmdSZXN0b3JlRGVsZXRlLFxuICBEZXZpY2VTZXR0aW5nUmVzdG9yZVdyaXRlXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmctcmVzdG9yZS5tanMnO1xuZXhwb3J0IHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmVLaW5kLFxuICByZXNvbHZlRGV2aWNlU2V0dGluZ1Jlc3RvcmVcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZy1yZXN0b3JlLm1qcyc7XG5leHBvcnQgdHlwZSB7IEJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzUGFyYW1zIH0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MtY29tbWFuZC5tanMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZXZpY2VTZXR0aW5nc0NvbW1hbmRBcmd1bWVudHMsXG4gIERldmljZVNldHRpbmdOYW1lc3BhY2UsXG4gIERldmljZVNldHRpbmdWZXJiXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmdzLWNvbW1hbmQubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1BhcmFtcyxcbiAgV2l0aFNvZnRLZXlib2FyZEVuYWJsZWRQYXJhbXMsXG4gIFdyaXRlRGV2aWNlU2V0dGluZ1BhcmFtc1xufSBmcm9tICcuL2RldmljZS1zZXR0aW5ncy5tanMnO1xuZXhwb3J0IHtcbiAgZGVsZXRlRGV2aWNlU2V0dGluZyxcbiAgcmVhZERldmljZVNldHRpbmcsXG4gIHdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkLFxuICB3cml0ZURldmljZVNldHRpbmdcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRWxlY3Ryb25Db21wYXRpYmlsaXR5LFxuICBFbGVjdHJvbkNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5UGFyYW1zXG59IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5tanMnO1xuZXhwb3J0IHsgcmVzb2x2ZUVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBFbXVsYXRvckRldmljZUNhbmRpZGF0ZSxcbiAgU2VsZWN0RW11bGF0b3JEZXZpY2VJZFBhcmFtc1xufSBmcm9tICcuL2VtdWxhdG9yLWRldmljZS1pZC5tanMnO1xuZXhwb3J0IHsgc2VsZWN0RW11bGF0b3JEZXZpY2VJZCB9IGZyb20gJy4vZW11bGF0b3ItZGV2aWNlLWlkLm1qcyc7XG5leHBvcnQgdHlwZSB7IEV2YWxDYXBFeGNlZWRlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2V2YWwtY2FwLWV4Y2VlZGVkLWVycm9yLm1qcyc7XG5leHBvcnQge1xuICBFdmFsQ2FwRXhjZWVkZWRFcnJvcixcbiAgaXNTY3JpcHRUaW1lb3V0RXJyb3Jcbn0gZnJvbSAnLi9ldmFsLWNhcC1leGNlZWRlZC1lcnJvci5tanMnO1xuZXhwb3J0IHsgREVGQVVMVF9FVkFMX0NBUF9JTl9NSUxMSVNFQ09ORFMgfSBmcm9tICcuL2V2YWwtY2FwLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENsaWNrRWxlbWVudFBhcmFtcyxcbiAgQ2xpY2tNb3VzZVBhcmFtcyxcbiAgQ29tbW9uQXJndW1lbnRzLFxuICBDcmVhdGVOb3RlUGFyYW1zLFxuICBFdmFsSW5PYnNpZGlhblBhcmFtcyxcbiAgR2VuZXJpY09iamVjdCxcbiAgSG92ZXJFbGVtZW50UGFyYW1zLFxuICBMaWIsXG4gIE1vdXNlQnV0dG9uLFxuICBNb3ZlTW91c2VQYXJhbXMsXG4gIE9wZW5TZXR0aW5nc1RhYlBhcmFtcyxcbiAgUHJlc3NLZXlQYXJhbXMsXG4gIFR5cGVJbnRvRWRpdG9yUGFyYW1zLFxuICBVbmhvdmVyRWxlbWVudFBhcmFtcyxcbiAgV2FpdFVudGlsUGFyYW1zXG59IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5tanMnO1xuZXhwb3J0IHsgZXZhbEluT2JzaWRpYW4gfSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4ubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUZpdFRvQ2FudmFzUGFyYW1zLFxuICBGaXRTY3JlZW5zaG90VG9DYW52YXNPcHRpb25zLFxuICBGaXRUb0NhbnZhc0dlb21ldHJ5XG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB7XG4gIGNvbXB1dGVGaXRUb0NhbnZhcyxcbiAgZml0U2NyZWVuc2hvdFRvQ2FudmFzXG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB0eXBlIHsgSGlkZVZhdWx0TmFtZU9wdGlvbnMgfSBmcm9tICcuL2hpZGUtdmF1bHQtbmFtZS5tanMnO1xuZXhwb3J0IHsgaGlkZVZhdWx0TmFtZSB9IGZyb20gJy4vaGlkZS12YXVsdC1uYW1lLm1qcyc7XG5leHBvcnQgdHlwZSB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9pbmNvbXBhdGlibGUtaW5zdGFsbGVyLXZlcnNpb24tZXJyb3IubWpzJztcbmV4cG9ydCB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvciB9IGZyb20gJy4vaW5jb21wYXRpYmxlLWluc3RhbGxlci12ZXJzaW9uLWVycm9yLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHksXG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eVBhcmFtc1xufSBmcm9tICcuL2luc3RhbGxlci1jb21wYXRpYmlsaXR5Lm1qcyc7XG5leHBvcnQgeyByZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vaW5zdGFsbGVyLWNvbXBhdGliaWxpdHkubWpzJztcbmV4cG9ydCB0eXBlIHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2ludGVncmF0aW9uLXNldHVwLWZhaWxlZC1lcnJvci5tanMnO1xuZXhwb3J0IHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbi1zZXR1cC1mYWlsZWQtZXJyb3IubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUxhYmVsQmFuZFBhcmFtcyxcbiAgTGFiZWxCYW5kR2VvbWV0cnksXG4gIExhYmVsQ2FwdGlvbk1lYXN1cmVtZW50LFxuICBMYWJlbFNjcmVlbnNob3RPcHRpb25zLFxuICBNZWFzdXJlTGFiZWxDYXB0aW9uUGFyYW1zXG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHtcbiAgYnVpbGRMYWJlbFN2ZyxcbiAgY29tcHV0ZUxhYmVsQmFuZCxcbiAgZXNjYXBlU3ZnVGV4dCxcbiAgbGFiZWxTY3JlZW5zaG90LFxuICBtZWFzdXJlTGFiZWxDYXB0aW9uXG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHR5cGUgeyBMaWJSZXNvbHZlciB9IGZyb20gJy4vbGliLXJlZ2lzdHJ5Lm1qcyc7XG5leHBvcnQgeyByZWdpc3RlckxpYlJlc29sdmVyIH0gZnJvbSAnLi9saWItcmVnaXN0cnkubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5SdW50aW1lVmVyc2lvbnMsXG4gIE9ic2lkaWFuVmVyc2lvbkNoYW5nZWxvZ1VybHMsXG4gIE9ic2lkaWFuVmVyc2lvbkRvd25sb2FkcyxcbiAgT2JzaWRpYW5WZXJzaW9uTWV0YWRhdGFcbn0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5tanMnO1xuZXhwb3J0IHsgZ2V0VmVyc2lvbk1ldGFkYXRhIH0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5tanMnO1xuZXhwb3J0IHtcbiAgQ0FUQUxZU1RfTEFURVNULFxuICBQVUJMSUNfTEFURVNUXG59IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5tanMnO1xuZXhwb3J0IHR5cGUgeyBPcGVuT2JzaWRpYW5TZXR0aW5nc1RhYlBhcmFtcyB9IGZyb20gJy4vb3Blbi1vYnNpZGlhbi1zZXR0aW5ncy10YWIubWpzJztcbmV4cG9ydCB7IG9wZW5PYnNpZGlhblNldHRpbmdzVGFiIH0gZnJvbSAnLi9vcGVuLW9ic2lkaWFuLXNldHRpbmdzLXRhYi5tanMnO1xuZXhwb3J0IHR5cGUgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vb3duZWQtaW5zdGFuY2UtZXhpdGVkLWVycm9yLm1qcyc7XG5leHBvcnQgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3IgfSBmcm9tICcuL293bmVkLWluc3RhbmNlLWV4aXRlZC1lcnJvci5tanMnO1xuZXhwb3J0IHR5cGUgeyBQb2xsSW5PYnNpZGlhblBhcmFtcyB9IGZyb20gJy4vcG9sbC1pbi1vYnNpZGlhbi5tanMnO1xuZXhwb3J0IHsgcG9sbEluT2JzaWRpYW4gfSBmcm9tICcuL3BvbGwtaW4tb2JzaWRpYW4ubWpzJztcbmV4cG9ydCB7IFJlbmRlcmVyRmFpbGVkVG9Jbml0aWFsaXplRXJyb3IgfSBmcm9tICcuL3JlbmRlcmVyLWZhaWxlZC10by1pbml0aWFsaXplLWVycm9yLm1qcyc7XG5leHBvcnQgdHlwZSB7IFJlc29sdmVFbXVsYXRvckRldmljZUlkUGFyYW1zIH0gZnJvbSAnLi9yZXNvbHZlLWVtdWxhdG9yLWRldmljZS1pZC5tanMnO1xuZXhwb3J0IHsgcmVzb2x2ZUVtdWxhdG9yRGV2aWNlSWQgfSBmcm9tICcuL3Jlc29sdmUtZW11bGF0b3ItZGV2aWNlLWlkLm1qcyc7XG5leHBvcnQgdHlwZSB7IFJ1bk9ic2lkaWFuVmVyc2lvbk1hdHJpeFBhcmFtcyB9IGZyb20gJy4vcnVuLXZlcnNpb24tbWF0cml4Lm1qcyc7XG5leHBvcnQgeyBydW5PYnNpZGlhblZlcnNpb25NYXRyaXggfSBmcm9tICcuL3J1bi12ZXJzaW9uLW1hdHJpeC5tanMnO1xuZXhwb3J0IHR5cGUgeyBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9zaWxlbnQtYXNhci1mYWxsYmFjay1lcnJvci5tanMnO1xuZXhwb3J0IHsgU2lsZW50QXNhckZhbGxiYWNrRXJyb3IgfSBmcm9tICcuL3NpbGVudC1hc2FyLWZhbGxiYWNrLWVycm9yLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEJ1aWxkU29mdEtleWJvYXJkRGlhZ25vc3RpY01lc3NhZ2VQYXJhbXMsXG4gIENoZWNrSXNTb2Z0S2V5Ym9hcmRVcFBhcmFtcyxcbiAgRWxlbWVudFJlY3QsXG4gIFJlc29sdmVTb2Z0S2V5Ym9hcmRUYXBQb2ludHNQYXJhbXMsXG4gIFNvZnRLZXlib2FyZFRhcFBvaW50LFxuICBTb2Z0S2V5Ym9hcmRWaWV3cG9ydFNuYXBzaG90XG59IGZyb20gJy4vc29mdC1rZXlib2FyZC1nZW9tZXRyeS5tanMnO1xuZXhwb3J0IHtcbiAgYnVpbGRTb2Z0S2V5Ym9hcmREaWFnbm9zdGljTWVzc2FnZSxcbiAgY2hlY2tJc1NvZnRLZXlib2FyZFVwLFxuICBERUZBVUxUX01JTklNVU1fS0VZQk9BUkRfSEVJR0hUX0lOX1BJWEVMUyxcbiAgcGFyc2VJbnB1dE1ldGhvZFN0YXRlLFxuICByZXNvbHZlU29mdEtleWJvYXJkVGFwUG9pbnRzXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC1nZW9tZXRyeS5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBSYWlzZVNvZnRLZXlib2FyZFBhcmFtcyxcbiAgVGFwRGV2aWNlUGFyYW1zXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC5tanMnO1xuZXhwb3J0IHtcbiAgcmFpc2VTb2Z0S2V5Ym9hcmQsXG4gIHRhcERldmljZVxufSBmcm9tICcuL3NvZnQta2V5Ym9hcmQubWpzJztcbmV4cG9ydCB0eXBlIHsgU3RhbGVCdWlsZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL3N0YWxlLWJ1aWxkLWVycm9yLm1qcyc7XG5leHBvcnQgeyBTdGFsZUJ1aWxkRXJyb3IgfSBmcm9tICcuL3N0YWxlLWJ1aWxkLWVycm9yLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFBvcHVsYXRlRmlsZUNvbnRlbnQsXG4gIFBvcHVsYXRlRmlsZXNQYXJhbXMsXG4gIFRlbXBvcmFyeVZhdWx0Q29uc3RydWN0b3JPcHRpb25zXG59IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0Lm1qcyc7XG5leHBvcnQgeyBUZW1wb3JhcnlWYXVsdCB9IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0Lm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEFwcGl1bVNlc3Npb25JbmZvLFxuICBBcHBpdW1UcmFuc3BvcnRDb25maWdcbn0gZnJvbSAnLi90cmFuc3BvcnQtYXBwaXVtLm1qcyc7XG5leHBvcnQgeyBBcHBpdW1UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1hcHBpdW0ubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGVza3RvcENkcFRyYW5zcG9ydENvbmZpZyxcbiAgT3duZWRJbnN0YW5jZUFzYXIsXG4gIE93bmVkSW5zdGFuY2VDb25maWcsXG4gIE93bmVkSW5zdGFuY2VFbmRwb2ludFxufSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC5tanMnO1xuZXhwb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLm1qcyc7XG5leHBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5tanMnO1xuZXhwb3J0IHsgY2hlY2tJc01vYmlsZVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29uc29sZUNhcHR1cmVIYW5kbGUsXG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuZXhwb3J0IHtcbiAgcmVnaXN0ZXJWYXVsdCxcbiAgdW5yZWdpc3RlclZhdWx0XG59IGZyb20gJy4vdmF1bHQtcmVnaXN0cnkubWpzJztcbmV4cG9ydCB0eXBlIHsgT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnkgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4Lm1qcyc7XG5leHBvcnQgeyBERUZBVUxUX09CU0lESUFOX1ZFUlNJT05fU1BFQ1MgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4Lm1qcyc7XG4iXSwKICAibWFwcGluZ3MiOiAiQUFPQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFPUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBTVAsU0FBUywyQkFBMkI7QUFFcEMsU0FBUyxpQ0FBaUM7QUFLMUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsOEJBQThCO0FBRXZDLFNBQVMsb0NBQW9DO0FBQzdDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS1AsU0FBUyxvQkFBb0I7QUFLN0IsU0FBUyxpQkFBaUI7QUFNMUI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBT1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFNUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsa0NBQWtDO0FBRTNDLFNBQVMsK0JBQStCO0FBTXhDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVA7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBTVA7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQU1QLFNBQVMsb0NBQW9DO0FBSzdDLFNBQVMsOEJBQThCO0FBRXZDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx3Q0FBd0M7QUFrQmpELFNBQVMsc0JBQXNCO0FBTS9CO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxxQkFBcUI7QUFFOUIsU0FBUyx5Q0FBeUM7QUFNbEQsU0FBUyxxQ0FBcUM7QUFFOUMsU0FBUyxtQ0FBbUM7QUFRNUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLDJCQUEyQjtBQU9wQyxTQUFTLDBCQUEwQjtBQUNuQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsK0JBQStCO0FBRXhDLFNBQVMsZ0NBQWdDO0FBRXpDLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsdUNBQXVDO0FBRWhELFNBQVMsK0JBQStCO0FBRXhDLFNBQVMsZ0NBQWdDO0FBRXpDLFNBQVMsK0JBQStCO0FBU3hDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLHVCQUF1QjtBQU1oQyxTQUFTLHNCQUFzQjtBQUsvQixTQUFTLHVCQUF1QjtBQU9oQyxTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLGtDQUFrQztBQU0zQyxTQUFTLDhCQUE4QjtBQU12QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsc0NBQXNDOyIsCiAgIm5hbWVzIjogW10KfQo=
215
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUgeyBSdW5BZGJQYXJhbXMgfSBmcm9tICcuL2FkYi5tanMnO1xuZXhwb3J0IHtcbiAgcnVuQWRiQmluYXJ5LFxuICBydW5BZGJUZXh0LFxuICBydW5BZGJUZXh0V2l0aG91dERldmljZVxufSBmcm9tICcuL2FkYi5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBBcHBDb25maWdSZXN0b3JlLFxuICBHZXRBcHBDb25maWdQYXJhbXMsXG4gIFNldEFwcENvbmZpZ1BhcmFtcyxcbiAgV2l0aEFwcENvbmZpZ1BhcmFtc1xufSBmcm9tICcuL2FwcC1jb25maWcubWpzJztcbmV4cG9ydCB7XG4gIGdldEFwcENvbmZpZyxcbiAgcmVzdG9yZUFwcENvbmZpZyxcbiAgc2V0QXBwQ29uZmlnLFxuICB3aXRoQXBwQ29uZmlnXG59IGZyb20gJy4vYXBwLWNvbmZpZy5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBBc2FyRmFsbGJhY2ssXG4gIEFzYXJGYWxsYmFja1RpZXIsXG4gIFJlc29sdmVBc2FyRmFsbGJhY2tQYXJhbXNcbn0gZnJvbSAnLi9hc2FyLWZhbGxiYWNrLWRldGVjdGlvbi5tanMnO1xuZXhwb3J0IHsgcmVzb2x2ZUFzYXJGYWxsYmFjayB9IGZyb20gJy4vYXNhci1mYWxsYmFjay1kZXRlY3Rpb24ubWpzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdE9wdGlvbnMgfSBmcm9tICcuL2NhcHR1cmUtb2JzaWRpYW4tc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHsgY2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdCB9IGZyb20gJy4vY2FwdHVyZS1vYnNpZGlhbi1zY3JlZW5zaG90Lm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLFxuICBQbmdEaW1lbnNpb25zXG59IGZyb20gJy4vY2FwdHVyZS1zY3JlZW5zaG90Lm1qcyc7XG5leHBvcnQge1xuICBidWlsZERldmljZU1ldHJpY3NPdmVycmlkZSxcbiAgZGVjb2RlQmFzZTY0UG5nLFxuICBpc1BuZyxcbiAgcmVhZFBuZ0RpbWVuc2lvbnNcbn0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB0eXBlIHsgQ2RwQ29tbWFuZFRpbWVvdXRFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9jZHAtY29tbWFuZC10aW1lb3V0LWVycm9yLm1qcyc7XG5leHBvcnQgeyBDZHBDb21tYW5kVGltZW91dEVycm9yIH0gZnJvbSAnLi9jZHAtY29tbWFuZC10aW1lb3V0LWVycm9yLm1qcyc7XG5leHBvcnQgdHlwZSB7IENvbmZpZ0RpcmVjdG9yeUZhbGxiYWNrRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS1mYWxsYmFjay1lcnJvci5tanMnO1xuZXhwb3J0IHsgQ29uZmlnRGlyZWN0b3J5RmFsbGJhY2tFcnJvciB9IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS1mYWxsYmFjay1lcnJvci5tanMnO1xuZXhwb3J0IHtcbiAgYXNzZXJ0VmFsaWRDb25maWdEaXJlY3RvcnksXG4gIERFRkFVTFRfQ09ORklHX0RJUkVDVE9SWVxufSBmcm9tICcuL2NvbmZpZy1kaXJlY3RvcnkubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ2RwQ29ubmVjdGlvbixcbiAgQ29ubmVjdFRvQ2RwT3B0aW9uc1xufSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLm1qcyc7XG5leHBvcnQgeyBjb25uZWN0VG9DZHAgfSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENvbnRleHRBcmd1bWVudHMsXG4gIENvbnRleHRPZlxufSBmcm9tICcuL2NvbnRleHQtaWQubWpzJztcbmV4cG9ydCB7IENvbnRleHRJZCB9IGZyb20gJy4vY29udGV4dC1pZC5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBTZXR1cEVycm9yUmVzb2x2ZXIsXG4gIFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgVmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLm1qcyc7XG5leHBvcnQge1xuICBzZXRTZXR1cEVycm9yUmVzb2x2ZXIsXG4gIHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgc2V0VmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXMsXG4gIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNSZXN1bHQsXG4gIEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY1BhcmFtcyxcbiAgSW5zdGFsbGVkUGx1Z2luSW5mb1xufSBmcm9tICcuL2RlbW8tdmF1bHQtYm9vdHN0cmFwLm1qcyc7XG5leHBvcnQge1xuICBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zLFxuICBidWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LWJvb3RzdHJhcC5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zLFxuICBJbmplY3RQbHVnaW5QYXJhbXMsXG4gIFJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zUGFyYW1zXG59IGZyb20gJy4vZGVtby12YXVsdC1wb3B1bGF0ZS5tanMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZSxcbiAgcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLm1qcyc7XG5leHBvcnQgdHlwZSB7IFJlYWREZW1vVmF1bHRUcmVlUGFyYW1zIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUubWpzJztcbmV4cG9ydCB7IHJlYWREZW1vVmF1bHRUcmVlIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUubWpzJztcbmV4cG9ydCB7IERlc2t0b3BPbmx5UGx1Z2luU2tpcEVycm9yIH0gZnJvbSAnLi9kZXNrdG9wLW9ubHktcGx1Z2luLXNraXAtZXJyb3IubWpzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZURldmljZVNjcmVlbnNob3RQYXJhbXMgfSBmcm9tICcuL2RldmljZS1zY3JlZW5zaG90Lm1qcyc7XG5leHBvcnQgeyBjYXB0dXJlRGV2aWNlU2NyZWVuc2hvdCB9IGZyb20gJy4vZGV2aWNlLXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmUsXG4gIERldmljZVNldHRpbmdSZXN0b3JlRGVsZXRlLFxuICBEZXZpY2VTZXR0aW5nUmVzdG9yZVdyaXRlXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmctcmVzdG9yZS5tanMnO1xuZXhwb3J0IHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmVLaW5kLFxuICByZXNvbHZlRGV2aWNlU2V0dGluZ1Jlc3RvcmVcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZy1yZXN0b3JlLm1qcyc7XG5leHBvcnQgdHlwZSB7IEJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzUGFyYW1zIH0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MtY29tbWFuZC5tanMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZXZpY2VTZXR0aW5nc0NvbW1hbmRBcmd1bWVudHMsXG4gIERldmljZVNldHRpbmdOYW1lc3BhY2UsXG4gIERldmljZVNldHRpbmdWZXJiXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmdzLWNvbW1hbmQubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1BhcmFtcyxcbiAgV2l0aFNvZnRLZXlib2FyZEVuYWJsZWRQYXJhbXMsXG4gIFdyaXRlRGV2aWNlU2V0dGluZ1BhcmFtc1xufSBmcm9tICcuL2RldmljZS1zZXR0aW5ncy5tanMnO1xuZXhwb3J0IHtcbiAgZGVsZXRlRGV2aWNlU2V0dGluZyxcbiAgcmVhZERldmljZVNldHRpbmcsXG4gIHdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkLFxuICB3cml0ZURldmljZVNldHRpbmdcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRWxlY3Ryb25Db21wYXRpYmlsaXR5LFxuICBFbGVjdHJvbkNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5UGFyYW1zXG59IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5tanMnO1xuZXhwb3J0IHsgcmVzb2x2ZUVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBFbXVsYXRvckRldmljZUNhbmRpZGF0ZSxcbiAgU2VsZWN0RW11bGF0b3JEZXZpY2VJZFBhcmFtc1xufSBmcm9tICcuL2VtdWxhdG9yLWRldmljZS1pZC5tanMnO1xuZXhwb3J0IHsgc2VsZWN0RW11bGF0b3JEZXZpY2VJZCB9IGZyb20gJy4vZW11bGF0b3ItZGV2aWNlLWlkLm1qcyc7XG5leHBvcnQgdHlwZSB7IEV2YWxDYXBFeGNlZWRlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2V2YWwtY2FwLWV4Y2VlZGVkLWVycm9yLm1qcyc7XG5leHBvcnQge1xuICBFdmFsQ2FwRXhjZWVkZWRFcnJvcixcbiAgaXNTY3JpcHRUaW1lb3V0RXJyb3Jcbn0gZnJvbSAnLi9ldmFsLWNhcC1leGNlZWRlZC1lcnJvci5tanMnO1xuZXhwb3J0IHsgREVGQVVMVF9FVkFMX0NBUF9JTl9NSUxMSVNFQ09ORFMgfSBmcm9tICcuL2V2YWwtY2FwLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENsaWNrRWxlbWVudFBhcmFtcyxcbiAgQ2xpY2tNb3VzZVBhcmFtcyxcbiAgQ29tbW9uQXJndW1lbnRzLFxuICBDcmVhdGVOb3RlUGFyYW1zLFxuICBFdmFsSW5PYnNpZGlhblBhcmFtcyxcbiAgR2VuZXJpY09iamVjdCxcbiAgSG92ZXJFbGVtZW50UGFyYW1zLFxuICBMaWIsXG4gIE1vdXNlQnV0dG9uLFxuICBNb3ZlTW91c2VQYXJhbXMsXG4gIE9wZW5TZXR0aW5nc1RhYlBhcmFtcyxcbiAgUHJlc3NLZXlQYXJhbXMsXG4gIFR5cGVJbnRvRWRpdG9yUGFyYW1zLFxuICBVbmhvdmVyRWxlbWVudFBhcmFtcyxcbiAgV2FpdFVudGlsUGFyYW1zXG59IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5tanMnO1xuZXhwb3J0IHsgZXZhbEluT2JzaWRpYW4gfSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4ubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUZpdFRvQ2FudmFzUGFyYW1zLFxuICBGaXRTY3JlZW5zaG90VG9DYW52YXNPcHRpb25zLFxuICBGaXRUb0NhbnZhc0dlb21ldHJ5XG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB7XG4gIGNvbXB1dGVGaXRUb0NhbnZhcyxcbiAgZml0U2NyZWVuc2hvdFRvQ2FudmFzXG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB0eXBlIHsgSGlkZVZhdWx0TmFtZU9wdGlvbnMgfSBmcm9tICcuL2hpZGUtdmF1bHQtbmFtZS5tanMnO1xuZXhwb3J0IHsgaGlkZVZhdWx0TmFtZSB9IGZyb20gJy4vaGlkZS12YXVsdC1uYW1lLm1qcyc7XG5leHBvcnQgdHlwZSB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9pbmNvbXBhdGlibGUtaW5zdGFsbGVyLXZlcnNpb24tZXJyb3IubWpzJztcbmV4cG9ydCB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvciB9IGZyb20gJy4vaW5jb21wYXRpYmxlLWluc3RhbGxlci12ZXJzaW9uLWVycm9yLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHksXG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eVBhcmFtc1xufSBmcm9tICcuL2luc3RhbGxlci1jb21wYXRpYmlsaXR5Lm1qcyc7XG5leHBvcnQgeyByZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vaW5zdGFsbGVyLWNvbXBhdGliaWxpdHkubWpzJztcbmV4cG9ydCB0eXBlIHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2ludGVncmF0aW9uLXNldHVwLWZhaWxlZC1lcnJvci5tanMnO1xuZXhwb3J0IHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbi1zZXR1cC1mYWlsZWQtZXJyb3IubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUxhYmVsQmFuZFBhcmFtcyxcbiAgTGFiZWxCYW5kR2VvbWV0cnksXG4gIExhYmVsQ2FwdGlvbk1lYXN1cmVtZW50LFxuICBMYWJlbFNjcmVlbnNob3RPcHRpb25zLFxuICBNZWFzdXJlTGFiZWxDYXB0aW9uUGFyYW1zXG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHtcbiAgYnVpbGRMYWJlbFN2ZyxcbiAgY29tcHV0ZUxhYmVsQmFuZCxcbiAgZXNjYXBlU3ZnVGV4dCxcbiAgbGFiZWxTY3JlZW5zaG90LFxuICBtZWFzdXJlTGFiZWxDYXB0aW9uXG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHR5cGUgeyBMaWJSZXNvbHZlciB9IGZyb20gJy4vbGliLXJlZ2lzdHJ5Lm1qcyc7XG5leHBvcnQgeyByZWdpc3RlckxpYlJlc29sdmVyIH0gZnJvbSAnLi9saWItcmVnaXN0cnkubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5SdW50aW1lVmVyc2lvbnMsXG4gIE9ic2lkaWFuVmVyc2lvbkNoYW5nZWxvZ1VybHMsXG4gIE9ic2lkaWFuVmVyc2lvbkRvd25sb2FkcyxcbiAgT2JzaWRpYW5WZXJzaW9uTWV0YWRhdGFcbn0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5tanMnO1xuZXhwb3J0IHsgZ2V0VmVyc2lvbk1ldGFkYXRhIH0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5tanMnO1xuZXhwb3J0IHtcbiAgQ0FUQUxZU1RfTEFURVNULFxuICBQVUJMSUNfTEFURVNUXG59IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5tanMnO1xuZXhwb3J0IHR5cGUgeyBPcGVuT2JzaWRpYW5TZXR0aW5nc1RhYlBhcmFtcyB9IGZyb20gJy4vb3Blbi1vYnNpZGlhbi1zZXR0aW5ncy10YWIubWpzJztcbmV4cG9ydCB7IG9wZW5PYnNpZGlhblNldHRpbmdzVGFiIH0gZnJvbSAnLi9vcGVuLW9ic2lkaWFuLXNldHRpbmdzLXRhYi5tanMnO1xuZXhwb3J0IHR5cGUgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vb3duZWQtaW5zdGFuY2UtZXhpdGVkLWVycm9yLm1qcyc7XG5leHBvcnQgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3IgfSBmcm9tICcuL293bmVkLWluc3RhbmNlLWV4aXRlZC1lcnJvci5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZFN0YXR1c0JhckJhbmRGYWlsdXJlTWVzc2FnZVBhcmFtcyxcbiAgUGFpbnRPdXRTdGF0dXNCYXJPcHRpb25zLFxuICBSZXNvbHZlU3RhdHVzQmFyQmFuZFBhcmFtcyxcbiAgU3RhdHVzQmFyQmFuZENvbG9yLFxuICBTdGF0dXNCYXJCYW5kVmVyZGljdFxufSBmcm9tICcuL3BhaW50LW91dC1zdGF0dXMtYmFyLm1qcyc7XG5leHBvcnQge1xuICBidWlsZFN0YXR1c0JhckJhbmRGYWlsdXJlTWVzc2FnZSxcbiAgREVGQVVMVF9TVEFUVVNfQkFSX0VER0VfTUFSR0lOX0lOX1BJWEVMUyxcbiAgREVGQVVMVF9TVEFUVVNfQkFSX1NBTVBMRV9JTlNFVF9JTl9QSVhFTFMsXG4gIHBhaW50T3V0U3RhdHVzQmFyLFxuICByZXNvbHZlU3RhdHVzQmFyQmFuZFxufSBmcm9tICcuL3BhaW50LW91dC1zdGF0dXMtYmFyLm1qcyc7XG5leHBvcnQgdHlwZSB7IFBvbGxJbk9ic2lkaWFuUGFyYW1zIH0gZnJvbSAnLi9wb2xsLWluLW9ic2lkaWFuLm1qcyc7XG5leHBvcnQgeyBwb2xsSW5PYnNpZGlhbiB9IGZyb20gJy4vcG9sbC1pbi1vYnNpZGlhbi5tanMnO1xuZXhwb3J0IHsgUmVuZGVyZXJGYWlsZWRUb0luaXRpYWxpemVFcnJvciB9IGZyb20gJy4vcmVuZGVyZXItZmFpbGVkLXRvLWluaXRpYWxpemUtZXJyb3IubWpzJztcbmV4cG9ydCB0eXBlIHsgUmVzb2x2ZUVtdWxhdG9yRGV2aWNlSWRQYXJhbXMgfSBmcm9tICcuL3Jlc29sdmUtZW11bGF0b3ItZGV2aWNlLWlkLm1qcyc7XG5leHBvcnQgeyByZXNvbHZlRW11bGF0b3JEZXZpY2VJZCB9IGZyb20gJy4vcmVzb2x2ZS1lbXVsYXRvci1kZXZpY2UtaWQubWpzJztcbmV4cG9ydCB0eXBlIHsgUnVuT2JzaWRpYW5WZXJzaW9uTWF0cml4UGFyYW1zIH0gZnJvbSAnLi9ydW4tdmVyc2lvbi1tYXRyaXgubWpzJztcbmV4cG9ydCB7IHJ1bk9ic2lkaWFuVmVyc2lvbk1hdHJpeCB9IGZyb20gJy4vcnVuLXZlcnNpb24tbWF0cml4Lm1qcyc7XG5leHBvcnQgdHlwZSB7IFNpbGVudEFzYXJGYWxsYmFja0Vycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL3NpbGVudC1hc2FyLWZhbGxiYWNrLWVycm9yLm1qcyc7XG5leHBvcnQgeyBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvciB9IGZyb20gJy4vc2lsZW50LWFzYXItZmFsbGJhY2stZXJyb3IubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQnVpbGRTb2Z0S2V5Ym9hcmREaWFnbm9zdGljTWVzc2FnZVBhcmFtcyxcbiAgQ2hlY2tJc1NvZnRLZXlib2FyZFVwUGFyYW1zLFxuICBFbGVtZW50UmVjdCxcbiAgUmVzb2x2ZVNvZnRLZXlib2FyZFRhcFBvaW50c1BhcmFtcyxcbiAgU29mdEtleWJvYXJkVGFwUG9pbnQsXG4gIFNvZnRLZXlib2FyZFZpZXdwb3J0U25hcHNob3Rcbn0gZnJvbSAnLi9zb2Z0LWtleWJvYXJkLWdlb21ldHJ5Lm1qcyc7XG5leHBvcnQge1xuICBidWlsZFNvZnRLZXlib2FyZERpYWdub3N0aWNNZXNzYWdlLFxuICBjaGVja0lzSW5wdXRNZXRob2RTaG93bixcbiAgY2hlY2tJc1NvZnRLZXlib2FyZFVwLFxuICBERUZBVUxUX01JTklNVU1fS0VZQk9BUkRfSEVJR0hUX0lOX1BJWEVMUyxcbiAgcGFyc2VJbnB1dE1ldGhvZFN0YXRlLFxuICByZXNvbHZlU29mdEtleWJvYXJkVGFwUG9pbnRzXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC1nZW9tZXRyeS5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBSYWlzZVNvZnRLZXlib2FyZFBhcmFtcyxcbiAgVGFwRGV2aWNlUGFyYW1zXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC5tanMnO1xuZXhwb3J0IHtcbiAgcmFpc2VTb2Z0S2V5Ym9hcmQsXG4gIHRhcERldmljZVxufSBmcm9tICcuL3NvZnQta2V5Ym9hcmQubWpzJztcbmV4cG9ydCB0eXBlIHsgU3RhbGVCdWlsZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL3N0YWxlLWJ1aWxkLWVycm9yLm1qcyc7XG5leHBvcnQgeyBTdGFsZUJ1aWxkRXJyb3IgfSBmcm9tICcuL3N0YWxlLWJ1aWxkLWVycm9yLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFBvcHVsYXRlRmlsZUNvbnRlbnQsXG4gIFBvcHVsYXRlRmlsZXNQYXJhbXMsXG4gIFRlbXBvcmFyeVZhdWx0Q29uc3RydWN0b3JPcHRpb25zXG59IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0Lm1qcyc7XG5leHBvcnQgeyBUZW1wb3JhcnlWYXVsdCB9IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0Lm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEFwcGl1bVNlc3Npb25JbmZvLFxuICBBcHBpdW1UcmFuc3BvcnRDb25maWdcbn0gZnJvbSAnLi90cmFuc3BvcnQtYXBwaXVtLm1qcyc7XG5leHBvcnQgeyBBcHBpdW1UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1hcHBpdW0ubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGVza3RvcENkcFRyYW5zcG9ydENvbmZpZyxcbiAgT3duZWRJbnN0YW5jZUFzYXIsXG4gIE93bmVkSW5zdGFuY2VDb25maWcsXG4gIE93bmVkSW5zdGFuY2VFbmRwb2ludFxufSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC5tanMnO1xuZXhwb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLm1qcyc7XG5leHBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5tanMnO1xuZXhwb3J0IHsgY2hlY2tJc01vYmlsZVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29uc29sZUNhcHR1cmVIYW5kbGUsXG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuZXhwb3J0IHtcbiAgcmVnaXN0ZXJWYXVsdCxcbiAgdW5yZWdpc3RlclZhdWx0XG59IGZyb20gJy4vdmF1bHQtcmVnaXN0cnkubWpzJztcbmV4cG9ydCB0eXBlIHsgT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnkgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4Lm1qcyc7XG5leHBvcnQgeyBERUZBVUxUX09CU0lESUFOX1ZFUlNJT05fU1BFQ1MgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4Lm1qcyc7XG4iXSwKICAibWFwcGluZ3MiOiAiQUFPQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFPUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBTVAsU0FBUywyQkFBMkI7QUFFcEMsU0FBUyxpQ0FBaUM7QUFLMUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsOEJBQThCO0FBRXZDLFNBQVMsb0NBQW9DO0FBQzdDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS1AsU0FBUyxvQkFBb0I7QUFLN0IsU0FBUyxpQkFBaUI7QUFNMUI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBT1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFNUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsa0NBQWtDO0FBRTNDLFNBQVMsK0JBQStCO0FBTXhDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVA7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBTVA7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQU1QLFNBQVMsb0NBQW9DO0FBSzdDLFNBQVMsOEJBQThCO0FBRXZDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx3Q0FBd0M7QUFrQmpELFNBQVMsc0JBQXNCO0FBTS9CO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxxQkFBcUI7QUFFOUIsU0FBUyx5Q0FBeUM7QUFNbEQsU0FBUyxxQ0FBcUM7QUFFOUMsU0FBUyxtQ0FBbUM7QUFRNUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLDJCQUEyQjtBQU9wQyxTQUFTLDBCQUEwQjtBQUNuQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsK0JBQStCO0FBRXhDLFNBQVMsZ0NBQWdDO0FBUXpDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyx1Q0FBdUM7QUFFaEQsU0FBUywrQkFBK0I7QUFFeEMsU0FBUyxnQ0FBZ0M7QUFFekMsU0FBUywrQkFBK0I7QUFTeEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLHVCQUF1QjtBQU1oQyxTQUFTLHNCQUFzQjtBQUsvQixTQUFTLHVCQUF1QjtBQU9oQyxTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLGtDQUFrQztBQU0zQyxTQUFTLDhCQUE4QjtBQU12QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsc0NBQXNDOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,112 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Pure selection of the device an emulator this run just launched produced.
5
+ *
6
+ * The wait used to take the first online device that was not listed before the
7
+ * launch. The "before" snapshot lists online devices only, so a handset that was
8
+ * `unauthorized`, `offline` or unplugged at that moment — and came online during
9
+ * the boot, which a USB reconnect or accepting the debugging prompt is enough
10
+ * for — looked new, and was adopted as the emulator:
11
+ *
12
+ * ```text
13
+ * AVD "obsidian_test" not found on any existing device, starting a new emulator...
14
+ * Waiting for a new device to appear in ADB ...
15
+ * Device 3C15BN001Y900000 appeared in ADB, waiting for boot to complete...
16
+ * Emulator "obsidian_test" started, device 3C15BN001Y900000 is connected (owned emulator PIDs: [])
17
+ * ```
18
+ *
19
+ * The suite then ran on the phone, and the emulator really launched was owned by
20
+ * nobody. So a new device is the launched emulator only when it is an emulator
21
+ * **and** it says it is serving the launched AVD — which also keeps a second
22
+ * emulator another project started concurrently from being adopted.
23
+ *
24
+ * Kept separate from the integration-only `transport-factory` so the decision is
25
+ * unit-testable; the factory does the `adb` round-trips.
26
+ */
27
+ /**
28
+ * One new emulator device, with what it answered when asked for its AVD name.
29
+ */
30
+ export interface LaunchedDeviceCandidate {
31
+ /**
32
+ * The device UDID, e.g. `emulator-5554`.
33
+ */
34
+ readonly deviceId: string;
35
+ /**
36
+ * The AVD the device reported, or `undefined` when it did not answer.
37
+ */
38
+ readonly probedAvdName: string | undefined;
39
+ }
40
+ /**
41
+ * The new devices a poll found, split by whether they can be the launched emulator.
42
+ */
43
+ export interface NewDeviceSplit {
44
+ /**
45
+ * New emulator devices, to be asked which AVD they serve.
46
+ */
47
+ readonly emulatorDeviceIds: string[];
48
+ /**
49
+ * New devices that are not emulators (a handset, a TCP-attached device) and are never adopted.
50
+ */
51
+ readonly nonEmulatorDeviceIds: string[];
52
+ }
53
+ /**
54
+ * Parameters for {@link resolveLaunchedDevice}.
55
+ */
56
+ export interface ResolveLaunchedDeviceParams {
57
+ /**
58
+ * The AVD this run launched.
59
+ */
60
+ readonly avdName: string;
61
+ /**
62
+ * The new emulator devices, with their probe answers.
63
+ */
64
+ readonly candidates: readonly LaunchedDeviceCandidate[];
65
+ }
66
+ /**
67
+ * What the probe answers say about the launched emulator's device.
68
+ */
69
+ export interface ResolveLaunchedDeviceResult {
70
+ /**
71
+ * The device serving the launched AVD, or `undefined` when none does yet.
72
+ */
73
+ readonly deviceId: string | undefined;
74
+ /**
75
+ * Devices that answered with a different AVD: another emulator, never this run's.
76
+ */
77
+ readonly otherAvdDeviceIds: string[];
78
+ /**
79
+ * Devices that did not answer yet, to be asked again on the next poll.
80
+ */
81
+ readonly unansweredDeviceIds: string[];
82
+ }
83
+ /**
84
+ * Parameters for {@link splitNewDevices}.
85
+ */
86
+ export interface SplitNewDevicesParams {
87
+ /**
88
+ * The devices online now.
89
+ */
90
+ readonly connectedDeviceIds: readonly string[];
91
+ /**
92
+ * The devices online before the launch.
93
+ */
94
+ readonly deviceIdsBefore: readonly string[];
95
+ }
96
+ /**
97
+ * Picks the new emulator device that serves the launched AVD.
98
+ *
99
+ * Silence is not a match: a device that did not answer is asked again, never adopted
100
+ * on the strength of being new.
101
+ *
102
+ * @param params - The launched AVD and the probed candidates.
103
+ * @returns The matching device, plus the ones ruled out and the ones still unknown.
104
+ */
105
+ export declare function resolveLaunchedDevice(params: ResolveLaunchedDeviceParams): ResolveLaunchedDeviceResult;
106
+ /**
107
+ * Splits the devices that were not online before the launch into emulators and everything else.
108
+ *
109
+ * @param params - The devices online now and before the launch.
110
+ * @returns The new devices, split.
111
+ */
112
+ export declare function splitNewDevices(params: SplitNewDevicesParams): NewDeviceSplit;
@@ -0,0 +1,21 @@
1
+ import { checkIsEmulatorDeviceId } from "./avd-probe-verdict.mjs";
2
+ function resolveLaunchedDevice(params) {
3
+ const match = params.candidates.find((candidate) => candidate.probedAvdName === params.avdName);
4
+ return {
5
+ deviceId: match?.deviceId,
6
+ otherAvdDeviceIds: params.candidates.filter((candidate) => candidate.probedAvdName !== void 0 && candidate.probedAvdName !== params.avdName).map((candidate) => candidate.deviceId),
7
+ unansweredDeviceIds: params.candidates.filter((candidate) => candidate.probedAvdName === void 0).map((candidate) => candidate.deviceId)
8
+ };
9
+ }
10
+ function splitNewDevices(params) {
11
+ const newDeviceIds = params.connectedDeviceIds.filter((deviceId) => !params.deviceIdsBefore.includes(deviceId));
12
+ return {
13
+ emulatorDeviceIds: newDeviceIds.filter((deviceId) => checkIsEmulatorDeviceId(deviceId)),
14
+ nonEmulatorDeviceIds: newDeviceIds.filter((deviceId) => !checkIsEmulatorDeviceId(deviceId))
15
+ };
16
+ }
17
+ export {
18
+ resolveLaunchedDevice,
19
+ splitNewDevices
20
+ };
21
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xhdW5jaGVkLWRldmljZS1zZWxlY3Rpb24udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBQdXJlIHNlbGVjdGlvbiBvZiB0aGUgZGV2aWNlIGFuIGVtdWxhdG9yIHRoaXMgcnVuIGp1c3QgbGF1bmNoZWQgcHJvZHVjZWQuXG4gKlxuICogVGhlIHdhaXQgdXNlZCB0byB0YWtlIHRoZSBmaXJzdCBvbmxpbmUgZGV2aWNlIHRoYXQgd2FzIG5vdCBsaXN0ZWQgYmVmb3JlIHRoZVxuICogbGF1bmNoLiBUaGUgXCJiZWZvcmVcIiBzbmFwc2hvdCBsaXN0cyBvbmxpbmUgZGV2aWNlcyBvbmx5LCBzbyBhIGhhbmRzZXQgdGhhdCB3YXNcbiAqIGB1bmF1dGhvcml6ZWRgLCBgb2ZmbGluZWAgb3IgdW5wbHVnZ2VkIGF0IHRoYXQgbW9tZW50IFx1MjAxNCBhbmQgY2FtZSBvbmxpbmUgZHVyaW5nXG4gKiB0aGUgYm9vdCwgd2hpY2ggYSBVU0IgcmVjb25uZWN0IG9yIGFjY2VwdGluZyB0aGUgZGVidWdnaW5nIHByb21wdCBpcyBlbm91Z2hcbiAqIGZvciBcdTIwMTQgbG9va2VkIG5ldywgYW5kIHdhcyBhZG9wdGVkIGFzIHRoZSBlbXVsYXRvcjpcbiAqXG4gKiBgYGB0ZXh0XG4gKiBBVkQgXCJvYnNpZGlhbl90ZXN0XCIgbm90IGZvdW5kIG9uIGFueSBleGlzdGluZyBkZXZpY2UsIHN0YXJ0aW5nIGEgbmV3IGVtdWxhdG9yLi4uXG4gKiBXYWl0aW5nIGZvciBhIG5ldyBkZXZpY2UgdG8gYXBwZWFyIGluIEFEQiAuLi5cbiAqIERldmljZSAzQzE1Qk4wMDFZOTAwMDAwIGFwcGVhcmVkIGluIEFEQiwgd2FpdGluZyBmb3IgYm9vdCB0byBjb21wbGV0ZS4uLlxuICogRW11bGF0b3IgXCJvYnNpZGlhbl90ZXN0XCIgc3RhcnRlZCwgZGV2aWNlIDNDMTVCTjAwMVk5MDAwMDAgaXMgY29ubmVjdGVkIChvd25lZCBlbXVsYXRvciBQSURzOiBbXSlcbiAqIGBgYFxuICpcbiAqIFRoZSBzdWl0ZSB0aGVuIHJhbiBvbiB0aGUgcGhvbmUsIGFuZCB0aGUgZW11bGF0b3IgcmVhbGx5IGxhdW5jaGVkIHdhcyBvd25lZCBieVxuICogbm9ib2R5LiBTbyBhIG5ldyBkZXZpY2UgaXMgdGhlIGxhdW5jaGVkIGVtdWxhdG9yIG9ubHkgd2hlbiBpdCBpcyBhbiBlbXVsYXRvclxuICogKiphbmQqKiBpdCBzYXlzIGl0IGlzIHNlcnZpbmcgdGhlIGxhdW5jaGVkIEFWRCBcdTIwMTQgd2hpY2ggYWxzbyBrZWVwcyBhIHNlY29uZFxuICogZW11bGF0b3IgYW5vdGhlciBwcm9qZWN0IHN0YXJ0ZWQgY29uY3VycmVudGx5IGZyb20gYmVpbmcgYWRvcHRlZC5cbiAqXG4gKiBLZXB0IHNlcGFyYXRlIGZyb20gdGhlIGludGVncmF0aW9uLW9ubHkgYHRyYW5zcG9ydC1mYWN0b3J5YCBzbyB0aGUgZGVjaXNpb24gaXNcbiAqIHVuaXQtdGVzdGFibGU7IHRoZSBmYWN0b3J5IGRvZXMgdGhlIGBhZGJgIHJvdW5kLXRyaXBzLlxuICovXG5cbmltcG9ydCB7IGNoZWNrSXNFbXVsYXRvckRldmljZUlkIH0gZnJvbSAnLi9hdmQtcHJvYmUtdmVyZGljdC5tanMnO1xuXG4vKipcbiAqIE9uZSBuZXcgZW11bGF0b3IgZGV2aWNlLCB3aXRoIHdoYXQgaXQgYW5zd2VyZWQgd2hlbiBhc2tlZCBmb3IgaXRzIEFWRCBuYW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaGVkRGV2aWNlQ2FuZGlkYXRlIHtcbiAgLyoqXG4gICAqIFRoZSBkZXZpY2UgVURJRCwgZS5nLiBgZW11bGF0b3ItNTU1NGAuXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVZEIHRoZSBkZXZpY2UgcmVwb3J0ZWQsIG9yIGB1bmRlZmluZWRgIHdoZW4gaXQgZGlkIG5vdCBhbnN3ZXIuXG4gICAqL1xuICByZWFkb25seSBwcm9iZWRBdmROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhlIG5ldyBkZXZpY2VzIGEgcG9sbCBmb3VuZCwgc3BsaXQgYnkgd2hldGhlciB0aGV5IGNhbiBiZSB0aGUgbGF1bmNoZWQgZW11bGF0b3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV3RGV2aWNlU3BsaXQge1xuICAvKipcbiAgICogTmV3IGVtdWxhdG9yIGRldmljZXMsIHRvIGJlIGFza2VkIHdoaWNoIEFWRCB0aGV5IHNlcnZlLlxuICAgKi9cbiAgcmVhZG9ubHkgZW11bGF0b3JEZXZpY2VJZHM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBOZXcgZGV2aWNlcyB0aGF0IGFyZSBub3QgZW11bGF0b3JzIChhIGhhbmRzZXQsIGEgVENQLWF0dGFjaGVkIGRldmljZSkgYW5kIGFyZSBuZXZlciBhZG9wdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbm9uRW11bGF0b3JEZXZpY2VJZHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXNvbHZlTGF1bmNoZWREZXZpY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVMYXVuY2hlZERldmljZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgQVZEIHRoaXMgcnVuIGxhdW5jaGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYXZkTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmV3IGVtdWxhdG9yIGRldmljZXMsIHdpdGggdGhlaXIgcHJvYmUgYW5zd2Vycy5cbiAgICovXG4gIHJlYWRvbmx5IGNhbmRpZGF0ZXM6IHJlYWRvbmx5IExhdW5jaGVkRGV2aWNlQ2FuZGlkYXRlW107XG59XG5cbi8qKlxuICogV2hhdCB0aGUgcHJvYmUgYW5zd2VycyBzYXkgYWJvdXQgdGhlIGxhdW5jaGVkIGVtdWxhdG9yJ3MgZGV2aWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVMYXVuY2hlZERldmljZVJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgZGV2aWNlIHNlcnZpbmcgdGhlIGxhdW5jaGVkIEFWRCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBub25lIGRvZXMgeWV0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRGV2aWNlcyB0aGF0IGFuc3dlcmVkIHdpdGggYSBkaWZmZXJlbnQgQVZEOiBhbm90aGVyIGVtdWxhdG9yLCBuZXZlciB0aGlzIHJ1bidzLlxuICAgKi9cbiAgcmVhZG9ubHkgb3RoZXJBdmREZXZpY2VJZHM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBEZXZpY2VzIHRoYXQgZGlkIG5vdCBhbnN3ZXIgeWV0LCB0byBiZSBhc2tlZCBhZ2FpbiBvbiB0aGUgbmV4dCBwb2xsLlxuICAgKi9cbiAgcmVhZG9ubHkgdW5hbnN3ZXJlZERldmljZUlkczogc3RyaW5nW107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNwbGl0TmV3RGV2aWNlc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BsaXROZXdEZXZpY2VzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBkZXZpY2VzIG9ubGluZSBub3cuXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0ZWREZXZpY2VJZHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgZGV2aWNlcyBvbmxpbmUgYmVmb3JlIHRoZSBsYXVuY2guXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZHNCZWZvcmU6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFBpY2tzIHRoZSBuZXcgZW11bGF0b3IgZGV2aWNlIHRoYXQgc2VydmVzIHRoZSBsYXVuY2hlZCBBVkQuXG4gKlxuICogU2lsZW5jZSBpcyBub3QgYSBtYXRjaDogYSBkZXZpY2UgdGhhdCBkaWQgbm90IGFuc3dlciBpcyBhc2tlZCBhZ2FpbiwgbmV2ZXIgYWRvcHRlZFxuICogb24gdGhlIHN0cmVuZ3RoIG9mIGJlaW5nIG5ldy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGxhdW5jaGVkIEFWRCBhbmQgdGhlIHByb2JlZCBjYW5kaWRhdGVzLlxuICogQHJldHVybnMgVGhlIG1hdGNoaW5nIGRldmljZSwgcGx1cyB0aGUgb25lcyBydWxlZCBvdXQgYW5kIHRoZSBvbmVzIHN0aWxsIHVua25vd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTGF1bmNoZWREZXZpY2UocGFyYW1zOiBSZXNvbHZlTGF1bmNoZWREZXZpY2VQYXJhbXMpOiBSZXNvbHZlTGF1bmNoZWREZXZpY2VSZXN1bHQge1xuICBjb25zdCBtYXRjaCA9IHBhcmFtcy5jYW5kaWRhdGVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLnByb2JlZEF2ZE5hbWUgPT09IHBhcmFtcy5hdmROYW1lKTtcbiAgcmV0dXJuIHtcbiAgICBkZXZpY2VJZDogbWF0Y2g/LmRldmljZUlkLFxuICAgIG90aGVyQXZkRGV2aWNlSWRzOiBwYXJhbXMuY2FuZGlkYXRlc1xuICAgICAgLmZpbHRlcigoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUucHJvYmVkQXZkTmFtZSAhPT0gdW5kZWZpbmVkICYmIGNhbmRpZGF0ZS5wcm9iZWRBdmROYW1lICE9PSBwYXJhbXMuYXZkTmFtZSlcbiAgICAgIC5tYXAoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmRldmljZUlkKSxcbiAgICB1bmFuc3dlcmVkRGV2aWNlSWRzOiBwYXJhbXMuY2FuZGlkYXRlcy5maWx0ZXIoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLnByb2JlZEF2ZE5hbWUgPT09IHVuZGVmaW5lZCkubWFwKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5kZXZpY2VJZClcbiAgfTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgdGhlIGRldmljZXMgdGhhdCB3ZXJlIG5vdCBvbmxpbmUgYmVmb3JlIHRoZSBsYXVuY2ggaW50byBlbXVsYXRvcnMgYW5kIGV2ZXJ5dGhpbmcgZWxzZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRldmljZXMgb25saW5lIG5vdyBhbmQgYmVmb3JlIHRoZSBsYXVuY2guXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRldmljZXMsIHNwbGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXROZXdEZXZpY2VzKHBhcmFtczogU3BsaXROZXdEZXZpY2VzUGFyYW1zKTogTmV3RGV2aWNlU3BsaXQge1xuICBjb25zdCBuZXdEZXZpY2VJZHMgPSBwYXJhbXMuY29ubmVjdGVkRGV2aWNlSWRzLmZpbHRlcigoZGV2aWNlSWQpID0+ICFwYXJhbXMuZGV2aWNlSWRzQmVmb3JlLmluY2x1ZGVzKGRldmljZUlkKSk7XG4gIHJldHVybiB7XG4gICAgZW11bGF0b3JEZXZpY2VJZHM6IG5ld0RldmljZUlkcy5maWx0ZXIoKGRldmljZUlkKSA9PiBjaGVja0lzRW11bGF0b3JEZXZpY2VJZChkZXZpY2VJZCkpLFxuICAgIG5vbkVtdWxhdG9yRGV2aWNlSWRzOiBuZXdEZXZpY2VJZHMuZmlsdGVyKChkZXZpY2VJZCkgPT4gIWNoZWNrSXNFbXVsYXRvckRldmljZUlkKGRldmljZUlkKSlcbiAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQTJCQSxTQUFTLCtCQUErQjtBQTJGakMsU0FBUyxzQkFBc0IsUUFBa0U7QUFDdEcsUUFBTSxRQUFRLE9BQU8sV0FBVyxLQUFLLENBQUMsY0FBYyxVQUFVLGtCQUFrQixPQUFPLE9BQU87QUFDOUYsU0FBTztBQUFBLElBQ0wsVUFBVSxPQUFPO0FBQUEsSUFDakIsbUJBQW1CLE9BQU8sV0FDdkIsT0FBTyxDQUFDLGNBQWMsVUFBVSxrQkFBa0IsVUFBYSxVQUFVLGtCQUFrQixPQUFPLE9BQU8sRUFDekcsSUFBSSxDQUFDLGNBQWMsVUFBVSxRQUFRO0FBQUEsSUFDeEMscUJBQXFCLE9BQU8sV0FBVyxPQUFPLENBQUMsY0FBYyxVQUFVLGtCQUFrQixNQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWMsVUFBVSxRQUFRO0FBQUEsRUFDM0k7QUFDRjtBQVFPLFNBQVMsZ0JBQWdCLFFBQStDO0FBQzdFLFFBQU0sZUFBZSxPQUFPLG1CQUFtQixPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sZ0JBQWdCLFNBQVMsUUFBUSxDQUFDO0FBQzlHLFNBQU87QUFBQSxJQUNMLG1CQUFtQixhQUFhLE9BQU8sQ0FBQyxhQUFhLHdCQUF3QixRQUFRLENBQUM7QUFBQSxJQUN0RixzQkFBc0IsYUFBYSxPQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixRQUFRLENBQUM7QUFBQSxFQUM1RjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -1,4 +1,4 @@
1
- const LIBRARY_VERSION = false ? "dev" : "16.0.0";
1
+ const LIBRARY_VERSION = false ? "dev" : "17.0.0";
2
2
  export {
3
3
  LIBRARY_VERSION
4
4
  };