pi-ghost-autocomplete 0.3.2 → 0.5.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 (170) hide show
  1. package/LICENSE +561 -0
  2. package/README.md +186 -4
  3. package/dist/bench-cli.js +1 -123
  4. package/dist/bench.d.ts +7 -3
  5. package/dist/bench.js +1 -522
  6. package/dist/config.d.ts +46 -3
  7. package/dist/context-aggregator.d.ts +4 -1
  8. package/dist/cycle-manager.d.ts +2 -21
  9. package/dist/entropy-stop.d.ts +4 -1
  10. package/dist/eval-dataset.d.ts +2 -13
  11. package/dist/fuzzy-matcher.d.ts +4 -1
  12. package/dist/ghost-editor.d.ts +11 -2
  13. package/dist/index.d.ts +7 -2
  14. package/dist/index.js +1 -289
  15. package/dist/intent.d.ts +179 -0
  16. package/dist/metrics.d.ts +4 -1
  17. package/dist/path-index.d.ts +4 -1
  18. package/dist/path-matcher.d.ts +4 -1
  19. package/dist/profile-store.d.ts +4 -1
  20. package/dist/profile.d.ts +2 -20
  21. package/dist/providers/cloud-provider.d.ts +4 -1
  22. package/dist/providers/local-provider.d.ts +4 -1
  23. package/dist/providers/openai-compat-chat-provider.d.ts +31 -0
  24. package/dist/providers/openai-compat-provider.d.ts +24 -1
  25. package/dist/providers/race.d.ts +4 -1
  26. package/dist/providers/router.d.ts +59 -0
  27. package/dist/providers/types.d.ts +13 -1
  28. package/dist/recent-paths.d.ts +4 -1
  29. package/dist/replay-cli.js +1 -166
  30. package/dist/replay.d.ts +2 -7
  31. package/package.json +10 -6
  32. package/dist/bench-cli.d.ts +0 -3
  33. package/dist/bench-cli.d.ts.map +0 -1
  34. package/dist/bench-cli.js.map +0 -1
  35. package/dist/bench.d.ts.map +0 -1
  36. package/dist/bench.js.map +0 -1
  37. package/dist/cache.d.ts +0 -124
  38. package/dist/cache.d.ts.map +0 -1
  39. package/dist/cache.js +0 -173
  40. package/dist/cache.js.map +0 -1
  41. package/dist/candidate-rerank.d.ts +0 -57
  42. package/dist/candidate-rerank.d.ts.map +0 -1
  43. package/dist/candidate-rerank.js +0 -78
  44. package/dist/candidate-rerank.js.map +0 -1
  45. package/dist/config.d.ts.map +0 -1
  46. package/dist/config.js +0 -317
  47. package/dist/config.js.map +0 -1
  48. package/dist/context-aggregator.d.ts.map +0 -1
  49. package/dist/context-aggregator.js +0 -87
  50. package/dist/context-aggregator.js.map +0 -1
  51. package/dist/context-selector.d.ts +0 -128
  52. package/dist/context-selector.d.ts.map +0 -1
  53. package/dist/context-selector.js +0 -300
  54. package/dist/context-selector.js.map +0 -1
  55. package/dist/cycle-manager.d.ts.map +0 -1
  56. package/dist/cycle-manager.js +0 -168
  57. package/dist/cycle-manager.js.map +0 -1
  58. package/dist/edit-history-ring.d.ts +0 -148
  59. package/dist/edit-history-ring.d.ts.map +0 -1
  60. package/dist/edit-history-ring.js +0 -262
  61. package/dist/edit-history-ring.js.map +0 -1
  62. package/dist/entropy-stop.d.ts.map +0 -1
  63. package/dist/entropy-stop.js +0 -141
  64. package/dist/entropy-stop.js.map +0 -1
  65. package/dist/eval-dataset.d.ts.map +0 -1
  66. package/dist/eval-dataset.js +0 -127
  67. package/dist/eval-dataset.js.map +0 -1
  68. package/dist/fast-path-engine.d.ts +0 -286
  69. package/dist/fast-path-engine.d.ts.map +0 -1
  70. package/dist/fast-path-engine.js +0 -341
  71. package/dist/fast-path-engine.js.map +0 -1
  72. package/dist/fuzzy-matcher.d.ts.map +0 -1
  73. package/dist/fuzzy-matcher.js +0 -162
  74. package/dist/fuzzy-matcher.js.map +0 -1
  75. package/dist/ghost-editor.d.ts.map +0 -1
  76. package/dist/ghost-editor.js +0 -1491
  77. package/dist/ghost-editor.js.map +0 -1
  78. package/dist/index.d.ts.map +0 -1
  79. package/dist/index.js.map +0 -1
  80. package/dist/keystroke-timer.d.ts +0 -59
  81. package/dist/keystroke-timer.d.ts.map +0 -1
  82. package/dist/keystroke-timer.js +0 -94
  83. package/dist/keystroke-timer.js.map +0 -1
  84. package/dist/metrics-builder.d.ts +0 -71
  85. package/dist/metrics-builder.d.ts.map +0 -1
  86. package/dist/metrics-builder.js +0 -71
  87. package/dist/metrics-builder.js.map +0 -1
  88. package/dist/metrics.d.ts.map +0 -1
  89. package/dist/metrics.js +0 -212
  90. package/dist/metrics.js.map +0 -1
  91. package/dist/path-index.d.ts.map +0 -1
  92. package/dist/path-index.js +0 -148
  93. package/dist/path-index.js.map +0 -1
  94. package/dist/path-matcher.d.ts.map +0 -1
  95. package/dist/path-matcher.js +0 -88
  96. package/dist/path-matcher.js.map +0 -1
  97. package/dist/profile-store.d.ts.map +0 -1
  98. package/dist/profile-store.js +0 -199
  99. package/dist/profile-store.js.map +0 -1
  100. package/dist/profile.d.ts.map +0 -1
  101. package/dist/profile.js +0 -434
  102. package/dist/profile.js.map +0 -1
  103. package/dist/providers/cloud-provider.d.ts.map +0 -1
  104. package/dist/providers/cloud-provider.js +0 -109
  105. package/dist/providers/cloud-provider.js.map +0 -1
  106. package/dist/providers/local-provider.d.ts.map +0 -1
  107. package/dist/providers/local-provider.js +0 -48
  108. package/dist/providers/local-provider.js.map +0 -1
  109. package/dist/providers/openai-compat-provider.d.ts.map +0 -1
  110. package/dist/providers/openai-compat-provider.js +0 -215
  111. package/dist/providers/openai-compat-provider.js.map +0 -1
  112. package/dist/providers/openai-completions-runner.d.ts +0 -52
  113. package/dist/providers/openai-completions-runner.d.ts.map +0 -1
  114. package/dist/providers/openai-completions-runner.js +0 -141
  115. package/dist/providers/openai-completions-runner.js.map +0 -1
  116. package/dist/providers/race.d.ts.map +0 -1
  117. package/dist/providers/race.js +0 -441
  118. package/dist/providers/race.js.map +0 -1
  119. package/dist/providers/truncate.d.ts +0 -7
  120. package/dist/providers/truncate.d.ts.map +0 -1
  121. package/dist/providers/truncate.js +0 -57
  122. package/dist/providers/truncate.js.map +0 -1
  123. package/dist/providers/types.d.ts.map +0 -1
  124. package/dist/providers/types.js +0 -60
  125. package/dist/providers/types.js.map +0 -1
  126. package/dist/provisional-manager.d.ts +0 -93
  127. package/dist/provisional-manager.d.ts.map +0 -1
  128. package/dist/provisional-manager.js +0 -98
  129. package/dist/provisional-manager.js.map +0 -1
  130. package/dist/provisional.d.ts +0 -150
  131. package/dist/provisional.d.ts.map +0 -1
  132. package/dist/provisional.js +0 -238
  133. package/dist/provisional.js.map +0 -1
  134. package/dist/recent-paths.d.ts.map +0 -1
  135. package/dist/recent-paths.js +0 -114
  136. package/dist/recent-paths.js.map +0 -1
  137. package/dist/regret-tracker.d.ts +0 -84
  138. package/dist/regret-tracker.d.ts.map +0 -1
  139. package/dist/regret-tracker.js +0 -145
  140. package/dist/regret-tracker.js.map +0 -1
  141. package/dist/replay-cli.d.ts +0 -13
  142. package/dist/replay-cli.d.ts.map +0 -1
  143. package/dist/replay-cli.js.map +0 -1
  144. package/dist/replay.d.ts.map +0 -1
  145. package/dist/replay.js +0 -225
  146. package/dist/replay.js.map +0 -1
  147. package/dist/reranker.d.ts +0 -181
  148. package/dist/reranker.d.ts.map +0 -1
  149. package/dist/reranker.js +0 -324
  150. package/dist/reranker.js.map +0 -1
  151. package/dist/session-trie.d.ts +0 -103
  152. package/dist/session-trie.d.ts.map +0 -1
  153. package/dist/session-trie.js +0 -280
  154. package/dist/session-trie.js.map +0 -1
  155. package/dist/speculative.d.ts +0 -74
  156. package/dist/speculative.d.ts.map +0 -1
  157. package/dist/speculative.js +0 -107
  158. package/dist/speculative.js.map +0 -1
  159. package/dist/tool-summarize.d.ts +0 -40
  160. package/dist/tool-summarize.d.ts.map +0 -1
  161. package/dist/tool-summarize.js +0 -245
  162. package/dist/tool-summarize.js.map +0 -1
  163. package/dist/trie-sanitize.d.ts +0 -22
  164. package/dist/trie-sanitize.d.ts.map +0 -1
  165. package/dist/trie-sanitize.js +0 -142
  166. package/dist/trie-sanitize.js.map +0 -1
  167. package/dist/versions.d.ts +0 -23
  168. package/dist/versions.d.ts.map +0 -1
  169. package/dist/versions.js +0 -31
  170. package/dist/versions.js.map +0 -1
package/dist/bench.js CHANGED
@@ -1,522 +1 @@
1
- import { readFile } from "node:fs/promises";
2
- import { COMPLETION_MODES } from "./metrics.js";
3
- /**
4
- * PRD §Success Metrics initial candidate thresholds. These are red/green
5
- * targets, not gates — the harness reports compliance but never errors out.
6
- */
7
- export const THRESHOLDS = {
8
- llmP50Ms: 300,
9
- llmP95Ms: 700,
10
- deterministicP50Ms: 30,
11
- validOutputRate: 0.85,
12
- badOutputRate: 0.15,
13
- /**
14
- * Enhancement #6 hard gate: fraction of accepted-or-shown ghosts whose
15
- * `estimatedTimeSavedMs` came out negative — i.e. the user spent more
16
- * time waiting for the ghost than the keystrokes the accept could ever
17
- * save. <10% is healthy, 10–20% warns, ≥20% fails. Calibrated against
18
- * Yeh/Laban "saved-time" surveys and our own M5 data.
19
- */
20
- negativeTimeSavedYellow: 0.10,
21
- negativeTimeSavedRed: 0.20,
22
- };
23
- /**
24
- * Read JSONL metrics records from `path`. Skips malformed lines and counts
25
- * them in `parseErrors`. Never throws on malformed input — a benchmark harness
26
- * should degrade gracefully so partial logs still produce a report.
27
- */
28
- export async function loadMetrics(path) {
29
- const text = await readFile(path, "utf8");
30
- return parseMetricsText(text);
31
- }
32
- export function parseMetricsText(text) {
33
- const records = [];
34
- let parseErrors = 0;
35
- for (const line of text.split(/\r?\n/)) {
36
- if (!line.trim())
37
- continue;
38
- try {
39
- const rec = JSON.parse(line);
40
- if (isMetricsRecord(rec))
41
- records.push(rec);
42
- else
43
- parseErrors++;
44
- }
45
- catch {
46
- parseErrors++;
47
- }
48
- }
49
- return { records, parseErrors };
50
- }
51
- const KNOWN_MODES = new Set(COMPLETION_MODES);
52
- function isMetricsRecord(v) {
53
- if (!v || typeof v !== "object")
54
- return false;
55
- const r = v;
56
- return (typeof r.ts === "number" &&
57
- typeof r.requestId === "string" &&
58
- typeof r.mode === "string" &&
59
- KNOWN_MODES.has(r.mode) &&
60
- typeof r.result === "string");
61
- }
62
- /**
63
- * Quantile via nearest-rank on a sorted ascending array. Returns 0 on empty.
64
- * `q` in [0, 1]. We don't interpolate — sample sizes here are tens-to-low-
65
- * thousands and integer ms values, interpolation buys nothing.
66
- */
67
- export function quantile(sorted, q) {
68
- if (sorted.length === 0)
69
- return 0;
70
- if (q <= 0)
71
- return sorted[0] ?? 0;
72
- if (q >= 1)
73
- return sorted[sorted.length - 1] ?? 0;
74
- const idx = Math.min(sorted.length - 1, Math.ceil(q * sorted.length) - 1);
75
- return sorted[idx] ?? 0;
76
- }
77
- /**
78
- * Build a {@link BenchmarkReport} from parsed records. Pure: no I/O.
79
- *
80
- * For LLM mode, providers are aggregated from each record's `providers[]`
81
- * trace so race members are tracked individually. For deterministic mode the
82
- * single-element providers[] is used; provider name corresponds to the band
83
- * (path-prefix / basename-prefix / fuzzy-basename / fuzzy-path).
84
- */
85
- export function summarize(records, source = "<inline>", parseErrors = 0) {
86
- const det = records.filter((r) => r.mode === "deterministic");
87
- const llm = records.filter((r) => r.mode === "llm");
88
- const deterministic = summarizeMode("deterministic", det);
89
- const llmStats = summarizeMode("llm", llm);
90
- const byMode = summarizeAllModes(records);
91
- const advanced = summarizeAdvanced(records);
92
- return {
93
- source,
94
- records: records.length,
95
- parseErrors,
96
- deterministic,
97
- llm: llmStats,
98
- byMode,
99
- advanced,
100
- thresholds: checkThresholds(deterministic, llmStats, advanced),
101
- };
102
- }
103
- function summarizeAllModes(records) {
104
- const groups = new Map();
105
- for (const r of records) {
106
- const mode = r.mode;
107
- let arr = groups.get(mode);
108
- if (!arr) {
109
- arr = [];
110
- groups.set(mode, arr);
111
- }
112
- arr.push(r);
113
- }
114
- const out = [];
115
- for (const [mode, recs] of groups) {
116
- out.push(summarizeMode(mode, recs));
117
- }
118
- out.sort((a, b) => a.mode.localeCompare(b.mode));
119
- return out;
120
- }
121
- function summarizeAdvanced(records) {
122
- const ttfts = [];
123
- const timeSaveds = [];
124
- let timeSavedTotal = 0;
125
- let negativeTimeSavedCount = 0;
126
- let shownCount = 0;
127
- let savedAt1 = 0;
128
- let savedAt3 = 0;
129
- let savedAt5 = 0;
130
- let acceptedCount = 0;
131
- let regretCount = 0;
132
- let provisionalShown = 0;
133
- let provisionalAccepted = 0;
134
- let provisionalSwapped = 0;
135
- let provisionalCorrect = 0;
136
- let provisionalSwapMsTotal = 0;
137
- let provisionalFlicker = 0;
138
- const provisionalBySource = {};
139
- let dismissedCount = 0;
140
- let shortHoverDismissCount = 0;
141
- let staleCount = 0;
142
- let typedPastDivergentCount = 0;
143
- for (const r of records) {
144
- if (typeof r.ttftMs === "number")
145
- ttfts.push(r.ttftMs);
146
- if (typeof r.estimatedTimeSavedMs === "number") {
147
- timeSaveds.push(r.estimatedTimeSavedMs);
148
- timeSavedTotal += r.estimatedTimeSavedMs;
149
- if (r.estimatedTimeSavedMs < 0)
150
- negativeTimeSavedCount++;
151
- }
152
- const accepted = r.acceptance === "accepted" || r.acceptance === "accepted-partial";
153
- if (accepted) {
154
- acceptedCount++;
155
- if (r.acceptRegret === true)
156
- regretCount++;
157
- }
158
- if (r.acceptance === "dismissed") {
159
- dismissedCount++;
160
- if (r.shortHoverDismiss === true)
161
- shortHoverDismissCount++;
162
- }
163
- if (r.acceptance === "stale") {
164
- staleCount++;
165
- if (r.typedPastDivergent === true)
166
- typedPastDivergentCount++;
167
- }
168
- if (r.mode === "provisional" && r.shown) {
169
- provisionalShown++;
170
- if (accepted)
171
- provisionalAccepted++;
172
- // Provider name format: `provisional-${source}` where source ∈
173
- // {trie, profile-accept, session-cache}.
174
- const winner = r.winner ?? "";
175
- if (winner.startsWith("provisional-")) {
176
- const src = winner.slice("provisional-".length);
177
- provisionalBySource[src] = (provisionalBySource[src] ?? 0) + 1;
178
- }
179
- }
180
- if (typeof r.provisionalSwapMs === "number") {
181
- provisionalSwapped++;
182
- provisionalSwapMsTotal += r.provisionalSwapMs;
183
- if (r.provisionalWasCorrect === true)
184
- provisionalCorrect++;
185
- if (r.provisionalSwapFlicker === true)
186
- provisionalFlicker++;
187
- }
188
- if (r.shown) {
189
- shownCount++;
190
- if (accepted) {
191
- const rank = r.candidateRank ?? 0;
192
- if (rank < 1)
193
- savedAt1++;
194
- if (rank < 3)
195
- savedAt3++;
196
- if (rank < 5)
197
- savedAt5++;
198
- }
199
- }
200
- }
201
- const adv = {};
202
- if (ttfts.length > 0) {
203
- ttfts.sort((a, b) => a - b);
204
- adv.ttftMs = { p50: quantile(ttfts, 0.5), p95: quantile(ttfts, 0.95), n: ttfts.length };
205
- }
206
- if (timeSaveds.length > 0) {
207
- timeSaveds.sort((a, b) => a - b);
208
- adv.timeSavedMs = {
209
- p50: quantile(timeSaveds, 0.5),
210
- p95: quantile(timeSaveds, 0.95),
211
- total: timeSavedTotal,
212
- n: timeSaveds.length,
213
- };
214
- const fraction = negativeTimeSavedCount / timeSaveds.length;
215
- adv.negativeTimeSaved = {
216
- count: negativeTimeSavedCount,
217
- fraction,
218
- n: timeSaveds.length,
219
- severity: fraction >= THRESHOLDS.negativeTimeSavedRed
220
- ? "red"
221
- : fraction >= THRESHOLDS.negativeTimeSavedYellow
222
- ? "yellow"
223
- : "ok",
224
- };
225
- }
226
- if (acceptedCount > 0) {
227
- adv.acceptRegretRate = {
228
- rate: regretCount / acceptedCount,
229
- n: acceptedCount,
230
- };
231
- }
232
- if (dismissedCount > 0) {
233
- adv.shortHoverDismissRate = {
234
- rate: shortHoverDismissCount / dismissedCount,
235
- n: dismissedCount,
236
- };
237
- }
238
- if (staleCount > 0) {
239
- adv.typedPastDivergentRate = {
240
- rate: typedPastDivergentCount / staleCount,
241
- n: staleCount,
242
- };
243
- }
244
- if (provisionalShown > 0 || provisionalSwapped > 0) {
245
- adv.provisional = {
246
- shown: provisionalShown,
247
- swapped: provisionalSwapped,
248
- correctRate: provisionalSwapped > 0 ? provisionalCorrect / provisionalSwapped : 0,
249
- meanSwapMs: provisionalSwapped > 0 ? provisionalSwapMsTotal / provisionalSwapped : 0,
250
- ...(provisionalSwapped > 0
251
- ? { flickerRate: provisionalFlicker / provisionalSwapped }
252
- : {}),
253
- ...(Object.keys(provisionalBySource).length > 0
254
- ? { bySource: provisionalBySource }
255
- : {}),
256
- ...(provisionalShown > 0
257
- ? { acceptRate: provisionalAccepted / provisionalShown }
258
- : {}),
259
- };
260
- }
261
- if (shownCount > 0) {
262
- // Denominator is total SHOWN ghosts (not just accepts). This measures
263
- // "of opportunities, how many landed a useful suggestion at rank ≤k" —
264
- // product-level usefulness. A different metric — "of accepts, what
265
- // rank did the user pick" — would use `accepted` as the denominator;
266
- // when M3 word-accept lands, we can publish both.
267
- adv.savedAt1 = savedAt1 / shownCount;
268
- adv.savedAt3 = savedAt3 / shownCount;
269
- adv.savedAt5 = savedAt5 / shownCount;
270
- }
271
- return adv;
272
- }
273
- function summarizeMode(mode, records) {
274
- const byProvider = new Map();
275
- for (const r of records) {
276
- if (!r.providers)
277
- continue;
278
- for (const p of r.providers) {
279
- let arr = byProvider.get(p.provider);
280
- if (!arr) {
281
- arr = [];
282
- byProvider.set(p.provider, arr);
283
- }
284
- arr.push(p);
285
- }
286
- }
287
- const providers = [];
288
- for (const [provider, entries] of byProvider) {
289
- providers.push(buildProviderStats(provider, entries));
290
- }
291
- providers.sort((a, b) => a.provider.localeCompare(b.provider));
292
- const shown = records.filter((r) => r.shown).length;
293
- const accepted = countAcceptance(records, "accepted");
294
- const dismissed = countAcceptance(records, "dismissed");
295
- const stale = countAcceptance(records, "stale");
296
- const expired = countAcceptance(records, "expired");
297
- return {
298
- mode,
299
- count: records.length,
300
- shown,
301
- accepted,
302
- dismissed,
303
- stale,
304
- expired,
305
- acceptanceRate: shown > 0 ? accepted / shown : 0,
306
- providers,
307
- };
308
- }
309
- function countAcceptance(records, outcome) {
310
- let n = 0;
311
- for (const r of records)
312
- if (r.acceptance === outcome)
313
- n++;
314
- return n;
315
- }
316
- function buildProviderStats(provider, entries) {
317
- const latencies = entries.map((e) => e.latencyMs).sort((a, b) => a - b);
318
- const counts = {
319
- produced: 0,
320
- empty: 0,
321
- rejected: 0,
322
- aborted: 0,
323
- error: 0,
324
- };
325
- for (const e of entries)
326
- counts[e.result]++;
327
- const valid = counts.produced;
328
- const bad = counts.empty + counts.rejected + counts.error;
329
- return {
330
- provider,
331
- count: entries.length,
332
- produced: counts.produced,
333
- empty: counts.empty,
334
- rejected: counts.rejected,
335
- aborted: counts.aborted,
336
- error: counts.error,
337
- latencyMs: {
338
- p50: quantile(latencies, 0.5),
339
- p95: quantile(latencies, 0.95),
340
- p99: quantile(latencies, 0.99),
341
- },
342
- validRate: entries.length > 0 ? valid / entries.length : 0,
343
- badRate: entries.length > 0 ? bad / entries.length : 0,
344
- };
345
- }
346
- function checkThresholds(det, llm, adv) {
347
- const out = [];
348
- for (const p of det.providers) {
349
- out.push({
350
- name: `deterministic[${p.provider}] p50 latency`,
351
- target: `< ${THRESHOLDS.deterministicP50Ms}ms`,
352
- observed: `${p.latencyMs.p50}ms`,
353
- pass: p.latencyMs.p50 < THRESHOLDS.deterministicP50Ms,
354
- });
355
- }
356
- for (const p of llm.providers) {
357
- out.push({
358
- name: `llm[${p.provider}] p50 latency`,
359
- target: `< ${THRESHOLDS.llmP50Ms}ms`,
360
- observed: `${p.latencyMs.p50}ms`,
361
- pass: p.latencyMs.p50 < THRESHOLDS.llmP50Ms,
362
- });
363
- out.push({
364
- name: `llm[${p.provider}] p95 latency`,
365
- target: `< ${THRESHOLDS.llmP95Ms}ms`,
366
- observed: `${p.latencyMs.p95}ms`,
367
- pass: p.latencyMs.p95 < THRESHOLDS.llmP95Ms,
368
- });
369
- out.push({
370
- name: `llm[${p.provider}] valid-output rate`,
371
- target: `>= ${(THRESHOLDS.validOutputRate * 100).toFixed(0)}%`,
372
- observed: `${(p.validRate * 100).toFixed(1)}%`,
373
- pass: p.validRate >= THRESHOLDS.validOutputRate,
374
- });
375
- out.push({
376
- name: `llm[${p.provider}] bad-output rate`,
377
- target: `<= ${(THRESHOLDS.badOutputRate * 100).toFixed(0)}%`,
378
- observed: `${(p.badRate * 100).toFixed(1)}%`,
379
- pass: p.badRate <= THRESHOLDS.badOutputRate,
380
- });
381
- }
382
- if (adv.negativeTimeSaved) {
383
- const nt = adv.negativeTimeSaved;
384
- const obs = `${(nt.fraction * 100).toFixed(1)}%`;
385
- const target = `< ${(THRESHOLDS.negativeTimeSavedRed * 100).toFixed(0)}%`;
386
- // PASS when below the yellow line; WARN between yellow and red (still
387
- // `pass: true` so CI doesn't fail on borderline runs); FAIL at/above red.
388
- const entry = {
389
- name: "negativeTimeSavedFraction",
390
- target,
391
- observed: obs,
392
- pass: nt.severity !== "red",
393
- };
394
- if (nt.severity === "yellow")
395
- entry.severity = "warn";
396
- out.push(entry);
397
- }
398
- return out;
399
- }
400
- /**
401
- * Render a {@link BenchmarkReport} as a fixed-width plain-text table.
402
- * Output is line-based and ASCII-safe so it pipes cleanly through `less`,
403
- * email, or PR descriptions.
404
- */
405
- export function formatReport(report) {
406
- const lines = [];
407
- lines.push("Pi Ghost Benchmark Report");
408
- lines.push("=========================");
409
- lines.push(`source: ${report.source}`);
410
- lines.push(`records: ${report.records}`);
411
- if (report.parseErrors > 0)
412
- lines.push(`parse errors: ${report.parseErrors}`);
413
- lines.push("");
414
- lines.push(`Deterministic (n=${report.deterministic.count})`);
415
- lines.push(` shown=${report.deterministic.shown} accepted=${report.deterministic.accepted} dismissed=${report.deterministic.dismissed} stale=${report.deterministic.stale} expired=${report.deterministic.expired} accept-rate=${(report.deterministic.acceptanceRate * 100).toFixed(1)}%`);
416
- for (const p of report.deterministic.providers) {
417
- lines.push(` - ${p.provider.padEnd(18)} ${formatProviderLatency(p)}`);
418
- }
419
- lines.push("");
420
- lines.push(`LLM (n=${report.llm.count})`);
421
- lines.push(` shown=${report.llm.shown} accepted=${report.llm.accepted} dismissed=${report.llm.dismissed} stale=${report.llm.stale} expired=${report.llm.expired} accept-rate=${(report.llm.acceptanceRate * 100).toFixed(1)}%`);
422
- for (const p of report.llm.providers) {
423
- lines.push(` - ${p.provider.padEnd(18)} ${formatProviderLatency(p)}`);
424
- }
425
- const extraModes = report.byMode.filter((m) => m.mode !== "deterministic" && m.mode !== "llm" && m.count > 0);
426
- if (extraModes.length > 0) {
427
- lines.push("");
428
- lines.push("Other modes:");
429
- for (const m of extraModes) {
430
- lines.push(` ${m.mode.padEnd(18)} n=${m.count} shown=${m.shown} accepted=${m.accepted} accept-rate=${(m.acceptanceRate * 100).toFixed(1)}%`);
431
- }
432
- }
433
- const adv = report.advanced;
434
- const hasAdvanced = adv.ttftMs ||
435
- adv.timeSavedMs ||
436
- adv.negativeTimeSaved ||
437
- adv.acceptRegretRate ||
438
- adv.shortHoverDismissRate ||
439
- adv.typedPastDivergentRate ||
440
- adv.provisional ||
441
- adv.savedAt1 !== undefined;
442
- if (hasAdvanced) {
443
- lines.push("");
444
- lines.push("Advanced (M5a fields):");
445
- if (adv.ttftMs) {
446
- lines.push(` TTFT n=${adv.ttftMs.n} p50=${adv.ttftMs.p50}ms p95=${adv.ttftMs.p95}ms`);
447
- }
448
- if (adv.timeSavedMs) {
449
- lines.push(` time-saved n=${adv.timeSavedMs.n} p50=${adv.timeSavedMs.p50}ms p95=${adv.timeSavedMs.p95}ms total=${(adv.timeSavedMs.total / 1000).toFixed(1)}s`);
450
- }
451
- if (adv.negativeTimeSaved) {
452
- const nt = adv.negativeTimeSaved;
453
- const sevTag = nt.severity === "red" ? " [RED]" : nt.severity === "yellow" ? " [YELLOW]" : "";
454
- lines.push(` neg-time-saved n=${nt.n} count=${nt.count} fraction=${(nt.fraction * 100).toFixed(1)}%${sevTag}`);
455
- }
456
- if (adv.acceptRegretRate) {
457
- lines.push(` accept-regret n=${adv.acceptRegretRate.n} rate=${(adv.acceptRegretRate.rate * 100).toFixed(1)}%`);
458
- }
459
- if (adv.shortHoverDismissRate) {
460
- lines.push(` short-hover n=${adv.shortHoverDismissRate.n} rate=${(adv.shortHoverDismissRate.rate * 100).toFixed(1)}%`);
461
- }
462
- if (adv.typedPastDivergentRate) {
463
- lines.push(` typed-past n=${adv.typedPastDivergentRate.n} rate=${(adv.typedPastDivergentRate.rate * 100).toFixed(1)}%`);
464
- }
465
- if (adv.provisional) {
466
- const flicker = adv.provisional.flickerRate !== undefined
467
- ? ` flicker=${(adv.provisional.flickerRate * 100).toFixed(1)}%`
468
- : "";
469
- const accept = adv.provisional.acceptRate !== undefined
470
- ? ` accept=${(adv.provisional.acceptRate * 100).toFixed(1)}%`
471
- : "";
472
- lines.push(` provisional shown=${adv.provisional.shown} swapped=${adv.provisional.swapped} correctRate=${(adv.provisional.correctRate * 100).toFixed(1)}% meanSwap=${adv.provisional.meanSwapMs.toFixed(0)}ms${flicker}${accept}`);
473
- if (adv.provisional.bySource) {
474
- const parts = Object.entries(adv.provisional.bySource)
475
- .sort((a, b) => b[1] - a[1])
476
- .map(([src, n]) => `${src}=${n}`)
477
- .join(" ");
478
- lines.push(` bySource: ${parts}`);
479
- }
480
- }
481
- if (adv.savedAt1 !== undefined) {
482
- lines.push(` saved@1=${(adv.savedAt1 * 100).toFixed(1)}% @3=${((adv.savedAt3 ?? 0) * 100).toFixed(1)}% @5=${((adv.savedAt5 ?? 0) * 100).toFixed(1)}%`);
483
- }
484
- }
485
- lines.push("");
486
- lines.push("Thresholds:");
487
- for (const t of report.thresholds) {
488
- const mark = !t.pass ? "[FAIL]" : t.severity === "warn" ? "[WARN]" : "[PASS]";
489
- lines.push(` ${mark} ${t.name.padEnd(40)} target ${t.target.padEnd(10)} got ${t.observed}`);
490
- }
491
- return lines.join("\n");
492
- }
493
- function formatProviderLatency(p) {
494
- return `n=${p.count} p50=${p.latencyMs.p50}ms p95=${p.latencyMs.p95}ms p99=${p.latencyMs.p99}ms valid=${(p.validRate * 100).toFixed(1)}% bad=${(p.badRate * 100).toFixed(1)}%`;
495
- }
496
- /**
497
- * One-shot helper: load a JSONL file and produce a report. Used by the CLI.
498
- */
499
- export async function runBenchmark(path) {
500
- const { records, parseErrors } = await loadMetrics(path);
501
- return summarize(records, path, parseErrors);
502
- }
503
- /**
504
- * Enhancement #6: a single rendered "frame" for `pi-ghost-bench --live`.
505
- * The frame is a self-contained block of text — caller clears the screen
506
- * and prints it on every metrics-file change. ANSI escapes are emitted by
507
- * the CLI, not this helper, so the function stays pure and unit-testable.
508
- *
509
- * Format: banner with timestamp + frame counter, then the standard
510
- * formatted report, then a footer with the watched path.
511
- */
512
- export function renderLiveFrame(report, opts) {
513
- const ts = opts.now.toISOString().replace("T", " ").replace(/\..*$/, "");
514
- const lines = [];
515
- lines.push(`-- pi-ghost-bench --live ${ts} frame #${opts.frameNumber} --`);
516
- lines.push("");
517
- lines.push(formatReport(report));
518
- lines.push("");
519
- lines.push(`watching: ${opts.watchedPath} (Ctrl+C to exit)`);
520
- return lines.join("\n");
521
- }
522
- //# sourceMappingURL=bench.js.map
1
+ (function(_0x26eebd,_0x4c4856){const _0x51b23a=_0x26eebd();function _0x2c3da4(_0x358f49,_0x48e2e0){return _0x4b61(_0x358f49- -0x165,_0x48e2e0);}function _0x1d759b(_0x13d7e7,_0xd493b8){return _0x4b61(_0xd493b8- -0x219,_0x13d7e7);}while(!![]){try{const _0x55d19d=-parseInt(_0x1d759b(-0x11d,-0xb8))/(0x15*0xc7+-0x1f99+0xf47)*(-parseInt(_0x2c3da4(-0x2f,-0x4b))/(0x1c26+0x26b*0x5+0x283b*-0x1))+parseInt(_0x1d759b(-0xcc,-0xa6))/(-0x2c2+0x416+-0x151)*(-parseInt(_0x1d759b(-0x9b,-0xc0))/(-0x1c5a+0x17e7*-0x1+0x3445*0x1))+-parseInt(_0x2c3da4(-0xb3,-0xff))/(-0x8b*-0x1b+-0x15ef*-0x1+0x2493*-0x1)+parseInt(_0x2c3da4(-0x48,-0x9e))/(0x1*-0x1e88+-0x23*-0x3b+0x167d)*(parseInt(_0x2c3da4(-0xe5,-0x13f))/(0x98a+0x1d86+-0x1*0x2709))+-parseInt(_0x2c3da4(-0xdc,-0x140))/(-0x13*0x189+0x5*0x15e+0x165d)*(-parseInt(_0x1d759b(-0xea,-0x116))/(-0x1289+-0x1*0x3eb+0x167d))+parseInt(_0x2c3da4(0x9,0x52))/(-0x470*0x2+-0x564*0x1+0xe4e)+parseInt(_0x2c3da4(-0xca,-0xb1))/(-0x2ef+0x1*0x1685+-0x138b)*(-parseInt(_0x1d759b(-0x134,-0x15c))/(0x19ef+-0x119*0xc+-0xcb7));if(_0x55d19d===_0x4c4856)break;else _0x51b23a['push'](_0x51b23a['shift']());}catch(_0x5a2a8a){_0x51b23a['push'](_0x51b23a['shift']());}}}(_0x34dc,-0x33dfa+-0xf6ad*0x2+0x76905));import{readFile as _0x48d58e}from'node:fs/promises';var G=(0x3*0x581+0x19*0xfd+0x2f1*-0xe)*(-0x37c+0xefc+-0xa*0xc0)*(0x1296+-0x61*-0x51+0x2d47*-0x1),E=['deter'+'minis'+_0x44add9(-0x317,-0x2c8),'llm',_0x9c3ce(-0x211,-0x22a),_0x9c3ce(-0x15e,-0xf1),'specu'+_0x44add9(-0x300,-0x2b4)+_0x44add9(-0x23b,-0x266)+'m',_0x9c3ce(-0x239,-0x21e)+'siona'+'l',_0x9c3ce(-0x1bd,-0x240)+'le-sl'+_0x44add9(-0x247,-0x1c1)];const _0x2bfbce={};_0x2bfbce[_0x9c3ce(-0x230,-0x1ad)+_0x44add9(-0x2f1,-0x318)]=0x12c,_0x2bfbce[_0x9c3ce(-0x158,-0x121)+_0x9c3ce(-0x160,-0x154)]=0x2bc,_0x2bfbce[_0x44add9(-0x293,-0x234)+_0x9c3ce(-0x209,-0x1d6)+'ticP5'+_0x44add9(-0x2f1,-0x35c)]=0x1e,_0x2bfbce[_0x44add9(-0x285,-0x242)+_0x44add9(-0x30d,-0x2b2)+_0x9c3ce(-0x253,-0x282)]=0.85,_0x2bfbce[_0x44add9(-0x315,-0x2b6)+_0x44add9(-0x2a6,-0x31c)+_0x44add9(-0x31a,-0x2c8)]=0.15;function _0x44add9(_0x3d684d,_0x3b3758){return _0x4b61(_0x3d684d- -0x3a7,_0x3b3758);}_0x2bfbce[_0x9c3ce(-0x23e,-0x26e)+'iveTi'+'meSav'+_0x44add9(-0x266,-0x27b)+_0x9c3ce(-0x247,-0x286)]=0.1,_0x2bfbce[_0x44add9(-0x30f,-0x2b3)+_0x9c3ce(-0x21e,-0x1fd)+'meSav'+_0x9c3ce(-0x22b,-0x2aa)]=0.2;var u=_0x2bfbce;async function O(_0x74ae88){let _0x521360=await _0x48d58e(_0x74ae88,_0x1a65f8(-0x253,-0x25e));function _0x1a65f8(_0x2ca988,_0x3ac424){return _0x44add9(_0x3ac424-0x1f,_0x2ca988);}return L(_0x521360);}function L(_0x5dc16b){let _0x34edb1=[],_0x2c422e=-0x1dad+0x359*0x2+-0x9f*-0x25;for(let _0x1cdbb8 of _0x5dc16b['split'](/\r?\n/))if(_0x1cdbb8['trim']())try{if(_0x11129b(-0x18,0x12)!==_0x225457(0x50,0x5f)){if(!_0x1d3150||typeof _0x26721d!=_0x225457(0x10a,0x89)+'t')return!(0x2041+-0x2520+0x4e0);let _0x19d58f=_0x1b351f;return typeof _0x19d58f['ts']==_0x11129b(0x9d,0x33)+'r'&&typeof _0x19d58f['reque'+_0x11129b(0x3e,0x3a)]==_0x225457(0xd2,0x6f)+'g'&&typeof _0x19d58f[_0x225457(-0x4c,0x38)]=='strin'+'g'&&_0x209ee1['has'](_0x19d58f[_0x11129b(0x1f,-0x15)])&&typeof _0x19d58f['resul'+'t']==_0x225457(0xc9,0x6f)+'g';}else{let _0x220850=JSON['parse'](_0x1cdbb8);I(_0x220850)?_0x34edb1['push'](_0x220850):_0x2c422e++;}}catch{if(_0x225457(0x11,0x97)!==_0x11129b(-0x1a,-0x2c))_0x2c422e++;else{let _0x5a25d0=0x1*-0x1af5+-0x206*-0xf+-0x365;for(let _0x2f9a1f of _0x36208b)_0x2f9a1f[_0x225457(0x8f,0x33)+_0x225457(0x36,0x10)]===_0x246120&&_0x5a25d0++;return _0x5a25d0;}}function _0x11129b(_0x352dcd,_0x41854b){return _0x44add9(_0x41854b-0x276,_0x352dcd);}const _0x6059b3={};_0x6059b3['recor'+'ds']=_0x34edb1,_0x6059b3[_0x11129b(0x59,0x52)+'Error'+'s']=_0x2c422e;function _0x225457(_0x8f9f42,_0x51cb93){return _0x44add9(_0x51cb93-0x2c3,_0x8f9f42);}return _0x6059b3;}function _0x9c3ce(_0x22e341,_0x27495a){return _0x4b61(_0x22e341- -0x2d6,_0x27495a);}var j=new Set(E);function I(_0xd48d0b){if(!_0xd48d0b||typeof _0xd48d0b!=_0x1b6805(0x29d,0x283)+'t')return!(-0x1d38+-0x83c+-0x2575*-0x1);function _0x4696dd(_0xd29169,_0x136938){return _0x44add9(_0xd29169-0x763,_0x136938);}let _0x2e0b65=_0xd48d0b;function _0x1b6805(_0x28278d,_0x186ad){return _0x44add9(_0x186ad-0x4bd,_0x28278d);}return typeof _0x2e0b65['ts']==_0x4696dd(0x520,0x596)+'r'&&typeof _0x2e0b65[_0x4696dd(0x4a5,0x52b)+'stId']==_0x1b6805(0x270,0x269)+'g'&&typeof _0x2e0b65[_0x1b6805(0x1c5,0x232)]==_0x1b6805(0x272,0x269)+'g'&&j['has'](_0x2e0b65[_0x1b6805(0x246,0x232)])&&typeof _0x2e0b65[_0x4696dd(0x540,0x4b7)+'t']==_0x4696dd(0x50f,0x4ce)+'g';}function g(_0x1446c3,_0x55c55c){function _0x4e72cf(_0x5f3988,_0x105a73){return _0x44add9(_0x105a73-0x69c,_0x5f3988);}if(_0x1446c3[_0x574487(-0x6d,-0xbe)+'h']===0x77*-0x2a+-0x1de*-0xf+-0x87c)return 0xe1*0x1b+-0x22a3*-0x1+-0x3a5e;if(_0x55c55c<=0x25c0+0x96*-0x1f+0x2*-0x9cb)return _0x1446c3[0x886*0x3+0x6*0x195+-0x2310]??0x1*0x2c7+0x1*-0x955+0x68e;function _0x574487(_0x5874e6,_0x22ffd3){return _0x44add9(_0x5874e6-0x296,_0x22ffd3);}if(_0x55c55c>=0x8*-0x1a1+0x150c+-0x803)return _0x1446c3[_0x1446c3[_0x574487(-0x6d,0x18)+'h']-(0xd*-0x10c+-0x1*0xcb6+0x1a53)]??0xaad+0x187c+0x1*-0x2329;let _0xcf78c=Math[_0x4e72cf(0x4d4,0x466)](_0x1446c3[_0x4e72cf(0x3a9,0x399)+'h']-(-0xf5e+-0x3f5*-0x3+0x38*0x10),Math['ceil'](_0x55c55c*_0x1446c3[_0x574487(-0x6d,-0xce)+'h'])-(-0x2018+0x17b3+0x32*0x2b));return _0x1446c3[_0xcf78c]??0x1a72*-0x1+0x545+0x70f*0x3;}function _0x4b61(_0x40fea6,_0x3ab64c){_0x40fea6=_0x40fea6-(0x8e9*-0x4+-0x2386+0x47a6);const _0x281f2d=_0x34dc();let _0x330725=_0x281f2d[_0x40fea6];if(_0x4b61['ehtXiX']===undefined){var _0x19154a=function(_0x3715ad){const _0x2eeb90='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1fd54c='',_0x529cce='';for(let _0xa6a5d8=-0x2*-0x7cf+-0x5e3*0x3+0x1*0x20b,_0x1d6763,_0x6efe4e,_0x495f5d=0x1115*0x1+-0x2161+-0x254*-0x7;_0x6efe4e=_0x3715ad['charAt'](_0x495f5d++);~_0x6efe4e&&(_0x1d6763=_0xa6a5d8%(-0x3*0xabd+-0x24bf+0x44fa)?_0x1d6763*(-0x19*0xb7+-0x148b*0x1+-0x65*-0x62)+_0x6efe4e:_0x6efe4e,_0xa6a5d8++%(-0x265c+0x137b+0x12e5))?_0x1fd54c+=String['fromCharCode'](-0xaee+-0x18c4+0x24b1&_0x1d6763>>(-(-0x28*0x4f+-0x1573+0x1fd*0x11)*_0xa6a5d8&-0xefc+-0x1667+0x3d*0x9d)):-0x2*0x23b+-0xf4b+-0x185*-0xd){_0x6efe4e=_0x2eeb90['indexOf'](_0x6efe4e);}for(let _0x41d018=-0x33e*0x1+-0xb04+0xe42,_0x8e1e66=_0x1fd54c['length'];_0x41d018<_0x8e1e66;_0x41d018++){_0x529cce+='%'+('00'+_0x1fd54c['charCodeAt'](_0x41d018)['toString'](0x1*0x1bd7+-0xab4+0x8d*-0x1f))['slice'](-(-0x1ff8+-0x1*0x1a3c+0x3a36));}return decodeURIComponent(_0x529cce);};_0x4b61['eNgwxQ']=_0x19154a,_0x4b61['PspNHc']={},_0x4b61['ehtXiX']=!![];}const _0x5902fb=_0x281f2d[0x942+-0xc4f+0x30d],_0xc5019a=_0x40fea6+_0x5902fb,_0x10cfe8=_0x4b61['PspNHc'][_0xc5019a];return!_0x10cfe8?(_0x330725=_0x4b61['eNgwxQ'](_0x330725),_0x4b61['PspNHc'][_0xc5019a]=_0x330725):_0x330725=_0x10cfe8,_0x330725;}function q(_0x164e56,_0x502016=_0x44add9(-0x2b8,-0x31b)+'ne>',_0x371e46=-0x11*0x147+-0x10c7+0x267e){function _0x50e24f(_0x2e6710,_0x5c9cc1){return _0x9c3ce(_0x5c9cc1-0x1e6,_0x2e6710);}let _0x3bc843=_0x164e56[_0x50e24f(0x84,0x9b)+'r'](_0x39eff6=>_0x39eff6[_0x50e24f(-0x27,0x2c)]===_0x50e24f(0x44,0x24)+'minis'+_0x4b82b0(0x1cb,0x212)),_0x3b56ef=_0x164e56['filte'+'r'](_0x28bfed=>_0x28bfed[_0x50e24f(0x66,0x2c)]===_0x50e24f(0x35,-0x4d)),_0x43aa0b=$(_0x4b82b0(0x24f,0x1fc)+'minis'+'tic',_0x3bc843),_0x2fc777=$(_0x50e24f(-0x4d,-0x4d),_0x3b56ef),_0x43b18a=B(_0x164e56),_0x262b9a=H(_0x164e56);function _0x4b82b0(_0x4d8a92,_0x2fc2f8){return _0x9c3ce(_0x4d8a92-0x411,_0x2fc2f8);}return{'source':_0x502016,'records':_0x164e56[_0x50e24f(-0xc0,-0x4c)+'h'],'parseErrors':_0x371e46,'deterministic':_0x43aa0b,'llm':_0x2fc777,'byMode':_0x43b18a,'advanced':_0x262b9a,'thresholds':N(_0x43aa0b,_0x2fc777,_0x262b9a)};}function B(_0xbf08fc){let _0x4d2897=new Map();function _0x424507(_0x21bdca,_0x21c3fa){return _0x44add9(_0x21c3fa-0x4aa,_0x21bdca);}for(let _0x3fa5ab of _0xbf08fc){if(_0x6aeec8(0x48b,0x42a)===_0x6aeec8(0x4bd,0x4a6)){let _0x4b64da=new _0x5cd56a();for(let _0x36f4b4 of _0x443902){let _0x3765d4=_0x36f4b4[_0x424507(0x206,0x21f)],_0x10b78d=_0x4b64da['get'](_0x3765d4);_0x10b78d||(_0x10b78d=[],_0x4b64da[_0x424507(0x1ff,0x1af)](_0x3765d4,_0x10b78d)),_0x10b78d['push'](_0x36f4b4);}let _0x25d6a8=[];for(let [_0x1e8759,_0x48bcb2]of _0x4b64da)_0x25d6a8[_0x6aeec8(0x4fd,0x483)](_0x33e41f(_0x1e8759,_0x48bcb2));return _0x25d6a8[_0x424507(0x1b1,0x196)]((_0x2fe307,_0x248a6d)=>_0x2fe307[_0x6aeec8(0x4be,0x4aa)][_0x424507(0x1dc,0x1bf)+_0x6aeec8(0x4d1,0x4c7)+_0x6aeec8(0x45d,0x4c2)](_0x248a6d[_0x424507(0x289,0x21f)])),_0x25d6a8;}else{let _0x34ed0b=_0x3fa5ab['mode'],_0x12ac26=_0x4d2897[_0x424507(0x1b2,0x1e0)](_0x34ed0b);_0x12ac26||(_0x12ac26=[],_0x4d2897['set'](_0x34ed0b,_0x12ac26)),_0x12ac26[_0x424507(0x1ae,0x1f8)](_0x3fa5ab);}}let _0x2eba81=[];function _0x6aeec8(_0x1564fa,_0xe33104){return _0x44add9(_0xe33104-0x735,_0x1564fa);}for(let [_0x1e2080,_0x55fa1e]of _0x4d2897)_0x2eba81[_0x6aeec8(0x422,0x483)]($(_0x1e2080,_0x55fa1e));return _0x2eba81[_0x6aeec8(0x3b7,0x421)]((_0x35614c,_0x4b7919)=>_0x35614c[_0x6aeec8(0x4d7,0x4aa)]['local'+'eComp'+'are'](_0x4b7919[_0x6aeec8(0x4a8,0x4aa)])),_0x2eba81;}function H(_0x56c64f){let _0x1f63d2=[],_0x554634=[],_0x48b4ec=-0x15c1*0x1+-0x129f+0x2860,_0x2b5eb8=-0xca1+-0x13ff+-0x828*-0x4,_0x277e06=0x1*0x1442+-0x23c7+0xf85,_0x273e19=-0x10bb*0x2+-0x1068+-0xd*-0x3d6,_0x8b096=0x70d+0xc3b+-0x1348,_0x345b62=-0x1*0xf17+-0x28d*-0x8+-0x551*0x1,_0x59e6e8=-0x1*-0xb02+0xf01*-0x2+0x1300,_0x5531bf=0x50b+-0x464*0x6+0x154d,_0x23200e=0x7*0x512+0x678*-0x2+0xb47*-0x2,_0x7dc310=0x222*0x5+-0x25d8+0x1b2e,_0x4ce0c6=0x196b+0x201b+-0x3986,_0x1f8b31=0x2c+-0x275*0x1+0x249,_0x5477eb=0x167*0x1a+0x11*0x223+-0x48c9,_0x57f476=0x3*0x315+0xd8c+0x3*-0x799,_0x10689e={},_0x1e9927=0xf3c+-0xe*0x1e5+0xb4a,_0x17f825=0x1658+-0x4d*-0x35+-0x2649,_0x19d1bc=-0x840+-0x3e5*-0x7+-0x1303,_0x414cfe=-0x246e+-0x1*0x1b65+0x3fd3*0x1;function _0x20ba72(_0x476f6a,_0x2c11db){return _0x9c3ce(_0x2c11db-0x79,_0x476f6a);}for(let _0x5cfd6c of _0x56c64f){if('uougu'!==_0x3043a9(0x4c6,0x529)){typeof _0x5cfd6c[_0x3043a9(0x486,0x4e0)+'s']==_0x20ba72(-0x13c,-0xf9)+'r'&&_0x1f63d2[_0x3043a9(0x489,0x4ef)](_0x5cfd6c[_0x3043a9(0x486,0x501)+'s']),typeof _0x5cfd6c[_0x20ba72(-0x11a,-0x116)+_0x20ba72(-0x1a1,-0x171)+_0x20ba72(-0x1d1,-0x187)+_0x3043a9(0x465,0x491)]=='numbe'+'r'&&(_0x554634[_0x3043a9(0x489,0x40b)](_0x5cfd6c[_0x3043a9(0x4db,0x4bc)+_0x3043a9(0x480,0x4c6)+'imeSa'+_0x3043a9(0x465,0x46a)]),_0x48b4ec+=_0x5cfd6c[_0x3043a9(0x4db,0x4df)+_0x3043a9(0x480,0x4f7)+'imeSa'+_0x3043a9(0x465,0x45a)],_0x5cfd6c[_0x20ba72(-0xa9,-0x116)+_0x3043a9(0x480,0x4cb)+'imeSa'+_0x20ba72(-0x118,-0x18c)]<-0x7ec+-0x122+-0x487*-0x2&&_0x2b5eb8++);let _0x2fa5bd=_0x5cfd6c[_0x20ba72(-0x150,-0x146)+_0x3043a9(0x488,0x502)]==='accep'+_0x20ba72(-0x197,-0x1a4)||_0x5cfd6c[_0x3043a9(0x4ab,0x4be)+'tance']===_0x20ba72(-0x178,-0x146)+_0x3043a9(0x506,0x4de)+'artia'+'l';if(_0x2fa5bd&&(_0x59e6e8++,_0x5cfd6c[_0x20ba72(-0x101,-0x146)+'tRegr'+'et']===!(-0x10d*-0x4+-0x79e+0x36a)&&_0x5531bf++),_0x5cfd6c[_0x20ba72(-0x14d,-0x146)+'tance']===_0x3043a9(0x4e9,0x462)+'ssed'&&(_0x1e9927++,_0x5cfd6c[_0x3043a9(0x4fd,0x57c)+_0x3043a9(0x510,0x592)+_0x3043a9(0x432,0x445)+'ss']===!(0x705+0x178f+-0x1e94)&&_0x17f825++),_0x5cfd6c['accep'+_0x20ba72(-0x114,-0x169)]===_0x3043a9(0x48f,0x4c9)&&(_0x19d1bc++,_0x5cfd6c['typed'+_0x20ba72(-0x1a4,-0x178)+_0x3043a9(0x42d,0x4b5)+'ent']===!(-0x748+-0x2168+0x28b0)&&_0x414cfe++),_0x5cfd6c[_0x20ba72(-0x137,-0x141)]==='provi'+_0x20ba72(-0x131,-0x195)+'l'&&_0x5cfd6c['shown']){if('ymWRB'==='OhJxF')return'n='+_0x5c7d50[_0x20ba72(-0x172,-0x18f)]+_0x20ba72(-0x17d,-0x17e)+_0x27ba69[_0x20ba72(-0x1a4,-0x159)+_0x20ba72(-0x1c5,-0x1b0)][_0x3043a9(0x42b,0x40d)]+('ms\x20p9'+'5=')+_0x5d5588['laten'+'cyMs'][_0x20ba72(-0x54,-0xdc)]+(_0x20ba72(-0x12b,-0x11e)+'9=')+_0x561c19[_0x3043a9(0x498,0x43e)+_0x20ba72(-0x193,-0x1b0)][_0x20ba72(-0x138,-0xd3)]+(_0x20ba72(-0x127,-0x194)+_0x3043a9(0x51b,0x594))+(_0x10bb66['valid'+_0x3043a9(0x4b2,0x4e2)]*(0x8e5+-0x184*0x11+0x1143))[_0x3043a9(0x46c,0x49c)+'ed'](-0x1be5+-0x11be*-0x1+0xa28)+('%\x20bad'+'=')+(_0x3fe36e['badRa'+'te']*(-0x1721+-0x287*-0xb+-0x448))[_0x20ba72(-0x159,-0x185)+'ed'](0xbd8*0x2+0xc*0x281+-0x69*0x83)+'%';else{_0x23200e++,_0x2fa5bd&&_0x7dc310++;let _0x133604=_0x5cfd6c[_0x20ba72(-0x15b,-0x137)+'r']??'';if(_0x133604[_0x20ba72(-0x159,-0x1d2)+'sWith'](_0x20ba72(-0x1c3,-0x1c0)+_0x20ba72(-0x201,-0x195)+'l-')){if(_0x3043a9(0x4f9,0x553)===_0x20ba72(-0x13b,-0xf8)){let _0x1fd155=_0x133604[_0x3043a9(0x429,0x47a)](0x670+-0xaae+0x44a);_0x10689e[_0x1fd155]=(_0x10689e[_0x1fd155]??0x2063*0x1+-0x7c1*-0x5+-0x4728)+(-0x257*0xd+0x455+0x1a17*0x1);}else{let _0x59a6ed=_0x1e9bc5[_0x20ba72(-0xed,-0xda)](_0x55a5ef);_0x97adfd(_0x59a6ed)?_0x53f907[_0x3043a9(0x489,0x45e)](_0x59a6ed):_0x15c253++;}}}}if(typeof _0x5cfd6c[_0x3043a9(0x431,0x485)+_0x20ba72(-0x173,-0x195)+'lSwap'+'Ms']==_0x20ba72(-0x176,-0xf9)+'r'&&(_0x4ce0c6++,_0x5477eb+=_0x5cfd6c[_0x3043a9(0x431,0x496)+'siona'+'lSwap'+'Ms'],_0x5cfd6c[_0x20ba72(-0x21e,-0x1c0)+_0x3043a9(0x45c,0x3ff)+'lWasC'+_0x20ba72(-0x8f,-0x101)+'t']===!(0x20b*0x6+-0x39d+0x8a5*-0x1)&&_0x1f8b31++,_0x5cfd6c['provi'+'siona'+_0x3043a9(0x4fc,0x491)+_0x20ba72(-0x178,-0x142)+'er']===!(0x2*0x46c+0xe7b+-0x1753)&&_0x57f476++),_0x5cfd6c['shown']&&(_0x277e06++,_0x2fa5bd)){if(_0x20ba72(-0x1e2,-0x186)!==_0x20ba72(-0x199,-0x186)){let _0x26e445=[],_0x33f6ff=-0x2c3+0x6a*0x2b+-0xf0b;for(let _0x156097 of _0x4851e8[_0x3043a9(0x457,0x4c5)](/\r?\n/))if(_0x156097['trim']())try{let _0x5573e4=_0x5db375[_0x3043a9(0x517,0x59e)](_0x156097);_0xd09b14(_0x5573e4)?_0x26e445['push'](_0x5573e4):_0x33f6ff++;}catch{_0x33f6ff++;}const _0x14f0e0={};return _0x14f0e0['recor'+'ds']=_0x26e445,_0x14f0e0[_0x3043a9(0x517,0x4a6)+_0x3043a9(0x4b4,0x47a)+'s']=_0x33f6ff,_0x14f0e0;}else{let _0x592d87=_0x5cfd6c['candi'+_0x3043a9(0x428,0x3ec)+_0x3043a9(0x4b7,0x537)]??-0x2*-0xf8c+-0x239d+0x485*0x1;_0x592d87<0x25b5+-0x1ffa+0x5ba*-0x1&&_0x273e19++,_0x592d87<0x268d+-0x21da+-0x4b0&&_0x8b096++,_0x592d87<-0x656*-0x5+0xeaf+-0x2e58&&_0x345b62++;}}}else{const _0x458f51={};_0x458f51[_0x20ba72(-0x182,-0x11f)+'ced']=0x0,_0x458f51[_0x3043a9(0x443,0x4ad)]=0x0,_0x458f51['rejec'+'ted']=0x0,_0x458f51[_0x3043a9(0x4ce,0x48c)+'ed']=0x0,_0x458f51[_0x3043a9(0x4c0,0x537)]=0x0;let _0x1b48ec=_0x801e04[_0x20ba72(-0x1b9,-0x151)](_0x3c52f2=>_0x3c52f2[_0x3043a9(0x498,0x451)+_0x3043a9(0x441,0x4bc)])[_0x3043a9(0x427,0x41d)]((_0x3461da,_0x4f8917)=>_0x3461da-_0x4f8917),_0x5e475f=_0x458f51;for(let _0xcaa919 of _0x3d4d62)_0x5e475f[_0xcaa919[_0x20ba72(-0x120,-0xd9)+'t']]++;let _0x5792d4=_0x5e475f[_0x20ba72(-0xc3,-0x11f)+_0x20ba72(-0x146,-0x164)],_0x3c5f49=_0x5e475f[_0x3043a9(0x443,0x461)]+_0x5e475f['rejec'+_0x20ba72(-0x17e,-0x1a4)]+_0x5e475f['error'],_0x515fb7=_0x5792d4+_0x3c5f49;return{'provider':_0x39dac7,'count':_0x4c4e3a['lengt'+'h'],'produced':_0x5e475f[_0x20ba72(-0x174,-0x11f)+'ced'],'empty':_0x5e475f[_0x3043a9(0x443,0x3ed)],'rejected':_0x5e475f['rejec'+_0x3043a9(0x44d,0x4c6)],'aborted':_0x5e475f[_0x3043a9(0x4ce,0x4a5)+'ed'],'error':_0x5e475f[_0x20ba72(-0xd5,-0x131)],'latencyMs':{'p50':_0x388c21(_0x1b48ec,-0x1c*-0x129+-0x101*-0x1c+0x38*-0x115+0.5),'p95':_0x362f6c(_0x1b48ec,0x1da4+-0x11b5*-0x2+0xb*-0x5ea+0.95),'p99':_0x3da164(_0x1b48ec,0x5d1*0x3+0x66a*-0x1+-0xb09+0.99)},'validRate':_0x515fb7>0xcb*0x2f+-0x1529+0x1*-0x101c?_0x5792d4/_0x515fb7:0x111+-0x49e*-0x2+-0xa4d,'badRate':_0x515fb7>-0x16d8+0x11e1+0x4f7*0x1?_0x3c5f49/_0x515fb7:0x3*0xa27+0x1a3*-0x17+0x730};}}let _0x3fe06f={};if(_0x1f63d2['lengt'+'h']>0xc*-0xc5+0x1ad1*-0x1+-0x347*-0xb&&(_0x1f63d2[_0x3043a9(0x427,0x436)]((_0x124348,_0x44a7e7)=>_0x124348-_0x44a7e7),_0x3fe06f['ttftM'+'s']={'p50':g(_0x1f63d2,-0x80b+-0x1*-0x1b4c+0x1*-0x1341+0.5),'p95':g(_0x1f63d2,0x61b*-0x3+0x1*0x22bd+-0x106c+0.95),'n':_0x1f63d2[_0x3043a9(0x438,0x421)+'h']}),_0x554634[_0x3043a9(0x438,0x4a7)+'h']>0x1b*-0xb7+-0x7*0x3df+0x2e66){if(_0x20ba72(-0xdd,-0x128)!=='XyUKd'){_0x2262fb[_0x20ba72(-0x1ef,-0x1ca)]((_0x158924,_0x3b7c4a)=>_0x158924-_0x3b7c4a),_0x5da074[_0x3043a9(0x492,0x4c2)+_0x3043a9(0x43e,0x42b)+'s']={'p50':_0x234d73(_0x3783c4,-0x36*-0x62+-0x1179+0x5b*-0x9+0.5),'p95':_0x290a03(_0x24b46d,0x551*-0x7+-0x6b5+0xea4*0x3+0.95),'total':_0x20d2a9,'n':_0x3b72f2[_0x3043a9(0x438,0x490)+'h']};let _0x2cea58=_0x2b522f/_0x34e046[_0x20ba72(-0x20f,-0x1b9)+'h'];const _0x2dd59d={};_0x2dd59d[_0x3043a9(0x462,0x4bd)]=_0x5037ed,_0x2dd59d[_0x20ba72(-0x1d7,-0x15b)+'ion']=_0x2cea58,_0x2dd59d['n']=_0x4a685a['lengt'+'h'],_0x2dd59d['sever'+_0x3043a9(0x4dd,0x537)]=_0x2cea58>=_0x7cf1d6['negat'+_0x3043a9(0x44c,0x4d4)+_0x3043a9(0x490,0x4a2)+_0x20ba72(-0x211,-0x1b2)]?_0x20ba72(-0x1fe,-0x19f):_0x2cea58>=_0x410827[_0x20ba72(-0x1af,-0x1c5)+_0x3043a9(0x44c,0x450)+'meSav'+'edYel'+_0x3043a9(0x423,0x3b9)]?'yello'+'w':'ok',_0x1ccbd6[_0x20ba72(-0x15f,-0x1c5)+'iveTi'+_0x20ba72(-0x1c1,-0x161)+'ed']=_0x2dd59d;}else{_0x554634[_0x20ba72(-0x203,-0x1ca)]((_0x566e5d,_0x29f29e)=>_0x566e5d-_0x29f29e),_0x3fe06f['timeS'+'avedM'+'s']={'p50':g(_0x554634,-0xcf7+-0x13*0xc5+0x1b96+0.5),'p95':g(_0x554634,0x672+0x129*-0xe+0x9cc+0.95),'total':_0x48b4ec,'n':_0x554634[_0x3043a9(0x438,0x44a)+'h']};let _0x4da5d2=_0x2b5eb8/_0x554634[_0x20ba72(-0x177,-0x1b9)+'h'];const _0x5512c7={};_0x5512c7[_0x20ba72(-0x14a,-0x18f)]=_0x2b5eb8,_0x5512c7[_0x3043a9(0x496,0x4cd)+'ion']=_0x4da5d2,_0x5512c7['n']=_0x554634['lengt'+'h'],_0x5512c7[_0x20ba72(-0x136,-0x17c)+_0x3043a9(0x4dd,0x509)]=_0x4da5d2>=u['negat'+_0x20ba72(-0x147,-0x1a5)+'meSav'+_0x20ba72(-0x190,-0x1b2)]?'red':_0x4da5d2>=u[_0x3043a9(0x42c,0x3d4)+_0x20ba72(-0x1e8,-0x1a5)+'meSav'+_0x3043a9(0x4d5,0x503)+'low']?_0x20ba72(-0x7d,-0xd1)+'w':'ok',_0x3fe06f['negat'+_0x20ba72(-0x194,-0x1a5)+_0x20ba72(-0x132,-0x161)+'ed']=_0x5512c7;}}function _0x3043a9(_0x2d6726,_0x245af0){return _0x9c3ce(_0x2d6726-0x66a,_0x245af0);}return _0x59e6e8>-0x2308+-0x4a9*-0x8+0x10*-0x24&&(_0x3fe06f['accep'+_0x3043a9(0x477,0x484)+_0x3043a9(0x413,0x3cb)+'e']={'rate':_0x5531bf/_0x59e6e8,'n':_0x59e6e8}),_0x1e9927>-0x2150+0x1c6d*-0x1+0x221*0x1d&&(_0x3fe06f[_0x20ba72(-0x110,-0xf4)+_0x3043a9(0x510,0x542)+_0x20ba72(-0x19f,-0x1bf)+_0x20ba72(-0x173,-0x135)+'e']={'rate':_0x17f825/_0x1e9927,'n':_0x1e9927}),_0x19d1bc>-0x18c6+-0x8*-0x257+-0x136*-0x5&&(_0x3fe06f['typed'+_0x20ba72(-0x1f0,-0x178)+_0x20ba72(-0x1ef,-0x1c4)+'entRa'+'te']={'rate':_0x414cfe/_0x19d1bc,'n':_0x19d1bc}),(_0x23200e>-0x254a+-0x894+0x135*0x26||_0x4ce0c6>0x21de*0x1+-0x430+-0x1dae)&&(_0x3fe06f[_0x3043a9(0x431,0x40d)+'siona'+'l']={'shown':_0x23200e,'swapped':_0x4ce0c6,'correctRate':_0x4ce0c6>0x7df+0x210c+0x1*-0x28eb?_0x1f8b31/_0x4ce0c6:-0x1731+0xac7*0x2+-0x1a3*-0x1,'meanSwapMs':_0x4ce0c6>0x1*0x1fb9+-0xaa5*-0x1+-0x2a5e?_0x5477eb/_0x4ce0c6:0x12ae+-0x5*-0x30c+-0x21ea,..._0x4ce0c6>0x2*0x731+0x361+-0x11c3?{'flickerRate':_0x57f476/_0x4ce0c6}:{},...Object[_0x3043a9(0x467,0x455)](_0x10689e)['lengt'+'h']>-0x1d*-0xc1+-0x21be+0xbe1?{'bySource':_0x10689e}:{},..._0x23200e>0x18ab*0x1+0x1825+0xb*-0x470?{'acceptRate':_0x7dc310/_0x23200e}:{}}),_0x277e06>-0x251b+0x560+0x1fbb&&(_0x3fe06f[_0x20ba72(-0x9a,-0x10e)+_0x3043a9(0x4bb,0x519)]=_0x273e19/_0x277e06,_0x3fe06f['saved'+_0x3043a9(0x504,0x52b)]=_0x8b096/_0x277e06,_0x3fe06f[_0x20ba72(-0x110,-0x10e)+'At5']=_0x345b62/_0x277e06),_0x3fe06f;}function $(_0x144638,_0x14ffad){let _0x101531=new Map();for(let _0x868263 of _0x14ffad)if(_0x868263[_0xd07bfb(0x3ac,0x3a5)+_0x3bcc92(0x238,0x26a)])for(let _0x515f7d of _0x868263['provi'+_0xd07bfb(0x3da,0x403)]){if(_0xd07bfb(0x39d,0x410)!==_0xd07bfb(0x3b7,0x34b)){let _0x39a03a=_0x101531[_0xd07bfb(0x3ec,0x419)](_0x515f7d['provi'+_0xd07bfb(0x3fa,0x449)]);_0x39a03a||(_0x39a03a=[],_0x101531[_0xd07bfb(0x3bb,0x3a0)](_0x515f7d[_0xd07bfb(0x3ac,0x3d8)+_0xd07bfb(0x3fa,0x3ba)],_0x39a03a)),_0x39a03a['push'](_0x515f7d);}else{let _0x56d207=_0x2f899c[_0xd07bfb(0x3a7,0x3d4)+_0x3bcc92(0x28e,0x257)+'meSav'+'ed'],_0x227778=(_0x56d207['fract'+_0xd07bfb(0x45b,0x4b6)]*(0x244a+-0x153*-0x16+-0x1042*0x4))[_0xd07bfb(0x3e7,0x45c)+'ed'](-0x1248+0x1317+-0xce)+'%',_0x8beee0={'name':_0x3bcc92(0x214,0x237)+_0x3bcc92(0x1ce,0x257)+'meSav'+_0x3bcc92(0x2d3,0x274)+_0xd07bfb(0x3a5,0x3e4),'target':'<\x20'+(_0x1939fa['negat'+_0xd07bfb(0x3c7,0x35f)+_0x3bcc92(0x269,0x29b)+'edRed']*(-0x2179+0xd99+0x1444))[_0x3bcc92(0x239,0x277)+'ed'](0xe32+0x1*0xa7b+-0x18ad)+'%','observed':_0x227778,'pass':_0x56d207[_0x3bcc92(0x26b,0x280)+'ity']!=='red'};_0x56d207['sever'+'ity']===_0x3bcc92(0x2f0,0x32b)+'w'&&(_0x8beee0['sever'+'ity']=_0x3bcc92(0x2f8,0x2ae)),_0x28cb2e['push'](_0x8beee0);}}let _0x460e17=[];for(let [_0x5b3037,_0x66c538]of _0x101531)_0x460e17[_0xd07bfb(0x404,0x42c)](_(_0x5b3037,_0x66c538));_0x460e17['sort']((_0x3049e2,_0x398bea)=>_0x3049e2[_0x3bcc92(0x1e2,0x23c)+'der']['local'+_0xd07bfb(0x448,0x43e)+'are'](_0x398bea[_0x3bcc92(0x25b,0x23c)+_0x3bcc92(0x26f,0x28a)]));let _0xba2ad0=_0x14ffad[_0x3bcc92(0x2a2,0x32a)+'r'](_0x584a36=>_0x584a36[_0x3bcc92(0x1f6,0x21b)])[_0x3bcc92(0x26b,0x243)+'h'],_0x23d4c3=S(_0x14ffad,_0xd07bfb(0x426,0x3bb)+_0xd07bfb(0x3c8,0x359)),_0x47c296=S(_0x14ffad,'dismi'+_0x3bcc92(0x341,0x2d2)),_0xa854fd=S(_0x14ffad,'stale'),_0x4da047=S(_0x14ffad,_0x3bcc92(0x1e5,0x227)+'ed');const _0x5d9600={};_0x5d9600['mode']=_0x144638,_0x5d9600[_0x3bcc92(0x2d2,0x26d)]=_0x14ffad[_0x3bcc92(0x290,0x243)+'h'],_0x5d9600[_0xd07bfb(0x38b,0x3c3)]=_0xba2ad0,_0x5d9600[_0x3bcc92(0x2f6,0x2b6)+'ted']=_0x23d4c3,_0x5d9600['dismi'+'ssed']=_0x47c296,_0x5d9600['stale']=_0xa854fd;function _0xd07bfb(_0x3b8cdd,_0x3a7a7b){return _0x44add9(_0x3b8cdd-0x6b6,_0x3a7a7b);}_0x5d9600[_0x3bcc92(0x1e0,0x227)+'ed']=_0x4da047;function _0x3bcc92(_0x39966e,_0x308ec8){return _0x44add9(_0x308ec8-0x546,_0x39966e);}return _0x5d9600[_0x3bcc92(0x25b,0x2b6)+_0x3bcc92(0x275,0x293)+_0x3bcc92(0x2a9,0x2bd)]=_0xba2ad0>-0x1*0x153d+0x3a*-0x4+0x1625?_0x23d4c3/_0xba2ad0:-0x18c4+-0x91+0x1955*0x1,_0x5d9600[_0xd07bfb(0x3ac,0x3b9)+_0xd07bfb(0x3da,0x3fa)]=_0x460e17,_0x5d9600;}function S(_0x37bc3a,_0x428cbd){let _0x54c598=-0x10af*-0x2+-0xe1*0x17+0x103*-0xd;function _0x4edb06(_0x32fb8b,_0x60dd83){return _0x44add9(_0x60dd83-0x70c,_0x32fb8b);}for(let _0x310e08 of _0x37bc3a)_0x310e08[_0x4edb06(0x405,0x47c)+'tance']===_0x428cbd&&_0x54c598++;return _0x54c598;}function _(_0x2ade92,_0xa2bbd5){function _0x2345e1(_0x2d6614,_0x38e37b){return _0x9c3ce(_0x38e37b-0x40c,_0x2d6614);}const _0x59f707={};_0x59f707['produ'+'ced']=0x0,_0x59f707[_0x54b6c3(-0x11c,-0x11c)]=0x0,_0x59f707[_0x2345e1(0x204,0x20a)+_0x54b6c3(-0x112,-0x11f)]=0x0,_0x59f707[_0x2345e1(0x234,0x270)+'ed']=0x0;function _0x54b6c3(_0x3ff5e9,_0x9d7b3f){return _0x9c3ce(_0x3ff5e9-0x10b,_0x9d7b3f);}_0x59f707[_0x2345e1(0x266,0x262)]=0x0;let _0x3aab86=_0xa2bbd5['map'](_0x32e6fa=>_0x32e6fa[_0x54b6c3(-0xc7,-0xd4)+_0x2345e1(0x1ae,0x1e3)])[_0x54b6c3(-0x138,-0xb4)]((_0x52c25f,_0x44bb7b)=>_0x52c25f-_0x44bb7b),_0x195f48=_0x59f707;for(let _0x288bf8 of _0xa2bbd5)_0x195f48[_0x288bf8[_0x2345e1(0x295,0x2ba)+'t']]++;let _0x4913e9=_0x195f48[_0x2345e1(0x2c5,0x274)+_0x54b6c3(-0xd2,-0x139)],_0x3c51a0=_0x195f48[_0x2345e1(0x219,0x1e5)]+_0x195f48['rejec'+_0x54b6c3(-0x112,-0xcc)]+_0x195f48[_0x54b6c3(-0x9f,-0x5c)],_0x237ba0=_0x4913e9+_0x3c51a0;return{'provider':_0x2ade92,'count':_0xa2bbd5[_0x54b6c3(-0x127,-0x12e)+'h'],'produced':_0x195f48[_0x54b6c3(-0x8d,-0x71)+_0x2345e1(0x1f4,0x22f)],'empty':_0x195f48[_0x54b6c3(-0x11c,-0x138)],'rejected':_0x195f48[_0x2345e1(0x18c,0x20a)+'ted'],'aborted':_0x195f48['abort'+'ed'],'error':_0x195f48[_0x2345e1(0x29f,0x262)],'latencyMs':{'p50':g(_0x3aab86,0x3ce+-0x155*0x16+0x1980+0.5),'p95':g(_0x3aab86,0x1803+-0x8d3+-0xf30+0.95),'p99':g(_0x3aab86,0x24ee+-0x13*0x17+-0x2339+0.99)},'validRate':_0x237ba0>-0x4d4*0x1+0x184*0x16+-0x1c84?_0x4913e9/_0x237ba0:-0x2c3*0x9+-0x2261+-0x11*-0x37c,'badRate':_0x237ba0>0x7a9+0x659*0x4+-0x1*0x210d?_0x3c51a0/_0x237ba0:0x14f7+0x24d3+-0xd*0x472};}function N(_0x348b23,_0x540232,_0x1d94b1){let _0x2c1adb=[];for(let _0x372731 of _0x348b23[_0x39c1f5(-0x125,-0x147)+_0x3e9fc8(0x436,0x432)])_0x2c1adb[_0x39c1f5(-0xed,-0xef)]({'name':'deter'+_0x3e9fc8(0x438,0x48b)+_0x39c1f5(-0xac,-0x130)+_0x372731[_0x39c1f5(-0xd4,-0x147)+'der']+(_0x39c1f5(-0xd4,-0xea)+_0x39c1f5(-0x10e,-0xac)+'ncy'),'target':'<\x20'+u[_0x3e9fc8(0x47f,0x4f6)+_0x3e9fc8(0x438,0x403)+_0x39c1f5(-0x125,-0x13b)+_0x3e9fc8(0x421,0x476)]+'ms','observed':_0x372731[_0x3e9fc8(0x46f,0x490)+_0x3e9fc8(0x418,0x425)][_0x3e9fc8(0x402,0x412)]+'ms','pass':_0x372731['laten'+_0x3e9fc8(0x418,0x496)]['p50']<u[_0x3e9fc8(0x47f,0x3fb)+_0x3e9fc8(0x438,0x451)+_0x39c1f5(-0x121,-0x13b)+'0Ms']});for(let _0x3f1f99 of _0x540232[_0x3e9fc8(0x408,0x3ae)+'ders'])_0x2c1adb[_0x39c1f5(-0x16f,-0xef)]({'name':_0x3e9fc8(0x459,0x464)+_0x3f1f99[_0x3e9fc8(0x408,0x431)+'der']+(_0x39c1f5(-0xa7,-0xea)+'\x20late'+_0x3e9fc8(0x47c,0x461)),'target':'<\x20'+u['llmP5'+'0Ms']+'ms','observed':_0x3f1f99[_0x3e9fc8(0x46f,0x465)+_0x39c1f5(-0xb0,-0x137)][_0x39c1f5(-0x188,-0x14d)]+'ms','pass':_0x3f1f99[_0x39c1f5(-0x79,-0xe0)+_0x39c1f5(-0xb3,-0x137)][_0x3e9fc8(0x402,0x472)]<u[_0x39c1f5(-0x160,-0x13e)+_0x3e9fc8(0x421,0x3a0)]}),_0x2c1adb[_0x39c1f5(-0x116,-0xef)]({'name':'llm['+_0x3f1f99[_0x3e9fc8(0x408,0x473)+'der']+(_0x3e9fc8(0x47e,0x4f4)+_0x3e9fc8(0x4a3,0x4ee)+_0x3e9fc8(0x47c,0x460)),'target':'<\x20'+u['llmP9'+_0x3e9fc8(0x4e1,0x4e0)]+'ms','observed':_0x3f1f99[_0x3e9fc8(0x46f,0x4cd)+_0x3e9fc8(0x418,0x45f)][_0x3e9fc8(0x4ec,0x4bb)]+'ms','pass':_0x3f1f99['laten'+_0x3e9fc8(0x418,0x404)][_0x39c1f5(0x8,-0x63)]<u[_0x39c1f5(-0xcc,-0x66)+'5Ms']}),_0x2c1adb[_0x39c1f5(-0x147,-0xef)]({'name':'llm['+_0x3f1f99[_0x39c1f5(-0x12a,-0x147)+_0x39c1f5(-0xb3,-0xf9)]+(_0x3e9fc8(0x42c,0x3bd)+_0x39c1f5(-0x1de,-0x15f)+_0x3e9fc8(0x4f0,0x4bb)+_0x3e9fc8(0x4d1,0x535)),'target':_0x3e9fc8(0x4ed,0x56a)+(u[_0x3e9fc8(0x48d,0x4c0)+_0x3e9fc8(0x405,0x482)+_0x39c1f5(-0x1a4,-0x161)]*(0xc4f+-0xdc5+0x1da))[_0x3e9fc8(0x443,0x48c)+'ed'](0x22e7*-0x1+-0x1e44+0x53*0xc9)+'%','observed':(_0x3f1f99[_0x39c1f5(-0x10f,-0xc2)+_0x39c1f5(-0x10b,-0xc6)]*(0x2632+0x2e*0x3d+0x4*-0xc31))[_0x3e9fc8(0x443,0x422)+'ed'](-0xe4c+0x16a1+-0x52*0x1a)+'%','pass':_0x3f1f99[_0x39c1f5(-0xe3,-0xc2)+_0x3e9fc8(0x489,0x46d)]>=u['valid'+'Outpu'+'tRate']}),_0x2c1adb[_0x39c1f5(-0x87,-0xef)]({'name':_0x3e9fc8(0x459,0x4a6)+_0x3f1f99[_0x3e9fc8(0x408,0x489)+_0x39c1f5(-0x16e,-0xf9)]+(']\x20bad'+_0x3e9fc8(0x4a8,0x4ef)+'ut\x20ra'+'te'),'target':_0x3e9fc8(0x4a2,0x451)+(u[_0x39c1f5(-0x12e,-0x152)+'tputR'+'ate']*(-0x2555+-0x58f*-0x3+0x150c))[_0x3e9fc8(0x443,0x492)+'ed'](0x237c+0x5ea+-0x2966)+'%','observed':(_0x3f1f99[_0x39c1f5(-0xbf,-0x7a)+'te']*(0x5*0x311+-0x26*0xd6+0x49*0x3b))[_0x3e9fc8(0x443,0x4c8)+'ed'](-0x1ff2+-0x1521+0x9e*0x56)+'%','pass':_0x3f1f99[_0x39c1f5(-0x26,-0x7a)+'te']<=u[_0x3e9fc8(0x3fd,0x3b9)+'tputR'+_0x3e9fc8(0x3f8,0x392)]});if(_0x1d94b1[_0x39c1f5(-0x115,-0x14c)+'iveTi'+_0x3e9fc8(0x467,0x404)+'ed']){if('IZVLP'!=='APyLc'){let _0x2b1cc4=_0x1d94b1[_0x3e9fc8(0x403,0x450)+_0x39c1f5(-0xed,-0x12c)+_0x3e9fc8(0x467,0x4ac)+'ed'],_0x301ddc=(_0x2b1cc4[_0x3e9fc8(0x46d,0x441)+_0x3e9fc8(0x4b7,0x51b)]*(0x1dde+0xc8f*-0x1+0x1*-0x10eb))[_0x39c1f5(-0x134,-0x10c)+'ed'](-0x1a00*-0x1+-0x97d+-0x2*0x841)+'%',_0x26f086={'name':'negat'+_0x3e9fc8(0x423,0x3f5)+_0x39c1f5(-0x14b,-0xe8)+_0x39c1f5(-0x135,-0x10f)+_0x39c1f5(-0x156,-0x14e),'target':'<\x20'+(u['negat'+_0x3e9fc8(0x423,0x44b)+'meSav'+'edRed']*(-0x1b64+0x11*-0xb6+0x27de))[_0x3e9fc8(0x443,0x44f)+'ed'](-0x270+-0xfb9+0x1229)+'%','observed':_0x301ddc,'pass':_0x2b1cc4[_0x3e9fc8(0x44c,0x48f)+_0x39c1f5(-0x7f,-0x9b)]!==_0x39c1f5(-0x10e,-0x126)};_0x2b1cc4['sever'+'ity']===_0x39c1f5(-0x6,-0x58)+'w'&&(_0x26f086[_0x39c1f5(-0x9f,-0x103)+_0x3e9fc8(0x4b4,0x513)]=_0x3e9fc8(0x47a,0x438)),_0x2c1adb['push'](_0x26f086);}else{let _0xec1ae6=_0x4c6982['provi'+'siona'+'l'][_0x3e9fc8(0x4bb,0x4d2)+_0x39c1f5(-0xd2,-0xf1)+'e']!==void(0x1c23+-0x2392+-0xad*-0xb)?_0x39c1f5(-0xc9,-0xf7)+_0x3e9fc8(0x44f,0x45d)+(_0x932a14[_0x3e9fc8(0x408,0x43f)+_0x3e9fc8(0x433,0x3ed)+'l'][_0x39c1f5(-0x23,-0x94)+_0x39c1f5(-0x12a,-0xf1)+'e']*(-0x306+0x1*0x16c3+-0xd*0x17d))[_0x39c1f5(-0x181,-0x10c)+'ed'](0x2702+0x24c1*-0x1+-0x10*0x24)+'%':'',_0x3e5ebb=_0x1979f6[_0x39c1f5(-0x1a4,-0x147)+_0x39c1f5(-0xf7,-0x11c)+'l'][_0x3e9fc8(0x482,0x4f6)+_0x3e9fc8(0x3ee,0x370)]!==void(-0x494+-0xf32+0x1*0x13c6)?_0x39c1f5(-0x8a,-0x96)+_0x3e9fc8(0x3f7,0x478)+(_0x4817ec[_0x39c1f5(-0xdd,-0x147)+_0x39c1f5(-0xd6,-0x11c)+'l'][_0x3e9fc8(0x482,0x494)+_0x39c1f5(-0x193,-0x161)]*(-0x5*-0x359+0x140+-0x1199))[_0x39c1f5(-0xcb,-0x10c)+'ed'](-0xee7+0x1*0xf7c+-0x94)+'%':'';if(_0x3c7fb8[_0x3e9fc8(0x460,0x41d)](_0x3e9fc8(0x452,0x461)+_0x3e9fc8(0x4f1,0x470)+_0x39c1f5(-0x1a0,-0x134)+_0x3e9fc8(0x4f3,0x4ce)+'n='+_0x495603['provi'+_0x39c1f5(-0x143,-0x11c)+'l'][_0x39c1f5(-0xdf,-0x168)]+('\x20swap'+_0x39c1f5(-0x11e,-0xdd))+_0x4efdd2[_0x39c1f5(-0xf8,-0x147)+_0x3e9fc8(0x433,0x3fb)+'l'][_0x3e9fc8(0x4a7,0x4a8)+'ed']+(_0x39c1f5(-0x3b,-0x65)+'ectRa'+_0x39c1f5(-0xba,-0x114))+(_0xa16f6[_0x3e9fc8(0x408,0x3df)+_0x3e9fc8(0x433,0x46a)+'l']['corre'+'ctRat'+'e']*(-0xc5+0x1b6a+0x263*-0xb))['toFix'+'ed'](-0x1b37+0x14c+0x19ec)+(_0x39c1f5(-0x180,-0x10a)+_0x3e9fc8(0x447,0x3d2)+'=')+_0x55ec09[_0x39c1f5(-0xc0,-0x147)+_0x3e9fc8(0x433,0x432)+'l']['meanS'+_0x3e9fc8(0x47b,0x4b2)][_0x3e9fc8(0x443,0x498)+'ed'](0x1bc5+-0x1638*0x1+0x1*-0x58d)+'ms'+_0xec1ae6+_0x3e5ebb),_0x461433[_0x3e9fc8(0x408,0x3ed)+_0x39c1f5(-0xac,-0x11c)+'l']['bySou'+'rce']){let _0x5bc2ef=_0x229b4a['entri'+'es'](_0x453f0b['provi'+_0x39c1f5(-0x1a0,-0x11c)+'l'][_0x39c1f5(-0x68,-0x93)+_0x39c1f5(-0x68,-0xee)])[_0x3e9fc8(0x3fe,0x450)]((_0x54ccfd,_0x2ed4e4)=>_0x2ed4e4[0x2*0xd0a+0x4a*-0x1+-0x19c9]-_0x54ccfd[-0x1b69+-0xd5a+0x28c4])[_0x3e9fc8(0x477,0x4b4)](([_0x3abe85,_0x1ddd5d])=>_0x3abe85+'='+_0x1ddd5d)[_0x3e9fc8(0x4c9,0x475)]('\x20');_0x5953e5['push'](_0x39c1f5(-0xb9,-0xd7)+'\x20\x20\x20\x20\x20'+_0x3e9fc8(0x478,0x3f2)+_0x3e9fc8(0x4ab,0x4f9)+_0x3e9fc8(0x42d,0x402)+'\x20'+_0x5bc2ef);}}}function _0x39c1f5(_0x30ac55,_0x2a75bb){return _0x44add9(_0x2a75bb-0x1c3,_0x30ac55);}function _0x3e9fc8(_0x2b555a,_0x251e8a){return _0x44add9(_0x2b555a-0x712,_0x251e8a);}return _0x2c1adb;}function W(_0x4489b6){let _0x4e44d8=[];function _0x1592b7(_0x3b5f7f,_0x272dbe){return _0x9c3ce(_0x272dbe-0x331,_0x3b5f7f);}_0x4e44d8[_0x1592b7(0x173,0x150)]('Pi\x20Gh'+_0x1592b7(0x130,0x19d)+_0x1592b7(0x94,0xd9)+_0x3b92aa(0x536,0x4b5)+_0x3b92aa(0x4ad,0x4aa)),_0x4e44d8['push']('====='+_0x1592b7(0x94,0x10e)+_0x3b92aa(0x469,0x435)+'====='+_0x1592b7(0x10d,0x10e)),_0x4e44d8[_0x1592b7(0xfe,0x150)](_0x1592b7(0x1e7,0x196)+_0x1592b7(0x185,0x134)+_0x1592b7(0x151,0x168)+_0x4489b6[_0x1592b7(0x179,0x196)+'e']),_0x4e44d8['push'](_0x1592b7(0x16b,0x1d2)+_0x3b92aa(0x464,0x464)+'\x20\x20\x20\x20\x20'+_0x4489b6[_0x3b92aa(0x52d,0x599)+'ds']),_0x4489b6[_0x3b92aa(0x539,0x592)+'Error'+'s']>0x1e9*0xc+0x126f+-0x295b*0x1&&_0x4e44d8[_0x1592b7(0x16e,0x150)]('parse'+_0x1592b7(0xb8,0x13b)+'rs:\x20\x20'+_0x4489b6['parse'+_0x1592b7(0x1b7,0x17b)+'s']),_0x4e44d8[_0x1592b7(0x129,0x150)](''),_0x4e44d8['push'](_0x3b92aa(0x4d0,0x4e1)+_0x3b92aa(0x483,0x427)+_0x3b92aa(0x43d,0x421)+'n='+_0x4489b6['deter'+_0x1592b7(0xe4,0x128)+'tic'][_0x1592b7(0xd3,0x129)]+')'),_0x4e44d8[_0x1592b7(0x186,0x150)](_0x1592b7(0x10c,0x11b)+_0x1592b7(0x1e0,0x165)+_0x4489b6[_0x1592b7(0x1d4,0x16f)+_0x3b92aa(0x483,0x414)+_0x3b92aa(0x446,0x4cb)][_0x3b92aa(0x432,0x442)]+(_0x1592b7(0x223,0x1a9)+_0x1592b7(0x18d,0x17c))+_0x4489b6[_0x1592b7(0xe8,0x16f)+_0x3b92aa(0x483,0x441)+'tic'][_0x1592b7(0x114,0x172)+_0x3b92aa(0x46f,0x3e8)]+(_0x3b92aa(0x50d,0x4ba)+_0x3b92aa(0x49e,0x4c0)+'=')+_0x4489b6['deter'+_0x3b92aa(0x483,0x4f6)+_0x3b92aa(0x446,0x488)][_0x1592b7(0x14b,0x1b0)+'ssed']+(_0x3b92aa(0x51d,0x574)+'e=')+_0x4489b6['deter'+'minis'+_0x3b92aa(0x446,0x46b)]['stale']+(_0x3b92aa(0x4ae,0x516)+_0x1592b7(0x1c8,0x1ba))+_0x4489b6[_0x1592b7(0x109,0x16f)+_0x3b92aa(0x483,0x414)+_0x1592b7(0xe7,0xeb)][_0x3b92aa(0x43e,0x443)+'ed']+('\x20acce'+_0x3b92aa(0x482,0x4f5)+'te=')+(_0x4489b6['deter'+_0x3b92aa(0x483,0x40f)+_0x3b92aa(0x446,0x3fa)]['accep'+_0x1592b7(0x186,0x14f)+_0x1592b7(0x15f,0x179)]*(0x17b2+-0xc98*-0x1+0x397*-0xa))[_0x3b92aa(0x48e,0x472)+'ed'](-0x9*-0x33f+-0xd38+0x7ff*-0x2)+'%');for(let _0x18282a of _0x4489b6[_0x3b92aa(0x4ca,0x496)+'minis'+'tic'][_0x1592b7(0x161,0xf8)+_0x1592b7(0x19a,0x126)])_0x4e44d8[_0x3b92aa(0x4ab,0x50e)](_0x3b92aa(0x50c,0x488)+_0x18282a[_0x1592b7(0x13b,0xf8)+_0x1592b7(0x15f,0x146)]['padEn'+'d'](-0x2fe+-0x247a+0x278a)+'\x20'+T(_0x18282a));_0x4e44d8[_0x1592b7(0xfc,0x150)](''),_0x4e44d8[_0x1592b7(0x128,0x150)](_0x1592b7(0x157,0x100)+'n='+_0x4489b6['llm'][_0x3b92aa(0x484,0x47e)]+')'),_0x4e44d8['push'](_0x3b92aa(0x476,0x403)+'wn='+_0x4489b6['llm']['shown']+(_0x3b92aa(0x504,0x542)+_0x1592b7(0x1f2,0x17c))+_0x4489b6[_0x1592b7(0x121,0xfe)]['accep'+_0x3b92aa(0x46f,0x409)]+(_0x1592b7(0x232,0x1b2)+'issed'+'=')+_0x4489b6[_0x1592b7(0x181,0xfe)]['dismi'+'ssed']+(_0x1592b7(0x201,0x1c2)+'e=')+_0x4489b6[_0x3b92aa(0x459,0x4b0)][_0x1592b7(0x1b8,0x156)]+(_0x3b92aa(0x4ae,0x4e3)+_0x1592b7(0x227,0x1ba))+_0x4489b6[_0x1592b7(0x180,0xfe)][_0x1592b7(0xf4,0xe3)+'ed']+(_0x3b92aa(0x504,0x49c)+_0x1592b7(0x100,0x127)+_0x1592b7(0x10f,0x12b))+(_0x4489b6[_0x3b92aa(0x459,0x4da)][_0x3b92aa(0x4cd,0x512)+_0x3b92aa(0x4aa,0x515)+'Rate']*(-0xb3+-0x143*-0x15+0x21e*-0xc))[_0x3b92aa(0x48e,0x4d0)+'ed'](0x2*0x1175+-0x2*-0x2d4+-0x2891)+'%');for(let _0x53504c of _0x4489b6[_0x3b92aa(0x459,0x49b)]['provi'+_0x1592b7(0x18a,0x126)])_0x4e44d8[_0x3b92aa(0x4ab,0x4c0)]('\x20\x20-\x20'+_0x53504c[_0x3b92aa(0x453,0x44d)+_0x3b92aa(0x4a1,0x4e6)]['padEn'+'d'](0x1*0x1a11+-0x150c+-0x4f3)+'\x20'+T(_0x53504c));function _0x3b92aa(_0x1da942,_0x3be5d1){return _0x9c3ce(_0x1da942-0x68c,_0x3be5d1);}let _0x5636db=_0x4489b6['byMod'+'e'][_0x1592b7(0x220,0x1e6)+'r'](_0x43ff18=>_0x43ff18[_0x3b92aa(0x4d2,0x535)]!==_0x3b92aa(0x4ca,0x523)+'minis'+_0x1592b7(0x101,0xeb)&&_0x43ff18['mode']!=='llm'&&_0x43ff18[_0x1592b7(0x122,0x129)]>0xb58+-0x5*-0x2e3+-0x19c7*0x1);if(_0x5636db[_0x3b92aa(0x45a,0x420)+'h']>-0x986+0x99*0x1e+-0x1*0x868){if('FfFHW'==='mZdPN'){_0x7d0714++,_0x33345d&&_0x5d3c59++;let _0x3d3186=_0x3e8466[_0x1592b7(0x1d2,0x181)+'r']??'';if(_0x3d3186[_0x3b92aa(0x441,0x453)+'sWith'](_0x1592b7(0x14a,0xf8)+_0x3b92aa(0x47e,0x488)+'l-')){let _0x249d71=_0x3d3186[_0x1592b7(0xb6,0xf0)](0x9f7+0xfdd+0x19c8*-0x1);_0x3dbcd4[_0x249d71]=(_0x279add[_0x249d71]??-0x370+-0x163b+-0x19ab*-0x1)+(0xe99+0x38b+-0x1223);}}else{_0x4e44d8[_0x3b92aa(0x4ab,0x487)](''),_0x4e44d8[_0x3b92aa(0x4ab,0x4e3)](_0x1592b7(0x1d4,0x19f)+'\x20mode'+'s:');for(let _0x55ee3d of _0x5636db)_0x4e44d8[_0x3b92aa(0x4ab,0x46b)]('\x20\x20'+_0x55ee3d['mode']['padEn'+'d'](-0x583*-0x3+0x15*-0x1c1+0x21*0x9e)+_0x1592b7(0x160,0x18b)+_0x55ee3d[_0x3b92aa(0x484,0x3ff)]+(_0x3b92aa(0x53e,0x4c2)+'n=')+_0x55ee3d[_0x1592b7(0x152,0xd7)]+(_0x1592b7(0x15d,0x1a9)+_0x3b92aa(0x4d7,0x48d))+_0x55ee3d[_0x1592b7(0x1c1,0x172)+_0x3b92aa(0x46f,0x4bb)]+('\x20acce'+'pt-ra'+_0x3b92aa(0x486,0x4a9))+(_0x55ee3d[_0x1592b7(0xf7,0x172)+'tance'+'Rate']*(0x384+0x11f+-0x43f))[_0x1592b7(0xf3,0x133)+'ed'](0x9a5+0x19f3+-0x2397)+'%');}}let _0x386399=_0x4489b6['advan'+'ced'];if(_0x386399[_0x3b92aa(0x4a8,0x431)+'s']||_0x386399['timeS'+_0x1592b7(0xb3,0x105)+'s']||_0x386399[_0x3b92aa(0x44e,0x407)+_0x1592b7(0xe7,0x113)+_0x1592b7(0x14e,0x157)+'ed']||_0x386399['accep'+_0x3b92aa(0x499,0x483)+'etRat'+'e']||_0x386399[_0x1592b7(0x15d,0x1c4)+_0x1592b7(0x1a7,0x1d7)+_0x3b92aa(0x454,0x407)+'ssRat'+'e']||_0x386399[_0x1592b7(0x103,0x158)+'PastD'+_0x1592b7(0x14d,0xf4)+_0x1592b7(0x12d,0x121)+'te']||_0x386399[_0x1592b7(0xb6,0xf8)+_0x1592b7(0x186,0x123)+'l']||_0x386399['saved'+_0x1592b7(0x116,0x182)]!==void(-0xd33*-0x2+0x1cca+-0x3730)){if(_0x3b92aa(0x518,0x539)!=='hdsPm'){if(_0x4e44d8[_0x3b92aa(0x4ab,0x4e8)](''),_0x4e44d8['push'](_0x3b92aa(0x467,0x4d1)+_0x3b92aa(0x510,0x4b4)+'M5a\x20f'+'ields'+'):'),_0x386399[_0x1592b7(0x1ca,0x14d)+'s']&&_0x4e44d8[_0x3b92aa(0x4ab,0x480)]('\x20\x20TTF'+'T\x20\x20\x20\x20'+_0x3b92aa(0x4c3,0x542)+_0x3b92aa(0x4e6,0x4fc)+_0x386399[_0x3b92aa(0x4a8,0x4aa)+'s']['n']+_0x1592b7(0xe5,0x13a)+_0x386399['ttftM'+'s'][_0x3b92aa(0x44d,0x43c)]+(_0x1592b7(0x1d7,0x19a)+'5=')+_0x386399[_0x3b92aa(0x4a8,0x4f0)+'s'][_0x3b92aa(0x537,0x503)]+'ms'),_0x386399['timeS'+_0x1592b7(0x89,0x105)+'s']&&_0x4e44d8[_0x3b92aa(0x4ab,0x468)](_0x3b92aa(0x501,0x522)+_0x1592b7(0x15e,0xdd)+_0x3b92aa(0x52f,0x524)+_0x3b92aa(0x4e6,0x551)+_0x386399['timeS'+_0x1592b7(0x11a,0x105)+'s']['n']+'\x20p50='+_0x386399['timeS'+_0x3b92aa(0x460,0x47c)+'s']['p50']+(_0x1592b7(0x11a,0x19a)+'5=')+_0x386399[_0x3b92aa(0x4b4,0x4e3)+'avedM'+'s'][_0x3b92aa(0x537,0x562)]+(_0x1592b7(0x1cd,0x17a)+_0x1592b7(0xa5,0xdf))+(_0x386399[_0x3b92aa(0x4b4,0x52b)+'avedM'+'s'][_0x1592b7(0xce,0x136)]/(-0x8*-0x202+0x15b7+-0x21df))[_0x1592b7(0x185,0x133)+'ed'](0xa55+-0x20f*0x2+0x35*-0x1e)+'s'),_0x386399[_0x1592b7(0xf9,0xf3)+_0x1592b7(0x146,0x113)+_0x1592b7(0x141,0x157)+'ed']){if(_0x3b92aa(0x437,0x469)!==_0x1592b7(0x154,0x12a)){let _0x137cce=_0x386399['negat'+'iveTi'+_0x3b92aa(0x4b2,0x48c)+'ed'],_0x297cc0=_0x137cce['sever'+_0x3b92aa(0x4ff,0x4b7)]==='red'?'\x20[RED'+']':_0x137cce[_0x1592b7(0xbe,0x13c)+'ity']==='yello'+'w'?'\x20[YEL'+_0x1592b7(0x8b,0x110):'';_0x4e44d8[_0x1592b7(0xf8,0x150)](_0x1592b7(0x194,0x15b)+_0x1592b7(0x218,0x1ad)+_0x3b92aa(0x4cb,0x4fb)+_0x1592b7(0xb4,0xfc)+_0x137cce['n']+(_0x3b92aa(0x519,0x4af)+'t=')+_0x137cce[_0x3b92aa(0x484,0x4d2)]+('\x20frac'+_0x1592b7(0xc1,0xec))+(_0x137cce[_0x1592b7(0x1db,0x15d)+'ion']*(-0x179e+0x1227+0x1*0x5db))['toFix'+'ed'](0xcdc+0x3fd+-0x58*0x31)+'%'+_0x297cc0);}else{let _0x48664f=_0x10ba51[_0x3b92aa(0x493,0x480)](_0xdf27e4[_0x3b92aa(0x453,0x440)+_0x1592b7(0x183,0x146)]);_0x48664f||(_0x48664f=[],_0x598158[_0x3b92aa(0x462,0x461)](_0x19b4f4[_0x3b92aa(0x453,0x453)+_0x3b92aa(0x4a1,0x4e0)],_0x48664f)),_0x48664f['push'](_0x563d8b);}}if(_0x386399[_0x1592b7(0x14d,0x172)+_0x1592b7(0x118,0x13e)+_0x1592b7(0x151,0xda)+'e']&&_0x4e44d8['push'](_0x1592b7(0xdc,0x122)+'ept-r'+'egret'+'\x20n='+_0x386399[_0x3b92aa(0x4cd,0x53a)+'tRegr'+_0x3b92aa(0x435,0x475)+'e']['n']+(_0x1592b7(0x1dd,0x18c)+'=')+(_0x386399[_0x1592b7(0x17d,0x172)+'tRegr'+'etRat'+'e'][_0x3b92aa(0x51c,0x4e2)]*(0x3d2+-0x1e2e+0x4*0x6b0))[_0x3b92aa(0x48e,0x48a)+'ed'](0x2*-0x5bf+0x865*-0x1+0x13e4)+'%'),_0x386399[_0x1592b7(0x1cf,0x1c4)+_0x3b92aa(0x532,0x528)+_0x3b92aa(0x454,0x4c0)+_0x3b92aa(0x4de,0x523)+'e']&&_0x4e44d8['push']('\x20\x20sho'+'rt-ho'+_0x3b92aa(0x52a,0x54c)+_0x3b92aa(0x4e6,0x56e)+_0x386399['short'+_0x3b92aa(0x532,0x4e8)+_0x3b92aa(0x454,0x485)+_0x1592b7(0x1dc,0x183)+'e']['n']+(_0x1592b7(0x1da,0x18c)+'=')+(_0x386399[_0x1592b7(0x20e,0x1c4)+_0x1592b7(0x1bc,0x1d7)+_0x1592b7(0x162,0xf9)+_0x1592b7(0x201,0x183)+'e']['rate']*(-0x67*0x5a+0x13fb+-0x25*-0x73))[_0x1592b7(0xfa,0x133)+'ed'](-0x37f*0xb+0x8a*0xa+0xb06*0x3)+'%'),_0x386399['typed'+_0x3b92aa(0x49b,0x439)+_0x1592b7(0x101,0xf4)+'entRa'+'te']&&_0x4e44d8[_0x1592b7(0x16c,0x150)]('\x20\x20typ'+_0x1592b7(0x166,0x139)+'st\x20\x20\x20'+_0x3b92aa(0x4e6,0x4be)+_0x386399[_0x1592b7(0x1c1,0x158)+_0x1592b7(0x1b4,0x140)+'iverg'+_0x3b92aa(0x47c,0x4de)+'te']['n']+(_0x1592b7(0x19c,0x18c)+'=')+(_0x386399[_0x1592b7(0x18c,0x158)+_0x1592b7(0xd4,0x140)+_0x3b92aa(0x44f,0x493)+_0x1592b7(0x15d,0x121)+'te'][_0x3b92aa(0x51c,0x519)]*(0x955+0x414+-0x1*0xd05))[_0x3b92aa(0x48e,0x40f)+'ed'](0x1*-0xd3+0x1*-0x10e2+0x11b6)+'%'),_0x386399['provi'+_0x1592b7(0x9e,0x123)+'l']){if('DsxHl'!=='DsxHl'){let _0x4c59b8=_0x258f5f[_0x3b92aa(0x498,0x49e)]['toISO'+_0x3b92aa(0x488,0x498)+'g']()['repla'+'ce']('T','\x20')[_0x1592b7(0x1cb,0x1d8)+'ce'](/\..*$/,''),_0x3aa9e8=[];return _0x3aa9e8['push']('--\x20pi'+_0x3b92aa(0x4a6,0x4dc)+_0x1592b7(0x167,0xfd)+'ch\x20--'+_0x1592b7(0x1e2,0x1b6)+'\x20\x20'+_0x4c59b8+(_0x1592b7(0x192,0x145)+'ame\x20#')+_0x2bd8f2[_0x1592b7(0x19c,0x11f)+_0x3b92aa(0x525,0x4ab)+'r']+_0x1592b7(0xd4,0x11a)),_0x3aa9e8[_0x3b92aa(0x4ab,0x492)](''),_0x3aa9e8['push'](_0x12227a(_0xd47c2)),_0x3aa9e8[_0x3b92aa(0x4ab,0x4a2)](''),_0x3aa9e8['push']('watch'+_0x3b92aa(0x4db,0x4bb)+_0x21c792[_0x1592b7(0x15a,0x171)+'edPat'+'h']+(_0x3b92aa(0x4c1,0x52a)+_0x1592b7(0x181,0x17f)+_0x1592b7(0x1a6,0x164)+'xit)')),_0x3aa9e8[_0x1592b7(0x23a,0x1b9)]('\x0a');}else{let _0x4bdab3=_0x386399[_0x1592b7(0x74,0xf8)+_0x1592b7(0x11b,0x123)+'l'][_0x3b92aa(0x506,0x538)+_0x3b92aa(0x4a9,0x4e7)+'e']!==void(-0x1*-0x22d2+0x5*0x186+-0x2a70)?_0x1592b7(0x197,0x148)+_0x1592b7(0x170,0x13f)+(_0x386399[_0x3b92aa(0x453,0x457)+_0x1592b7(0xba,0x123)+'l']['flick'+'erRat'+'e']*(-0x46*-0x4f+0x4bd+-0x19f3))[_0x3b92aa(0x48e,0x4c2)+'ed'](-0xcd7*0x1+-0x1*-0x1701+0x9*-0x121)+'%':'',_0x5f1187=_0x386399['provi'+_0x1592b7(0x108,0x123)+'l'][_0x1592b7(0x10e,0x172)+'tRate']!==void(-0x162*-0x14+0x1d10+-0x38b8)?_0x3b92aa(0x504,0x47c)+'pt='+(_0x386399[_0x1592b7(0xf1,0xf8)+_0x3b92aa(0x47e,0x49d)+'l'][_0x1592b7(0x1ee,0x172)+_0x1592b7(0xcc,0xde)]*(0xace+-0x5*0x718+-0x190e*-0x1))[_0x3b92aa(0x48e,0x4eb)+'ed'](-0x186a+-0x5ce+0x1e39*0x1)+'%':'';if(_0x4e44d8[_0x3b92aa(0x4ab,0x4e7)]('\x20\x20pro'+_0x1592b7(0x16f,0x1e1)+_0x1592b7(0x120,0x10b)+_0x3b92aa(0x53e,0x50c)+'n='+_0x386399['provi'+'siona'+'l']['shown']+('\x20swap'+'ped=')+_0x386399[_0x3b92aa(0x453,0x439)+_0x3b92aa(0x47e,0x4be)+'l'][_0x1592b7(0x110,0x197)+'ed']+('\x20corr'+'ectRa'+_0x3b92aa(0x486,0x4ac))+(_0x386399['provi'+'siona'+'l'][_0x3b92aa(0x471,0x444)+_0x3b92aa(0x500,0x57f)+'e']*(-0x5*0x7bb+-0x17*0x81+-0x32a2*-0x1))[_0x3b92aa(0x48e,0x454)+'ed'](-0x9f6+-0x1ccc+-0x26c3*-0x1)+('%\x20mea'+_0x3b92aa(0x492,0x4e8)+'=')+_0x386399[_0x3b92aa(0x453,0x4ab)+_0x1592b7(0x17e,0x123)+'l'][_0x3b92aa(0x530,0x4c8)+_0x1592b7(0x181,0x16b)]['toFix'+'ed'](-0x244*-0x6+0x1c99*0x1+-0x2a31)+'ms'+_0x4bdab3+_0x5f1187),_0x386399[_0x1592b7(0xd2,0xf8)+'siona'+'l']['bySou'+_0x3b92aa(0x4ac,0x4b3)]){if(_0x3b92aa(0x50a,0x4c4)!=='OztaK'){let _0x687527=Object[_0x1592b7(0xe2,0x169)+'es'](_0x386399['provi'+_0x3b92aa(0x47e,0x4b6)+'l']['bySou'+'rce'])['sort']((_0x447787,_0x1fcc1b)=>_0x1fcc1b[-0xf0d*0x1+-0xaf1*0x3+0x7*0x6d7]-_0x447787[0x1cd*0x2+-0x14d4+-0x191*-0xb])['map'](([_0x4a6714,_0x5c4725])=>_0x4a6714+'='+_0x5c4725)['join']('\x20');_0x4e44d8[_0x1592b7(0x15d,0x150)](_0x1592b7(0x12b,0x168)+_0x1592b7(0x175,0x168)+_0x1592b7(0x16f,0x168)+'\x20bySo'+_0x3b92aa(0x478,0x43a)+'\x20'+_0x687527);}else{typeof _0x43c82c['ttftM'+'s']=='numbe'+'r'&&_0x56bf4f['push'](_0x545b8e[_0x1592b7(0xd2,0x14d)+'s']),typeof _0x17a0b8[_0x3b92aa(0x4fd,0x526)+'atedT'+'imeSa'+_0x1592b7(0x135,0x12c)]=='numbe'+'r'&&(_0x19cbcf['push'](_0x5bef1b[_0x1592b7(0x179,0x1a2)+_0x1592b7(0x198,0x147)+_0x3b92aa(0x48c,0x4cf)+_0x1592b7(0x104,0x12c)]),_0x388c05+=_0x513f08[_0x3b92aa(0x4fd,0x540)+_0x1592b7(0x174,0x147)+'imeSa'+'vedMs'],_0x4ae1e8['estim'+'atedT'+'imeSa'+_0x1592b7(0x1a7,0x12c)]<-0x7d6+0xdaf+-0x5d9&&_0x2129d4++);let _0x58adea=_0x204084['accep'+'tance']===_0x3b92aa(0x4cd,0x481)+'ted'||_0xc68b1c[_0x1592b7(0x13d,0x172)+'tance']==='accep'+_0x1592b7(0x1d1,0x1cd)+_0x3b92aa(0x513,0x54f)+'l';if(_0x58adea&&(_0x4ce08b++,_0x249204[_0x1592b7(0x185,0x172)+_0x3b92aa(0x499,0x46e)+'et']===!(0x84a+0x51*0x12+-0xdfc)&&_0x51c909++),_0x39d853['accep'+_0x3b92aa(0x4aa,0x4cd)]===_0x1592b7(0x189,0x1b0)+_0x1592b7(0x13a,0x18e)&&(_0x1e3354++,_0x4f326f['short'+_0x3b92aa(0x532,0x54f)+_0x3b92aa(0x454,0x3ce)+'ss']===!(-0x44*-0x25+0x16f0+-0x20c4)&&_0x431273++),_0x488721[_0x1592b7(0x185,0x172)+_0x3b92aa(0x4aa,0x4a0)]==='stale'&&(_0x2b9234++,_0x48c291[_0x1592b7(0x1d4,0x158)+'PastD'+'iverg'+_0x3b92aa(0x49c,0x455)]===!(-0xe23*0x2+-0xa63+0x26a9)&&_0x461481++),_0xc309b1['mode']===_0x1592b7(0xd8,0xf8)+_0x1592b7(0x102,0x123)+'l'&&_0x203767[_0x1592b7(0xeb,0xd7)]){_0x4a2789++,_0x58adea&&_0x30cc86++;let _0x9c65b1=_0x225e4f[_0x3b92aa(0x4dc,0x54c)+'r']??'';if(_0x9c65b1['start'+_0x3b92aa(0x4c8,0x49f)]('provi'+_0x3b92aa(0x47e,0x4b1)+'l-')){let _0x70d01c=_0x9c65b1['slice'](-0x151d+-0x2541+0x1d35*0x2);_0x16256c[_0x70d01c]=(_0xb8a747[_0x70d01c]??0xe41+-0x2d*0x9b+0xcfe)+(0x3*-0xa8+-0xbf7+0xdf0);}}if(typeof _0x24f750['provi'+_0x1592b7(0x165,0x123)+_0x3b92aa(0x51e,0x4a3)+'Ms']==_0x1592b7(0x1d6,0x1bf)+'r'&&(_0x13d16f++,_0x3a7dc4+=_0x2a9623['provi'+_0x3b92aa(0x47e,0x4a6)+_0x3b92aa(0x51e,0x564)+'Ms'],_0x1a88f3[_0x1592b7(0xdb,0xf8)+_0x1592b7(0xca,0x123)+_0x1592b7(0x1aa,0x1e4)+_0x1592b7(0x1f5,0x1b7)+'t']===!(-0x7b3*0x2+-0x71*0x2e+0x23b4)&&_0x2a46f1++,_0x591feb[_0x1592b7(0xdb,0xf8)+_0x1592b7(0x1a8,0x123)+'lSwap'+_0x1592b7(0x1f6,0x176)+'er']===!(0x1*0x26e9+-0x31*0x6b+-0x2a2*0x7)&&_0x213a36++),_0x44be84[_0x1592b7(0x69,0xd7)]&&(_0x383ee4++,_0x58adea)){let _0x340f70=_0x2480b4[_0x1592b7(0x1a5,0x186)+_0x3b92aa(0x44a,0x4c0)+'ank']??0x2a3+0x5*-0x64d+0x1cde;_0x340f70<0xd2+-0x154e+-0x1*-0x147d&&_0x4c7bb9++,_0x340f70<-0x4cb*-0x5+-0x59*0x3b+-0x371&&_0x40e3ab++,_0x340f70<0x31*0x2b+0xf7f+-0x17b5&&_0x55220c++;}}}}}_0x386399[_0x1592b7(0x132,0x1aa)+_0x3b92aa(0x4dd,0x4bc)]!==void(0x1e22*-0x1+-0xb3*-0x2e+0x104*-0x2)&&_0x4e44d8['push']('\x20\x20sav'+_0x3b92aa(0x4fb,0x49b)+(_0x386399['saved'+_0x3b92aa(0x4dd,0x51a)]*(-0x1376*0x1+-0x16c1+0x2a9b))[_0x3b92aa(0x48e,0x43c)+'ed'](0x1fc1+0x31f*-0x5+-0x1*0x1025)+_0x1592b7(0x175,0x161)+((_0x386399[_0x1592b7(0x1da,0x1aa)+_0x3b92aa(0x526,0x580)]??0x1f6a+-0x1471+-0xaf9)*(0x8*0x1f7+-0xe58+0x12*-0xe))[_0x1592b7(0x114,0x133)+'ed'](0x1*0xd5+0x19f*0x6+0xe*-0xc1)+_0x3b92aa(0x43c,0x42f)+((_0x386399[_0x1592b7(0x144,0x1aa)+'At5']??-0xa1*-0x31+-0x2*0xadf+-0x65*0x17)*(0x1cb1+-0x47*0x83+0x808))['toFix'+'ed'](-0x1b4b+-0xf*-0x1e+0xcc5*0x2)+'%');}else{let _0x6bb86a=_0x309773[_0x3b92aa(0x4e1,0x569)+'dateR'+'ank']??0x175+-0x26cb*-0x1+-0x2840;_0x6bb86a<0x5a1+-0x5*0x3ee+0xe06&&_0x37159e++,_0x6bb86a<-0x3*0x75b+0x2011+-0x1*0x9fd&&_0x23727c++,_0x6bb86a<-0xc51+-0x1*0x1483+-0x1*-0x20d9&&_0x5101bf++;}}_0x4e44d8['push'](''),_0x4e44d8['push']('Thres'+_0x1592b7(0x151,0x115)+':');for(let _0x56114b of _0x4489b6[_0x1592b7(0x139,0xfb)+_0x3b92aa(0x470,0x433)]){if('xpsDm'===_0x3b92aa(0x4e4,0x4a6)){let _0x345c30=_0x56114b[_0x3b92aa(0x4e5,0x4f4)]?_0x56114b[_0x1592b7(0x123,0x13c)+'ity']===_0x1592b7(0x161,0x16a)?_0x1592b7(0x18b,0x112)+']':_0x1592b7(0x14f,0x163)+']':_0x1592b7(0x20f,0x1a8)+']';_0x4e44d8[_0x1592b7(0xfe,0x150)]('\x20\x20'+_0x345c30+'\x20'+_0x56114b[_0x1592b7(0x1bd,0x1a1)][_0x3b92aa(0x4b5,0x4cb)+'d'](-0x1f80+-0x13b2*-0x1+0xbf6)+(_0x3b92aa(0x440,0x41e)+_0x3b92aa(0x4e3,0x563))+_0x56114b['targe'+'t'][_0x3b92aa(0x4b5,0x48c)+'d'](0x743+-0x1c31*0x1+-0xb*-0x1e8)+_0x1592b7(0x1e6,0x1a3)+_0x56114b['obser'+_0x1592b7(0x205,0x1d0)]);}else{if(_0x1d05ea['lengt'+'h']===-0x141d+-0x1e17+-0x1*-0x3234)return-0x2b3*0xe+0x1973+-0x41d*-0x3;if(_0x53b106<=-0x167e+-0x1683+0x2d01*0x1)return _0x19d551[-0x1e47*-0x1+-0xc40*0x2+-0x1ed*0x3]??-0x1*0x21a4+-0x1541+0xd*0x439;if(_0x1bd338>=0x1*-0x115f+-0x2174*0x1+-0x32d4*-0x1)return _0x38e511[_0x14e849[_0x1592b7(0xfc,0xff)+'h']-(0x5*0x1b3+0x1913+0xd*-0x295)]??0x3a*0x21+0x119*0x14+-0x2*0xeb7;let _0x58f2f2=_0x2bbb4e['min'](_0x223e7b[_0x1592b7(0xa1,0xff)+'h']-(0x67*0x5c+0x23*-0x2a+-0x1*0x1f45),_0x4bc17a['ceil'](_0x56f185*_0x1d2030['lengt'+'h'])-(0xcd*-0x2f+0x0+0x124*0x21));return _0x1fb3b6[_0x58f2f2]??-0x1d24*-0x1+0x24a0+-0x41c4;}}return _0x4e44d8['join']('\x0a');}function T(_0x4ae003){function _0x4f5b65(_0x57c9a9,_0x2a383e){return _0x9c3ce(_0x2a383e-0x2e5,_0x57c9a9);}function _0x5cb853(_0x457103,_0x313d84){return _0x9c3ce(_0x457103-0x4e,_0x313d84);}return'n='+_0x4ae003['count']+_0x5cb853(-0x1a9,-0x143)+_0x4ae003[_0x4f5b65(0x130,0x113)+_0x5cb853(-0x1db,-0x22a)][_0x4f5b65(0x8e,0xa6)]+(_0x5cb853(-0x149,-0x17b)+'5=')+_0x4ae003[_0x4f5b65(0xea,0x113)+_0x4f5b65(0x10e,0xbc)][_0x4f5b65(0x1d9,0x190)]+(_0x4f5b65(0x1cc,0x14e)+'9=')+_0x4ae003[_0x5cb853(-0x184,-0x176)+_0x5cb853(-0x1db,-0x189)]['p99']+(_0x4f5b65(0xfb,0xd8)+_0x4f5b65(0x153,0x196))+(_0x4ae003[_0x5cb853(-0x166,-0x155)+_0x4f5b65(0x1a7,0x12d)]*(-0x112c+0x1*0x2334+0x4*-0x469))[_0x4f5b65(0x95,0xe7)+'ed'](-0x46a*0x1+0xcd5+0x2*-0x435)+(_0x4f5b65(0x87,0xd9)+'=')+(_0x4ae003[_0x4f5b65(0x116,0x179)+'te']*(0x963+-0xdee*0x1+-0x3*-0x1a5))[_0x4f5b65(0x159,0xe7)+'ed'](0x1d11+-0x379+-0x1997*0x1)+'%';}async function U(_0x5c1da1){let {records:_0x29df88,parseErrors:_0x5c9832}=await O(_0x5c1da1);return q(_0x29df88,_0x5c1da1,_0x5c9832);}function _0x34dc(){const _0xd46df1=['yxj0Awe','AM9PBG','CMvKpq','yxnO','muDNzg5MDG','ANriD2i','ignVDw4','BNvTyMu','qxvRwKS','CMf0zq','ihn0ywW','Bfn3yxa','C2HVCNq','yMfKuMe','C3rjza','zs13yxi','B2jQzwm','mtG3ntqWmhvKzffoBW','tNvTyMu','qxqZ','BwLU','DgvKlxa','ndyZodu3C3bZBgfo','DMvYica','DMvK','nu1Z','CMvJB3i','DhjPzq','zwqGica','BwvHBLm','rNPMuLi','sg92zxi','CMvWBge','BgXTudK','ignVCNi','yxjRifi','CdK1','pJ0G','CgfYC2u','CMvZDwW','Dhb1Dca','DMLZAw8','BgLKpq','ihnOB3C','BfDHC0m','CdK5','zMLSDgu','EwvSBg8','C2HVD24','ls0GCgK','zw5JAg0','zxrsyxq','mZmWnJf3tNDQDvK','BgHrAge','zs1Zyxy','DfjHDgu','DgfSpq','AwqTB3u','jsbant0','DgLJicG','zxHWAxi','mtz6zuPfvu8','ihrHCMC','C3rHCNq','Chq9','yxrL','y3jUC1O','Bg93','DgLJ','DgLVBJ0','yMfKt3u','C29YDa','zgf0zvi','C2XPy2u','y3rPB24','CduW','BMvNyxq','AxzLCMC','t3v0Chu','nZCXmuDyrgPguW','DwDKsg4','ChjVDMK','rgLZBwK','yw1Licm','DgHYzxm','zcbUpq','Dc1Izw4','BgXT','BgvUz3q','teXnicG','BgXTudu','Bgf0Axy','y2TcEM0','DgLJudu','yxzLze0','zwrszwq','C2v0','y3LnCW','zhm6ica','zw1WDhK','BMfSica','qwr2yw4','mti3nty1nwjJyxDwta','pt09pt0','DgLJwW','te9xxq','me1Z','w1DbuK4','AxzLvgK','DgvK','Ag9Szhm','y29YCMu','Bg9JywW','nJaWy3jRDujJ','CMvK','ic0T','icbZAg8','xsb2ywW','DxjJztO','C3bSAxq','zNjHBwu','y2fJAgu','zw50uMe','icbHy2m','C2LVBMe','BxmGDMe','jsbIywq','zgvYCW','ChqTCMe','BwLUAxm','y291BNq','C2zfEvG','Dgu9','DMvKtxm','u3rYAw4','A2v5CW','CMvQzwm','zwrgCMe','Aw1Lu2e','zwLns2G','Dg9gAxG','ztOGica','jsbTzwe','Dg90ywW','BLn3yxa','z2v0','zwqTCge','iha1md0','igvYCM8','C2v2zxi','BM93','DfjLz3i','A2vYpq','ugfZDeq','zw50','icbWCM8','AxnZzwq','CMvXDwu','icaGzNi','zgvY','yxrLzfq','igzSAwm','BgXTwW','pgLUBgK','lwDOB3m','zwrqyxq','DhrMDe0','zxjsyxq','DgfUy2u','ChvZAa','CMnL','zxbVCNq','igv4CgK','y2vK','xsbWnta','C3rHBgu','Bwvtyxy','DhLWzwq','DgLTzvm','CgfKrw4','icbUzwC','Dhb1Dfi','zNjHy3q','otaXnJq3DgzrBhjo','Bgf0zw4','z013quK','jsbamZ0','CgvKpq','w1bbu1m','ihrVigu','D249','icaGkem','BwfW','icaGica','zw50CMK','D2fYBG','D2fWtxm','BMn5','C1DPDgG','xsbWotu','zgv0zxi','lxnHDMu','D2f0y2G','ywnJzxa','CefuBxG','ChjVzMK','rgv0zxi','rMXPy2S','Bw9Kzq','nZH1yvfyyLG','uMf0zq','BxmGDg8','rxjYB3i','ChrLzd0','DMfSAwq','yw5R','DhjSk0m','Aw5NoIa','D2LUBMu','qxqX','C3nsyxq','y2GGls0','DxrMoa','y2fUzgK','zxjYB3i','zxqG','EhbZrg0','CgfZCW','ig49','ihjHDgu','D0LItwW','C3nLza','yxjL','whLvs2q','mJG0nZiWu0j0q2jP','pd0G','igXHDgu','zunVBxa','ywjVCNq','C291CMm','C3DHCha','lw91Dha','ChjVzhu','BxmGCdK','igj5u28','zwrzzwW','B3n0iei','wfz6vwO','t3rOzxi','zwramt0','BMfTzq','zxn0Aw0','igDVDca','Axr5','y3rsyxq','icb0Aw0','Aw9U','w0zbsuW','igfJy2u','C2f2zwq','zMXPy2S','yNLtB3u','lxrPBwu','C3rYAw4','vgD3Agu','zgLZBwK','icaTia','igrPC20','Dg9ju08','ngvwze95sq','y2vKicG','BgL2zsa','B3jYzwm'];_0x34dc=function(){return _0xd46df1;};return _0x34dc();}function J(_0x58bfeb,_0x5b9427){function _0x2f502b(_0x5c675f,_0x55c640){return _0x44add9(_0x55c640-0x474,_0x5c675f);}function _0xd7edef(_0x13451f,_0x2c30ea){return _0x44add9(_0x13451f-0x56e,_0x2c30ea);}let _0x4020cc=_0x5b9427[_0x2f502b(0x221,0x1af)][_0xd7edef(0x31f,0x2d8)+_0xd7edef(0x299,0x216)+'g']()[_0x2f502b(0x2ad,0x24a)+'ce']('T','\x20')[_0x2f502b(0x276,0x24a)+'ce'](/\..*$/,''),_0x1977b3=[];return _0x1977b3[_0x2f502b(0x166,0x1c2)](_0x2f502b(0x156,0x14a)+_0x2f502b(0x239,0x1bd)+_0xd7edef(0x269,0x20d)+_0xd7edef(0x2f0,0x2f6)+_0xd7edef(0x322,0x2d5)+'\x20\x20'+_0x4020cc+(_0xd7edef(0x2b1,0x31d)+_0x2f502b(0x175,0x16c))+_0x5b9427[_0xd7edef(0x28b,0x213)+'Numbe'+'r']+'\x20--'),_0x1977b3[_0xd7edef(0x2bc,0x327)](''),_0x1977b3['push'](W(_0x58bfeb)),_0x1977b3[_0x2f502b(0x1e6,0x1c2)](''),_0x1977b3[_0x2f502b(0x13b,0x1c2)](_0xd7edef(0x2dd,0x29a)+'ing:\x20'+_0x5b9427[_0x2f502b(0x15f,0x1e3)+_0x2f502b(0x1d8,0x1be)+'h']+(_0xd7edef(0x2d2,0x331)+'trl+C'+_0x2f502b(0x1ce,0x1d6)+'xit)')),_0x1977b3[_0x2f502b(0x23a,0x22b)]('\x0a');}export{u as THRESHOLDS,W as formatReport,O as loadMetrics,L as parseMetricsText,g as quantile,J as renderLiveFrame,U as runBenchmark,q as summarize};