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.
- package/LICENSE +561 -0
- package/README.md +186 -4
- package/dist/bench-cli.js +1 -123
- package/dist/bench.d.ts +7 -3
- package/dist/bench.js +1 -522
- package/dist/config.d.ts +46 -3
- package/dist/context-aggregator.d.ts +4 -1
- package/dist/cycle-manager.d.ts +2 -21
- package/dist/entropy-stop.d.ts +4 -1
- package/dist/eval-dataset.d.ts +2 -13
- package/dist/fuzzy-matcher.d.ts +4 -1
- package/dist/ghost-editor.d.ts +11 -2
- package/dist/index.d.ts +7 -2
- package/dist/index.js +1 -289
- package/dist/intent.d.ts +179 -0
- package/dist/metrics.d.ts +4 -1
- package/dist/path-index.d.ts +4 -1
- package/dist/path-matcher.d.ts +4 -1
- package/dist/profile-store.d.ts +4 -1
- package/dist/profile.d.ts +2 -20
- package/dist/providers/cloud-provider.d.ts +4 -1
- package/dist/providers/local-provider.d.ts +4 -1
- package/dist/providers/openai-compat-chat-provider.d.ts +31 -0
- package/dist/providers/openai-compat-provider.d.ts +24 -1
- package/dist/providers/race.d.ts +4 -1
- package/dist/providers/router.d.ts +59 -0
- package/dist/providers/types.d.ts +13 -1
- package/dist/recent-paths.d.ts +4 -1
- package/dist/replay-cli.js +1 -166
- package/dist/replay.d.ts +2 -7
- package/package.json +10 -6
- package/dist/bench-cli.d.ts +0 -3
- package/dist/bench-cli.d.ts.map +0 -1
- package/dist/bench-cli.js.map +0 -1
- package/dist/bench.d.ts.map +0 -1
- package/dist/bench.js.map +0 -1
- package/dist/cache.d.ts +0 -124
- package/dist/cache.d.ts.map +0 -1
- package/dist/cache.js +0 -173
- package/dist/cache.js.map +0 -1
- package/dist/candidate-rerank.d.ts +0 -57
- package/dist/candidate-rerank.d.ts.map +0 -1
- package/dist/candidate-rerank.js +0 -78
- package/dist/candidate-rerank.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -317
- package/dist/config.js.map +0 -1
- package/dist/context-aggregator.d.ts.map +0 -1
- package/dist/context-aggregator.js +0 -87
- package/dist/context-aggregator.js.map +0 -1
- package/dist/context-selector.d.ts +0 -128
- package/dist/context-selector.d.ts.map +0 -1
- package/dist/context-selector.js +0 -300
- package/dist/context-selector.js.map +0 -1
- package/dist/cycle-manager.d.ts.map +0 -1
- package/dist/cycle-manager.js +0 -168
- package/dist/cycle-manager.js.map +0 -1
- package/dist/edit-history-ring.d.ts +0 -148
- package/dist/edit-history-ring.d.ts.map +0 -1
- package/dist/edit-history-ring.js +0 -262
- package/dist/edit-history-ring.js.map +0 -1
- package/dist/entropy-stop.d.ts.map +0 -1
- package/dist/entropy-stop.js +0 -141
- package/dist/entropy-stop.js.map +0 -1
- package/dist/eval-dataset.d.ts.map +0 -1
- package/dist/eval-dataset.js +0 -127
- package/dist/eval-dataset.js.map +0 -1
- package/dist/fast-path-engine.d.ts +0 -286
- package/dist/fast-path-engine.d.ts.map +0 -1
- package/dist/fast-path-engine.js +0 -341
- package/dist/fast-path-engine.js.map +0 -1
- package/dist/fuzzy-matcher.d.ts.map +0 -1
- package/dist/fuzzy-matcher.js +0 -162
- package/dist/fuzzy-matcher.js.map +0 -1
- package/dist/ghost-editor.d.ts.map +0 -1
- package/dist/ghost-editor.js +0 -1491
- package/dist/ghost-editor.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/keystroke-timer.d.ts +0 -59
- package/dist/keystroke-timer.d.ts.map +0 -1
- package/dist/keystroke-timer.js +0 -94
- package/dist/keystroke-timer.js.map +0 -1
- package/dist/metrics-builder.d.ts +0 -71
- package/dist/metrics-builder.d.ts.map +0 -1
- package/dist/metrics-builder.js +0 -71
- package/dist/metrics-builder.js.map +0 -1
- package/dist/metrics.d.ts.map +0 -1
- package/dist/metrics.js +0 -212
- package/dist/metrics.js.map +0 -1
- package/dist/path-index.d.ts.map +0 -1
- package/dist/path-index.js +0 -148
- package/dist/path-index.js.map +0 -1
- package/dist/path-matcher.d.ts.map +0 -1
- package/dist/path-matcher.js +0 -88
- package/dist/path-matcher.js.map +0 -1
- package/dist/profile-store.d.ts.map +0 -1
- package/dist/profile-store.js +0 -199
- package/dist/profile-store.js.map +0 -1
- package/dist/profile.d.ts.map +0 -1
- package/dist/profile.js +0 -434
- package/dist/profile.js.map +0 -1
- package/dist/providers/cloud-provider.d.ts.map +0 -1
- package/dist/providers/cloud-provider.js +0 -109
- package/dist/providers/cloud-provider.js.map +0 -1
- package/dist/providers/local-provider.d.ts.map +0 -1
- package/dist/providers/local-provider.js +0 -48
- package/dist/providers/local-provider.js.map +0 -1
- package/dist/providers/openai-compat-provider.d.ts.map +0 -1
- package/dist/providers/openai-compat-provider.js +0 -215
- package/dist/providers/openai-compat-provider.js.map +0 -1
- package/dist/providers/openai-completions-runner.d.ts +0 -52
- package/dist/providers/openai-completions-runner.d.ts.map +0 -1
- package/dist/providers/openai-completions-runner.js +0 -141
- package/dist/providers/openai-completions-runner.js.map +0 -1
- package/dist/providers/race.d.ts.map +0 -1
- package/dist/providers/race.js +0 -441
- package/dist/providers/race.js.map +0 -1
- package/dist/providers/truncate.d.ts +0 -7
- package/dist/providers/truncate.d.ts.map +0 -1
- package/dist/providers/truncate.js +0 -57
- package/dist/providers/truncate.js.map +0 -1
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/providers/types.js +0 -60
- package/dist/providers/types.js.map +0 -1
- package/dist/provisional-manager.d.ts +0 -93
- package/dist/provisional-manager.d.ts.map +0 -1
- package/dist/provisional-manager.js +0 -98
- package/dist/provisional-manager.js.map +0 -1
- package/dist/provisional.d.ts +0 -150
- package/dist/provisional.d.ts.map +0 -1
- package/dist/provisional.js +0 -238
- package/dist/provisional.js.map +0 -1
- package/dist/recent-paths.d.ts.map +0 -1
- package/dist/recent-paths.js +0 -114
- package/dist/recent-paths.js.map +0 -1
- package/dist/regret-tracker.d.ts +0 -84
- package/dist/regret-tracker.d.ts.map +0 -1
- package/dist/regret-tracker.js +0 -145
- package/dist/regret-tracker.js.map +0 -1
- package/dist/replay-cli.d.ts +0 -13
- package/dist/replay-cli.d.ts.map +0 -1
- package/dist/replay-cli.js.map +0 -1
- package/dist/replay.d.ts.map +0 -1
- package/dist/replay.js +0 -225
- package/dist/replay.js.map +0 -1
- package/dist/reranker.d.ts +0 -181
- package/dist/reranker.d.ts.map +0 -1
- package/dist/reranker.js +0 -324
- package/dist/reranker.js.map +0 -1
- package/dist/session-trie.d.ts +0 -103
- package/dist/session-trie.d.ts.map +0 -1
- package/dist/session-trie.js +0 -280
- package/dist/session-trie.js.map +0 -1
- package/dist/speculative.d.ts +0 -74
- package/dist/speculative.d.ts.map +0 -1
- package/dist/speculative.js +0 -107
- package/dist/speculative.js.map +0 -1
- package/dist/tool-summarize.d.ts +0 -40
- package/dist/tool-summarize.d.ts.map +0 -1
- package/dist/tool-summarize.js +0 -245
- package/dist/tool-summarize.js.map +0 -1
- package/dist/trie-sanitize.d.ts +0 -22
- package/dist/trie-sanitize.d.ts.map +0 -1
- package/dist/trie-sanitize.js +0 -142
- package/dist/trie-sanitize.js.map +0 -1
- package/dist/versions.d.ts +0 -23
- package/dist/versions.d.ts.map +0 -1
- package/dist/versions.js +0 -31
- 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};
|