[DevTools Console] Avoid editor freeze after pasting large JSON#251173
[DevTools Console] Avoid editor freeze after pasting large JSON#251173kapral18 merged 4 commits intoelastic:mainfrom
Conversation
6e79624 to
3e3e699
Compare
ElenaStoeva
left a comment
There was a problem hiding this comment.
Thanks for working on this @kapral18! I tested locally and it works well but I'd recommend that it's tested by at least one more person from @elastic/kibana-management just to make sure no regressions are introduced.
Regarding the code changes, I left some comments. My main suggestion is about readability - the logic is quite complex so it would be helpful to document every helper/utility so that a reader can understand what the overall logic is doing without having to go deep into the implementation details. Also, it would be nice to add unit tests for all of the new helpers introduced in autocomplete_utils.ts.
src/platform/packages/shared/kbn-monaco/src/languages/console/language.ts
Outdated
Show resolved
Hide resolved
src/platform/packages/shared/kbn-monaco/src/languages/console/language.ts
Outdated
Show resolved
Hide resolved
src/platform/packages/shared/kbn-monaco/src/languages/console/language.ts
Outdated
Show resolved
Hide resolved
src/platform/packages/shared/kbn-monaco/src/languages/console/language.ts
Show resolved
Hide resolved
src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.ts
Outdated
Show resolved
Hide resolved
src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.ts
Outdated
Show resolved
Hide resolved
src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.ts
Outdated
Show resolved
Hide resolved
src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts
Outdated
Show resolved
Hide resolved
src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts
Outdated
Show resolved
Hide resolved
src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts
Show resolved
Hide resolved
sorry this was to be marked as draft as I already had a lot of changes done but not pushed even before your review. But I appreciate you taking the time and apologies. I will still address the comments and I appreciate the good feedback. |
@ElenaStoeva I added better coverage to utils without exposing every single little tool as most of the tools are private and are not supposed to be depended as public api of this file. |
fedda18 to
76f54ea
Compare
76f54ea to
e80a0e7
Compare
ElenaStoeva
left a comment
There was a problem hiding this comment.
Thanks for addressing my feedback - it is much easier to read and understand now!
There are some helpers which are not trivial and I still think they would benefit from some unit tests - for example, isQueryValueStartAtQuote and scanRequestLineFrom. I understand we don't want to expose these but we could export them from their file, and then add index.ts in utils/ that only exports checkForTripleQuotesAndEsqlQuery - would that make sense?
Also, I noticed we removed the test with a very large string in a request - could we add a functional test that tests a request which would cause the crash before the fix is added? We have a similar test here.
| }); | ||
| }); | ||
|
|
||
| it('does not treat longer words as request methods (e.g. POSTER)', () => { |
There was a problem hiding this comment.
nit: This looks like a duplicate test (very similar to the previous one) - why do we need it?
There was a problem hiding this comment.
this was models way to cover minimal invariant surface GET-GETS POST-POSTER, which is not wrong. Because each test catches a separate invariant. But can be optimized.
Even if we don’t re-export from utils/index.ts, they’re still available via deep imports and that effectively turns them into part of the module surface area. Instead we already have them covered via the public API |
I added the functional test |
f917fc6 to
c83b12e
Compare
eokoneyo
left a comment
There was a problem hiding this comment.
Changes look good, tested locally for ESQL in discover, thanks for adding tests for this also, left some nits comments I think we should adddress
| if (value === editor.current.getValue()) { | ||
| // In controlled mode, `value` changes on every keystroke. Avoid calling `editor.getValue()` | ||
| // (which materializes the full model) by comparing against our shadow copy first. | ||
| if (typeof value !== 'string' || value === lastKnownValueRef.current) { |
There was a problem hiding this comment.
Curious did you stumble on a scenario where value was not a string??
There was a problem hiding this comment.
Not a string specifically, but undefined — when the consumer uses the editor in uncontrolled mode (value={undefined}), the typeof guard short-circuits the effect so we don't try to push undefined into the model. I also added value ?? defaultValue in initMonaco (line 256) and a test for this path. Wdyt
src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.tsx
Show resolved
Hide resolved
ElenaStoeva
left a comment
There was a problem hiding this comment.
Latest lgtm, thanks!
c83b12e to
49ed95d
Compare
d99befb to
c87e7d0
Compare
166f5f9 to
e338550
Compare
…tic#251173) Closes elastic#251172 ## Summary This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs. ## DEMO (Before / After) https://github.com/user-attachments/assets/54b90fdb-f0b0-4de0-ae53-6fa4a12a98d9 ## Change 1: Console completion avoids full-buffer reads (`kbn-monaco` Console language) **What changed** - The Console completion provider no longer calls `model.getValue()` to compute `textBeforeCursor`. - ES|QL context detection is only attempted when the cursor is within a `POST /_query` (or `POST _query/async`) request. - When it *is* a `_query` request, the provider reads only the relevant slice via `model.getValueInRange()` (from the request line to the cursor). - For all other requests (or when no request line is found within a bounded lookback), completion delegates to the existing actions provider. **Why** - `model.getValue()` materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI. - ES|QL completion only makes sense for `_query` requests; scoping the work avoids paying the cost for non-ES|QL traffic. **Why this approach** - We preserve existing completion behavior by delegating to the actions provider, but avoid the pathological cost by restricting work to a small, semantically relevant window. ## Change 2: ES|QL quote/query detection is linear-time (`checkForTripleQuotesAndEsqlQuery`) **What changed** - `checkForTripleQuotesAndEsqlQuery` was rewritten to scan the text once and avoid repeated substring+regex work inside the main loop. **Why** - The previous approach could become super-linear on adversarial inputs (many quotes / many potential toggles), which is exactly what large JSON payloads tend to contain. - In the worst case, this turns “type one character” into “do a huge amount of CPU work”, producing the freeze. **Why this approach** - A single forward scan preserves semantics while making the runtime scale predictably with input size. ## Change 3: Monaco `onChange` no longer calls `editor.getValue()` per keystroke (`shared-ux` React Monaco editor) **What changed** - The `onDidChangeModelContent` handler computes the next value by applying `event.changes` to a shadow string (`lastKnownValueRef`) instead of calling `editor.getValue()`. - Controlled-mode syncing (`useLayoutEffect`) first compares the incoming `value` against the shadow value to avoid unnecessary full-buffer reads. **Why** - `editor.getValue()` materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models. - Applying incremental changes keeps the per-keystroke cost proportional to the change set, not the document size. **Why this approach** - Monaco already provides the exact edit deltas (`IModelContentChangedEvent.changes`). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads. ## Tests (what they cover and why) - **`language.test.ts`**: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model. - **`autocomplete_utils.test.ts`**: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance). - **`editor.test.tsx`**: verifies the incremental `onChange` value computation (including multi-change ordering) and controlled sync behavior. ## Test plan - `node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.js` - `node scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.js` ### Manual UI verification (DevTools Console) - Open `DevTools -> Console`. - Expand the `<details>` block below and paste the payload into the editor. - Click at the very end of the pasted content and type a few characters. - Verify the editor remains responsive (no multi-second freeze / hang), and typed characters appear immediately. - Optional: place the cursor inside a `""" ... """` block and type to ensure autocomplete remains responsive. <details> <summary>Sanitized reproduction payload (paste into DevTools Console)</summary> ```http POST _ingest/pipeline/_simulate { "docs": [ { "_source": { "@timestamp": "xQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS", "eventData": { "__original": "5\"wYxQ9mP7vK\"2Zt\"R4nL1aB8c\"D\"6eF3gH\"0\"jS5wYxQ9\"mP\"7vK2ZtR4n\"L1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8c\"D6eF3gH\"0jS5wYxQ9m\"P7vK2ZtR4\"nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Z\"tR4nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Zt\"R4nL1a\"B8cD6eF\"3gH0j\"S5wYxQ9\"m\"P7vK2ZtR4nL1aB8c\"D6\"eF3gH\"0jS5w\"YxQ9mP7v\"K2Z\"tR4\"n\"L1aB8\"c\"D6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B8cD\"6eF3gH0jS5\"wYxQ9mP\"7vK2ZtR4nL\"1aB8cD6\"eF3g\"H0jS5\"wYxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3g\"H\"0jS5wYx\"Q9mP7v\"K2ZtR4n\"L1aB8c\"D6eF3gH\"0\"jS5wYxQ9mP7vK2Z\"t\"R4nL1aB8cD\"6eF3gH\"0jS5wYxQ9mP7v\"K2ZtR4n\"L1aB\"8\"cD6eF\"3\"gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8cD\"6\"eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"n\"L1aB8cD6e\"F3g\"H0jS5wYxQ9mP7vK2ZtR\"4nL1aB8cD\"6eF3gH0jS\"5w\"YxQ9mP7v\"K2ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wY\"xQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4n\"L1aB8\"cD6eF\"3gH\"0jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB8\"cD6eF\"3gH0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1a\"B8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP\"7vK2Z\"tR4nL\"1aB\"8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4nL\"1aB8c\"D6eF3\"gH0\"jS5wYx\"Q9mP7\"vK2ZtR\"4nL1aB8cD\"6\"eF3gH0jS5wYxQ\"9\"mP7vK2ZtR\"4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9mP7v\"K2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1\"aB8cD\"6eF3gH\"0jS5wY\"xQ9mP7\"vK2ZtR4nL\"1aB8c\"D6eF3gH\"0jS\"5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4\"nL\\1a\\\"\\B8cD6\"e\"F3gH\"0jS\"5wYxQ9mP7\"vK2Zt\"R4nL1aB8c\"D6eF3\"gH0jS5wYxQ\"9mP7vK2\"ZtR4nL1aB8\"cD6eF3g\"H0jS\"5wYxQ\"9mP7\"v\"K2ZtR4nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1aB\"8cD6eF3\"g\"H0jS5wYxQ9mP7vK\"2\"ZtR4nL1aB8\"cD6eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL1\"a\"B8cD6e\"F\"3gH0jS5w\"Y\"xQ9mP7vK2ZtR4nL1aB8c\"D\"6eF3gH0jS5\"w\"YxQ9mP7vK2ZtR\"4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7vK2Zt\"R4nL1aB8c\"D6eF3gH0j\"S5\"wYxQ9mP7\"vK2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5w\"YxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL1\"aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5w\"YxQ9m\"P7vK2Z\"tR4nL1aB8\"c\"D6eF3gH0jS5wY\"x\"Q9mP7vK2Z\"tR\"4nL1aB8c\"D6eF3\"gH0jS5wYxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3\"gH0jS\"5wYxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4\"nL1aB\"8cD6eF\"3gH0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5wYxQ9m\"P7v\"K2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B\"8cD6eF\"3\"gH0j\"S5w\"YxQ9mP7vK\"2ZtR4\"nL1aB8cD6\"eF3gH0j\"S5wYxQ9mP7\"vK2ZtR4\"nL1aB8cD6e\"F3gH0jS\"5wYx\"Q9mP7\"vK2Z\"t\"R4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR4nL1a\"B8cD6eF\"3gH0jS5wYx\"Q9mP7vK\"2\"ZtR4nL1aB8cD6eF\"3\"gH0jS5wYxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5w\"Y\"xQ9mP\"7\"vK2ZtR4n\"L\"1aB8cD6eF3gH0jS5wYxQ\"9\"mP7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7v\"K2ZtR4nL1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2Zt\"R4\"nL1aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5wY\"xQ9\"mP7vK\"2ZtR4\"nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS5\"wYxQ9\"mP7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0j\"S5w\"YxQ9m\"P7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4n\"L1aB8\"cD6eF3\"gH0jS5wYx\"Q\"9mP7vK2ZtR4nL\"1\"aB8cD6eF3\"gH\"0jS5wYxQ\"9mP7v\"K2ZtR4nL1aB8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0j\"S5wYx\"Q9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR\"4nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL\"1aB8cD6eF\"3gH\"0\"jS5wYx\"Q\"9mP7\"vK2\"ZtR4nL1aB\"8cD6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4n\"L1aB8cD6\"eF3gH0jS5w\"YxQ9mP7\"vK2Z\"tR4nL\"1aB8\"c\"D6eF3gH0jS5wYxQ9mP7vK2ZtR\"4\"nL1aB8c\"D6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR4nL1\"a\"B8cD6eF3gH0jS5w\"Y\"xQ9mP7vK2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9m\"P7vK\"2\"ZtR4n\"L\"1aB8cD6e\"F\"3gH0jS5wYxQ9mP7vK2Zt\"R\"4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"m\"P7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7vK2Zt\"R4nL1aB8c\"D6\"eF3gH0jS\"5wYxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF\"3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH\"0jS\"5wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8cD6eF3gH0jS5w\"YxQ\"9mP\"7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1a\"B8cD6\"eF3gH\"0jS\"5wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD6\"eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F\"3gH0jS5wY\"xQ\"9mP7vK2Z\"tR4nL\"1aB8cD6eF3gH0\"jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9m\"P7vK2\"ZtR4nL\"1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF3gH0j\"S5w\"YxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5\"wYxQ9mP7v\"K2ZtR4n\"L1\"aB8cD6e\"F3gH\"0jS5wYxQ9\"m\"P7vK2ZtR4nL\"1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4\"nL1aB\"8cD\"6eF3g\"H0j\"S5wYxQ9\"mP7v\"K2ZtR4nL\"1aB8c\"D6eF3gH0jS\"5wY\"xQ9mP7vK2Z\"tR4n\"L1aB8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5\"wYxQ9mP\"7\"vK2ZtR4nL1aB8cD6\"e\"F3gH0jS5wYxQ9mP7\"vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS5\"wYxQ9mP7vK2ZtR4\"nL1a\"B8cD6eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1\"a\"B8cD6eF3\"gH\"0jS5wYxQ9\"mP7vK2Z\"tR4nL1a\"B8cD6eF3gH\"0jS5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1\"aB8cD6eF\"3gH0j\"S5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6\"eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL\"1aB8c\"D6eF3\"gH0jS5wY\"xQ9\"mP7\"v\"K2ZtR4\"n\"L1aB\"8cD\"6eF3gH0jS\"5wYxQ\"9mP7vK2Zt\"R4nL1a\"B8cD6eF3gH\"0jS5wYxQ\"9mP7vK2ZtR\"4nL1aB8c\"D6eF\"3gH0j\"S5wY\"x\"Q9mP7vK2Zt\"R\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4nL1aB\"8\"cD6eF3gH0jS5wYx\"Q\"9mP7vK2ZtR\"4nL1aB\"8cD6eF3gH0jS5\"wYxQ9mP7\"vK2Z\"t\"R4nL1a\"B\"8cD6eF3g\"H\"0jS5wYxQ9mP7vK2ZtR4n\"L\"1aB8cD6eF3\"g\"H0jS5wYxQ9mP7\"v\"K2ZtR4nL1\"aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3\"gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8c\"D6e\"F3g\"H0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4nL\"1aB\"8cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Zt\"R4nL1\"aB8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2\"ZtR\"4nL1a\"B8cD6\"eF3\"gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3g\"H0jS5\"wYxQ9m\"P7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7\"vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5w\"YxQ\"9mP\"7vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2\"ZtR4n\"L1aB8c\"D6eF3g\"H0jS5wY\"xQ9mP7vK2\"ZtR4nL\"1aB8cD6\"eF3\"gH0jS5wYxQ\"9mP\"7vK\"2ZtR4n\"L1aB8cD6eF3gH\"0jS5wYxQ\"9mP\"7vK2ZtR4n\"L1aB8cD\"6e\"F3gH0jS\"5wYx\"Q9mP7vK2Z\"t\"R4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB\"8c\"D6eF3\"gH0\"jS5wY\"xQ9\"mP7vK2Z\"tR4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9m\"P7v\"K2ZtR4nL1a\"B8cD\"6eF3gH0jS5wYxQ9m\"P7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2ZtR\"4\"nL1aB8cD6eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL1\"aB8\"cD6e\"F3gH0\"jS5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF\"3gH0jS5wYx\"Q9mP7v\"K2ZtR4nL1\"a\"B8cD6eF3gH0jS\"5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL1\"aB8\"cD6eF3gH0\"j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6e\"F\"3gH0jS5wYxQ9mP7\"vK2\"ZtR4nL1aB\"8\"cD6eF3gH\"0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1aB8cD\"6eF\"3gH0jS\"5w\"YxQ9\"mP7vK2ZtR4n\"L1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8\"c\"D6eF3g\"H0jS5wYxQ9\"mP7vK\"2ZtR4nL1aB8\"cD6eF3gH0jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8cD6\"eF3gH0jS5wYx\"Q9mP7vK2ZtR\"4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3gH0jS5\"wYxQ9mP7v\"K2ZtR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR4nL1a\"B8cD6eF3g\"H0jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL1\"a\"B8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6eF3\"gH0\"jS5wYxQ\"9mP\"7vK2ZtR4n\"L1a\"B8cD6eF3\"gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1aB\"8\"cD6eF\"3\"gH0jS5w\"YxQ9mP7v\"K2ZtR4nL1\"aB8cD6\"eF3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wYxQ9mP7vK\"2ZtR\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9mP\"7vK2ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4\"n\"L1aB8c\"D\"6eF3gH0\"jS5wYxQ9\"mP7vK2ZtR\"4nL1aB\"8cD6eF3g\"H0j\"S5wYxQ9mP\"7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0jS5wYxQ9m\"P7v\"K2ZtR4n\"L1aB8cD6\"eF3gH0jS5\"wYxQ9m\"P7vK2ZtR\"4nL\"1aB8cD6eF\"3gH0j\"S5wYxQ9mP\"7\"vK2ZtR\"4\"nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD\"6eF\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9mP\"7vK2ZtR4n\"L\"1aB8cD6\"e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6eF3gH0jS5\"wYx\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6e\"F\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR\"4nL1aB8cD\"6eF\"3gH0jS5w\"YxQ\"9mP7vK2Zt\"R4nL1\"aB8cD6eF3\"g\"H0jS5w\"Y\"xQ9mP7v\"K2ZtR4nL\"1aB8cD6eF\"3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8c\"D6eF3gH0jS5wYxQ\"9mP\"7vK2ZtR4nL1\"aB8\"cD6eF3g\"H0jS5wYx\"Q9mP7vK2Z\"tR4nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4nL\"1a\"B8cD6eF3gH0\"jS5w\"YxQ9mP7vK\"2\"ZtR4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6eF\"3\"gH0jS5w\"YxQ\"9mP7vK2Zt\"R4n\"L1aB8cD6\"eF3\"gH0jS5wYx\"Q9m\"P7vK2ZtR4nL1aB8\"cD6\"eF3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wY\"xQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF3g\"H\"0jS5wY\"x\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD6eF3gH0\"jS5\"wYxQ9mP7vK2\"ZtR\"4nL1aB8\"cD6\"eF3gH0jS5\"wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD\"6eF3g\"H0jS5wYxQ\"9\"mP7vK2Z\"t\"R4nL1aB\"8cD\"6eF3gH0jS\"5wY\"xQ9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5wYxQ9mP\"7vK\"2ZtR4nL1aB8\"cD6\"eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8\"cD6\"eF3gH0jS5\"wYxQ9\"mP7vK2ZtR\"4\"nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9mP\"7vK2ZtR4n\"L1aB8c\"D6eF3gH0\"jS5\"wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6eF3\"gH0\"jS5wYxQ9mP7\"vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP\"7v\"K2ZtR4nL1aB8c\"D6eF\"3gH0jS5wY\"x\"Q9mP7\"v\"K2ZtR4n\"L1aB8cD6eF\"3gH0jS5wY\"xQ9mP7v\"K2ZtR4nL\"1aB\"8cD6eF3gH\"0jS\"5wYxQ9mP7vK2ZtR\"4nL\"1aB8cD6eF3g\"H0jS5\"wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8cD6\"eF3gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8\"cD\"6eF3g\"H0jS5\"wYxQ9mP7vK2\"ZtR4n\"L1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2\"Zt\"R4nL1\"aB8cD6e\"F3gH0j\"S5wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD6eF\"3gH0\"jS5wYxQ9\"mP\"7vK2ZtR4\"nL1aB\"8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB\"8cD\"6eF3gH0jS\"5wYx" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "Q9mP7vK2ZtR4nL1aB8cD6", "moduleId": "eF3gH0jS5wY" }, "customerInfo": { "customerId": "xQ9mP7vK2Zt", "deviceId": "R4nL1aB8cD6eF3gH0jS5w", "lineId": "YxQ9mP7vK2ZtR4", "publicIp": "nL1aB8cD6eF3" } } }, { "_index": "gH0jS5wYxQ9mP7vK2Zt", "_source": { "kafka": { "eventId": "R4nL1aB8cD6e", "moduleId": "F3gH0jS5w" }, "customerInfo": { "customerId": "YxQ9mP7vK2Z", "deviceId": "tR4nL1aB8cD6eF3gH0jS5", "lineId": "wYxQ9mP7vK2ZtR", "publicIp": "4nL1aB8cD6eF" }, "eventData": { "__original": "3\"gH0jS5w\"Yx\"Q9m\"P\"7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2\"Z\"tR4nL1aB 8cD6eF 3g H0jS5wYx\"Q\"9mP7vK2ZtR4nL1aB8c\"D6eF3\"gH0jS5wY\"xQ9mP7\"vK2ZtR\"4nL1aB8\"cD6eF3gH0jS5wYxQ9mP7vK\"2ZtR\"4nL1aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2ZtR4n\"L1aB8cD\"6eF3gH\"0\"jS5wYxQ\"9\"mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0\"j\"S5wYxQ9\"m\"P7vK2ZtR4nL1\"a\"B8cD6eF3g\"H\"0jS5wYxQ9mP7\"v\"K2ZtR4n\"L\"1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2ZtR4nL1aB\"8cD6e\"F3gH0jS5wYx\"Q9mP7\"vK2ZtR4nL1\"aB8cD6" } } }, { "_source": { "eventData": { "__original": "e\"F3gH0jS\"5w\"YxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR\"4nL1aB8cD6eF3g\"H0j\"S5wYxQ9m\"P7v\"K2ZtR\"4\"nL1aB8cD 6eF3gH 0j S5wYxQ9mP7v K\"2\"ZtR4nL1aB8cD6eF3gH\"0jS5w\"YxQ9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3g\"H0jS5wYxQ9mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB8cD\"6eF3gH0\"jS5wYx\"Q\"9mP7vK2\"Z\"tR4nL1aB8cD6\"eF3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL\"1\"aB8cD6eF3gH0\"j\"S5wYxQ9mP\"7\"vK2ZtR4nL1aB\"8\"cD6eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7\"vK2ZtR4nL1a\"B8cD\"6eF3gH0jS5wY\"xQ\"9mP7vK2Z\"t\"R4n\"L\"1aB8cD6eF3gH0jS\"5wYxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF3gH\"0jS5wYx\"Q9\"mP7vK2Zt\"R\"4nL1a\"B8c\"D6eF3gH0jS\"5wYxQ9m" }, "customerInfo": { "customerId": "P7vK2ZtR4nL", "deviceId": "1aB8cD6eF3gH0jS5wYxQ9", "lineId": "mP7vK2ZtR4nL1a", "publicIp": "B8cD6eF3gH0j" }, "kafka": { "eventId": "S5wYxQ9mP7vK", "moduleId": "2ZtR4nL1a" } } }, { "_source": { "@timestamp": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "eventData": { "__original": "L\"1aB8cD6eF3gH0jS5w\"YxQ9m\"P7vK2ZtR4nL1aB8cD6e\"F3gH0jS\"5wYxQ9mP7vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2Zt\"R4nL1aB8\"cD6eF" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "3gH0jS5w", "moduleId": "YxQ9mP7vK" }, "@Version": "2", "customerInfo": { "customerId": "ZtR4nL1aB8c", "deviceId": "D6eF3gH0jS5wYxQ9mP7vK", "lineId": "2ZtR4nL1aB8cD6", "publicIp": "eF3gH0jS5wYx" } } } ], "pipeline": { "processors": [ { "rename": { "field": "Q9mP7vK2ZtR4nL1aB8cD", "target_field": "6eF3gH0jS5wYxQ" } }, { "lowercase": { "field": "9mP7vK2ZtR4nL1", "target_field": "aB8cD6eF3gH", "ignore_missing": true } }, { "set": { "field": "0jS5wYxQ9mP7", "copy_from": "vK2ZtR4nL1aB8", "ignore_empty_value": true } }, { "set": { "field": "cD6eF3gH0", "copy_from": "jS5wYxQ9mP7vK2ZtR4nL1", "ignore_empty_value": true } }, { "script": { "source": """ aB8 cD6eF3gH0j S 5wYxQ9mP7vK2ZtR4 nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP""", "if": "7vK2ZtR4nL1aB8cD 6e F3gH 0j S5wYxQ9mP7vK2ZtR4nL 1a B8cD" } }, { "script": { "description": "6eF3gH0 jS5wYxQ9 mP 7vK2ZtR4nL1 aB8cD6e F3gH 0jS", "source": "5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "if": "S5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF 3gH0 jS 5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 gH0jS5wYxQ 9mP7vK2" } }, { "set": { "field": "ZtR4nL1aB8cD6e", "copy_from": "F3gH0jS5wYxQ9mP7vK2", "ignore_empty_value": true } }, { "set": { "field": "ZtR4nL1aB8cD6", "copy_from": "eF3gH0jS5wYxQ9mP7vK2Zt", "ignore_empty_value": true } }, { "rename": { "field": "R4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2Zt", "ignore_missing": true } }, { "script": { "source": """ R4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0 jS5wYxQ9mP7v """, "if": "K2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2Zt R4 nL1a" } }, { "rename": { "field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "target_field": "eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF", "target_field": "3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3", "target_field": "gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "ignore_missing": true } }, { "rename": { "field": "eF3gH0jS5wYxQ9mP7v", "target_field": "K2ZtR4nL1aB8cD6eF3gH0jS5w", "ignore_missing": true } }, { "rename": { "field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3g", "target_field": "H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD", "ignore_missing": true } }, { "rename": { "field": "6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a", "target_field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "ignore_missing": true } }, { "rename": { "field": "L1aB8cD6eF3gH0jS5wYxQ9mP7vK", "target_field": "2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9", "ignore_missing": true } }, { "rename": { "field": "mP7vK2ZtR4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "ignore_missing": true } }, { "script": { "description": "S5wYxQ9mP 7vK2ZtR 4nL1aB8 cD6eF 3gH 0jS5wYx Q9mP7vK 2ZtR", "lang": "4nL1aB8c", "source": """ D6 eF3gH0jS5wYxQ9mP7vK2ZtR4nL 1a B8cD6 e F3g H0j S 5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF3gH0jS5w Y xQ9mP7vK2Z tR 4nL1 a B8c D 6eF3gH0jS5w YxQ9mP7vK2ZtR4n L 1 aB8c D6eF3gH0jS5wYxQ9mP7vK 2ZtR 4nL1aB8cD6eF3gH0jS5wY xQ9mP 7vK2ZtR4nL1aB8cD6eF3g H0 jS 5wY xQ9mP7vK2ZtR4n L1 a B8cD6 eF3g H 0j S 5wYxQ9mP 7 vK2ZtR4n L1 aB8c D 6eF 3 gH0jS5wYx Q9mP7vK2ZtR4 n L 1aB8cD6e F3gH0jS5wYxQ9mP7vK2 Z tR4nL 1a B 8c D6 eF3gH0 jS5wYxQ 9m P7vK2ZtR4nL1aB8cD6eF3gH0 jS 5wYxQ 9 mP7 vK2 Z tR4nL1aB8cD6eF3gH0jS5wY xQ9mP7vK2ZtR4nL1a B 8 cD6eF3gH 0jS5wYxQ9m P7vK2Zt R4nL1aB8c D6eF3gH0j S5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3g H 0jS5wYxQ 9mP7vK2Zt R 4nL1aB8cD6eF3g H0jS5w YxQ9mP7vK2ZtR4nL1a B 8cD6eF3gH0jS5w Y xQ9mP7vK2 Z tR 4 nL 1a B8c D6eF3gH 0jS5wYxQ9m P7vK2Z tR 4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK 2Z tR4nL 1 aB8 cD6eF 3g H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD 6 eF 3gH0jS5wYxQ9mP7 vK 2ZtR4nL1aB8c D 6eF3gH0jS5w Y x Q9mP7vK2 ZtR4nL1aB8cD6 eF 3g H 0jS5wYxQ9mP7v K2 ZtR 4nL1aB8 cD6eF3gH0jS5wY xQ 9mP7vK2ZtR 4 nL1aB8cD6 eF3gH0jS5wYxQ9 mP7vK2ZtR4nL1aB 8 cD6eF3gH0 jS5wYxQ9mP7vK2 ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a B8cD6e F 3 g H0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6e F3 gH0jS 5 wYx Q9m P 7vK2ZtR4nL1aB8cD6eF3gH0jS5w YxQ9mP7vK2Z t R4nL1aB8cD6 eF 3gH0 j S5w Y xQ9mP7vK2ZtR 4nL1aB8cD6eF3g H 0jS5wYxQ9 mP7vK2ZtR4nL1aB8cD6 e F 3gH0jS5wYxQ9 mP7vK2ZtR4 nL1aB8cD6eF3g H0jS5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3gH0jS5w YxQ9mP7vK2ZtR4nL1aB8 cD6eF3gH0jS5wYxQ 9m P7 vK2ZtR4nL 1aB8c D6eF 3gH 0jS5wY xQ9mP7vK2ZtR 4n L1aB8cD6eF 3 gH 0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 g H0jS5wYxQ9mP7vK2Zt R 4nL1aB8cD6 e F """ } }, { "uri_parts": { "field": "3gH0jS5wYxQ9", "ignore_missing": true, "ignore_failure": true } }, { "append": { "field": "mP7vK2ZtR4n", "value": [ "L1aB8cD6eF3gH", "0jS5wYxQ9mP7vK2ZtR", "4nL1aB8cD6eF3", "gH0jS5wYxQ9mP7vK2", "ZtR4nL1aB8cD6" ], "allow_duplicates": false } }, { "script": { "description": "eF3gH0 jS5w YxQ9mP", "source": """ 7vK2ZtR 4nL1aB8cD6e F3 g H0 jS 5w YxQ9 mP 7 vK 2Zt R 4nL1aB 8cD6e F 3gH0 jS 5w YxQ9mP7vK2 ZtR4 n L1aB8c D6eF3gH0jS5wYxQ9mP7vK2 Zt R4nL1aB8c D6eF3g H0jS5wY xQ9mP7vK2 Zt R4n L 1aB8 cD 6e F3gH0jS5wY xQ9mP 7 vK2ZtR4 nL1aB8cD6eF3g H0 jS5wYxQ9m P7vK2Z tR4nL1aB 8cD6eF3gH 0j S5w Y xQ9mP7 vK2ZtR 4 nL1aB8cD6e """ } }, { "remove": { "field": [ "F3gH" ], "ignore_missing": true } } ] } } ``` </details> Assisted by Cursor CLI using GPT-5.2-High model --------- Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 4fa1505)
…tic#251173) Closes elastic#251172 This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs. https://github.com/user-attachments/assets/54b90fdb-f0b0-4de0-ae53-6fa4a12a98d9 Console language) **What changed** - The Console completion provider no longer calls `model.getValue()` to compute `textBeforeCursor`. - ES|QL context detection is only attempted when the cursor is within a `POST /_query` (or `POST _query/async`) request. - When it *is* a `_query` request, the provider reads only the relevant slice via `model.getValueInRange()` (from the request line to the cursor). - For all other requests (or when no request line is found within a bounded lookback), completion delegates to the existing actions provider. **Why** - `model.getValue()` materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI. - ES|QL completion only makes sense for `_query` requests; scoping the work avoids paying the cost for non-ES|QL traffic. **Why this approach** - We preserve existing completion behavior by delegating to the actions provider, but avoid the pathological cost by restricting work to a small, semantically relevant window. (`checkForTripleQuotesAndEsqlQuery`) **What changed** - `checkForTripleQuotesAndEsqlQuery` was rewritten to scan the text once and avoid repeated substring+regex work inside the main loop. **Why** - The previous approach could become super-linear on adversarial inputs (many quotes / many potential toggles), which is exactly what large JSON payloads tend to contain. - In the worst case, this turns “type one character” into “do a huge amount of CPU work”, producing the freeze. **Why this approach** - A single forward scan preserves semantics while making the runtime scale predictably with input size. keystroke (`shared-ux` React Monaco editor) **What changed** - The `onDidChangeModelContent` handler computes the next value by applying `event.changes` to a shadow string (`lastKnownValueRef`) instead of calling `editor.getValue()`. - Controlled-mode syncing (`useLayoutEffect`) first compares the incoming `value` against the shadow value to avoid unnecessary full-buffer reads. **Why** - `editor.getValue()` materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models. - Applying incremental changes keeps the per-keystroke cost proportional to the change set, not the document size. **Why this approach** - Monaco already provides the exact edit deltas (`IModelContentChangedEvent.changes`). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads. - **`language.test.ts`**: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model. - **`autocomplete_utils.test.ts`**: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance). - **`editor.test.tsx`**: verifies the incremental `onChange` value computation (including multi-change ordering) and controlled sync behavior. - `node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.js` - `node scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.js` - Open `DevTools -> Console`. - Expand the `<details>` block below and paste the payload into the editor. - Click at the very end of the pasted content and type a few characters. - Verify the editor remains responsive (no multi-second freeze / hang), and typed characters appear immediately. - Optional: place the cursor inside a `""" ... """` block and type to ensure autocomplete remains responsive. <details> <summary>Sanitized reproduction payload (paste into DevTools Console)</summary> ```http POST _ingest/pipeline/_simulate { "docs": [ { "_source": { "@timestamp": "xQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS", "eventData": { "__original": "5\"wYxQ9mP7vK\"2Zt\"R4nL1aB8c\"D\"6eF3gH\"0\"jS5wYxQ9\"mP\"7vK2ZtR4n\"L1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8c\"D6eF3gH\"0jS5wYxQ9m\"P7vK2ZtR4\"nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Z\"tR4nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Zt\"R4nL1a\"B8cD6eF\"3gH0j\"S5wYxQ9\"m\"P7vK2ZtR4nL1aB8c\"D6\"eF3gH\"0jS5w\"YxQ9mP7v\"K2Z\"tR4\"n\"L1aB8\"c\"D6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B8cD\"6eF3gH0jS5\"wYxQ9mP\"7vK2ZtR4nL\"1aB8cD6\"eF3g\"H0jS5\"wYxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3g\"H\"0jS5wYx\"Q9mP7v\"K2ZtR4n\"L1aB8c\"D6eF3gH\"0\"jS5wYxQ9mP7vK2Z\"t\"R4nL1aB8cD\"6eF3gH\"0jS5wYxQ9mP7v\"K2ZtR4n\"L1aB\"8\"cD6eF\"3\"gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8cD\"6\"eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"n\"L1aB8cD6e\"F3g\"H0jS5wYxQ9mP7vK2ZtR\"4nL1aB8cD\"6eF3gH0jS\"5w\"YxQ9mP7v\"K2ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wY\"xQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4n\"L1aB8\"cD6eF\"3gH\"0jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB8\"cD6eF\"3gH0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1a\"B8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP\"7vK2Z\"tR4nL\"1aB\"8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4nL\"1aB8c\"D6eF3\"gH0\"jS5wYx\"Q9mP7\"vK2ZtR\"4nL1aB8cD\"6\"eF3gH0jS5wYxQ\"9\"mP7vK2ZtR\"4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9mP7v\"K2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1\"aB8cD\"6eF3gH\"0jS5wY\"xQ9mP7\"vK2ZtR4nL\"1aB8c\"D6eF3gH\"0jS\"5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4\"nL\\1a\\\"\\B8cD6\"e\"F3gH\"0jS\"5wYxQ9mP7\"vK2Zt\"R4nL1aB8c\"D6eF3\"gH0jS5wYxQ\"9mP7vK2\"ZtR4nL1aB8\"cD6eF3g\"H0jS\"5wYxQ\"9mP7\"v\"K2ZtR4nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1aB\"8cD6eF3\"g\"H0jS5wYxQ9mP7vK\"2\"ZtR4nL1aB8\"cD6eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL1\"a\"B8cD6e\"F\"3gH0jS5w\"Y\"xQ9mP7vK2ZtR4nL1aB8c\"D\"6eF3gH0jS5\"w\"YxQ9mP7vK2ZtR\"4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7vK2Zt\"R4nL1aB8c\"D6eF3gH0j\"S5\"wYxQ9mP7\"vK2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5w\"YxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL1\"aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5w\"YxQ9m\"P7vK2Z\"tR4nL1aB8\"c\"D6eF3gH0jS5wY\"x\"Q9mP7vK2Z\"tR\"4nL1aB8c\"D6eF3\"gH0jS5wYxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3\"gH0jS\"5wYxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4\"nL1aB\"8cD6eF\"3gH0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5wYxQ9m\"P7v\"K2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B\"8cD6eF\"3\"gH0j\"S5w\"YxQ9mP7vK\"2ZtR4\"nL1aB8cD6\"eF3gH0j\"S5wYxQ9mP7\"vK2ZtR4\"nL1aB8cD6e\"F3gH0jS\"5wYx\"Q9mP7\"vK2Z\"t\"R4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR4nL1a\"B8cD6eF\"3gH0jS5wYx\"Q9mP7vK\"2\"ZtR4nL1aB8cD6eF\"3\"gH0jS5wYxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5w\"Y\"xQ9mP\"7\"vK2ZtR4n\"L\"1aB8cD6eF3gH0jS5wYxQ\"9\"mP7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7v\"K2ZtR4nL1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2Zt\"R4\"nL1aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5wY\"xQ9\"mP7vK\"2ZtR4\"nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS5\"wYxQ9\"mP7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0j\"S5w\"YxQ9m\"P7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4n\"L1aB8\"cD6eF3\"gH0jS5wYx\"Q\"9mP7vK2ZtR4nL\"1\"aB8cD6eF3\"gH\"0jS5wYxQ\"9mP7v\"K2ZtR4nL1aB8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0j\"S5wYx\"Q9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR\"4nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL\"1aB8cD6eF\"3gH\"0\"jS5wYx\"Q\"9mP7\"vK2\"ZtR4nL1aB\"8cD6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4n\"L1aB8cD6\"eF3gH0jS5w\"YxQ9mP7\"vK2Z\"tR4nL\"1aB8\"c\"D6eF3gH0jS5wYxQ9mP7vK2ZtR\"4\"nL1aB8c\"D6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR4nL1\"a\"B8cD6eF3gH0jS5w\"Y\"xQ9mP7vK2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9m\"P7vK\"2\"ZtR4n\"L\"1aB8cD6e\"F\"3gH0jS5wYxQ9mP7vK2Zt\"R\"4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"m\"P7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7vK2Zt\"R4nL1aB8c\"D6\"eF3gH0jS\"5wYxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF\"3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH\"0jS\"5wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8cD6eF3gH0jS5w\"YxQ\"9mP\"7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1a\"B8cD6\"eF3gH\"0jS\"5wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD6\"eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F\"3gH0jS5wY\"xQ\"9mP7vK2Z\"tR4nL\"1aB8cD6eF3gH0\"jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9m\"P7vK2\"ZtR4nL\"1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF3gH0j\"S5w\"YxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5\"wYxQ9mP7v\"K2ZtR4n\"L1\"aB8cD6e\"F3gH\"0jS5wYxQ9\"m\"P7vK2ZtR4nL\"1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4\"nL1aB\"8cD\"6eF3g\"H0j\"S5wYxQ9\"mP7v\"K2ZtR4nL\"1aB8c\"D6eF3gH0jS\"5wY\"xQ9mP7vK2Z\"tR4n\"L1aB8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5\"wYxQ9mP\"7\"vK2ZtR4nL1aB8cD6\"e\"F3gH0jS5wYxQ9mP7\"vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS5\"wYxQ9mP7vK2ZtR4\"nL1a\"B8cD6eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1\"a\"B8cD6eF3\"gH\"0jS5wYxQ9\"mP7vK2Z\"tR4nL1a\"B8cD6eF3gH\"0jS5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1\"aB8cD6eF\"3gH0j\"S5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6\"eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL\"1aB8c\"D6eF3\"gH0jS5wY\"xQ9\"mP7\"v\"K2ZtR4\"n\"L1aB\"8cD\"6eF3gH0jS\"5wYxQ\"9mP7vK2Zt\"R4nL1a\"B8cD6eF3gH\"0jS5wYxQ\"9mP7vK2ZtR\"4nL1aB8c\"D6eF\"3gH0j\"S5wY\"x\"Q9mP7vK2Zt\"R\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4nL1aB\"8\"cD6eF3gH0jS5wYx\"Q\"9mP7vK2ZtR\"4nL1aB\"8cD6eF3gH0jS5\"wYxQ9mP7\"vK2Z\"t\"R4nL1a\"B\"8cD6eF3g\"H\"0jS5wYxQ9mP7vK2ZtR4n\"L\"1aB8cD6eF3\"g\"H0jS5wYxQ9mP7\"v\"K2ZtR4nL1\"aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3\"gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8c\"D6e\"F3g\"H0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4nL\"1aB\"8cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Zt\"R4nL1\"aB8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2\"ZtR\"4nL1a\"B8cD6\"eF3\"gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3g\"H0jS5\"wYxQ9m\"P7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7\"vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5w\"YxQ\"9mP\"7vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2\"ZtR4n\"L1aB8c\"D6eF3g\"H0jS5wY\"xQ9mP7vK2\"ZtR4nL\"1aB8cD6\"eF3\"gH0jS5wYxQ\"9mP\"7vK\"2ZtR4n\"L1aB8cD6eF3gH\"0jS5wYxQ\"9mP\"7vK2ZtR4n\"L1aB8cD\"6e\"F3gH0jS\"5wYx\"Q9mP7vK2Z\"t\"R4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB\"8c\"D6eF3\"gH0\"jS5wY\"xQ9\"mP7vK2Z\"tR4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9m\"P7v\"K2ZtR4nL1a\"B8cD\"6eF3gH0jS5wYxQ9m\"P7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2ZtR\"4\"nL1aB8cD6eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL1\"aB8\"cD6e\"F3gH0\"jS5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF\"3gH0jS5wYx\"Q9mP7v\"K2ZtR4nL1\"a\"B8cD6eF3gH0jS\"5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL1\"aB8\"cD6eF3gH0\"j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6e\"F\"3gH0jS5wYxQ9mP7\"vK2\"ZtR4nL1aB\"8\"cD6eF3gH\"0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1aB8cD\"6eF\"3gH0jS\"5w\"YxQ9\"mP7vK2ZtR4n\"L1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8\"c\"D6eF3g\"H0jS5wYxQ9\"mP7vK\"2ZtR4nL1aB8\"cD6eF3gH0jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8cD6\"eF3gH0jS5wYx\"Q9mP7vK2ZtR\"4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3gH0jS5\"wYxQ9mP7v\"K2ZtR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR4nL1a\"B8cD6eF3g\"H0jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL1\"a\"B8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6eF3\"gH0\"jS5wYxQ\"9mP\"7vK2ZtR4n\"L1a\"B8cD6eF3\"gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1aB\"8\"cD6eF\"3\"gH0jS5w\"YxQ9mP7v\"K2ZtR4nL1\"aB8cD6\"eF3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wYxQ9mP7vK\"2ZtR\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9mP\"7vK2ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4\"n\"L1aB8c\"D\"6eF3gH0\"jS5wYxQ9\"mP7vK2ZtR\"4nL1aB\"8cD6eF3g\"H0j\"S5wYxQ9mP\"7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0jS5wYxQ9m\"P7v\"K2ZtR4n\"L1aB8cD6\"eF3gH0jS5\"wYxQ9m\"P7vK2ZtR\"4nL\"1aB8cD6eF\"3gH0j\"S5wYxQ9mP\"7\"vK2ZtR\"4\"nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD\"6eF\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9mP\"7vK2ZtR4n\"L\"1aB8cD6\"e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6eF3gH0jS5\"wYx\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6e\"F\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR\"4nL1aB8cD\"6eF\"3gH0jS5w\"YxQ\"9mP7vK2Zt\"R4nL1\"aB8cD6eF3\"g\"H0jS5w\"Y\"xQ9mP7v\"K2ZtR4nL\"1aB8cD6eF\"3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8c\"D6eF3gH0jS5wYxQ\"9mP\"7vK2ZtR4nL1\"aB8\"cD6eF3g\"H0jS5wYx\"Q9mP7vK2Z\"tR4nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4nL\"1a\"B8cD6eF3gH0\"jS5w\"YxQ9mP7vK\"2\"ZtR4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6eF\"3\"gH0jS5w\"YxQ\"9mP7vK2Zt\"R4n\"L1aB8cD6\"eF3\"gH0jS5wYx\"Q9m\"P7vK2ZtR4nL1aB8\"cD6\"eF3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wY\"xQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF3g\"H\"0jS5wY\"x\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD6eF3gH0\"jS5\"wYxQ9mP7vK2\"ZtR\"4nL1aB8\"cD6\"eF3gH0jS5\"wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD\"6eF3g\"H0jS5wYxQ\"9\"mP7vK2Z\"t\"R4nL1aB\"8cD\"6eF3gH0jS\"5wY\"xQ9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5wYxQ9mP\"7vK\"2ZtR4nL1aB8\"cD6\"eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8\"cD6\"eF3gH0jS5\"wYxQ9\"mP7vK2ZtR\"4\"nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9mP\"7vK2ZtR4n\"L1aB8c\"D6eF3gH0\"jS5\"wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6eF3\"gH0\"jS5wYxQ9mP7\"vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP\"7v\"K2ZtR4nL1aB8c\"D6eF\"3gH0jS5wY\"x\"Q9mP7\"v\"K2ZtR4n\"L1aB8cD6eF\"3gH0jS5wY\"xQ9mP7v\"K2ZtR4nL\"1aB\"8cD6eF3gH\"0jS\"5wYxQ9mP7vK2ZtR\"4nL\"1aB8cD6eF3g\"H0jS5\"wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8cD6\"eF3gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8\"cD\"6eF3g\"H0jS5\"wYxQ9mP7vK2\"ZtR4n\"L1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2\"Zt\"R4nL1\"aB8cD6e\"F3gH0j\"S5wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD6eF\"3gH0\"jS5wYxQ9\"mP\"7vK2ZtR4\"nL1aB\"8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB\"8cD\"6eF3gH0jS\"5wYx" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "Q9mP7vK2ZtR4nL1aB8cD6", "moduleId": "eF3gH0jS5wY" }, "customerInfo": { "customerId": "xQ9mP7vK2Zt", "deviceId": "R4nL1aB8cD6eF3gH0jS5w", "lineId": "YxQ9mP7vK2ZtR4", "publicIp": "nL1aB8cD6eF3" } } }, { "_index": "gH0jS5wYxQ9mP7vK2Zt", "_source": { "kafka": { "eventId": "R4nL1aB8cD6e", "moduleId": "F3gH0jS5w" }, "customerInfo": { "customerId": "YxQ9mP7vK2Z", "deviceId": "tR4nL1aB8cD6eF3gH0jS5", "lineId": "wYxQ9mP7vK2ZtR", "publicIp": "4nL1aB8cD6eF" }, "eventData": { "__original": "3\"gH0jS5w\"Yx\"Q9m\"P\"7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2\"Z\"tR4nL1aB 8cD6eF 3g H0jS5wYx\"Q\"9mP7vK2ZtR4nL1aB8c\"D6eF3\"gH0jS5wY\"xQ9mP7\"vK2ZtR\"4nL1aB8\"cD6eF3gH0jS5wYxQ9mP7vK\"2ZtR\"4nL1aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2ZtR4n\"L1aB8cD\"6eF3gH\"0\"jS5wYxQ\"9\"mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0\"j\"S5wYxQ9\"m\"P7vK2ZtR4nL1\"a\"B8cD6eF3g\"H\"0jS5wYxQ9mP7\"v\"K2ZtR4n\"L\"1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2ZtR4nL1aB\"8cD6e\"F3gH0jS5wYx\"Q9mP7\"vK2ZtR4nL1\"aB8cD6" } } }, { "_source": { "eventData": { "__original": "e\"F3gH0jS\"5w\"YxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR\"4nL1aB8cD6eF3g\"H0j\"S5wYxQ9m\"P7v\"K2ZtR\"4\"nL1aB8cD 6eF3gH 0j S5wYxQ9mP7v K\"2\"ZtR4nL1aB8cD6eF3gH\"0jS5w\"YxQ9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3g\"H0jS5wYxQ9mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB8cD\"6eF3gH0\"jS5wYx\"Q\"9mP7vK2\"Z\"tR4nL1aB8cD6\"eF3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL\"1\"aB8cD6eF3gH0\"j\"S5wYxQ9mP\"7\"vK2ZtR4nL1aB\"8\"cD6eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7\"vK2ZtR4nL1a\"B8cD\"6eF3gH0jS5wY\"xQ\"9mP7vK2Z\"t\"R4n\"L\"1aB8cD6eF3gH0jS\"5wYxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF3gH\"0jS5wYx\"Q9\"mP7vK2Zt\"R\"4nL1a\"B8c\"D6eF3gH0jS\"5wYxQ9m" }, "customerInfo": { "customerId": "P7vK2ZtR4nL", "deviceId": "1aB8cD6eF3gH0jS5wYxQ9", "lineId": "mP7vK2ZtR4nL1a", "publicIp": "B8cD6eF3gH0j" }, "kafka": { "eventId": "S5wYxQ9mP7vK", "moduleId": "2ZtR4nL1a" } } }, { "_source": { "@timestamp": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "eventData": { "__original": "L\"1aB8cD6eF3gH0jS5w\"YxQ9m\"P7vK2ZtR4nL1aB8cD6e\"F3gH0jS\"5wYxQ9mP7vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2Zt\"R4nL1aB8\"cD6eF" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "3gH0jS5w", "moduleId": "YxQ9mP7vK" }, "@Version": "2", "customerInfo": { "customerId": "ZtR4nL1aB8c", "deviceId": "D6eF3gH0jS5wYxQ9mP7vK", "lineId": "2ZtR4nL1aB8cD6", "publicIp": "eF3gH0jS5wYx" } } } ], "pipeline": { "processors": [ { "rename": { "field": "Q9mP7vK2ZtR4nL1aB8cD", "target_field": "6eF3gH0jS5wYxQ" } }, { "lowercase": { "field": "9mP7vK2ZtR4nL1", "target_field": "aB8cD6eF3gH", "ignore_missing": true } }, { "set": { "field": "0jS5wYxQ9mP7", "copy_from": "vK2ZtR4nL1aB8", "ignore_empty_value": true } }, { "set": { "field": "cD6eF3gH0", "copy_from": "jS5wYxQ9mP7vK2ZtR4nL1", "ignore_empty_value": true } }, { "script": { "source": """ aB8 cD6eF3gH0j S 5wYxQ9mP7vK2ZtR4 nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP""", "if": "7vK2ZtR4nL1aB8cD 6e F3gH 0j S5wYxQ9mP7vK2ZtR4nL 1a B8cD" } }, { "script": { "description": "6eF3gH0 jS5wYxQ9 mP 7vK2ZtR4nL1 aB8cD6e F3gH 0jS", "source": "5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "if": "S5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF 3gH0 jS 5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 gH0jS5wYxQ 9mP7vK2" } }, { "set": { "field": "ZtR4nL1aB8cD6e", "copy_from": "F3gH0jS5wYxQ9mP7vK2", "ignore_empty_value": true } }, { "set": { "field": "ZtR4nL1aB8cD6", "copy_from": "eF3gH0jS5wYxQ9mP7vK2Zt", "ignore_empty_value": true } }, { "rename": { "field": "R4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2Zt", "ignore_missing": true } }, { "script": { "source": """ R4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0 jS5wYxQ9mP7v """, "if": "K2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2Zt R4 nL1a" } }, { "rename": { "field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "target_field": "eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF", "target_field": "3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3", "target_field": "gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "ignore_missing": true } }, { "rename": { "field": "eF3gH0jS5wYxQ9mP7v", "target_field": "K2ZtR4nL1aB8cD6eF3gH0jS5w", "ignore_missing": true } }, { "rename": { "field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3g", "target_field": "H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD", "ignore_missing": true } }, { "rename": { "field": "6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a", "target_field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "ignore_missing": true } }, { "rename": { "field": "L1aB8cD6eF3gH0jS5wYxQ9mP7vK", "target_field": "2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9", "ignore_missing": true } }, { "rename": { "field": "mP7vK2ZtR4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "ignore_missing": true } }, { "script": { "description": "S5wYxQ9mP 7vK2ZtR 4nL1aB8 cD6eF 3gH 0jS5wYx Q9mP7vK 2ZtR", "lang": "4nL1aB8c", "source": """ D6 eF3gH0jS5wYxQ9mP7vK2ZtR4nL 1a B8cD6 e F3g H0j S 5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF3gH0jS5w Y xQ9mP7vK2Z tR 4nL1 a B8c D 6eF3gH0jS5w YxQ9mP7vK2ZtR4n L 1 aB8c D6eF3gH0jS5wYxQ9mP7vK 2ZtR 4nL1aB8cD6eF3gH0jS5wY xQ9mP 7vK2ZtR4nL1aB8cD6eF3g H0 jS 5wY xQ9mP7vK2ZtR4n L1 a B8cD6 eF3g H 0j S 5wYxQ9mP 7 vK2ZtR4n L1 aB8c D 6eF 3 gH0jS5wYx Q9mP7vK2ZtR4 n L 1aB8cD6e F3gH0jS5wYxQ9mP7vK2 Z tR4nL 1a B 8c D6 eF3gH0 jS5wYxQ 9m P7vK2ZtR4nL1aB8cD6eF3gH0 jS 5wYxQ 9 mP7 vK2 Z tR4nL1aB8cD6eF3gH0jS5wY xQ9mP7vK2ZtR4nL1a B 8 cD6eF3gH 0jS5wYxQ9m P7vK2Zt R4nL1aB8c D6eF3gH0j S5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3g H 0jS5wYxQ 9mP7vK2Zt R 4nL1aB8cD6eF3g H0jS5w YxQ9mP7vK2ZtR4nL1a B 8cD6eF3gH0jS5w Y xQ9mP7vK2 Z tR 4 nL 1a B8c D6eF3gH 0jS5wYxQ9m P7vK2Z tR 4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK 2Z tR4nL 1 aB8 cD6eF 3g H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD 6 eF 3gH0jS5wYxQ9mP7 vK 2ZtR4nL1aB8c D 6eF3gH0jS5w Y x Q9mP7vK2 ZtR4nL1aB8cD6 eF 3g H 0jS5wYxQ9mP7v K2 ZtR 4nL1aB8 cD6eF3gH0jS5wY xQ 9mP7vK2ZtR 4 nL1aB8cD6 eF3gH0jS5wYxQ9 mP7vK2ZtR4nL1aB 8 cD6eF3gH0 jS5wYxQ9mP7vK2 ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a B8cD6e F 3 g H0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6e F3 gH0jS 5 wYx Q9m P 7vK2ZtR4nL1aB8cD6eF3gH0jS5w YxQ9mP7vK2Z t R4nL1aB8cD6 eF 3gH0 j S5w Y xQ9mP7vK2ZtR 4nL1aB8cD6eF3g H 0jS5wYxQ9 mP7vK2ZtR4nL1aB8cD6 e F 3gH0jS5wYxQ9 mP7vK2ZtR4 nL1aB8cD6eF3g H0jS5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3gH0jS5w YxQ9mP7vK2ZtR4nL1aB8 cD6eF3gH0jS5wYxQ 9m P7 vK2ZtR4nL 1aB8c D6eF 3gH 0jS5wY xQ9mP7vK2ZtR 4n L1aB8cD6eF 3 gH 0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 g H0jS5wYxQ9mP7vK2Zt R 4nL1aB8cD6 e F """ } }, { "uri_parts": { "field": "3gH0jS5wYxQ9", "ignore_missing": true, "ignore_failure": true } }, { "append": { "field": "mP7vK2ZtR4n", "value": [ "L1aB8cD6eF3gH", "0jS5wYxQ9mP7vK2ZtR", "4nL1aB8cD6eF3", "gH0jS5wYxQ9mP7vK2", "ZtR4nL1aB8cD6" ], "allow_duplicates": false } }, { "script": { "description": "eF3gH0 jS5w YxQ9mP", "source": """ 7vK2ZtR 4nL1aB8cD6e F3 g H0 jS 5w YxQ9 mP 7 vK 2Zt R 4nL1aB 8cD6e F 3gH0 jS 5w YxQ9mP7vK2 ZtR4 n L1aB8c D6eF3gH0jS5wYxQ9mP7vK2 Zt R4nL1aB8c D6eF3g H0jS5wY xQ9mP7vK2 Zt R4n L 1aB8 cD 6e F3gH0jS5wY xQ9mP 7 vK2ZtR4 nL1aB8cD6eF3g H0 jS5wYxQ9m P7vK2Z tR4nL1aB 8cD6eF3gH 0j S5w Y xQ9mP7 vK2ZtR 4 nL1aB8cD6e """ } }, { "remove": { "field": [ "F3gH" ], "ignore_missing": true } } ] } } ``` </details> Assisted by Cursor CLI using GPT-5.2-High model --------- Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 4fa1505)
…tic#251173) Closes elastic#251172 ## Summary This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs. ## DEMO (Before / After) https://github.com/user-attachments/assets/54b90fdb-f0b0-4de0-ae53-6fa4a12a98d9 ## Change 1: Console completion avoids full-buffer reads (`kbn-monaco` Console language) **What changed** - The Console completion provider no longer calls `model.getValue()` to compute `textBeforeCursor`. - ES|QL context detection is only attempted when the cursor is within a `POST /_query` (or `POST _query/async`) request. - When it *is* a `_query` request, the provider reads only the relevant slice via `model.getValueInRange()` (from the request line to the cursor). - For all other requests (or when no request line is found within a bounded lookback), completion delegates to the existing actions provider. **Why** - `model.getValue()` materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI. - ES|QL completion only makes sense for `_query` requests; scoping the work avoids paying the cost for non-ES|QL traffic. **Why this approach** - We preserve existing completion behavior by delegating to the actions provider, but avoid the pathological cost by restricting work to a small, semantically relevant window. ## Change 2: ES|QL quote/query detection is linear-time (`checkForTripleQuotesAndEsqlQuery`) **What changed** - `checkForTripleQuotesAndEsqlQuery` was rewritten to scan the text once and avoid repeated substring+regex work inside the main loop. **Why** - The previous approach could become super-linear on adversarial inputs (many quotes / many potential toggles), which is exactly what large JSON payloads tend to contain. - In the worst case, this turns “type one character” into “do a huge amount of CPU work”, producing the freeze. **Why this approach** - A single forward scan preserves semantics while making the runtime scale predictably with input size. ## Change 3: Monaco `onChange` no longer calls `editor.getValue()` per keystroke (`shared-ux` React Monaco editor) **What changed** - The `onDidChangeModelContent` handler computes the next value by applying `event.changes` to a shadow string (`lastKnownValueRef`) instead of calling `editor.getValue()`. - Controlled-mode syncing (`useLayoutEffect`) first compares the incoming `value` against the shadow value to avoid unnecessary full-buffer reads. **Why** - `editor.getValue()` materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models. - Applying incremental changes keeps the per-keystroke cost proportional to the change set, not the document size. **Why this approach** - Monaco already provides the exact edit deltas (`IModelContentChangedEvent.changes`). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads. ## Tests (what they cover and why) - **`language.test.ts`**: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model. - **`autocomplete_utils.test.ts`**: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance). - **`editor.test.tsx`**: verifies the incremental `onChange` value computation (including multi-change ordering) and controlled sync behavior. ## Test plan - `node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.js` - `node scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.js` ### Manual UI verification (DevTools Console) - Open `DevTools -> Console`. - Expand the `<details>` block below and paste the payload into the editor. - Click at the very end of the pasted content and type a few characters. - Verify the editor remains responsive (no multi-second freeze / hang), and typed characters appear immediately. - Optional: place the cursor inside a `""" ... """` block and type to ensure autocomplete remains responsive. <details> <summary>Sanitized reproduction payload (paste into DevTools Console)</summary> ```http POST _ingest/pipeline/_simulate { "docs": [ { "_source": { "@timestamp": "xQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS", "eventData": { "__original": "5\"wYxQ9mP7vK\"2Zt\"R4nL1aB8c\"D\"6eF3gH\"0\"jS5wYxQ9\"mP\"7vK2ZtR4n\"L1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8c\"D6eF3gH\"0jS5wYxQ9m\"P7vK2ZtR4\"nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Z\"tR4nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Zt\"R4nL1a\"B8cD6eF\"3gH0j\"S5wYxQ9\"m\"P7vK2ZtR4nL1aB8c\"D6\"eF3gH\"0jS5w\"YxQ9mP7v\"K2Z\"tR4\"n\"L1aB8\"c\"D6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B8cD\"6eF3gH0jS5\"wYxQ9mP\"7vK2ZtR4nL\"1aB8cD6\"eF3g\"H0jS5\"wYxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3g\"H\"0jS5wYx\"Q9mP7v\"K2ZtR4n\"L1aB8c\"D6eF3gH\"0\"jS5wYxQ9mP7vK2Z\"t\"R4nL1aB8cD\"6eF3gH\"0jS5wYxQ9mP7v\"K2ZtR4n\"L1aB\"8\"cD6eF\"3\"gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8cD\"6\"eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"n\"L1aB8cD6e\"F3g\"H0jS5wYxQ9mP7vK2ZtR\"4nL1aB8cD\"6eF3gH0jS\"5w\"YxQ9mP7v\"K2ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wY\"xQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4n\"L1aB8\"cD6eF\"3gH\"0jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB8\"cD6eF\"3gH0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1a\"B8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP\"7vK2Z\"tR4nL\"1aB\"8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4nL\"1aB8c\"D6eF3\"gH0\"jS5wYx\"Q9mP7\"vK2ZtR\"4nL1aB8cD\"6\"eF3gH0jS5wYxQ\"9\"mP7vK2ZtR\"4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9mP7v\"K2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1\"aB8cD\"6eF3gH\"0jS5wY\"xQ9mP7\"vK2ZtR4nL\"1aB8c\"D6eF3gH\"0jS\"5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4\"nL\\1a\\\"\\B8cD6\"e\"F3gH\"0jS\"5wYxQ9mP7\"vK2Zt\"R4nL1aB8c\"D6eF3\"gH0jS5wYxQ\"9mP7vK2\"ZtR4nL1aB8\"cD6eF3g\"H0jS\"5wYxQ\"9mP7\"v\"K2ZtR4nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1aB\"8cD6eF3\"g\"H0jS5wYxQ9mP7vK\"2\"ZtR4nL1aB8\"cD6eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL1\"a\"B8cD6e\"F\"3gH0jS5w\"Y\"xQ9mP7vK2ZtR4nL1aB8c\"D\"6eF3gH0jS5\"w\"YxQ9mP7vK2ZtR\"4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7vK2Zt\"R4nL1aB8c\"D6eF3gH0j\"S5\"wYxQ9mP7\"vK2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5w\"YxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL1\"aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5w\"YxQ9m\"P7vK2Z\"tR4nL1aB8\"c\"D6eF3gH0jS5wY\"x\"Q9mP7vK2Z\"tR\"4nL1aB8c\"D6eF3\"gH0jS5wYxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3\"gH0jS\"5wYxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4\"nL1aB\"8cD6eF\"3gH0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5wYxQ9m\"P7v\"K2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B\"8cD6eF\"3\"gH0j\"S5w\"YxQ9mP7vK\"2ZtR4\"nL1aB8cD6\"eF3gH0j\"S5wYxQ9mP7\"vK2ZtR4\"nL1aB8cD6e\"F3gH0jS\"5wYx\"Q9mP7\"vK2Z\"t\"R4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR4nL1a\"B8cD6eF\"3gH0jS5wYx\"Q9mP7vK\"2\"ZtR4nL1aB8cD6eF\"3\"gH0jS5wYxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5w\"Y\"xQ9mP\"7\"vK2ZtR4n\"L\"1aB8cD6eF3gH0jS5wYxQ\"9\"mP7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7v\"K2ZtR4nL1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2Zt\"R4\"nL1aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5wY\"xQ9\"mP7vK\"2ZtR4\"nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS5\"wYxQ9\"mP7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0j\"S5w\"YxQ9m\"P7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4n\"L1aB8\"cD6eF3\"gH0jS5wYx\"Q\"9mP7vK2ZtR4nL\"1\"aB8cD6eF3\"gH\"0jS5wYxQ\"9mP7v\"K2ZtR4nL1aB8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0j\"S5wYx\"Q9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR\"4nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL\"1aB8cD6eF\"3gH\"0\"jS5wYx\"Q\"9mP7\"vK2\"ZtR4nL1aB\"8cD6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4n\"L1aB8cD6\"eF3gH0jS5w\"YxQ9mP7\"vK2Z\"tR4nL\"1aB8\"c\"D6eF3gH0jS5wYxQ9mP7vK2ZtR\"4\"nL1aB8c\"D6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR4nL1\"a\"B8cD6eF3gH0jS5w\"Y\"xQ9mP7vK2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9m\"P7vK\"2\"ZtR4n\"L\"1aB8cD6e\"F\"3gH0jS5wYxQ9mP7vK2Zt\"R\"4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"m\"P7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7vK2Zt\"R4nL1aB8c\"D6\"eF3gH0jS\"5wYxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF\"3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH\"0jS\"5wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8cD6eF3gH0jS5w\"YxQ\"9mP\"7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1a\"B8cD6\"eF3gH\"0jS\"5wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD6\"eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F\"3gH0jS5wY\"xQ\"9mP7vK2Z\"tR4nL\"1aB8cD6eF3gH0\"jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9m\"P7vK2\"ZtR4nL\"1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF3gH0j\"S5w\"YxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5\"wYxQ9mP7v\"K2ZtR4n\"L1\"aB8cD6e\"F3gH\"0jS5wYxQ9\"m\"P7vK2ZtR4nL\"1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4\"nL1aB\"8cD\"6eF3g\"H0j\"S5wYxQ9\"mP7v\"K2ZtR4nL\"1aB8c\"D6eF3gH0jS\"5wY\"xQ9mP7vK2Z\"tR4n\"L1aB8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5\"wYxQ9mP\"7\"vK2ZtR4nL1aB8cD6\"e\"F3gH0jS5wYxQ9mP7\"vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS5\"wYxQ9mP7vK2ZtR4\"nL1a\"B8cD6eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1\"a\"B8cD6eF3\"gH\"0jS5wYxQ9\"mP7vK2Z\"tR4nL1a\"B8cD6eF3gH\"0jS5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1\"aB8cD6eF\"3gH0j\"S5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6\"eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL\"1aB8c\"D6eF3\"gH0jS5wY\"xQ9\"mP7\"v\"K2ZtR4\"n\"L1aB\"8cD\"6eF3gH0jS\"5wYxQ\"9mP7vK2Zt\"R4nL1a\"B8cD6eF3gH\"0jS5wYxQ\"9mP7vK2ZtR\"4nL1aB8c\"D6eF\"3gH0j\"S5wY\"x\"Q9mP7vK2Zt\"R\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4nL1aB\"8\"cD6eF3gH0jS5wYx\"Q\"9mP7vK2ZtR\"4nL1aB\"8cD6eF3gH0jS5\"wYxQ9mP7\"vK2Z\"t\"R4nL1a\"B\"8cD6eF3g\"H\"0jS5wYxQ9mP7vK2ZtR4n\"L\"1aB8cD6eF3\"g\"H0jS5wYxQ9mP7\"v\"K2ZtR4nL1\"aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3\"gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8c\"D6e\"F3g\"H0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4nL\"1aB\"8cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Zt\"R4nL1\"aB8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2\"ZtR\"4nL1a\"B8cD6\"eF3\"gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3g\"H0jS5\"wYxQ9m\"P7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7\"vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5w\"YxQ\"9mP\"7vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2\"ZtR4n\"L1aB8c\"D6eF3g\"H0jS5wY\"xQ9mP7vK2\"ZtR4nL\"1aB8cD6\"eF3\"gH0jS5wYxQ\"9mP\"7vK\"2ZtR4n\"L1aB8cD6eF3gH\"0jS5wYxQ\"9mP\"7vK2ZtR4n\"L1aB8cD\"6e\"F3gH0jS\"5wYx\"Q9mP7vK2Z\"t\"R4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB\"8c\"D6eF3\"gH0\"jS5wY\"xQ9\"mP7vK2Z\"tR4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9m\"P7v\"K2ZtR4nL1a\"B8cD\"6eF3gH0jS5wYxQ9m\"P7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2ZtR\"4\"nL1aB8cD6eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL1\"aB8\"cD6e\"F3gH0\"jS5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF\"3gH0jS5wYx\"Q9mP7v\"K2ZtR4nL1\"a\"B8cD6eF3gH0jS\"5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL1\"aB8\"cD6eF3gH0\"j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6e\"F\"3gH0jS5wYxQ9mP7\"vK2\"ZtR4nL1aB\"8\"cD6eF3gH\"0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1aB8cD\"6eF\"3gH0jS\"5w\"YxQ9\"mP7vK2ZtR4n\"L1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8\"c\"D6eF3g\"H0jS5wYxQ9\"mP7vK\"2ZtR4nL1aB8\"cD6eF3gH0jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8cD6\"eF3gH0jS5wYx\"Q9mP7vK2ZtR\"4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3gH0jS5\"wYxQ9mP7v\"K2ZtR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR4nL1a\"B8cD6eF3g\"H0jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL1\"a\"B8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6eF3\"gH0\"jS5wYxQ\"9mP\"7vK2ZtR4n\"L1a\"B8cD6eF3\"gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1aB\"8\"cD6eF\"3\"gH0jS5w\"YxQ9mP7v\"K2ZtR4nL1\"aB8cD6\"eF3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wYxQ9mP7vK\"2ZtR\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9mP\"7vK2ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4\"n\"L1aB8c\"D\"6eF3gH0\"jS5wYxQ9\"mP7vK2ZtR\"4nL1aB\"8cD6eF3g\"H0j\"S5wYxQ9mP\"7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0jS5wYxQ9m\"P7v\"K2ZtR4n\"L1aB8cD6\"eF3gH0jS5\"wYxQ9m\"P7vK2ZtR\"4nL\"1aB8cD6eF\"3gH0j\"S5wYxQ9mP\"7\"vK2ZtR\"4\"nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD\"6eF\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9mP\"7vK2ZtR4n\"L\"1aB8cD6\"e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6eF3gH0jS5\"wYx\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6e\"F\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR\"4nL1aB8cD\"6eF\"3gH0jS5w\"YxQ\"9mP7vK2Zt\"R4nL1\"aB8cD6eF3\"g\"H0jS5w\"Y\"xQ9mP7v\"K2ZtR4nL\"1aB8cD6eF\"3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8c\"D6eF3gH0jS5wYxQ\"9mP\"7vK2ZtR4nL1\"aB8\"cD6eF3g\"H0jS5wYx\"Q9mP7vK2Z\"tR4nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4nL\"1a\"B8cD6eF3gH0\"jS5w\"YxQ9mP7vK\"2\"ZtR4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6eF\"3\"gH0jS5w\"YxQ\"9mP7vK2Zt\"R4n\"L1aB8cD6\"eF3\"gH0jS5wYx\"Q9m\"P7vK2ZtR4nL1aB8\"cD6\"eF3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wY\"xQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF3g\"H\"0jS5wY\"x\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD6eF3gH0\"jS5\"wYxQ9mP7vK2\"ZtR\"4nL1aB8\"cD6\"eF3gH0jS5\"wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD\"6eF3g\"H0jS5wYxQ\"9\"mP7vK2Z\"t\"R4nL1aB\"8cD\"6eF3gH0jS\"5wY\"xQ9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5wYxQ9mP\"7vK\"2ZtR4nL1aB8\"cD6\"eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8\"cD6\"eF3gH0jS5\"wYxQ9\"mP7vK2ZtR\"4\"nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9mP\"7vK2ZtR4n\"L1aB8c\"D6eF3gH0\"jS5\"wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6eF3\"gH0\"jS5wYxQ9mP7\"vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP\"7v\"K2ZtR4nL1aB8c\"D6eF\"3gH0jS5wY\"x\"Q9mP7\"v\"K2ZtR4n\"L1aB8cD6eF\"3gH0jS5wY\"xQ9mP7v\"K2ZtR4nL\"1aB\"8cD6eF3gH\"0jS\"5wYxQ9mP7vK2ZtR\"4nL\"1aB8cD6eF3g\"H0jS5\"wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8cD6\"eF3gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8\"cD\"6eF3g\"H0jS5\"wYxQ9mP7vK2\"ZtR4n\"L1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2\"Zt\"R4nL1\"aB8cD6e\"F3gH0j\"S5wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD6eF\"3gH0\"jS5wYxQ9\"mP\"7vK2ZtR4\"nL1aB\"8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB\"8cD\"6eF3gH0jS\"5wYx" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "Q9mP7vK2ZtR4nL1aB8cD6", "moduleId": "eF3gH0jS5wY" }, "customerInfo": { "customerId": "xQ9mP7vK2Zt", "deviceId": "R4nL1aB8cD6eF3gH0jS5w", "lineId": "YxQ9mP7vK2ZtR4", "publicIp": "nL1aB8cD6eF3" } } }, { "_index": "gH0jS5wYxQ9mP7vK2Zt", "_source": { "kafka": { "eventId": "R4nL1aB8cD6e", "moduleId": "F3gH0jS5w" }, "customerInfo": { "customerId": "YxQ9mP7vK2Z", "deviceId": "tR4nL1aB8cD6eF3gH0jS5", "lineId": "wYxQ9mP7vK2ZtR", "publicIp": "4nL1aB8cD6eF" }, "eventData": { "__original": "3\"gH0jS5w\"Yx\"Q9m\"P\"7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2\"Z\"tR4nL1aB 8cD6eF 3g H0jS5wYx\"Q\"9mP7vK2ZtR4nL1aB8c\"D6eF3\"gH0jS5wY\"xQ9mP7\"vK2ZtR\"4nL1aB8\"cD6eF3gH0jS5wYxQ9mP7vK\"2ZtR\"4nL1aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2ZtR4n\"L1aB8cD\"6eF3gH\"0\"jS5wYxQ\"9\"mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0\"j\"S5wYxQ9\"m\"P7vK2ZtR4nL1\"a\"B8cD6eF3g\"H\"0jS5wYxQ9mP7\"v\"K2ZtR4n\"L\"1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2ZtR4nL1aB\"8cD6e\"F3gH0jS5wYx\"Q9mP7\"vK2ZtR4nL1\"aB8cD6" } } }, { "_source": { "eventData": { "__original": "e\"F3gH0jS\"5w\"YxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR\"4nL1aB8cD6eF3g\"H0j\"S5wYxQ9m\"P7v\"K2ZtR\"4\"nL1aB8cD 6eF3gH 0j S5wYxQ9mP7v K\"2\"ZtR4nL1aB8cD6eF3gH\"0jS5w\"YxQ9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3g\"H0jS5wYxQ9mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB8cD\"6eF3gH0\"jS5wYx\"Q\"9mP7vK2\"Z\"tR4nL1aB8cD6\"eF3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL\"1\"aB8cD6eF3gH0\"j\"S5wYxQ9mP\"7\"vK2ZtR4nL1aB\"8\"cD6eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7\"vK2ZtR4nL1a\"B8cD\"6eF3gH0jS5wY\"xQ\"9mP7vK2Z\"t\"R4n\"L\"1aB8cD6eF3gH0jS\"5wYxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF3gH\"0jS5wYx\"Q9\"mP7vK2Zt\"R\"4nL1a\"B8c\"D6eF3gH0jS\"5wYxQ9m" }, "customerInfo": { "customerId": "P7vK2ZtR4nL", "deviceId": "1aB8cD6eF3gH0jS5wYxQ9", "lineId": "mP7vK2ZtR4nL1a", "publicIp": "B8cD6eF3gH0j" }, "kafka": { "eventId": "S5wYxQ9mP7vK", "moduleId": "2ZtR4nL1a" } } }, { "_source": { "@timestamp": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "eventData": { "__original": "L\"1aB8cD6eF3gH0jS5w\"YxQ9m\"P7vK2ZtR4nL1aB8cD6e\"F3gH0jS\"5wYxQ9mP7vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2Zt\"R4nL1aB8\"cD6eF" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "3gH0jS5w", "moduleId": "YxQ9mP7vK" }, "@Version": "2", "customerInfo": { "customerId": "ZtR4nL1aB8c", "deviceId": "D6eF3gH0jS5wYxQ9mP7vK", "lineId": "2ZtR4nL1aB8cD6", "publicIp": "eF3gH0jS5wYx" } } } ], "pipeline": { "processors": [ { "rename": { "field": "Q9mP7vK2ZtR4nL1aB8cD", "target_field": "6eF3gH0jS5wYxQ" } }, { "lowercase": { "field": "9mP7vK2ZtR4nL1", "target_field": "aB8cD6eF3gH", "ignore_missing": true } }, { "set": { "field": "0jS5wYxQ9mP7", "copy_from": "vK2ZtR4nL1aB8", "ignore_empty_value": true } }, { "set": { "field": "cD6eF3gH0", "copy_from": "jS5wYxQ9mP7vK2ZtR4nL1", "ignore_empty_value": true } }, { "script": { "source": """ aB8 cD6eF3gH0j S 5wYxQ9mP7vK2ZtR4 nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP""", "if": "7vK2ZtR4nL1aB8cD 6e F3gH 0j S5wYxQ9mP7vK2ZtR4nL 1a B8cD" } }, { "script": { "description": "6eF3gH0 jS5wYxQ9 mP 7vK2ZtR4nL1 aB8cD6e F3gH 0jS", "source": "5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "if": "S5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF 3gH0 jS 5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 gH0jS5wYxQ 9mP7vK2" } }, { "set": { "field": "ZtR4nL1aB8cD6e", "copy_from": "F3gH0jS5wYxQ9mP7vK2", "ignore_empty_value": true } }, { "set": { "field": "ZtR4nL1aB8cD6", "copy_from": "eF3gH0jS5wYxQ9mP7vK2Zt", "ignore_empty_value": true } }, { "rename": { "field": "R4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2Zt", "ignore_missing": true } }, { "script": { "source": """ R4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0 jS5wYxQ9mP7v """, "if": "K2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2Zt R4 nL1a" } }, { "rename": { "field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "target_field": "eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF", "target_field": "3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3", "target_field": "gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "ignore_missing": true } }, { "rename": { "field": "eF3gH0jS5wYxQ9mP7v", "target_field": "K2ZtR4nL1aB8cD6eF3gH0jS5w", "ignore_missing": true } }, { "rename": { "field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3g", "target_field": "H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD", "ignore_missing": true } }, { "rename": { "field": "6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a", "target_field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "ignore_missing": true } }, { "rename": { "field": "L1aB8cD6eF3gH0jS5wYxQ9mP7vK", "target_field": "2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9", "ignore_missing": true } }, { "rename": { "field": "mP7vK2ZtR4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "ignore_missing": true } }, { "script": { "description": "S5wYxQ9mP 7vK2ZtR 4nL1aB8 cD6eF 3gH 0jS5wYx Q9mP7vK 2ZtR", "lang": "4nL1aB8c", "source": """ D6 eF3gH0jS5wYxQ9mP7vK2ZtR4nL 1a B8cD6 e F3g H0j S 5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF3gH0jS5w Y xQ9mP7vK2Z tR 4nL1 a B8c D 6eF3gH0jS5w YxQ9mP7vK2ZtR4n L 1 aB8c D6eF3gH0jS5wYxQ9mP7vK 2ZtR 4nL1aB8cD6eF3gH0jS5wY xQ9mP 7vK2ZtR4nL1aB8cD6eF3g H0 jS 5wY xQ9mP7vK2ZtR4n L1 a B8cD6 eF3g H 0j S 5wYxQ9mP 7 vK2ZtR4n L1 aB8c D 6eF 3 gH0jS5wYx Q9mP7vK2ZtR4 n L 1aB8cD6e F3gH0jS5wYxQ9mP7vK2 Z tR4nL 1a B 8c D6 eF3gH0 jS5wYxQ 9m P7vK2ZtR4nL1aB8cD6eF3gH0 jS 5wYxQ 9 mP7 vK2 Z tR4nL1aB8cD6eF3gH0jS5wY xQ9mP7vK2ZtR4nL1a B 8 cD6eF3gH 0jS5wYxQ9m P7vK2Zt R4nL1aB8c D6eF3gH0j S5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3g H 0jS5wYxQ 9mP7vK2Zt R 4nL1aB8cD6eF3g H0jS5w YxQ9mP7vK2ZtR4nL1a B 8cD6eF3gH0jS5w Y xQ9mP7vK2 Z tR 4 nL 1a B8c D6eF3gH 0jS5wYxQ9m P7vK2Z tR 4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK 2Z tR4nL 1 aB8 cD6eF 3g H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD 6 eF 3gH0jS5wYxQ9mP7 vK 2ZtR4nL1aB8c D 6eF3gH0jS5w Y x Q9mP7vK2 ZtR4nL1aB8cD6 eF 3g H 0jS5wYxQ9mP7v K2 ZtR 4nL1aB8 cD6eF3gH0jS5wY xQ 9mP7vK2ZtR 4 nL1aB8cD6 eF3gH0jS5wYxQ9 mP7vK2ZtR4nL1aB 8 cD6eF3gH0 jS5wYxQ9mP7vK2 ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a B8cD6e F 3 g H0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6e F3 gH0jS 5 wYx Q9m P 7vK2ZtR4nL1aB8cD6eF3gH0jS5w YxQ9mP7vK2Z t R4nL1aB8cD6 eF 3gH0 j S5w Y xQ9mP7vK2ZtR 4nL1aB8cD6eF3g H 0jS5wYxQ9 mP7vK2ZtR4nL1aB8cD6 e F 3gH0jS5wYxQ9 mP7vK2ZtR4 nL1aB8cD6eF3g H0jS5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3gH0jS5w YxQ9mP7vK2ZtR4nL1aB8 cD6eF3gH0jS5wYxQ 9m P7 vK2ZtR4nL 1aB8c D6eF 3gH 0jS5wY xQ9mP7vK2ZtR 4n L1aB8cD6eF 3 gH 0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 g H0jS5wYxQ9mP7vK2Zt R 4nL1aB8cD6 e F """ } }, { "uri_parts": { "field": "3gH0jS5wYxQ9", "ignore_missing": true, "ignore_failure": true } }, { "append": { "field": "mP7vK2ZtR4n", "value": [ "L1aB8cD6eF3gH", "0jS5wYxQ9mP7vK2ZtR", "4nL1aB8cD6eF3", "gH0jS5wYxQ9mP7vK2", "ZtR4nL1aB8cD6" ], "allow_duplicates": false } }, { "script": { "description": "eF3gH0 jS5w YxQ9mP", "source": """ 7vK2ZtR 4nL1aB8cD6e F3 g H0 jS 5w YxQ9 mP 7 vK 2Zt R 4nL1aB 8cD6e F 3gH0 jS 5w YxQ9mP7vK2 ZtR4 n L1aB8c D6eF3gH0jS5wYxQ9mP7vK2 Zt R4nL1aB8c D6eF3g H0jS5wY xQ9mP7vK2 Zt R4n L 1aB8 cD 6e F3gH0jS5wY xQ9mP 7 vK2ZtR4 nL1aB8cD6eF3g H0 jS5wYxQ9m P7vK2Z tR4nL1aB 8cD6eF3gH 0j S5w Y xQ9mP7 vK2ZtR 4 nL1aB8cD6e """ } }, { "remove": { "field": [ "F3gH" ], "ignore_missing": true } } ] } } ``` </details> Assisted by Cursor CLI using GPT-5.2-High model --------- Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 4fa1505)
…tic#251173) Closes elastic#251172 ## Summary This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs. ## DEMO (Before / After) https://github.com/user-attachments/assets/54b90fdb-f0b0-4de0-ae53-6fa4a12a98d9 ## Change 1: Console completion avoids full-buffer reads (`kbn-monaco` Console language) **What changed** - The Console completion provider no longer calls `model.getValue()` to compute `textBeforeCursor`. - ES|QL context detection is only attempted when the cursor is within a `POST /_query` (or `POST _query/async`) request. - When it *is* a `_query` request, the provider reads only the relevant slice via `model.getValueInRange()` (from the request line to the cursor). - For all other requests (or when no request line is found within a bounded lookback), completion delegates to the existing actions provider. **Why** - `model.getValue()` materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI. - ES|QL completion only makes sense for `_query` requests; scoping the work avoids paying the cost for non-ES|QL traffic. **Why this approach** - We preserve existing completion behavior by delegating to the actions provider, but avoid the pathological cost by restricting work to a small, semantically relevant window. ## Change 2: ES|QL quote/query detection is linear-time (`checkForTripleQuotesAndEsqlQuery`) **What changed** - `checkForTripleQuotesAndEsqlQuery` was rewritten to scan the text once and avoid repeated substring+regex work inside the main loop. **Why** - The previous approach could become super-linear on adversarial inputs (many quotes / many potential toggles), which is exactly what large JSON payloads tend to contain. - In the worst case, this turns “type one character” into “do a huge amount of CPU work”, producing the freeze. **Why this approach** - A single forward scan preserves semantics while making the runtime scale predictably with input size. ## Change 3: Monaco `onChange` no longer calls `editor.getValue()` per keystroke (`shared-ux` React Monaco editor) **What changed** - The `onDidChangeModelContent` handler computes the next value by applying `event.changes` to a shadow string (`lastKnownValueRef`) instead of calling `editor.getValue()`. - Controlled-mode syncing (`useLayoutEffect`) first compares the incoming `value` against the shadow value to avoid unnecessary full-buffer reads. **Why** - `editor.getValue()` materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models. - Applying incremental changes keeps the per-keystroke cost proportional to the change set, not the document size. **Why this approach** - Monaco already provides the exact edit deltas (`IModelContentChangedEvent.changes`). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads. ## Tests (what they cover and why) - **`language.test.ts`**: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model. - **`autocomplete_utils.test.ts`**: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance). - **`editor.test.tsx`**: verifies the incremental `onChange` value computation (including multi-change ordering) and controlled sync behavior. ## Test plan - `node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.js` - `node scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.js` ### Manual UI verification (DevTools Console) - Open `DevTools -> Console`. - Expand the `<details>` block below and paste the payload into the editor. - Click at the very end of the pasted content and type a few characters. - Verify the editor remains responsive (no multi-second freeze / hang), and typed characters appear immediately. - Optional: place the cursor inside a `""" ... """` block and type to ensure autocomplete remains responsive. <details> <summary>Sanitized reproduction payload (paste into DevTools Console)</summary> ```http POST _ingest/pipeline/_simulate { "docs": [ { "_source": { "@timestamp": "xQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS", "eventData": { "__original": "5\"wYxQ9mP7vK\"2Zt\"R4nL1aB8c\"D\"6eF3gH\"0\"jS5wYxQ9\"mP\"7vK2ZtR4n\"L1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8c\"D6eF3gH\"0jS5wYxQ9m\"P7vK2ZtR4\"nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Z\"tR4nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Zt\"R4nL1a\"B8cD6eF\"3gH0j\"S5wYxQ9\"m\"P7vK2ZtR4nL1aB8c\"D6\"eF3gH\"0jS5w\"YxQ9mP7v\"K2Z\"tR4\"n\"L1aB8\"c\"D6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B8cD\"6eF3gH0jS5\"wYxQ9mP\"7vK2ZtR4nL\"1aB8cD6\"eF3g\"H0jS5\"wYxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3g\"H\"0jS5wYx\"Q9mP7v\"K2ZtR4n\"L1aB8c\"D6eF3gH\"0\"jS5wYxQ9mP7vK2Z\"t\"R4nL1aB8cD\"6eF3gH\"0jS5wYxQ9mP7v\"K2ZtR4n\"L1aB\"8\"cD6eF\"3\"gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8cD\"6\"eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"n\"L1aB8cD6e\"F3g\"H0jS5wYxQ9mP7vK2ZtR\"4nL1aB8cD\"6eF3gH0jS\"5w\"YxQ9mP7v\"K2ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wY\"xQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4n\"L1aB8\"cD6eF\"3gH\"0jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB8\"cD6eF\"3gH0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1a\"B8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP\"7vK2Z\"tR4nL\"1aB\"8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4nL\"1aB8c\"D6eF3\"gH0\"jS5wYx\"Q9mP7\"vK2ZtR\"4nL1aB8cD\"6\"eF3gH0jS5wYxQ\"9\"mP7vK2ZtR\"4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9mP7v\"K2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1\"aB8cD\"6eF3gH\"0jS5wY\"xQ9mP7\"vK2ZtR4nL\"1aB8c\"D6eF3gH\"0jS\"5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4\"nL\\1a\\\"\\B8cD6\"e\"F3gH\"0jS\"5wYxQ9mP7\"vK2Zt\"R4nL1aB8c\"D6eF3\"gH0jS5wYxQ\"9mP7vK2\"ZtR4nL1aB8\"cD6eF3g\"H0jS\"5wYxQ\"9mP7\"v\"K2ZtR4nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1aB\"8cD6eF3\"g\"H0jS5wYxQ9mP7vK\"2\"ZtR4nL1aB8\"cD6eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL1\"a\"B8cD6e\"F\"3gH0jS5w\"Y\"xQ9mP7vK2ZtR4nL1aB8c\"D\"6eF3gH0jS5\"w\"YxQ9mP7vK2ZtR\"4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7vK2Zt\"R4nL1aB8c\"D6eF3gH0j\"S5\"wYxQ9mP7\"vK2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5w\"YxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL1\"aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5w\"YxQ9m\"P7vK2Z\"tR4nL1aB8\"c\"D6eF3gH0jS5wY\"x\"Q9mP7vK2Z\"tR\"4nL1aB8c\"D6eF3\"gH0jS5wYxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3\"gH0jS\"5wYxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4\"nL1aB\"8cD6eF\"3gH0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5wYxQ9m\"P7v\"K2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B\"8cD6eF\"3\"gH0j\"S5w\"YxQ9mP7vK\"2ZtR4\"nL1aB8cD6\"eF3gH0j\"S5wYxQ9mP7\"vK2ZtR4\"nL1aB8cD6e\"F3gH0jS\"5wYx\"Q9mP7\"vK2Z\"t\"R4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR4nL1a\"B8cD6eF\"3gH0jS5wYx\"Q9mP7vK\"2\"ZtR4nL1aB8cD6eF\"3\"gH0jS5wYxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5w\"Y\"xQ9mP\"7\"vK2ZtR4n\"L\"1aB8cD6eF3gH0jS5wYxQ\"9\"mP7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7v\"K2ZtR4nL1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2Zt\"R4\"nL1aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5wY\"xQ9\"mP7vK\"2ZtR4\"nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS5\"wYxQ9\"mP7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0j\"S5w\"YxQ9m\"P7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4n\"L1aB8\"cD6eF3\"gH0jS5wYx\"Q\"9mP7vK2ZtR4nL\"1\"aB8cD6eF3\"gH\"0jS5wYxQ\"9mP7v\"K2ZtR4nL1aB8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0j\"S5wYx\"Q9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR\"4nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL\"1aB8cD6eF\"3gH\"0\"jS5wYx\"Q\"9mP7\"vK2\"ZtR4nL1aB\"8cD6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4n\"L1aB8cD6\"eF3gH0jS5w\"YxQ9mP7\"vK2Z\"tR4nL\"1aB8\"c\"D6eF3gH0jS5wYxQ9mP7vK2ZtR\"4\"nL1aB8c\"D6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR4nL1\"a\"B8cD6eF3gH0jS5w\"Y\"xQ9mP7vK2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9m\"P7vK\"2\"ZtR4n\"L\"1aB8cD6e\"F\"3gH0jS5wYxQ9mP7vK2Zt\"R\"4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"m\"P7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7vK2Zt\"R4nL1aB8c\"D6\"eF3gH0jS\"5wYxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF\"3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH\"0jS\"5wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8cD6eF3gH0jS5w\"YxQ\"9mP\"7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1a\"B8cD6\"eF3gH\"0jS\"5wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD6\"eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F\"3gH0jS5wY\"xQ\"9mP7vK2Z\"tR4nL\"1aB8cD6eF3gH0\"jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9m\"P7vK2\"ZtR4nL\"1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF3gH0j\"S5w\"YxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5\"wYxQ9mP7v\"K2ZtR4n\"L1\"aB8cD6e\"F3gH\"0jS5wYxQ9\"m\"P7vK2ZtR4nL\"1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4\"nL1aB\"8cD\"6eF3g\"H0j\"S5wYxQ9\"mP7v\"K2ZtR4nL\"1aB8c\"D6eF3gH0jS\"5wY\"xQ9mP7vK2Z\"tR4n\"L1aB8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5\"wYxQ9mP\"7\"vK2ZtR4nL1aB8cD6\"e\"F3gH0jS5wYxQ9mP7\"vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS5\"wYxQ9mP7vK2ZtR4\"nL1a\"B8cD6eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1\"a\"B8cD6eF3\"gH\"0jS5wYxQ9\"mP7vK2Z\"tR4nL1a\"B8cD6eF3gH\"0jS5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1\"aB8cD6eF\"3gH0j\"S5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6\"eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL\"1aB8c\"D6eF3\"gH0jS5wY\"xQ9\"mP7\"v\"K2ZtR4\"n\"L1aB\"8cD\"6eF3gH0jS\"5wYxQ\"9mP7vK2Zt\"R4nL1a\"B8cD6eF3gH\"0jS5wYxQ\"9mP7vK2ZtR\"4nL1aB8c\"D6eF\"3gH0j\"S5wY\"x\"Q9mP7vK2Zt\"R\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4nL1aB\"8\"cD6eF3gH0jS5wYx\"Q\"9mP7vK2ZtR\"4nL1aB\"8cD6eF3gH0jS5\"wYxQ9mP7\"vK2Z\"t\"R4nL1a\"B\"8cD6eF3g\"H\"0jS5wYxQ9mP7vK2ZtR4n\"L\"1aB8cD6eF3\"g\"H0jS5wYxQ9mP7\"v\"K2ZtR4nL1\"aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3\"gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8c\"D6e\"F3g\"H0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4nL\"1aB\"8cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Zt\"R4nL1\"aB8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2\"ZtR\"4nL1a\"B8cD6\"eF3\"gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3g\"H0jS5\"wYxQ9m\"P7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7\"vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5w\"YxQ\"9mP\"7vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2\"ZtR4n\"L1aB8c\"D6eF3g\"H0jS5wY\"xQ9mP7vK2\"ZtR4nL\"1aB8cD6\"eF3\"gH0jS5wYxQ\"9mP\"7vK\"2ZtR4n\"L1aB8cD6eF3gH\"0jS5wYxQ\"9mP\"7vK2ZtR4n\"L1aB8cD\"6e\"F3gH0jS\"5wYx\"Q9mP7vK2Z\"t\"R4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB\"8c\"D6eF3\"gH0\"jS5wY\"xQ9\"mP7vK2Z\"tR4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9m\"P7v\"K2ZtR4nL1a\"B8cD\"6eF3gH0jS5wYxQ9m\"P7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2ZtR\"4\"nL1aB8cD6eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL1\"aB8\"cD6e\"F3gH0\"jS5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF\"3gH0jS5wYx\"Q9mP7v\"K2ZtR4nL1\"a\"B8cD6eF3gH0jS\"5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL1\"aB8\"cD6eF3gH0\"j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6e\"F\"3gH0jS5wYxQ9mP7\"vK2\"ZtR4nL1aB\"8\"cD6eF3gH\"0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1aB8cD\"6eF\"3gH0jS\"5w\"YxQ9\"mP7vK2ZtR4n\"L1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8\"c\"D6eF3g\"H0jS5wYxQ9\"mP7vK\"2ZtR4nL1aB8\"cD6eF3gH0jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8cD6\"eF3gH0jS5wYx\"Q9mP7vK2ZtR\"4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3gH0jS5\"wYxQ9mP7v\"K2ZtR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR4nL1a\"B8cD6eF3g\"H0jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL1\"a\"B8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6eF3\"gH0\"jS5wYxQ\"9mP\"7vK2ZtR4n\"L1a\"B8cD6eF3\"gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1aB\"8\"cD6eF\"3\"gH0jS5w\"YxQ9mP7v\"K2ZtR4nL1\"aB8cD6\"eF3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wYxQ9mP7vK\"2ZtR\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9mP\"7vK2ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4\"n\"L1aB8c\"D\"6eF3gH0\"jS5wYxQ9\"mP7vK2ZtR\"4nL1aB\"8cD6eF3g\"H0j\"S5wYxQ9mP\"7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0jS5wYxQ9m\"P7v\"K2ZtR4n\"L1aB8cD6\"eF3gH0jS5\"wYxQ9m\"P7vK2ZtR\"4nL\"1aB8cD6eF\"3gH0j\"S5wYxQ9mP\"7\"vK2ZtR\"4\"nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD\"6eF\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9mP\"7vK2ZtR4n\"L\"1aB8cD6\"e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6eF3gH0jS5\"wYx\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6e\"F\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR\"4nL1aB8cD\"6eF\"3gH0jS5w\"YxQ\"9mP7vK2Zt\"R4nL1\"aB8cD6eF3\"g\"H0jS5w\"Y\"xQ9mP7v\"K2ZtR4nL\"1aB8cD6eF\"3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8c\"D6eF3gH0jS5wYxQ\"9mP\"7vK2ZtR4nL1\"aB8\"cD6eF3g\"H0jS5wYx\"Q9mP7vK2Z\"tR4nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4nL\"1a\"B8cD6eF3gH0\"jS5w\"YxQ9mP7vK\"2\"ZtR4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6eF\"3\"gH0jS5w\"YxQ\"9mP7vK2Zt\"R4n\"L1aB8cD6\"eF3\"gH0jS5wYx\"Q9m\"P7vK2ZtR4nL1aB8\"cD6\"eF3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wY\"xQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF3g\"H\"0jS5wY\"x\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD6eF3gH0\"jS5\"wYxQ9mP7vK2\"ZtR\"4nL1aB8\"cD6\"eF3gH0jS5\"wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD\"6eF3g\"H0jS5wYxQ\"9\"mP7vK2Z\"t\"R4nL1aB\"8cD\"6eF3gH0jS\"5wY\"xQ9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5wYxQ9mP\"7vK\"2ZtR4nL1aB8\"cD6\"eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8\"cD6\"eF3gH0jS5\"wYxQ9\"mP7vK2ZtR\"4\"nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9mP\"7vK2ZtR4n\"L1aB8c\"D6eF3gH0\"jS5\"wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6eF3\"gH0\"jS5wYxQ9mP7\"vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP\"7v\"K2ZtR4nL1aB8c\"D6eF\"3gH0jS5wY\"x\"Q9mP7\"v\"K2ZtR4n\"L1aB8cD6eF\"3gH0jS5wY\"xQ9mP7v\"K2ZtR4nL\"1aB\"8cD6eF3gH\"0jS\"5wYxQ9mP7vK2ZtR\"4nL\"1aB8cD6eF3g\"H0jS5\"wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8cD6\"eF3gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8\"cD\"6eF3g\"H0jS5\"wYxQ9mP7vK2\"ZtR4n\"L1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2\"Zt\"R4nL1\"aB8cD6e\"F3gH0j\"S5wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD6eF\"3gH0\"jS5wYxQ9\"mP\"7vK2ZtR4\"nL1aB\"8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB\"8cD\"6eF3gH0jS\"5wYx" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "Q9mP7vK2ZtR4nL1aB8cD6", "moduleId": "eF3gH0jS5wY" }, "customerInfo": { "customerId": "xQ9mP7vK2Zt", "deviceId": "R4nL1aB8cD6eF3gH0jS5w", "lineId": "YxQ9mP7vK2ZtR4", "publicIp": "nL1aB8cD6eF3" } } }, { "_index": "gH0jS5wYxQ9mP7vK2Zt", "_source": { "kafka": { "eventId": "R4nL1aB8cD6e", "moduleId": "F3gH0jS5w" }, "customerInfo": { "customerId": "YxQ9mP7vK2Z", "deviceId": "tR4nL1aB8cD6eF3gH0jS5", "lineId": "wYxQ9mP7vK2ZtR", "publicIp": "4nL1aB8cD6eF" }, "eventData": { "__original": "3\"gH0jS5w\"Yx\"Q9m\"P\"7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2\"Z\"tR4nL1aB 8cD6eF 3g H0jS5wYx\"Q\"9mP7vK2ZtR4nL1aB8c\"D6eF3\"gH0jS5wY\"xQ9mP7\"vK2ZtR\"4nL1aB8\"cD6eF3gH0jS5wYxQ9mP7vK\"2ZtR\"4nL1aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2ZtR4n\"L1aB8cD\"6eF3gH\"0\"jS5wYxQ\"9\"mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0\"j\"S5wYxQ9\"m\"P7vK2ZtR4nL1\"a\"B8cD6eF3g\"H\"0jS5wYxQ9mP7\"v\"K2ZtR4n\"L\"1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2ZtR4nL1aB\"8cD6e\"F3gH0jS5wYx\"Q9mP7\"vK2ZtR4nL1\"aB8cD6" } } }, { "_source": { "eventData": { "__original": "e\"F3gH0jS\"5w\"YxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR\"4nL1aB8cD6eF3g\"H0j\"S5wYxQ9m\"P7v\"K2ZtR\"4\"nL1aB8cD 6eF3gH 0j S5wYxQ9mP7v K\"2\"ZtR4nL1aB8cD6eF3gH\"0jS5w\"YxQ9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3g\"H0jS5wYxQ9mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB8cD\"6eF3gH0\"jS5wYx\"Q\"9mP7vK2\"Z\"tR4nL1aB8cD6\"eF3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL\"1\"aB8cD6eF3gH0\"j\"S5wYxQ9mP\"7\"vK2ZtR4nL1aB\"8\"cD6eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7\"vK2ZtR4nL1a\"B8cD\"6eF3gH0jS5wY\"xQ\"9mP7vK2Z\"t\"R4n\"L\"1aB8cD6eF3gH0jS\"5wYxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF3gH\"0jS5wYx\"Q9\"mP7vK2Zt\"R\"4nL1a\"B8c\"D6eF3gH0jS\"5wYxQ9m" }, "customerInfo": { "customerId": "P7vK2ZtR4nL", "deviceId": "1aB8cD6eF3gH0jS5wYxQ9", "lineId": "mP7vK2ZtR4nL1a", "publicIp": "B8cD6eF3gH0j" }, "kafka": { "eventId": "S5wYxQ9mP7vK", "moduleId": "2ZtR4nL1a" } } }, { "_source": { "@timestamp": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "eventData": { "__original": "L\"1aB8cD6eF3gH0jS5w\"YxQ9m\"P7vK2ZtR4nL1aB8cD6e\"F3gH0jS\"5wYxQ9mP7vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2Zt\"R4nL1aB8\"cD6eF" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "3gH0jS5w", "moduleId": "YxQ9mP7vK" }, "@Version": "2", "customerInfo": { "customerId": "ZtR4nL1aB8c", "deviceId": "D6eF3gH0jS5wYxQ9mP7vK", "lineId": "2ZtR4nL1aB8cD6", "publicIp": "eF3gH0jS5wYx" } } } ], "pipeline": { "processors": [ { "rename": { "field": "Q9mP7vK2ZtR4nL1aB8cD", "target_field": "6eF3gH0jS5wYxQ" } }, { "lowercase": { "field": "9mP7vK2ZtR4nL1", "target_field": "aB8cD6eF3gH", "ignore_missing": true } }, { "set": { "field": "0jS5wYxQ9mP7", "copy_from": "vK2ZtR4nL1aB8", "ignore_empty_value": true } }, { "set": { "field": "cD6eF3gH0", "copy_from": "jS5wYxQ9mP7vK2ZtR4nL1", "ignore_empty_value": true } }, { "script": { "source": """ aB8 cD6eF3gH0j S 5wYxQ9mP7vK2ZtR4 nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP""", "if": "7vK2ZtR4nL1aB8cD 6e F3gH 0j S5wYxQ9mP7vK2ZtR4nL 1a B8cD" } }, { "script": { "description": "6eF3gH0 jS5wYxQ9 mP 7vK2ZtR4nL1 aB8cD6e F3gH 0jS", "source": "5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "if": "S5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF 3gH0 jS 5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 gH0jS5wYxQ 9mP7vK2" } }, { "set": { "field": "ZtR4nL1aB8cD6e", "copy_from": "F3gH0jS5wYxQ9mP7vK2", "ignore_empty_value": true } }, { "set": { "field": "ZtR4nL1aB8cD6", "copy_from": "eF3gH0jS5wYxQ9mP7vK2Zt", "ignore_empty_value": true } }, { "rename": { "field": "R4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2Zt", "ignore_missing": true } }, { "script": { "source": """ R4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0 jS5wYxQ9mP7v """, "if": "K2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2Zt R4 nL1a" } }, { "rename": { "field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "target_field": "eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF", "target_field": "3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3", "target_field": "gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "ignore_missing": true } }, { "rename": { "field": "eF3gH0jS5wYxQ9mP7v", "target_field": "K2ZtR4nL1aB8cD6eF3gH0jS5w", "ignore_missing": true } }, { "rename": { "field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3g", "target_field": "H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD", "ignore_missing": true } }, { "rename": { "field": "6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a", "target_field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "ignore_missing": true } }, { "rename": { "field": "L1aB8cD6eF3gH0jS5wYxQ9mP7vK", "target_field": "2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9", "ignore_missing": true } }, { "rename": { "field": "mP7vK2ZtR4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "ignore_missing": true } }, { "script": { "description": "S5wYxQ9mP 7vK2ZtR 4nL1aB8 cD6eF 3gH 0jS5wYx Q9mP7vK 2ZtR", "lang": "4nL1aB8c", "source": """ D6 eF3gH0jS5wYxQ9mP7vK2ZtR4nL 1a B8cD6 e F3g H0j S 5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF3gH0jS5w Y xQ9mP7vK2Z tR 4nL1 a B8c D 6eF3gH0jS5w YxQ9mP7vK2ZtR4n L 1 aB8c D6eF3gH0jS5wYxQ9mP7vK 2ZtR 4nL1aB8cD6eF3gH0jS5wY xQ9mP 7vK2ZtR4nL1aB8cD6eF3g H0 jS 5wY xQ9mP7vK2ZtR4n L1 a B8cD6 eF3g H 0j S 5wYxQ9mP 7 vK2ZtR4n L1 aB8c D 6eF 3 gH0jS5wYx Q9mP7vK2ZtR4 n L 1aB8cD6e F3gH0jS5wYxQ9mP7vK2 Z tR4nL 1a B 8c D6 eF3gH0 jS5wYxQ 9m P7vK2ZtR4nL1aB8cD6eF3gH0 jS 5wYxQ 9 mP7 vK2 Z tR4nL1aB8cD6eF3gH0jS5wY xQ9mP7vK2ZtR4nL1a B 8 cD6eF3gH 0jS5wYxQ9m P7vK2Zt R4nL1aB8c D6eF3gH0j S5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3g H 0jS5wYxQ 9mP7vK2Zt R 4nL1aB8cD6eF3g H0jS5w YxQ9mP7vK2ZtR4nL1a B 8cD6eF3gH0jS5w Y xQ9mP7vK2 Z tR 4 nL 1a B8c D6eF3gH 0jS5wYxQ9m P7vK2Z tR 4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK 2Z tR4nL 1 aB8 cD6eF 3g H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD 6 eF 3gH0jS5wYxQ9mP7 vK 2ZtR4nL1aB8c D 6eF3gH0jS5w Y x Q9mP7vK2 ZtR4nL1aB8cD6 eF 3g H 0jS5wYxQ9mP7v K2 ZtR 4nL1aB8 cD6eF3gH0jS5wY xQ 9mP7vK2ZtR 4 nL1aB8cD6 eF3gH0jS5wYxQ9 mP7vK2ZtR4nL1aB 8 cD6eF3gH0 jS5wYxQ9mP7vK2 ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a B8cD6e F 3 g H0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6e F3 gH0jS 5 wYx Q9m P 7vK2ZtR4nL1aB8cD6eF3gH0jS5w YxQ9mP7vK2Z t R4nL1aB8cD6 eF 3gH0 j S5w Y xQ9mP7vK2ZtR 4nL1aB8cD6eF3g H 0jS5wYxQ9 mP7vK2ZtR4nL1aB8cD6 e F 3gH0jS5wYxQ9 mP7vK2ZtR4 nL1aB8cD6eF3g H0jS5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3gH0jS5w YxQ9mP7vK2ZtR4nL1aB8 cD6eF3gH0jS5wYxQ 9m P7 vK2ZtR4nL 1aB8c D6eF 3gH 0jS5wY xQ9mP7vK2ZtR 4n L1aB8cD6eF 3 gH 0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 g H0jS5wYxQ9mP7vK2Zt R 4nL1aB8cD6 e F """ } }, { "uri_parts": { "field": "3gH0jS5wYxQ9", "ignore_missing": true, "ignore_failure": true } }, { "append": { "field": "mP7vK2ZtR4n", "value": [ "L1aB8cD6eF3gH", "0jS5wYxQ9mP7vK2ZtR", "4nL1aB8cD6eF3", "gH0jS5wYxQ9mP7vK2", "ZtR4nL1aB8cD6" ], "allow_duplicates": false } }, { "script": { "description": "eF3gH0 jS5w YxQ9mP", "source": """ 7vK2ZtR 4nL1aB8cD6e F3 g H0 jS 5w YxQ9 mP 7 vK 2Zt R 4nL1aB 8cD6e F 3gH0 jS 5w YxQ9mP7vK2 ZtR4 n L1aB8c D6eF3gH0jS5wYxQ9mP7vK2 Zt R4nL1aB8c D6eF3g H0jS5wY xQ9mP7vK2 Zt R4n L 1aB8 cD 6e F3gH0jS5wY xQ9mP 7 vK2ZtR4 nL1aB8cD6eF3g H0 jS5wYxQ9m P7vK2Z tR4nL1aB 8cD6eF3gH 0j S5w Y xQ9mP7 vK2ZtR 4 nL1aB8cD6e """ } }, { "remove": { "field": [ "F3gH" ], "ignore_missing": true } } ] } } ``` </details> Assisted by Cursor CLI using GPT-5.2-High model --------- Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 4fa1505) # Conflicts: # src/platform/packages/shared/kbn-monaco/src/languages/console/language.ts # src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts # src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.ts # src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx
…tic#251173) Closes elastic#251172 ## Summary This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs. ## DEMO (Before / After) https://github.com/user-attachments/assets/54b90fdb-f0b0-4de0-ae53-6fa4a12a98d9 ## Change 1: Console completion avoids full-buffer reads (`kbn-monaco` Console language) **What changed** - The Console completion provider no longer calls `model.getValue()` to compute `textBeforeCursor`. - ES|QL context detection is only attempted when the cursor is within a `POST /_query` (or `POST _query/async`) request. - When it *is* a `_query` request, the provider reads only the relevant slice via `model.getValueInRange()` (from the request line to the cursor). - For all other requests (or when no request line is found within a bounded lookback), completion delegates to the existing actions provider. **Why** - `model.getValue()` materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI. - ES|QL completion only makes sense for `_query` requests; scoping the work avoids paying the cost for non-ES|QL traffic. **Why this approach** - We preserve existing completion behavior by delegating to the actions provider, but avoid the pathological cost by restricting work to a small, semantically relevant window. ## Change 2: ES|QL quote/query detection is linear-time (`checkForTripleQuotesAndEsqlQuery`) **What changed** - `checkForTripleQuotesAndEsqlQuery` was rewritten to scan the text once and avoid repeated substring+regex work inside the main loop. **Why** - The previous approach could become super-linear on adversarial inputs (many quotes / many potential toggles), which is exactly what large JSON payloads tend to contain. - In the worst case, this turns “type one character” into “do a huge amount of CPU work”, producing the freeze. **Why this approach** - A single forward scan preserves semantics while making the runtime scale predictably with input size. ## Change 3: Monaco `onChange` no longer calls `editor.getValue()` per keystroke (`shared-ux` React Monaco editor) **What changed** - The `onDidChangeModelContent` handler computes the next value by applying `event.changes` to a shadow string (`lastKnownValueRef`) instead of calling `editor.getValue()`. - Controlled-mode syncing (`useLayoutEffect`) first compares the incoming `value` against the shadow value to avoid unnecessary full-buffer reads. **Why** - `editor.getValue()` materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models. - Applying incremental changes keeps the per-keystroke cost proportional to the change set, not the document size. **Why this approach** - Monaco already provides the exact edit deltas (`IModelContentChangedEvent.changes`). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads. ## Tests (what they cover and why) - **`language.test.ts`**: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model. - **`autocomplete_utils.test.ts`**: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance). - **`editor.test.tsx`**: verifies the incremental `onChange` value computation (including multi-change ordering) and controlled sync behavior. ## Test plan - `node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.js` - `node scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.js` ### Manual UI verification (DevTools Console) - Open `DevTools -> Console`. - Expand the `<details>` block below and paste the payload into the editor. - Click at the very end of the pasted content and type a few characters. - Verify the editor remains responsive (no multi-second freeze / hang), and typed characters appear immediately. - Optional: place the cursor inside a `""" ... """` block and type to ensure autocomplete remains responsive. <details> <summary>Sanitized reproduction payload (paste into DevTools Console)</summary> ```http POST _ingest/pipeline/_simulate { "docs": [ { "_source": { "@timestamp": "xQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS", "eventData": { "__original": "5\"wYxQ9mP7vK\"2Zt\"R4nL1aB8c\"D\"6eF3gH\"0\"jS5wYxQ9\"mP\"7vK2ZtR4n\"L1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8c\"D6eF3gH\"0jS5wYxQ9m\"P7vK2ZtR4\"nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Z\"tR4nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Zt\"R4nL1a\"B8cD6eF\"3gH0j\"S5wYxQ9\"m\"P7vK2ZtR4nL1aB8c\"D6\"eF3gH\"0jS5w\"YxQ9mP7v\"K2Z\"tR4\"n\"L1aB8\"c\"D6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B8cD\"6eF3gH0jS5\"wYxQ9mP\"7vK2ZtR4nL\"1aB8cD6\"eF3g\"H0jS5\"wYxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3g\"H\"0jS5wYx\"Q9mP7v\"K2ZtR4n\"L1aB8c\"D6eF3gH\"0\"jS5wYxQ9mP7vK2Z\"t\"R4nL1aB8cD\"6eF3gH\"0jS5wYxQ9mP7v\"K2ZtR4n\"L1aB\"8\"cD6eF\"3\"gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8cD\"6\"eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"n\"L1aB8cD6e\"F3g\"H0jS5wYxQ9mP7vK2ZtR\"4nL1aB8cD\"6eF3gH0jS\"5w\"YxQ9mP7v\"K2ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wY\"xQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4n\"L1aB8\"cD6eF\"3gH\"0jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB8\"cD6eF\"3gH0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1a\"B8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP\"7vK2Z\"tR4nL\"1aB\"8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4nL\"1aB8c\"D6eF3\"gH0\"jS5wYx\"Q9mP7\"vK2ZtR\"4nL1aB8cD\"6\"eF3gH0jS5wYxQ\"9\"mP7vK2ZtR\"4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9mP7v\"K2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1\"aB8cD\"6eF3gH\"0jS5wY\"xQ9mP7\"vK2ZtR4nL\"1aB8c\"D6eF3gH\"0jS\"5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4\"nL\\1a\\\"\\B8cD6\"e\"F3gH\"0jS\"5wYxQ9mP7\"vK2Zt\"R4nL1aB8c\"D6eF3\"gH0jS5wYxQ\"9mP7vK2\"ZtR4nL1aB8\"cD6eF3g\"H0jS\"5wYxQ\"9mP7\"v\"K2ZtR4nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1aB\"8cD6eF3\"g\"H0jS5wYxQ9mP7vK\"2\"ZtR4nL1aB8\"cD6eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL1\"a\"B8cD6e\"F\"3gH0jS5w\"Y\"xQ9mP7vK2ZtR4nL1aB8c\"D\"6eF3gH0jS5\"w\"YxQ9mP7vK2ZtR\"4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7vK2Zt\"R4nL1aB8c\"D6eF3gH0j\"S5\"wYxQ9mP7\"vK2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5w\"YxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL1\"aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5w\"YxQ9m\"P7vK2Z\"tR4nL1aB8\"c\"D6eF3gH0jS5wY\"x\"Q9mP7vK2Z\"tR\"4nL1aB8c\"D6eF3\"gH0jS5wYxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3\"gH0jS\"5wYxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4\"nL1aB\"8cD6eF\"3gH0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5wYxQ9m\"P7v\"K2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B\"8cD6eF\"3\"gH0j\"S5w\"YxQ9mP7vK\"2ZtR4\"nL1aB8cD6\"eF3gH0j\"S5wYxQ9mP7\"vK2ZtR4\"nL1aB8cD6e\"F3gH0jS\"5wYx\"Q9mP7\"vK2Z\"t\"R4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR4nL1a\"B8cD6eF\"3gH0jS5wYx\"Q9mP7vK\"2\"ZtR4nL1aB8cD6eF\"3\"gH0jS5wYxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5w\"Y\"xQ9mP\"7\"vK2ZtR4n\"L\"1aB8cD6eF3gH0jS5wYxQ\"9\"mP7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7v\"K2ZtR4nL1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2Zt\"R4\"nL1aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5wY\"xQ9\"mP7vK\"2ZtR4\"nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS5\"wYxQ9\"mP7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0j\"S5w\"YxQ9m\"P7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4n\"L1aB8\"cD6eF3\"gH0jS5wYx\"Q\"9mP7vK2ZtR4nL\"1\"aB8cD6eF3\"gH\"0jS5wYxQ\"9mP7v\"K2ZtR4nL1aB8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0j\"S5wYx\"Q9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR\"4nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL\"1aB8cD6eF\"3gH\"0\"jS5wYx\"Q\"9mP7\"vK2\"ZtR4nL1aB\"8cD6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4n\"L1aB8cD6\"eF3gH0jS5w\"YxQ9mP7\"vK2Z\"tR4nL\"1aB8\"c\"D6eF3gH0jS5wYxQ9mP7vK2ZtR\"4\"nL1aB8c\"D6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR4nL1\"a\"B8cD6eF3gH0jS5w\"Y\"xQ9mP7vK2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9m\"P7vK\"2\"ZtR4n\"L\"1aB8cD6e\"F\"3gH0jS5wYxQ9mP7vK2Zt\"R\"4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"m\"P7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7vK2Zt\"R4nL1aB8c\"D6\"eF3gH0jS\"5wYxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF\"3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH\"0jS\"5wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8cD6eF3gH0jS5w\"YxQ\"9mP\"7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1a\"B8cD6\"eF3gH\"0jS\"5wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD6\"eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F\"3gH0jS5wY\"xQ\"9mP7vK2Z\"tR4nL\"1aB8cD6eF3gH0\"jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9m\"P7vK2\"ZtR4nL\"1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF3gH0j\"S5w\"YxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5\"wYxQ9mP7v\"K2ZtR4n\"L1\"aB8cD6e\"F3gH\"0jS5wYxQ9\"m\"P7vK2ZtR4nL\"1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4\"nL1aB\"8cD\"6eF3g\"H0j\"S5wYxQ9\"mP7v\"K2ZtR4nL\"1aB8c\"D6eF3gH0jS\"5wY\"xQ9mP7vK2Z\"tR4n\"L1aB8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5\"wYxQ9mP\"7\"vK2ZtR4nL1aB8cD6\"e\"F3gH0jS5wYxQ9mP7\"vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS5\"wYxQ9mP7vK2ZtR4\"nL1a\"B8cD6eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1\"a\"B8cD6eF3\"gH\"0jS5wYxQ9\"mP7vK2Z\"tR4nL1a\"B8cD6eF3gH\"0jS5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1\"aB8cD6eF\"3gH0j\"S5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6\"eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL\"1aB8c\"D6eF3\"gH0jS5wY\"xQ9\"mP7\"v\"K2ZtR4\"n\"L1aB\"8cD\"6eF3gH0jS\"5wYxQ\"9mP7vK2Zt\"R4nL1a\"B8cD6eF3gH\"0jS5wYxQ\"9mP7vK2ZtR\"4nL1aB8c\"D6eF\"3gH0j\"S5wY\"x\"Q9mP7vK2Zt\"R\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4nL1aB\"8\"cD6eF3gH0jS5wYx\"Q\"9mP7vK2ZtR\"4nL1aB\"8cD6eF3gH0jS5\"wYxQ9mP7\"vK2Z\"t\"R4nL1a\"B\"8cD6eF3g\"H\"0jS5wYxQ9mP7vK2ZtR4n\"L\"1aB8cD6eF3\"g\"H0jS5wYxQ9mP7\"v\"K2ZtR4nL1\"aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3\"gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8c\"D6e\"F3g\"H0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4nL\"1aB\"8cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Zt\"R4nL1\"aB8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2\"ZtR\"4nL1a\"B8cD6\"eF3\"gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3g\"H0jS5\"wYxQ9m\"P7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7\"vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5w\"YxQ\"9mP\"7vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2\"ZtR4n\"L1aB8c\"D6eF3g\"H0jS5wY\"xQ9mP7vK2\"ZtR4nL\"1aB8cD6\"eF3\"gH0jS5wYxQ\"9mP\"7vK\"2ZtR4n\"L1aB8cD6eF3gH\"0jS5wYxQ\"9mP\"7vK2ZtR4n\"L1aB8cD\"6e\"F3gH0jS\"5wYx\"Q9mP7vK2Z\"t\"R4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB\"8c\"D6eF3\"gH0\"jS5wY\"xQ9\"mP7vK2Z\"tR4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9m\"P7v\"K2ZtR4nL1a\"B8cD\"6eF3gH0jS5wYxQ9m\"P7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2ZtR\"4\"nL1aB8cD6eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL1\"aB8\"cD6e\"F3gH0\"jS5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF\"3gH0jS5wYx\"Q9mP7v\"K2ZtR4nL1\"a\"B8cD6eF3gH0jS\"5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL1\"aB8\"cD6eF3gH0\"j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6e\"F\"3gH0jS5wYxQ9mP7\"vK2\"ZtR4nL1aB\"8\"cD6eF3gH\"0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1aB8cD\"6eF\"3gH0jS\"5w\"YxQ9\"mP7vK2ZtR4n\"L1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8\"c\"D6eF3g\"H0jS5wYxQ9\"mP7vK\"2ZtR4nL1aB8\"cD6eF3gH0jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8cD6\"eF3gH0jS5wYx\"Q9mP7vK2ZtR\"4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3gH0jS5\"wYxQ9mP7v\"K2ZtR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR4nL1a\"B8cD6eF3g\"H0jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL1\"a\"B8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6eF3\"gH0\"jS5wYxQ\"9mP\"7vK2ZtR4n\"L1a\"B8cD6eF3\"gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1aB\"8\"cD6eF\"3\"gH0jS5w\"YxQ9mP7v\"K2ZtR4nL1\"aB8cD6\"eF3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wYxQ9mP7vK\"2ZtR\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9mP\"7vK2ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4\"n\"L1aB8c\"D\"6eF3gH0\"jS5wYxQ9\"mP7vK2ZtR\"4nL1aB\"8cD6eF3g\"H0j\"S5wYxQ9mP\"7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0jS5wYxQ9m\"P7v\"K2ZtR4n\"L1aB8cD6\"eF3gH0jS5\"wYxQ9m\"P7vK2ZtR\"4nL\"1aB8cD6eF\"3gH0j\"S5wYxQ9mP\"7\"vK2ZtR\"4\"nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD\"6eF\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9mP\"7vK2ZtR4n\"L\"1aB8cD6\"e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6eF3gH0jS5\"wYx\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6e\"F\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR\"4nL1aB8cD\"6eF\"3gH0jS5w\"YxQ\"9mP7vK2Zt\"R4nL1\"aB8cD6eF3\"g\"H0jS5w\"Y\"xQ9mP7v\"K2ZtR4nL\"1aB8cD6eF\"3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8c\"D6eF3gH0jS5wYxQ\"9mP\"7vK2ZtR4nL1\"aB8\"cD6eF3g\"H0jS5wYx\"Q9mP7vK2Z\"tR4nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4nL\"1a\"B8cD6eF3gH0\"jS5w\"YxQ9mP7vK\"2\"ZtR4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6eF\"3\"gH0jS5w\"YxQ\"9mP7vK2Zt\"R4n\"L1aB8cD6\"eF3\"gH0jS5wYx\"Q9m\"P7vK2ZtR4nL1aB8\"cD6\"eF3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wY\"xQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF3g\"H\"0jS5wY\"x\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD6eF3gH0\"jS5\"wYxQ9mP7vK2\"ZtR\"4nL1aB8\"cD6\"eF3gH0jS5\"wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD\"6eF3g\"H0jS5wYxQ\"9\"mP7vK2Z\"t\"R4nL1aB\"8cD\"6eF3gH0jS\"5wY\"xQ9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5wYxQ9mP\"7vK\"2ZtR4nL1aB8\"cD6\"eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8\"cD6\"eF3gH0jS5\"wYxQ9\"mP7vK2ZtR\"4\"nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9mP\"7vK2ZtR4n\"L1aB8c\"D6eF3gH0\"jS5\"wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6eF3\"gH0\"jS5wYxQ9mP7\"vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP\"7v\"K2ZtR4nL1aB8c\"D6eF\"3gH0jS5wY\"x\"Q9mP7\"v\"K2ZtR4n\"L1aB8cD6eF\"3gH0jS5wY\"xQ9mP7v\"K2ZtR4nL\"1aB\"8cD6eF3gH\"0jS\"5wYxQ9mP7vK2ZtR\"4nL\"1aB8cD6eF3g\"H0jS5\"wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8cD6\"eF3gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8\"cD\"6eF3g\"H0jS5\"wYxQ9mP7vK2\"ZtR4n\"L1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2\"Zt\"R4nL1\"aB8cD6e\"F3gH0j\"S5wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD6eF\"3gH0\"jS5wYxQ9\"mP\"7vK2ZtR4\"nL1aB\"8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB\"8cD\"6eF3gH0jS\"5wYx" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "Q9mP7vK2ZtR4nL1aB8cD6", "moduleId": "eF3gH0jS5wY" }, "customerInfo": { "customerId": "xQ9mP7vK2Zt", "deviceId": "R4nL1aB8cD6eF3gH0jS5w", "lineId": "YxQ9mP7vK2ZtR4", "publicIp": "nL1aB8cD6eF3" } } }, { "_index": "gH0jS5wYxQ9mP7vK2Zt", "_source": { "kafka": { "eventId": "R4nL1aB8cD6e", "moduleId": "F3gH0jS5w" }, "customerInfo": { "customerId": "YxQ9mP7vK2Z", "deviceId": "tR4nL1aB8cD6eF3gH0jS5", "lineId": "wYxQ9mP7vK2ZtR", "publicIp": "4nL1aB8cD6eF" }, "eventData": { "__original": "3\"gH0jS5w\"Yx\"Q9m\"P\"7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2\"Z\"tR4nL1aB 8cD6eF 3g H0jS5wYx\"Q\"9mP7vK2ZtR4nL1aB8c\"D6eF3\"gH0jS5wY\"xQ9mP7\"vK2ZtR\"4nL1aB8\"cD6eF3gH0jS5wYxQ9mP7vK\"2ZtR\"4nL1aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2ZtR4n\"L1aB8cD\"6eF3gH\"0\"jS5wYxQ\"9\"mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0\"j\"S5wYxQ9\"m\"P7vK2ZtR4nL1\"a\"B8cD6eF3g\"H\"0jS5wYxQ9mP7\"v\"K2ZtR4n\"L\"1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2ZtR4nL1aB\"8cD6e\"F3gH0jS5wYx\"Q9mP7\"vK2ZtR4nL1\"aB8cD6" } } }, { "_source": { "eventData": { "__original": "e\"F3gH0jS\"5w\"YxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR\"4nL1aB8cD6eF3g\"H0j\"S5wYxQ9m\"P7v\"K2ZtR\"4\"nL1aB8cD 6eF3gH 0j S5wYxQ9mP7v K\"2\"ZtR4nL1aB8cD6eF3gH\"0jS5w\"YxQ9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3g\"H0jS5wYxQ9mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB8cD\"6eF3gH0\"jS5wYx\"Q\"9mP7vK2\"Z\"tR4nL1aB8cD6\"eF3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL\"1\"aB8cD6eF3gH0\"j\"S5wYxQ9mP\"7\"vK2ZtR4nL1aB\"8\"cD6eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7\"vK2ZtR4nL1a\"B8cD\"6eF3gH0jS5wY\"xQ\"9mP7vK2Z\"t\"R4n\"L\"1aB8cD6eF3gH0jS\"5wYxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF3gH\"0jS5wYx\"Q9\"mP7vK2Zt\"R\"4nL1a\"B8c\"D6eF3gH0jS\"5wYxQ9m" }, "customerInfo": { "customerId": "P7vK2ZtR4nL", "deviceId": "1aB8cD6eF3gH0jS5wYxQ9", "lineId": "mP7vK2ZtR4nL1a", "publicIp": "B8cD6eF3gH0j" }, "kafka": { "eventId": "S5wYxQ9mP7vK", "moduleId": "2ZtR4nL1a" } } }, { "_source": { "@timestamp": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "eventData": { "__original": "L\"1aB8cD6eF3gH0jS5w\"YxQ9m\"P7vK2ZtR4nL1aB8cD6e\"F3gH0jS\"5wYxQ9mP7vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2Zt\"R4nL1aB8\"cD6eF" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "3gH0jS5w", "moduleId": "YxQ9mP7vK" }, "@Version": "2", "customerInfo": { "customerId": "ZtR4nL1aB8c", "deviceId": "D6eF3gH0jS5wYxQ9mP7vK", "lineId": "2ZtR4nL1aB8cD6", "publicIp": "eF3gH0jS5wYx" } } } ], "pipeline": { "processors": [ { "rename": { "field": "Q9mP7vK2ZtR4nL1aB8cD", "target_field": "6eF3gH0jS5wYxQ" } }, { "lowercase": { "field": "9mP7vK2ZtR4nL1", "target_field": "aB8cD6eF3gH", "ignore_missing": true } }, { "set": { "field": "0jS5wYxQ9mP7", "copy_from": "vK2ZtR4nL1aB8", "ignore_empty_value": true } }, { "set": { "field": "cD6eF3gH0", "copy_from": "jS5wYxQ9mP7vK2ZtR4nL1", "ignore_empty_value": true } }, { "script": { "source": """ aB8 cD6eF3gH0j S 5wYxQ9mP7vK2ZtR4 nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP""", "if": "7vK2ZtR4nL1aB8cD 6e F3gH 0j S5wYxQ9mP7vK2ZtR4nL 1a B8cD" } }, { "script": { "description": "6eF3gH0 jS5wYxQ9 mP 7vK2ZtR4nL1 aB8cD6e F3gH 0jS", "source": "5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "if": "S5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF 3gH0 jS 5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 gH0jS5wYxQ 9mP7vK2" } }, { "set": { "field": "ZtR4nL1aB8cD6e", "copy_from": "F3gH0jS5wYxQ9mP7vK2", "ignore_empty_value": true } }, { "set": { "field": "ZtR4nL1aB8cD6", "copy_from": "eF3gH0jS5wYxQ9mP7vK2Zt", "ignore_empty_value": true } }, { "rename": { "field": "R4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2Zt", "ignore_missing": true } }, { "script": { "source": """ R4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0 jS5wYxQ9mP7v """, "if": "K2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2Zt R4 nL1a" } }, { "rename": { "field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "target_field": "eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF", "target_field": "3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3", "target_field": "gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "ignore_missing": true } }, { "rename": { "field": "eF3gH0jS5wYxQ9mP7v", "target_field": "K2ZtR4nL1aB8cD6eF3gH0jS5w", "ignore_missing": true } }, { "rename": { "field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3g", "target_field": "H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD", "ignore_missing": true } }, { "rename": { "field": "6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a", "target_field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "ignore_missing": true } }, { "rename": { "field": "L1aB8cD6eF3gH0jS5wYxQ9mP7vK", "target_field": "2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9", "ignore_missing": true } }, { "rename": { "field": "mP7vK2ZtR4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "ignore_missing": true } }, { "script": { "description": "S5wYxQ9mP 7vK2ZtR 4nL1aB8 cD6eF 3gH 0jS5wYx Q9mP7vK 2ZtR", "lang": "4nL1aB8c", "source": """ D6 eF3gH0jS5wYxQ9mP7vK2ZtR4nL 1a B8cD6 e F3g H0j S 5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF3gH0jS5w Y xQ9mP7vK2Z tR 4nL1 a B8c D 6eF3gH0jS5w YxQ9mP7vK2ZtR4n L 1 aB8c D6eF3gH0jS5wYxQ9mP7vK 2ZtR 4nL1aB8cD6eF3gH0jS5wY xQ9mP 7vK2ZtR4nL1aB8cD6eF3g H0 jS 5wY xQ9mP7vK2ZtR4n L1 a B8cD6 eF3g H 0j S 5wYxQ9mP 7 vK2ZtR4n L1 aB8c D 6eF 3 gH0jS5wYx Q9mP7vK2ZtR4 n L 1aB8cD6e F3gH0jS5wYxQ9mP7vK2 Z tR4nL 1a B 8c D6 eF3gH0 jS5wYxQ 9m P7vK2ZtR4nL1aB8cD6eF3gH0 jS 5wYxQ 9 mP7 vK2 Z tR4nL1aB8cD6eF3gH0jS5wY xQ9mP7vK2ZtR4nL1a B 8 cD6eF3gH 0jS5wYxQ9m P7vK2Zt R4nL1aB8c D6eF3gH0j S5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3g H 0jS5wYxQ 9mP7vK2Zt R 4nL1aB8cD6eF3g H0jS5w YxQ9mP7vK2ZtR4nL1a B 8cD6eF3gH0jS5w Y xQ9mP7vK2 Z tR 4 nL 1a B8c D6eF3gH 0jS5wYxQ9m P7vK2Z tR 4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK 2Z tR4nL 1 aB8 cD6eF 3g H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD 6 eF 3gH0jS5wYxQ9mP7 vK 2ZtR4nL1aB8c D 6eF3gH0jS5w Y x Q9mP7vK2 ZtR4nL1aB8cD6 eF 3g H 0jS5wYxQ9mP7v K2 ZtR 4nL1aB8 cD6eF3gH0jS5wY xQ 9mP7vK2ZtR 4 nL1aB8cD6 eF3gH0jS5wYxQ9 mP7vK2ZtR4nL1aB 8 cD6eF3gH0 jS5wYxQ9mP7vK2 ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a B8cD6e F 3 g H0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6e F3 gH0jS 5 wYx Q9m P 7vK2ZtR4nL1aB8cD6eF3gH0jS5w YxQ9mP7vK2Z t R4nL1aB8cD6 eF 3gH0 j S5w Y xQ9mP7vK2ZtR 4nL1aB8cD6eF3g H 0jS5wYxQ9 mP7vK2ZtR4nL1aB8cD6 e F 3gH0jS5wYxQ9 mP7vK2ZtR4 nL1aB8cD6eF3g H0jS5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3gH0jS5w YxQ9mP7vK2ZtR4nL1aB8 cD6eF3gH0jS5wYxQ 9m P7 vK2ZtR4nL 1aB8c D6eF 3gH 0jS5wY xQ9mP7vK2ZtR 4n L1aB8cD6eF 3 gH 0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 g H0jS5wYxQ9mP7vK2Zt R 4nL1aB8cD6 e F """ } }, { "uri_parts": { "field": "3gH0jS5wYxQ9", "ignore_missing": true, "ignore_failure": true } }, { "append": { "field": "mP7vK2ZtR4n", "value": [ "L1aB8cD6eF3gH", "0jS5wYxQ9mP7vK2ZtR", "4nL1aB8cD6eF3", "gH0jS5wYxQ9mP7vK2", "ZtR4nL1aB8cD6" ], "allow_duplicates": false } }, { "script": { "description": "eF3gH0 jS5w YxQ9mP", "source": """ 7vK2ZtR 4nL1aB8cD6e F3 g H0 jS 5w YxQ9 mP 7 vK 2Zt R 4nL1aB 8cD6e F 3gH0 jS 5w YxQ9mP7vK2 ZtR4 n L1aB8c D6eF3gH0jS5wYxQ9mP7vK2 Zt R4nL1aB8c D6eF3g H0jS5wY xQ9mP7vK2 Zt R4n L 1aB8 cD 6e F3gH0jS5wY xQ9mP 7 vK2ZtR4 nL1aB8cD6eF3g H0 jS5wYxQ9m P7vK2Z tR4nL1aB 8cD6eF3gH 0j S5w Y xQ9mP7 vK2ZtR 4 nL1aB8cD6e """ } }, { "remove": { "field": [ "F3gH" ], "ignore_missing": true } } ] } } ``` </details> Assisted by Cursor CLI using GPT-5.2-High model --------- Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 4fa1505)
…tic#251173) Closes elastic#251172 ## Summary This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs. ## DEMO (Before / After) https://github.com/user-attachments/assets/54b90fdb-f0b0-4de0-ae53-6fa4a12a98d9 ## Change 1: Console completion avoids full-buffer reads (`kbn-monaco` Console language) **What changed** - The Console completion provider no longer calls `model.getValue()` to compute `textBeforeCursor`. - ES|QL context detection is only attempted when the cursor is within a `POST /_query` (or `POST _query/async`) request. - When it *is* a `_query` request, the provider reads only the relevant slice via `model.getValueInRange()` (from the request line to the cursor). - For all other requests (or when no request line is found within a bounded lookback), completion delegates to the existing actions provider. **Why** - `model.getValue()` materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI. - ES|QL completion only makes sense for `_query` requests; scoping the work avoids paying the cost for non-ES|QL traffic. **Why this approach** - We preserve existing completion behavior by delegating to the actions provider, but avoid the pathological cost by restricting work to a small, semantically relevant window. ## Change 2: ES|QL quote/query detection is linear-time (`checkForTripleQuotesAndEsqlQuery`) **What changed** - `checkForTripleQuotesAndEsqlQuery` was rewritten to scan the text once and avoid repeated substring+regex work inside the main loop. **Why** - The previous approach could become super-linear on adversarial inputs (many quotes / many potential toggles), which is exactly what large JSON payloads tend to contain. - In the worst case, this turns “type one character” into “do a huge amount of CPU work”, producing the freeze. **Why this approach** - A single forward scan preserves semantics while making the runtime scale predictably with input size. ## Change 3: Monaco `onChange` no longer calls `editor.getValue()` per keystroke (`shared-ux` React Monaco editor) **What changed** - The `onDidChangeModelContent` handler computes the next value by applying `event.changes` to a shadow string (`lastKnownValueRef`) instead of calling `editor.getValue()`. - Controlled-mode syncing (`useLayoutEffect`) first compares the incoming `value` against the shadow value to avoid unnecessary full-buffer reads. **Why** - `editor.getValue()` materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models. - Applying incremental changes keeps the per-keystroke cost proportional to the change set, not the document size. **Why this approach** - Monaco already provides the exact edit deltas (`IModelContentChangedEvent.changes`). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads. ## Tests (what they cover and why) - **`language.test.ts`**: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model. - **`autocomplete_utils.test.ts`**: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance). - **`editor.test.tsx`**: verifies the incremental `onChange` value computation (including multi-change ordering) and controlled sync behavior. ## Test plan - `node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.js` - `node scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.js` ### Manual UI verification (DevTools Console) - Open `DevTools -> Console`. - Expand the `<details>` block below and paste the payload into the editor. - Click at the very end of the pasted content and type a few characters. - Verify the editor remains responsive (no multi-second freeze / hang), and typed characters appear immediately. - Optional: place the cursor inside a `""" ... """` block and type to ensure autocomplete remains responsive. <details> <summary>Sanitized reproduction payload (paste into DevTools Console)</summary> ```http POST _ingest/pipeline/_simulate { "docs": [ { "_source": { "@timestamp": "xQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS", "eventData": { "__original": "5\"wYxQ9mP7vK\"2Zt\"R4nL1aB8c\"D\"6eF3gH\"0\"jS5wYxQ9\"mP\"7vK2ZtR4n\"L1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8c\"D6eF3gH\"0jS5wYxQ9m\"P7vK2ZtR4\"nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Z\"tR4nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Zt\"R4nL1a\"B8cD6eF\"3gH0j\"S5wYxQ9\"m\"P7vK2ZtR4nL1aB8c\"D6\"eF3gH\"0jS5w\"YxQ9mP7v\"K2Z\"tR4\"n\"L1aB8\"c\"D6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B8cD\"6eF3gH0jS5\"wYxQ9mP\"7vK2ZtR4nL\"1aB8cD6\"eF3g\"H0jS5\"wYxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3g\"H\"0jS5wYx\"Q9mP7v\"K2ZtR4n\"L1aB8c\"D6eF3gH\"0\"jS5wYxQ9mP7vK2Z\"t\"R4nL1aB8cD\"6eF3gH\"0jS5wYxQ9mP7v\"K2ZtR4n\"L1aB\"8\"cD6eF\"3\"gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8cD\"6\"eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"n\"L1aB8cD6e\"F3g\"H0jS5wYxQ9mP7vK2ZtR\"4nL1aB8cD\"6eF3gH0jS\"5w\"YxQ9mP7v\"K2ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wY\"xQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4n\"L1aB8\"cD6eF\"3gH\"0jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB8\"cD6eF\"3gH0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1a\"B8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP\"7vK2Z\"tR4nL\"1aB\"8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4nL\"1aB8c\"D6eF3\"gH0\"jS5wYx\"Q9mP7\"vK2ZtR\"4nL1aB8cD\"6\"eF3gH0jS5wYxQ\"9\"mP7vK2ZtR\"4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9mP7v\"K2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1\"aB8cD\"6eF3gH\"0jS5wY\"xQ9mP7\"vK2ZtR4nL\"1aB8c\"D6eF3gH\"0jS\"5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4\"nL\\1a\\\"\\B8cD6\"e\"F3gH\"0jS\"5wYxQ9mP7\"vK2Zt\"R4nL1aB8c\"D6eF3\"gH0jS5wYxQ\"9mP7vK2\"ZtR4nL1aB8\"cD6eF3g\"H0jS\"5wYxQ\"9mP7\"v\"K2ZtR4nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1aB\"8cD6eF3\"g\"H0jS5wYxQ9mP7vK\"2\"ZtR4nL1aB8\"cD6eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL1\"a\"B8cD6e\"F\"3gH0jS5w\"Y\"xQ9mP7vK2ZtR4nL1aB8c\"D\"6eF3gH0jS5\"w\"YxQ9mP7vK2ZtR\"4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7vK2Zt\"R4nL1aB8c\"D6eF3gH0j\"S5\"wYxQ9mP7\"vK2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5w\"YxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL1\"aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5w\"YxQ9m\"P7vK2Z\"tR4nL1aB8\"c\"D6eF3gH0jS5wY\"x\"Q9mP7vK2Z\"tR\"4nL1aB8c\"D6eF3\"gH0jS5wYxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3\"gH0jS\"5wYxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4\"nL1aB\"8cD6eF\"3gH0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5wYxQ9m\"P7v\"K2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B\"8cD6eF\"3\"gH0j\"S5w\"YxQ9mP7vK\"2ZtR4\"nL1aB8cD6\"eF3gH0j\"S5wYxQ9mP7\"vK2ZtR4\"nL1aB8cD6e\"F3gH0jS\"5wYx\"Q9mP7\"vK2Z\"t\"R4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR4nL1a\"B8cD6eF\"3gH0jS5wYx\"Q9mP7vK\"2\"ZtR4nL1aB8cD6eF\"3\"gH0jS5wYxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5w\"Y\"xQ9mP\"7\"vK2ZtR4n\"L\"1aB8cD6eF3gH0jS5wYxQ\"9\"mP7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7v\"K2ZtR4nL1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2Zt\"R4\"nL1aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5wY\"xQ9\"mP7vK\"2ZtR4\"nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS5\"wYxQ9\"mP7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0j\"S5w\"YxQ9m\"P7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4n\"L1aB8\"cD6eF3\"gH0jS5wYx\"Q\"9mP7vK2ZtR4nL\"1\"aB8cD6eF3\"gH\"0jS5wYxQ\"9mP7v\"K2ZtR4nL1aB8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0j\"S5wYx\"Q9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR\"4nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL\"1aB8cD6eF\"3gH\"0\"jS5wYx\"Q\"9mP7\"vK2\"ZtR4nL1aB\"8cD6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4n\"L1aB8cD6\"eF3gH0jS5w\"YxQ9mP7\"vK2Z\"tR4nL\"1aB8\"c\"D6eF3gH0jS5wYxQ9mP7vK2ZtR\"4\"nL1aB8c\"D6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR4nL1\"a\"B8cD6eF3gH0jS5w\"Y\"xQ9mP7vK2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9m\"P7vK\"2\"ZtR4n\"L\"1aB8cD6e\"F\"3gH0jS5wYxQ9mP7vK2Zt\"R\"4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"m\"P7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7vK2Zt\"R4nL1aB8c\"D6\"eF3gH0jS\"5wYxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF\"3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH\"0jS\"5wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8cD6eF3gH0jS5w\"YxQ\"9mP\"7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1a\"B8cD6\"eF3gH\"0jS\"5wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD6\"eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F\"3gH0jS5wY\"xQ\"9mP7vK2Z\"tR4nL\"1aB8cD6eF3gH0\"jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9m\"P7vK2\"ZtR4nL\"1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF3gH0j\"S5w\"YxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5\"wYxQ9mP7v\"K2ZtR4n\"L1\"aB8cD6e\"F3gH\"0jS5wYxQ9\"m\"P7vK2ZtR4nL\"1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4\"nL1aB\"8cD\"6eF3g\"H0j\"S5wYxQ9\"mP7v\"K2ZtR4nL\"1aB8c\"D6eF3gH0jS\"5wY\"xQ9mP7vK2Z\"tR4n\"L1aB8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5\"wYxQ9mP\"7\"vK2ZtR4nL1aB8cD6\"e\"F3gH0jS5wYxQ9mP7\"vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS5\"wYxQ9mP7vK2ZtR4\"nL1a\"B8cD6eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1\"a\"B8cD6eF3\"gH\"0jS5wYxQ9\"mP7vK2Z\"tR4nL1a\"B8cD6eF3gH\"0jS5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1\"aB8cD6eF\"3gH0j\"S5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6\"eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL\"1aB8c\"D6eF3\"gH0jS5wY\"xQ9\"mP7\"v\"K2ZtR4\"n\"L1aB\"8cD\"6eF3gH0jS\"5wYxQ\"9mP7vK2Zt\"R4nL1a\"B8cD6eF3gH\"0jS5wYxQ\"9mP7vK2ZtR\"4nL1aB8c\"D6eF\"3gH0j\"S5wY\"x\"Q9mP7vK2Zt\"R\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4nL1aB\"8\"cD6eF3gH0jS5wYx\"Q\"9mP7vK2ZtR\"4nL1aB\"8cD6eF3gH0jS5\"wYxQ9mP7\"vK2Z\"t\"R4nL1a\"B\"8cD6eF3g\"H\"0jS5wYxQ9mP7vK2ZtR4n\"L\"1aB8cD6eF3\"g\"H0jS5wYxQ9mP7\"v\"K2ZtR4nL1\"aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3\"gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8c\"D6e\"F3g\"H0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4nL\"1aB\"8cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Zt\"R4nL1\"aB8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2\"ZtR\"4nL1a\"B8cD6\"eF3\"gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3g\"H0jS5\"wYxQ9m\"P7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7\"vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5w\"YxQ\"9mP\"7vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2\"ZtR4n\"L1aB8c\"D6eF3g\"H0jS5wY\"xQ9mP7vK2\"ZtR4nL\"1aB8cD6\"eF3\"gH0jS5wYxQ\"9mP\"7vK\"2ZtR4n\"L1aB8cD6eF3gH\"0jS5wYxQ\"9mP\"7vK2ZtR4n\"L1aB8cD\"6e\"F3gH0jS\"5wYx\"Q9mP7vK2Z\"t\"R4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB\"8c\"D6eF3\"gH0\"jS5wY\"xQ9\"mP7vK2Z\"tR4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9m\"P7v\"K2ZtR4nL1a\"B8cD\"6eF3gH0jS5wYxQ9m\"P7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2ZtR\"4\"nL1aB8cD6eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL1\"aB8\"cD6e\"F3gH0\"jS5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF\"3gH0jS5wYx\"Q9mP7v\"K2ZtR4nL1\"a\"B8cD6eF3gH0jS\"5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL1\"aB8\"cD6eF3gH0\"j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6e\"F\"3gH0jS5wYxQ9mP7\"vK2\"ZtR4nL1aB\"8\"cD6eF3gH\"0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1aB8cD\"6eF\"3gH0jS\"5w\"YxQ9\"mP7vK2ZtR4n\"L1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8\"c\"D6eF3g\"H0jS5wYxQ9\"mP7vK\"2ZtR4nL1aB8\"cD6eF3gH0jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8cD6\"eF3gH0jS5wYx\"Q9mP7vK2ZtR\"4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3gH0jS5\"wYxQ9mP7v\"K2ZtR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR4nL1a\"B8cD6eF3g\"H0jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL1\"a\"B8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6eF3\"gH0\"jS5wYxQ\"9mP\"7vK2ZtR4n\"L1a\"B8cD6eF3\"gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1aB\"8\"cD6eF\"3\"gH0jS5w\"YxQ9mP7v\"K2ZtR4nL1\"aB8cD6\"eF3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wYxQ9mP7vK\"2ZtR\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9mP\"7vK2ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4\"n\"L1aB8c\"D\"6eF3gH0\"jS5wYxQ9\"mP7vK2ZtR\"4nL1aB\"8cD6eF3g\"H0j\"S5wYxQ9mP\"7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0jS5wYxQ9m\"P7v\"K2ZtR4n\"L1aB8cD6\"eF3gH0jS5\"wYxQ9m\"P7vK2ZtR\"4nL\"1aB8cD6eF\"3gH0j\"S5wYxQ9mP\"7\"vK2ZtR\"4\"nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD\"6eF\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9mP\"7vK2ZtR4n\"L\"1aB8cD6\"e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6eF3gH0jS5\"wYx\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6e\"F\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR\"4nL1aB8cD\"6eF\"3gH0jS5w\"YxQ\"9mP7vK2Zt\"R4nL1\"aB8cD6eF3\"g\"H0jS5w\"Y\"xQ9mP7v\"K2ZtR4nL\"1aB8cD6eF\"3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8c\"D6eF3gH0jS5wYxQ\"9mP\"7vK2ZtR4nL1\"aB8\"cD6eF3g\"H0jS5wYx\"Q9mP7vK2Z\"tR4nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4nL\"1a\"B8cD6eF3gH0\"jS5w\"YxQ9mP7vK\"2\"ZtR4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6eF\"3\"gH0jS5w\"YxQ\"9mP7vK2Zt\"R4n\"L1aB8cD6\"eF3\"gH0jS5wYx\"Q9m\"P7vK2ZtR4nL1aB8\"cD6\"eF3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wY\"xQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF3g\"H\"0jS5wY\"x\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD6eF3gH0\"jS5\"wYxQ9mP7vK2\"ZtR\"4nL1aB8\"cD6\"eF3gH0jS5\"wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD\"6eF3g\"H0jS5wYxQ\"9\"mP7vK2Z\"t\"R4nL1aB\"8cD\"6eF3gH0jS\"5wY\"xQ9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5wYxQ9mP\"7vK\"2ZtR4nL1aB8\"cD6\"eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8\"cD6\"eF3gH0jS5\"wYxQ9\"mP7vK2ZtR\"4\"nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9mP\"7vK2ZtR4n\"L1aB8c\"D6eF3gH0\"jS5\"wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6eF3\"gH0\"jS5wYxQ9mP7\"vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP\"7v\"K2ZtR4nL1aB8c\"D6eF\"3gH0jS5wY\"x\"Q9mP7\"v\"K2ZtR4n\"L1aB8cD6eF\"3gH0jS5wY\"xQ9mP7v\"K2ZtR4nL\"1aB\"8cD6eF3gH\"0jS\"5wYxQ9mP7vK2ZtR\"4nL\"1aB8cD6eF3g\"H0jS5\"wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8cD6\"eF3gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8\"cD\"6eF3g\"H0jS5\"wYxQ9mP7vK2\"ZtR4n\"L1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2\"Zt\"R4nL1\"aB8cD6e\"F3gH0j\"S5wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD6eF\"3gH0\"jS5wYxQ9\"mP\"7vK2ZtR4\"nL1aB\"8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB\"8cD\"6eF3gH0jS\"5wYx" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "Q9mP7vK2ZtR4nL1aB8cD6", "moduleId": "eF3gH0jS5wY" }, "customerInfo": { "customerId": "xQ9mP7vK2Zt", "deviceId": "R4nL1aB8cD6eF3gH0jS5w", "lineId": "YxQ9mP7vK2ZtR4", "publicIp": "nL1aB8cD6eF3" } } }, { "_index": "gH0jS5wYxQ9mP7vK2Zt", "_source": { "kafka": { "eventId": "R4nL1aB8cD6e", "moduleId": "F3gH0jS5w" }, "customerInfo": { "customerId": "YxQ9mP7vK2Z", "deviceId": "tR4nL1aB8cD6eF3gH0jS5", "lineId": "wYxQ9mP7vK2ZtR", "publicIp": "4nL1aB8cD6eF" }, "eventData": { "__original": "3\"gH0jS5w\"Yx\"Q9m\"P\"7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2\"Z\"tR4nL1aB 8cD6eF 3g H0jS5wYx\"Q\"9mP7vK2ZtR4nL1aB8c\"D6eF3\"gH0jS5wY\"xQ9mP7\"vK2ZtR\"4nL1aB8\"cD6eF3gH0jS5wYxQ9mP7vK\"2ZtR\"4nL1aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2ZtR4n\"L1aB8cD\"6eF3gH\"0\"jS5wYxQ\"9\"mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0\"j\"S5wYxQ9\"m\"P7vK2ZtR4nL1\"a\"B8cD6eF3g\"H\"0jS5wYxQ9mP7\"v\"K2ZtR4n\"L\"1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2ZtR4nL1aB\"8cD6e\"F3gH0jS5wYx\"Q9mP7\"vK2ZtR4nL1\"aB8cD6" } } }, { "_source": { "eventData": { "__original": "e\"F3gH0jS\"5w\"YxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR\"4nL1aB8cD6eF3g\"H0j\"S5wYxQ9m\"P7v\"K2ZtR\"4\"nL1aB8cD 6eF3gH 0j S5wYxQ9mP7v K\"2\"ZtR4nL1aB8cD6eF3gH\"0jS5w\"YxQ9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3g\"H0jS5wYxQ9mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB8cD\"6eF3gH0\"jS5wYx\"Q\"9mP7vK2\"Z\"tR4nL1aB8cD6\"eF3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL\"1\"aB8cD6eF3gH0\"j\"S5wYxQ9mP\"7\"vK2ZtR4nL1aB\"8\"cD6eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7\"vK2ZtR4nL1a\"B8cD\"6eF3gH0jS5wY\"xQ\"9mP7vK2Z\"t\"R4n\"L\"1aB8cD6eF3gH0jS\"5wYxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF3gH\"0jS5wYx\"Q9\"mP7vK2Zt\"R\"4nL1a\"B8c\"D6eF3gH0jS\"5wYxQ9m" }, "customerInfo": { "customerId": "P7vK2ZtR4nL", "deviceId": "1aB8cD6eF3gH0jS5wYxQ9", "lineId": "mP7vK2ZtR4nL1a", "publicIp": "B8cD6eF3gH0j" }, "kafka": { "eventId": "S5wYxQ9mP7vK", "moduleId": "2ZtR4nL1a" } } }, { "_source": { "@timestamp": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "eventData": { "__original": "L\"1aB8cD6eF3gH0jS5w\"YxQ9m\"P7vK2ZtR4nL1aB8cD6e\"F3gH0jS\"5wYxQ9mP7vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2Zt\"R4nL1aB8\"cD6eF" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "3gH0jS5w", "moduleId": "YxQ9mP7vK" }, "@Version": "2", "customerInfo": { "customerId": "ZtR4nL1aB8c", "deviceId": "D6eF3gH0jS5wYxQ9mP7vK", "lineId": "2ZtR4nL1aB8cD6", "publicIp": "eF3gH0jS5wYx" } } } ], "pipeline": { "processors": [ { "rename": { "field": "Q9mP7vK2ZtR4nL1aB8cD", "target_field": "6eF3gH0jS5wYxQ" } }, { "lowercase": { "field": "9mP7vK2ZtR4nL1", "target_field": "aB8cD6eF3gH", "ignore_missing": true } }, { "set": { "field": "0jS5wYxQ9mP7", "copy_from": "vK2ZtR4nL1aB8", "ignore_empty_value": true } }, { "set": { "field": "cD6eF3gH0", "copy_from": "jS5wYxQ9mP7vK2ZtR4nL1", "ignore_empty_value": true } }, { "script": { "source": """ aB8 cD6eF3gH0j S 5wYxQ9mP7vK2ZtR4 nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP""", "if": "7vK2ZtR4nL1aB8cD 6e F3gH 0j S5wYxQ9mP7vK2ZtR4nL 1a B8cD" } }, { "script": { "description": "6eF3gH0 jS5wYxQ9 mP 7vK2ZtR4nL1 aB8cD6e F3gH 0jS", "source": "5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "if": "S5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF 3gH0 jS 5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 gH0jS5wYxQ 9mP7vK2" } }, { "set": { "field": "ZtR4nL1aB8cD6e", "copy_from": "F3gH0jS5wYxQ9mP7vK2", "ignore_empty_value": true } }, { "set": { "field": "ZtR4nL1aB8cD6", "copy_from": "eF3gH0jS5wYxQ9mP7vK2Zt", "ignore_empty_value": true } }, { "rename": { "field": "R4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2Zt", "ignore_missing": true } }, { "script": { "source": """ R4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0 jS5wYxQ9mP7v """, "if": "K2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2Zt R4 nL1a" } }, { "rename": { "field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "target_field": "eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF", "target_field": "3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3", "target_field": "gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "ignore_missing": true } }, { "rename": { "field": "eF3gH0jS5wYxQ9mP7v", "target_field": "K2ZtR4nL1aB8cD6eF3gH0jS5w", "ignore_missing": true } }, { "rename": { "field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3g", "target_field": "H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD", "ignore_missing": true } }, { "rename": { "field": "6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a", "target_field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "ignore_missing": true } }, { "rename": { "field": "L1aB8cD6eF3gH0jS5wYxQ9mP7vK", "target_field": "2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9", "ignore_missing": true } }, { "rename": { "field": "mP7vK2ZtR4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "ignore_missing": true } }, { "script": { "description": "S5wYxQ9mP 7vK2ZtR 4nL1aB8 cD6eF 3gH 0jS5wYx Q9mP7vK 2ZtR", "lang": "4nL1aB8c", "source": """ D6 eF3gH0jS5wYxQ9mP7vK2ZtR4nL 1a B8cD6 e F3g H0j S 5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF3gH0jS5w Y xQ9mP7vK2Z tR 4nL1 a B8c D 6eF3gH0jS5w YxQ9mP7vK2ZtR4n L 1 aB8c D6eF3gH0jS5wYxQ9mP7vK 2ZtR 4nL1aB8cD6eF3gH0jS5wY xQ9mP 7vK2ZtR4nL1aB8cD6eF3g H0 jS 5wY xQ9mP7vK2ZtR4n L1 a B8cD6 eF3g H 0j S 5wYxQ9mP 7 vK2ZtR4n L1 aB8c D 6eF 3 gH0jS5wYx Q9mP7vK2ZtR4 n L 1aB8cD6e F3gH0jS5wYxQ9mP7vK2 Z tR4nL 1a B 8c D6 eF3gH0 jS5wYxQ 9m P7vK2ZtR4nL1aB8cD6eF3gH0 jS 5wYxQ 9 mP7 vK2 Z tR4nL1aB8cD6eF3gH0jS5wY xQ9mP7vK2ZtR4nL1a B 8 cD6eF3gH 0jS5wYxQ9m P7vK2Zt R4nL1aB8c D6eF3gH0j S5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3g H 0jS5wYxQ 9mP7vK2Zt R 4nL1aB8cD6eF3g H0jS5w YxQ9mP7vK2ZtR4nL1a B 8cD6eF3gH0jS5w Y xQ9mP7vK2 Z tR 4 nL 1a B8c D6eF3gH 0jS5wYxQ9m P7vK2Z tR 4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK 2Z tR4nL 1 aB8 cD6eF 3g H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD 6 eF 3gH0jS5wYxQ9mP7 vK 2ZtR4nL1aB8c D 6eF3gH0jS5w Y x Q9mP7vK2 ZtR4nL1aB8cD6 eF 3g H 0jS5wYxQ9mP7v K2 ZtR 4nL1aB8 cD6eF3gH0jS5wY xQ 9mP7vK2ZtR 4 nL1aB8cD6 eF3gH0jS5wYxQ9 mP7vK2ZtR4nL1aB 8 cD6eF3gH0 jS5wYxQ9mP7vK2 ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a B8cD6e F 3 g H0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6e F3 gH0jS 5 wYx Q9m P 7vK2ZtR4nL1aB8cD6eF3gH0jS5w YxQ9mP7vK2Z t R4nL1aB8cD6 eF 3gH0 j S5w Y xQ9mP7vK2ZtR 4nL1aB8cD6eF3g H 0jS5wYxQ9 mP7vK2ZtR4nL1aB8cD6 e F 3gH0jS5wYxQ9 mP7vK2ZtR4 nL1aB8cD6eF3g H0jS5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3gH0jS5w YxQ9mP7vK2ZtR4nL1aB8 cD6eF3gH0jS5wYxQ 9m P7 vK2ZtR4nL 1aB8c D6eF 3gH 0jS5wY xQ9mP7vK2ZtR 4n L1aB8cD6eF 3 gH 0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 g H0jS5wYxQ9mP7vK2Zt R 4nL1aB8cD6 e F """ } }, { "uri_parts": { "field": "3gH0jS5wYxQ9", "ignore_missing": true, "ignore_failure": true } }, { "append": { "field": "mP7vK2ZtR4n", "value": [ "L1aB8cD6eF3gH", "0jS5wYxQ9mP7vK2ZtR", "4nL1aB8cD6eF3", "gH0jS5wYxQ9mP7vK2", "ZtR4nL1aB8cD6" ], "allow_duplicates": false } }, { "script": { "description": "eF3gH0 jS5w YxQ9mP", "source": """ 7vK2ZtR 4nL1aB8cD6e F3 g H0 jS 5w YxQ9 mP 7 vK 2Zt R 4nL1aB 8cD6e F 3gH0 jS 5w YxQ9mP7vK2 ZtR4 n L1aB8c D6eF3gH0jS5wYxQ9mP7vK2 Zt R4nL1aB8c D6eF3g H0jS5wY xQ9mP7vK2 Zt R4n L 1aB8 cD 6e F3gH0jS5wY xQ9mP 7 vK2ZtR4 nL1aB8cD6eF3g H0 jS5wYxQ9m P7vK2Z tR4nL1aB 8cD6eF3gH 0j S5w Y xQ9mP7 vK2ZtR 4 nL1aB8cD6e """ } }, { "remove": { "field": [ "F3gH" ], "ignore_missing": true } } ] } } ``` </details> Assisted by Cursor CLI using GPT-5.2-High model --------- Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 4fa1505) # Conflicts: # src/platform/packages/shared/kbn-monaco/src/languages/console/language.ts # src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts # src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.ts # src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx
💚 All backports created successfully
Note: Successful backport PRs will be merged automatically after passing CI. Questions ?Please refer to the Backport tool documentation |
…tic#251173) Closes elastic#251172 This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs. https://github.com/user-attachments/assets/54b90fdb-f0b0-4de0-ae53-6fa4a12a98d9 Console language) **What changed** - The Console completion provider no longer calls `model.getValue()` to compute `textBeforeCursor`. - ES|QL context detection is only attempted when the cursor is within a `POST /_query` (or `POST _query/async`) request. - When it *is* a `_query` request, the provider reads only the relevant slice via `model.getValueInRange()` (from the request line to the cursor). - For all other requests (or when no request line is found within a bounded lookback), completion delegates to the existing actions provider. **Why** - `model.getValue()` materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI. - ES|QL completion only makes sense for `_query` requests; scoping the work avoids paying the cost for non-ES|QL traffic. **Why this approach** - We preserve existing completion behavior by delegating to the actions provider, but avoid the pathological cost by restricting work to a small, semantically relevant window. (`checkForTripleQuotesAndEsqlQuery`) **What changed** - `checkForTripleQuotesAndEsqlQuery` was rewritten to scan the text once and avoid repeated substring+regex work inside the main loop. **Why** - The previous approach could become super-linear on adversarial inputs (many quotes / many potential toggles), which is exactly what large JSON payloads tend to contain. - In the worst case, this turns “type one character” into “do a huge amount of CPU work”, producing the freeze. **Why this approach** - A single forward scan preserves semantics while making the runtime scale predictably with input size. keystroke (`shared-ux` React Monaco editor) **What changed** - The `onDidChangeModelContent` handler computes the next value by applying `event.changes` to a shadow string (`lastKnownValueRef`) instead of calling `editor.getValue()`. - Controlled-mode syncing (`useLayoutEffect`) first compares the incoming `value` against the shadow value to avoid unnecessary full-buffer reads. **Why** - `editor.getValue()` materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models. - Applying incremental changes keeps the per-keystroke cost proportional to the change set, not the document size. **Why this approach** - Monaco already provides the exact edit deltas (`IModelContentChangedEvent.changes`). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads. - **`language.test.ts`**: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model. - **`autocomplete_utils.test.ts`**: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance). - **`editor.test.tsx`**: verifies the incremental `onChange` value computation (including multi-change ordering) and controlled sync behavior. - `node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.js` - `node scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.js` - Open `DevTools -> Console`. - Expand the `<details>` block below and paste the payload into the editor. - Click at the very end of the pasted content and type a few characters. - Verify the editor remains responsive (no multi-second freeze / hang), and typed characters appear immediately. - Optional: place the cursor inside a `""" ... """` block and type to ensure autocomplete remains responsive. <details> <summary>Sanitized reproduction payload (paste into DevTools Console)</summary> ```http POST _ingest/pipeline/_simulate { "docs": [ { "_source": { "@timestamp": "xQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS", "eventData": { "__original": "5\"wYxQ9mP7vK\"2Zt\"R4nL1aB8c\"D\"6eF3gH\"0\"jS5wYxQ9\"mP\"7vK2ZtR4n\"L1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8c\"D6eF3gH\"0jS5wYxQ9m\"P7vK2ZtR4\"nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Z\"tR4nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Zt\"R4nL1a\"B8cD6eF\"3gH0j\"S5wYxQ9\"m\"P7vK2ZtR4nL1aB8c\"D6\"eF3gH\"0jS5w\"YxQ9mP7v\"K2Z\"tR4\"n\"L1aB8\"c\"D6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B8cD\"6eF3gH0jS5\"wYxQ9mP\"7vK2ZtR4nL\"1aB8cD6\"eF3g\"H0jS5\"wYxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3g\"H\"0jS5wYx\"Q9mP7v\"K2ZtR4n\"L1aB8c\"D6eF3gH\"0\"jS5wYxQ9mP7vK2Z\"t\"R4nL1aB8cD\"6eF3gH\"0jS5wYxQ9mP7v\"K2ZtR4n\"L1aB\"8\"cD6eF\"3\"gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8cD\"6\"eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"n\"L1aB8cD6e\"F3g\"H0jS5wYxQ9mP7vK2ZtR\"4nL1aB8cD\"6eF3gH0jS\"5w\"YxQ9mP7v\"K2ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wY\"xQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4n\"L1aB8\"cD6eF\"3gH\"0jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB8\"cD6eF\"3gH0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1a\"B8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP\"7vK2Z\"tR4nL\"1aB\"8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4nL\"1aB8c\"D6eF3\"gH0\"jS5wYx\"Q9mP7\"vK2ZtR\"4nL1aB8cD\"6\"eF3gH0jS5wYxQ\"9\"mP7vK2ZtR\"4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9mP7v\"K2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1\"aB8cD\"6eF3gH\"0jS5wY\"xQ9mP7\"vK2ZtR4nL\"1aB8c\"D6eF3gH\"0jS\"5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4\"nL\\1a\\\"\\B8cD6\"e\"F3gH\"0jS\"5wYxQ9mP7\"vK2Zt\"R4nL1aB8c\"D6eF3\"gH0jS5wYxQ\"9mP7vK2\"ZtR4nL1aB8\"cD6eF3g\"H0jS\"5wYxQ\"9mP7\"v\"K2ZtR4nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1aB\"8cD6eF3\"g\"H0jS5wYxQ9mP7vK\"2\"ZtR4nL1aB8\"cD6eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL1\"a\"B8cD6e\"F\"3gH0jS5w\"Y\"xQ9mP7vK2ZtR4nL1aB8c\"D\"6eF3gH0jS5\"w\"YxQ9mP7vK2ZtR\"4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7vK2Zt\"R4nL1aB8c\"D6eF3gH0j\"S5\"wYxQ9mP7\"vK2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5w\"YxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL1\"aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5w\"YxQ9m\"P7vK2Z\"tR4nL1aB8\"c\"D6eF3gH0jS5wY\"x\"Q9mP7vK2Z\"tR\"4nL1aB8c\"D6eF3\"gH0jS5wYxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3\"gH0jS\"5wYxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4\"nL1aB\"8cD6eF\"3gH0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5wYxQ9m\"P7v\"K2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B\"8cD6eF\"3\"gH0j\"S5w\"YxQ9mP7vK\"2ZtR4\"nL1aB8cD6\"eF3gH0j\"S5wYxQ9mP7\"vK2ZtR4\"nL1aB8cD6e\"F3gH0jS\"5wYx\"Q9mP7\"vK2Z\"t\"R4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR4nL1a\"B8cD6eF\"3gH0jS5wYx\"Q9mP7vK\"2\"ZtR4nL1aB8cD6eF\"3\"gH0jS5wYxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5w\"Y\"xQ9mP\"7\"vK2ZtR4n\"L\"1aB8cD6eF3gH0jS5wYxQ\"9\"mP7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7v\"K2ZtR4nL1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2Zt\"R4\"nL1aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5wY\"xQ9\"mP7vK\"2ZtR4\"nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS5\"wYxQ9\"mP7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0j\"S5w\"YxQ9m\"P7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4n\"L1aB8\"cD6eF3\"gH0jS5wYx\"Q\"9mP7vK2ZtR4nL\"1\"aB8cD6eF3\"gH\"0jS5wYxQ\"9mP7v\"K2ZtR4nL1aB8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0j\"S5wYx\"Q9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR\"4nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL\"1aB8cD6eF\"3gH\"0\"jS5wYx\"Q\"9mP7\"vK2\"ZtR4nL1aB\"8cD6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4n\"L1aB8cD6\"eF3gH0jS5w\"YxQ9mP7\"vK2Z\"tR4nL\"1aB8\"c\"D6eF3gH0jS5wYxQ9mP7vK2ZtR\"4\"nL1aB8c\"D6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR4nL1\"a\"B8cD6eF3gH0jS5w\"Y\"xQ9mP7vK2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9m\"P7vK\"2\"ZtR4n\"L\"1aB8cD6e\"F\"3gH0jS5wYxQ9mP7vK2Zt\"R\"4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"m\"P7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7vK2Zt\"R4nL1aB8c\"D6\"eF3gH0jS\"5wYxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF\"3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH\"0jS\"5wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8cD6eF3gH0jS5w\"YxQ\"9mP\"7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1a\"B8cD6\"eF3gH\"0jS\"5wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD6\"eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F\"3gH0jS5wY\"xQ\"9mP7vK2Z\"tR4nL\"1aB8cD6eF3gH0\"jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9m\"P7vK2\"ZtR4nL\"1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF3gH0j\"S5w\"YxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5\"wYxQ9mP7v\"K2ZtR4n\"L1\"aB8cD6e\"F3gH\"0jS5wYxQ9\"m\"P7vK2ZtR4nL\"1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4\"nL1aB\"8cD\"6eF3g\"H0j\"S5wYxQ9\"mP7v\"K2ZtR4nL\"1aB8c\"D6eF3gH0jS\"5wY\"xQ9mP7vK2Z\"tR4n\"L1aB8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5\"wYxQ9mP\"7\"vK2ZtR4nL1aB8cD6\"e\"F3gH0jS5wYxQ9mP7\"vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS5\"wYxQ9mP7vK2ZtR4\"nL1a\"B8cD6eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1\"a\"B8cD6eF3\"gH\"0jS5wYxQ9\"mP7vK2Z\"tR4nL1a\"B8cD6eF3gH\"0jS5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1\"aB8cD6eF\"3gH0j\"S5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6\"eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL\"1aB8c\"D6eF3\"gH0jS5wY\"xQ9\"mP7\"v\"K2ZtR4\"n\"L1aB\"8cD\"6eF3gH0jS\"5wYxQ\"9mP7vK2Zt\"R4nL1a\"B8cD6eF3gH\"0jS5wYxQ\"9mP7vK2ZtR\"4nL1aB8c\"D6eF\"3gH0j\"S5wY\"x\"Q9mP7vK2Zt\"R\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4nL1aB\"8\"cD6eF3gH0jS5wYx\"Q\"9mP7vK2ZtR\"4nL1aB\"8cD6eF3gH0jS5\"wYxQ9mP7\"vK2Z\"t\"R4nL1a\"B\"8cD6eF3g\"H\"0jS5wYxQ9mP7vK2ZtR4n\"L\"1aB8cD6eF3\"g\"H0jS5wYxQ9mP7\"v\"K2ZtR4nL1\"aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3\"gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8c\"D6e\"F3g\"H0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4nL\"1aB\"8cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Zt\"R4nL1\"aB8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2\"ZtR\"4nL1a\"B8cD6\"eF3\"gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3g\"H0jS5\"wYxQ9m\"P7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7\"vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5w\"YxQ\"9mP\"7vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2\"ZtR4n\"L1aB8c\"D6eF3g\"H0jS5wY\"xQ9mP7vK2\"ZtR4nL\"1aB8cD6\"eF3\"gH0jS5wYxQ\"9mP\"7vK\"2ZtR4n\"L1aB8cD6eF3gH\"0jS5wYxQ\"9mP\"7vK2ZtR4n\"L1aB8cD\"6e\"F3gH0jS\"5wYx\"Q9mP7vK2Z\"t\"R4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB\"8c\"D6eF3\"gH0\"jS5wY\"xQ9\"mP7vK2Z\"tR4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9m\"P7v\"K2ZtR4nL1a\"B8cD\"6eF3gH0jS5wYxQ9m\"P7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2ZtR\"4\"nL1aB8cD6eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL1\"aB8\"cD6e\"F3gH0\"jS5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF\"3gH0jS5wYx\"Q9mP7v\"K2ZtR4nL1\"a\"B8cD6eF3gH0jS\"5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL1\"aB8\"cD6eF3gH0\"j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6e\"F\"3gH0jS5wYxQ9mP7\"vK2\"ZtR4nL1aB\"8\"cD6eF3gH\"0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1aB8cD\"6eF\"3gH0jS\"5w\"YxQ9\"mP7vK2ZtR4n\"L1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8\"c\"D6eF3g\"H0jS5wYxQ9\"mP7vK\"2ZtR4nL1aB8\"cD6eF3gH0jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8cD6\"eF3gH0jS5wYx\"Q9mP7vK2ZtR\"4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3gH0jS5\"wYxQ9mP7v\"K2ZtR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR4nL1a\"B8cD6eF3g\"H0jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL1\"a\"B8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6eF3\"gH0\"jS5wYxQ\"9mP\"7vK2ZtR4n\"L1a\"B8cD6eF3\"gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1aB\"8\"cD6eF\"3\"gH0jS5w\"YxQ9mP7v\"K2ZtR4nL1\"aB8cD6\"eF3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wYxQ9mP7vK\"2ZtR\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9mP\"7vK2ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4\"n\"L1aB8c\"D\"6eF3gH0\"jS5wYxQ9\"mP7vK2ZtR\"4nL1aB\"8cD6eF3g\"H0j\"S5wYxQ9mP\"7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0jS5wYxQ9m\"P7v\"K2ZtR4n\"L1aB8cD6\"eF3gH0jS5\"wYxQ9m\"P7vK2ZtR\"4nL\"1aB8cD6eF\"3gH0j\"S5wYxQ9mP\"7\"vK2ZtR\"4\"nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD\"6eF\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9mP\"7vK2ZtR4n\"L\"1aB8cD6\"e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6eF3gH0jS5\"wYx\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6e\"F\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR\"4nL1aB8cD\"6eF\"3gH0jS5w\"YxQ\"9mP7vK2Zt\"R4nL1\"aB8cD6eF3\"g\"H0jS5w\"Y\"xQ9mP7v\"K2ZtR4nL\"1aB8cD6eF\"3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8c\"D6eF3gH0jS5wYxQ\"9mP\"7vK2ZtR4nL1\"aB8\"cD6eF3g\"H0jS5wYx\"Q9mP7vK2Z\"tR4nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4nL\"1a\"B8cD6eF3gH0\"jS5w\"YxQ9mP7vK\"2\"ZtR4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6eF\"3\"gH0jS5w\"YxQ\"9mP7vK2Zt\"R4n\"L1aB8cD6\"eF3\"gH0jS5wYx\"Q9m\"P7vK2ZtR4nL1aB8\"cD6\"eF3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wY\"xQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF3g\"H\"0jS5wY\"x\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD6eF3gH0\"jS5\"wYxQ9mP7vK2\"ZtR\"4nL1aB8\"cD6\"eF3gH0jS5\"wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD\"6eF3g\"H0jS5wYxQ\"9\"mP7vK2Z\"t\"R4nL1aB\"8cD\"6eF3gH0jS\"5wY\"xQ9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5wYxQ9mP\"7vK\"2ZtR4nL1aB8\"cD6\"eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8\"cD6\"eF3gH0jS5\"wYxQ9\"mP7vK2ZtR\"4\"nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9mP\"7vK2ZtR4n\"L1aB8c\"D6eF3gH0\"jS5\"wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6eF3\"gH0\"jS5wYxQ9mP7\"vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP\"7v\"K2ZtR4nL1aB8c\"D6eF\"3gH0jS5wY\"x\"Q9mP7\"v\"K2ZtR4n\"L1aB8cD6eF\"3gH0jS5wY\"xQ9mP7v\"K2ZtR4nL\"1aB\"8cD6eF3gH\"0jS\"5wYxQ9mP7vK2ZtR\"4nL\"1aB8cD6eF3g\"H0jS5\"wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8cD6\"eF3gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8\"cD\"6eF3g\"H0jS5\"wYxQ9mP7vK2\"ZtR4n\"L1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2\"Zt\"R4nL1\"aB8cD6e\"F3gH0j\"S5wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD6eF\"3gH0\"jS5wYxQ9\"mP\"7vK2ZtR4\"nL1aB\"8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB\"8cD\"6eF3gH0jS\"5wYx" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "Q9mP7vK2ZtR4nL1aB8cD6", "moduleId": "eF3gH0jS5wY" }, "customerInfo": { "customerId": "xQ9mP7vK2Zt", "deviceId": "R4nL1aB8cD6eF3gH0jS5w", "lineId": "YxQ9mP7vK2ZtR4", "publicIp": "nL1aB8cD6eF3" } } }, { "_index": "gH0jS5wYxQ9mP7vK2Zt", "_source": { "kafka": { "eventId": "R4nL1aB8cD6e", "moduleId": "F3gH0jS5w" }, "customerInfo": { "customerId": "YxQ9mP7vK2Z", "deviceId": "tR4nL1aB8cD6eF3gH0jS5", "lineId": "wYxQ9mP7vK2ZtR", "publicIp": "4nL1aB8cD6eF" }, "eventData": { "__original": "3\"gH0jS5w\"Yx\"Q9m\"P\"7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2\"Z\"tR4nL1aB 8cD6eF 3g H0jS5wYx\"Q\"9mP7vK2ZtR4nL1aB8c\"D6eF3\"gH0jS5wY\"xQ9mP7\"vK2ZtR\"4nL1aB8\"cD6eF3gH0jS5wYxQ9mP7vK\"2ZtR\"4nL1aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2ZtR4n\"L1aB8cD\"6eF3gH\"0\"jS5wYxQ\"9\"mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0\"j\"S5wYxQ9\"m\"P7vK2ZtR4nL1\"a\"B8cD6eF3g\"H\"0jS5wYxQ9mP7\"v\"K2ZtR4n\"L\"1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2ZtR4nL1aB\"8cD6e\"F3gH0jS5wYx\"Q9mP7\"vK2ZtR4nL1\"aB8cD6" } } }, { "_source": { "eventData": { "__original": "e\"F3gH0jS\"5w\"YxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR\"4nL1aB8cD6eF3g\"H0j\"S5wYxQ9m\"P7v\"K2ZtR\"4\"nL1aB8cD 6eF3gH 0j S5wYxQ9mP7v K\"2\"ZtR4nL1aB8cD6eF3gH\"0jS5w\"YxQ9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3g\"H0jS5wYxQ9mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB8cD\"6eF3gH0\"jS5wYx\"Q\"9mP7vK2\"Z\"tR4nL1aB8cD6\"eF3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL\"1\"aB8cD6eF3gH0\"j\"S5wYxQ9mP\"7\"vK2ZtR4nL1aB\"8\"cD6eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7\"vK2ZtR4nL1a\"B8cD\"6eF3gH0jS5wY\"xQ\"9mP7vK2Z\"t\"R4n\"L\"1aB8cD6eF3gH0jS\"5wYxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF3gH\"0jS5wYx\"Q9\"mP7vK2Zt\"R\"4nL1a\"B8c\"D6eF3gH0jS\"5wYxQ9m" }, "customerInfo": { "customerId": "P7vK2ZtR4nL", "deviceId": "1aB8cD6eF3gH0jS5wYxQ9", "lineId": "mP7vK2ZtR4nL1a", "publicIp": "B8cD6eF3gH0j" }, "kafka": { "eventId": "S5wYxQ9mP7vK", "moduleId": "2ZtR4nL1a" } } }, { "_source": { "@timestamp": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "eventData": { "__original": "L\"1aB8cD6eF3gH0jS5w\"YxQ9m\"P7vK2ZtR4nL1aB8cD6e\"F3gH0jS\"5wYxQ9mP7vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2Zt\"R4nL1aB8\"cD6eF" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "3gH0jS5w", "moduleId": "YxQ9mP7vK" }, "@Version": "2", "customerInfo": { "customerId": "ZtR4nL1aB8c", "deviceId": "D6eF3gH0jS5wYxQ9mP7vK", "lineId": "2ZtR4nL1aB8cD6", "publicIp": "eF3gH0jS5wYx" } } } ], "pipeline": { "processors": [ { "rename": { "field": "Q9mP7vK2ZtR4nL1aB8cD", "target_field": "6eF3gH0jS5wYxQ" } }, { "lowercase": { "field": "9mP7vK2ZtR4nL1", "target_field": "aB8cD6eF3gH", "ignore_missing": true } }, { "set": { "field": "0jS5wYxQ9mP7", "copy_from": "vK2ZtR4nL1aB8", "ignore_empty_value": true } }, { "set": { "field": "cD6eF3gH0", "copy_from": "jS5wYxQ9mP7vK2ZtR4nL1", "ignore_empty_value": true } }, { "script": { "source": """ aB8 cD6eF3gH0j S 5wYxQ9mP7vK2ZtR4 nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP""", "if": "7vK2ZtR4nL1aB8cD 6e F3gH 0j S5wYxQ9mP7vK2ZtR4nL 1a B8cD" } }, { "script": { "description": "6eF3gH0 jS5wYxQ9 mP 7vK2ZtR4nL1 aB8cD6e F3gH 0jS", "source": "5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "if": "S5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF 3gH0 jS 5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 gH0jS5wYxQ 9mP7vK2" } }, { "set": { "field": "ZtR4nL1aB8cD6e", "copy_from": "F3gH0jS5wYxQ9mP7vK2", "ignore_empty_value": true } }, { "set": { "field": "ZtR4nL1aB8cD6", "copy_from": "eF3gH0jS5wYxQ9mP7vK2Zt", "ignore_empty_value": true } }, { "rename": { "field": "R4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2Zt", "ignore_missing": true } }, { "script": { "source": """ R4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0 jS5wYxQ9mP7v """, "if": "K2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2Zt R4 nL1a" } }, { "rename": { "field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "target_field": "eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF", "target_field": "3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3", "target_field": "gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "ignore_missing": true } }, { "rename": { "field": "eF3gH0jS5wYxQ9mP7v", "target_field": "K2ZtR4nL1aB8cD6eF3gH0jS5w", "ignore_missing": true } }, { "rename": { "field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3g", "target_field": "H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD", "ignore_missing": true } }, { "rename": { "field": "6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a", "target_field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "ignore_missing": true } }, { "rename": { "field": "L1aB8cD6eF3gH0jS5wYxQ9mP7vK", "target_field": "2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9", "ignore_missing": true } }, { "rename": { "field": "mP7vK2ZtR4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "ignore_missing": true } }, { "script": { "description": "S5wYxQ9mP 7vK2ZtR 4nL1aB8 cD6eF 3gH 0jS5wYx Q9mP7vK 2ZtR", "lang": "4nL1aB8c", "source": """ D6 eF3gH0jS5wYxQ9mP7vK2ZtR4nL 1a B8cD6 e F3g H0j S 5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF3gH0jS5w Y xQ9mP7vK2Z tR 4nL1 a B8c D 6eF3gH0jS5w YxQ9mP7vK2ZtR4n L 1 aB8c D6eF3gH0jS5wYxQ9mP7vK 2ZtR 4nL1aB8cD6eF3gH0jS5wY xQ9mP 7vK2ZtR4nL1aB8cD6eF3g H0 jS 5wY xQ9mP7vK2ZtR4n L1 a B8cD6 eF3g H 0j S 5wYxQ9mP 7 vK2ZtR4n L1 aB8c D 6eF 3 gH0jS5wYx Q9mP7vK2ZtR4 n L 1aB8cD6e F3gH0jS5wYxQ9mP7vK2 Z tR4nL 1a B 8c D6 eF3gH0 jS5wYxQ 9m P7vK2ZtR4nL1aB8cD6eF3gH0 jS 5wYxQ 9 mP7 vK2 Z tR4nL1aB8cD6eF3gH0jS5wY xQ9mP7vK2ZtR4nL1a B 8 cD6eF3gH 0jS5wYxQ9m P7vK2Zt R4nL1aB8c D6eF3gH0j S5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3g H 0jS5wYxQ 9mP7vK2Zt R 4nL1aB8cD6eF3g H0jS5w YxQ9mP7vK2ZtR4nL1a B 8cD6eF3gH0jS5w Y xQ9mP7vK2 Z tR 4 nL 1a B8c D6eF3gH 0jS5wYxQ9m P7vK2Z tR 4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK 2Z tR4nL 1 aB8 cD6eF 3g H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD 6 eF 3gH0jS5wYxQ9mP7 vK 2ZtR4nL1aB8c D 6eF3gH0jS5w Y x Q9mP7vK2 ZtR4nL1aB8cD6 eF 3g H 0jS5wYxQ9mP7v K2 ZtR 4nL1aB8 cD6eF3gH0jS5wY xQ 9mP7vK2ZtR 4 nL1aB8cD6 eF3gH0jS5wYxQ9 mP7vK2ZtR4nL1aB 8 cD6eF3gH0 jS5wYxQ9mP7vK2 ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a B8cD6e F 3 g H0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6e F3 gH0jS 5 wYx Q9m P 7vK2ZtR4nL1aB8cD6eF3gH0jS5w YxQ9mP7vK2Z t R4nL1aB8cD6 eF 3gH0 j S5w Y xQ9mP7vK2ZtR 4nL1aB8cD6eF3g H 0jS5wYxQ9 mP7vK2ZtR4nL1aB8cD6 e F 3gH0jS5wYxQ9 mP7vK2ZtR4 nL1aB8cD6eF3g H0jS5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3gH0jS5w YxQ9mP7vK2ZtR4nL1aB8 cD6eF3gH0jS5wYxQ 9m P7 vK2ZtR4nL 1aB8c D6eF 3gH 0jS5wY xQ9mP7vK2ZtR 4n L1aB8cD6eF 3 gH 0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 g H0jS5wYxQ9mP7vK2Zt R 4nL1aB8cD6 e F """ } }, { "uri_parts": { "field": "3gH0jS5wYxQ9", "ignore_missing": true, "ignore_failure": true } }, { "append": { "field": "mP7vK2ZtR4n", "value": [ "L1aB8cD6eF3gH", "0jS5wYxQ9mP7vK2ZtR", "4nL1aB8cD6eF3", "gH0jS5wYxQ9mP7vK2", "ZtR4nL1aB8cD6" ], "allow_duplicates": false } }, { "script": { "description": "eF3gH0 jS5w YxQ9mP", "source": """ 7vK2ZtR 4nL1aB8cD6e F3 g H0 jS 5w YxQ9 mP 7 vK 2Zt R 4nL1aB 8cD6e F 3gH0 jS 5w YxQ9mP7vK2 ZtR4 n L1aB8c D6eF3gH0jS5wYxQ9mP7vK2 Zt R4nL1aB8c D6eF3g H0jS5wY xQ9mP7vK2 Zt R4n L 1aB8 cD 6e F3gH0jS5wY xQ9mP 7 vK2ZtR4 nL1aB8cD6eF3g H0 jS5wYxQ9m P7vK2Z tR4nL1aB 8cD6eF3gH 0j S5w Y xQ9mP7 vK2ZtR 4 nL1aB8cD6e """ } }, { "remove": { "field": [ "F3gH" ], "ignore_missing": true } } ] } } ``` </details> Assisted by Cursor CLI using GPT-5.2-High model --------- Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 4fa1505)
|
Looks like this PR has backport PRs but they still haven't been merged. Please merge them ASAP to keep the branches relatively in sync. |
…tic#251173) Closes elastic#251172 This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs. https://github.com/user-attachments/assets/54b90fdb-f0b0-4de0-ae53-6fa4a12a98d9 Console language) **What changed** - The Console completion provider no longer calls `model.getValue()` to compute `textBeforeCursor`. - ES|QL context detection is only attempted when the cursor is within a `POST /_query` (or `POST _query/async`) request. - When it *is* a `_query` request, the provider reads only the relevant slice via `model.getValueInRange()` (from the request line to the cursor). - For all other requests (or when no request line is found within a bounded lookback), completion delegates to the existing actions provider. **Why** - `model.getValue()` materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI. - ES|QL completion only makes sense for `_query` requests; scoping the work avoids paying the cost for non-ES|QL traffic. **Why this approach** - We preserve existing completion behavior by delegating to the actions provider, but avoid the pathological cost by restricting work to a small, semantically relevant window. (`checkForTripleQuotesAndEsqlQuery`) **What changed** - `checkForTripleQuotesAndEsqlQuery` was rewritten to scan the text once and avoid repeated substring+regex work inside the main loop. **Why** - The previous approach could become super-linear on adversarial inputs (many quotes / many potential toggles), which is exactly what large JSON payloads tend to contain. - In the worst case, this turns “type one character” into “do a huge amount of CPU work”, producing the freeze. **Why this approach** - A single forward scan preserves semantics while making the runtime scale predictably with input size. keystroke (`shared-ux` React Monaco editor) **What changed** - The `onDidChangeModelContent` handler computes the next value by applying `event.changes` to a shadow string (`lastKnownValueRef`) instead of calling `editor.getValue()`. - Controlled-mode syncing (`useLayoutEffect`) first compares the incoming `value` against the shadow value to avoid unnecessary full-buffer reads. **Why** - `editor.getValue()` materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models. - Applying incremental changes keeps the per-keystroke cost proportional to the change set, not the document size. **Why this approach** - Monaco already provides the exact edit deltas (`IModelContentChangedEvent.changes`). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads. - **`language.test.ts`**: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model. - **`autocomplete_utils.test.ts`**: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance). - **`editor.test.tsx`**: verifies the incremental `onChange` value computation (including multi-change ordering) and controlled sync behavior. - `node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.js` - `node scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.js` - Open `DevTools -> Console`. - Expand the `<details>` block below and paste the payload into the editor. - Click at the very end of the pasted content and type a few characters. - Verify the editor remains responsive (no multi-second freeze / hang), and typed characters appear immediately. - Optional: place the cursor inside a `""" ... """` block and type to ensure autocomplete remains responsive. <details> <summary>Sanitized reproduction payload (paste into DevTools Console)</summary> ```http POST _ingest/pipeline/_simulate { "docs": [ { "_source": { "@timestamp": "xQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS", "eventData": { "__original": "5\"wYxQ9mP7vK\"2Zt\"R4nL1aB8c\"D\"6eF3gH\"0\"jS5wYxQ9\"mP\"7vK2ZtR4n\"L1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8c\"D6eF3gH\"0jS5wYxQ9m\"P7vK2ZtR4\"nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Z\"tR4nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Zt\"R4nL1a\"B8cD6eF\"3gH0j\"S5wYxQ9\"m\"P7vK2ZtR4nL1aB8c\"D6\"eF3gH\"0jS5w\"YxQ9mP7v\"K2Z\"tR4\"n\"L1aB8\"c\"D6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B8cD\"6eF3gH0jS5\"wYxQ9mP\"7vK2ZtR4nL\"1aB8cD6\"eF3g\"H0jS5\"wYxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3g\"H\"0jS5wYx\"Q9mP7v\"K2ZtR4n\"L1aB8c\"D6eF3gH\"0\"jS5wYxQ9mP7vK2Z\"t\"R4nL1aB8cD\"6eF3gH\"0jS5wYxQ9mP7v\"K2ZtR4n\"L1aB\"8\"cD6eF\"3\"gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8cD\"6\"eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"n\"L1aB8cD6e\"F3g\"H0jS5wYxQ9mP7vK2ZtR\"4nL1aB8cD\"6eF3gH0jS\"5w\"YxQ9mP7v\"K2ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wY\"xQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4n\"L1aB8\"cD6eF\"3gH\"0jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB8\"cD6eF\"3gH0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1a\"B8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP\"7vK2Z\"tR4nL\"1aB\"8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4nL\"1aB8c\"D6eF3\"gH0\"jS5wYx\"Q9mP7\"vK2ZtR\"4nL1aB8cD\"6\"eF3gH0jS5wYxQ\"9\"mP7vK2ZtR\"4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9mP7v\"K2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1\"aB8cD\"6eF3gH\"0jS5wY\"xQ9mP7\"vK2ZtR4nL\"1aB8c\"D6eF3gH\"0jS\"5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4\"nL\\1a\\\"\\B8cD6\"e\"F3gH\"0jS\"5wYxQ9mP7\"vK2Zt\"R4nL1aB8c\"D6eF3\"gH0jS5wYxQ\"9mP7vK2\"ZtR4nL1aB8\"cD6eF3g\"H0jS\"5wYxQ\"9mP7\"v\"K2ZtR4nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1aB\"8cD6eF3\"g\"H0jS5wYxQ9mP7vK\"2\"ZtR4nL1aB8\"cD6eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL1\"a\"B8cD6e\"F\"3gH0jS5w\"Y\"xQ9mP7vK2ZtR4nL1aB8c\"D\"6eF3gH0jS5\"w\"YxQ9mP7vK2ZtR\"4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7vK2Zt\"R4nL1aB8c\"D6eF3gH0j\"S5\"wYxQ9mP7\"vK2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5w\"YxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL1\"aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5w\"YxQ9m\"P7vK2Z\"tR4nL1aB8\"c\"D6eF3gH0jS5wY\"x\"Q9mP7vK2Z\"tR\"4nL1aB8c\"D6eF3\"gH0jS5wYxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3\"gH0jS\"5wYxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4\"nL1aB\"8cD6eF\"3gH0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5wYxQ9m\"P7v\"K2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B\"8cD6eF\"3\"gH0j\"S5w\"YxQ9mP7vK\"2ZtR4\"nL1aB8cD6\"eF3gH0j\"S5wYxQ9mP7\"vK2ZtR4\"nL1aB8cD6e\"F3gH0jS\"5wYx\"Q9mP7\"vK2Z\"t\"R4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR4nL1a\"B8cD6eF\"3gH0jS5wYx\"Q9mP7vK\"2\"ZtR4nL1aB8cD6eF\"3\"gH0jS5wYxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5w\"Y\"xQ9mP\"7\"vK2ZtR4n\"L\"1aB8cD6eF3gH0jS5wYxQ\"9\"mP7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7v\"K2ZtR4nL1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2Zt\"R4\"nL1aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5wY\"xQ9\"mP7vK\"2ZtR4\"nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS5\"wYxQ9\"mP7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0j\"S5w\"YxQ9m\"P7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4n\"L1aB8\"cD6eF3\"gH0jS5wYx\"Q\"9mP7vK2ZtR4nL\"1\"aB8cD6eF3\"gH\"0jS5wYxQ\"9mP7v\"K2ZtR4nL1aB8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0j\"S5wYx\"Q9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR\"4nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL\"1aB8cD6eF\"3gH\"0\"jS5wYx\"Q\"9mP7\"vK2\"ZtR4nL1aB\"8cD6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4n\"L1aB8cD6\"eF3gH0jS5w\"YxQ9mP7\"vK2Z\"tR4nL\"1aB8\"c\"D6eF3gH0jS5wYxQ9mP7vK2ZtR\"4\"nL1aB8c\"D6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR4nL1\"a\"B8cD6eF3gH0jS5w\"Y\"xQ9mP7vK2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9m\"P7vK\"2\"ZtR4n\"L\"1aB8cD6e\"F\"3gH0jS5wYxQ9mP7vK2Zt\"R\"4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"m\"P7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7vK2Zt\"R4nL1aB8c\"D6\"eF3gH0jS\"5wYxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF\"3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH\"0jS\"5wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8cD6eF3gH0jS5w\"YxQ\"9mP\"7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1a\"B8cD6\"eF3gH\"0jS\"5wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD6\"eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F\"3gH0jS5wY\"xQ\"9mP7vK2Z\"tR4nL\"1aB8cD6eF3gH0\"jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9m\"P7vK2\"ZtR4nL\"1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF3gH0j\"S5w\"YxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5\"wYxQ9mP7v\"K2ZtR4n\"L1\"aB8cD6e\"F3gH\"0jS5wYxQ9\"m\"P7vK2ZtR4nL\"1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4\"nL1aB\"8cD\"6eF3g\"H0j\"S5wYxQ9\"mP7v\"K2ZtR4nL\"1aB8c\"D6eF3gH0jS\"5wY\"xQ9mP7vK2Z\"tR4n\"L1aB8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5\"wYxQ9mP\"7\"vK2ZtR4nL1aB8cD6\"e\"F3gH0jS5wYxQ9mP7\"vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS5\"wYxQ9mP7vK2ZtR4\"nL1a\"B8cD6eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1\"a\"B8cD6eF3\"gH\"0jS5wYxQ9\"mP7vK2Z\"tR4nL1a\"B8cD6eF3gH\"0jS5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1\"aB8cD6eF\"3gH0j\"S5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6\"eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL\"1aB8c\"D6eF3\"gH0jS5wY\"xQ9\"mP7\"v\"K2ZtR4\"n\"L1aB\"8cD\"6eF3gH0jS\"5wYxQ\"9mP7vK2Zt\"R4nL1a\"B8cD6eF3gH\"0jS5wYxQ\"9mP7vK2ZtR\"4nL1aB8c\"D6eF\"3gH0j\"S5wY\"x\"Q9mP7vK2Zt\"R\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4nL1aB\"8\"cD6eF3gH0jS5wYx\"Q\"9mP7vK2ZtR\"4nL1aB\"8cD6eF3gH0jS5\"wYxQ9mP7\"vK2Z\"t\"R4nL1a\"B\"8cD6eF3g\"H\"0jS5wYxQ9mP7vK2ZtR4n\"L\"1aB8cD6eF3\"g\"H0jS5wYxQ9mP7\"v\"K2ZtR4nL1\"aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3\"gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8c\"D6e\"F3g\"H0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4nL\"1aB\"8cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Zt\"R4nL1\"aB8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2\"ZtR\"4nL1a\"B8cD6\"eF3\"gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3g\"H0jS5\"wYxQ9m\"P7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7\"vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5w\"YxQ\"9mP\"7vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2\"ZtR4n\"L1aB8c\"D6eF3g\"H0jS5wY\"xQ9mP7vK2\"ZtR4nL\"1aB8cD6\"eF3\"gH0jS5wYxQ\"9mP\"7vK\"2ZtR4n\"L1aB8cD6eF3gH\"0jS5wYxQ\"9mP\"7vK2ZtR4n\"L1aB8cD\"6e\"F3gH0jS\"5wYx\"Q9mP7vK2Z\"t\"R4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB\"8c\"D6eF3\"gH0\"jS5wY\"xQ9\"mP7vK2Z\"tR4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9m\"P7v\"K2ZtR4nL1a\"B8cD\"6eF3gH0jS5wYxQ9m\"P7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2ZtR\"4\"nL1aB8cD6eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL1\"aB8\"cD6e\"F3gH0\"jS5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF\"3gH0jS5wYx\"Q9mP7v\"K2ZtR4nL1\"a\"B8cD6eF3gH0jS\"5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL1\"aB8\"cD6eF3gH0\"j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6e\"F\"3gH0jS5wYxQ9mP7\"vK2\"ZtR4nL1aB\"8\"cD6eF3gH\"0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1aB8cD\"6eF\"3gH0jS\"5w\"YxQ9\"mP7vK2ZtR4n\"L1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8\"c\"D6eF3g\"H0jS5wYxQ9\"mP7vK\"2ZtR4nL1aB8\"cD6eF3gH0jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8cD6\"eF3gH0jS5wYx\"Q9mP7vK2ZtR\"4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3gH0jS5\"wYxQ9mP7v\"K2ZtR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR4nL1a\"B8cD6eF3g\"H0jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL1\"a\"B8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6eF3\"gH0\"jS5wYxQ\"9mP\"7vK2ZtR4n\"L1a\"B8cD6eF3\"gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1aB\"8\"cD6eF\"3\"gH0jS5w\"YxQ9mP7v\"K2ZtR4nL1\"aB8cD6\"eF3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wYxQ9mP7vK\"2ZtR\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9mP\"7vK2ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4\"n\"L1aB8c\"D\"6eF3gH0\"jS5wYxQ9\"mP7vK2ZtR\"4nL1aB\"8cD6eF3g\"H0j\"S5wYxQ9mP\"7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0jS5wYxQ9m\"P7v\"K2ZtR4n\"L1aB8cD6\"eF3gH0jS5\"wYxQ9m\"P7vK2ZtR\"4nL\"1aB8cD6eF\"3gH0j\"S5wYxQ9mP\"7\"vK2ZtR\"4\"nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD\"6eF\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9mP\"7vK2ZtR4n\"L\"1aB8cD6\"e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6eF3gH0jS5\"wYx\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6e\"F\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR\"4nL1aB8cD\"6eF\"3gH0jS5w\"YxQ\"9mP7vK2Zt\"R4nL1\"aB8cD6eF3\"g\"H0jS5w\"Y\"xQ9mP7v\"K2ZtR4nL\"1aB8cD6eF\"3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8c\"D6eF3gH0jS5wYxQ\"9mP\"7vK2ZtR4nL1\"aB8\"cD6eF3g\"H0jS5wYx\"Q9mP7vK2Z\"tR4nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4nL\"1a\"B8cD6eF3gH0\"jS5w\"YxQ9mP7vK\"2\"ZtR4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6eF\"3\"gH0jS5w\"YxQ\"9mP7vK2Zt\"R4n\"L1aB8cD6\"eF3\"gH0jS5wYx\"Q9m\"P7vK2ZtR4nL1aB8\"cD6\"eF3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wY\"xQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF3g\"H\"0jS5wY\"x\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD6eF3gH0\"jS5\"wYxQ9mP7vK2\"ZtR\"4nL1aB8\"cD6\"eF3gH0jS5\"wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD\"6eF3g\"H0jS5wYxQ\"9\"mP7vK2Z\"t\"R4nL1aB\"8cD\"6eF3gH0jS\"5wY\"xQ9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5wYxQ9mP\"7vK\"2ZtR4nL1aB8\"cD6\"eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8\"cD6\"eF3gH0jS5\"wYxQ9\"mP7vK2ZtR\"4\"nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9mP\"7vK2ZtR4n\"L1aB8c\"D6eF3gH0\"jS5\"wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6eF3\"gH0\"jS5wYxQ9mP7\"vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP\"7v\"K2ZtR4nL1aB8c\"D6eF\"3gH0jS5wY\"x\"Q9mP7\"v\"K2ZtR4n\"L1aB8cD6eF\"3gH0jS5wY\"xQ9mP7v\"K2ZtR4nL\"1aB\"8cD6eF3gH\"0jS\"5wYxQ9mP7vK2ZtR\"4nL\"1aB8cD6eF3g\"H0jS5\"wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8cD6\"eF3gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8\"cD\"6eF3g\"H0jS5\"wYxQ9mP7vK2\"ZtR4n\"L1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2\"Zt\"R4nL1\"aB8cD6e\"F3gH0j\"S5wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD6eF\"3gH0\"jS5wYxQ9\"mP\"7vK2ZtR4\"nL1aB\"8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB\"8cD\"6eF3gH0jS\"5wYx" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "Q9mP7vK2ZtR4nL1aB8cD6", "moduleId": "eF3gH0jS5wY" }, "customerInfo": { "customerId": "xQ9mP7vK2Zt", "deviceId": "R4nL1aB8cD6eF3gH0jS5w", "lineId": "YxQ9mP7vK2ZtR4", "publicIp": "nL1aB8cD6eF3" } } }, { "_index": "gH0jS5wYxQ9mP7vK2Zt", "_source": { "kafka": { "eventId": "R4nL1aB8cD6e", "moduleId": "F3gH0jS5w" }, "customerInfo": { "customerId": "YxQ9mP7vK2Z", "deviceId": "tR4nL1aB8cD6eF3gH0jS5", "lineId": "wYxQ9mP7vK2ZtR", "publicIp": "4nL1aB8cD6eF" }, "eventData": { "__original": "3\"gH0jS5w\"Yx\"Q9m\"P\"7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2\"Z\"tR4nL1aB 8cD6eF 3g H0jS5wYx\"Q\"9mP7vK2ZtR4nL1aB8c\"D6eF3\"gH0jS5wY\"xQ9mP7\"vK2ZtR\"4nL1aB8\"cD6eF3gH0jS5wYxQ9mP7vK\"2ZtR\"4nL1aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2ZtR4n\"L1aB8cD\"6eF3gH\"0\"jS5wYxQ\"9\"mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0\"j\"S5wYxQ9\"m\"P7vK2ZtR4nL1\"a\"B8cD6eF3g\"H\"0jS5wYxQ9mP7\"v\"K2ZtR4n\"L\"1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2ZtR4nL1aB\"8cD6e\"F3gH0jS5wYx\"Q9mP7\"vK2ZtR4nL1\"aB8cD6" } } }, { "_source": { "eventData": { "__original": "e\"F3gH0jS\"5w\"YxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR\"4nL1aB8cD6eF3g\"H0j\"S5wYxQ9m\"P7v\"K2ZtR\"4\"nL1aB8cD 6eF3gH 0j S5wYxQ9mP7v K\"2\"ZtR4nL1aB8cD6eF3gH\"0jS5w\"YxQ9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3g\"H0jS5wYxQ9mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB8cD\"6eF3gH0\"jS5wYx\"Q\"9mP7vK2\"Z\"tR4nL1aB8cD6\"eF3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL\"1\"aB8cD6eF3gH0\"j\"S5wYxQ9mP\"7\"vK2ZtR4nL1aB\"8\"cD6eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7\"vK2ZtR4nL1a\"B8cD\"6eF3gH0jS5wY\"xQ\"9mP7vK2Z\"t\"R4n\"L\"1aB8cD6eF3gH0jS\"5wYxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF3gH\"0jS5wYx\"Q9\"mP7vK2Zt\"R\"4nL1a\"B8c\"D6eF3gH0jS\"5wYxQ9m" }, "customerInfo": { "customerId": "P7vK2ZtR4nL", "deviceId": "1aB8cD6eF3gH0jS5wYxQ9", "lineId": "mP7vK2ZtR4nL1a", "publicIp": "B8cD6eF3gH0j" }, "kafka": { "eventId": "S5wYxQ9mP7vK", "moduleId": "2ZtR4nL1a" } } }, { "_source": { "@timestamp": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "eventData": { "__original": "L\"1aB8cD6eF3gH0jS5w\"YxQ9m\"P7vK2ZtR4nL1aB8cD6e\"F3gH0jS\"5wYxQ9mP7vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2Zt\"R4nL1aB8\"cD6eF" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "3gH0jS5w", "moduleId": "YxQ9mP7vK" }, "@Version": "2", "customerInfo": { "customerId": "ZtR4nL1aB8c", "deviceId": "D6eF3gH0jS5wYxQ9mP7vK", "lineId": "2ZtR4nL1aB8cD6", "publicIp": "eF3gH0jS5wYx" } } } ], "pipeline": { "processors": [ { "rename": { "field": "Q9mP7vK2ZtR4nL1aB8cD", "target_field": "6eF3gH0jS5wYxQ" } }, { "lowercase": { "field": "9mP7vK2ZtR4nL1", "target_field": "aB8cD6eF3gH", "ignore_missing": true } }, { "set": { "field": "0jS5wYxQ9mP7", "copy_from": "vK2ZtR4nL1aB8", "ignore_empty_value": true } }, { "set": { "field": "cD6eF3gH0", "copy_from": "jS5wYxQ9mP7vK2ZtR4nL1", "ignore_empty_value": true } }, { "script": { "source": """ aB8 cD6eF3gH0j S 5wYxQ9mP7vK2ZtR4 nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP""", "if": "7vK2ZtR4nL1aB8cD 6e F3gH 0j S5wYxQ9mP7vK2ZtR4nL 1a B8cD" } }, { "script": { "description": "6eF3gH0 jS5wYxQ9 mP 7vK2ZtR4nL1 aB8cD6e F3gH 0jS", "source": "5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "if": "S5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF 3gH0 jS 5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 gH0jS5wYxQ 9mP7vK2" } }, { "set": { "field": "ZtR4nL1aB8cD6e", "copy_from": "F3gH0jS5wYxQ9mP7vK2", "ignore_empty_value": true } }, { "set": { "field": "ZtR4nL1aB8cD6", "copy_from": "eF3gH0jS5wYxQ9mP7vK2Zt", "ignore_empty_value": true } }, { "rename": { "field": "R4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2Zt", "ignore_missing": true } }, { "script": { "source": """ R4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0 jS5wYxQ9mP7v """, "if": "K2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2Zt R4 nL1a" } }, { "rename": { "field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "target_field": "eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF", "target_field": "3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3", "target_field": "gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "ignore_missing": true } }, { "rename": { "field": "eF3gH0jS5wYxQ9mP7v", "target_field": "K2ZtR4nL1aB8cD6eF3gH0jS5w", "ignore_missing": true } }, { "rename": { "field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3g", "target_field": "H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD", "ignore_missing": true } }, { "rename": { "field": "6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a", "target_field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "ignore_missing": true } }, { "rename": { "field": "L1aB8cD6eF3gH0jS5wYxQ9mP7vK", "target_field": "2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9", "ignore_missing": true } }, { "rename": { "field": "mP7vK2ZtR4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "ignore_missing": true } }, { "script": { "description": "S5wYxQ9mP 7vK2ZtR 4nL1aB8 cD6eF 3gH 0jS5wYx Q9mP7vK 2ZtR", "lang": "4nL1aB8c", "source": """ D6 eF3gH0jS5wYxQ9mP7vK2ZtR4nL 1a B8cD6 e F3g H0j S 5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF3gH0jS5w Y xQ9mP7vK2Z tR 4nL1 a B8c D 6eF3gH0jS5w YxQ9mP7vK2ZtR4n L 1 aB8c D6eF3gH0jS5wYxQ9mP7vK 2ZtR 4nL1aB8cD6eF3gH0jS5wY xQ9mP 7vK2ZtR4nL1aB8cD6eF3g H0 jS 5wY xQ9mP7vK2ZtR4n L1 a B8cD6 eF3g H 0j S 5wYxQ9mP 7 vK2ZtR4n L1 aB8c D 6eF 3 gH0jS5wYx Q9mP7vK2ZtR4 n L 1aB8cD6e F3gH0jS5wYxQ9mP7vK2 Z tR4nL 1a B 8c D6 eF3gH0 jS5wYxQ 9m P7vK2ZtR4nL1aB8cD6eF3gH0 jS 5wYxQ 9 mP7 vK2 Z tR4nL1aB8cD6eF3gH0jS5wY xQ9mP7vK2ZtR4nL1a B 8 cD6eF3gH 0jS5wYxQ9m P7vK2Zt R4nL1aB8c D6eF3gH0j S5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3g H 0jS5wYxQ 9mP7vK2Zt R 4nL1aB8cD6eF3g H0jS5w YxQ9mP7vK2ZtR4nL1a B 8cD6eF3gH0jS5w Y xQ9mP7vK2 Z tR 4 nL 1a B8c D6eF3gH 0jS5wYxQ9m P7vK2Z tR 4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK 2Z tR4nL 1 aB8 cD6eF 3g H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD 6 eF 3gH0jS5wYxQ9mP7 vK 2ZtR4nL1aB8c D 6eF3gH0jS5w Y x Q9mP7vK2 ZtR4nL1aB8cD6 eF 3g H 0jS5wYxQ9mP7v K2 ZtR 4nL1aB8 cD6eF3gH0jS5wY xQ 9mP7vK2ZtR 4 nL1aB8cD6 eF3gH0jS5wYxQ9 mP7vK2ZtR4nL1aB 8 cD6eF3gH0 jS5wYxQ9mP7vK2 ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a B8cD6e F 3 g H0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6e F3 gH0jS 5 wYx Q9m P 7vK2ZtR4nL1aB8cD6eF3gH0jS5w YxQ9mP7vK2Z t R4nL1aB8cD6 eF 3gH0 j S5w Y xQ9mP7vK2ZtR 4nL1aB8cD6eF3g H 0jS5wYxQ9 mP7vK2ZtR4nL1aB8cD6 e F 3gH0jS5wYxQ9 mP7vK2ZtR4 nL1aB8cD6eF3g H0jS5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3gH0jS5w YxQ9mP7vK2ZtR4nL1aB8 cD6eF3gH0jS5wYxQ 9m P7 vK2ZtR4nL 1aB8c D6eF 3gH 0jS5wY xQ9mP7vK2ZtR 4n L1aB8cD6eF 3 gH 0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 g H0jS5wYxQ9mP7vK2Zt R 4nL1aB8cD6 e F """ } }, { "uri_parts": { "field": "3gH0jS5wYxQ9", "ignore_missing": true, "ignore_failure": true } }, { "append": { "field": "mP7vK2ZtR4n", "value": [ "L1aB8cD6eF3gH", "0jS5wYxQ9mP7vK2ZtR", "4nL1aB8cD6eF3", "gH0jS5wYxQ9mP7vK2", "ZtR4nL1aB8cD6" ], "allow_duplicates": false } }, { "script": { "description": "eF3gH0 jS5w YxQ9mP", "source": """ 7vK2ZtR 4nL1aB8cD6e F3 g H0 jS 5w YxQ9 mP 7 vK 2Zt R 4nL1aB 8cD6e F 3gH0 jS 5w YxQ9mP7vK2 ZtR4 n L1aB8c D6eF3gH0jS5wYxQ9mP7vK2 Zt R4nL1aB8c D6eF3g H0jS5wY xQ9mP7vK2 Zt R4n L 1aB8 cD 6e F3gH0jS5wY xQ9mP 7 vK2ZtR4 nL1aB8cD6eF3g H0 jS5wYxQ9m P7vK2Z tR4nL1aB 8cD6eF3gH 0j S5w Y xQ9mP7 vK2ZtR 4 nL1aB8cD6e """ } }, { "remove": { "field": [ "F3gH" ], "ignore_missing": true } } ] } } ``` </details> Assisted by Cursor CLI using GPT-5.2-High model --------- Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 4fa1505) Co-authored-by: Cursor <cursoragent@cursor.com>
…tic#251173) Closes elastic#251172 ## Summary This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs. ## DEMO (Before / After) https://github.com/user-attachments/assets/54b90fdb-f0b0-4de0-ae53-6fa4a12a98d9 ## Change 1: Console completion avoids full-buffer reads (`kbn-monaco` Console language) **What changed** - The Console completion provider no longer calls `model.getValue()` to compute `textBeforeCursor`. - ES|QL context detection is only attempted when the cursor is within a `POST /_query` (or `POST _query/async`) request. - When it *is* a `_query` request, the provider reads only the relevant slice via `model.getValueInRange()` (from the request line to the cursor). - For all other requests (or when no request line is found within a bounded lookback), completion delegates to the existing actions provider. **Why** - `model.getValue()` materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI. - ES|QL completion only makes sense for `_query` requests; scoping the work avoids paying the cost for non-ES|QL traffic. **Why this approach** - We preserve existing completion behavior by delegating to the actions provider, but avoid the pathological cost by restricting work to a small, semantically relevant window. ## Change 2: ES|QL quote/query detection is linear-time (`checkForTripleQuotesAndEsqlQuery`) **What changed** - `checkForTripleQuotesAndEsqlQuery` was rewritten to scan the text once and avoid repeated substring+regex work inside the main loop. **Why** - The previous approach could become super-linear on adversarial inputs (many quotes / many potential toggles), which is exactly what large JSON payloads tend to contain. - In the worst case, this turns “type one character” into “do a huge amount of CPU work”, producing the freeze. **Why this approach** - A single forward scan preserves semantics while making the runtime scale predictably with input size. ## Change 3: Monaco `onChange` no longer calls `editor.getValue()` per keystroke (`shared-ux` React Monaco editor) **What changed** - The `onDidChangeModelContent` handler computes the next value by applying `event.changes` to a shadow string (`lastKnownValueRef`) instead of calling `editor.getValue()`. - Controlled-mode syncing (`useLayoutEffect`) first compares the incoming `value` against the shadow value to avoid unnecessary full-buffer reads. **Why** - `editor.getValue()` materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models. - Applying incremental changes keeps the per-keystroke cost proportional to the change set, not the document size. **Why this approach** - Monaco already provides the exact edit deltas (`IModelContentChangedEvent.changes`). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads. ## Tests (what they cover and why) - **`language.test.ts`**: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model. - **`autocomplete_utils.test.ts`**: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance). - **`editor.test.tsx`**: verifies the incremental `onChange` value computation (including multi-change ordering) and controlled sync behavior. ## Test plan - `node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.js` - `node scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.js` ### Manual UI verification (DevTools Console) - Open `DevTools -> Console`. - Expand the `<details>` block below and paste the payload into the editor. - Click at the very end of the pasted content and type a few characters. - Verify the editor remains responsive (no multi-second freeze / hang), and typed characters appear immediately. - Optional: place the cursor inside a `""" ... """` block and type to ensure autocomplete remains responsive. <details> <summary>Sanitized reproduction payload (paste into DevTools Console)</summary> ```http POST _ingest/pipeline/_simulate { "docs": [ { "_source": { "@timestamp": "xQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS", "eventData": { "__original": "5\"wYxQ9mP7vK\"2Zt\"R4nL1aB8c\"D\"6eF3gH\"0\"jS5wYxQ9\"mP\"7vK2ZtR4n\"L1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8c\"D6eF3gH\"0jS5wYxQ9m\"P7vK2ZtR4\"nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Z\"tR4nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Zt\"R4nL1a\"B8cD6eF\"3gH0j\"S5wYxQ9\"m\"P7vK2ZtR4nL1aB8c\"D6\"eF3gH\"0jS5w\"YxQ9mP7v\"K2Z\"tR4\"n\"L1aB8\"c\"D6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B8cD\"6eF3gH0jS5\"wYxQ9mP\"7vK2ZtR4nL\"1aB8cD6\"eF3g\"H0jS5\"wYxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3g\"H\"0jS5wYx\"Q9mP7v\"K2ZtR4n\"L1aB8c\"D6eF3gH\"0\"jS5wYxQ9mP7vK2Z\"t\"R4nL1aB8cD\"6eF3gH\"0jS5wYxQ9mP7v\"K2ZtR4n\"L1aB\"8\"cD6eF\"3\"gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8cD\"6\"eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"n\"L1aB8cD6e\"F3g\"H0jS5wYxQ9mP7vK2ZtR\"4nL1aB8cD\"6eF3gH0jS\"5w\"YxQ9mP7v\"K2ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wY\"xQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4n\"L1aB8\"cD6eF\"3gH\"0jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB8\"cD6eF\"3gH0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1a\"B8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP\"7vK2Z\"tR4nL\"1aB\"8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4nL\"1aB8c\"D6eF3\"gH0\"jS5wYx\"Q9mP7\"vK2ZtR\"4nL1aB8cD\"6\"eF3gH0jS5wYxQ\"9\"mP7vK2ZtR\"4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9mP7v\"K2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1\"aB8cD\"6eF3gH\"0jS5wY\"xQ9mP7\"vK2ZtR4nL\"1aB8c\"D6eF3gH\"0jS\"5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4\"nL\\1a\\\"\\B8cD6\"e\"F3gH\"0jS\"5wYxQ9mP7\"vK2Zt\"R4nL1aB8c\"D6eF3\"gH0jS5wYxQ\"9mP7vK2\"ZtR4nL1aB8\"cD6eF3g\"H0jS\"5wYxQ\"9mP7\"v\"K2ZtR4nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1aB\"8cD6eF3\"g\"H0jS5wYxQ9mP7vK\"2\"ZtR4nL1aB8\"cD6eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL1\"a\"B8cD6e\"F\"3gH0jS5w\"Y\"xQ9mP7vK2ZtR4nL1aB8c\"D\"6eF3gH0jS5\"w\"YxQ9mP7vK2ZtR\"4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7vK2Zt\"R4nL1aB8c\"D6eF3gH0j\"S5\"wYxQ9mP7\"vK2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5w\"YxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL1\"aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5w\"YxQ9m\"P7vK2Z\"tR4nL1aB8\"c\"D6eF3gH0jS5wY\"x\"Q9mP7vK2Z\"tR\"4nL1aB8c\"D6eF3\"gH0jS5wYxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3\"gH0jS\"5wYxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4\"nL1aB\"8cD6eF\"3gH0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5wYxQ9m\"P7v\"K2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B\"8cD6eF\"3\"gH0j\"S5w\"YxQ9mP7vK\"2ZtR4\"nL1aB8cD6\"eF3gH0j\"S5wYxQ9mP7\"vK2ZtR4\"nL1aB8cD6e\"F3gH0jS\"5wYx\"Q9mP7\"vK2Z\"t\"R4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR4nL1a\"B8cD6eF\"3gH0jS5wYx\"Q9mP7vK\"2\"ZtR4nL1aB8cD6eF\"3\"gH0jS5wYxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5w\"Y\"xQ9mP\"7\"vK2ZtR4n\"L\"1aB8cD6eF3gH0jS5wYxQ\"9\"mP7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7v\"K2ZtR4nL1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2Zt\"R4\"nL1aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5wY\"xQ9\"mP7vK\"2ZtR4\"nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS5\"wYxQ9\"mP7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0j\"S5w\"YxQ9m\"P7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4n\"L1aB8\"cD6eF3\"gH0jS5wYx\"Q\"9mP7vK2ZtR4nL\"1\"aB8cD6eF3\"gH\"0jS5wYxQ\"9mP7v\"K2ZtR4nL1aB8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0j\"S5wYx\"Q9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR\"4nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL\"1aB8cD6eF\"3gH\"0\"jS5wYx\"Q\"9mP7\"vK2\"ZtR4nL1aB\"8cD6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4n\"L1aB8cD6\"eF3gH0jS5w\"YxQ9mP7\"vK2Z\"tR4nL\"1aB8\"c\"D6eF3gH0jS5wYxQ9mP7vK2ZtR\"4\"nL1aB8c\"D6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR4nL1\"a\"B8cD6eF3gH0jS5w\"Y\"xQ9mP7vK2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9m\"P7vK\"2\"ZtR4n\"L\"1aB8cD6e\"F\"3gH0jS5wYxQ9mP7vK2Zt\"R\"4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"m\"P7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7vK2Zt\"R4nL1aB8c\"D6\"eF3gH0jS\"5wYxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF\"3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH\"0jS\"5wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8cD6eF3gH0jS5w\"YxQ\"9mP\"7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1a\"B8cD6\"eF3gH\"0jS\"5wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD6\"eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F\"3gH0jS5wY\"xQ\"9mP7vK2Z\"tR4nL\"1aB8cD6eF3gH0\"jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9m\"P7vK2\"ZtR4nL\"1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF3gH0j\"S5w\"YxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5\"wYxQ9mP7v\"K2ZtR4n\"L1\"aB8cD6e\"F3gH\"0jS5wYxQ9\"m\"P7vK2ZtR4nL\"1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4\"nL1aB\"8cD\"6eF3g\"H0j\"S5wYxQ9\"mP7v\"K2ZtR4nL\"1aB8c\"D6eF3gH0jS\"5wY\"xQ9mP7vK2Z\"tR4n\"L1aB8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5\"wYxQ9mP\"7\"vK2ZtR4nL1aB8cD6\"e\"F3gH0jS5wYxQ9mP7\"vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS5\"wYxQ9mP7vK2ZtR4\"nL1a\"B8cD6eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1\"a\"B8cD6eF3\"gH\"0jS5wYxQ9\"mP7vK2Z\"tR4nL1a\"B8cD6eF3gH\"0jS5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1\"aB8cD6eF\"3gH0j\"S5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6\"eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL\"1aB8c\"D6eF3\"gH0jS5wY\"xQ9\"mP7\"v\"K2ZtR4\"n\"L1aB\"8cD\"6eF3gH0jS\"5wYxQ\"9mP7vK2Zt\"R4nL1a\"B8cD6eF3gH\"0jS5wYxQ\"9mP7vK2ZtR\"4nL1aB8c\"D6eF\"3gH0j\"S5wY\"x\"Q9mP7vK2Zt\"R\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4nL1aB\"8\"cD6eF3gH0jS5wYx\"Q\"9mP7vK2ZtR\"4nL1aB\"8cD6eF3gH0jS5\"wYxQ9mP7\"vK2Z\"t\"R4nL1a\"B\"8cD6eF3g\"H\"0jS5wYxQ9mP7vK2ZtR4n\"L\"1aB8cD6eF3\"g\"H0jS5wYxQ9mP7\"v\"K2ZtR4nL1\"aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3\"gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8c\"D6e\"F3g\"H0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4nL\"1aB\"8cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Zt\"R4nL1\"aB8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2\"ZtR\"4nL1a\"B8cD6\"eF3\"gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3g\"H0jS5\"wYxQ9m\"P7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7\"vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5w\"YxQ\"9mP\"7vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2\"ZtR4n\"L1aB8c\"D6eF3g\"H0jS5wY\"xQ9mP7vK2\"ZtR4nL\"1aB8cD6\"eF3\"gH0jS5wYxQ\"9mP\"7vK\"2ZtR4n\"L1aB8cD6eF3gH\"0jS5wYxQ\"9mP\"7vK2ZtR4n\"L1aB8cD\"6e\"F3gH0jS\"5wYx\"Q9mP7vK2Z\"t\"R4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB\"8c\"D6eF3\"gH0\"jS5wY\"xQ9\"mP7vK2Z\"tR4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9m\"P7v\"K2ZtR4nL1a\"B8cD\"6eF3gH0jS5wYxQ9m\"P7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2ZtR\"4\"nL1aB8cD6eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL1\"aB8\"cD6e\"F3gH0\"jS5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF\"3gH0jS5wYx\"Q9mP7v\"K2ZtR4nL1\"a\"B8cD6eF3gH0jS\"5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL1\"aB8\"cD6eF3gH0\"j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6e\"F\"3gH0jS5wYxQ9mP7\"vK2\"ZtR4nL1aB\"8\"cD6eF3gH\"0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1aB8cD\"6eF\"3gH0jS\"5w\"YxQ9\"mP7vK2ZtR4n\"L1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8\"c\"D6eF3g\"H0jS5wYxQ9\"mP7vK\"2ZtR4nL1aB8\"cD6eF3gH0jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8cD6\"eF3gH0jS5wYx\"Q9mP7vK2ZtR\"4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3gH0jS5\"wYxQ9mP7v\"K2ZtR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR4nL1a\"B8cD6eF3g\"H0jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL1\"a\"B8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6eF3\"gH0\"jS5wYxQ\"9mP\"7vK2ZtR4n\"L1a\"B8cD6eF3\"gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1aB\"8\"cD6eF\"3\"gH0jS5w\"YxQ9mP7v\"K2ZtR4nL1\"aB8cD6\"eF3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wYxQ9mP7vK\"2ZtR\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9mP\"7vK2ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4\"n\"L1aB8c\"D\"6eF3gH0\"jS5wYxQ9\"mP7vK2ZtR\"4nL1aB\"8cD6eF3g\"H0j\"S5wYxQ9mP\"7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0jS5wYxQ9m\"P7v\"K2ZtR4n\"L1aB8cD6\"eF3gH0jS5\"wYxQ9m\"P7vK2ZtR\"4nL\"1aB8cD6eF\"3gH0j\"S5wYxQ9mP\"7\"vK2ZtR\"4\"nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD\"6eF\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9mP\"7vK2ZtR4n\"L\"1aB8cD6\"e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6eF3gH0jS5\"wYx\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6e\"F\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR\"4nL1aB8cD\"6eF\"3gH0jS5w\"YxQ\"9mP7vK2Zt\"R4nL1\"aB8cD6eF3\"g\"H0jS5w\"Y\"xQ9mP7v\"K2ZtR4nL\"1aB8cD6eF\"3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8c\"D6eF3gH0jS5wYxQ\"9mP\"7vK2ZtR4nL1\"aB8\"cD6eF3g\"H0jS5wYx\"Q9mP7vK2Z\"tR4nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4nL\"1a\"B8cD6eF3gH0\"jS5w\"YxQ9mP7vK\"2\"ZtR4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6eF\"3\"gH0jS5w\"YxQ\"9mP7vK2Zt\"R4n\"L1aB8cD6\"eF3\"gH0jS5wYx\"Q9m\"P7vK2ZtR4nL1aB8\"cD6\"eF3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wY\"xQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF3g\"H\"0jS5wY\"x\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD6eF3gH0\"jS5\"wYxQ9mP7vK2\"ZtR\"4nL1aB8\"cD6\"eF3gH0jS5\"wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD\"6eF3g\"H0jS5wYxQ\"9\"mP7vK2Z\"t\"R4nL1aB\"8cD\"6eF3gH0jS\"5wY\"xQ9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5wYxQ9mP\"7vK\"2ZtR4nL1aB8\"cD6\"eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8\"cD6\"eF3gH0jS5\"wYxQ9\"mP7vK2ZtR\"4\"nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9mP\"7vK2ZtR4n\"L1aB8c\"D6eF3gH0\"jS5\"wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6eF3\"gH0\"jS5wYxQ9mP7\"vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP\"7v\"K2ZtR4nL1aB8c\"D6eF\"3gH0jS5wY\"x\"Q9mP7\"v\"K2ZtR4n\"L1aB8cD6eF\"3gH0jS5wY\"xQ9mP7v\"K2ZtR4nL\"1aB\"8cD6eF3gH\"0jS\"5wYxQ9mP7vK2ZtR\"4nL\"1aB8cD6eF3g\"H0jS5\"wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8cD6\"eF3gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8\"cD\"6eF3g\"H0jS5\"wYxQ9mP7vK2\"ZtR4n\"L1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2\"Zt\"R4nL1\"aB8cD6e\"F3gH0j\"S5wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD6eF\"3gH0\"jS5wYxQ9\"mP\"7vK2ZtR4\"nL1aB\"8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB\"8cD\"6eF3gH0jS\"5wYx" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "Q9mP7vK2ZtR4nL1aB8cD6", "moduleId": "eF3gH0jS5wY" }, "customerInfo": { "customerId": "xQ9mP7vK2Zt", "deviceId": "R4nL1aB8cD6eF3gH0jS5w", "lineId": "YxQ9mP7vK2ZtR4", "publicIp": "nL1aB8cD6eF3" } } }, { "_index": "gH0jS5wYxQ9mP7vK2Zt", "_source": { "kafka": { "eventId": "R4nL1aB8cD6e", "moduleId": "F3gH0jS5w" }, "customerInfo": { "customerId": "YxQ9mP7vK2Z", "deviceId": "tR4nL1aB8cD6eF3gH0jS5", "lineId": "wYxQ9mP7vK2ZtR", "publicIp": "4nL1aB8cD6eF" }, "eventData": { "__original": "3\"gH0jS5w\"Yx\"Q9m\"P\"7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2\"Z\"tR4nL1aB 8cD6eF 3g H0jS5wYx\"Q\"9mP7vK2ZtR4nL1aB8c\"D6eF3\"gH0jS5wY\"xQ9mP7\"vK2ZtR\"4nL1aB8\"cD6eF3gH0jS5wYxQ9mP7vK\"2ZtR\"4nL1aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2ZtR4n\"L1aB8cD\"6eF3gH\"0\"jS5wYxQ\"9\"mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0\"j\"S5wYxQ9\"m\"P7vK2ZtR4nL1\"a\"B8cD6eF3g\"H\"0jS5wYxQ9mP7\"v\"K2ZtR4n\"L\"1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2ZtR4nL1aB\"8cD6e\"F3gH0jS5wYx\"Q9mP7\"vK2ZtR4nL1\"aB8cD6" } } }, { "_source": { "eventData": { "__original": "e\"F3gH0jS\"5w\"YxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR\"4nL1aB8cD6eF3g\"H0j\"S5wYxQ9m\"P7v\"K2ZtR\"4\"nL1aB8cD 6eF3gH 0j S5wYxQ9mP7v K\"2\"ZtR4nL1aB8cD6eF3gH\"0jS5w\"YxQ9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3g\"H0jS5wYxQ9mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB8cD\"6eF3gH0\"jS5wYx\"Q\"9mP7vK2\"Z\"tR4nL1aB8cD6\"eF3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL\"1\"aB8cD6eF3gH0\"j\"S5wYxQ9mP\"7\"vK2ZtR4nL1aB\"8\"cD6eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7\"vK2ZtR4nL1a\"B8cD\"6eF3gH0jS5wY\"xQ\"9mP7vK2Z\"t\"R4n\"L\"1aB8cD6eF3gH0jS\"5wYxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF3gH\"0jS5wYx\"Q9\"mP7vK2Zt\"R\"4nL1a\"B8c\"D6eF3gH0jS\"5wYxQ9m" }, "customerInfo": { "customerId": "P7vK2ZtR4nL", "deviceId": "1aB8cD6eF3gH0jS5wYxQ9", "lineId": "mP7vK2ZtR4nL1a", "publicIp": "B8cD6eF3gH0j" }, "kafka": { "eventId": "S5wYxQ9mP7vK", "moduleId": "2ZtR4nL1a" } } }, { "_source": { "@timestamp": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "eventData": { "__original": "L\"1aB8cD6eF3gH0jS5w\"YxQ9m\"P7vK2ZtR4nL1aB8cD6e\"F3gH0jS\"5wYxQ9mP7vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2Zt\"R4nL1aB8\"cD6eF" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "3gH0jS5w", "moduleId": "YxQ9mP7vK" }, "@Version": "2", "customerInfo": { "customerId": "ZtR4nL1aB8c", "deviceId": "D6eF3gH0jS5wYxQ9mP7vK", "lineId": "2ZtR4nL1aB8cD6", "publicIp": "eF3gH0jS5wYx" } } } ], "pipeline": { "processors": [ { "rename": { "field": "Q9mP7vK2ZtR4nL1aB8cD", "target_field": "6eF3gH0jS5wYxQ" } }, { "lowercase": { "field": "9mP7vK2ZtR4nL1", "target_field": "aB8cD6eF3gH", "ignore_missing": true } }, { "set": { "field": "0jS5wYxQ9mP7", "copy_from": "vK2ZtR4nL1aB8", "ignore_empty_value": true } }, { "set": { "field": "cD6eF3gH0", "copy_from": "jS5wYxQ9mP7vK2ZtR4nL1", "ignore_empty_value": true } }, { "script": { "source": """ aB8 cD6eF3gH0j S 5wYxQ9mP7vK2ZtR4 nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP""", "if": "7vK2ZtR4nL1aB8cD 6e F3gH 0j S5wYxQ9mP7vK2ZtR4nL 1a B8cD" } }, { "script": { "description": "6eF3gH0 jS5wYxQ9 mP 7vK2ZtR4nL1 aB8cD6e F3gH 0jS", "source": "5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "if": "S5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF 3gH0 jS 5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 gH0jS5wYxQ 9mP7vK2" } }, { "set": { "field": "ZtR4nL1aB8cD6e", "copy_from": "F3gH0jS5wYxQ9mP7vK2", "ignore_empty_value": true } }, { "set": { "field": "ZtR4nL1aB8cD6", "copy_from": "eF3gH0jS5wYxQ9mP7vK2Zt", "ignore_empty_value": true } }, { "rename": { "field": "R4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2Zt", "ignore_missing": true } }, { "script": { "source": """ R4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0 jS5wYxQ9mP7v """, "if": "K2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2Zt R4 nL1a" } }, { "rename": { "field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "target_field": "eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF", "target_field": "3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3", "target_field": "gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "ignore_missing": true } }, { "rename": { "field": "eF3gH0jS5wYxQ9mP7v", "target_field": "K2ZtR4nL1aB8cD6eF3gH0jS5w", "ignore_missing": true } }, { "rename": { "field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3g", "target_field": "H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD", "ignore_missing": true } }, { "rename": { "field": "6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a", "target_field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "ignore_missing": true } }, { "rename": { "field": "L1aB8cD6eF3gH0jS5wYxQ9mP7vK", "target_field": "2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9", "ignore_missing": true } }, { "rename": { "field": "mP7vK2ZtR4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "ignore_missing": true } }, { "script": { "description": "S5wYxQ9mP 7vK2ZtR 4nL1aB8 cD6eF 3gH 0jS5wYx Q9mP7vK 2ZtR", "lang": "4nL1aB8c", "source": """ D6 eF3gH0jS5wYxQ9mP7vK2ZtR4nL 1a B8cD6 e F3g H0j S 5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF3gH0jS5w Y xQ9mP7vK2Z tR 4nL1 a B8c D 6eF3gH0jS5w YxQ9mP7vK2ZtR4n L 1 aB8c D6eF3gH0jS5wYxQ9mP7vK 2ZtR 4nL1aB8cD6eF3gH0jS5wY xQ9mP 7vK2ZtR4nL1aB8cD6eF3g H0 jS 5wY xQ9mP7vK2ZtR4n L1 a B8cD6 eF3g H 0j S 5wYxQ9mP 7 vK2ZtR4n L1 aB8c D 6eF 3 gH0jS5wYx Q9mP7vK2ZtR4 n L 1aB8cD6e F3gH0jS5wYxQ9mP7vK2 Z tR4nL 1a B 8c D6 eF3gH0 jS5wYxQ 9m P7vK2ZtR4nL1aB8cD6eF3gH0 jS 5wYxQ 9 mP7 vK2 Z tR4nL1aB8cD6eF3gH0jS5wY xQ9mP7vK2ZtR4nL1a B 8 cD6eF3gH 0jS5wYxQ9m P7vK2Zt R4nL1aB8c D6eF3gH0j S5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3g H 0jS5wYxQ 9mP7vK2Zt R 4nL1aB8cD6eF3g H0jS5w YxQ9mP7vK2ZtR4nL1a B 8cD6eF3gH0jS5w Y xQ9mP7vK2 Z tR 4 nL 1a B8c D6eF3gH 0jS5wYxQ9m P7vK2Z tR 4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK 2Z tR4nL 1 aB8 cD6eF 3g H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD 6 eF 3gH0jS5wYxQ9mP7 vK 2ZtR4nL1aB8c D 6eF3gH0jS5w Y x Q9mP7vK2 ZtR4nL1aB8cD6 eF 3g H 0jS5wYxQ9mP7v K2 ZtR 4nL1aB8 cD6eF3gH0jS5wY xQ 9mP7vK2ZtR 4 nL1aB8cD6 eF3gH0jS5wYxQ9 mP7vK2ZtR4nL1aB 8 cD6eF3gH0 jS5wYxQ9mP7vK2 ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a B8cD6e F 3 g H0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6e F3 gH0jS 5 wYx Q9m P 7vK2ZtR4nL1aB8cD6eF3gH0jS5w YxQ9mP7vK2Z t R4nL1aB8cD6 eF 3gH0 j S5w Y xQ9mP7vK2ZtR 4nL1aB8cD6eF3g H 0jS5wYxQ9 mP7vK2ZtR4nL1aB8cD6 e F 3gH0jS5wYxQ9 mP7vK2ZtR4 nL1aB8cD6eF3g H0jS5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3gH0jS5w YxQ9mP7vK2ZtR4nL1aB8 cD6eF3gH0jS5wYxQ 9m P7 vK2ZtR4nL 1aB8c D6eF 3gH 0jS5wY xQ9mP7vK2ZtR 4n L1aB8cD6eF 3 gH 0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 g H0jS5wYxQ9mP7vK2Zt R 4nL1aB8cD6 e F """ } }, { "uri_parts": { "field": "3gH0jS5wYxQ9", "ignore_missing": true, "ignore_failure": true } }, { "append": { "field": "mP7vK2ZtR4n", "value": [ "L1aB8cD6eF3gH", "0jS5wYxQ9mP7vK2ZtR", "4nL1aB8cD6eF3", "gH0jS5wYxQ9mP7vK2", "ZtR4nL1aB8cD6" ], "allow_duplicates": false } }, { "script": { "description": "eF3gH0 jS5w YxQ9mP", "source": """ 7vK2ZtR 4nL1aB8cD6e F3 g H0 jS 5w YxQ9 mP 7 vK 2Zt R 4nL1aB 8cD6e F 3gH0 jS 5w YxQ9mP7vK2 ZtR4 n L1aB8c D6eF3gH0jS5wYxQ9mP7vK2 Zt R4nL1aB8c D6eF3g H0jS5wY xQ9mP7vK2 Zt R4n L 1aB8 cD 6e F3gH0jS5wY xQ9mP 7 vK2ZtR4 nL1aB8cD6eF3g H0 jS5wYxQ9m P7vK2Z tR4nL1aB 8cD6eF3gH 0j S5w Y xQ9mP7 vK2ZtR 4 nL1aB8cD6e """ } }, { "remove": { "field": [ "F3gH" ], "ignore_missing": true } } ] } } ``` </details> Assisted by Cursor CLI using GPT-5.2-High model --------- Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 4fa1505) Co-authored-by: Cursor <cursoragent@cursor.com>
…tic#251173) Closes elastic#251172 ## Summary This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs. ## DEMO (Before / After) https://github.com/user-attachments/assets/54b90fdb-f0b0-4de0-ae53-6fa4a12a98d9 ## Change 1: Console completion avoids full-buffer reads (`kbn-monaco` Console language) **What changed** - The Console completion provider no longer calls `model.getValue()` to compute `textBeforeCursor`. - ES|QL context detection is only attempted when the cursor is within a `POST /_query` (or `POST _query/async`) request. - When it *is* a `_query` request, the provider reads only the relevant slice via `model.getValueInRange()` (from the request line to the cursor). - For all other requests (or when no request line is found within a bounded lookback), completion delegates to the existing actions provider. **Why** - `model.getValue()` materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI. - ES|QL completion only makes sense for `_query` requests; scoping the work avoids paying the cost for non-ES|QL traffic. **Why this approach** - We preserve existing completion behavior by delegating to the actions provider, but avoid the pathological cost by restricting work to a small, semantically relevant window. ## Change 2: ES|QL quote/query detection is linear-time (`checkForTripleQuotesAndEsqlQuery`) **What changed** - `checkForTripleQuotesAndEsqlQuery` was rewritten to scan the text once and avoid repeated substring+regex work inside the main loop. **Why** - The previous approach could become super-linear on adversarial inputs (many quotes / many potential toggles), which is exactly what large JSON payloads tend to contain. - In the worst case, this turns “type one character” into “do a huge amount of CPU work”, producing the freeze. **Why this approach** - A single forward scan preserves semantics while making the runtime scale predictably with input size. ## Change 3: Monaco `onChange` no longer calls `editor.getValue()` per keystroke (`shared-ux` React Monaco editor) **What changed** - The `onDidChangeModelContent` handler computes the next value by applying `event.changes` to a shadow string (`lastKnownValueRef`) instead of calling `editor.getValue()`. - Controlled-mode syncing (`useLayoutEffect`) first compares the incoming `value` against the shadow value to avoid unnecessary full-buffer reads. **Why** - `editor.getValue()` materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models. - Applying incremental changes keeps the per-keystroke cost proportional to the change set, not the document size. **Why this approach** - Monaco already provides the exact edit deltas (`IModelContentChangedEvent.changes`). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads. ## Tests (what they cover and why) - **`language.test.ts`**: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model. - **`autocomplete_utils.test.ts`**: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance). - **`editor.test.tsx`**: verifies the incremental `onChange` value computation (including multi-change ordering) and controlled sync behavior. ## Test plan - `node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.js` - `node scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.js` ### Manual UI verification (DevTools Console) - Open `DevTools -> Console`. - Expand the `<details>` block below and paste the payload into the editor. - Click at the very end of the pasted content and type a few characters. - Verify the editor remains responsive (no multi-second freeze / hang), and typed characters appear immediately. - Optional: place the cursor inside a `""" ... """` block and type to ensure autocomplete remains responsive. <details> <summary>Sanitized reproduction payload (paste into DevTools Console)</summary> ```http POST _ingest/pipeline/_simulate { "docs": [ { "_source": { "@timestamp": "xQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS", "eventData": { "__original": "5\"wYxQ9mP7vK\"2Zt\"R4nL1aB8c\"D\"6eF3gH\"0\"jS5wYxQ9\"mP\"7vK2ZtR4n\"L1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8c\"D6eF3gH\"0jS5wYxQ9m\"P7vK2ZtR4\"nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Z\"tR4nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Zt\"R4nL1a\"B8cD6eF\"3gH0j\"S5wYxQ9\"m\"P7vK2ZtR4nL1aB8c\"D6\"eF3gH\"0jS5w\"YxQ9mP7v\"K2Z\"tR4\"n\"L1aB8\"c\"D6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B8cD\"6eF3gH0jS5\"wYxQ9mP\"7vK2ZtR4nL\"1aB8cD6\"eF3g\"H0jS5\"wYxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3g\"H\"0jS5wYx\"Q9mP7v\"K2ZtR4n\"L1aB8c\"D6eF3gH\"0\"jS5wYxQ9mP7vK2Z\"t\"R4nL1aB8cD\"6eF3gH\"0jS5wYxQ9mP7v\"K2ZtR4n\"L1aB\"8\"cD6eF\"3\"gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8cD\"6\"eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"n\"L1aB8cD6e\"F3g\"H0jS5wYxQ9mP7vK2ZtR\"4nL1aB8cD\"6eF3gH0jS\"5w\"YxQ9mP7v\"K2ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wY\"xQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4n\"L1aB8\"cD6eF\"3gH\"0jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB8\"cD6eF\"3gH0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1a\"B8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP\"7vK2Z\"tR4nL\"1aB\"8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4nL\"1aB8c\"D6eF3\"gH0\"jS5wYx\"Q9mP7\"vK2ZtR\"4nL1aB8cD\"6\"eF3gH0jS5wYxQ\"9\"mP7vK2ZtR\"4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9mP7v\"K2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1\"aB8cD\"6eF3gH\"0jS5wY\"xQ9mP7\"vK2ZtR4nL\"1aB8c\"D6eF3gH\"0jS\"5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4\"nL\\1a\\\"\\B8cD6\"e\"F3gH\"0jS\"5wYxQ9mP7\"vK2Zt\"R4nL1aB8c\"D6eF3\"gH0jS5wYxQ\"9mP7vK2\"ZtR4nL1aB8\"cD6eF3g\"H0jS\"5wYxQ\"9mP7\"v\"K2ZtR4nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1aB\"8cD6eF3\"g\"H0jS5wYxQ9mP7vK\"2\"ZtR4nL1aB8\"cD6eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL1\"a\"B8cD6e\"F\"3gH0jS5w\"Y\"xQ9mP7vK2ZtR4nL1aB8c\"D\"6eF3gH0jS5\"w\"YxQ9mP7vK2ZtR\"4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7vK2Zt\"R4nL1aB8c\"D6eF3gH0j\"S5\"wYxQ9mP7\"vK2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5w\"YxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL1\"aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5w\"YxQ9m\"P7vK2Z\"tR4nL1aB8\"c\"D6eF3gH0jS5wY\"x\"Q9mP7vK2Z\"tR\"4nL1aB8c\"D6eF3\"gH0jS5wYxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3\"gH0jS\"5wYxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4\"nL1aB\"8cD6eF\"3gH0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5wYxQ9m\"P7v\"K2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B\"8cD6eF\"3\"gH0j\"S5w\"YxQ9mP7vK\"2ZtR4\"nL1aB8cD6\"eF3gH0j\"S5wYxQ9mP7\"vK2ZtR4\"nL1aB8cD6e\"F3gH0jS\"5wYx\"Q9mP7\"vK2Z\"t\"R4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR4nL1a\"B8cD6eF\"3gH0jS5wYx\"Q9mP7vK\"2\"ZtR4nL1aB8cD6eF\"3\"gH0jS5wYxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5w\"Y\"xQ9mP\"7\"vK2ZtR4n\"L\"1aB8cD6eF3gH0jS5wYxQ\"9\"mP7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7v\"K2ZtR4nL1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2Zt\"R4\"nL1aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5wY\"xQ9\"mP7vK\"2ZtR4\"nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS5\"wYxQ9\"mP7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0j\"S5w\"YxQ9m\"P7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4n\"L1aB8\"cD6eF3\"gH0jS5wYx\"Q\"9mP7vK2ZtR4nL\"1\"aB8cD6eF3\"gH\"0jS5wYxQ\"9mP7v\"K2ZtR4nL1aB8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0j\"S5wYx\"Q9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR\"4nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL\"1aB8cD6eF\"3gH\"0\"jS5wYx\"Q\"9mP7\"vK2\"ZtR4nL1aB\"8cD6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4n\"L1aB8cD6\"eF3gH0jS5w\"YxQ9mP7\"vK2Z\"tR4nL\"1aB8\"c\"D6eF3gH0jS5wYxQ9mP7vK2ZtR\"4\"nL1aB8c\"D6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR4nL1\"a\"B8cD6eF3gH0jS5w\"Y\"xQ9mP7vK2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9m\"P7vK\"2\"ZtR4n\"L\"1aB8cD6e\"F\"3gH0jS5wYxQ9mP7vK2Zt\"R\"4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"m\"P7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7vK2Zt\"R4nL1aB8c\"D6\"eF3gH0jS\"5wYxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF\"3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH\"0jS\"5wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8cD6eF3gH0jS5w\"YxQ\"9mP\"7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1a\"B8cD6\"eF3gH\"0jS\"5wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD6\"eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F\"3gH0jS5wY\"xQ\"9mP7vK2Z\"tR4nL\"1aB8cD6eF3gH0\"jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9m\"P7vK2\"ZtR4nL\"1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF3gH0j\"S5w\"YxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5\"wYxQ9mP7v\"K2ZtR4n\"L1\"aB8cD6e\"F3gH\"0jS5wYxQ9\"m\"P7vK2ZtR4nL\"1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4\"nL1aB\"8cD\"6eF3g\"H0j\"S5wYxQ9\"mP7v\"K2ZtR4nL\"1aB8c\"D6eF3gH0jS\"5wY\"xQ9mP7vK2Z\"tR4n\"L1aB8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5\"wYxQ9mP\"7\"vK2ZtR4nL1aB8cD6\"e\"F3gH0jS5wYxQ9mP7\"vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS5\"wYxQ9mP7vK2ZtR4\"nL1a\"B8cD6eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1\"a\"B8cD6eF3\"gH\"0jS5wYxQ9\"mP7vK2Z\"tR4nL1a\"B8cD6eF3gH\"0jS5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1\"aB8cD6eF\"3gH0j\"S5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6\"eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL\"1aB8c\"D6eF3\"gH0jS5wY\"xQ9\"mP7\"v\"K2ZtR4\"n\"L1aB\"8cD\"6eF3gH0jS\"5wYxQ\"9mP7vK2Zt\"R4nL1a\"B8cD6eF3gH\"0jS5wYxQ\"9mP7vK2ZtR\"4nL1aB8c\"D6eF\"3gH0j\"S5wY\"x\"Q9mP7vK2Zt\"R\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4nL1aB\"8\"cD6eF3gH0jS5wYx\"Q\"9mP7vK2ZtR\"4nL1aB\"8cD6eF3gH0jS5\"wYxQ9mP7\"vK2Z\"t\"R4nL1a\"B\"8cD6eF3g\"H\"0jS5wYxQ9mP7vK2ZtR4n\"L\"1aB8cD6eF3\"g\"H0jS5wYxQ9mP7\"v\"K2ZtR4nL1\"aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3\"gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8c\"D6e\"F3g\"H0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4nL\"1aB\"8cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Zt\"R4nL1\"aB8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2\"ZtR\"4nL1a\"B8cD6\"eF3\"gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3g\"H0jS5\"wYxQ9m\"P7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7\"vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5w\"YxQ\"9mP\"7vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2\"ZtR4n\"L1aB8c\"D6eF3g\"H0jS5wY\"xQ9mP7vK2\"ZtR4nL\"1aB8cD6\"eF3\"gH0jS5wYxQ\"9mP\"7vK\"2ZtR4n\"L1aB8cD6eF3gH\"0jS5wYxQ\"9mP\"7vK2ZtR4n\"L1aB8cD\"6e\"F3gH0jS\"5wYx\"Q9mP7vK2Z\"t\"R4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB\"8c\"D6eF3\"gH0\"jS5wY\"xQ9\"mP7vK2Z\"tR4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9m\"P7v\"K2ZtR4nL1a\"B8cD\"6eF3gH0jS5wYxQ9m\"P7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2ZtR\"4\"nL1aB8cD6eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL1\"aB8\"cD6e\"F3gH0\"jS5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF\"3gH0jS5wYx\"Q9mP7v\"K2ZtR4nL1\"a\"B8cD6eF3gH0jS\"5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL1\"aB8\"cD6eF3gH0\"j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6e\"F\"3gH0jS5wYxQ9mP7\"vK2\"ZtR4nL1aB\"8\"cD6eF3gH\"0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1aB8cD\"6eF\"3gH0jS\"5w\"YxQ9\"mP7vK2ZtR4n\"L1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8\"c\"D6eF3g\"H0jS5wYxQ9\"mP7vK\"2ZtR4nL1aB8\"cD6eF3gH0jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8cD6\"eF3gH0jS5wYx\"Q9mP7vK2ZtR\"4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3gH0jS5\"wYxQ9mP7v\"K2ZtR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR4nL1a\"B8cD6eF3g\"H0jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL1\"a\"B8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6eF3\"gH0\"jS5wYxQ\"9mP\"7vK2ZtR4n\"L1a\"B8cD6eF3\"gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1aB\"8\"cD6eF\"3\"gH0jS5w\"YxQ9mP7v\"K2ZtR4nL1\"aB8cD6\"eF3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wYxQ9mP7vK\"2ZtR\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9mP\"7vK2ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4\"n\"L1aB8c\"D\"6eF3gH0\"jS5wYxQ9\"mP7vK2ZtR\"4nL1aB\"8cD6eF3g\"H0j\"S5wYxQ9mP\"7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0jS5wYxQ9m\"P7v\"K2ZtR4n\"L1aB8cD6\"eF3gH0jS5\"wYxQ9m\"P7vK2ZtR\"4nL\"1aB8cD6eF\"3gH0j\"S5wYxQ9mP\"7\"vK2ZtR\"4\"nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD\"6eF\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9mP\"7vK2ZtR4n\"L\"1aB8cD6\"e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6eF3gH0jS5\"wYx\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6e\"F\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR\"4nL1aB8cD\"6eF\"3gH0jS5w\"YxQ\"9mP7vK2Zt\"R4nL1\"aB8cD6eF3\"g\"H0jS5w\"Y\"xQ9mP7v\"K2ZtR4nL\"1aB8cD6eF\"3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8c\"D6eF3gH0jS5wYxQ\"9mP\"7vK2ZtR4nL1\"aB8\"cD6eF3g\"H0jS5wYx\"Q9mP7vK2Z\"tR4nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4nL\"1a\"B8cD6eF3gH0\"jS5w\"YxQ9mP7vK\"2\"ZtR4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6eF\"3\"gH0jS5w\"YxQ\"9mP7vK2Zt\"R4n\"L1aB8cD6\"eF3\"gH0jS5wYx\"Q9m\"P7vK2ZtR4nL1aB8\"cD6\"eF3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wY\"xQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF3g\"H\"0jS5wY\"x\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD6eF3gH0\"jS5\"wYxQ9mP7vK2\"ZtR\"4nL1aB8\"cD6\"eF3gH0jS5\"wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD\"6eF3g\"H0jS5wYxQ\"9\"mP7vK2Z\"t\"R4nL1aB\"8cD\"6eF3gH0jS\"5wY\"xQ9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5wYxQ9mP\"7vK\"2ZtR4nL1aB8\"cD6\"eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8\"cD6\"eF3gH0jS5\"wYxQ9\"mP7vK2ZtR\"4\"nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9mP\"7vK2ZtR4n\"L1aB8c\"D6eF3gH0\"jS5\"wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6eF3\"gH0\"jS5wYxQ9mP7\"vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP\"7v\"K2ZtR4nL1aB8c\"D6eF\"3gH0jS5wY\"x\"Q9mP7\"v\"K2ZtR4n\"L1aB8cD6eF\"3gH0jS5wY\"xQ9mP7v\"K2ZtR4nL\"1aB\"8cD6eF3gH\"0jS\"5wYxQ9mP7vK2ZtR\"4nL\"1aB8cD6eF3g\"H0jS5\"wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8cD6\"eF3gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8\"cD\"6eF3g\"H0jS5\"wYxQ9mP7vK2\"ZtR4n\"L1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2\"Zt\"R4nL1\"aB8cD6e\"F3gH0j\"S5wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD6eF\"3gH0\"jS5wYxQ9\"mP\"7vK2ZtR4\"nL1aB\"8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB\"8cD\"6eF3gH0jS\"5wYx" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "Q9mP7vK2ZtR4nL1aB8cD6", "moduleId": "eF3gH0jS5wY" }, "customerInfo": { "customerId": "xQ9mP7vK2Zt", "deviceId": "R4nL1aB8cD6eF3gH0jS5w", "lineId": "YxQ9mP7vK2ZtR4", "publicIp": "nL1aB8cD6eF3" } } }, { "_index": "gH0jS5wYxQ9mP7vK2Zt", "_source": { "kafka": { "eventId": "R4nL1aB8cD6e", "moduleId": "F3gH0jS5w" }, "customerInfo": { "customerId": "YxQ9mP7vK2Z", "deviceId": "tR4nL1aB8cD6eF3gH0jS5", "lineId": "wYxQ9mP7vK2ZtR", "publicIp": "4nL1aB8cD6eF" }, "eventData": { "__original": "3\"gH0jS5w\"Yx\"Q9m\"P\"7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2\"Z\"tR4nL1aB 8cD6eF 3g H0jS5wYx\"Q\"9mP7vK2ZtR4nL1aB8c\"D6eF3\"gH0jS5wY\"xQ9mP7\"vK2ZtR\"4nL1aB8\"cD6eF3gH0jS5wYxQ9mP7vK\"2ZtR\"4nL1aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2ZtR4n\"L1aB8cD\"6eF3gH\"0\"jS5wYxQ\"9\"mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0\"j\"S5wYxQ9\"m\"P7vK2ZtR4nL1\"a\"B8cD6eF3g\"H\"0jS5wYxQ9mP7\"v\"K2ZtR4n\"L\"1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2ZtR4nL1aB\"8cD6e\"F3gH0jS5wYx\"Q9mP7\"vK2ZtR4nL1\"aB8cD6" } } }, { "_source": { "eventData": { "__original": "e\"F3gH0jS\"5w\"YxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR\"4nL1aB8cD6eF3g\"H0j\"S5wYxQ9m\"P7v\"K2ZtR\"4\"nL1aB8cD 6eF3gH 0j S5wYxQ9mP7v K\"2\"ZtR4nL1aB8cD6eF3gH\"0jS5w\"YxQ9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3g\"H0jS5wYxQ9mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB8cD\"6eF3gH0\"jS5wYx\"Q\"9mP7vK2\"Z\"tR4nL1aB8cD6\"eF3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL\"1\"aB8cD6eF3gH0\"j\"S5wYxQ9mP\"7\"vK2ZtR4nL1aB\"8\"cD6eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7\"vK2ZtR4nL1a\"B8cD\"6eF3gH0jS5wY\"xQ\"9mP7vK2Z\"t\"R4n\"L\"1aB8cD6eF3gH0jS\"5wYxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF3gH\"0jS5wYx\"Q9\"mP7vK2Zt\"R\"4nL1a\"B8c\"D6eF3gH0jS\"5wYxQ9m" }, "customerInfo": { "customerId": "P7vK2ZtR4nL", "deviceId": "1aB8cD6eF3gH0jS5wYxQ9", "lineId": "mP7vK2ZtR4nL1a", "publicIp": "B8cD6eF3gH0j" }, "kafka": { "eventId": "S5wYxQ9mP7vK", "moduleId": "2ZtR4nL1a" } } }, { "_source": { "@timestamp": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "eventData": { "__original": "L\"1aB8cD6eF3gH0jS5w\"YxQ9m\"P7vK2ZtR4nL1aB8cD6e\"F3gH0jS\"5wYxQ9mP7vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2Zt\"R4nL1aB8\"cD6eF" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "3gH0jS5w", "moduleId": "YxQ9mP7vK" }, "@Version": "2", "customerInfo": { "customerId": "ZtR4nL1aB8c", "deviceId": "D6eF3gH0jS5wYxQ9mP7vK", "lineId": "2ZtR4nL1aB8cD6", "publicIp": "eF3gH0jS5wYx" } } } ], "pipeline": { "processors": [ { "rename": { "field": "Q9mP7vK2ZtR4nL1aB8cD", "target_field": "6eF3gH0jS5wYxQ" } }, { "lowercase": { "field": "9mP7vK2ZtR4nL1", "target_field": "aB8cD6eF3gH", "ignore_missing": true } }, { "set": { "field": "0jS5wYxQ9mP7", "copy_from": "vK2ZtR4nL1aB8", "ignore_empty_value": true } }, { "set": { "field": "cD6eF3gH0", "copy_from": "jS5wYxQ9mP7vK2ZtR4nL1", "ignore_empty_value": true } }, { "script": { "source": """ aB8 cD6eF3gH0j S 5wYxQ9mP7vK2ZtR4 nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP""", "if": "7vK2ZtR4nL1aB8cD 6e F3gH 0j S5wYxQ9mP7vK2ZtR4nL 1a B8cD" } }, { "script": { "description": "6eF3gH0 jS5wYxQ9 mP 7vK2ZtR4nL1 aB8cD6e F3gH 0jS", "source": "5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "if": "S5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF 3gH0 jS 5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 gH0jS5wYxQ 9mP7vK2" } }, { "set": { "field": "ZtR4nL1aB8cD6e", "copy_from": "F3gH0jS5wYxQ9mP7vK2", "ignore_empty_value": true } }, { "set": { "field": "ZtR4nL1aB8cD6", "copy_from": "eF3gH0jS5wYxQ9mP7vK2Zt", "ignore_empty_value": true } }, { "rename": { "field": "R4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2Zt", "ignore_missing": true } }, { "script": { "source": """ R4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0 jS5wYxQ9mP7v """, "if": "K2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2Zt R4 nL1a" } }, { "rename": { "field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "target_field": "eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF", "target_field": "3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3", "target_field": "gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "ignore_missing": true } }, { "rename": { "field": "eF3gH0jS5wYxQ9mP7v", "target_field": "K2ZtR4nL1aB8cD6eF3gH0jS5w", "ignore_missing": true } }, { "rename": { "field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3g", "target_field": "H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD", "ignore_missing": true } }, { "rename": { "field": "6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a", "target_field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "ignore_missing": true } }, { "rename": { "field": "L1aB8cD6eF3gH0jS5wYxQ9mP7vK", "target_field": "2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9", "ignore_missing": true } }, { "rename": { "field": "mP7vK2ZtR4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "ignore_missing": true } }, { "script": { "description": "S5wYxQ9mP 7vK2ZtR 4nL1aB8 cD6eF 3gH 0jS5wYx Q9mP7vK 2ZtR", "lang": "4nL1aB8c", "source": """ D6 eF3gH0jS5wYxQ9mP7vK2ZtR4nL 1a B8cD6 e F3g H0j S 5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF3gH0jS5w Y xQ9mP7vK2Z tR 4nL1 a B8c D 6eF3gH0jS5w YxQ9mP7vK2ZtR4n L 1 aB8c D6eF3gH0jS5wYxQ9mP7vK 2ZtR 4nL1aB8cD6eF3gH0jS5wY xQ9mP 7vK2ZtR4nL1aB8cD6eF3g H0 jS 5wY xQ9mP7vK2ZtR4n L1 a B8cD6 eF3g H 0j S 5wYxQ9mP 7 vK2ZtR4n L1 aB8c D 6eF 3 gH0jS5wYx Q9mP7vK2ZtR4 n L 1aB8cD6e F3gH0jS5wYxQ9mP7vK2 Z tR4nL 1a B 8c D6 eF3gH0 jS5wYxQ 9m P7vK2ZtR4nL1aB8cD6eF3gH0 jS 5wYxQ 9 mP7 vK2 Z tR4nL1aB8cD6eF3gH0jS5wY xQ9mP7vK2ZtR4nL1a B 8 cD6eF3gH 0jS5wYxQ9m P7vK2Zt R4nL1aB8c D6eF3gH0j S5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3g H 0jS5wYxQ 9mP7vK2Zt R 4nL1aB8cD6eF3g H0jS5w YxQ9mP7vK2ZtR4nL1a B 8cD6eF3gH0jS5w Y xQ9mP7vK2 Z tR 4 nL 1a B8c D6eF3gH 0jS5wYxQ9m P7vK2Z tR 4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK 2Z tR4nL 1 aB8 cD6eF 3g H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD 6 eF 3gH0jS5wYxQ9mP7 vK 2ZtR4nL1aB8c D 6eF3gH0jS5w Y x Q9mP7vK2 ZtR4nL1aB8cD6 eF 3g H 0jS5wYxQ9mP7v K2 ZtR 4nL1aB8 cD6eF3gH0jS5wY xQ 9mP7vK2ZtR 4 nL1aB8cD6 eF3gH0jS5wYxQ9 mP7vK2ZtR4nL1aB 8 cD6eF3gH0 jS5wYxQ9mP7vK2 ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a B8cD6e F 3 g H0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6e F3 gH0jS 5 wYx Q9m P 7vK2ZtR4nL1aB8cD6eF3gH0jS5w YxQ9mP7vK2Z t R4nL1aB8cD6 eF 3gH0 j S5w Y xQ9mP7vK2ZtR 4nL1aB8cD6eF3g H 0jS5wYxQ9 mP7vK2ZtR4nL1aB8cD6 e F 3gH0jS5wYxQ9 mP7vK2ZtR4 nL1aB8cD6eF3g H0jS5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3gH0jS5w YxQ9mP7vK2ZtR4nL1aB8 cD6eF3gH0jS5wYxQ 9m P7 vK2ZtR4nL 1aB8c D6eF 3gH 0jS5wY xQ9mP7vK2ZtR 4n L1aB8cD6eF 3 gH 0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 g H0jS5wYxQ9mP7vK2Zt R 4nL1aB8cD6 e F """ } }, { "uri_parts": { "field": "3gH0jS5wYxQ9", "ignore_missing": true, "ignore_failure": true } }, { "append": { "field": "mP7vK2ZtR4n", "value": [ "L1aB8cD6eF3gH", "0jS5wYxQ9mP7vK2ZtR", "4nL1aB8cD6eF3", "gH0jS5wYxQ9mP7vK2", "ZtR4nL1aB8cD6" ], "allow_duplicates": false } }, { "script": { "description": "eF3gH0 jS5w YxQ9mP", "source": """ 7vK2ZtR 4nL1aB8cD6e F3 g H0 jS 5w YxQ9 mP 7 vK 2Zt R 4nL1aB 8cD6e F 3gH0 jS 5w YxQ9mP7vK2 ZtR4 n L1aB8c D6eF3gH0jS5wYxQ9mP7vK2 Zt R4nL1aB8c D6eF3g H0jS5wY xQ9mP7vK2 Zt R4n L 1aB8 cD 6e F3gH0jS5wY xQ9mP 7 vK2ZtR4 nL1aB8cD6eF3g H0 jS5wYxQ9m P7vK2Z tR4nL1aB 8cD6eF3gH 0j S5w Y xQ9mP7 vK2ZtR 4 nL1aB8cD6e """ } }, { "remove": { "field": [ "F3gH" ], "ignore_missing": true } } ] } } ``` </details> Assisted by Cursor CLI using GPT-5.2-High model --------- Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 4fa1505) # Conflicts: # src/platform/packages/shared/kbn-monaco/src/languages/console/language.ts # src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts # src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.ts # src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx
…tic#251173) Closes elastic#251172 ## Summary This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs. ## DEMO (Before / After) https://github.com/user-attachments/assets/54b90fdb-f0b0-4de0-ae53-6fa4a12a98d9 ## Change 1: Console completion avoids full-buffer reads (`kbn-monaco` Console language) **What changed** - The Console completion provider no longer calls `model.getValue()` to compute `textBeforeCursor`. - ES|QL context detection is only attempted when the cursor is within a `POST /_query` (or `POST _query/async`) request. - When it *is* a `_query` request, the provider reads only the relevant slice via `model.getValueInRange()` (from the request line to the cursor). - For all other requests (or when no request line is found within a bounded lookback), completion delegates to the existing actions provider. **Why** - `model.getValue()` materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI. - ES|QL completion only makes sense for `_query` requests; scoping the work avoids paying the cost for non-ES|QL traffic. **Why this approach** - We preserve existing completion behavior by delegating to the actions provider, but avoid the pathological cost by restricting work to a small, semantically relevant window. ## Change 2: ES|QL quote/query detection is linear-time (`checkForTripleQuotesAndEsqlQuery`) **What changed** - `checkForTripleQuotesAndEsqlQuery` was rewritten to scan the text once and avoid repeated substring+regex work inside the main loop. **Why** - The previous approach could become super-linear on adversarial inputs (many quotes / many potential toggles), which is exactly what large JSON payloads tend to contain. - In the worst case, this turns “type one character” into “do a huge amount of CPU work”, producing the freeze. **Why this approach** - A single forward scan preserves semantics while making the runtime scale predictably with input size. ## Change 3: Monaco `onChange` no longer calls `editor.getValue()` per keystroke (`shared-ux` React Monaco editor) **What changed** - The `onDidChangeModelContent` handler computes the next value by applying `event.changes` to a shadow string (`lastKnownValueRef`) instead of calling `editor.getValue()`. - Controlled-mode syncing (`useLayoutEffect`) first compares the incoming `value` against the shadow value to avoid unnecessary full-buffer reads. **Why** - `editor.getValue()` materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models. - Applying incremental changes keeps the per-keystroke cost proportional to the change set, not the document size. **Why this approach** - Monaco already provides the exact edit deltas (`IModelContentChangedEvent.changes`). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads. ## Tests (what they cover and why) - **`language.test.ts`**: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model. - **`autocomplete_utils.test.ts`**: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance). - **`editor.test.tsx`**: verifies the incremental `onChange` value computation (including multi-change ordering) and controlled sync behavior. ## Test plan - `node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.js` - `node scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.js` ### Manual UI verification (DevTools Console) - Open `DevTools -> Console`. - Expand the `<details>` block below and paste the payload into the editor. - Click at the very end of the pasted content and type a few characters. - Verify the editor remains responsive (no multi-second freeze / hang), and typed characters appear immediately. - Optional: place the cursor inside a `""" ... """` block and type to ensure autocomplete remains responsive. <details> <summary>Sanitized reproduction payload (paste into DevTools Console)</summary> ```http POST _ingest/pipeline/_simulate { "docs": [ { "_source": { "@timestamp": "xQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS", "eventData": { "__original": "5\"wYxQ9mP7vK\"2Zt\"R4nL1aB8c\"D\"6eF3gH\"0\"jS5wYxQ9\"mP\"7vK2ZtR4n\"L1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8c\"D6eF3gH\"0jS5wYxQ9m\"P7vK2ZtR4\"nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Z\"tR4nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Zt\"R4nL1a\"B8cD6eF\"3gH0j\"S5wYxQ9\"m\"P7vK2ZtR4nL1aB8c\"D6\"eF3gH\"0jS5w\"YxQ9mP7v\"K2Z\"tR4\"n\"L1aB8\"c\"D6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B8cD\"6eF3gH0jS5\"wYxQ9mP\"7vK2ZtR4nL\"1aB8cD6\"eF3g\"H0jS5\"wYxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3g\"H\"0jS5wYx\"Q9mP7v\"K2ZtR4n\"L1aB8c\"D6eF3gH\"0\"jS5wYxQ9mP7vK2Z\"t\"R4nL1aB8cD\"6eF3gH\"0jS5wYxQ9mP7v\"K2ZtR4n\"L1aB\"8\"cD6eF\"3\"gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8cD\"6\"eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"n\"L1aB8cD6e\"F3g\"H0jS5wYxQ9mP7vK2ZtR\"4nL1aB8cD\"6eF3gH0jS\"5w\"YxQ9mP7v\"K2ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wY\"xQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4n\"L1aB8\"cD6eF\"3gH\"0jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB8\"cD6eF\"3gH0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1a\"B8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP\"7vK2Z\"tR4nL\"1aB\"8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4nL\"1aB8c\"D6eF3\"gH0\"jS5wYx\"Q9mP7\"vK2ZtR\"4nL1aB8cD\"6\"eF3gH0jS5wYxQ\"9\"mP7vK2ZtR\"4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9mP7v\"K2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1\"aB8cD\"6eF3gH\"0jS5wY\"xQ9mP7\"vK2ZtR4nL\"1aB8c\"D6eF3gH\"0jS\"5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4\"nL\\1a\\\"\\B8cD6\"e\"F3gH\"0jS\"5wYxQ9mP7\"vK2Zt\"R4nL1aB8c\"D6eF3\"gH0jS5wYxQ\"9mP7vK2\"ZtR4nL1aB8\"cD6eF3g\"H0jS\"5wYxQ\"9mP7\"v\"K2ZtR4nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1aB\"8cD6eF3\"g\"H0jS5wYxQ9mP7vK\"2\"ZtR4nL1aB8\"cD6eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL1\"a\"B8cD6e\"F\"3gH0jS5w\"Y\"xQ9mP7vK2ZtR4nL1aB8c\"D\"6eF3gH0jS5\"w\"YxQ9mP7vK2ZtR\"4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7vK2Zt\"R4nL1aB8c\"D6eF3gH0j\"S5\"wYxQ9mP7\"vK2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5w\"YxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL1\"aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5w\"YxQ9m\"P7vK2Z\"tR4nL1aB8\"c\"D6eF3gH0jS5wY\"x\"Q9mP7vK2Z\"tR\"4nL1aB8c\"D6eF3\"gH0jS5wYxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3\"gH0jS\"5wYxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4\"nL1aB\"8cD6eF\"3gH0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5wYxQ9m\"P7v\"K2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B\"8cD6eF\"3\"gH0j\"S5w\"YxQ9mP7vK\"2ZtR4\"nL1aB8cD6\"eF3gH0j\"S5wYxQ9mP7\"vK2ZtR4\"nL1aB8cD6e\"F3gH0jS\"5wYx\"Q9mP7\"vK2Z\"t\"R4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR4nL1a\"B8cD6eF\"3gH0jS5wYx\"Q9mP7vK\"2\"ZtR4nL1aB8cD6eF\"3\"gH0jS5wYxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5w\"Y\"xQ9mP\"7\"vK2ZtR4n\"L\"1aB8cD6eF3gH0jS5wYxQ\"9\"mP7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7v\"K2ZtR4nL1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2Zt\"R4\"nL1aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5wY\"xQ9\"mP7vK\"2ZtR4\"nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS5\"wYxQ9\"mP7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0j\"S5w\"YxQ9m\"P7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4n\"L1aB8\"cD6eF3\"gH0jS5wYx\"Q\"9mP7vK2ZtR4nL\"1\"aB8cD6eF3\"gH\"0jS5wYxQ\"9mP7v\"K2ZtR4nL1aB8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0j\"S5wYx\"Q9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR\"4nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL\"1aB8cD6eF\"3gH\"0\"jS5wYx\"Q\"9mP7\"vK2\"ZtR4nL1aB\"8cD6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4n\"L1aB8cD6\"eF3gH0jS5w\"YxQ9mP7\"vK2Z\"tR4nL\"1aB8\"c\"D6eF3gH0jS5wYxQ9mP7vK2ZtR\"4\"nL1aB8c\"D6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR4nL1\"a\"B8cD6eF3gH0jS5w\"Y\"xQ9mP7vK2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9m\"P7vK\"2\"ZtR4n\"L\"1aB8cD6e\"F\"3gH0jS5wYxQ9mP7vK2Zt\"R\"4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"m\"P7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7vK2Zt\"R4nL1aB8c\"D6\"eF3gH0jS\"5wYxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF\"3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH\"0jS\"5wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8cD6eF3gH0jS5w\"YxQ\"9mP\"7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1a\"B8cD6\"eF3gH\"0jS\"5wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD6\"eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F\"3gH0jS5wY\"xQ\"9mP7vK2Z\"tR4nL\"1aB8cD6eF3gH0\"jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9m\"P7vK2\"ZtR4nL\"1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF3gH0j\"S5w\"YxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5\"wYxQ9mP7v\"K2ZtR4n\"L1\"aB8cD6e\"F3gH\"0jS5wYxQ9\"m\"P7vK2ZtR4nL\"1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4\"nL1aB\"8cD\"6eF3g\"H0j\"S5wYxQ9\"mP7v\"K2ZtR4nL\"1aB8c\"D6eF3gH0jS\"5wY\"xQ9mP7vK2Z\"tR4n\"L1aB8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5\"wYxQ9mP\"7\"vK2ZtR4nL1aB8cD6\"e\"F3gH0jS5wYxQ9mP7\"vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS5\"wYxQ9mP7vK2ZtR4\"nL1a\"B8cD6eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1\"a\"B8cD6eF3\"gH\"0jS5wYxQ9\"mP7vK2Z\"tR4nL1a\"B8cD6eF3gH\"0jS5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1\"aB8cD6eF\"3gH0j\"S5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6\"eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL\"1aB8c\"D6eF3\"gH0jS5wY\"xQ9\"mP7\"v\"K2ZtR4\"n\"L1aB\"8cD\"6eF3gH0jS\"5wYxQ\"9mP7vK2Zt\"R4nL1a\"B8cD6eF3gH\"0jS5wYxQ\"9mP7vK2ZtR\"4nL1aB8c\"D6eF\"3gH0j\"S5wY\"x\"Q9mP7vK2Zt\"R\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4nL1aB\"8\"cD6eF3gH0jS5wYx\"Q\"9mP7vK2ZtR\"4nL1aB\"8cD6eF3gH0jS5\"wYxQ9mP7\"vK2Z\"t\"R4nL1a\"B\"8cD6eF3g\"H\"0jS5wYxQ9mP7vK2ZtR4n\"L\"1aB8cD6eF3\"g\"H0jS5wYxQ9mP7\"v\"K2ZtR4nL1\"aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3\"gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8c\"D6e\"F3g\"H0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4nL\"1aB\"8cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Zt\"R4nL1\"aB8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2\"ZtR\"4nL1a\"B8cD6\"eF3\"gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3g\"H0jS5\"wYxQ9m\"P7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7\"vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5w\"YxQ\"9mP\"7vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2\"ZtR4n\"L1aB8c\"D6eF3g\"H0jS5wY\"xQ9mP7vK2\"ZtR4nL\"1aB8cD6\"eF3\"gH0jS5wYxQ\"9mP\"7vK\"2ZtR4n\"L1aB8cD6eF3gH\"0jS5wYxQ\"9mP\"7vK2ZtR4n\"L1aB8cD\"6e\"F3gH0jS\"5wYx\"Q9mP7vK2Z\"t\"R4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB\"8c\"D6eF3\"gH0\"jS5wY\"xQ9\"mP7vK2Z\"tR4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9m\"P7v\"K2ZtR4nL1a\"B8cD\"6eF3gH0jS5wYxQ9m\"P7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2ZtR\"4\"nL1aB8cD6eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL1\"aB8\"cD6e\"F3gH0\"jS5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF\"3gH0jS5wYx\"Q9mP7v\"K2ZtR4nL1\"a\"B8cD6eF3gH0jS\"5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL1\"aB8\"cD6eF3gH0\"j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6e\"F\"3gH0jS5wYxQ9mP7\"vK2\"ZtR4nL1aB\"8\"cD6eF3gH\"0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1aB8cD\"6eF\"3gH0jS\"5w\"YxQ9\"mP7vK2ZtR4n\"L1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8\"c\"D6eF3g\"H0jS5wYxQ9\"mP7vK\"2ZtR4nL1aB8\"cD6eF3gH0jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8cD6\"eF3gH0jS5wYx\"Q9mP7vK2ZtR\"4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3gH0jS5\"wYxQ9mP7v\"K2ZtR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR4nL1a\"B8cD6eF3g\"H0jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL1\"a\"B8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6eF3\"gH0\"jS5wYxQ\"9mP\"7vK2ZtR4n\"L1a\"B8cD6eF3\"gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1aB\"8\"cD6eF\"3\"gH0jS5w\"YxQ9mP7v\"K2ZtR4nL1\"aB8cD6\"eF3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wYxQ9mP7vK\"2ZtR\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9mP\"7vK2ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4\"n\"L1aB8c\"D\"6eF3gH0\"jS5wYxQ9\"mP7vK2ZtR\"4nL1aB\"8cD6eF3g\"H0j\"S5wYxQ9mP\"7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0jS5wYxQ9m\"P7v\"K2ZtR4n\"L1aB8cD6\"eF3gH0jS5\"wYxQ9m\"P7vK2ZtR\"4nL\"1aB8cD6eF\"3gH0j\"S5wYxQ9mP\"7\"vK2ZtR\"4\"nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD\"6eF\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9mP\"7vK2ZtR4n\"L\"1aB8cD6\"e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6eF3gH0jS5\"wYx\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6e\"F\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR\"4nL1aB8cD\"6eF\"3gH0jS5w\"YxQ\"9mP7vK2Zt\"R4nL1\"aB8cD6eF3\"g\"H0jS5w\"Y\"xQ9mP7v\"K2ZtR4nL\"1aB8cD6eF\"3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8c\"D6eF3gH0jS5wYxQ\"9mP\"7vK2ZtR4nL1\"aB8\"cD6eF3g\"H0jS5wYx\"Q9mP7vK2Z\"tR4nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4nL\"1a\"B8cD6eF3gH0\"jS5w\"YxQ9mP7vK\"2\"ZtR4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6eF\"3\"gH0jS5w\"YxQ\"9mP7vK2Zt\"R4n\"L1aB8cD6\"eF3\"gH0jS5wYx\"Q9m\"P7vK2ZtR4nL1aB8\"cD6\"eF3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wY\"xQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF3g\"H\"0jS5wY\"x\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD6eF3gH0\"jS5\"wYxQ9mP7vK2\"ZtR\"4nL1aB8\"cD6\"eF3gH0jS5\"wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD\"6eF3g\"H0jS5wYxQ\"9\"mP7vK2Z\"t\"R4nL1aB\"8cD\"6eF3gH0jS\"5wY\"xQ9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5wYxQ9mP\"7vK\"2ZtR4nL1aB8\"cD6\"eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8\"cD6\"eF3gH0jS5\"wYxQ9\"mP7vK2ZtR\"4\"nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9mP\"7vK2ZtR4n\"L1aB8c\"D6eF3gH0\"jS5\"wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6eF3\"gH0\"jS5wYxQ9mP7\"vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP\"7v\"K2ZtR4nL1aB8c\"D6eF\"3gH0jS5wY\"x\"Q9mP7\"v\"K2ZtR4n\"L1aB8cD6eF\"3gH0jS5wY\"xQ9mP7v\"K2ZtR4nL\"1aB\"8cD6eF3gH\"0jS\"5wYxQ9mP7vK2ZtR\"4nL\"1aB8cD6eF3g\"H0jS5\"wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8cD6\"eF3gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8\"cD\"6eF3g\"H0jS5\"wYxQ9mP7vK2\"ZtR4n\"L1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2\"Zt\"R4nL1\"aB8cD6e\"F3gH0j\"S5wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD6eF\"3gH0\"jS5wYxQ9\"mP\"7vK2ZtR4\"nL1aB\"8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB\"8cD\"6eF3gH0jS\"5wYx" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "Q9mP7vK2ZtR4nL1aB8cD6", "moduleId": "eF3gH0jS5wY" }, "customerInfo": { "customerId": "xQ9mP7vK2Zt", "deviceId": "R4nL1aB8cD6eF3gH0jS5w", "lineId": "YxQ9mP7vK2ZtR4", "publicIp": "nL1aB8cD6eF3" } } }, { "_index": "gH0jS5wYxQ9mP7vK2Zt", "_source": { "kafka": { "eventId": "R4nL1aB8cD6e", "moduleId": "F3gH0jS5w" }, "customerInfo": { "customerId": "YxQ9mP7vK2Z", "deviceId": "tR4nL1aB8cD6eF3gH0jS5", "lineId": "wYxQ9mP7vK2ZtR", "publicIp": "4nL1aB8cD6eF" }, "eventData": { "__original": "3\"gH0jS5w\"Yx\"Q9m\"P\"7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2\"Z\"tR4nL1aB 8cD6eF 3g H0jS5wYx\"Q\"9mP7vK2ZtR4nL1aB8c\"D6eF3\"gH0jS5wY\"xQ9mP7\"vK2ZtR\"4nL1aB8\"cD6eF3gH0jS5wYxQ9mP7vK\"2ZtR\"4nL1aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2ZtR4n\"L1aB8cD\"6eF3gH\"0\"jS5wYxQ\"9\"mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0\"j\"S5wYxQ9\"m\"P7vK2ZtR4nL1\"a\"B8cD6eF3g\"H\"0jS5wYxQ9mP7\"v\"K2ZtR4n\"L\"1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2ZtR4nL1aB\"8cD6e\"F3gH0jS5wYx\"Q9mP7\"vK2ZtR4nL1\"aB8cD6" } } }, { "_source": { "eventData": { "__original": "e\"F3gH0jS\"5w\"YxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR\"4nL1aB8cD6eF3g\"H0j\"S5wYxQ9m\"P7v\"K2ZtR\"4\"nL1aB8cD 6eF3gH 0j S5wYxQ9mP7v K\"2\"ZtR4nL1aB8cD6eF3gH\"0jS5w\"YxQ9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3g\"H0jS5wYxQ9mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB8cD\"6eF3gH0\"jS5wYx\"Q\"9mP7vK2\"Z\"tR4nL1aB8cD6\"eF3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL\"1\"aB8cD6eF3gH0\"j\"S5wYxQ9mP\"7\"vK2ZtR4nL1aB\"8\"cD6eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7\"vK2ZtR4nL1a\"B8cD\"6eF3gH0jS5wY\"xQ\"9mP7vK2Z\"t\"R4n\"L\"1aB8cD6eF3gH0jS\"5wYxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF3gH\"0jS5wYx\"Q9\"mP7vK2Zt\"R\"4nL1a\"B8c\"D6eF3gH0jS\"5wYxQ9m" }, "customerInfo": { "customerId": "P7vK2ZtR4nL", "deviceId": "1aB8cD6eF3gH0jS5wYxQ9", "lineId": "mP7vK2ZtR4nL1a", "publicIp": "B8cD6eF3gH0j" }, "kafka": { "eventId": "S5wYxQ9mP7vK", "moduleId": "2ZtR4nL1a" } } }, { "_source": { "@timestamp": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "eventData": { "__original": "L\"1aB8cD6eF3gH0jS5w\"YxQ9m\"P7vK2ZtR4nL1aB8cD6e\"F3gH0jS\"5wYxQ9mP7vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2Zt\"R4nL1aB8\"cD6eF" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "3gH0jS5w", "moduleId": "YxQ9mP7vK" }, "@Version": "2", "customerInfo": { "customerId": "ZtR4nL1aB8c", "deviceId": "D6eF3gH0jS5wYxQ9mP7vK", "lineId": "2ZtR4nL1aB8cD6", "publicIp": "eF3gH0jS5wYx" } } } ], "pipeline": { "processors": [ { "rename": { "field": "Q9mP7vK2ZtR4nL1aB8cD", "target_field": "6eF3gH0jS5wYxQ" } }, { "lowercase": { "field": "9mP7vK2ZtR4nL1", "target_field": "aB8cD6eF3gH", "ignore_missing": true } }, { "set": { "field": "0jS5wYxQ9mP7", "copy_from": "vK2ZtR4nL1aB8", "ignore_empty_value": true } }, { "set": { "field": "cD6eF3gH0", "copy_from": "jS5wYxQ9mP7vK2ZtR4nL1", "ignore_empty_value": true } }, { "script": { "source": """ aB8 cD6eF3gH0j S 5wYxQ9mP7vK2ZtR4 nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP""", "if": "7vK2ZtR4nL1aB8cD 6e F3gH 0j S5wYxQ9mP7vK2ZtR4nL 1a B8cD" } }, { "script": { "description": "6eF3gH0 jS5wYxQ9 mP 7vK2ZtR4nL1 aB8cD6e F3gH 0jS", "source": "5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "if": "S5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF 3gH0 jS 5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 gH0jS5wYxQ 9mP7vK2" } }, { "set": { "field": "ZtR4nL1aB8cD6e", "copy_from": "F3gH0jS5wYxQ9mP7vK2", "ignore_empty_value": true } }, { "set": { "field": "ZtR4nL1aB8cD6", "copy_from": "eF3gH0jS5wYxQ9mP7vK2Zt", "ignore_empty_value": true } }, { "rename": { "field": "R4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2Zt", "ignore_missing": true } }, { "script": { "source": """ R4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0 jS5wYxQ9mP7v """, "if": "K2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2Zt R4 nL1a" } }, { "rename": { "field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "target_field": "eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF", "target_field": "3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3", "target_field": "gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "ignore_missing": true } }, { "rename": { "field": "eF3gH0jS5wYxQ9mP7v", "target_field": "K2ZtR4nL1aB8cD6eF3gH0jS5w", "ignore_missing": true } }, { "rename": { "field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3g", "target_field": "H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD", "ignore_missing": true } }, { "rename": { "field": "6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a", "target_field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "ignore_missing": true } }, { "rename": { "field": "L1aB8cD6eF3gH0jS5wYxQ9mP7vK", "target_field": "2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9", "ignore_missing": true } }, { "rename": { "field": "mP7vK2ZtR4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "ignore_missing": true } }, { "script": { "description": "S5wYxQ9mP 7vK2ZtR 4nL1aB8 cD6eF 3gH 0jS5wYx Q9mP7vK 2ZtR", "lang": "4nL1aB8c", "source": """ D6 eF3gH0jS5wYxQ9mP7vK2ZtR4nL 1a B8cD6 e F3g H0j S 5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF3gH0jS5w Y xQ9mP7vK2Z tR 4nL1 a B8c D 6eF3gH0jS5w YxQ9mP7vK2ZtR4n L 1 aB8c D6eF3gH0jS5wYxQ9mP7vK 2ZtR 4nL1aB8cD6eF3gH0jS5wY xQ9mP 7vK2ZtR4nL1aB8cD6eF3g H0 jS 5wY xQ9mP7vK2ZtR4n L1 a B8cD6 eF3g H 0j S 5wYxQ9mP 7 vK2ZtR4n L1 aB8c D 6eF 3 gH0jS5wYx Q9mP7vK2ZtR4 n L 1aB8cD6e F3gH0jS5wYxQ9mP7vK2 Z tR4nL 1a B 8c D6 eF3gH0 jS5wYxQ 9m P7vK2ZtR4nL1aB8cD6eF3gH0 jS 5wYxQ 9 mP7 vK2 Z tR4nL1aB8cD6eF3gH0jS5wY xQ9mP7vK2ZtR4nL1a B 8 cD6eF3gH 0jS5wYxQ9m P7vK2Zt R4nL1aB8c D6eF3gH0j S5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3g H 0jS5wYxQ 9mP7vK2Zt R 4nL1aB8cD6eF3g H0jS5w YxQ9mP7vK2ZtR4nL1a B 8cD6eF3gH0jS5w Y xQ9mP7vK2 Z tR 4 nL 1a B8c D6eF3gH 0jS5wYxQ9m P7vK2Z tR 4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK 2Z tR4nL 1 aB8 cD6eF 3g H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD 6 eF 3gH0jS5wYxQ9mP7 vK 2ZtR4nL1aB8c D 6eF3gH0jS5w Y x Q9mP7vK2 ZtR4nL1aB8cD6 eF 3g H 0jS5wYxQ9mP7v K2 ZtR 4nL1aB8 cD6eF3gH0jS5wY xQ 9mP7vK2ZtR 4 nL1aB8cD6 eF3gH0jS5wYxQ9 mP7vK2ZtR4nL1aB 8 cD6eF3gH0 jS5wYxQ9mP7vK2 ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a B8cD6e F 3 g H0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6e F3 gH0jS 5 wYx Q9m P 7vK2ZtR4nL1aB8cD6eF3gH0jS5w YxQ9mP7vK2Z t R4nL1aB8cD6 eF 3gH0 j S5w Y xQ9mP7vK2ZtR 4nL1aB8cD6eF3g H 0jS5wYxQ9 mP7vK2ZtR4nL1aB8cD6 e F 3gH0jS5wYxQ9 mP7vK2ZtR4 nL1aB8cD6eF3g H0jS5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3gH0jS5w YxQ9mP7vK2ZtR4nL1aB8 cD6eF3gH0jS5wYxQ 9m P7 vK2ZtR4nL 1aB8c D6eF 3gH 0jS5wY xQ9mP7vK2ZtR 4n L1aB8cD6eF 3 gH 0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 g H0jS5wYxQ9mP7vK2Zt R 4nL1aB8cD6 e F """ } }, { "uri_parts": { "field": "3gH0jS5wYxQ9", "ignore_missing": true, "ignore_failure": true } }, { "append": { "field": "mP7vK2ZtR4n", "value": [ "L1aB8cD6eF3gH", "0jS5wYxQ9mP7vK2ZtR", "4nL1aB8cD6eF3", "gH0jS5wYxQ9mP7vK2", "ZtR4nL1aB8cD6" ], "allow_duplicates": false } }, { "script": { "description": "eF3gH0 jS5w YxQ9mP", "source": """ 7vK2ZtR 4nL1aB8cD6e F3 g H0 jS 5w YxQ9 mP 7 vK 2Zt R 4nL1aB 8cD6e F 3gH0 jS 5w YxQ9mP7vK2 ZtR4 n L1aB8c D6eF3gH0jS5wYxQ9mP7vK2 Zt R4nL1aB8c D6eF3g H0jS5wY xQ9mP7vK2 Zt R4n L 1aB8 cD 6e F3gH0jS5wY xQ9mP 7 vK2ZtR4 nL1aB8cD6eF3g H0 jS5wYxQ9m P7vK2Z tR4nL1aB 8cD6eF3gH 0j S5w Y xQ9mP7 vK2ZtR 4 nL1aB8cD6e """ } }, { "remove": { "field": [ "F3gH" ], "ignore_missing": true } } ] } } ``` </details> Assisted by Cursor CLI using GPT-5.2-High model --------- Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 4fa1505) # Conflicts: # src/platform/packages/shared/kbn-monaco/src/languages/console/language.ts # src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts # src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.ts # src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx
…tic#251173) Closes elastic#251172 ## Summary This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs. ## DEMO (Before / After) https://github.com/user-attachments/assets/54b90fdb-f0b0-4de0-ae53-6fa4a12a98d9 ## Change 1: Console completion avoids full-buffer reads (`kbn-monaco` Console language) **What changed** - The Console completion provider no longer calls `model.getValue()` to compute `textBeforeCursor`. - ES|QL context detection is only attempted when the cursor is within a `POST /_query` (or `POST _query/async`) request. - When it *is* a `_query` request, the provider reads only the relevant slice via `model.getValueInRange()` (from the request line to the cursor). - For all other requests (or when no request line is found within a bounded lookback), completion delegates to the existing actions provider. **Why** - `model.getValue()` materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI. - ES|QL completion only makes sense for `_query` requests; scoping the work avoids paying the cost for non-ES|QL traffic. **Why this approach** - We preserve existing completion behavior by delegating to the actions provider, but avoid the pathological cost by restricting work to a small, semantically relevant window. ## Change 2: ES|QL quote/query detection is linear-time (`checkForTripleQuotesAndEsqlQuery`) **What changed** - `checkForTripleQuotesAndEsqlQuery` was rewritten to scan the text once and avoid repeated substring+regex work inside the main loop. **Why** - The previous approach could become super-linear on adversarial inputs (many quotes / many potential toggles), which is exactly what large JSON payloads tend to contain. - In the worst case, this turns “type one character” into “do a huge amount of CPU work”, producing the freeze. **Why this approach** - A single forward scan preserves semantics while making the runtime scale predictably with input size. ## Change 3: Monaco `onChange` no longer calls `editor.getValue()` per keystroke (`shared-ux` React Monaco editor) **What changed** - The `onDidChangeModelContent` handler computes the next value by applying `event.changes` to a shadow string (`lastKnownValueRef`) instead of calling `editor.getValue()`. - Controlled-mode syncing (`useLayoutEffect`) first compares the incoming `value` against the shadow value to avoid unnecessary full-buffer reads. **Why** - `editor.getValue()` materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models. - Applying incremental changes keeps the per-keystroke cost proportional to the change set, not the document size. **Why this approach** - Monaco already provides the exact edit deltas (`IModelContentChangedEvent.changes`). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads. ## Tests (what they cover and why) - **`language.test.ts`**: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model. - **`autocomplete_utils.test.ts`**: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance). - **`editor.test.tsx`**: verifies the incremental `onChange` value computation (including multi-change ordering) and controlled sync behavior. ## Test plan - `node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.js` - `node scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.js` ### Manual UI verification (DevTools Console) - Open `DevTools -> Console`. - Expand the `<details>` block below and paste the payload into the editor. - Click at the very end of the pasted content and type a few characters. - Verify the editor remains responsive (no multi-second freeze / hang), and typed characters appear immediately. - Optional: place the cursor inside a `""" ... """` block and type to ensure autocomplete remains responsive. <details> <summary>Sanitized reproduction payload (paste into DevTools Console)</summary> ```http POST _ingest/pipeline/_simulate { "docs": [ { "_source": { "@timestamp": "xQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS", "eventData": { "__original": "5\"wYxQ9mP7vK\"2Zt\"R4nL1aB8c\"D\"6eF3gH\"0\"jS5wYxQ9\"mP\"7vK2ZtR4n\"L1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8c\"D6eF3gH\"0jS5wYxQ9m\"P7vK2ZtR4\"nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Z\"tR4nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Zt\"R4nL1a\"B8cD6eF\"3gH0j\"S5wYxQ9\"m\"P7vK2ZtR4nL1aB8c\"D6\"eF3gH\"0jS5w\"YxQ9mP7v\"K2Z\"tR4\"n\"L1aB8\"c\"D6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B8cD\"6eF3gH0jS5\"wYxQ9mP\"7vK2ZtR4nL\"1aB8cD6\"eF3g\"H0jS5\"wYxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3g\"H\"0jS5wYx\"Q9mP7v\"K2ZtR4n\"L1aB8c\"D6eF3gH\"0\"jS5wYxQ9mP7vK2Z\"t\"R4nL1aB8cD\"6eF3gH\"0jS5wYxQ9mP7v\"K2ZtR4n\"L1aB\"8\"cD6eF\"3\"gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8cD\"6\"eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"n\"L1aB8cD6e\"F3g\"H0jS5wYxQ9mP7vK2ZtR\"4nL1aB8cD\"6eF3gH0jS\"5w\"YxQ9mP7v\"K2ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wY\"xQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4n\"L1aB8\"cD6eF\"3gH\"0jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB8\"cD6eF\"3gH0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1a\"B8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP\"7vK2Z\"tR4nL\"1aB\"8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4nL\"1aB8c\"D6eF3\"gH0\"jS5wYx\"Q9mP7\"vK2ZtR\"4nL1aB8cD\"6\"eF3gH0jS5wYxQ\"9\"mP7vK2ZtR\"4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9mP7v\"K2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1\"aB8cD\"6eF3gH\"0jS5wY\"xQ9mP7\"vK2ZtR4nL\"1aB8c\"D6eF3gH\"0jS\"5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4\"nL\\1a\\\"\\B8cD6\"e\"F3gH\"0jS\"5wYxQ9mP7\"vK2Zt\"R4nL1aB8c\"D6eF3\"gH0jS5wYxQ\"9mP7vK2\"ZtR4nL1aB8\"cD6eF3g\"H0jS\"5wYxQ\"9mP7\"v\"K2ZtR4nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1aB\"8cD6eF3\"g\"H0jS5wYxQ9mP7vK\"2\"ZtR4nL1aB8\"cD6eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL1\"a\"B8cD6e\"F\"3gH0jS5w\"Y\"xQ9mP7vK2ZtR4nL1aB8c\"D\"6eF3gH0jS5\"w\"YxQ9mP7vK2ZtR\"4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7vK2Zt\"R4nL1aB8c\"D6eF3gH0j\"S5\"wYxQ9mP7\"vK2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5w\"YxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL1\"aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5w\"YxQ9m\"P7vK2Z\"tR4nL1aB8\"c\"D6eF3gH0jS5wY\"x\"Q9mP7vK2Z\"tR\"4nL1aB8c\"D6eF3\"gH0jS5wYxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3\"gH0jS\"5wYxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4\"nL1aB\"8cD6eF\"3gH0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5wYxQ9m\"P7v\"K2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B\"8cD6eF\"3\"gH0j\"S5w\"YxQ9mP7vK\"2ZtR4\"nL1aB8cD6\"eF3gH0j\"S5wYxQ9mP7\"vK2ZtR4\"nL1aB8cD6e\"F3gH0jS\"5wYx\"Q9mP7\"vK2Z\"t\"R4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR4nL1a\"B8cD6eF\"3gH0jS5wYx\"Q9mP7vK\"2\"ZtR4nL1aB8cD6eF\"3\"gH0jS5wYxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5w\"Y\"xQ9mP\"7\"vK2ZtR4n\"L\"1aB8cD6eF3gH0jS5wYxQ\"9\"mP7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7v\"K2ZtR4nL1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2Zt\"R4\"nL1aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5wY\"xQ9\"mP7vK\"2ZtR4\"nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS5\"wYxQ9\"mP7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0j\"S5w\"YxQ9m\"P7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4n\"L1aB8\"cD6eF3\"gH0jS5wYx\"Q\"9mP7vK2ZtR4nL\"1\"aB8cD6eF3\"gH\"0jS5wYxQ\"9mP7v\"K2ZtR4nL1aB8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0j\"S5wYx\"Q9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR\"4nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL\"1aB8cD6eF\"3gH\"0\"jS5wYx\"Q\"9mP7\"vK2\"ZtR4nL1aB\"8cD6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4n\"L1aB8cD6\"eF3gH0jS5w\"YxQ9mP7\"vK2Z\"tR4nL\"1aB8\"c\"D6eF3gH0jS5wYxQ9mP7vK2ZtR\"4\"nL1aB8c\"D6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR4nL1\"a\"B8cD6eF3gH0jS5w\"Y\"xQ9mP7vK2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9m\"P7vK\"2\"ZtR4n\"L\"1aB8cD6e\"F\"3gH0jS5wYxQ9mP7vK2Zt\"R\"4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"m\"P7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7vK2Zt\"R4nL1aB8c\"D6\"eF3gH0jS\"5wYxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF\"3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH\"0jS\"5wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8cD6eF3gH0jS5w\"YxQ\"9mP\"7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1a\"B8cD6\"eF3gH\"0jS\"5wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD6\"eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F\"3gH0jS5wY\"xQ\"9mP7vK2Z\"tR4nL\"1aB8cD6eF3gH0\"jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9m\"P7vK2\"ZtR4nL\"1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF3gH0j\"S5w\"YxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5\"wYxQ9mP7v\"K2ZtR4n\"L1\"aB8cD6e\"F3gH\"0jS5wYxQ9\"m\"P7vK2ZtR4nL\"1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4\"nL1aB\"8cD\"6eF3g\"H0j\"S5wYxQ9\"mP7v\"K2ZtR4nL\"1aB8c\"D6eF3gH0jS\"5wY\"xQ9mP7vK2Z\"tR4n\"L1aB8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5\"wYxQ9mP\"7\"vK2ZtR4nL1aB8cD6\"e\"F3gH0jS5wYxQ9mP7\"vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS5\"wYxQ9mP7vK2ZtR4\"nL1a\"B8cD6eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1\"a\"B8cD6eF3\"gH\"0jS5wYxQ9\"mP7vK2Z\"tR4nL1a\"B8cD6eF3gH\"0jS5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1\"aB8cD6eF\"3gH0j\"S5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6\"eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL\"1aB8c\"D6eF3\"gH0jS5wY\"xQ9\"mP7\"v\"K2ZtR4\"n\"L1aB\"8cD\"6eF3gH0jS\"5wYxQ\"9mP7vK2Zt\"R4nL1a\"B8cD6eF3gH\"0jS5wYxQ\"9mP7vK2ZtR\"4nL1aB8c\"D6eF\"3gH0j\"S5wY\"x\"Q9mP7vK2Zt\"R\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4nL1aB\"8\"cD6eF3gH0jS5wYx\"Q\"9mP7vK2ZtR\"4nL1aB\"8cD6eF3gH0jS5\"wYxQ9mP7\"vK2Z\"t\"R4nL1a\"B\"8cD6eF3g\"H\"0jS5wYxQ9mP7vK2ZtR4n\"L\"1aB8cD6eF3\"g\"H0jS5wYxQ9mP7\"v\"K2ZtR4nL1\"aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3\"gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8c\"D6e\"F3g\"H0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4nL\"1aB\"8cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Zt\"R4nL1\"aB8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2\"ZtR\"4nL1a\"B8cD6\"eF3\"gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3g\"H0jS5\"wYxQ9m\"P7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7\"vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5w\"YxQ\"9mP\"7vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2\"ZtR4n\"L1aB8c\"D6eF3g\"H0jS5wY\"xQ9mP7vK2\"ZtR4nL\"1aB8cD6\"eF3\"gH0jS5wYxQ\"9mP\"7vK\"2ZtR4n\"L1aB8cD6eF3gH\"0jS5wYxQ\"9mP\"7vK2ZtR4n\"L1aB8cD\"6e\"F3gH0jS\"5wYx\"Q9mP7vK2Z\"t\"R4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB\"8c\"D6eF3\"gH0\"jS5wY\"xQ9\"mP7vK2Z\"tR4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9m\"P7v\"K2ZtR4nL1a\"B8cD\"6eF3gH0jS5wYxQ9m\"P7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2ZtR\"4\"nL1aB8cD6eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL1\"aB8\"cD6e\"F3gH0\"jS5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF\"3gH0jS5wYx\"Q9mP7v\"K2ZtR4nL1\"a\"B8cD6eF3gH0jS\"5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL1\"aB8\"cD6eF3gH0\"j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6e\"F\"3gH0jS5wYxQ9mP7\"vK2\"ZtR4nL1aB\"8\"cD6eF3gH\"0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1aB8cD\"6eF\"3gH0jS\"5w\"YxQ9\"mP7vK2ZtR4n\"L1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8\"c\"D6eF3g\"H0jS5wYxQ9\"mP7vK\"2ZtR4nL1aB8\"cD6eF3gH0jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8cD6\"eF3gH0jS5wYx\"Q9mP7vK2ZtR\"4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3gH0jS5\"wYxQ9mP7v\"K2ZtR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR4nL1a\"B8cD6eF3g\"H0jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL1\"a\"B8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6eF3\"gH0\"jS5wYxQ\"9mP\"7vK2ZtR4n\"L1a\"B8cD6eF3\"gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1aB\"8\"cD6eF\"3\"gH0jS5w\"YxQ9mP7v\"K2ZtR4nL1\"aB8cD6\"eF3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wYxQ9mP7vK\"2ZtR\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9mP\"7vK2ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4\"n\"L1aB8c\"D\"6eF3gH0\"jS5wYxQ9\"mP7vK2ZtR\"4nL1aB\"8cD6eF3g\"H0j\"S5wYxQ9mP\"7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0jS5wYxQ9m\"P7v\"K2ZtR4n\"L1aB8cD6\"eF3gH0jS5\"wYxQ9m\"P7vK2ZtR\"4nL\"1aB8cD6eF\"3gH0j\"S5wYxQ9mP\"7\"vK2ZtR\"4\"nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD\"6eF\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9mP\"7vK2ZtR4n\"L\"1aB8cD6\"e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6eF3gH0jS5\"wYx\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6e\"F\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR\"4nL1aB8cD\"6eF\"3gH0jS5w\"YxQ\"9mP7vK2Zt\"R4nL1\"aB8cD6eF3\"g\"H0jS5w\"Y\"xQ9mP7v\"K2ZtR4nL\"1aB8cD6eF\"3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8c\"D6eF3gH0jS5wYxQ\"9mP\"7vK2ZtR4nL1\"aB8\"cD6eF3g\"H0jS5wYx\"Q9mP7vK2Z\"tR4nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4nL\"1a\"B8cD6eF3gH0\"jS5w\"YxQ9mP7vK\"2\"ZtR4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6eF\"3\"gH0jS5w\"YxQ\"9mP7vK2Zt\"R4n\"L1aB8cD6\"eF3\"gH0jS5wYx\"Q9m\"P7vK2ZtR4nL1aB8\"cD6\"eF3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wY\"xQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF3g\"H\"0jS5wY\"x\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD6eF3gH0\"jS5\"wYxQ9mP7vK2\"ZtR\"4nL1aB8\"cD6\"eF3gH0jS5\"wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD\"6eF3g\"H0jS5wYxQ\"9\"mP7vK2Z\"t\"R4nL1aB\"8cD\"6eF3gH0jS\"5wY\"xQ9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5wYxQ9mP\"7vK\"2ZtR4nL1aB8\"cD6\"eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8\"cD6\"eF3gH0jS5\"wYxQ9\"mP7vK2ZtR\"4\"nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9mP\"7vK2ZtR4n\"L1aB8c\"D6eF3gH0\"jS5\"wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6eF3\"gH0\"jS5wYxQ9mP7\"vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP\"7v\"K2ZtR4nL1aB8c\"D6eF\"3gH0jS5wY\"x\"Q9mP7\"v\"K2ZtR4n\"L1aB8cD6eF\"3gH0jS5wY\"xQ9mP7v\"K2ZtR4nL\"1aB\"8cD6eF3gH\"0jS\"5wYxQ9mP7vK2ZtR\"4nL\"1aB8cD6eF3g\"H0jS5\"wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8cD6\"eF3gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8\"cD\"6eF3g\"H0jS5\"wYxQ9mP7vK2\"ZtR4n\"L1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2\"Zt\"R4nL1\"aB8cD6e\"F3gH0j\"S5wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD6eF\"3gH0\"jS5wYxQ9\"mP\"7vK2ZtR4\"nL1aB\"8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB\"8cD\"6eF3gH0jS\"5wYx" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "Q9mP7vK2ZtR4nL1aB8cD6", "moduleId": "eF3gH0jS5wY" }, "customerInfo": { "customerId": "xQ9mP7vK2Zt", "deviceId": "R4nL1aB8cD6eF3gH0jS5w", "lineId": "YxQ9mP7vK2ZtR4", "publicIp": "nL1aB8cD6eF3" } } }, { "_index": "gH0jS5wYxQ9mP7vK2Zt", "_source": { "kafka": { "eventId": "R4nL1aB8cD6e", "moduleId": "F3gH0jS5w" }, "customerInfo": { "customerId": "YxQ9mP7vK2Z", "deviceId": "tR4nL1aB8cD6eF3gH0jS5", "lineId": "wYxQ9mP7vK2ZtR", "publicIp": "4nL1aB8cD6eF" }, "eventData": { "__original": "3\"gH0jS5w\"Yx\"Q9m\"P\"7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2\"Z\"tR4nL1aB 8cD6eF 3g H0jS5wYx\"Q\"9mP7vK2ZtR4nL1aB8c\"D6eF3\"gH0jS5wY\"xQ9mP7\"vK2ZtR\"4nL1aB8\"cD6eF3gH0jS5wYxQ9mP7vK\"2ZtR\"4nL1aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2ZtR4n\"L1aB8cD\"6eF3gH\"0\"jS5wYxQ\"9\"mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0\"j\"S5wYxQ9\"m\"P7vK2ZtR4nL1\"a\"B8cD6eF3g\"H\"0jS5wYxQ9mP7\"v\"K2ZtR4n\"L\"1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2ZtR4nL1aB\"8cD6e\"F3gH0jS5wYx\"Q9mP7\"vK2ZtR4nL1\"aB8cD6" } } }, { "_source": { "eventData": { "__original": "e\"F3gH0jS\"5w\"YxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR\"4nL1aB8cD6eF3g\"H0j\"S5wYxQ9m\"P7v\"K2ZtR\"4\"nL1aB8cD 6eF3gH 0j S5wYxQ9mP7v K\"2\"ZtR4nL1aB8cD6eF3gH\"0jS5w\"YxQ9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3g\"H0jS5wYxQ9mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB8cD\"6eF3gH0\"jS5wYx\"Q\"9mP7vK2\"Z\"tR4nL1aB8cD6\"eF3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL\"1\"aB8cD6eF3gH0\"j\"S5wYxQ9mP\"7\"vK2ZtR4nL1aB\"8\"cD6eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7\"vK2ZtR4nL1a\"B8cD\"6eF3gH0jS5wY\"xQ\"9mP7vK2Z\"t\"R4n\"L\"1aB8cD6eF3gH0jS\"5wYxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF3gH\"0jS5wYx\"Q9\"mP7vK2Zt\"R\"4nL1a\"B8c\"D6eF3gH0jS\"5wYxQ9m" }, "customerInfo": { "customerId": "P7vK2ZtR4nL", "deviceId": "1aB8cD6eF3gH0jS5wYxQ9", "lineId": "mP7vK2ZtR4nL1a", "publicIp": "B8cD6eF3gH0j" }, "kafka": { "eventId": "S5wYxQ9mP7vK", "moduleId": "2ZtR4nL1a" } } }, { "_source": { "@timestamp": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "eventData": { "__original": "L\"1aB8cD6eF3gH0jS5w\"YxQ9m\"P7vK2ZtR4nL1aB8cD6e\"F3gH0jS\"5wYxQ9mP7vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2Zt\"R4nL1aB8\"cD6eF" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "3gH0jS5w", "moduleId": "YxQ9mP7vK" }, "@Version": "2", "customerInfo": { "customerId": "ZtR4nL1aB8c", "deviceId": "D6eF3gH0jS5wYxQ9mP7vK", "lineId": "2ZtR4nL1aB8cD6", "publicIp": "eF3gH0jS5wYx" } } } ], "pipeline": { "processors": [ { "rename": { "field": "Q9mP7vK2ZtR4nL1aB8cD", "target_field": "6eF3gH0jS5wYxQ" } }, { "lowercase": { "field": "9mP7vK2ZtR4nL1", "target_field": "aB8cD6eF3gH", "ignore_missing": true } }, { "set": { "field": "0jS5wYxQ9mP7", "copy_from": "vK2ZtR4nL1aB8", "ignore_empty_value": true } }, { "set": { "field": "cD6eF3gH0", "copy_from": "jS5wYxQ9mP7vK2ZtR4nL1", "ignore_empty_value": true } }, { "script": { "source": """ aB8 cD6eF3gH0j S 5wYxQ9mP7vK2ZtR4 nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP""", "if": "7vK2ZtR4nL1aB8cD 6e F3gH 0j S5wYxQ9mP7vK2ZtR4nL 1a B8cD" } }, { "script": { "description": "6eF3gH0 jS5wYxQ9 mP 7vK2ZtR4nL1 aB8cD6e F3gH 0jS", "source": "5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "if": "S5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF 3gH0 jS 5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 gH0jS5wYxQ 9mP7vK2" } }, { "set": { "field": "ZtR4nL1aB8cD6e", "copy_from": "F3gH0jS5wYxQ9mP7vK2", "ignore_empty_value": true } }, { "set": { "field": "ZtR4nL1aB8cD6", "copy_from": "eF3gH0jS5wYxQ9mP7vK2Zt", "ignore_empty_value": true } }, { "rename": { "field": "R4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2Zt", "ignore_missing": true } }, { "script": { "source": """ R4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0 jS5wYxQ9mP7v """, "if": "K2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2Zt R4 nL1a" } }, { "rename": { "field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "target_field": "eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF", "target_field": "3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3", "target_field": "gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "ignore_missing": true } }, { "rename": { "field": "eF3gH0jS5wYxQ9mP7v", "target_field": "K2ZtR4nL1aB8cD6eF3gH0jS5w", "ignore_missing": true } }, { "rename": { "field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3g", "target_field": "H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD", "ignore_missing": true } }, { "rename": { "field": "6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a", "target_field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "ignore_missing": true } }, { "rename": { "field": "L1aB8cD6eF3gH0jS5wYxQ9mP7vK", "target_field": "2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9", "ignore_missing": true } }, { "rename": { "field": "mP7vK2ZtR4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "ignore_missing": true } }, { "script": { "description": "S5wYxQ9mP 7vK2ZtR 4nL1aB8 cD6eF 3gH 0jS5wYx Q9mP7vK 2ZtR", "lang": "4nL1aB8c", "source": """ D6 eF3gH0jS5wYxQ9mP7vK2ZtR4nL 1a B8cD6 e F3g H0j S 5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF3gH0jS5w Y xQ9mP7vK2Z tR 4nL1 a B8c D 6eF3gH0jS5w YxQ9mP7vK2ZtR4n L 1 aB8c D6eF3gH0jS5wYxQ9mP7vK 2ZtR 4nL1aB8cD6eF3gH0jS5wY xQ9mP 7vK2ZtR4nL1aB8cD6eF3g H0 jS 5wY xQ9mP7vK2ZtR4n L1 a B8cD6 eF3g H 0j S 5wYxQ9mP 7 vK2ZtR4n L1 aB8c D 6eF 3 gH0jS5wYx Q9mP7vK2ZtR4 n L 1aB8cD6e F3gH0jS5wYxQ9mP7vK2 Z tR4nL 1a B 8c D6 eF3gH0 jS5wYxQ 9m P7vK2ZtR4nL1aB8cD6eF3gH0 jS 5wYxQ 9 mP7 vK2 Z tR4nL1aB8cD6eF3gH0jS5wY xQ9mP7vK2ZtR4nL1a B 8 cD6eF3gH 0jS5wYxQ9m P7vK2Zt R4nL1aB8c D6eF3gH0j S5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3g H 0jS5wYxQ 9mP7vK2Zt R 4nL1aB8cD6eF3g H0jS5w YxQ9mP7vK2ZtR4nL1a B 8cD6eF3gH0jS5w Y xQ9mP7vK2 Z tR 4 nL 1a B8c D6eF3gH 0jS5wYxQ9m P7vK2Z tR 4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK 2Z tR4nL 1 aB8 cD6eF 3g H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD 6 eF 3gH0jS5wYxQ9mP7 vK 2ZtR4nL1aB8c D 6eF3gH0jS5w Y x Q9mP7vK2 ZtR4nL1aB8cD6 eF 3g H 0jS5wYxQ9mP7v K2 ZtR 4nL1aB8 cD6eF3gH0jS5wY xQ 9mP7vK2ZtR 4 nL1aB8cD6 eF3gH0jS5wYxQ9 mP7vK2ZtR4nL1aB 8 cD6eF3gH0 jS5wYxQ9mP7vK2 ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a B8cD6e F 3 g H0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6e F3 gH0jS 5 wYx Q9m P 7vK2ZtR4nL1aB8cD6eF3gH0jS5w YxQ9mP7vK2Z t R4nL1aB8cD6 eF 3gH0 j S5w Y xQ9mP7vK2ZtR 4nL1aB8cD6eF3g H 0jS5wYxQ9 mP7vK2ZtR4nL1aB8cD6 e F 3gH0jS5wYxQ9 mP7vK2ZtR4 nL1aB8cD6eF3g H0jS5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3gH0jS5w YxQ9mP7vK2ZtR4nL1aB8 cD6eF3gH0jS5wYxQ 9m P7 vK2ZtR4nL 1aB8c D6eF 3gH 0jS5wY xQ9mP7vK2ZtR 4n L1aB8cD6eF 3 gH 0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 g H0jS5wYxQ9mP7vK2Zt R 4nL1aB8cD6 e F """ } }, { "uri_parts": { "field": "3gH0jS5wYxQ9", "ignore_missing": true, "ignore_failure": true } }, { "append": { "field": "mP7vK2ZtR4n", "value": [ "L1aB8cD6eF3gH", "0jS5wYxQ9mP7vK2ZtR", "4nL1aB8cD6eF3", "gH0jS5wYxQ9mP7vK2", "ZtR4nL1aB8cD6" ], "allow_duplicates": false } }, { "script": { "description": "eF3gH0 jS5w YxQ9mP", "source": """ 7vK2ZtR 4nL1aB8cD6e F3 g H0 jS 5w YxQ9 mP 7 vK 2Zt R 4nL1aB 8cD6e F 3gH0 jS 5w YxQ9mP7vK2 ZtR4 n L1aB8c D6eF3gH0jS5wYxQ9mP7vK2 Zt R4nL1aB8c D6eF3g H0jS5wY xQ9mP7vK2 Zt R4n L 1aB8 cD 6e F3gH0jS5wY xQ9mP 7 vK2ZtR4 nL1aB8cD6eF3g H0 jS5wYxQ9m P7vK2Z tR4nL1aB 8cD6eF3gH 0j S5w Y xQ9mP7 vK2ZtR 4 nL1aB8cD6e """ } }, { "remove": { "field": [ "F3gH" ], "ignore_missing": true } } ] } } ``` </details> Assisted by Cursor CLI using GPT-5.2-High model --------- Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 4fa1505) # Conflicts: # src/platform/packages/shared/kbn-monaco/src/languages/console/language.ts # src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts # src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.ts # src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx
|
Looks like this PR has backport PRs but they still haven't been merged. Please merge them ASAP to keep the branches relatively in sync. |
…tic#251173) Closes elastic#251172 ## Summary This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs. ## DEMO (Before / After) https://github.com/user-attachments/assets/54b90fdb-f0b0-4de0-ae53-6fa4a12a98d9 ## Change 1: Console completion avoids full-buffer reads (`kbn-monaco` Console language) **What changed** - The Console completion provider no longer calls `model.getValue()` to compute `textBeforeCursor`. - ES|QL context detection is only attempted when the cursor is within a `POST /_query` (or `POST _query/async`) request. - When it *is* a `_query` request, the provider reads only the relevant slice via `model.getValueInRange()` (from the request line to the cursor). - For all other requests (or when no request line is found within a bounded lookback), completion delegates to the existing actions provider. **Why** - `model.getValue()` materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI. - ES|QL completion only makes sense for `_query` requests; scoping the work avoids paying the cost for non-ES|QL traffic. **Why this approach** - We preserve existing completion behavior by delegating to the actions provider, but avoid the pathological cost by restricting work to a small, semantically relevant window. ## Change 2: ES|QL quote/query detection is linear-time (`checkForTripleQuotesAndEsqlQuery`) **What changed** - `checkForTripleQuotesAndEsqlQuery` was rewritten to scan the text once and avoid repeated substring+regex work inside the main loop. **Why** - The previous approach could become super-linear on adversarial inputs (many quotes / many potential toggles), which is exactly what large JSON payloads tend to contain. - In the worst case, this turns “type one character” into “do a huge amount of CPU work”, producing the freeze. **Why this approach** - A single forward scan preserves semantics while making the runtime scale predictably with input size. ## Change 3: Monaco `onChange` no longer calls `editor.getValue()` per keystroke (`shared-ux` React Monaco editor) **What changed** - The `onDidChangeModelContent` handler computes the next value by applying `event.changes` to a shadow string (`lastKnownValueRef`) instead of calling `editor.getValue()`. - Controlled-mode syncing (`useLayoutEffect`) first compares the incoming `value` against the shadow value to avoid unnecessary full-buffer reads. **Why** - `editor.getValue()` materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models. - Applying incremental changes keeps the per-keystroke cost proportional to the change set, not the document size. **Why this approach** - Monaco already provides the exact edit deltas (`IModelContentChangedEvent.changes`). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads. ## Tests (what they cover and why) - **`language.test.ts`**: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model. - **`autocomplete_utils.test.ts`**: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance). - **`editor.test.tsx`**: verifies the incremental `onChange` value computation (including multi-change ordering) and controlled sync behavior. ## Test plan - `node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.js` - `node scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.js` ### Manual UI verification (DevTools Console) - Open `DevTools -> Console`. - Expand the `<details>` block below and paste the payload into the editor. - Click at the very end of the pasted content and type a few characters. - Verify the editor remains responsive (no multi-second freeze / hang), and typed characters appear immediately. - Optional: place the cursor inside a `""" ... """` block and type to ensure autocomplete remains responsive. <details> <summary>Sanitized reproduction payload (paste into DevTools Console)</summary> ```http POST _ingest/pipeline/_simulate { "docs": [ { "_source": { "@timestamp": "xQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS", "eventData": { "__original": "5\"wYxQ9mP7vK\"2Zt\"R4nL1aB8c\"D\"6eF3gH\"0\"jS5wYxQ9\"mP\"7vK2ZtR4n\"L1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8c\"D6eF3gH\"0jS5wYxQ9m\"P7vK2ZtR4\"nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Z\"tR4nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Zt\"R4nL1a\"B8cD6eF\"3gH0j\"S5wYxQ9\"m\"P7vK2ZtR4nL1aB8c\"D6\"eF3gH\"0jS5w\"YxQ9mP7v\"K2Z\"tR4\"n\"L1aB8\"c\"D6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B8cD\"6eF3gH0jS5\"wYxQ9mP\"7vK2ZtR4nL\"1aB8cD6\"eF3g\"H0jS5\"wYxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3g\"H\"0jS5wYx\"Q9mP7v\"K2ZtR4n\"L1aB8c\"D6eF3gH\"0\"jS5wYxQ9mP7vK2Z\"t\"R4nL1aB8cD\"6eF3gH\"0jS5wYxQ9mP7v\"K2ZtR4n\"L1aB\"8\"cD6eF\"3\"gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8cD\"6\"eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"n\"L1aB8cD6e\"F3g\"H0jS5wYxQ9mP7vK2ZtR\"4nL1aB8cD\"6eF3gH0jS\"5w\"YxQ9mP7v\"K2ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wY\"xQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4n\"L1aB8\"cD6eF\"3gH\"0jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB8\"cD6eF\"3gH0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1a\"B8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP\"7vK2Z\"tR4nL\"1aB\"8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4nL\"1aB8c\"D6eF3\"gH0\"jS5wYx\"Q9mP7\"vK2ZtR\"4nL1aB8cD\"6\"eF3gH0jS5wYxQ\"9\"mP7vK2ZtR\"4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9mP7v\"K2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1\"aB8cD\"6eF3gH\"0jS5wY\"xQ9mP7\"vK2ZtR4nL\"1aB8c\"D6eF3gH\"0jS\"5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4\"nL\\1a\\\"\\B8cD6\"e\"F3gH\"0jS\"5wYxQ9mP7\"vK2Zt\"R4nL1aB8c\"D6eF3\"gH0jS5wYxQ\"9mP7vK2\"ZtR4nL1aB8\"cD6eF3g\"H0jS\"5wYxQ\"9mP7\"v\"K2ZtR4nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1aB\"8cD6eF3\"g\"H0jS5wYxQ9mP7vK\"2\"ZtR4nL1aB8\"cD6eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL1\"a\"B8cD6e\"F\"3gH0jS5w\"Y\"xQ9mP7vK2ZtR4nL1aB8c\"D\"6eF3gH0jS5\"w\"YxQ9mP7vK2ZtR\"4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7vK2Zt\"R4nL1aB8c\"D6eF3gH0j\"S5\"wYxQ9mP7\"vK2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5w\"YxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL1\"aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5w\"YxQ9m\"P7vK2Z\"tR4nL1aB8\"c\"D6eF3gH0jS5wY\"x\"Q9mP7vK2Z\"tR\"4nL1aB8c\"D6eF3\"gH0jS5wYxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3\"gH0jS\"5wYxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4\"nL1aB\"8cD6eF\"3gH0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5wYxQ9m\"P7v\"K2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B\"8cD6eF\"3\"gH0j\"S5w\"YxQ9mP7vK\"2ZtR4\"nL1aB8cD6\"eF3gH0j\"S5wYxQ9mP7\"vK2ZtR4\"nL1aB8cD6e\"F3gH0jS\"5wYx\"Q9mP7\"vK2Z\"t\"R4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR4nL1a\"B8cD6eF\"3gH0jS5wYx\"Q9mP7vK\"2\"ZtR4nL1aB8cD6eF\"3\"gH0jS5wYxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5w\"Y\"xQ9mP\"7\"vK2ZtR4n\"L\"1aB8cD6eF3gH0jS5wYxQ\"9\"mP7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7v\"K2ZtR4nL1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2Zt\"R4\"nL1aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5wY\"xQ9\"mP7vK\"2ZtR4\"nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS5\"wYxQ9\"mP7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0j\"S5w\"YxQ9m\"P7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4n\"L1aB8\"cD6eF3\"gH0jS5wYx\"Q\"9mP7vK2ZtR4nL\"1\"aB8cD6eF3\"gH\"0jS5wYxQ\"9mP7v\"K2ZtR4nL1aB8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0j\"S5wYx\"Q9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR\"4nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL\"1aB8cD6eF\"3gH\"0\"jS5wYx\"Q\"9mP7\"vK2\"ZtR4nL1aB\"8cD6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4n\"L1aB8cD6\"eF3gH0jS5w\"YxQ9mP7\"vK2Z\"tR4nL\"1aB8\"c\"D6eF3gH0jS5wYxQ9mP7vK2ZtR\"4\"nL1aB8c\"D6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR4nL1\"a\"B8cD6eF3gH0jS5w\"Y\"xQ9mP7vK2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9m\"P7vK\"2\"ZtR4n\"L\"1aB8cD6e\"F\"3gH0jS5wYxQ9mP7vK2Zt\"R\"4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"m\"P7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7vK2Zt\"R4nL1aB8c\"D6\"eF3gH0jS\"5wYxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF\"3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH\"0jS\"5wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8cD6eF3gH0jS5w\"YxQ\"9mP\"7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1a\"B8cD6\"eF3gH\"0jS\"5wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD6\"eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F\"3gH0jS5wY\"xQ\"9mP7vK2Z\"tR4nL\"1aB8cD6eF3gH0\"jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9m\"P7vK2\"ZtR4nL\"1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF3gH0j\"S5w\"YxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5\"wYxQ9mP7v\"K2ZtR4n\"L1\"aB8cD6e\"F3gH\"0jS5wYxQ9\"m\"P7vK2ZtR4nL\"1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4\"nL1aB\"8cD\"6eF3g\"H0j\"S5wYxQ9\"mP7v\"K2ZtR4nL\"1aB8c\"D6eF3gH0jS\"5wY\"xQ9mP7vK2Z\"tR4n\"L1aB8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5\"wYxQ9mP\"7\"vK2ZtR4nL1aB8cD6\"e\"F3gH0jS5wYxQ9mP7\"vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS5\"wYxQ9mP7vK2ZtR4\"nL1a\"B8cD6eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1\"a\"B8cD6eF3\"gH\"0jS5wYxQ9\"mP7vK2Z\"tR4nL1a\"B8cD6eF3gH\"0jS5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1\"aB8cD6eF\"3gH0j\"S5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6\"eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL\"1aB8c\"D6eF3\"gH0jS5wY\"xQ9\"mP7\"v\"K2ZtR4\"n\"L1aB\"8cD\"6eF3gH0jS\"5wYxQ\"9mP7vK2Zt\"R4nL1a\"B8cD6eF3gH\"0jS5wYxQ\"9mP7vK2ZtR\"4nL1aB8c\"D6eF\"3gH0j\"S5wY\"x\"Q9mP7vK2Zt\"R\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4nL1aB\"8\"cD6eF3gH0jS5wYx\"Q\"9mP7vK2ZtR\"4nL1aB\"8cD6eF3gH0jS5\"wYxQ9mP7\"vK2Z\"t\"R4nL1a\"B\"8cD6eF3g\"H\"0jS5wYxQ9mP7vK2ZtR4n\"L\"1aB8cD6eF3\"g\"H0jS5wYxQ9mP7\"v\"K2ZtR4nL1\"aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3\"gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8c\"D6e\"F3g\"H0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4nL\"1aB\"8cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Zt\"R4nL1\"aB8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2\"ZtR\"4nL1a\"B8cD6\"eF3\"gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3g\"H0jS5\"wYxQ9m\"P7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7\"vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5w\"YxQ\"9mP\"7vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2\"ZtR4n\"L1aB8c\"D6eF3g\"H0jS5wY\"xQ9mP7vK2\"ZtR4nL\"1aB8cD6\"eF3\"gH0jS5wYxQ\"9mP\"7vK\"2ZtR4n\"L1aB8cD6eF3gH\"0jS5wYxQ\"9mP\"7vK2ZtR4n\"L1aB8cD\"6e\"F3gH0jS\"5wYx\"Q9mP7vK2Z\"t\"R4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB\"8c\"D6eF3\"gH0\"jS5wY\"xQ9\"mP7vK2Z\"tR4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9m\"P7v\"K2ZtR4nL1a\"B8cD\"6eF3gH0jS5wYxQ9m\"P7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2ZtR\"4\"nL1aB8cD6eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL1\"aB8\"cD6e\"F3gH0\"jS5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF\"3gH0jS5wYx\"Q9mP7v\"K2ZtR4nL1\"a\"B8cD6eF3gH0jS\"5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL1\"aB8\"cD6eF3gH0\"j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6e\"F\"3gH0jS5wYxQ9mP7\"vK2\"ZtR4nL1aB\"8\"cD6eF3gH\"0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1aB8cD\"6eF\"3gH0jS\"5w\"YxQ9\"mP7vK2ZtR4n\"L1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8\"c\"D6eF3g\"H0jS5wYxQ9\"mP7vK\"2ZtR4nL1aB8\"cD6eF3gH0jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8cD6\"eF3gH0jS5wYx\"Q9mP7vK2ZtR\"4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3gH0jS5\"wYxQ9mP7v\"K2ZtR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR4nL1a\"B8cD6eF3g\"H0jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL1\"a\"B8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6eF3\"gH0\"jS5wYxQ\"9mP\"7vK2ZtR4n\"L1a\"B8cD6eF3\"gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1aB\"8\"cD6eF\"3\"gH0jS5w\"YxQ9mP7v\"K2ZtR4nL1\"aB8cD6\"eF3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wYxQ9mP7vK\"2ZtR\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9mP\"7vK2ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4\"n\"L1aB8c\"D\"6eF3gH0\"jS5wYxQ9\"mP7vK2ZtR\"4nL1aB\"8cD6eF3g\"H0j\"S5wYxQ9mP\"7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0jS5wYxQ9m\"P7v\"K2ZtR4n\"L1aB8cD6\"eF3gH0jS5\"wYxQ9m\"P7vK2ZtR\"4nL\"1aB8cD6eF\"3gH0j\"S5wYxQ9mP\"7\"vK2ZtR\"4\"nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD\"6eF\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9mP\"7vK2ZtR4n\"L\"1aB8cD6\"e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6eF3gH0jS5\"wYx\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6e\"F\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR\"4nL1aB8cD\"6eF\"3gH0jS5w\"YxQ\"9mP7vK2Zt\"R4nL1\"aB8cD6eF3\"g\"H0jS5w\"Y\"xQ9mP7v\"K2ZtR4nL\"1aB8cD6eF\"3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8c\"D6eF3gH0jS5wYxQ\"9mP\"7vK2ZtR4nL1\"aB8\"cD6eF3g\"H0jS5wYx\"Q9mP7vK2Z\"tR4nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4nL\"1a\"B8cD6eF3gH0\"jS5w\"YxQ9mP7vK\"2\"ZtR4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6eF\"3\"gH0jS5w\"YxQ\"9mP7vK2Zt\"R4n\"L1aB8cD6\"eF3\"gH0jS5wYx\"Q9m\"P7vK2ZtR4nL1aB8\"cD6\"eF3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wY\"xQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF3g\"H\"0jS5wY\"x\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD6eF3gH0\"jS5\"wYxQ9mP7vK2\"ZtR\"4nL1aB8\"cD6\"eF3gH0jS5\"wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD\"6eF3g\"H0jS5wYxQ\"9\"mP7vK2Z\"t\"R4nL1aB\"8cD\"6eF3gH0jS\"5wY\"xQ9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5wYxQ9mP\"7vK\"2ZtR4nL1aB8\"cD6\"eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8\"cD6\"eF3gH0jS5\"wYxQ9\"mP7vK2ZtR\"4\"nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9mP\"7vK2ZtR4n\"L1aB8c\"D6eF3gH0\"jS5\"wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6eF3\"gH0\"jS5wYxQ9mP7\"vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP\"7v\"K2ZtR4nL1aB8c\"D6eF\"3gH0jS5wY\"x\"Q9mP7\"v\"K2ZtR4n\"L1aB8cD6eF\"3gH0jS5wY\"xQ9mP7v\"K2ZtR4nL\"1aB\"8cD6eF3gH\"0jS\"5wYxQ9mP7vK2ZtR\"4nL\"1aB8cD6eF3g\"H0jS5\"wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8cD6\"eF3gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8\"cD\"6eF3g\"H0jS5\"wYxQ9mP7vK2\"ZtR4n\"L1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2\"Zt\"R4nL1\"aB8cD6e\"F3gH0j\"S5wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD6eF\"3gH0\"jS5wYxQ9\"mP\"7vK2ZtR4\"nL1aB\"8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB\"8cD\"6eF3gH0jS\"5wYx" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "Q9mP7vK2ZtR4nL1aB8cD6", "moduleId": "eF3gH0jS5wY" }, "customerInfo": { "customerId": "xQ9mP7vK2Zt", "deviceId": "R4nL1aB8cD6eF3gH0jS5w", "lineId": "YxQ9mP7vK2ZtR4", "publicIp": "nL1aB8cD6eF3" } } }, { "_index": "gH0jS5wYxQ9mP7vK2Zt", "_source": { "kafka": { "eventId": "R4nL1aB8cD6e", "moduleId": "F3gH0jS5w" }, "customerInfo": { "customerId": "YxQ9mP7vK2Z", "deviceId": "tR4nL1aB8cD6eF3gH0jS5", "lineId": "wYxQ9mP7vK2ZtR", "publicIp": "4nL1aB8cD6eF" }, "eventData": { "__original": "3\"gH0jS5w\"Yx\"Q9m\"P\"7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2\"Z\"tR4nL1aB 8cD6eF 3g H0jS5wYx\"Q\"9mP7vK2ZtR4nL1aB8c\"D6eF3\"gH0jS5wY\"xQ9mP7\"vK2ZtR\"4nL1aB8\"cD6eF3gH0jS5wYxQ9mP7vK\"2ZtR\"4nL1aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2ZtR4n\"L1aB8cD\"6eF3gH\"0\"jS5wYxQ\"9\"mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0\"j\"S5wYxQ9\"m\"P7vK2ZtR4nL1\"a\"B8cD6eF3g\"H\"0jS5wYxQ9mP7\"v\"K2ZtR4n\"L\"1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2ZtR4nL1aB\"8cD6e\"F3gH0jS5wYx\"Q9mP7\"vK2ZtR4nL1\"aB8cD6" } } }, { "_source": { "eventData": { "__original": "e\"F3gH0jS\"5w\"YxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR\"4nL1aB8cD6eF3g\"H0j\"S5wYxQ9m\"P7v\"K2ZtR\"4\"nL1aB8cD 6eF3gH 0j S5wYxQ9mP7v K\"2\"ZtR4nL1aB8cD6eF3gH\"0jS5w\"YxQ9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3g\"H0jS5wYxQ9mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB8cD\"6eF3gH0\"jS5wYx\"Q\"9mP7vK2\"Z\"tR4nL1aB8cD6\"eF3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL\"1\"aB8cD6eF3gH0\"j\"S5wYxQ9mP\"7\"vK2ZtR4nL1aB\"8\"cD6eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7\"vK2ZtR4nL1a\"B8cD\"6eF3gH0jS5wY\"xQ\"9mP7vK2Z\"t\"R4n\"L\"1aB8cD6eF3gH0jS\"5wYxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF3gH\"0jS5wYx\"Q9\"mP7vK2Zt\"R\"4nL1a\"B8c\"D6eF3gH0jS\"5wYxQ9m" }, "customerInfo": { "customerId": "P7vK2ZtR4nL", "deviceId": "1aB8cD6eF3gH0jS5wYxQ9", "lineId": "mP7vK2ZtR4nL1a", "publicIp": "B8cD6eF3gH0j" }, "kafka": { "eventId": "S5wYxQ9mP7vK", "moduleId": "2ZtR4nL1a" } } }, { "_source": { "@timestamp": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "eventData": { "__original": "L\"1aB8cD6eF3gH0jS5w\"YxQ9m\"P7vK2ZtR4nL1aB8cD6e\"F3gH0jS\"5wYxQ9mP7vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2Zt\"R4nL1aB8\"cD6eF" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "3gH0jS5w", "moduleId": "YxQ9mP7vK" }, "@Version": "2", "customerInfo": { "customerId": "ZtR4nL1aB8c", "deviceId": "D6eF3gH0jS5wYxQ9mP7vK", "lineId": "2ZtR4nL1aB8cD6", "publicIp": "eF3gH0jS5wYx" } } } ], "pipeline": { "processors": [ { "rename": { "field": "Q9mP7vK2ZtR4nL1aB8cD", "target_field": "6eF3gH0jS5wYxQ" } }, { "lowercase": { "field": "9mP7vK2ZtR4nL1", "target_field": "aB8cD6eF3gH", "ignore_missing": true } }, { "set": { "field": "0jS5wYxQ9mP7", "copy_from": "vK2ZtR4nL1aB8", "ignore_empty_value": true } }, { "set": { "field": "cD6eF3gH0", "copy_from": "jS5wYxQ9mP7vK2ZtR4nL1", "ignore_empty_value": true } }, { "script": { "source": """ aB8 cD6eF3gH0j S 5wYxQ9mP7vK2ZtR4 nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP""", "if": "7vK2ZtR4nL1aB8cD 6e F3gH 0j S5wYxQ9mP7vK2ZtR4nL 1a B8cD" } }, { "script": { "description": "6eF3gH0 jS5wYxQ9 mP 7vK2ZtR4nL1 aB8cD6e F3gH 0jS", "source": "5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "if": "S5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF 3gH0 jS 5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 gH0jS5wYxQ 9mP7vK2" } }, { "set": { "field": "ZtR4nL1aB8cD6e", "copy_from": "F3gH0jS5wYxQ9mP7vK2", "ignore_empty_value": true } }, { "set": { "field": "ZtR4nL1aB8cD6", "copy_from": "eF3gH0jS5wYxQ9mP7vK2Zt", "ignore_empty_value": true } }, { "rename": { "field": "R4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2Zt", "ignore_missing": true } }, { "script": { "source": """ R4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0 jS5wYxQ9mP7v """, "if": "K2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2Zt R4 nL1a" } }, { "rename": { "field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "target_field": "eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF", "target_field": "3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3", "target_field": "gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "ignore_missing": true } }, { "rename": { "field": "eF3gH0jS5wYxQ9mP7v", "target_field": "K2ZtR4nL1aB8cD6eF3gH0jS5w", "ignore_missing": true } }, { "rename": { "field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3g", "target_field": "H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD", "ignore_missing": true } }, { "rename": { "field": "6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a", "target_field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "ignore_missing": true } }, { "rename": { "field": "L1aB8cD6eF3gH0jS5wYxQ9mP7vK", "target_field": "2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9", "ignore_missing": true } }, { "rename": { "field": "mP7vK2ZtR4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "ignore_missing": true } }, { "script": { "description": "S5wYxQ9mP 7vK2ZtR 4nL1aB8 cD6eF 3gH 0jS5wYx Q9mP7vK 2ZtR", "lang": "4nL1aB8c", "source": """ D6 eF3gH0jS5wYxQ9mP7vK2ZtR4nL 1a B8cD6 e F3g H0j S 5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF3gH0jS5w Y xQ9mP7vK2Z tR 4nL1 a B8c D 6eF3gH0jS5w YxQ9mP7vK2ZtR4n L 1 aB8c D6eF3gH0jS5wYxQ9mP7vK 2ZtR 4nL1aB8cD6eF3gH0jS5wY xQ9mP 7vK2ZtR4nL1aB8cD6eF3g H0 jS 5wY xQ9mP7vK2ZtR4n L1 a B8cD6 eF3g H 0j S 5wYxQ9mP 7 vK2ZtR4n L1 aB8c D 6eF 3 gH0jS5wYx Q9mP7vK2ZtR4 n L 1aB8cD6e F3gH0jS5wYxQ9mP7vK2 Z tR4nL 1a B 8c D6 eF3gH0 jS5wYxQ 9m P7vK2ZtR4nL1aB8cD6eF3gH0 jS 5wYxQ 9 mP7 vK2 Z tR4nL1aB8cD6eF3gH0jS5wY xQ9mP7vK2ZtR4nL1a B 8 cD6eF3gH 0jS5wYxQ9m P7vK2Zt R4nL1aB8c D6eF3gH0j S5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3g H 0jS5wYxQ 9mP7vK2Zt R 4nL1aB8cD6eF3g H0jS5w YxQ9mP7vK2ZtR4nL1a B 8cD6eF3gH0jS5w Y xQ9mP7vK2 Z tR 4 nL 1a B8c D6eF3gH 0jS5wYxQ9m P7vK2Z tR 4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK 2Z tR4nL 1 aB8 cD6eF 3g H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD 6 eF 3gH0jS5wYxQ9mP7 vK 2ZtR4nL1aB8c D 6eF3gH0jS5w Y x Q9mP7vK2 ZtR4nL1aB8cD6 eF 3g H 0jS5wYxQ9mP7v K2 ZtR 4nL1aB8 cD6eF3gH0jS5wY xQ 9mP7vK2ZtR 4 nL1aB8cD6 eF3gH0jS5wYxQ9 mP7vK2ZtR4nL1aB 8 cD6eF3gH0 jS5wYxQ9mP7vK2 ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a B8cD6e F 3 g H0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6e F3 gH0jS 5 wYx Q9m P 7vK2ZtR4nL1aB8cD6eF3gH0jS5w YxQ9mP7vK2Z t R4nL1aB8cD6 eF 3gH0 j S5w Y xQ9mP7vK2ZtR 4nL1aB8cD6eF3g H 0jS5wYxQ9 mP7vK2ZtR4nL1aB8cD6 e F 3gH0jS5wYxQ9 mP7vK2ZtR4 nL1aB8cD6eF3g H0jS5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3gH0jS5w YxQ9mP7vK2ZtR4nL1aB8 cD6eF3gH0jS5wYxQ 9m P7 vK2ZtR4nL 1aB8c D6eF 3gH 0jS5wY xQ9mP7vK2ZtR 4n L1aB8cD6eF 3 gH 0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 g H0jS5wYxQ9mP7vK2Zt R 4nL1aB8cD6 e F """ } }, { "uri_parts": { "field": "3gH0jS5wYxQ9", "ignore_missing": true, "ignore_failure": true } }, { "append": { "field": "mP7vK2ZtR4n", "value": [ "L1aB8cD6eF3gH", "0jS5wYxQ9mP7vK2ZtR", "4nL1aB8cD6eF3", "gH0jS5wYxQ9mP7vK2", "ZtR4nL1aB8cD6" ], "allow_duplicates": false } }, { "script": { "description": "eF3gH0 jS5w YxQ9mP", "source": """ 7vK2ZtR 4nL1aB8cD6e F3 g H0 jS 5w YxQ9 mP 7 vK 2Zt R 4nL1aB 8cD6e F 3gH0 jS 5w YxQ9mP7vK2 ZtR4 n L1aB8c D6eF3gH0jS5wYxQ9mP7vK2 Zt R4nL1aB8c D6eF3g H0jS5wY xQ9mP7vK2 Zt R4n L 1aB8 cD 6e F3gH0jS5wY xQ9mP 7 vK2ZtR4 nL1aB8cD6eF3g H0 jS5wYxQ9m P7vK2Z tR4nL1aB 8cD6eF3gH 0j S5w Y xQ9mP7 vK2ZtR 4 nL1aB8cD6e """ } }, { "remove": { "field": [ "F3gH" ], "ignore_missing": true } } ] } } ``` </details> Assisted by Cursor CLI using GPT-5.2-High model --------- Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 4fa1505) # Conflicts: # src/platform/packages/shared/kbn-monaco/src/languages/console/language.ts # src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts # src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.ts # src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx
…#251173) (#254617) # Backport This will backport the following commits from `main` to `9.3`: - [[DevTools Console] Avoid editor freeze after pasting large JSON (#251173)](#251173) <!--- Backport version: 10.2.0 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport) Co-authored-by: Cursor <cursoragent@cursor.com>
…tic#251173) Closes elastic#251172 This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs. https://github.com/user-attachments/assets/54b90fdb-f0b0-4de0-ae53-6fa4a12a98d9 Console language) **What changed** - The Console completion provider no longer calls `model.getValue()` to compute `textBeforeCursor`. - ES|QL context detection is only attempted when the cursor is within a `POST /_query` (or `POST _query/async`) request. - When it *is* a `_query` request, the provider reads only the relevant slice via `model.getValueInRange()` (from the request line to the cursor). - For all other requests (or when no request line is found within a bounded lookback), completion delegates to the existing actions provider. **Why** - `model.getValue()` materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI. - ES|QL completion only makes sense for `_query` requests; scoping the work avoids paying the cost for non-ES|QL traffic. **Why this approach** - We preserve existing completion behavior by delegating to the actions provider, but avoid the pathological cost by restricting work to a small, semantically relevant window. (`checkForTripleQuotesAndEsqlQuery`) **What changed** - `checkForTripleQuotesAndEsqlQuery` was rewritten to scan the text once and avoid repeated substring+regex work inside the main loop. **Why** - The previous approach could become super-linear on adversarial inputs (many quotes / many potential toggles), which is exactly what large JSON payloads tend to contain. - In the worst case, this turns “type one character” into “do a huge amount of CPU work”, producing the freeze. **Why this approach** - A single forward scan preserves semantics while making the runtime scale predictably with input size. keystroke (`shared-ux` React Monaco editor) **What changed** - The `onDidChangeModelContent` handler computes the next value by applying `event.changes` to a shadow string (`lastKnownValueRef`) instead of calling `editor.getValue()`. - Controlled-mode syncing (`useLayoutEffect`) first compares the incoming `value` against the shadow value to avoid unnecessary full-buffer reads. **Why** - `editor.getValue()` materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models. - Applying incremental changes keeps the per-keystroke cost proportional to the change set, not the document size. **Why this approach** - Monaco already provides the exact edit deltas (`IModelContentChangedEvent.changes`). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads. - **`language.test.ts`**: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model. - **`autocomplete_utils.test.ts`**: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance). - **`editor.test.tsx`**: verifies the incremental `onChange` value computation (including multi-change ordering) and controlled sync behavior. - `node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.js` - `node scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.js` - Open `DevTools -> Console`. - Expand the `<details>` block below and paste the payload into the editor. - Click at the very end of the pasted content and type a few characters. - Verify the editor remains responsive (no multi-second freeze / hang), and typed characters appear immediately. - Optional: place the cursor inside a `""" ... """` block and type to ensure autocomplete remains responsive. <details> <summary>Sanitized reproduction payload (paste into DevTools Console)</summary> ```http POST _ingest/pipeline/_simulate { "docs": [ { "_source": { "@timestamp": "xQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS", "eventData": { "__original": "5\"wYxQ9mP7vK\"2Zt\"R4nL1aB8c\"D\"6eF3gH\"0\"jS5wYxQ9\"mP\"7vK2ZtR4n\"L1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8c\"D6eF3gH\"0jS5wYxQ9m\"P7vK2ZtR4\"nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Z\"tR4nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Zt\"R4nL1a\"B8cD6eF\"3gH0j\"S5wYxQ9\"m\"P7vK2ZtR4nL1aB8c\"D6\"eF3gH\"0jS5w\"YxQ9mP7v\"K2Z\"tR4\"n\"L1aB8\"c\"D6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B8cD\"6eF3gH0jS5\"wYxQ9mP\"7vK2ZtR4nL\"1aB8cD6\"eF3g\"H0jS5\"wYxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3g\"H\"0jS5wYx\"Q9mP7v\"K2ZtR4n\"L1aB8c\"D6eF3gH\"0\"jS5wYxQ9mP7vK2Z\"t\"R4nL1aB8cD\"6eF3gH\"0jS5wYxQ9mP7v\"K2ZtR4n\"L1aB\"8\"cD6eF\"3\"gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8cD\"6\"eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"n\"L1aB8cD6e\"F3g\"H0jS5wYxQ9mP7vK2ZtR\"4nL1aB8cD\"6eF3gH0jS\"5w\"YxQ9mP7v\"K2ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wY\"xQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4n\"L1aB8\"cD6eF\"3gH\"0jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB8\"cD6eF\"3gH0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1a\"B8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP\"7vK2Z\"tR4nL\"1aB\"8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4nL\"1aB8c\"D6eF3\"gH0\"jS5wYx\"Q9mP7\"vK2ZtR\"4nL1aB8cD\"6\"eF3gH0jS5wYxQ\"9\"mP7vK2ZtR\"4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9mP7v\"K2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1\"aB8cD\"6eF3gH\"0jS5wY\"xQ9mP7\"vK2ZtR4nL\"1aB8c\"D6eF3gH\"0jS\"5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4\"nL\\1a\\\"\\B8cD6\"e\"F3gH\"0jS\"5wYxQ9mP7\"vK2Zt\"R4nL1aB8c\"D6eF3\"gH0jS5wYxQ\"9mP7vK2\"ZtR4nL1aB8\"cD6eF3g\"H0jS\"5wYxQ\"9mP7\"v\"K2ZtR4nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1aB\"8cD6eF3\"g\"H0jS5wYxQ9mP7vK\"2\"ZtR4nL1aB8\"cD6eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL1\"a\"B8cD6e\"F\"3gH0jS5w\"Y\"xQ9mP7vK2ZtR4nL1aB8c\"D\"6eF3gH0jS5\"w\"YxQ9mP7vK2ZtR\"4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7vK2Zt\"R4nL1aB8c\"D6eF3gH0j\"S5\"wYxQ9mP7\"vK2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5w\"YxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL1\"aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5w\"YxQ9m\"P7vK2Z\"tR4nL1aB8\"c\"D6eF3gH0jS5wY\"x\"Q9mP7vK2Z\"tR\"4nL1aB8c\"D6eF3\"gH0jS5wYxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3\"gH0jS\"5wYxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4\"nL1aB\"8cD6eF\"3gH0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5wYxQ9m\"P7v\"K2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B\"8cD6eF\"3\"gH0j\"S5w\"YxQ9mP7vK\"2ZtR4\"nL1aB8cD6\"eF3gH0j\"S5wYxQ9mP7\"vK2ZtR4\"nL1aB8cD6e\"F3gH0jS\"5wYx\"Q9mP7\"vK2Z\"t\"R4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR4nL1a\"B8cD6eF\"3gH0jS5wYx\"Q9mP7vK\"2\"ZtR4nL1aB8cD6eF\"3\"gH0jS5wYxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5w\"Y\"xQ9mP\"7\"vK2ZtR4n\"L\"1aB8cD6eF3gH0jS5wYxQ\"9\"mP7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7v\"K2ZtR4nL1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2Zt\"R4\"nL1aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5wY\"xQ9\"mP7vK\"2ZtR4\"nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS5\"wYxQ9\"mP7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0j\"S5w\"YxQ9m\"P7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4n\"L1aB8\"cD6eF3\"gH0jS5wYx\"Q\"9mP7vK2ZtR4nL\"1\"aB8cD6eF3\"gH\"0jS5wYxQ\"9mP7v\"K2ZtR4nL1aB8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0j\"S5wYx\"Q9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR\"4nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL\"1aB8cD6eF\"3gH\"0\"jS5wYx\"Q\"9mP7\"vK2\"ZtR4nL1aB\"8cD6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4n\"L1aB8cD6\"eF3gH0jS5w\"YxQ9mP7\"vK2Z\"tR4nL\"1aB8\"c\"D6eF3gH0jS5wYxQ9mP7vK2ZtR\"4\"nL1aB8c\"D6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR4nL1\"a\"B8cD6eF3gH0jS5w\"Y\"xQ9mP7vK2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9m\"P7vK\"2\"ZtR4n\"L\"1aB8cD6e\"F\"3gH0jS5wYxQ9mP7vK2Zt\"R\"4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"m\"P7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7vK2Zt\"R4nL1aB8c\"D6\"eF3gH0jS\"5wYxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF\"3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH\"0jS\"5wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8cD6eF3gH0jS5w\"YxQ\"9mP\"7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1a\"B8cD6\"eF3gH\"0jS\"5wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD6\"eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F\"3gH0jS5wY\"xQ\"9mP7vK2Z\"tR4nL\"1aB8cD6eF3gH0\"jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9m\"P7vK2\"ZtR4nL\"1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF3gH0j\"S5w\"YxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5\"wYxQ9mP7v\"K2ZtR4n\"L1\"aB8cD6e\"F3gH\"0jS5wYxQ9\"m\"P7vK2ZtR4nL\"1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4\"nL1aB\"8cD\"6eF3g\"H0j\"S5wYxQ9\"mP7v\"K2ZtR4nL\"1aB8c\"D6eF3gH0jS\"5wY\"xQ9mP7vK2Z\"tR4n\"L1aB8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5\"wYxQ9mP\"7\"vK2ZtR4nL1aB8cD6\"e\"F3gH0jS5wYxQ9mP7\"vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS5\"wYxQ9mP7vK2ZtR4\"nL1a\"B8cD6eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1\"a\"B8cD6eF3\"gH\"0jS5wYxQ9\"mP7vK2Z\"tR4nL1a\"B8cD6eF3gH\"0jS5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1\"aB8cD6eF\"3gH0j\"S5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6\"eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL\"1aB8c\"D6eF3\"gH0jS5wY\"xQ9\"mP7\"v\"K2ZtR4\"n\"L1aB\"8cD\"6eF3gH0jS\"5wYxQ\"9mP7vK2Zt\"R4nL1a\"B8cD6eF3gH\"0jS5wYxQ\"9mP7vK2ZtR\"4nL1aB8c\"D6eF\"3gH0j\"S5wY\"x\"Q9mP7vK2Zt\"R\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4nL1aB\"8\"cD6eF3gH0jS5wYx\"Q\"9mP7vK2ZtR\"4nL1aB\"8cD6eF3gH0jS5\"wYxQ9mP7\"vK2Z\"t\"R4nL1a\"B\"8cD6eF3g\"H\"0jS5wYxQ9mP7vK2ZtR4n\"L\"1aB8cD6eF3\"g\"H0jS5wYxQ9mP7\"v\"K2ZtR4nL1\"aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3\"gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8c\"D6e\"F3g\"H0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4nL\"1aB\"8cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Zt\"R4nL1\"aB8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2\"ZtR\"4nL1a\"B8cD6\"eF3\"gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3g\"H0jS5\"wYxQ9m\"P7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7\"vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5w\"YxQ\"9mP\"7vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2\"ZtR4n\"L1aB8c\"D6eF3g\"H0jS5wY\"xQ9mP7vK2\"ZtR4nL\"1aB8cD6\"eF3\"gH0jS5wYxQ\"9mP\"7vK\"2ZtR4n\"L1aB8cD6eF3gH\"0jS5wYxQ\"9mP\"7vK2ZtR4n\"L1aB8cD\"6e\"F3gH0jS\"5wYx\"Q9mP7vK2Z\"t\"R4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB\"8c\"D6eF3\"gH0\"jS5wY\"xQ9\"mP7vK2Z\"tR4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9m\"P7v\"K2ZtR4nL1a\"B8cD\"6eF3gH0jS5wYxQ9m\"P7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2ZtR\"4\"nL1aB8cD6eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL1\"aB8\"cD6e\"F3gH0\"jS5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF\"3gH0jS5wYx\"Q9mP7v\"K2ZtR4nL1\"a\"B8cD6eF3gH0jS\"5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL1\"aB8\"cD6eF3gH0\"j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6e\"F\"3gH0jS5wYxQ9mP7\"vK2\"ZtR4nL1aB\"8\"cD6eF3gH\"0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1aB8cD\"6eF\"3gH0jS\"5w\"YxQ9\"mP7vK2ZtR4n\"L1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8\"c\"D6eF3g\"H0jS5wYxQ9\"mP7vK\"2ZtR4nL1aB8\"cD6eF3gH0jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8cD6\"eF3gH0jS5wYx\"Q9mP7vK2ZtR\"4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3gH0jS5\"wYxQ9mP7v\"K2ZtR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR4nL1a\"B8cD6eF3g\"H0jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL1\"a\"B8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6eF3\"gH0\"jS5wYxQ\"9mP\"7vK2ZtR4n\"L1a\"B8cD6eF3\"gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1aB\"8\"cD6eF\"3\"gH0jS5w\"YxQ9mP7v\"K2ZtR4nL1\"aB8cD6\"eF3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wYxQ9mP7vK\"2ZtR\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9mP\"7vK2ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4\"n\"L1aB8c\"D\"6eF3gH0\"jS5wYxQ9\"mP7vK2ZtR\"4nL1aB\"8cD6eF3g\"H0j\"S5wYxQ9mP\"7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0jS5wYxQ9m\"P7v\"K2ZtR4n\"L1aB8cD6\"eF3gH0jS5\"wYxQ9m\"P7vK2ZtR\"4nL\"1aB8cD6eF\"3gH0j\"S5wYxQ9mP\"7\"vK2ZtR\"4\"nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD\"6eF\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9mP\"7vK2ZtR4n\"L\"1aB8cD6\"e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6eF3gH0jS5\"wYx\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6e\"F\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR\"4nL1aB8cD\"6eF\"3gH0jS5w\"YxQ\"9mP7vK2Zt\"R4nL1\"aB8cD6eF3\"g\"H0jS5w\"Y\"xQ9mP7v\"K2ZtR4nL\"1aB8cD6eF\"3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8c\"D6eF3gH0jS5wYxQ\"9mP\"7vK2ZtR4nL1\"aB8\"cD6eF3g\"H0jS5wYx\"Q9mP7vK2Z\"tR4nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4nL\"1a\"B8cD6eF3gH0\"jS5w\"YxQ9mP7vK\"2\"ZtR4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6eF\"3\"gH0jS5w\"YxQ\"9mP7vK2Zt\"R4n\"L1aB8cD6\"eF3\"gH0jS5wYx\"Q9m\"P7vK2ZtR4nL1aB8\"cD6\"eF3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wY\"xQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF3g\"H\"0jS5wY\"x\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD6eF3gH0\"jS5\"wYxQ9mP7vK2\"ZtR\"4nL1aB8\"cD6\"eF3gH0jS5\"wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD\"6eF3g\"H0jS5wYxQ\"9\"mP7vK2Z\"t\"R4nL1aB\"8cD\"6eF3gH0jS\"5wY\"xQ9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5wYxQ9mP\"7vK\"2ZtR4nL1aB8\"cD6\"eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8\"cD6\"eF3gH0jS5\"wYxQ9\"mP7vK2ZtR\"4\"nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9mP\"7vK2ZtR4n\"L1aB8c\"D6eF3gH0\"jS5\"wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6eF3\"gH0\"jS5wYxQ9mP7\"vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP\"7v\"K2ZtR4nL1aB8c\"D6eF\"3gH0jS5wY\"x\"Q9mP7\"v\"K2ZtR4n\"L1aB8cD6eF\"3gH0jS5wY\"xQ9mP7v\"K2ZtR4nL\"1aB\"8cD6eF3gH\"0jS\"5wYxQ9mP7vK2ZtR\"4nL\"1aB8cD6eF3g\"H0jS5\"wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8cD6\"eF3gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8\"cD\"6eF3g\"H0jS5\"wYxQ9mP7vK2\"ZtR4n\"L1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2\"Zt\"R4nL1\"aB8cD6e\"F3gH0j\"S5wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD6eF\"3gH0\"jS5wYxQ9\"mP\"7vK2ZtR4\"nL1aB\"8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB\"8cD\"6eF3gH0jS\"5wYx" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "Q9mP7vK2ZtR4nL1aB8cD6", "moduleId": "eF3gH0jS5wY" }, "customerInfo": { "customerId": "xQ9mP7vK2Zt", "deviceId": "R4nL1aB8cD6eF3gH0jS5w", "lineId": "YxQ9mP7vK2ZtR4", "publicIp": "nL1aB8cD6eF3" } } }, { "_index": "gH0jS5wYxQ9mP7vK2Zt", "_source": { "kafka": { "eventId": "R4nL1aB8cD6e", "moduleId": "F3gH0jS5w" }, "customerInfo": { "customerId": "YxQ9mP7vK2Z", "deviceId": "tR4nL1aB8cD6eF3gH0jS5", "lineId": "wYxQ9mP7vK2ZtR", "publicIp": "4nL1aB8cD6eF" }, "eventData": { "__original": "3\"gH0jS5w\"Yx\"Q9m\"P\"7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2\"Z\"tR4nL1aB 8cD6eF 3g H0jS5wYx\"Q\"9mP7vK2ZtR4nL1aB8c\"D6eF3\"gH0jS5wY\"xQ9mP7\"vK2ZtR\"4nL1aB8\"cD6eF3gH0jS5wYxQ9mP7vK\"2ZtR\"4nL1aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2ZtR4n\"L1aB8cD\"6eF3gH\"0\"jS5wYxQ\"9\"mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0\"j\"S5wYxQ9\"m\"P7vK2ZtR4nL1\"a\"B8cD6eF3g\"H\"0jS5wYxQ9mP7\"v\"K2ZtR4n\"L\"1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2ZtR4nL1aB\"8cD6e\"F3gH0jS5wYx\"Q9mP7\"vK2ZtR4nL1\"aB8cD6" } } }, { "_source": { "eventData": { "__original": "e\"F3gH0jS\"5w\"YxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR\"4nL1aB8cD6eF3g\"H0j\"S5wYxQ9m\"P7v\"K2ZtR\"4\"nL1aB8cD 6eF3gH 0j S5wYxQ9mP7v K\"2\"ZtR4nL1aB8cD6eF3gH\"0jS5w\"YxQ9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3g\"H0jS5wYxQ9mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB8cD\"6eF3gH0\"jS5wYx\"Q\"9mP7vK2\"Z\"tR4nL1aB8cD6\"eF3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL\"1\"aB8cD6eF3gH0\"j\"S5wYxQ9mP\"7\"vK2ZtR4nL1aB\"8\"cD6eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7\"vK2ZtR4nL1a\"B8cD\"6eF3gH0jS5wY\"xQ\"9mP7vK2Z\"t\"R4n\"L\"1aB8cD6eF3gH0jS\"5wYxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF3gH\"0jS5wYx\"Q9\"mP7vK2Zt\"R\"4nL1a\"B8c\"D6eF3gH0jS\"5wYxQ9m" }, "customerInfo": { "customerId": "P7vK2ZtR4nL", "deviceId": "1aB8cD6eF3gH0jS5wYxQ9", "lineId": "mP7vK2ZtR4nL1a", "publicIp": "B8cD6eF3gH0j" }, "kafka": { "eventId": "S5wYxQ9mP7vK", "moduleId": "2ZtR4nL1a" } } }, { "_source": { "@timestamp": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "eventData": { "__original": "L\"1aB8cD6eF3gH0jS5w\"YxQ9m\"P7vK2ZtR4nL1aB8cD6e\"F3gH0jS\"5wYxQ9mP7vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2Zt\"R4nL1aB8\"cD6eF" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "3gH0jS5w", "moduleId": "YxQ9mP7vK" }, "@Version": "2", "customerInfo": { "customerId": "ZtR4nL1aB8c", "deviceId": "D6eF3gH0jS5wYxQ9mP7vK", "lineId": "2ZtR4nL1aB8cD6", "publicIp": "eF3gH0jS5wYx" } } } ], "pipeline": { "processors": [ { "rename": { "field": "Q9mP7vK2ZtR4nL1aB8cD", "target_field": "6eF3gH0jS5wYxQ" } }, { "lowercase": { "field": "9mP7vK2ZtR4nL1", "target_field": "aB8cD6eF3gH", "ignore_missing": true } }, { "set": { "field": "0jS5wYxQ9mP7", "copy_from": "vK2ZtR4nL1aB8", "ignore_empty_value": true } }, { "set": { "field": "cD6eF3gH0", "copy_from": "jS5wYxQ9mP7vK2ZtR4nL1", "ignore_empty_value": true } }, { "script": { "source": """ aB8 cD6eF3gH0j S 5wYxQ9mP7vK2ZtR4 nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP""", "if": "7vK2ZtR4nL1aB8cD 6e F3gH 0j S5wYxQ9mP7vK2ZtR4nL 1a B8cD" } }, { "script": { "description": "6eF3gH0 jS5wYxQ9 mP 7vK2ZtR4nL1 aB8cD6e F3gH 0jS", "source": "5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "if": "S5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF 3gH0 jS 5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 gH0jS5wYxQ 9mP7vK2" } }, { "set": { "field": "ZtR4nL1aB8cD6e", "copy_from": "F3gH0jS5wYxQ9mP7vK2", "ignore_empty_value": true } }, { "set": { "field": "ZtR4nL1aB8cD6", "copy_from": "eF3gH0jS5wYxQ9mP7vK2Zt", "ignore_empty_value": true } }, { "rename": { "field": "R4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2Zt", "ignore_missing": true } }, { "script": { "source": """ R4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0 jS5wYxQ9mP7v """, "if": "K2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2Zt R4 nL1a" } }, { "rename": { "field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "target_field": "eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF", "target_field": "3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3", "target_field": "gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "ignore_missing": true } }, { "rename": { "field": "eF3gH0jS5wYxQ9mP7v", "target_field": "K2ZtR4nL1aB8cD6eF3gH0jS5w", "ignore_missing": true } }, { "rename": { "field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3g", "target_field": "H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD", "ignore_missing": true } }, { "rename": { "field": "6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a", "target_field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "ignore_missing": true } }, { "rename": { "field": "L1aB8cD6eF3gH0jS5wYxQ9mP7vK", "target_field": "2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9", "ignore_missing": true } }, { "rename": { "field": "mP7vK2ZtR4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "ignore_missing": true } }, { "script": { "description": "S5wYxQ9mP 7vK2ZtR 4nL1aB8 cD6eF 3gH 0jS5wYx Q9mP7vK 2ZtR", "lang": "4nL1aB8c", "source": """ D6 eF3gH0jS5wYxQ9mP7vK2ZtR4nL 1a B8cD6 e F3g H0j S 5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF3gH0jS5w Y xQ9mP7vK2Z tR 4nL1 a B8c D 6eF3gH0jS5w YxQ9mP7vK2ZtR4n L 1 aB8c D6eF3gH0jS5wYxQ9mP7vK 2ZtR 4nL1aB8cD6eF3gH0jS5wY xQ9mP 7vK2ZtR4nL1aB8cD6eF3g H0 jS 5wY xQ9mP7vK2ZtR4n L1 a B8cD6 eF3g H 0j S 5wYxQ9mP 7 vK2ZtR4n L1 aB8c D 6eF 3 gH0jS5wYx Q9mP7vK2ZtR4 n L 1aB8cD6e F3gH0jS5wYxQ9mP7vK2 Z tR4nL 1a B 8c D6 eF3gH0 jS5wYxQ 9m P7vK2ZtR4nL1aB8cD6eF3gH0 jS 5wYxQ 9 mP7 vK2 Z tR4nL1aB8cD6eF3gH0jS5wY xQ9mP7vK2ZtR4nL1a B 8 cD6eF3gH 0jS5wYxQ9m P7vK2Zt R4nL1aB8c D6eF3gH0j S5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3g H 0jS5wYxQ 9mP7vK2Zt R 4nL1aB8cD6eF3g H0jS5w YxQ9mP7vK2ZtR4nL1a B 8cD6eF3gH0jS5w Y xQ9mP7vK2 Z tR 4 nL 1a B8c D6eF3gH 0jS5wYxQ9m P7vK2Z tR 4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK 2Z tR4nL 1 aB8 cD6eF 3g H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD 6 eF 3gH0jS5wYxQ9mP7 vK 2ZtR4nL1aB8c D 6eF3gH0jS5w Y x Q9mP7vK2 ZtR4nL1aB8cD6 eF 3g H 0jS5wYxQ9mP7v K2 ZtR 4nL1aB8 cD6eF3gH0jS5wY xQ 9mP7vK2ZtR 4 nL1aB8cD6 eF3gH0jS5wYxQ9 mP7vK2ZtR4nL1aB 8 cD6eF3gH0 jS5wYxQ9mP7vK2 ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a B8cD6e F 3 g H0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6e F3 gH0jS 5 wYx Q9m P 7vK2ZtR4nL1aB8cD6eF3gH0jS5w YxQ9mP7vK2Z t R4nL1aB8cD6 eF 3gH0 j S5w Y xQ9mP7vK2ZtR 4nL1aB8cD6eF3g H 0jS5wYxQ9 mP7vK2ZtR4nL1aB8cD6 e F 3gH0jS5wYxQ9 mP7vK2ZtR4 nL1aB8cD6eF3g H0jS5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3gH0jS5w YxQ9mP7vK2ZtR4nL1aB8 cD6eF3gH0jS5wYxQ 9m P7 vK2ZtR4nL 1aB8c D6eF 3gH 0jS5wY xQ9mP7vK2ZtR 4n L1aB8cD6eF 3 gH 0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 g H0jS5wYxQ9mP7vK2Zt R 4nL1aB8cD6 e F """ } }, { "uri_parts": { "field": "3gH0jS5wYxQ9", "ignore_missing": true, "ignore_failure": true } }, { "append": { "field": "mP7vK2ZtR4n", "value": [ "L1aB8cD6eF3gH", "0jS5wYxQ9mP7vK2ZtR", "4nL1aB8cD6eF3", "gH0jS5wYxQ9mP7vK2", "ZtR4nL1aB8cD6" ], "allow_duplicates": false } }, { "script": { "description": "eF3gH0 jS5w YxQ9mP", "source": """ 7vK2ZtR 4nL1aB8cD6e F3 g H0 jS 5w YxQ9 mP 7 vK 2Zt R 4nL1aB 8cD6e F 3gH0 jS 5w YxQ9mP7vK2 ZtR4 n L1aB8c D6eF3gH0jS5wYxQ9mP7vK2 Zt R4nL1aB8c D6eF3g H0jS5wY xQ9mP7vK2 Zt R4n L 1aB8 cD 6e F3gH0jS5wY xQ9mP 7 vK2ZtR4 nL1aB8cD6eF3g H0 jS5wYxQ9m P7vK2Z tR4nL1aB 8cD6eF3gH 0j S5w Y xQ9mP7 vK2ZtR 4 nL1aB8cD6e """ } }, { "remove": { "field": [ "F3gH" ], "ignore_missing": true } } ] } } ``` </details> Assisted by Cursor CLI using GPT-5.2-High model --------- Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 4fa1505) Co-authored-by: Cursor <cursoragent@cursor.com>
…tic#251173) Closes elastic#251172 ## Summary This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs. ## DEMO (Before / After) https://github.com/user-attachments/assets/54b90fdb-f0b0-4de0-ae53-6fa4a12a98d9 ## Change 1: Console completion avoids full-buffer reads (`kbn-monaco` Console language) **What changed** - The Console completion provider no longer calls `model.getValue()` to compute `textBeforeCursor`. - ES|QL context detection is only attempted when the cursor is within a `POST /_query` (or `POST _query/async`) request. - When it *is* a `_query` request, the provider reads only the relevant slice via `model.getValueInRange()` (from the request line to the cursor). - For all other requests (or when no request line is found within a bounded lookback), completion delegates to the existing actions provider. **Why** - `model.getValue()` materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI. - ES|QL completion only makes sense for `_query` requests; scoping the work avoids paying the cost for non-ES|QL traffic. **Why this approach** - We preserve existing completion behavior by delegating to the actions provider, but avoid the pathological cost by restricting work to a small, semantically relevant window. ## Change 2: ES|QL quote/query detection is linear-time (`checkForTripleQuotesAndEsqlQuery`) **What changed** - `checkForTripleQuotesAndEsqlQuery` was rewritten to scan the text once and avoid repeated substring+regex work inside the main loop. **Why** - The previous approach could become super-linear on adversarial inputs (many quotes / many potential toggles), which is exactly what large JSON payloads tend to contain. - In the worst case, this turns “type one character” into “do a huge amount of CPU work”, producing the freeze. **Why this approach** - A single forward scan preserves semantics while making the runtime scale predictably with input size. ## Change 3: Monaco `onChange` no longer calls `editor.getValue()` per keystroke (`shared-ux` React Monaco editor) **What changed** - The `onDidChangeModelContent` handler computes the next value by applying `event.changes` to a shadow string (`lastKnownValueRef`) instead of calling `editor.getValue()`. - Controlled-mode syncing (`useLayoutEffect`) first compares the incoming `value` against the shadow value to avoid unnecessary full-buffer reads. **Why** - `editor.getValue()` materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models. - Applying incremental changes keeps the per-keystroke cost proportional to the change set, not the document size. **Why this approach** - Monaco already provides the exact edit deltas (`IModelContentChangedEvent.changes`). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads. ## Tests (what they cover and why) - **`language.test.ts`**: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model. - **`autocomplete_utils.test.ts`**: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance). - **`editor.test.tsx`**: verifies the incremental `onChange` value computation (including multi-change ordering) and controlled sync behavior. ## Test plan - `node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.js` - `node scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.js` Co-authored-by: Cursor <cursoragent@cursor.com>
|
Looks like this PR has backport PRs but they still haven't been merged. Please merge them ASAP to keep the branches relatively in sync. |
…tic#251173) Closes elastic#251172 This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs. https://github.com/user-attachments/assets/54b90fdb-f0b0-4de0-ae53-6fa4a12a98d9 Console language) **What changed** - The Console completion provider no longer calls `model.getValue()` to compute `textBeforeCursor`. - ES|QL context detection is only attempted when the cursor is within a `POST /_query` (or `POST _query/async`) request. - When it *is* a `_query` request, the provider reads only the relevant slice via `model.getValueInRange()` (from the request line to the cursor). - For all other requests (or when no request line is found within a bounded lookback), completion delegates to the existing actions provider. **Why** - `model.getValue()` materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI. - ES|QL completion only makes sense for `_query` requests; scoping the work avoids paying the cost for non-ES|QL traffic. **Why this approach** - We preserve existing completion behavior by delegating to the actions provider, but avoid the pathological cost by restricting work to a small, semantically relevant window. (`checkForTripleQuotesAndEsqlQuery`) **What changed** - `checkForTripleQuotesAndEsqlQuery` was rewritten to scan the text once and avoid repeated substring+regex work inside the main loop. **Why** - The previous approach could become super-linear on adversarial inputs (many quotes / many potential toggles), which is exactly what large JSON payloads tend to contain. - In the worst case, this turns “type one character” into “do a huge amount of CPU work”, producing the freeze. **Why this approach** - A single forward scan preserves semantics while making the runtime scale predictably with input size. keystroke (`shared-ux` React Monaco editor) **What changed** - The `onDidChangeModelContent` handler computes the next value by applying `event.changes` to a shadow string (`lastKnownValueRef`) instead of calling `editor.getValue()`. - Controlled-mode syncing (`useLayoutEffect`) first compares the incoming `value` against the shadow value to avoid unnecessary full-buffer reads. **Why** - `editor.getValue()` materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models. - Applying incremental changes keeps the per-keystroke cost proportional to the change set, not the document size. **Why this approach** - Monaco already provides the exact edit deltas (`IModelContentChangedEvent.changes`). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads. - **`language.test.ts`**: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model. - **`autocomplete_utils.test.ts`**: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance). - **`editor.test.tsx`**: verifies the incremental `onChange` value computation (including multi-change ordering) and controlled sync behavior. - `node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.js` - `node scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.js` Co-authored-by: Cursor <cursoragent@cursor.com>
…#251173) (#254618) # Backport This will backport the following commits from `main` to `9.2`: - [[DevTools Console] Avoid editor freeze after pasting large JSON (#251173)](#251173) <!--- Backport version: 10.2.0 --> ## CI / Scout note (9.2 Streams) This backport branch was repeatedly failing `streams_app` Scout tests on 9.2 due to a pre-existing Playwright/Monaco `CodeEditor` interaction where bulk input (notably `.fill()`) can leave the editor content truncated/garbled. Downstream, the Streams condition syntax editor silently ignores invalid JSON, so conditions/previews never apply. To stabilize CI **test-side only** (no product behavior changes): - Ensure Streams Scout page objects don't reach into private fields (fixes TypeScript typecheck) - Updated the Streams Scout page object to stabilize the custom samples Monaco editor input by targeting Monaco's textarea (with retries + JSON validation, plus a fallback to slow typing). - Updated the routing preview specs to avoid editing JSON directly in the Monaco syntax editor on 9.2 (flaky under automation), while still keeping meaningful coverage by: - asserting the preview updates correctly when conditions change - asserting the syntax editor reflects the current condition when toggled on ### Follow-ups - [#255025](#255025) (Streams UX: preserve invalid JSON + show validation; avoid silent discard on apply) - [#255029](#255029) (Shared UX `@kbn/code-editor`: improve Monaco/Playwright bulk input reliability) ### Test plan - `node scripts/scout.js run-tests --arch stateful --domain classic --testFiles x-pack/platform/plugins/shared/streams_app/test/scout/ui/tests/data_management/data_processing/data_sources_management.spec.ts,x-pack/platform/plugins/shared/streams_app/test/scout/ui/tests/data_management/data_routing/routing_data_preview.spec.ts` ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport) --------- Co-authored-by: Cursor <cursoragent@cursor.com>
|
Looks like this PR has backport PRs but they still haven't been merged. Please merge them ASAP to keep the branches relatively in sync. |
…tic#251173) Closes elastic#251172 This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs. https://github.com/user-attachments/assets/54b90fdb-f0b0-4de0-ae53-6fa4a12a98d9 Console language) **What changed** - The Console completion provider no longer calls `model.getValue()` to compute `textBeforeCursor`. - ES|QL context detection is only attempted when the cursor is within a `POST /_query` (or `POST _query/async`) request. - When it *is* a `_query` request, the provider reads only the relevant slice via `model.getValueInRange()` (from the request line to the cursor). - For all other requests (or when no request line is found within a bounded lookback), completion delegates to the existing actions provider. **Why** - `model.getValue()` materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI. - ES|QL completion only makes sense for `_query` requests; scoping the work avoids paying the cost for non-ES|QL traffic. **Why this approach** - We preserve existing completion behavior by delegating to the actions provider, but avoid the pathological cost by restricting work to a small, semantically relevant window. (`checkForTripleQuotesAndEsqlQuery`) **What changed** - `checkForTripleQuotesAndEsqlQuery` was rewritten to scan the text once and avoid repeated substring+regex work inside the main loop. **Why** - The previous approach could become super-linear on adversarial inputs (many quotes / many potential toggles), which is exactly what large JSON payloads tend to contain. - In the worst case, this turns “type one character” into “do a huge amount of CPU work”, producing the freeze. **Why this approach** - A single forward scan preserves semantics while making the runtime scale predictably with input size. keystroke (`shared-ux` React Monaco editor) **What changed** - The `onDidChangeModelContent` handler computes the next value by applying `event.changes` to a shadow string (`lastKnownValueRef`) instead of calling `editor.getValue()`. - Controlled-mode syncing (`useLayoutEffect`) first compares the incoming `value` against the shadow value to avoid unnecessary full-buffer reads. **Why** - `editor.getValue()` materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models. - Applying incremental changes keeps the per-keystroke cost proportional to the change set, not the document size. **Why this approach** - Monaco already provides the exact edit deltas (`IModelContentChangedEvent.changes`). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads. - **`language.test.ts`**: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model. - **`autocomplete_utils.test.ts`**: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance). - **`editor.test.tsx`**: verifies the incremental `onChange` value computation (including multi-change ordering) and controlled sync behavior. - `node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.js` - `node scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.js` - Open `DevTools -> Console`. - Expand the `<details>` block below and paste the payload into the editor. - Click at the very end of the pasted content and type a few characters. - Verify the editor remains responsive (no multi-second freeze / hang), and typed characters appear immediately. - Optional: place the cursor inside a `""" ... """` block and type to ensure autocomplete remains responsive. <details> <summary>Sanitized reproduction payload (paste into DevTools Console)</summary> ```http POST _ingest/pipeline/_simulate { "docs": [ { "_source": { "@timestamp": "xQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS", "eventData": { "__original": "5\"wYxQ9mP7vK\"2Zt\"R4nL1aB8c\"D\"6eF3gH\"0\"jS5wYxQ9\"mP\"7vK2ZtR4n\"L1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8c\"D6eF3gH\"0jS5wYxQ9m\"P7vK2ZtR4\"nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Z\"tR4nL1\"aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2Zt\"R4nL1a\"B8cD6eF\"3gH0j\"S5wYxQ9\"m\"P7vK2ZtR4nL1aB8c\"D6\"eF3gH\"0jS5w\"YxQ9mP7v\"K2Z\"tR4\"n\"L1aB8\"c\"D6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B8cD\"6eF3gH0jS5\"wYxQ9mP\"7vK2ZtR4nL\"1aB8cD6\"eF3g\"H0jS5\"wYxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3g\"H\"0jS5wYx\"Q9mP7v\"K2ZtR4n\"L1aB8c\"D6eF3gH\"0\"jS5wYxQ9mP7vK2Z\"t\"R4nL1aB8cD\"6eF3gH\"0jS5wYxQ9mP7v\"K2ZtR4n\"L1aB\"8\"cD6eF\"3\"gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8cD\"6\"eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"n\"L1aB8cD6e\"F3g\"H0jS5wYxQ9mP7vK2ZtR\"4nL1aB8cD\"6eF3gH0jS\"5w\"YxQ9mP7v\"K2ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wY\"xQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4n\"L1aB8\"cD6eF\"3gH\"0jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB8\"cD6eF\"3gH0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1a\"B8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP\"7vK2Z\"tR4nL\"1aB\"8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4nL\"1aB8c\"D6eF3\"gH0\"jS5wYx\"Q9mP7\"vK2ZtR\"4nL1aB8cD\"6\"eF3gH0jS5wYxQ\"9\"mP7vK2ZtR\"4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9mP7v\"K2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Z\"tR4nL\"1aB8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1\"aB8cD\"6eF3gH\"0jS5wY\"xQ9mP7\"vK2ZtR4nL\"1aB8c\"D6eF3gH\"0jS\"5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4\"nL\\1a\\\"\\B8cD6\"e\"F3gH\"0jS\"5wYxQ9mP7\"vK2Zt\"R4nL1aB8c\"D6eF3\"gH0jS5wYxQ\"9mP7vK2\"ZtR4nL1aB8\"cD6eF3g\"H0jS\"5wYxQ\"9mP7\"v\"K2ZtR4nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1aB\"8cD6eF3\"g\"H0jS5wYxQ9mP7vK\"2\"ZtR4nL1aB8\"cD6eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL1\"a\"B8cD6e\"F\"3gH0jS5w\"Y\"xQ9mP7vK2ZtR4nL1aB8c\"D\"6eF3gH0jS5\"w\"YxQ9mP7vK2ZtR\"4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7vK2Zt\"R4nL1aB8c\"D6eF3gH0j\"S5\"wYxQ9mP7\"vK2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5w\"YxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Zt\"R4nL1\"aB8cD\"6eF\"3gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4nL1\"aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS\"5wY\"xQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5w\"YxQ9m\"P7vK2Z\"tR4nL1aB8\"c\"D6eF3gH0jS5wY\"x\"Q9mP7vK2Z\"tR\"4nL1aB8c\"D6eF3\"gH0jS5wYxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3\"gH0jS\"5wYxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7v\"K2Z\"tR4\"nL1aB\"8cD6eF\"3gH0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5wYxQ9m\"P7v\"K2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B\"8cD6eF\"3\"gH0j\"S5w\"YxQ9mP7vK\"2ZtR4\"nL1aB8cD6\"eF3gH0j\"S5wYxQ9mP7\"vK2ZtR4\"nL1aB8cD6e\"F3gH0jS\"5wYx\"Q9mP7\"vK2Z\"t\"R4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR4nL1a\"B8cD6eF\"3gH0jS5wYx\"Q9mP7vK\"2\"ZtR4nL1aB8cD6eF\"3\"gH0jS5wYxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5w\"Y\"xQ9mP\"7\"vK2ZtR4n\"L\"1aB8cD6eF3gH0jS5wYxQ\"9\"mP7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7v\"K2ZtR4nL1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2Zt\"R4\"nL1aB8cD\"6eF3g\"H0jS5wYxQ9mP7vK\"2Zt\"R4n\"L1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5wY\"xQ9\"mP7vK\"2ZtR4\"nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS5\"wYxQ9\"mP7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0j\"S5w\"YxQ9m\"P7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8\"cD6\"eF3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4n\"L1aB8\"cD6eF3\"gH0jS5wYx\"Q\"9mP7vK2ZtR4nL\"1\"aB8cD6eF3\"gH\"0jS5wYxQ\"9mP7v\"K2ZtR4nL1aB8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9m\"P7vK2\"ZtR4n\"L1a\"B8cD6\"eF3gH\"0jS5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0j\"S5wYx\"Q9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR\"4nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP\"7vK2ZtR\"4nL\"1aB8cD6eF\"3gH\"0\"jS5wYx\"Q\"9mP7\"vK2\"ZtR4nL1aB\"8cD6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4n\"L1aB8cD6\"eF3gH0jS5w\"YxQ9mP7\"vK2Z\"tR4nL\"1aB8\"c\"D6eF3gH0jS5wYxQ9mP7vK2ZtR\"4\"nL1aB8c\"D6eF3gH0\"jS5wYxQ\"9mP7vK2\"ZtR4nL1\"a\"B8cD6eF3gH0jS5w\"Y\"xQ9mP7vK2Z\"tR4nL1\"aB8cD6eF3gH0j\"S5wYxQ9m\"P7vK\"2\"ZtR4n\"L\"1aB8cD6e\"F\"3gH0jS5wYxQ9mP7vK2Zt\"R\"4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"m\"P7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7vK2Zt\"R4nL1aB8c\"D6\"eF3gH0jS\"5wYxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6e\"F3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF\"3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR\"4nL1a\"B8cD6\"eF3\"gH0jS\"5wYxQ\"9mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH\"0jS\"5wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8cD\"6eF3g\"H0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8cD6eF3gH0jS5w\"YxQ\"9mP\"7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2ZtR\"4nL1a\"B8cD6eF\"3gH\"0jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1a\"B8cD6\"eF3gH\"0jS\"5wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD6\"eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F\"3gH0jS5wY\"xQ\"9mP7vK2Z\"tR4nL\"1aB8cD6eF3gH0\"jS5\"wYx\"Q9mP7\"vK2Zt\"R4nL1\"aB8\"cD6eF\"3gH0j\"S5wYx\"Q9m\"P7vK2\"ZtR4n\"L1aB8cD\"6eF\"3gH0j\"S5wYx\"Q9mP7v\"K2Z\"tR4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5\"wYx\"Q9m\"P7vK2\"ZtR4nL\"1aB8cD\"6eF3gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1\"aB8\"cD6eF3gH0j\"S5w\"YxQ\"9mP7vK\"2ZtR4nL1aB8cD\"6eF3gH0\"jS5\"wYxQ9mP7v\"K2ZtR4n\"L1\"aB8cD6e\"F3gH\"0jS5wYxQ9\"m\"P7vK2ZtR4nL\"1\"aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4\"nL1aB\"8cD\"6eF3g\"H0j\"S5wYxQ9\"mP7v\"K2ZtR4nL\"1aB8c\"D6eF3gH0jS\"5wY\"xQ9mP7vK2Z\"tR4n\"L1aB8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9m\"P7v\"K2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5\"wYxQ9mP\"7\"vK2ZtR4nL1aB8cD6\"e\"F3gH0jS5wYxQ9mP7\"vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5\"wYxQ\"9mP7v\"K2ZtR\"4nL\"1aB8\"cD6eF\"3gH0j\"S5w\"YxQ9\"mP7vK\"2ZtR4\"nL1\"aB8c\"D6eF3\"gH0jS5\"wYxQ9mP7vK2ZtR4\"nL1a\"B8cD6eF3gH\"0jS5wY\"xQ9mP7vK2\"Z\"tR4nL1\"a\"B8cD6eF3\"gH\"0jS5wYxQ9\"mP7vK2Z\"tR4nL1a\"B8cD6eF3gH\"0jS5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS\"5wYxQ9m\"P7vK2Zt\"R4nL1\"aB8cD6eF\"3gH0j\"S5wYxQ9\"mP7vK2\"ZtR4nL1\"aB8cD6\"eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL\"1aB8c\"D6eF3\"gH0jS5wY\"xQ9\"mP7\"v\"K2ZtR4\"n\"L1aB\"8cD\"6eF3gH0jS\"5wYxQ\"9mP7vK2Zt\"R4nL1a\"B8cD6eF3gH\"0jS5wYxQ\"9mP7vK2ZtR\"4nL1aB8c\"D6eF\"3gH0j\"S5wY\"x\"Q9mP7vK2Zt\"R\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9\"mP7vK2Zt\"R4nL1aB\"8\"cD6eF3gH0jS5wYx\"Q\"9mP7vK2ZtR\"4nL1aB\"8cD6eF3gH0jS5\"wYxQ9mP7\"vK2Z\"t\"R4nL1a\"B\"8cD6eF3g\"H\"0jS5wYxQ9mP7vK2ZtR4n\"L\"1aB8cD6eF3\"g\"H0jS5wYxQ9mP7\"v\"K2ZtR4nL1\"aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3\"gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8c\"D6e\"F3g\"H0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5wY\"xQ9mP\"7vK2Z\"tR4\"nL1aB\"8cD6e\"F3gH0\"jS5\"wYxQ9\"mP7vK\"2ZtR4nL\"1aB\"8cD6eF\"3gH0j\"S5wYxQ\"9mP\"7vK2Zt\"R4nL1\"aB8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2\"ZtR\"4nL1a\"B8cD6\"eF3\"gH0j\"S5wYx\"Q9mP7\"vK2\"ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS\"5wYxQ\"9mP7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB8\"cD6eF\"3gH0jS5\"wYx\"Q9mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF3g\"H0jS5\"wYxQ9m\"P7vK2ZtR4\"n\"L1aB8cD6eF3gH\"0\"jS5wYxQ9m\"P7\"vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5w\"YxQ\"9mP\"7vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH0\"jS5wY\"xQ9mP\"7vK\"2ZtR4\"nL1aB\"8cD6e\"F3g\"H0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL1\"aB8cD\"6eF3g\"H0j\"S5wYx\"Q9mP7\"vK2ZtR4\"nL1\"aB8cD\"6eF3g\"H0jS5w\"YxQ\"9mP7v\"K2ZtR\"4nL1aB\"8cD\"6eF3g\"H0jS5\"wYxQ9\"mP7\"vK2\"ZtR4n\"L1aB8c\"D6eF3g\"H0jS5wY\"xQ9mP7vK2\"ZtR4nL\"1aB8cD6\"eF3\"gH0jS5wYxQ\"9mP\"7vK\"2ZtR4n\"L1aB8cD6eF3gH\"0jS5wYxQ\"9mP\"7vK2ZtR4n\"L1aB8cD\"6e\"F3gH0jS\"5wYx\"Q9mP7vK2Z\"t\"R4nL1aB8cD6\"e\"F3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB\"8c\"D6eF3\"gH0\"jS5wY\"xQ9\"mP7vK2Z\"tR4n\"L1aB8cD6\"eF3gH\"0jS5wYxQ9m\"P7v\"K2ZtR4nL1a\"B8cD\"6eF3gH0jS5wYxQ9m\"P7v\"K2Z\"tR4n\"L1aB8\"cD6eF\"3gH\"0jS5\"wYxQ9\"mP7vK\"2Zt\"R4nL\"1aB8c\"D6eF3\"gH0\"jS5w\"YxQ9m\"P7vK2\"ZtR\"4nL1\"aB8cD\"6eF3g\"H0j\"S5wY\"xQ9mP\"7vK2Z\"tR4\"nL1a\"B8cD6\"eF3gH\"0jS\"5wYx\"Q9mP7\"vK2Zt\"R4n\"L1aB\"8cD6e\"F3gH0\"jS5wYxQ\"9mP\"7vK2ZtR\"4\"nL1aB8cD6eF3gH0j\"S\"5wYxQ9mP7vK2ZtR4\"nL1\"aB8\"cD6e\"F3gH0\"jS5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB\"8cD\"6eF3\"gH0jS\"5wYxQ\"9mP\"7vK2\"ZtR4n\"L1aB8\"cD6\"eF3g\"H0jS5\"wYxQ9\"mP7\"vK2Z\"tR4nL\"1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF\"3gH0jS5wYx\"Q9mP7v\"K2ZtR4nL1\"a\"B8cD6eF3gH0jS\"5wY\"xQ9mP7vK2\"Z\"tR4nL1aB8cD6e\"F3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL1\"aB8\"cD6eF3gH0\"j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6e\"F\"3gH0jS5wYxQ9mP7\"vK2\"ZtR4nL1aB\"8\"cD6eF3gH\"0jS\"5wYxQ9\"mP7vK2ZtR\"4nL1aB8cD\"6eF\"3gH0jS\"5w\"YxQ9\"mP7vK2ZtR4n\"L1aB8cD6eF3g\"H0jS5wYxQ\"9mP7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS5wY\"x\"Q9mP7vK2ZtR4nL1aB8\"c\"D6eF3g\"H0jS5wYxQ9\"mP7vK\"2ZtR4nL1aB8\"cD6eF3gH0jS5wYxQ9m\"P7vK2ZtR4\"nL1aB8cD6\"eF3gH0jS5wYx\"Q9mP7vK2ZtR\"4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3gH0jS5\"wYxQ9mP7v\"K2ZtR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR4nL1a\"B8cD6eF3g\"H0jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL1\"a\"B8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP7vK2Zt\"R4n\"L1aB8cD6eF3\"gH0\"jS5wYxQ\"9mP\"7vK2ZtR4n\"L1a\"B8cD6eF3\"gH0\"jS5wYxQ9m\"P7vK2\"ZtR4nL1aB\"8\"cD6eF\"3\"gH0jS5w\"YxQ9mP7v\"K2ZtR4nL1\"aB8cD6\"eF3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8cD6eF3gH\"0jS\"5wYxQ9mP7vK\"2ZtR\"4nL1aB8\"cD6eF3gH0j\"S5wYxQ9mP\"7vK2ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ9m\"P7vK2ZtR4\"n\"L1aB8c\"D\"6eF3gH0\"jS5wYxQ9\"mP7vK2ZtR\"4nL1aB\"8cD6eF3g\"H0j\"S5wYxQ9mP\"7vK\"2ZtR4nL1aB8cD6e\"F3g\"H0jS5wYxQ9m\"P7v\"K2ZtR4n\"L1aB8cD6\"eF3gH0jS5\"wYxQ9m\"P7vK2ZtR\"4nL\"1aB8cD6eF\"3gH0j\"S5wYxQ9mP\"7\"vK2ZtR\"4\"nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wYxQ9mP7v\"K2Z\"tR4nL1aB8cD\"6eF\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9mP\"7vK2ZtR4n\"L\"1aB8cD6\"e\"F3gH0jS\"5wY\"xQ9mP7vK2\"ZtR\"4nL1aB8c\"D6e\"F3gH0jS5w\"YxQ\"9mP7vK2ZtR4nL1a\"B8c\"D6eF3gH0jS5\"wYx\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4nL\"1aB8cD6eF\"3\"gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8cD6eF3g\"H0j\"S5wYxQ9mP7v\"K2Z\"tR4nL1a\"B8c\"D6eF3gH0j\"S5w\"YxQ9mP7v\"K2Z\"tR4nL1aB8\"cD6eF\"3gH0jS5wY\"x\"Q9mP7vK\"2\"ZtR4nL1\"aB8\"cD6eF3gH0\"jS5\"wYxQ9mP7\"vK2\"ZtR4nL1aB\"8cD\"6eF3gH0jS5wYxQ9\"mP7\"vK2ZtR4nL1a\"B8c\"D6eF3gH\"0jS\"5wYxQ9mP7\"vK2\"ZtR4nL1a\"B8c\"D6eF3gH0j\"S5wYx\"Q9mP7vK2Z\"t\"R4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6e\"F\"3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD\"6eF\"3gH0jS5wY\"xQ9\"mP7vK2ZtR4nL1aB\"8cD\"6eF3gH0jS5w\"YxQ\"9mP7vK2\"ZtR\"4nL1aB8cD\"6eF\"3gH0jS5w\"YxQ\"9mP7vK2Zt\"R4nL1\"aB8cD6eF3\"g\"H0jS5w\"Y\"xQ9mP7v\"K2ZtR4nL\"1aB8cD6eF\"3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8c\"D6eF3gH0jS5wYxQ\"9mP\"7vK2ZtR4nL1\"aB8\"cD6eF3g\"H0jS5wYx\"Q9mP7vK2Z\"tR4nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7\"vK2ZtR4nL\"1a\"B8cD6eF3gH0\"jS5w\"YxQ9mP7vK\"2\"ZtR4nL\"1\"aB8cD6e\"F3g\"H0jS5wYxQ\"9mP\"7vK2ZtR4\"nL1\"aB8cD6eF3\"gH0\"jS5wYxQ9mP7vK2Z\"tR4\"nL1aB8cD6eF\"3gH\"0jS5wYx\"Q9m\"P7vK2ZtR4\"nL1\"aB8cD6eF\"3gH\"0jS5wYxQ9\"mP7vK\"2ZtR4nL1a\"B\"8cD6eF\"3\"gH0jS5w\"YxQ\"9mP7vK2Zt\"R4n\"L1aB8cD6\"eF3\"gH0jS5wYx\"Q9m\"P7vK2ZtR4nL1aB8\"cD6\"eF3gH0jS5wY\"xQ9\"mP7vK2Z\"tR4\"nL1aB8cD6\"eF3\"gH0jS5wY\"xQ9\"mP7vK2ZtR\"4nL1a\"B8cD6eF3g\"H\"0jS5wY\"x\"Q9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5\"wYx\"Q9mP7vK2Z\"tR4\"nL1aB8cD6eF3gH0\"jS5\"wYxQ9mP7vK2\"ZtR\"4nL1aB8\"cD6\"eF3gH0jS5\"wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD\"6eF3g\"H0jS5wYxQ\"9\"mP7vK2Z\"t\"R4nL1aB\"8cD\"6eF3gH0jS\"5wY\"xQ9mP7vK\"2Zt\"R4nL1aB8c\"D6e\"F3gH0jS5wYxQ9mP\"7vK\"2ZtR4nL1aB8\"cD6\"eF3gH0j\"S5w\"YxQ9mP7vK\"2Zt\"R4nL1aB8\"cD6\"eF3gH0jS5\"wYxQ9\"mP7vK2ZtR\"4\"nL1aB8cD6\"e\"F3gH0jS\"5wYxQ9mP\"7vK2ZtR4n\"L1aB8c\"D6eF3gH0\"jS5\"wYxQ9mP7v\"K2Z\"tR4nL1aB8cD6eF3\"gH0\"jS5wYxQ9mP7\"vK2\"ZtR4nL1\"aB8cD6eF\"3gH0jS5wY\"xQ9mP7\"vK2ZtR4n\"L1a\"B8cD6eF3g\"H0j\"S5wYxQ9mP\"7v\"K2ZtR4nL1aB8c\"D6eF\"3gH0jS5wY\"x\"Q9mP7\"v\"K2ZtR4n\"L1aB8cD6eF\"3gH0jS5wY\"xQ9mP7v\"K2ZtR4nL\"1aB\"8cD6eF3gH\"0jS\"5wYxQ9mP7vK2ZtR\"4nL\"1aB8cD6eF3g\"H0jS5\"wYxQ9mP\"7vK2ZtR4n\"L1aB8cD6e\"F3gH0jS\"5wYxQ9mP\"7vK\"2ZtR4nL1a\"B8cD6\"eF3gH0jS5wY\"xQ9mP\"7vK2ZtR4nL1aB8\"cD\"6eF3g\"H0jS5\"wYxQ9mP7vK2\"ZtR4n\"L1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2\"Zt\"R4nL1\"aB8cD6e\"F3gH0j\"S5wYx\"Q9mP7vK2\"ZtR\"4nL1aB8cD6eF\"3gH0\"jS5wYxQ9\"mP\"7vK2ZtR4\"nL1aB\"8cD6eF3gH0jS\"5wY\"xQ9\"mP7v\"K2ZtR\"4nL1a\"B8c\"D6eF\"3gH0j\"S5wYx\"Q9m\"P7vK\"2ZtR4\"nL1aB8c\"D6e\"F3gH\"0jS5w\"YxQ9mP\"7vK\"2Zt\"R4nL1\"aB8cD\"6eF3gH0\"jS5w\"YxQ9mP7v\"K2Z\"tR4nL1aB\"8cD\"6eF3gH0jS\"5wYx" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "Q9mP7vK2ZtR4nL1aB8cD6", "moduleId": "eF3gH0jS5wY" }, "customerInfo": { "customerId": "xQ9mP7vK2Zt", "deviceId": "R4nL1aB8cD6eF3gH0jS5w", "lineId": "YxQ9mP7vK2ZtR4", "publicIp": "nL1aB8cD6eF3" } } }, { "_index": "gH0jS5wYxQ9mP7vK2Zt", "_source": { "kafka": { "eventId": "R4nL1aB8cD6e", "moduleId": "F3gH0jS5w" }, "customerInfo": { "customerId": "YxQ9mP7vK2Z", "deviceId": "tR4nL1aB8cD6eF3gH0jS5", "lineId": "wYxQ9mP7vK2ZtR", "publicIp": "4nL1aB8cD6eF" }, "eventData": { "__original": "3\"gH0jS5w\"Yx\"Q9m\"P\"7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5\"w\"YxQ9mP7\"vK2\"ZtR4nL1aB8cD6e\"F3g\"H0jS5wYx\"Q9m\"P7vK2\"Z\"tR4nL1aB 8cD6eF 3g H0jS5wYx\"Q\"9mP7vK2ZtR4nL1aB8c\"D6eF3\"gH0jS5wY\"xQ9mP7\"vK2ZtR\"4nL1aB8\"cD6eF3gH0jS5wYxQ9mP7vK\"2ZtR\"4nL1aB8cD6eF3gH0j\"S5wYxQ9\"mP7vK2ZtR4n\"L1aB8cD\"6eF3gH\"0\"jS5wYxQ\"9\"mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0\"j\"S5wYxQ9\"m\"P7vK2ZtR4nL1\"a\"B8cD6eF3g\"H\"0jS5wYxQ9mP7\"v\"K2ZtR4n\"L\"1aB8cD6eF3gH0\"jS5w\"YxQ9mP7vK2ZtR4nL1aB\"8cD6e\"F3gH0jS5wYx\"Q9mP7\"vK2ZtR4nL1\"aB8cD6" } } }, { "_source": { "eventData": { "__original": "e\"F3gH0jS\"5w\"YxQ\"9\"mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYx\"Q\"9mP7vK2\"ZtR\"4nL1aB8cD6eF3g\"H0j\"S5wYxQ9m\"P7v\"K2ZtR\"4\"nL1aB8cD 6eF3gH 0j S5wYxQ9mP7v K\"2\"ZtR4nL1aB8cD6eF3gH\"0jS5w\"YxQ9mP7v\"K2ZtR4\"nL1aB8\"cD6eF3g\"H0jS5wYxQ9mP7vK2ZtR4nL\"1aB8\"cD6eF3gH0jS5wYxQ9\"mP7vK2Z\"tR4nL1aB8cD\"6eF3gH0\"jS5wYx\"Q\"9mP7vK2\"Z\"tR4nL1aB8cD6\"eF3g\"H0jS5wYxQ\"9\"mP7vK2ZtR4nL\"1\"aB8cD6eF3gH0\"j\"S5wYxQ9mP\"7\"vK2ZtR4nL1aB\"8\"cD6eF3gH0jS5w\"Y\"xQ9mP7vK2ZtR4\"nL1\"aB8cD6eF3gH0jS5wYxQ\"9mP7\"vK2ZtR4nL1a\"B8cD\"6eF3gH0jS5wY\"xQ\"9mP7vK2Z\"t\"R4n\"L\"1aB8cD6eF3gH0jS\"5wYxQ9mP\"7vK2ZtR4nL1aB8c\"D6eF3gH\"0jS5wYx\"Q9\"mP7vK2Zt\"R\"4nL1a\"B8c\"D6eF3gH0jS\"5wYxQ9m" }, "customerInfo": { "customerId": "P7vK2ZtR4nL", "deviceId": "1aB8cD6eF3gH0jS5wYxQ9", "lineId": "mP7vK2ZtR4nL1a", "publicIp": "B8cD6eF3gH0j" }, "kafka": { "eventId": "S5wYxQ9mP7vK", "moduleId": "2ZtR4nL1a" } } }, { "_source": { "@timestamp": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "eventData": { "__original": "L\"1aB8cD6eF3gH0jS5w\"YxQ9m\"P7vK2ZtR4nL1aB8cD6e\"F3gH0jS\"5wYxQ9mP7vK2ZtR4n\"L1aB8\"cD6eF3gH0jS5wYxQ9mP\"7vK2Zt\"R4nL1aB8\"cD6eF" }, "ingest_lag_in_seconds": 1, "kafka": { "eventId": "3gH0jS5w", "moduleId": "YxQ9mP7vK" }, "@Version": "2", "customerInfo": { "customerId": "ZtR4nL1aB8c", "deviceId": "D6eF3gH0jS5wYxQ9mP7vK", "lineId": "2ZtR4nL1aB8cD6", "publicIp": "eF3gH0jS5wYx" } } } ], "pipeline": { "processors": [ { "rename": { "field": "Q9mP7vK2ZtR4nL1aB8cD", "target_field": "6eF3gH0jS5wYxQ" } }, { "lowercase": { "field": "9mP7vK2ZtR4nL1", "target_field": "aB8cD6eF3gH", "ignore_missing": true } }, { "set": { "field": "0jS5wYxQ9mP7", "copy_from": "vK2ZtR4nL1aB8", "ignore_empty_value": true } }, { "set": { "field": "cD6eF3gH0", "copy_from": "jS5wYxQ9mP7vK2ZtR4nL1", "ignore_empty_value": true } }, { "script": { "source": """ aB8 cD6eF3gH0j S 5wYxQ9mP7vK2ZtR4 nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP""", "if": "7vK2ZtR4nL1aB8cD 6e F3gH 0j S5wYxQ9mP7vK2ZtR4nL 1a B8cD" } }, { "script": { "description": "6eF3gH0 jS5wYxQ9 mP 7vK2ZtR4nL1 aB8cD6e F3gH 0jS", "source": "5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "if": "S5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF 3gH0 jS 5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 gH0jS5wYxQ 9mP7vK2" } }, { "set": { "field": "ZtR4nL1aB8cD6e", "copy_from": "F3gH0jS5wYxQ9mP7vK2", "ignore_empty_value": true } }, { "set": { "field": "ZtR4nL1aB8cD6", "copy_from": "eF3gH0jS5wYxQ9mP7vK2Zt", "ignore_empty_value": true } }, { "rename": { "field": "R4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2Zt", "ignore_missing": true } }, { "script": { "source": """ R4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0 jS5wYxQ9mP7v """, "if": "K2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2Zt R4 nL1a" } }, { "rename": { "field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "target_field": "eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF", "target_field": "3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8", "ignore_missing": true } }, { "rename": { "field": "cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3", "target_field": "gH0jS5wYxQ9mP7vK2ZtR4nL1aB8cD6", "ignore_missing": true } }, { "rename": { "field": "eF3gH0jS5wYxQ9mP7v", "target_field": "K2ZtR4nL1aB8cD6eF3gH0jS5w", "ignore_missing": true } }, { "rename": { "field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3g", "target_field": "H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD", "ignore_missing": true } }, { "rename": { "field": "6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a", "target_field": "B8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4n", "ignore_missing": true } }, { "rename": { "field": "L1aB8cD6eF3gH0jS5wYxQ9mP7vK", "target_field": "2ZtR4nL1aB8cD6eF3gH0jS5wYxQ9", "ignore_missing": true } }, { "rename": { "field": "mP7vK2ZtR4nL1aB8cD6eF3gH0jS5w", "target_field": "YxQ9mP7vK2ZtR4nL1aB8cD6eF3gH0j", "ignore_missing": true } }, { "script": { "description": "S5wYxQ9mP 7vK2ZtR 4nL1aB8 cD6eF 3gH 0jS5wYx Q9mP7vK 2ZtR", "lang": "4nL1aB8c", "source": """ D6 eF3gH0jS5wYxQ9mP7vK2ZtR4nL 1a B8cD6 e F3g H0j S 5wYxQ9mP7vK2ZtR4nL1aB8cD6 eF3gH0jS5w Y xQ9mP7vK2Z tR 4nL1 a B8c D 6eF3gH0jS5w YxQ9mP7vK2ZtR4n L 1 aB8c D6eF3gH0jS5wYxQ9mP7vK 2ZtR 4nL1aB8cD6eF3gH0jS5wY xQ9mP 7vK2ZtR4nL1aB8cD6eF3g H0 jS 5wY xQ9mP7vK2ZtR4n L1 a B8cD6 eF3g H 0j S 5wYxQ9mP 7 vK2ZtR4n L1 aB8c D 6eF 3 gH0jS5wYx Q9mP7vK2ZtR4 n L 1aB8cD6e F3gH0jS5wYxQ9mP7vK2 Z tR4nL 1a B 8c D6 eF3gH0 jS5wYxQ 9m P7vK2ZtR4nL1aB8cD6eF3gH0 jS 5wYxQ 9 mP7 vK2 Z tR4nL1aB8cD6eF3gH0jS5wY xQ9mP7vK2ZtR4nL1a B 8 cD6eF3gH 0jS5wYxQ9m P7vK2Zt R4nL1aB8c D6eF3gH0j S5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3g H 0jS5wYxQ 9mP7vK2Zt R 4nL1aB8cD6eF3g H0jS5w YxQ9mP7vK2ZtR4nL1a B 8cD6eF3gH0jS5w Y xQ9mP7vK2 Z tR 4 nL 1a B8c D6eF3gH 0jS5wYxQ9m P7vK2Z tR 4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK 2Z tR4nL 1 aB8 cD6eF 3g H0jS5wYxQ9mP7vK2ZtR4nL1aB8cD 6 eF 3gH0jS5wYxQ9mP7 vK 2ZtR4nL1aB8c D 6eF3gH0jS5w Y x Q9mP7vK2 ZtR4nL1aB8cD6 eF 3g H 0jS5wYxQ9mP7v K2 ZtR 4nL1aB8 cD6eF3gH0jS5wY xQ 9mP7vK2ZtR 4 nL1aB8cD6 eF3gH0jS5wYxQ9 mP7vK2ZtR4nL1aB 8 cD6eF3gH0 jS5wYxQ9mP7vK2 ZtR4nL1aB8cD6eF3gH0jS5wYxQ9mP7vK2ZtR4nL1a B8cD6e F 3 g H0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6e F3 gH0jS 5 wYx Q9m P 7vK2ZtR4nL1aB8cD6eF3gH0jS5w YxQ9mP7vK2Z t R4nL1aB8cD6 eF 3gH0 j S5w Y xQ9mP7vK2ZtR 4nL1aB8cD6eF3g H 0jS5wYxQ9 mP7vK2ZtR4nL1aB8cD6 e F 3gH0jS5wYxQ9 mP7vK2ZtR4 nL1aB8cD6eF3g H0jS5wYxQ9m P7vK2ZtR4nL1aB8 cD6eF3gH0jS5w YxQ9mP7vK2ZtR4nL1aB8 cD6eF3gH0jS5wYxQ 9m P7 vK2ZtR4nL 1aB8c D6eF 3gH 0jS5wY xQ9mP7vK2ZtR 4n L1aB8cD6eF 3 gH 0 jS5wYxQ9mP7vK2ZtR4nL1aB8cD6eF3 g H0jS5wYxQ9mP7vK2Zt R 4nL1aB8cD6 e F """ } }, { "uri_parts": { "field": "3gH0jS5wYxQ9", "ignore_missing": true, "ignore_failure": true } }, { "append": { "field": "mP7vK2ZtR4n", "value": [ "L1aB8cD6eF3gH", "0jS5wYxQ9mP7vK2ZtR", "4nL1aB8cD6eF3", "gH0jS5wYxQ9mP7vK2", "ZtR4nL1aB8cD6" ], "allow_duplicates": false } }, { "script": { "description": "eF3gH0 jS5w YxQ9mP", "source": """ 7vK2ZtR 4nL1aB8cD6e F3 g H0 jS 5w YxQ9 mP 7 vK 2Zt R 4nL1aB 8cD6e F 3gH0 jS 5w YxQ9mP7vK2 ZtR4 n L1aB8c D6eF3gH0jS5wYxQ9mP7vK2 Zt R4nL1aB8c D6eF3g H0jS5wY xQ9mP7vK2 Zt R4n L 1aB8 cD 6e F3gH0jS5wY xQ9mP 7 vK2ZtR4 nL1aB8cD6eF3g H0 jS5wYxQ9m P7vK2Z tR4nL1aB 8cD6eF3gH 0j S5w Y xQ9mP7 vK2ZtR 4 nL1aB8cD6e """ } }, { "remove": { "field": [ "F3gH" ], "ignore_missing": true } } ] } } ``` </details> Assisted by Cursor CLI using GPT-5.2-High model --------- Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 4fa1505) Co-authored-by: Cursor <cursoragent@cursor.com>
|
Looks like this PR has backport PRs but they still haven't been merged. Please merge them ASAP to keep the branches relatively in sync. |
#251173) (#254741) # Backport This will backport the following commits from `main` to `8.19`: - [[DevTools Console] Avoid editor freeze after pasting large JSON (#251173)](#251173) <!--- Backport version: 10.2.0 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport) --------- Co-authored-by: Cursor <cursoragent@cursor.com>
Closes #251172
Summary
This PR fixes a DevTools Console editor freeze that occurs after pasting very large request payloads (notably JSON containing huge string fields) by removing expensive, full-buffer operations from keystroke-time paths and by preventing a super-linear ES|QL context scan from running on large inputs.
DEMO (Before / After)
Screen.Recording.2026-02-01.at.16.35.mp4
Change 1: Console completion avoids full-buffer reads (
kbn-monacoConsole language)What changed
model.getValue()to computetextBeforeCursor.POST /_query(orPOST _query/async) request._queryrequest, the provider reads only the relevant slice viamodel.getValueInRange()(from the request line to the cursor).Why
model.getValue()materializes the entire document string, which becomes prohibitively expensive after users paste very large payloads; doing that on completion triggers (often on every keystroke) is enough to stall the UI._queryrequests; scoping the work avoids paying the cost for non-ES|QL traffic.Why this approach
Change 2: ES|QL quote/query detection is linear-time (
checkForTripleQuotesAndEsqlQuery)What changed
checkForTripleQuotesAndEsqlQuerywas rewritten to scan the text once and avoid repeated substring+regex work inside the main loop.Why
Why this approach
Change 3: Monaco
onChangeno longer callseditor.getValue()per keystroke (shared-uxReact Monaco editor)What changed
onDidChangeModelContenthandler computes the next value by applyingevent.changesto a shadow string (lastKnownValueRef) instead of callingeditor.getValue().useLayoutEffect) first compares the incomingvalueagainst the shadow value to avoid unnecessary full-buffer reads.Why
editor.getValue()materializes the full buffer; doing it on every keystroke creates a hard O(N) cost per change, which is visible (and can be catastrophic) for large models.Why this approach
IModelContentChangedEvent.changes). Applying those deltas is the cheapest way to keep React state in sync without forcing full-buffer reads.Tests (what they cover and why)
language.test.ts: exercises the completion provider branching/delegation so we don’t regress behavior while tightening when/what we read from the model.autocomplete_utils.test.ts: focused behavioral coverage for ES|QL context detection edge cases (the perf-worker regression test was removed to keep the suite deterministic and low-maintenance).editor.test.tsx: verifies the incrementalonChangevalue computation (including multi-change ordering) and controlled sync behavior.Test plan
node scripts/jest.js src/platform/packages/shared/kbn-monaco/src/languages/console/language.test.ts src/platform/packages/shared/kbn-monaco/src/languages/console/utils/autocomplete_utils.test.ts --config src/platform/packages/shared/kbn-monaco/jest.config.jsnode scripts/jest.js src/platform/packages/shared/shared-ux/code_editor/impl/react_monaco_editor/editor.test.tsx --config src/platform/packages/shared/shared-ux/code_editor/impl/jest.config.jsManual UI verification (DevTools Console)
DevTools -> Console.""" ... """block and type to ensure autocomplete remains responsive.Assisted by Cursor CLI using GPT-5.2-High model