log10x-mcp 1.30.38 → 1.30.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -91,7 +91,7 @@ All optional. The common path is just `LOG10X_API_KEY` (or no key at all).
91
91
  | `LOG10X_TENX_PATH` | Path to the local `tenx` binary (used when the resolved mode is `local`). Defaults to `tenx` on PATH. |
92
92
  | `LOG10X_RUNTIME_IMAGE` | Engine image for the run path in docker mode (default `log10x/pipeline-10x:latest`). Accepts the alias `native`, which selects the GraalVM-native `log10x/edge-10x`. |
93
93
  | `LOG10X_TENX_IMAGE` | Engine image shared by the run path and, as a fallback, `log10x_compile`. A runtime-flavor image here is refused on the compile path. |
94
- | `LOG10X_COMPILER_IMAGE` | Compiler image for `log10x_compile` / `log10x_compile_link` (default `log10x/compiler-10x:1.1.133` pinned by digest, so every run goes through the same compiler; set it to `:latest` to track releases; falls back to `LOG10X_TENX_IMAGE` when unset). Only the compiler flavor can build a symbol library. |
94
+ | `LOG10X_COMPILER_IMAGE` | Compiler image for `log10x_compile` / `log10x_compile_link` (default `log10x/compiler-10x:1.1.136` pinned by digest, so every run goes through the same compiler; set it to `:latest` to track releases; falls back to `LOG10X_TENX_IMAGE` when unset). Only the compiler flavor can build a symbol library. |
95
95
  | `LOG10X_GH_REPO` / `LOG10X_GITOPS_REPO_PATH` | GitHub repo and local path for GitOps-aware config tools. |
96
96
 
97
97
  ## Connect your own data (optional)
package/build/index.js CHANGED
@@ -1318,7 +1318,7 @@ async function handleCliFlags() {
1318
1318
  ' LOG10X_TENX_PATH Path to local tenx CLI (used when LOG10X_TENX_MODE=local). Compile and link need the `compiler` flavor; the `mode` arg of log10x_compile states the three flavors and which are refused',
1319
1319
  ' LOG10X_TENX_IMAGE Docker image when LOG10X_TENX_MODE=docker, SHARED by the run path and (as a fallback) log10x_compile (default: log10x/pipeline-10x:latest). A runtime-flavor image here is refused on the compile path — use LOG10X_RUNTIME_IMAGE instead',
1320
1320
  ' LOG10X_RUNTIME_IMAGE Docker image for the run-path engine tools only, leaving log10x_compile alone. Accepts a full ref or the alias `native`, which selects the GraalVM-native log10x/edge-10x:latest (391MB vs 926MB, same @apps/mcp output). Wins over LOG10X_TENX_IMAGE',
1321
- ' LOG10X_COMPILER_IMAGE Docker image for log10x_compile. Default log10x/compiler-10x:1.1.133 pinned by digest, so every run goes through the same compiler (the image ref is part of the output-folder key); set it to :latest to track releases. Falls back to LOG10X_TENX_IMAGE',
1321
+ ' LOG10X_COMPILER_IMAGE Docker image for log10x_compile. Default log10x/compiler-10x:1.1.136 pinned by digest, so every run goes through the same compiler (the image ref is part of the output-folder key); set it to :latest to track releases. Falls back to LOG10X_TENX_IMAGE',
1322
1322
  ' TENX_LICENSE_KEY License key passed through to the compiler app (log10x_compile); omit to use the image built-in limited license',
1323
1323
  ' GH_TOKEN GitHub token for log10x_compile github_repos pull (or pass the github_token arg; required even for public repos)',
1324
1324
  ' DOCKER_USERNAME Registry username for log10x_compile docker_images pull (or pass the docker_username arg; omit for public images)',
@@ -303,7 +303,7 @@ export declare class HelmRepoAddError extends Error {
303
303
  *
304
304
  * `LOG10X_COMPILER_IMAGE=log10x/compiler-10x:latest` restores the moving tag.
305
305
  */
306
- export declare const DEFAULT_IMAGE = "log10x/compiler-10x:1.1.133@sha256:b60e06945fedde01bafd60200b59f3bc0623c57e70d1b57edaa0f33fabc1332f";
306
+ export declare const DEFAULT_IMAGE = "log10x/compiler-10x:1.1.136@sha256:ffcd9890935804b06fcb1791994dfbb32cdb270f3e35fc423ede78ced2097b1f";
307
307
  /** First engine release where a CLI option given after `@apps/compiler` overrides the app's value. */
308
308
  export declare const CLI_OVERRIDE_MIN_ENGINE = "1.1.89";
309
309
  /**
@@ -205,7 +205,7 @@ export class HelmRepoAddError extends Error {
205
205
  *
206
206
  * `LOG10X_COMPILER_IMAGE=log10x/compiler-10x:latest` restores the moving tag.
207
207
  */
208
- export const DEFAULT_IMAGE = 'log10x/compiler-10x:1.1.133@sha256:b60e06945fedde01bafd60200b59f3bc0623c57e70d1b57edaa0f33fabc1332f';
208
+ export const DEFAULT_IMAGE = 'log10x/compiler-10x:1.1.136@sha256:ffcd9890935804b06fcb1791994dfbb32cdb270f3e35fc423ede78ced2097b1f';
209
209
  /** First engine release where a CLI option given after `@apps/compiler` overrides the app's value. */
210
210
  export const CLI_OVERRIDE_MIN_ENGINE = '1.1.89';
211
211
  /**
@@ -74,7 +74,7 @@ export declare const NATIVE_RUNTIME_IMAGE = "log10x/edge-10x:latest";
74
74
  * pass-through fix (config #74) ships in this image, checked with a Fluent
75
75
  * Bit sidecar: 0 fullText fallbacks, 2,000 of 2,000 lines.
76
76
  */
77
- export declare const EDGE_MANIFEST_IMAGE = "log10x/edge-10x:1.1.133";
77
+ export declare const EDGE_MANIFEST_IMAGE = "log10x/edge-10x:1.1.136";
78
78
  /**
79
79
  * Resolve the image the run-path (`@apps/mcp`) docker backend should use.
80
80
  *
@@ -74,7 +74,7 @@ export const NATIVE_RUNTIME_IMAGE = 'log10x/edge-10x:latest';
74
74
  * pass-through fix (config #74) ships in this image, checked with a Fluent
75
75
  * Bit sidecar: 0 fullText fallbacks, 2,000 of 2,000 lines.
76
76
  */
77
- export const EDGE_MANIFEST_IMAGE = 'log10x/edge-10x:1.1.133';
77
+ export const EDGE_MANIFEST_IMAGE = 'log10x/edge-10x:1.1.136';
78
78
  /** Aliases accepted by LOG10X_RUNTIME_IMAGE in place of a full image ref. */
79
79
  const NATIVE_ALIASES = new Set(['native', 'runtime', 'edge']);
80
80
  /**
@@ -56,7 +56,7 @@ and mutes or per-pattern sample and compact rows keyed on an old name or hash no
56
56
  When new patterns cluster at an engine upgrade, tell the user they are the same statements under new
57
57
  names and offer to re-derive the per-pattern rules from the new names.
58
58
 
59
- VOCABULARY: the compact action minifies events: it replaces each event's repeated structure with a template-plus-values encoding so it lands smaller with every field in the encoding, and the destination's expander rebuilds it at read time. Never call it lossless or fully searchable without the destination's terms: on Splunk each event expands exactly up to 256 KB with the current 10x app (a longer one comes back cut) and a search-bar query needs the app's tenxsearch command to see the full text; on Elasticsearch match, match_phrase and multi_match queries (so Kibana and KQL) see the full text and other query types see the encoded form. When describing it, say "compact" or "minify", never "compress" or "compression": 10x does not do binary or gzip compression, and that word misleads. (Vendor billing terms are different and fine to use as-is, e.g. a destination that bills on "compressed ingest", or Datadog's "compressed GB" rehydration price, refer to the vendor's own compression, not ours.)
59
+ VOCABULARY: the compact action minifies events: it replaces each event's repeated structure with a template-plus-values encoding so it lands smaller with every field in the encoding, and the destination's expander rebuilds it at read time. Never call it lossless or fully searchable without the destination's terms: on Splunk each event expands exactly up to 256 KB with the current 10x app (a longer one comes back cut) and a search-bar query needs the app's tenxsearch command to see the full text; on Elasticsearch match, match_phrase and multi_match queries (so Kibana and KQL) see the full text and other query types see the encoded form. Timestamps keep their instant: one written in UTC (Z, +0000) or with no zone comes back exactly, and one with any other offset or zone name (-0700, PDT, GMT) can come back written in another zone. When describing it, say "compact" or "minify", never "compress" or "compression": 10x does not do binary or gzip compression, and that word misleads. (Vendor billing terms are different and fine to use as-is, e.g. a destination that bills on "compressed ingest", or Datadog's "compressed GB" rehydration price, refer to the vendor's own compression, not ours.)
60
60
 
61
61
  NON-LOSSY FIRST: the value proposition is cutting cost WITHOUT losing data. Whenever you list the Receiver actions, LEAD with the keep-everything levers and present the lossy ones as opt-ins the user explicitly chooses. Order: (1) compact/minify, keeps everything, where the destination supports it (Splunk, self-hosted Elasticsearch/OpenSearch; a no-op on managed backends like Datadog, CloudWatch, Coralogix, and on ClickHouse, where measurement put it at about 7% of table bytes. ClickHouse: offload is the lever, the bill is compute, and every ClickHouse dollar this server prints is modeled); (2) tier_down, keeps everything, a cheaper tier in the same destination, still queryable, where it applies (Datadog Flex, CloudWatch IA, Azure Monitor Basic/Auxiliary Logs, Coralogix Monitoring); (3) offload, keeps everything, routes to the customer's own S3, recoverable on demand, the one lever that applies on every destination; then (4) sample, lossy, keep 1 in N; (5) drop, lossy, discard. NEVER lead with drop or sample. When you enumerate the actions to a prospect, say which keep everything and which are lossy opt-ins. Do not offer compact as a saving on a destination where it is a no-op; lead with that destination's cheaper tier where it has one (on Datadog that is Flex, because the moved events stay searchable in Datadog), and with offload where it has none.
62
62
 
@@ -14,7 +14,7 @@ Reduce storage costs by forwarding [compact](https://doc.log10x.com/run/transfor
14
14
 
15
15
  <h3 id="analytics-costs"><span class="twemoji" ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11 21H7v-2h4v2m4.5-2H17v2h-4v-2h.2l-1.4-6.1-2.5.6c-.1.5-.3.9-.5 1.3-.9 1.5-2.8 1.9-4.3 1-1.5-.9-1.9-2.8-1-4.3.9-1.5 2.8-1.9 4.3-1 .4.2.7.6.9.9l2.5-.6-.6-2.5c-.4-.1-.8-.3-1.2-.5C8 6.9 7.5 5 8.4 3.5c.9-1.5 2.8-1.9 4.3-1 1.5.9 1.9 2.8 1 4.3-.2.4-.6.7-.9.9L15.5 19M7 11.8c-.7-.5-1.7-.2-2.2.5-.5.7-.2 1.7.5 2.1.7.5 1.7.3 2.2-.5.4-.7.2-1.7-.5-2.1M12.4 6c.5-.7.2-1.7-.5-2.2-.7-.5-1.7-.2-2.2.5-.4.7-.2 1.7.6 2.2.7.4 1.7.2 2.1-.5m.4 5.3c-.2-.1-.4-.1-.5.1-.1.2-.1.4.1.5.2.1.4.1.5-.1.2-.2.1-.4-.1-.5M21 8.5 14.5 10l.5 2.2 7.5-1.8.5-.7-2-1.2M23 19h-4v2h4v-2M5 19H1v2h4v-2Z"></path></svg></span> Cut Log Analytics Costs</h3>
16
16
 
17
- Reduce ingestion and licensing costs, where the destination supports it, by forwarding [compact](https://doc.log10x.com/run/transform/#compact) events to Splunk or self-hosted Elasticsearch/OpenSearch. The open-source [Log10x App](splunk.md) and [L1ES Elasticsearch plugin](elasticsearch.md) expand events in real-time, maintaining full querying, dashboard, and alerting capabilities; compact is lossless, so expanded events match the originals (on Splunk, up to 256 KB per event).
17
+ Reduce ingestion and licensing costs, where the destination supports it, by forwarding [compact](https://doc.log10x.com/run/transform/#compact) events to Splunk or self-hosted Elasticsearch/OpenSearch. The open-source [Log10x App](splunk.md) and [L1ES Elasticsearch plugin](elasticsearch.md) expand events in real-time, maintaining full querying, dashboard, and alerting capabilities; compact is lossless, so expanded events match the originals (on Splunk, up to 256 KB per event). A timestamp that carries an offset or zone name other than UTC (`-0700`, `PDT`) keeps its instant but can come back written in another zone; see [Compact](https://doc.log10x.com/run/transform/#compact).
18
18
 
19
19
  ## :material-cog-transfer-outline: Workflow
20
20
 
@@ -6405,7 +6405,7 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
6405
6405
  </div>
6406
6406
  </dialog>
6407
6407
 
6408
- <template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAic3ltYm9sIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJzZXF1ZW5jZVJlc2VydmVkIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHRlcm1zIHRvIGlnbm9yZSB3aGVuIHNjYW5uaW5nIHN5bWJvbCB0b2tlbnNcblxuRGVmaW5lcyBhIGxpc3Qgb2YgdGVybXMgdGhhdCB0byBpZ25vcmUgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBzeW1ib2wgdG9rZW5zIGNvbnN0aXR1dGluZyBhbiBUZW5YVGVtcGxhdGUncyAnbWVzc2FnZScgcG9ydGlvbiAoaS5lLiwgdGhlIFtzeW1ib2xdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zdHJ1Y3R1cmUvI3N5bWJvbHMpIHRva2VucyBvZiB0aGUgb3JpZ2luIHJhbmtlZCBoaWdoZXN0IGJ5IGNvdmVyYWdlLCBtZWFuaW5nIHRoZSBjb3VudCBvZiBkaXN0aW5jdCBsaWJyYXJ5LWtub3duIHRva2VucyBpdCBleHBsYWluczsgc3BhbiBsZW5ndGggaXMgdGhlIGxhc3QgdGllYnJlYWspLiBGb3IgZXhhbXBsZSwgZm9yIGFuIFRlblhPYmplY3Qgd2hvc2UgdGV4dCBjb250YWluczogJ2Nvbm5lY3Qgc3VjY2VzcyA9IHRydWUnLCB0aGUgdmFsdWUgJ3RydWUnIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBwYXJ0IG9mIHRoZSBpbnN0YW5jZSdzIG1lc3NhZ2UsIGFzIGl0IGlzIG1vc3RseSBsaWtlbHkgdGhlIHJlc3VsdCBvZiBhIHZhcmlhYmxlIGJvb2xlYW4gc3RhdGUuIFRvIGxlYXJuIG1vcmUgc2VlIFtzeW1ib2xTZXF1ZW5jZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhPYmplY3Qrc3ltYm9sU2VxdWVuY2UpLiAoRGVmYXVsdDogW1wibnVsbFwiLFwibmlsXCIsXCJ0cnVlXCIsXCJmYWxzZVwiXSkiLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICJudWxsIiwKICAgICAgICAgICAgIm5pbCIsCiAgICAgICAgICAgICJ0cnVlIiwKICAgICAgICAgICAgImZhbHNlIgogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgInByZWFtYmxlIiA6IHsKICAgICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgICAiZW5jbG9zdXJlcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGFpcnMgb2Ygb3BlbiBhbmQgY2xvc2UgY2hhcmFjdGVycyB3aG9zZSB0ZXh0IGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBlbnZlbG9wZVxuXG5EZWZpbmVzIHRoZSBlbmNsb3N1cmVzIG9mIGEgbGluZSdzIHByZWFtYmxlLCBlYWNoIGFuIG9wZW4gYW5kIGEgY2xvc2UgY2hhcmFjdGVyLiBBIHdvcmQgaW5zaWRlIG9uZSBvZiB0aGVtIGJlZm9yZSB0aGUgbWVzc2FnZSAoZS5nLiwgJ21haW4nIGluICdbbWFpbl0gU3RhcnRpbmcgd29ya2VyJykgaXMgZW52ZWxvcGUgYW5kIHN0YXlzIG91dCBvZiB0aGUgVGVuWFRlbXBsYXRlJ3MgbWVzc2FnZSBuYW1lLiBUaGUgbWVzc2FnZSBzdGFydHMgYXQgdGhlIGZpcnN0IHdvcmQgdGhhdCBubyBwYXJ0IG9mIHRoZSBwcmVhbWJsZSBkZXNjcmliZXM6IG5vdCBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpLCBub3QgYSBbbWVzc2FnZSBrZXldKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHByZWFtYmxlbWVzc2FnZWtleXMpLCBub3QgZW5jbG9zZWQgYW5kIG5vdCBhIHJlc2VydmVkIGtleSBvciBpdHMgdmFsdWUuIChEZWZhdWx0OiBbXCJbXVwiLFwiKClcIl0pIiwKICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJkZWZhdWx0IiA6IFsKICAgICAgICAgICAgICAgICJbXSIsCiAgICAgICAgICAgICAgICAiKCkiCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYmluZCBhIGtleSB0byBpdHMgdmFsdWUgd2hlbiB0aGUga2V5IG9yIHRoZSB2YWx1ZSBpcyBxdW90ZWRcblxuRGVmaW5lcyB0aGUgY2hhcmFjdGVycyB0aGF0IGJpbmQgYSBrZXkgdG8gaXRzIHZhbHVlLCBvbmUgY2hhcmFjdGVyIGVhY2gsIHdoZW4gdGhlIGtleSBvciB0aGUgdmFsdWUgaXMgcXVvdGVkIChlLmcuLCAnXCJsZXZlbFwiOlwiaW5mb1wiJywgXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gQSBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpIGtleSBhbmQgaXRzIHZhbHVlIGFyZSBlbnZlbG9wZTsgdGhlIG1lc3NhZ2Ugc3RhcnRzIGluc2lkZSBhIFttZXNzYWdlIGtleV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9scHJlYW1ibGVtZXNzYWdla2V5cykncyB2YWx1ZS4gVW5xdW90ZWQsIGEgY29sb24gYmluZHMgbm90aGluZywgc28gJ0Vycm9yOiAxMyBJTlRFUk5BTCcgYW5kICdJTkZPOnJvb3Q6U3RhcnRpbmcnIGtlZXAgdGhlaXIgd29yZHMuIChEZWZhdWx0OiBbXCI9XCIsXCI6XCJdKSIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICAgICAiPSIsCiAgICAgICAgICAgICAgICAiOiIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJiYXJlQXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYWxzbyBiaW5kIGFuIHVucXVvdGVkIGtleSB0byBhbiB1bnF1b3RlZCB2YWx1ZVxuXG5EZWZpbmVzIHRoZSBhc3NpZ25lcnMgdGhhdCBiaW5kIGEga2V5IHdpdGhvdXQgcXVvdGVzLCBvbmUgY2hhcmFjdGVyIGVhY2gsIGFzIGxvZ2ZtdCB3cml0ZXMgdGhlbSAoZS5nLiwgJ2xldmVsPWluZm8nLCAnbG9nZ2VyPWNsZWFudXAnKS4gQW4gYXNzaWduZXIgbGlzdGVkIGhlcmUgYmluZHMgaW4gcmVjb3JkIGZvcm0gdG9vLiAoRGVmYXVsdDogW1wiPVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIj0iCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiam9pbmVycyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU2VwYXJhdG9ycyB0aGF0IGNoYWluIHdvcmRzIGludG8gb25lIG5hbWUsIHJlYWQgdG8gZmluZCBhIGdyb3VwJ3MgbGVhZFxuXG5EZWZpbmVzIHRoZSBzZXBhcmF0b3JzIHRoYXQgY2hhaW4gdHdvIG9yIG1vcmUgd29yZHMsIHdyaXR0ZW4gd2l0aG91dCB3aGl0ZXNwYWNlLCBpbnRvIG9uZSBuYW1lIChlLmcuLCAnb3JnLmFwYWNoZS5rYWZrYS5sb2cuTG9jYWxMb2cnLCAnY2FydC5jYXJ0c3RvcmUuVmFsa2V5Q2FydFN0b3JlJyksIHR5cGljYWxseSBhIGxvZ2dlciwgY2xhc3Mgb3IgZmlsZSBuYW1lLiBUaGV5IGRlY2lkZSBvbmx5IHdoaWNoIG1lbWJlciBvZiBhIG11bHRpLWxpbmUgZXZlbnQgbmFtZXMgaXQ6IGEgbWVtYmVyIHdob3NlIGV2ZXJ5IHdvcmQgaXMgc3VjaCBhIG5hbWUgb3Igb3RoZXIgZW52ZWxvcGUgZG9lcyBub3QgbGVhZCB0aGUgZ3JvdXAgKHNlZSBbc3ltYm9sR3JvdXBMZWFkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xncm91cGxlYWQpKS4gSW4gYSBtZXNzYWdlIG5hbWUgYSBqb2luZWQgbmFtZSBzdGF5cywgYXMgYSBsb2dnZXIgb3IgY2xhc3MgbmFtZSBpcyBvZnRlbiB0aGUgb25seSB0ZXh0IHRoYXQgdGVsbHMgdHdvIHN0YXRlbWVudHMgYXBhcnQuIChEZWZhdWx0OiBbXCIuXCIsXCI6OlwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIi4iLAogICAgICAgICAgICAgICAgIjo6IgogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm1lc3NhZ2VLZXlzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJLZXlzIHdob3NlIGJvdW5kIHZhbHVlIGhvbGRzIHRoZSBtZXNzYWdlXG5cbkRlZmluZXMgdGhlIGtleXMgd2hvc2UgdmFsdWUgaG9sZHMgdGhlIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHN0YXJ0cyBhdCB0aGUgdmFsdWUncyBmaXJzdCB3b3JkIHRoZSBwcmVhbWJsZSBkb2VzIG5vdCBkZXNjcmliZSAoZS5nLiwgJ3N0YXJ0aW5nJyBpbiAnbXNnPXN0YXJ0aW5nJywgJ1N1YmNoYW5uZWwnIGluICdcIm1zZ1wiOlwiW2NvcmVdW0NoYW5uZWwgIzFdIFN1YmNoYW5uZWwgY3JlYXRlZFwiJywgJ0NoYXJnZScgaW4gXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gSW4gYSByZWNvcmQgdGhhdCBvcGVucyB3aXRoICd7JywgcmVhZGluZyBzdGFydHMgYXQgdGhlIGZpcnN0IG1lc3NhZ2Uga2V5IHdpdGggYSB2YWx1ZS4gQSBtZXNzYWdlIGtleSB3aXRob3V0IGEgdmFsdWUgaXMgZW52ZWxvcGUsIGFzIGEgcmVzZXJ2ZWQgd29yZCBpcy4gKERlZmF1bHQ6IFtcIm1zZ1wiLFwibWVzc2FnZVwiLFwiYm9keVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIm1zZyIsCiAgICAgICAgICAgICAgICAibWVzc2FnZSIsCiAgICAgICAgICAgICAgICAiYm9keSIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJncm91cExlYWQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1lbWJlciBvZiBhIG11bHRpLWxpbmUgZ3JvdXAgd2hvc2UgdGV4dCBuYW1lcyB0aGUgZ3JvdXBcblxuU2VsZWN0cyB0aGUgbWVtYmVyIG9mIGEgbXVsdGktbGluZSBldmVudCBncm91cCB3aG9zZSB0ZXh0IG5hbWVzIGl0LiAnZmlyc3RXaXRoTWVzc2FnZScgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBmaXJzdCBtZW1iZXIgd2hvc2UgaW5wdXQgZmllbGQgaXMgbm90IGFsbCBlbnZlbG9wZSwgYSBuYW1lIG9mIHdvcmRzIGNoYWluZWQgYnkgYSBbam9pbmVyXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xwcmVhbWJsZWpvaW5lcnMpIGNvdW50aW5nIGFzIGVudmVsb3BlIGhlcmUsIHNvIGEgaGVhZCBzdWNoIGFzIHRoZSAuTkVUIGNvbnNvbGUgbG9nZ2VyJ3MgJ2luZm86IGNhcnQuY2FydHN0b3JlLlZhbGtleUNhcnRTdG9yZVswXScgYmVmb3JlIHRoZSByZWNvcmQgaG9sZGluZyB0aGUgbWVzc2FnZSBsZWF2ZXMgdGhlIG5hbWUsIG9yaWdpbiBhbmQgc2tlbGV0b24gdG8gdGhhdCByZWNvcmQuIEEgaGVhZCB0aGF0IGhvbGRzIGEgbWVzc2FnZSAoZS5nLiwgYSBzdGFjayB0cmFjZSdzIGV4Y2VwdGlvbiBsaW5lKSBuYW1lcyB0aGUgZ3JvdXAuICdoZWFkJyBhbHdheXMgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBoZWFkLiAoRGVmYXVsdDogZmlyc3RXaXRoTWVzc2FnZSkiLAogICAgICAgICAgImRlZmF1bHQiIDogImZpcnN0V2l0aE1lc3NhZ2UiCiAgICAgICAgfSwKICAgICAgICAibWF4T3JpZ2lucyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heCBudW1iZXIgb2Ygc291cmNlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbFxuXG5Db250cm9scyB0aGUgbnVtYmVyIG9mIHNvdXJjZSBjb2RlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbCB0b2tlbiBzZXF1ZW5jZS4gQXMgYSBzZXJpZXMgb2YgdG9rZW5zIHdpdGhpbiAgYSBnaXZlbiB0ZW1wbGF0ZSAoZS5nLiwgJ0VSUk9SJywgJ2NvdWxkIG5vdCBjb25uZWN0IHRvIFwie30nKSBtYXkgYXBwZWFyICBpbiBtdWx0aXBsZSBzb3VyY2UvYmluYXJ5IGZpbGVzIHdpdGhpbiB0aGUgcGlwZWxpbmUncyBzeW1ib2wgZmlsZXMsIHRoZSBzb3J0aW5nIGFsZ29yaXRobSBzZWxlY3RzIFttYXhTeW1ib2xPcmlnaW5zXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xtYXhvcmlnaW5zKSBmb3IgY29tcGFyaXNvbi4gKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogNjQpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IDY0CiAgICAgICAgfSwKICAgICAgICAiZGVidWciIDogewogICAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICJvcmlnaW5zIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHNvdXJjZSBzY2FubmVkIGZpbGUgbmFtZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgd2l0aGluIHRoZSBsb2FkZWQgc3ltYm9sIGxpYnJhcnkgKGUuZy4sICdteS5zY2FsYScsICdmb28uamF2YScpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaWYvaG93IHRoZXkgcGFydGljaXBhdGUgaW4gc2VsZWN0aW5nIHRoZSBvcmlnaW4gb2YgYSB0YXJnZXQgVGVuWFRlbXBsYXRlIHN5bWJvbCBzZXF1ZW5jZS4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBpbnB1dCBmaWxlcy4iLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN5bWJvbHMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgVGVuWFRlbXBsYXRlIHN5bWJvbCB2YWx1ZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5MaXN0IG9mIHN5bWJvbCB2YWx1ZXMgc3VjaCBhcyBjbGFzcyBhbmQgbWV0aG9kIG5hbWVzKGUuZy4sICdNeUNsYXNzJywgJ2ZvbycpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaG93IHRoZWlyIG9yaWdpbiBpbmZvcm1hdGlvbiBpcyBzZWxlY3RlZC4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBzeW1ib2xzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibG9nZ2VyTmFtZSIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEZWJ1ZyBsb2dnZXIgbmFtZVxuXG5Db250cm9scyB0aGUgbmFtZSBvZiB0aGUgbG9nNGogbG9nZ2VyIHVzZWQgYnkgW2RlYnVnT3JpZ2luc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdvcmlnaW5zKSBhbmQgW2RlYnVnU3ltYm9sc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdzeW1ib2xzKS4gKERlZmF1bHQ6IFtjb25zb2xlT3V0XShodHRwczovL2dpdGh1Yi5jb20vbG9nLTEweC9jb25maWcvYmxvYi9tYWluL2xvZzRqMi55YW1sI0w2NikpIiwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiAiW2NvbnNvbGVPdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L2NvbmZpZy9ibG9iL21haW4vbG9nNGoyLnlhbWwjTDY2KSIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=</template>
6408
+ <template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAic3ltYm9sIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJzZXF1ZW5jZVJlc2VydmVkIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHRlcm1zIHRvIGlnbm9yZSB3aGVuIHNjYW5uaW5nIHN5bWJvbCB0b2tlbnNcblxuRGVmaW5lcyBhIGxpc3Qgb2YgdGVybXMgdGhhdCB0byBpZ25vcmUgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBzeW1ib2wgdG9rZW5zIGNvbnN0aXR1dGluZyBhbiBUZW5YVGVtcGxhdGUncyAnbWVzc2FnZScgcG9ydGlvbiAoaS5lLiwgdGhlIFtzeW1ib2xdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zdHJ1Y3R1cmUvI3N5bWJvbHMpIHRva2VucyBvZiB0aGUgb3JpZ2luIHJhbmtlZCBoaWdoZXN0IGJ5IGNvdmVyYWdlLCBtZWFuaW5nIHRoZSBjb3VudCBvZiBkaXN0aW5jdCBsaWJyYXJ5LWtub3duIHRva2VucyBpdCBleHBsYWluczsgc3BhbiBsZW5ndGggaXMgdGhlIGxhc3QgdGllYnJlYWspLiBGb3IgZXhhbXBsZSwgZm9yIGFuIFRlblhPYmplY3Qgd2hvc2UgdGV4dCBjb250YWluczogJ2Nvbm5lY3Qgc3VjY2VzcyA9IHRydWUnLCB0aGUgdmFsdWUgJ3RydWUnIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBwYXJ0IG9mIHRoZSBpbnN0YW5jZSdzIG1lc3NhZ2UsIGFzIGl0IGlzIG1vc3RseSBsaWtlbHkgdGhlIHJlc3VsdCBvZiBhIHZhcmlhYmxlIGJvb2xlYW4gc3RhdGUuIFRvIGxlYXJuIG1vcmUgc2VlIFtzeW1ib2xTZXF1ZW5jZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhPYmplY3Qrc3ltYm9sU2VxdWVuY2UpLiAoRGVmYXVsdDogW1wibnVsbFwiLFwibmlsXCIsXCJ0cnVlXCIsXCJmYWxzZVwiXSkiLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICJudWxsIiwKICAgICAgICAgICAgIm5pbCIsCiAgICAgICAgICAgICJ0cnVlIiwKICAgICAgICAgICAgImZhbHNlIgogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgInByZWFtYmxlIiA6IHsKICAgICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgICAiZW5jbG9zdXJlcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGFpcnMgb2Ygb3BlbiBhbmQgY2xvc2UgY2hhcmFjdGVycyB3aG9zZSB0ZXh0IGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBlbnZlbG9wZVxuXG5EZWZpbmVzIHRoZSBlbmNsb3N1cmVzIG9mIGEgbGluZSdzIHByZWFtYmxlLCBlYWNoIGFuIG9wZW4gYW5kIGEgY2xvc2UgY2hhcmFjdGVyLiBBIHdvcmQgaW5zaWRlIG9uZSBvZiB0aGVtIGJlZm9yZSB0aGUgbWVzc2FnZSAoZS5nLiwgJ21haW4nIGluICdbbWFpbl0gU3RhcnRpbmcgd29ya2VyJykgaXMgZW52ZWxvcGUgYW5kIHN0YXlzIG91dCBvZiB0aGUgVGVuWFRlbXBsYXRlJ3MgbWVzc2FnZSBuYW1lLiBBbiBvcGVuIHdpdGggbm8gY2xvc2UgYWZ0ZXIgaXQgaW4gdGhlIHNhbWUgZmllbGQgZW5jbG9zZXMgbm90aGluZywgc3VjaCBhcyB0aGUgJ1snIG9mIGEgY29sb3IgY29kZSAoJ1xcMDMzWzA7MzNtV0FSTicpIG9yIG9uZSB0aGF0IGNsb3NlcyBvbiBhIGxhdGVyIGxpbmUgb2YgYSBtdWx0aS1saW5lIGV2ZW50LiBUaGUgbWVzc2FnZSBzdGFydHMgYXQgdGhlIGZpcnN0IHdvcmQgdGhhdCBubyBwYXJ0IG9mIHRoZSBwcmVhbWJsZSBkZXNjcmliZXM6IG5vdCBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpLCBub3QgYSBbbWVzc2FnZSBrZXldKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHByZWFtYmxlbWVzc2FnZWtleXMpLCBub3QgZW5jbG9zZWQgYW5kIG5vdCBhIHJlc2VydmVkIGtleSBvciBpdHMgdmFsdWUuIChEZWZhdWx0OiBbXCJbXVwiLFwiKClcIl0pIiwKICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJkZWZhdWx0IiA6IFsKICAgICAgICAgICAgICAgICJbXSIsCiAgICAgICAgICAgICAgICAiKCkiCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYmluZCBhIGtleSB0byBpdHMgdmFsdWUgd2hlbiB0aGUga2V5IG9yIHRoZSB2YWx1ZSBpcyBxdW90ZWRcblxuRGVmaW5lcyB0aGUgY2hhcmFjdGVycyB0aGF0IGJpbmQgYSBrZXkgdG8gaXRzIHZhbHVlLCBvbmUgY2hhcmFjdGVyIGVhY2gsIHdoZW4gdGhlIGtleSBvciB0aGUgdmFsdWUgaXMgcXVvdGVkIChlLmcuLCAnXCJsZXZlbFwiOlwiaW5mb1wiJywgXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gQSBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpIGtleSBhbmQgaXRzIHZhbHVlIGFyZSBlbnZlbG9wZTsgdGhlIG1lc3NhZ2Ugc3RhcnRzIGluc2lkZSBhIFttZXNzYWdlIGtleV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9scHJlYW1ibGVtZXNzYWdla2V5cykncyB2YWx1ZS4gVW5xdW90ZWQsIGEgY29sb24gYmluZHMgbm90aGluZywgc28gJ0Vycm9yOiAxMyBJTlRFUk5BTCcgYW5kICdJTkZPOnJvb3Q6U3RhcnRpbmcnIGtlZXAgdGhlaXIgd29yZHMuIChEZWZhdWx0OiBbXCI9XCIsXCI6XCJdKSIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICAgICAiPSIsCiAgICAgICAgICAgICAgICAiOiIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJiYXJlQXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYWxzbyBiaW5kIGFuIHVucXVvdGVkIGtleSB0byBhbiB1bnF1b3RlZCB2YWx1ZVxuXG5EZWZpbmVzIHRoZSBhc3NpZ25lcnMgdGhhdCBiaW5kIGEga2V5IHdpdGhvdXQgcXVvdGVzLCBvbmUgY2hhcmFjdGVyIGVhY2gsIGFzIGxvZ2ZtdCB3cml0ZXMgdGhlbSAoZS5nLiwgJ2xldmVsPWluZm8nLCAnbG9nZ2VyPWNsZWFudXAnKS4gQW4gYXNzaWduZXIgbGlzdGVkIGhlcmUgYmluZHMgaW4gcmVjb3JkIGZvcm0gdG9vLiAoRGVmYXVsdDogW1wiPVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIj0iCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiam9pbmVycyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU2VwYXJhdG9ycyB0aGF0IGNoYWluIHdvcmRzIGludG8gb25lIG5hbWUsIHJlYWQgdG8gZmluZCBhIGdyb3VwJ3MgbGVhZFxuXG5EZWZpbmVzIHRoZSBzZXBhcmF0b3JzIHRoYXQgY2hhaW4gdHdvIG9yIG1vcmUgd29yZHMsIHdyaXR0ZW4gd2l0aG91dCB3aGl0ZXNwYWNlLCBpbnRvIG9uZSBuYW1lIChlLmcuLCAnb3JnLmFwYWNoZS5rYWZrYS5sb2cuTG9jYWxMb2cnLCAnY2FydC5jYXJ0c3RvcmUuVmFsa2V5Q2FydFN0b3JlJyksIHR5cGljYWxseSBhIGxvZ2dlciwgY2xhc3Mgb3IgZmlsZSBuYW1lLiBUaGV5IGRlY2lkZSBvbmx5IHdoaWNoIG1lbWJlciBvZiBhIG11bHRpLWxpbmUgZXZlbnQgbmFtZXMgaXQ6IGEgbWVtYmVyIHdob3NlIGV2ZXJ5IHdvcmQgaXMgc3VjaCBhIG5hbWUgb3Igb3RoZXIgZW52ZWxvcGUgZG9lcyBub3QgbGVhZCB0aGUgZ3JvdXAgKHNlZSBbc3ltYm9sR3JvdXBMZWFkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xncm91cGxlYWQpKS4gSW4gYSBtZXNzYWdlIG5hbWUgYSBqb2luZWQgbmFtZSBzdGF5cywgYXMgYSBsb2dnZXIgb3IgY2xhc3MgbmFtZSBpcyBvZnRlbiB0aGUgb25seSB0ZXh0IHRoYXQgdGVsbHMgdHdvIHN0YXRlbWVudHMgYXBhcnQuIChEZWZhdWx0OiBbXCIuXCIsXCI6OlwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIi4iLAogICAgICAgICAgICAgICAgIjo6IgogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm1lc3NhZ2VLZXlzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJLZXlzIHdob3NlIGJvdW5kIHZhbHVlIGhvbGRzIHRoZSBtZXNzYWdlXG5cbkRlZmluZXMgdGhlIGtleXMgd2hvc2UgdmFsdWUgaG9sZHMgdGhlIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHN0YXJ0cyBhdCB0aGUgdmFsdWUncyBmaXJzdCB3b3JkIHRoZSBwcmVhbWJsZSBkb2VzIG5vdCBkZXNjcmliZSAoZS5nLiwgJ3N0YXJ0aW5nJyBpbiAnbXNnPXN0YXJ0aW5nJywgJ1N1YmNoYW5uZWwnIGluICdcIm1zZ1wiOlwiW2NvcmVdW0NoYW5uZWwgIzFdIFN1YmNoYW5uZWwgY3JlYXRlZFwiJywgJ0NoYXJnZScgaW4gXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gSW4gYSByZWNvcmQgdGhhdCBvcGVucyB3aXRoICd7JywgcmVhZGluZyBzdGFydHMgYXQgdGhlIGZpcnN0IG1lc3NhZ2Uga2V5IHdpdGggYSB2YWx1ZS4gQSBtZXNzYWdlIGtleSB3aXRob3V0IGEgdmFsdWUgaXMgZW52ZWxvcGUsIGFzIGEgcmVzZXJ2ZWQgd29yZCBpcy4gKERlZmF1bHQ6IFtcIm1zZ1wiLFwibWVzc2FnZVwiLFwiYm9keVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIm1zZyIsCiAgICAgICAgICAgICAgICAibWVzc2FnZSIsCiAgICAgICAgICAgICAgICAiYm9keSIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJncm91cExlYWQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1lbWJlciBvZiBhIG11bHRpLWxpbmUgZ3JvdXAgd2hvc2UgdGV4dCBuYW1lcyB0aGUgZ3JvdXBcblxuU2VsZWN0cyB0aGUgbWVtYmVyIG9mIGEgbXVsdGktbGluZSBldmVudCBncm91cCB3aG9zZSB0ZXh0IG5hbWVzIGl0LiAnZmlyc3RXaXRoTWVzc2FnZScgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBmaXJzdCBtZW1iZXIgd2hvc2UgaW5wdXQgZmllbGQgaXMgbm90IGFsbCBlbnZlbG9wZSwgYSBuYW1lIG9mIHdvcmRzIGNoYWluZWQgYnkgYSBbam9pbmVyXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xwcmVhbWJsZWpvaW5lcnMpIGNvdW50aW5nIGFzIGVudmVsb3BlIGhlcmUsIHNvIGEgaGVhZCBzdWNoIGFzIHRoZSAuTkVUIGNvbnNvbGUgbG9nZ2VyJ3MgJ2luZm86IGNhcnQuY2FydHN0b3JlLlZhbGtleUNhcnRTdG9yZVswXScgYmVmb3JlIHRoZSByZWNvcmQgaG9sZGluZyB0aGUgbWVzc2FnZSBsZWF2ZXMgdGhlIG5hbWUsIG9yaWdpbiBhbmQgc2tlbGV0b24gdG8gdGhhdCByZWNvcmQuIEEgaGVhZCB0aGF0IGhvbGRzIGEgbWVzc2FnZSAoZS5nLiwgYSBzdGFjayB0cmFjZSdzIGV4Y2VwdGlvbiBsaW5lKSBuYW1lcyB0aGUgZ3JvdXAuICdoZWFkJyBhbHdheXMgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBoZWFkLiAoRGVmYXVsdDogZmlyc3RXaXRoTWVzc2FnZSkiLAogICAgICAgICAgImRlZmF1bHQiIDogImZpcnN0V2l0aE1lc3NhZ2UiCiAgICAgICAgfSwKICAgICAgICAibWF4T3JpZ2lucyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heCBudW1iZXIgb2Ygc291cmNlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbFxuXG5Db250cm9scyB0aGUgbnVtYmVyIG9mIHNvdXJjZSBjb2RlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbCB0b2tlbiBzZXF1ZW5jZS4gQXMgYSBzZXJpZXMgb2YgdG9rZW5zIHdpdGhpbiAgYSBnaXZlbiB0ZW1wbGF0ZSAoZS5nLiwgJ0VSUk9SJywgJ2NvdWxkIG5vdCBjb25uZWN0IHRvIFwie30nKSBtYXkgYXBwZWFyICBpbiBtdWx0aXBsZSBzb3VyY2UvYmluYXJ5IGZpbGVzIHdpdGhpbiB0aGUgcGlwZWxpbmUncyBzeW1ib2wgZmlsZXMsIHRoZSBzb3J0aW5nIGFsZ29yaXRobSBzZWxlY3RzIFttYXhTeW1ib2xPcmlnaW5zXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xtYXhvcmlnaW5zKSBmb3IgY29tcGFyaXNvbi4gKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogNjQpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IDY0CiAgICAgICAgfSwKICAgICAgICAiZGVidWciIDogewogICAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICJvcmlnaW5zIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHNvdXJjZSBzY2FubmVkIGZpbGUgbmFtZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgd2l0aGluIHRoZSBsb2FkZWQgc3ltYm9sIGxpYnJhcnkgKGUuZy4sICdteS5zY2FsYScsICdmb28uamF2YScpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaWYvaG93IHRoZXkgcGFydGljaXBhdGUgaW4gc2VsZWN0aW5nIHRoZSBvcmlnaW4gb2YgYSB0YXJnZXQgVGVuWFRlbXBsYXRlIHN5bWJvbCBzZXF1ZW5jZS4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBpbnB1dCBmaWxlcy4iLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN5bWJvbHMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgVGVuWFRlbXBsYXRlIHN5bWJvbCB2YWx1ZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5MaXN0IG9mIHN5bWJvbCB2YWx1ZXMgc3VjaCBhcyBjbGFzcyBhbmQgbWV0aG9kIG5hbWVzKGUuZy4sICdNeUNsYXNzJywgJ2ZvbycpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaG93IHRoZWlyIG9yaWdpbiBpbmZvcm1hdGlvbiBpcyBzZWxlY3RlZC4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBzeW1ib2xzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibG9nZ2VyTmFtZSIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEZWJ1ZyBsb2dnZXIgbmFtZVxuXG5Db250cm9scyB0aGUgbmFtZSBvZiB0aGUgbG9nNGogbG9nZ2VyIHVzZWQgYnkgW2RlYnVnT3JpZ2luc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdvcmlnaW5zKSBhbmQgW2RlYnVnU3ltYm9sc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdzeW1ib2xzKS4gKERlZmF1bHQ6IFtjb25zb2xlT3V0XShodHRwczovL2dpdGh1Yi5jb20vbG9nLTEweC9jb25maWcvYmxvYi9tYWluL2xvZzRqMi55YW1sI0w2NikpIiwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiAiW2NvbnNvbGVPdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L2NvbmZpZy9ibG9iL21haW4vbG9nNGoyLnlhbWwjTDY2KSIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=</template>
6409
6409
 
6410
6410
  ```yaml
6411
6411
  # 🔟❎ 'run' symbol origin configuration
@@ -6481,13 +6481,8 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
6481
6481
  - FATAL
6482
6482
  - PANIC
6483
6483
  # severity levels, lowercase (engine matching is case-sensitive).
6484
- # Note. The token "error" is intentionally NOT reserved here.
6485
- # Verification against 3254 demo events (2026-05-20) found 1280
6486
- # signal hits where the "error" key carries the actual message
6487
- # body the pattern groups; reserving it would collapse distinct
6488
- # error patterns into one.
6489
- # Note. The token "emergency" is also intentionally NOT reserved
6490
- #, sample showed only prose hits, no envelope use observed.
6484
+ # 'error' and 'emergency' are not reserved: an 'error' key often
6485
+ # carries the message itself, and 'emergency' appears as prose.
6491
6486
  - "trace"
6492
6487
  - "debug"
6493
6488
  - "info"
@@ -6509,8 +6504,7 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
6509
6504
  - "timestamp"
6510
6505
  - "ts"
6511
6506
  # 'msg' and 'message' are message keys (see 'preamble.messageKeys')
6512
- # OpenTelemetry / collector envelope (these tokens leak from the
6513
- # otelcol's Go-package logging into pattern names)
6507
+ # OpenTelemetry / collector envelope
6514
6508
  - "otel"
6515
6509
  - "otelcol"
6516
6510
  - "opentelemetry"
@@ -6524,9 +6518,7 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
6524
6518
  - "exporters"
6525
6519
  - "pipeline"
6526
6520
  - "pipelines"
6527
- # structured / envelope keys (singular + plural, engine matcher
6528
- # is exact, no stem; both forms appear in real otel logs).
6529
- # Note: "trace" is already reserved above under lowercase severity.
6521
+ # structured / envelope keys, singular and plural (matching is exact)
6530
6522
  - "service"
6531
6523
  - "services"
6532
6524
  - "instance"
@@ -6549,9 +6541,7 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
6549
6541
  - "context"
6550
6542
  - "contexts"
6551
6543
  - "baggage"
6552
- # K8s audit / Kubernetes API envelope (verified zero signal in
6553
- # the 2026-05-20 sample, every occurrence was a JSON metadata
6554
- # key or audit field)
6544
+ # Kubernetes API / audit envelope
6555
6545
  - "metadata"
6556
6546
  - "namespace"
6557
6547
  - "verb"
@@ -6562,8 +6552,7 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
6562
6552
  - "encoding"
6563
6553
  - "headers"
6564
6554
  - "duration"
6565
- # HTTP / request envelope (verified safe, appear only as
6566
- # klog field markers or JSON keys, not as message content)
6555
+ # HTTP / request envelope
6567
6556
  - "path"
6568
6557
  - "status"
6569
6558
  # generic identity keys (very common envelope tokens in JSON logs)
@@ -6572,7 +6561,7 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
6572
6561
  - "kind"
6573
6562
  - "version"
6574
6563
  - "type"
6575
- # source-location envelope (Go / Java / Python loggers leak these)
6564
+ # source-location envelope (Go / Java / Python loggers print these)
6576
6565
  - "caller"
6577
6566
  - "func"
6578
6567
  - "function"
@@ -6584,15 +6573,9 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
6584
6573
  - "method"
6585
6574
  - "stack"
6586
6575
  - "stacktrace"
6587
- # process / runtime context.
6588
- # Note. The token "host" is intentionally NOT reserved, 1018 of
6589
- # 1024 occurrences in the verification corpus were the content
6590
- # phrase "no such host" inside DNS-failure messages; reserving
6591
- # it would collapse every "no such host" pattern into one.
6592
- # Note. The token "app" is intentionally NOT reserved, 42 of 44
6593
- # occurrences were the Flask logger-name discriminator in
6594
- # "INFO in app:" lines; reserving it would collapse Python-app
6595
- # logger structure.
6576
+ # process / runtime context. 'host' and 'app' are not reserved:
6577
+ # 'host' is message text in 'no such host', and 'app' is the Flask
6578
+ # logger name that tells one application's statements from another's.
6596
6579
  - "pid"
6597
6580
  - "tid"
6598
6581
  - "process"
@@ -6621,6 +6604,9 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
6621
6604
 
6622
6605
  # 'enclosures' lists open and close character pairs: text inside them
6623
6606
  # before the message is envelope (e.g., 'main' in '[main] Starting worker').
6607
+ # An open with no close after it in the same field encloses nothing, such
6608
+ # as the '[' of a color code ('\033[0;33mWARN') or one that closes on a
6609
+ # later line of a multi-line event.
6624
6610
  enclosures: ['[]', '()']
6625
6611
 
6626
6612
  # 'assigners' lists the characters that bind a key to its value when the
@@ -5349,7 +5349,7 @@ To configure advanced options (optional) for the Reporter app, [:material-cog: E
5349
5349
  </div>
5350
5350
  </dialog>
5351
5351
 
5352
- <template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAic3ltYm9sIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJzZXF1ZW5jZVJlc2VydmVkIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHRlcm1zIHRvIGlnbm9yZSB3aGVuIHNjYW5uaW5nIHN5bWJvbCB0b2tlbnNcblxuRGVmaW5lcyBhIGxpc3Qgb2YgdGVybXMgdGhhdCB0byBpZ25vcmUgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBzeW1ib2wgdG9rZW5zIGNvbnN0aXR1dGluZyBhbiBUZW5YVGVtcGxhdGUncyAnbWVzc2FnZScgcG9ydGlvbiAoaS5lLiwgdGhlIFtzeW1ib2xdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zdHJ1Y3R1cmUvI3N5bWJvbHMpIHRva2VucyBvZiB0aGUgb3JpZ2luIHJhbmtlZCBoaWdoZXN0IGJ5IGNvdmVyYWdlLCBtZWFuaW5nIHRoZSBjb3VudCBvZiBkaXN0aW5jdCBsaWJyYXJ5LWtub3duIHRva2VucyBpdCBleHBsYWluczsgc3BhbiBsZW5ndGggaXMgdGhlIGxhc3QgdGllYnJlYWspLiBGb3IgZXhhbXBsZSwgZm9yIGFuIFRlblhPYmplY3Qgd2hvc2UgdGV4dCBjb250YWluczogJ2Nvbm5lY3Qgc3VjY2VzcyA9IHRydWUnLCB0aGUgdmFsdWUgJ3RydWUnIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBwYXJ0IG9mIHRoZSBpbnN0YW5jZSdzIG1lc3NhZ2UsIGFzIGl0IGlzIG1vc3RseSBsaWtlbHkgdGhlIHJlc3VsdCBvZiBhIHZhcmlhYmxlIGJvb2xlYW4gc3RhdGUuIFRvIGxlYXJuIG1vcmUgc2VlIFtzeW1ib2xTZXF1ZW5jZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhPYmplY3Qrc3ltYm9sU2VxdWVuY2UpLiAoRGVmYXVsdDogW1wibnVsbFwiLFwibmlsXCIsXCJ0cnVlXCIsXCJmYWxzZVwiXSkiLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICJudWxsIiwKICAgICAgICAgICAgIm5pbCIsCiAgICAgICAgICAgICJ0cnVlIiwKICAgICAgICAgICAgImZhbHNlIgogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgInByZWFtYmxlIiA6IHsKICAgICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgICAiZW5jbG9zdXJlcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGFpcnMgb2Ygb3BlbiBhbmQgY2xvc2UgY2hhcmFjdGVycyB3aG9zZSB0ZXh0IGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBlbnZlbG9wZVxuXG5EZWZpbmVzIHRoZSBlbmNsb3N1cmVzIG9mIGEgbGluZSdzIHByZWFtYmxlLCBlYWNoIGFuIG9wZW4gYW5kIGEgY2xvc2UgY2hhcmFjdGVyLiBBIHdvcmQgaW5zaWRlIG9uZSBvZiB0aGVtIGJlZm9yZSB0aGUgbWVzc2FnZSAoZS5nLiwgJ21haW4nIGluICdbbWFpbl0gU3RhcnRpbmcgd29ya2VyJykgaXMgZW52ZWxvcGUgYW5kIHN0YXlzIG91dCBvZiB0aGUgVGVuWFRlbXBsYXRlJ3MgbWVzc2FnZSBuYW1lLiBUaGUgbWVzc2FnZSBzdGFydHMgYXQgdGhlIGZpcnN0IHdvcmQgdGhhdCBubyBwYXJ0IG9mIHRoZSBwcmVhbWJsZSBkZXNjcmliZXM6IG5vdCBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpLCBub3QgYSBbbWVzc2FnZSBrZXldKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHByZWFtYmxlbWVzc2FnZWtleXMpLCBub3QgZW5jbG9zZWQgYW5kIG5vdCBhIHJlc2VydmVkIGtleSBvciBpdHMgdmFsdWUuIChEZWZhdWx0OiBbXCJbXVwiLFwiKClcIl0pIiwKICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJkZWZhdWx0IiA6IFsKICAgICAgICAgICAgICAgICJbXSIsCiAgICAgICAgICAgICAgICAiKCkiCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYmluZCBhIGtleSB0byBpdHMgdmFsdWUgd2hlbiB0aGUga2V5IG9yIHRoZSB2YWx1ZSBpcyBxdW90ZWRcblxuRGVmaW5lcyB0aGUgY2hhcmFjdGVycyB0aGF0IGJpbmQgYSBrZXkgdG8gaXRzIHZhbHVlLCBvbmUgY2hhcmFjdGVyIGVhY2gsIHdoZW4gdGhlIGtleSBvciB0aGUgdmFsdWUgaXMgcXVvdGVkIChlLmcuLCAnXCJsZXZlbFwiOlwiaW5mb1wiJywgXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gQSBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpIGtleSBhbmQgaXRzIHZhbHVlIGFyZSBlbnZlbG9wZTsgdGhlIG1lc3NhZ2Ugc3RhcnRzIGluc2lkZSBhIFttZXNzYWdlIGtleV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9scHJlYW1ibGVtZXNzYWdla2V5cykncyB2YWx1ZS4gVW5xdW90ZWQsIGEgY29sb24gYmluZHMgbm90aGluZywgc28gJ0Vycm9yOiAxMyBJTlRFUk5BTCcgYW5kICdJTkZPOnJvb3Q6U3RhcnRpbmcnIGtlZXAgdGhlaXIgd29yZHMuIChEZWZhdWx0OiBbXCI9XCIsXCI6XCJdKSIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICAgICAiPSIsCiAgICAgICAgICAgICAgICAiOiIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJiYXJlQXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYWxzbyBiaW5kIGFuIHVucXVvdGVkIGtleSB0byBhbiB1bnF1b3RlZCB2YWx1ZVxuXG5EZWZpbmVzIHRoZSBhc3NpZ25lcnMgdGhhdCBiaW5kIGEga2V5IHdpdGhvdXQgcXVvdGVzLCBvbmUgY2hhcmFjdGVyIGVhY2gsIGFzIGxvZ2ZtdCB3cml0ZXMgdGhlbSAoZS5nLiwgJ2xldmVsPWluZm8nLCAnbG9nZ2VyPWNsZWFudXAnKS4gQW4gYXNzaWduZXIgbGlzdGVkIGhlcmUgYmluZHMgaW4gcmVjb3JkIGZvcm0gdG9vLiAoRGVmYXVsdDogW1wiPVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIj0iCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiam9pbmVycyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU2VwYXJhdG9ycyB0aGF0IGNoYWluIHdvcmRzIGludG8gb25lIG5hbWUsIHJlYWQgdG8gZmluZCBhIGdyb3VwJ3MgbGVhZFxuXG5EZWZpbmVzIHRoZSBzZXBhcmF0b3JzIHRoYXQgY2hhaW4gdHdvIG9yIG1vcmUgd29yZHMsIHdyaXR0ZW4gd2l0aG91dCB3aGl0ZXNwYWNlLCBpbnRvIG9uZSBuYW1lIChlLmcuLCAnb3JnLmFwYWNoZS5rYWZrYS5sb2cuTG9jYWxMb2cnLCAnY2FydC5jYXJ0c3RvcmUuVmFsa2V5Q2FydFN0b3JlJyksIHR5cGljYWxseSBhIGxvZ2dlciwgY2xhc3Mgb3IgZmlsZSBuYW1lLiBUaGV5IGRlY2lkZSBvbmx5IHdoaWNoIG1lbWJlciBvZiBhIG11bHRpLWxpbmUgZXZlbnQgbmFtZXMgaXQ6IGEgbWVtYmVyIHdob3NlIGV2ZXJ5IHdvcmQgaXMgc3VjaCBhIG5hbWUgb3Igb3RoZXIgZW52ZWxvcGUgZG9lcyBub3QgbGVhZCB0aGUgZ3JvdXAgKHNlZSBbc3ltYm9sR3JvdXBMZWFkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xncm91cGxlYWQpKS4gSW4gYSBtZXNzYWdlIG5hbWUgYSBqb2luZWQgbmFtZSBzdGF5cywgYXMgYSBsb2dnZXIgb3IgY2xhc3MgbmFtZSBpcyBvZnRlbiB0aGUgb25seSB0ZXh0IHRoYXQgdGVsbHMgdHdvIHN0YXRlbWVudHMgYXBhcnQuIChEZWZhdWx0OiBbXCIuXCIsXCI6OlwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIi4iLAogICAgICAgICAgICAgICAgIjo6IgogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm1lc3NhZ2VLZXlzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJLZXlzIHdob3NlIGJvdW5kIHZhbHVlIGhvbGRzIHRoZSBtZXNzYWdlXG5cbkRlZmluZXMgdGhlIGtleXMgd2hvc2UgdmFsdWUgaG9sZHMgdGhlIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHN0YXJ0cyBhdCB0aGUgdmFsdWUncyBmaXJzdCB3b3JkIHRoZSBwcmVhbWJsZSBkb2VzIG5vdCBkZXNjcmliZSAoZS5nLiwgJ3N0YXJ0aW5nJyBpbiAnbXNnPXN0YXJ0aW5nJywgJ1N1YmNoYW5uZWwnIGluICdcIm1zZ1wiOlwiW2NvcmVdW0NoYW5uZWwgIzFdIFN1YmNoYW5uZWwgY3JlYXRlZFwiJywgJ0NoYXJnZScgaW4gXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gSW4gYSByZWNvcmQgdGhhdCBvcGVucyB3aXRoICd7JywgcmVhZGluZyBzdGFydHMgYXQgdGhlIGZpcnN0IG1lc3NhZ2Uga2V5IHdpdGggYSB2YWx1ZS4gQSBtZXNzYWdlIGtleSB3aXRob3V0IGEgdmFsdWUgaXMgZW52ZWxvcGUsIGFzIGEgcmVzZXJ2ZWQgd29yZCBpcy4gKERlZmF1bHQ6IFtcIm1zZ1wiLFwibWVzc2FnZVwiLFwiYm9keVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIm1zZyIsCiAgICAgICAgICAgICAgICAibWVzc2FnZSIsCiAgICAgICAgICAgICAgICAiYm9keSIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJncm91cExlYWQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1lbWJlciBvZiBhIG11bHRpLWxpbmUgZ3JvdXAgd2hvc2UgdGV4dCBuYW1lcyB0aGUgZ3JvdXBcblxuU2VsZWN0cyB0aGUgbWVtYmVyIG9mIGEgbXVsdGktbGluZSBldmVudCBncm91cCB3aG9zZSB0ZXh0IG5hbWVzIGl0LiAnZmlyc3RXaXRoTWVzc2FnZScgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBmaXJzdCBtZW1iZXIgd2hvc2UgaW5wdXQgZmllbGQgaXMgbm90IGFsbCBlbnZlbG9wZSwgYSBuYW1lIG9mIHdvcmRzIGNoYWluZWQgYnkgYSBbam9pbmVyXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xwcmVhbWJsZWpvaW5lcnMpIGNvdW50aW5nIGFzIGVudmVsb3BlIGhlcmUsIHNvIGEgaGVhZCBzdWNoIGFzIHRoZSAuTkVUIGNvbnNvbGUgbG9nZ2VyJ3MgJ2luZm86IGNhcnQuY2FydHN0b3JlLlZhbGtleUNhcnRTdG9yZVswXScgYmVmb3JlIHRoZSByZWNvcmQgaG9sZGluZyB0aGUgbWVzc2FnZSBsZWF2ZXMgdGhlIG5hbWUsIG9yaWdpbiBhbmQgc2tlbGV0b24gdG8gdGhhdCByZWNvcmQuIEEgaGVhZCB0aGF0IGhvbGRzIGEgbWVzc2FnZSAoZS5nLiwgYSBzdGFjayB0cmFjZSdzIGV4Y2VwdGlvbiBsaW5lKSBuYW1lcyB0aGUgZ3JvdXAuICdoZWFkJyBhbHdheXMgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBoZWFkLiAoRGVmYXVsdDogZmlyc3RXaXRoTWVzc2FnZSkiLAogICAgICAgICAgImRlZmF1bHQiIDogImZpcnN0V2l0aE1lc3NhZ2UiCiAgICAgICAgfSwKICAgICAgICAibWF4T3JpZ2lucyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heCBudW1iZXIgb2Ygc291cmNlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbFxuXG5Db250cm9scyB0aGUgbnVtYmVyIG9mIHNvdXJjZSBjb2RlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbCB0b2tlbiBzZXF1ZW5jZS4gQXMgYSBzZXJpZXMgb2YgdG9rZW5zIHdpdGhpbiAgYSBnaXZlbiB0ZW1wbGF0ZSAoZS5nLiwgJ0VSUk9SJywgJ2NvdWxkIG5vdCBjb25uZWN0IHRvIFwie30nKSBtYXkgYXBwZWFyICBpbiBtdWx0aXBsZSBzb3VyY2UvYmluYXJ5IGZpbGVzIHdpdGhpbiB0aGUgcGlwZWxpbmUncyBzeW1ib2wgZmlsZXMsIHRoZSBzb3J0aW5nIGFsZ29yaXRobSBzZWxlY3RzIFttYXhTeW1ib2xPcmlnaW5zXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xtYXhvcmlnaW5zKSBmb3IgY29tcGFyaXNvbi4gKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogNjQpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IDY0CiAgICAgICAgfSwKICAgICAgICAiZGVidWciIDogewogICAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICJvcmlnaW5zIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHNvdXJjZSBzY2FubmVkIGZpbGUgbmFtZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgd2l0aGluIHRoZSBsb2FkZWQgc3ltYm9sIGxpYnJhcnkgKGUuZy4sICdteS5zY2FsYScsICdmb28uamF2YScpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaWYvaG93IHRoZXkgcGFydGljaXBhdGUgaW4gc2VsZWN0aW5nIHRoZSBvcmlnaW4gb2YgYSB0YXJnZXQgVGVuWFRlbXBsYXRlIHN5bWJvbCBzZXF1ZW5jZS4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBpbnB1dCBmaWxlcy4iLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN5bWJvbHMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgVGVuWFRlbXBsYXRlIHN5bWJvbCB2YWx1ZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5MaXN0IG9mIHN5bWJvbCB2YWx1ZXMgc3VjaCBhcyBjbGFzcyBhbmQgbWV0aG9kIG5hbWVzKGUuZy4sICdNeUNsYXNzJywgJ2ZvbycpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaG93IHRoZWlyIG9yaWdpbiBpbmZvcm1hdGlvbiBpcyBzZWxlY3RlZC4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBzeW1ib2xzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibG9nZ2VyTmFtZSIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEZWJ1ZyBsb2dnZXIgbmFtZVxuXG5Db250cm9scyB0aGUgbmFtZSBvZiB0aGUgbG9nNGogbG9nZ2VyIHVzZWQgYnkgW2RlYnVnT3JpZ2luc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdvcmlnaW5zKSBhbmQgW2RlYnVnU3ltYm9sc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdzeW1ib2xzKS4gKERlZmF1bHQ6IFtjb25zb2xlT3V0XShodHRwczovL2dpdGh1Yi5jb20vbG9nLTEweC9jb25maWcvYmxvYi9tYWluL2xvZzRqMi55YW1sI0w2NikpIiwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiAiW2NvbnNvbGVPdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L2NvbmZpZy9ibG9iL21haW4vbG9nNGoyLnlhbWwjTDY2KSIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=</template>
5352
+ <template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAic3ltYm9sIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJzZXF1ZW5jZVJlc2VydmVkIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHRlcm1zIHRvIGlnbm9yZSB3aGVuIHNjYW5uaW5nIHN5bWJvbCB0b2tlbnNcblxuRGVmaW5lcyBhIGxpc3Qgb2YgdGVybXMgdGhhdCB0byBpZ25vcmUgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBzeW1ib2wgdG9rZW5zIGNvbnN0aXR1dGluZyBhbiBUZW5YVGVtcGxhdGUncyAnbWVzc2FnZScgcG9ydGlvbiAoaS5lLiwgdGhlIFtzeW1ib2xdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zdHJ1Y3R1cmUvI3N5bWJvbHMpIHRva2VucyBvZiB0aGUgb3JpZ2luIHJhbmtlZCBoaWdoZXN0IGJ5IGNvdmVyYWdlLCBtZWFuaW5nIHRoZSBjb3VudCBvZiBkaXN0aW5jdCBsaWJyYXJ5LWtub3duIHRva2VucyBpdCBleHBsYWluczsgc3BhbiBsZW5ndGggaXMgdGhlIGxhc3QgdGllYnJlYWspLiBGb3IgZXhhbXBsZSwgZm9yIGFuIFRlblhPYmplY3Qgd2hvc2UgdGV4dCBjb250YWluczogJ2Nvbm5lY3Qgc3VjY2VzcyA9IHRydWUnLCB0aGUgdmFsdWUgJ3RydWUnIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBwYXJ0IG9mIHRoZSBpbnN0YW5jZSdzIG1lc3NhZ2UsIGFzIGl0IGlzIG1vc3RseSBsaWtlbHkgdGhlIHJlc3VsdCBvZiBhIHZhcmlhYmxlIGJvb2xlYW4gc3RhdGUuIFRvIGxlYXJuIG1vcmUgc2VlIFtzeW1ib2xTZXF1ZW5jZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhPYmplY3Qrc3ltYm9sU2VxdWVuY2UpLiAoRGVmYXVsdDogW1wibnVsbFwiLFwibmlsXCIsXCJ0cnVlXCIsXCJmYWxzZVwiXSkiLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICJudWxsIiwKICAgICAgICAgICAgIm5pbCIsCiAgICAgICAgICAgICJ0cnVlIiwKICAgICAgICAgICAgImZhbHNlIgogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgInByZWFtYmxlIiA6IHsKICAgICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgICAiZW5jbG9zdXJlcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGFpcnMgb2Ygb3BlbiBhbmQgY2xvc2UgY2hhcmFjdGVycyB3aG9zZSB0ZXh0IGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBlbnZlbG9wZVxuXG5EZWZpbmVzIHRoZSBlbmNsb3N1cmVzIG9mIGEgbGluZSdzIHByZWFtYmxlLCBlYWNoIGFuIG9wZW4gYW5kIGEgY2xvc2UgY2hhcmFjdGVyLiBBIHdvcmQgaW5zaWRlIG9uZSBvZiB0aGVtIGJlZm9yZSB0aGUgbWVzc2FnZSAoZS5nLiwgJ21haW4nIGluICdbbWFpbl0gU3RhcnRpbmcgd29ya2VyJykgaXMgZW52ZWxvcGUgYW5kIHN0YXlzIG91dCBvZiB0aGUgVGVuWFRlbXBsYXRlJ3MgbWVzc2FnZSBuYW1lLiBBbiBvcGVuIHdpdGggbm8gY2xvc2UgYWZ0ZXIgaXQgaW4gdGhlIHNhbWUgZmllbGQgZW5jbG9zZXMgbm90aGluZywgc3VjaCBhcyB0aGUgJ1snIG9mIGEgY29sb3IgY29kZSAoJ1xcMDMzWzA7MzNtV0FSTicpIG9yIG9uZSB0aGF0IGNsb3NlcyBvbiBhIGxhdGVyIGxpbmUgb2YgYSBtdWx0aS1saW5lIGV2ZW50LiBUaGUgbWVzc2FnZSBzdGFydHMgYXQgdGhlIGZpcnN0IHdvcmQgdGhhdCBubyBwYXJ0IG9mIHRoZSBwcmVhbWJsZSBkZXNjcmliZXM6IG5vdCBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpLCBub3QgYSBbbWVzc2FnZSBrZXldKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHByZWFtYmxlbWVzc2FnZWtleXMpLCBub3QgZW5jbG9zZWQgYW5kIG5vdCBhIHJlc2VydmVkIGtleSBvciBpdHMgdmFsdWUuIChEZWZhdWx0OiBbXCJbXVwiLFwiKClcIl0pIiwKICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJkZWZhdWx0IiA6IFsKICAgICAgICAgICAgICAgICJbXSIsCiAgICAgICAgICAgICAgICAiKCkiCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYmluZCBhIGtleSB0byBpdHMgdmFsdWUgd2hlbiB0aGUga2V5IG9yIHRoZSB2YWx1ZSBpcyBxdW90ZWRcblxuRGVmaW5lcyB0aGUgY2hhcmFjdGVycyB0aGF0IGJpbmQgYSBrZXkgdG8gaXRzIHZhbHVlLCBvbmUgY2hhcmFjdGVyIGVhY2gsIHdoZW4gdGhlIGtleSBvciB0aGUgdmFsdWUgaXMgcXVvdGVkIChlLmcuLCAnXCJsZXZlbFwiOlwiaW5mb1wiJywgXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gQSBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpIGtleSBhbmQgaXRzIHZhbHVlIGFyZSBlbnZlbG9wZTsgdGhlIG1lc3NhZ2Ugc3RhcnRzIGluc2lkZSBhIFttZXNzYWdlIGtleV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9scHJlYW1ibGVtZXNzYWdla2V5cykncyB2YWx1ZS4gVW5xdW90ZWQsIGEgY29sb24gYmluZHMgbm90aGluZywgc28gJ0Vycm9yOiAxMyBJTlRFUk5BTCcgYW5kICdJTkZPOnJvb3Q6U3RhcnRpbmcnIGtlZXAgdGhlaXIgd29yZHMuIChEZWZhdWx0OiBbXCI9XCIsXCI6XCJdKSIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICAgICAiPSIsCiAgICAgICAgICAgICAgICAiOiIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJiYXJlQXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYWxzbyBiaW5kIGFuIHVucXVvdGVkIGtleSB0byBhbiB1bnF1b3RlZCB2YWx1ZVxuXG5EZWZpbmVzIHRoZSBhc3NpZ25lcnMgdGhhdCBiaW5kIGEga2V5IHdpdGhvdXQgcXVvdGVzLCBvbmUgY2hhcmFjdGVyIGVhY2gsIGFzIGxvZ2ZtdCB3cml0ZXMgdGhlbSAoZS5nLiwgJ2xldmVsPWluZm8nLCAnbG9nZ2VyPWNsZWFudXAnKS4gQW4gYXNzaWduZXIgbGlzdGVkIGhlcmUgYmluZHMgaW4gcmVjb3JkIGZvcm0gdG9vLiAoRGVmYXVsdDogW1wiPVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIj0iCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiam9pbmVycyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU2VwYXJhdG9ycyB0aGF0IGNoYWluIHdvcmRzIGludG8gb25lIG5hbWUsIHJlYWQgdG8gZmluZCBhIGdyb3VwJ3MgbGVhZFxuXG5EZWZpbmVzIHRoZSBzZXBhcmF0b3JzIHRoYXQgY2hhaW4gdHdvIG9yIG1vcmUgd29yZHMsIHdyaXR0ZW4gd2l0aG91dCB3aGl0ZXNwYWNlLCBpbnRvIG9uZSBuYW1lIChlLmcuLCAnb3JnLmFwYWNoZS5rYWZrYS5sb2cuTG9jYWxMb2cnLCAnY2FydC5jYXJ0c3RvcmUuVmFsa2V5Q2FydFN0b3JlJyksIHR5cGljYWxseSBhIGxvZ2dlciwgY2xhc3Mgb3IgZmlsZSBuYW1lLiBUaGV5IGRlY2lkZSBvbmx5IHdoaWNoIG1lbWJlciBvZiBhIG11bHRpLWxpbmUgZXZlbnQgbmFtZXMgaXQ6IGEgbWVtYmVyIHdob3NlIGV2ZXJ5IHdvcmQgaXMgc3VjaCBhIG5hbWUgb3Igb3RoZXIgZW52ZWxvcGUgZG9lcyBub3QgbGVhZCB0aGUgZ3JvdXAgKHNlZSBbc3ltYm9sR3JvdXBMZWFkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xncm91cGxlYWQpKS4gSW4gYSBtZXNzYWdlIG5hbWUgYSBqb2luZWQgbmFtZSBzdGF5cywgYXMgYSBsb2dnZXIgb3IgY2xhc3MgbmFtZSBpcyBvZnRlbiB0aGUgb25seSB0ZXh0IHRoYXQgdGVsbHMgdHdvIHN0YXRlbWVudHMgYXBhcnQuIChEZWZhdWx0OiBbXCIuXCIsXCI6OlwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIi4iLAogICAgICAgICAgICAgICAgIjo6IgogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm1lc3NhZ2VLZXlzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJLZXlzIHdob3NlIGJvdW5kIHZhbHVlIGhvbGRzIHRoZSBtZXNzYWdlXG5cbkRlZmluZXMgdGhlIGtleXMgd2hvc2UgdmFsdWUgaG9sZHMgdGhlIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHN0YXJ0cyBhdCB0aGUgdmFsdWUncyBmaXJzdCB3b3JkIHRoZSBwcmVhbWJsZSBkb2VzIG5vdCBkZXNjcmliZSAoZS5nLiwgJ3N0YXJ0aW5nJyBpbiAnbXNnPXN0YXJ0aW5nJywgJ1N1YmNoYW5uZWwnIGluICdcIm1zZ1wiOlwiW2NvcmVdW0NoYW5uZWwgIzFdIFN1YmNoYW5uZWwgY3JlYXRlZFwiJywgJ0NoYXJnZScgaW4gXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gSW4gYSByZWNvcmQgdGhhdCBvcGVucyB3aXRoICd7JywgcmVhZGluZyBzdGFydHMgYXQgdGhlIGZpcnN0IG1lc3NhZ2Uga2V5IHdpdGggYSB2YWx1ZS4gQSBtZXNzYWdlIGtleSB3aXRob3V0IGEgdmFsdWUgaXMgZW52ZWxvcGUsIGFzIGEgcmVzZXJ2ZWQgd29yZCBpcy4gKERlZmF1bHQ6IFtcIm1zZ1wiLFwibWVzc2FnZVwiLFwiYm9keVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIm1zZyIsCiAgICAgICAgICAgICAgICAibWVzc2FnZSIsCiAgICAgICAgICAgICAgICAiYm9keSIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJncm91cExlYWQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1lbWJlciBvZiBhIG11bHRpLWxpbmUgZ3JvdXAgd2hvc2UgdGV4dCBuYW1lcyB0aGUgZ3JvdXBcblxuU2VsZWN0cyB0aGUgbWVtYmVyIG9mIGEgbXVsdGktbGluZSBldmVudCBncm91cCB3aG9zZSB0ZXh0IG5hbWVzIGl0LiAnZmlyc3RXaXRoTWVzc2FnZScgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBmaXJzdCBtZW1iZXIgd2hvc2UgaW5wdXQgZmllbGQgaXMgbm90IGFsbCBlbnZlbG9wZSwgYSBuYW1lIG9mIHdvcmRzIGNoYWluZWQgYnkgYSBbam9pbmVyXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xwcmVhbWJsZWpvaW5lcnMpIGNvdW50aW5nIGFzIGVudmVsb3BlIGhlcmUsIHNvIGEgaGVhZCBzdWNoIGFzIHRoZSAuTkVUIGNvbnNvbGUgbG9nZ2VyJ3MgJ2luZm86IGNhcnQuY2FydHN0b3JlLlZhbGtleUNhcnRTdG9yZVswXScgYmVmb3JlIHRoZSByZWNvcmQgaG9sZGluZyB0aGUgbWVzc2FnZSBsZWF2ZXMgdGhlIG5hbWUsIG9yaWdpbiBhbmQgc2tlbGV0b24gdG8gdGhhdCByZWNvcmQuIEEgaGVhZCB0aGF0IGhvbGRzIGEgbWVzc2FnZSAoZS5nLiwgYSBzdGFjayB0cmFjZSdzIGV4Y2VwdGlvbiBsaW5lKSBuYW1lcyB0aGUgZ3JvdXAuICdoZWFkJyBhbHdheXMgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBoZWFkLiAoRGVmYXVsdDogZmlyc3RXaXRoTWVzc2FnZSkiLAogICAgICAgICAgImRlZmF1bHQiIDogImZpcnN0V2l0aE1lc3NhZ2UiCiAgICAgICAgfSwKICAgICAgICAibWF4T3JpZ2lucyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heCBudW1iZXIgb2Ygc291cmNlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbFxuXG5Db250cm9scyB0aGUgbnVtYmVyIG9mIHNvdXJjZSBjb2RlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbCB0b2tlbiBzZXF1ZW5jZS4gQXMgYSBzZXJpZXMgb2YgdG9rZW5zIHdpdGhpbiAgYSBnaXZlbiB0ZW1wbGF0ZSAoZS5nLiwgJ0VSUk9SJywgJ2NvdWxkIG5vdCBjb25uZWN0IHRvIFwie30nKSBtYXkgYXBwZWFyICBpbiBtdWx0aXBsZSBzb3VyY2UvYmluYXJ5IGZpbGVzIHdpdGhpbiB0aGUgcGlwZWxpbmUncyBzeW1ib2wgZmlsZXMsIHRoZSBzb3J0aW5nIGFsZ29yaXRobSBzZWxlY3RzIFttYXhTeW1ib2xPcmlnaW5zXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xtYXhvcmlnaW5zKSBmb3IgY29tcGFyaXNvbi4gKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogNjQpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IDY0CiAgICAgICAgfSwKICAgICAgICAiZGVidWciIDogewogICAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICJvcmlnaW5zIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHNvdXJjZSBzY2FubmVkIGZpbGUgbmFtZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgd2l0aGluIHRoZSBsb2FkZWQgc3ltYm9sIGxpYnJhcnkgKGUuZy4sICdteS5zY2FsYScsICdmb28uamF2YScpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaWYvaG93IHRoZXkgcGFydGljaXBhdGUgaW4gc2VsZWN0aW5nIHRoZSBvcmlnaW4gb2YgYSB0YXJnZXQgVGVuWFRlbXBsYXRlIHN5bWJvbCBzZXF1ZW5jZS4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBpbnB1dCBmaWxlcy4iLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN5bWJvbHMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgVGVuWFRlbXBsYXRlIHN5bWJvbCB2YWx1ZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5MaXN0IG9mIHN5bWJvbCB2YWx1ZXMgc3VjaCBhcyBjbGFzcyBhbmQgbWV0aG9kIG5hbWVzKGUuZy4sICdNeUNsYXNzJywgJ2ZvbycpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaG93IHRoZWlyIG9yaWdpbiBpbmZvcm1hdGlvbiBpcyBzZWxlY3RlZC4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBzeW1ib2xzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibG9nZ2VyTmFtZSIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEZWJ1ZyBsb2dnZXIgbmFtZVxuXG5Db250cm9scyB0aGUgbmFtZSBvZiB0aGUgbG9nNGogbG9nZ2VyIHVzZWQgYnkgW2RlYnVnT3JpZ2luc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdvcmlnaW5zKSBhbmQgW2RlYnVnU3ltYm9sc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdzeW1ib2xzKS4gKERlZmF1bHQ6IFtjb25zb2xlT3V0XShodHRwczovL2dpdGh1Yi5jb20vbG9nLTEweC9jb25maWcvYmxvYi9tYWluL2xvZzRqMi55YW1sI0w2NikpIiwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiAiW2NvbnNvbGVPdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L2NvbmZpZy9ibG9iL21haW4vbG9nNGoyLnlhbWwjTDY2KSIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=</template>
5353
5353
 
5354
5354
  ```yaml
5355
5355
  # 🔟❎ 'run' symbol origin configuration
@@ -5425,13 +5425,8 @@ To configure advanced options (optional) for the Reporter app, [:material-cog: E
5425
5425
  - FATAL
5426
5426
  - PANIC
5427
5427
  # severity levels, lowercase (engine matching is case-sensitive).
5428
- # Note. The token "error" is intentionally NOT reserved here.
5429
- # Verification against 3254 demo events (2026-05-20) found 1280
5430
- # signal hits where the "error" key carries the actual message
5431
- # body the pattern groups; reserving it would collapse distinct
5432
- # error patterns into one.
5433
- # Note. The token "emergency" is also intentionally NOT reserved
5434
- #, sample showed only prose hits, no envelope use observed.
5428
+ # 'error' and 'emergency' are not reserved: an 'error' key often
5429
+ # carries the message itself, and 'emergency' appears as prose.
5435
5430
  - "trace"
5436
5431
  - "debug"
5437
5432
  - "info"
@@ -5453,8 +5448,7 @@ To configure advanced options (optional) for the Reporter app, [:material-cog: E
5453
5448
  - "timestamp"
5454
5449
  - "ts"
5455
5450
  # 'msg' and 'message' are message keys (see 'preamble.messageKeys')
5456
- # OpenTelemetry / collector envelope (these tokens leak from the
5457
- # otelcol's Go-package logging into pattern names)
5451
+ # OpenTelemetry / collector envelope
5458
5452
  - "otel"
5459
5453
  - "otelcol"
5460
5454
  - "opentelemetry"
@@ -5468,9 +5462,7 @@ To configure advanced options (optional) for the Reporter app, [:material-cog: E
5468
5462
  - "exporters"
5469
5463
  - "pipeline"
5470
5464
  - "pipelines"
5471
- # structured / envelope keys (singular + plural, engine matcher
5472
- # is exact, no stem; both forms appear in real otel logs).
5473
- # Note: "trace" is already reserved above under lowercase severity.
5465
+ # structured / envelope keys, singular and plural (matching is exact)
5474
5466
  - "service"
5475
5467
  - "services"
5476
5468
  - "instance"
@@ -5493,9 +5485,7 @@ To configure advanced options (optional) for the Reporter app, [:material-cog: E
5493
5485
  - "context"
5494
5486
  - "contexts"
5495
5487
  - "baggage"
5496
- # K8s audit / Kubernetes API envelope (verified zero signal in
5497
- # the 2026-05-20 sample, every occurrence was a JSON metadata
5498
- # key or audit field)
5488
+ # Kubernetes API / audit envelope
5499
5489
  - "metadata"
5500
5490
  - "namespace"
5501
5491
  - "verb"
@@ -5506,8 +5496,7 @@ To configure advanced options (optional) for the Reporter app, [:material-cog: E
5506
5496
  - "encoding"
5507
5497
  - "headers"
5508
5498
  - "duration"
5509
- # HTTP / request envelope (verified safe, appear only as
5510
- # klog field markers or JSON keys, not as message content)
5499
+ # HTTP / request envelope
5511
5500
  - "path"
5512
5501
  - "status"
5513
5502
  # generic identity keys (very common envelope tokens in JSON logs)
@@ -5516,7 +5505,7 @@ To configure advanced options (optional) for the Reporter app, [:material-cog: E
5516
5505
  - "kind"
5517
5506
  - "version"
5518
5507
  - "type"
5519
- # source-location envelope (Go / Java / Python loggers leak these)
5508
+ # source-location envelope (Go / Java / Python loggers print these)
5520
5509
  - "caller"
5521
5510
  - "func"
5522
5511
  - "function"
@@ -5528,15 +5517,9 @@ To configure advanced options (optional) for the Reporter app, [:material-cog: E
5528
5517
  - "method"
5529
5518
  - "stack"
5530
5519
  - "stacktrace"
5531
- # process / runtime context.
5532
- # Note. The token "host" is intentionally NOT reserved, 1018 of
5533
- # 1024 occurrences in the verification corpus were the content
5534
- # phrase "no such host" inside DNS-failure messages; reserving
5535
- # it would collapse every "no such host" pattern into one.
5536
- # Note. The token "app" is intentionally NOT reserved, 42 of 44
5537
- # occurrences were the Flask logger-name discriminator in
5538
- # "INFO in app:" lines; reserving it would collapse Python-app
5539
- # logger structure.
5520
+ # process / runtime context. 'host' and 'app' are not reserved:
5521
+ # 'host' is message text in 'no such host', and 'app' is the Flask
5522
+ # logger name that tells one application's statements from another's.
5540
5523
  - "pid"
5541
5524
  - "tid"
5542
5525
  - "process"
@@ -5565,6 +5548,9 @@ To configure advanced options (optional) for the Reporter app, [:material-cog: E
5565
5548
 
5566
5549
  # 'enclosures' lists open and close character pairs: text inside them
5567
5550
  # before the message is envelope (e.g., 'main' in '[main] Starting worker').
5551
+ # An open with no close after it in the same field encloses nothing, such
5552
+ # as the '[' of a color code ('\033[0;33mWARN') or one that closes on a
5553
+ # later line of a multi-line event.
5568
5554
  enclosures: ['[]', '()']
5569
5555
 
5570
5556
  # 'assigners' lists the characters that bind a key to its value when the
@@ -6621,7 +6621,7 @@ To configure advanced options (optional) for the Retriever app, [:material-cog:
6621
6621
  </div>
6622
6622
  </dialog>
6623
6623
 
6624
- <template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAic3ltYm9sIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJzZXF1ZW5jZVJlc2VydmVkIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHRlcm1zIHRvIGlnbm9yZSB3aGVuIHNjYW5uaW5nIHN5bWJvbCB0b2tlbnNcblxuRGVmaW5lcyBhIGxpc3Qgb2YgdGVybXMgdGhhdCB0byBpZ25vcmUgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBzeW1ib2wgdG9rZW5zIGNvbnN0aXR1dGluZyBhbiBUZW5YVGVtcGxhdGUncyAnbWVzc2FnZScgcG9ydGlvbiAoaS5lLiwgdGhlIFtzeW1ib2xdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zdHJ1Y3R1cmUvI3N5bWJvbHMpIHRva2VucyBvZiB0aGUgb3JpZ2luIHJhbmtlZCBoaWdoZXN0IGJ5IGNvdmVyYWdlLCBtZWFuaW5nIHRoZSBjb3VudCBvZiBkaXN0aW5jdCBsaWJyYXJ5LWtub3duIHRva2VucyBpdCBleHBsYWluczsgc3BhbiBsZW5ndGggaXMgdGhlIGxhc3QgdGllYnJlYWspLiBGb3IgZXhhbXBsZSwgZm9yIGFuIFRlblhPYmplY3Qgd2hvc2UgdGV4dCBjb250YWluczogJ2Nvbm5lY3Qgc3VjY2VzcyA9IHRydWUnLCB0aGUgdmFsdWUgJ3RydWUnIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBwYXJ0IG9mIHRoZSBpbnN0YW5jZSdzIG1lc3NhZ2UsIGFzIGl0IGlzIG1vc3RseSBsaWtlbHkgdGhlIHJlc3VsdCBvZiBhIHZhcmlhYmxlIGJvb2xlYW4gc3RhdGUuIFRvIGxlYXJuIG1vcmUgc2VlIFtzeW1ib2xTZXF1ZW5jZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhPYmplY3Qrc3ltYm9sU2VxdWVuY2UpLiAoRGVmYXVsdDogW1wibnVsbFwiLFwibmlsXCIsXCJ0cnVlXCIsXCJmYWxzZVwiXSkiLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICJudWxsIiwKICAgICAgICAgICAgIm5pbCIsCiAgICAgICAgICAgICJ0cnVlIiwKICAgICAgICAgICAgImZhbHNlIgogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgInByZWFtYmxlIiA6IHsKICAgICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgICAiZW5jbG9zdXJlcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGFpcnMgb2Ygb3BlbiBhbmQgY2xvc2UgY2hhcmFjdGVycyB3aG9zZSB0ZXh0IGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBlbnZlbG9wZVxuXG5EZWZpbmVzIHRoZSBlbmNsb3N1cmVzIG9mIGEgbGluZSdzIHByZWFtYmxlLCBlYWNoIGFuIG9wZW4gYW5kIGEgY2xvc2UgY2hhcmFjdGVyLiBBIHdvcmQgaW5zaWRlIG9uZSBvZiB0aGVtIGJlZm9yZSB0aGUgbWVzc2FnZSAoZS5nLiwgJ21haW4nIGluICdbbWFpbl0gU3RhcnRpbmcgd29ya2VyJykgaXMgZW52ZWxvcGUgYW5kIHN0YXlzIG91dCBvZiB0aGUgVGVuWFRlbXBsYXRlJ3MgbWVzc2FnZSBuYW1lLiBUaGUgbWVzc2FnZSBzdGFydHMgYXQgdGhlIGZpcnN0IHdvcmQgdGhhdCBubyBwYXJ0IG9mIHRoZSBwcmVhbWJsZSBkZXNjcmliZXM6IG5vdCBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpLCBub3QgYSBbbWVzc2FnZSBrZXldKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHByZWFtYmxlbWVzc2FnZWtleXMpLCBub3QgZW5jbG9zZWQgYW5kIG5vdCBhIHJlc2VydmVkIGtleSBvciBpdHMgdmFsdWUuIChEZWZhdWx0OiBbXCJbXVwiLFwiKClcIl0pIiwKICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJkZWZhdWx0IiA6IFsKICAgICAgICAgICAgICAgICJbXSIsCiAgICAgICAgICAgICAgICAiKCkiCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYmluZCBhIGtleSB0byBpdHMgdmFsdWUgd2hlbiB0aGUga2V5IG9yIHRoZSB2YWx1ZSBpcyBxdW90ZWRcblxuRGVmaW5lcyB0aGUgY2hhcmFjdGVycyB0aGF0IGJpbmQgYSBrZXkgdG8gaXRzIHZhbHVlLCBvbmUgY2hhcmFjdGVyIGVhY2gsIHdoZW4gdGhlIGtleSBvciB0aGUgdmFsdWUgaXMgcXVvdGVkIChlLmcuLCAnXCJsZXZlbFwiOlwiaW5mb1wiJywgXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gQSBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpIGtleSBhbmQgaXRzIHZhbHVlIGFyZSBlbnZlbG9wZTsgdGhlIG1lc3NhZ2Ugc3RhcnRzIGluc2lkZSBhIFttZXNzYWdlIGtleV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9scHJlYW1ibGVtZXNzYWdla2V5cykncyB2YWx1ZS4gVW5xdW90ZWQsIGEgY29sb24gYmluZHMgbm90aGluZywgc28gJ0Vycm9yOiAxMyBJTlRFUk5BTCcgYW5kICdJTkZPOnJvb3Q6U3RhcnRpbmcnIGtlZXAgdGhlaXIgd29yZHMuIChEZWZhdWx0OiBbXCI9XCIsXCI6XCJdKSIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICAgICAiPSIsCiAgICAgICAgICAgICAgICAiOiIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJiYXJlQXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYWxzbyBiaW5kIGFuIHVucXVvdGVkIGtleSB0byBhbiB1bnF1b3RlZCB2YWx1ZVxuXG5EZWZpbmVzIHRoZSBhc3NpZ25lcnMgdGhhdCBiaW5kIGEga2V5IHdpdGhvdXQgcXVvdGVzLCBvbmUgY2hhcmFjdGVyIGVhY2gsIGFzIGxvZ2ZtdCB3cml0ZXMgdGhlbSAoZS5nLiwgJ2xldmVsPWluZm8nLCAnbG9nZ2VyPWNsZWFudXAnKS4gQW4gYXNzaWduZXIgbGlzdGVkIGhlcmUgYmluZHMgaW4gcmVjb3JkIGZvcm0gdG9vLiAoRGVmYXVsdDogW1wiPVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIj0iCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiam9pbmVycyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU2VwYXJhdG9ycyB0aGF0IGNoYWluIHdvcmRzIGludG8gb25lIG5hbWUsIHJlYWQgdG8gZmluZCBhIGdyb3VwJ3MgbGVhZFxuXG5EZWZpbmVzIHRoZSBzZXBhcmF0b3JzIHRoYXQgY2hhaW4gdHdvIG9yIG1vcmUgd29yZHMsIHdyaXR0ZW4gd2l0aG91dCB3aGl0ZXNwYWNlLCBpbnRvIG9uZSBuYW1lIChlLmcuLCAnb3JnLmFwYWNoZS5rYWZrYS5sb2cuTG9jYWxMb2cnLCAnY2FydC5jYXJ0c3RvcmUuVmFsa2V5Q2FydFN0b3JlJyksIHR5cGljYWxseSBhIGxvZ2dlciwgY2xhc3Mgb3IgZmlsZSBuYW1lLiBUaGV5IGRlY2lkZSBvbmx5IHdoaWNoIG1lbWJlciBvZiBhIG11bHRpLWxpbmUgZXZlbnQgbmFtZXMgaXQ6IGEgbWVtYmVyIHdob3NlIGV2ZXJ5IHdvcmQgaXMgc3VjaCBhIG5hbWUgb3Igb3RoZXIgZW52ZWxvcGUgZG9lcyBub3QgbGVhZCB0aGUgZ3JvdXAgKHNlZSBbc3ltYm9sR3JvdXBMZWFkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xncm91cGxlYWQpKS4gSW4gYSBtZXNzYWdlIG5hbWUgYSBqb2luZWQgbmFtZSBzdGF5cywgYXMgYSBsb2dnZXIgb3IgY2xhc3MgbmFtZSBpcyBvZnRlbiB0aGUgb25seSB0ZXh0IHRoYXQgdGVsbHMgdHdvIHN0YXRlbWVudHMgYXBhcnQuIChEZWZhdWx0OiBbXCIuXCIsXCI6OlwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIi4iLAogICAgICAgICAgICAgICAgIjo6IgogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm1lc3NhZ2VLZXlzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJLZXlzIHdob3NlIGJvdW5kIHZhbHVlIGhvbGRzIHRoZSBtZXNzYWdlXG5cbkRlZmluZXMgdGhlIGtleXMgd2hvc2UgdmFsdWUgaG9sZHMgdGhlIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHN0YXJ0cyBhdCB0aGUgdmFsdWUncyBmaXJzdCB3b3JkIHRoZSBwcmVhbWJsZSBkb2VzIG5vdCBkZXNjcmliZSAoZS5nLiwgJ3N0YXJ0aW5nJyBpbiAnbXNnPXN0YXJ0aW5nJywgJ1N1YmNoYW5uZWwnIGluICdcIm1zZ1wiOlwiW2NvcmVdW0NoYW5uZWwgIzFdIFN1YmNoYW5uZWwgY3JlYXRlZFwiJywgJ0NoYXJnZScgaW4gXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gSW4gYSByZWNvcmQgdGhhdCBvcGVucyB3aXRoICd7JywgcmVhZGluZyBzdGFydHMgYXQgdGhlIGZpcnN0IG1lc3NhZ2Uga2V5IHdpdGggYSB2YWx1ZS4gQSBtZXNzYWdlIGtleSB3aXRob3V0IGEgdmFsdWUgaXMgZW52ZWxvcGUsIGFzIGEgcmVzZXJ2ZWQgd29yZCBpcy4gKERlZmF1bHQ6IFtcIm1zZ1wiLFwibWVzc2FnZVwiLFwiYm9keVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIm1zZyIsCiAgICAgICAgICAgICAgICAibWVzc2FnZSIsCiAgICAgICAgICAgICAgICAiYm9keSIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJncm91cExlYWQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1lbWJlciBvZiBhIG11bHRpLWxpbmUgZ3JvdXAgd2hvc2UgdGV4dCBuYW1lcyB0aGUgZ3JvdXBcblxuU2VsZWN0cyB0aGUgbWVtYmVyIG9mIGEgbXVsdGktbGluZSBldmVudCBncm91cCB3aG9zZSB0ZXh0IG5hbWVzIGl0LiAnZmlyc3RXaXRoTWVzc2FnZScgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBmaXJzdCBtZW1iZXIgd2hvc2UgaW5wdXQgZmllbGQgaXMgbm90IGFsbCBlbnZlbG9wZSwgYSBuYW1lIG9mIHdvcmRzIGNoYWluZWQgYnkgYSBbam9pbmVyXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xwcmVhbWJsZWpvaW5lcnMpIGNvdW50aW5nIGFzIGVudmVsb3BlIGhlcmUsIHNvIGEgaGVhZCBzdWNoIGFzIHRoZSAuTkVUIGNvbnNvbGUgbG9nZ2VyJ3MgJ2luZm86IGNhcnQuY2FydHN0b3JlLlZhbGtleUNhcnRTdG9yZVswXScgYmVmb3JlIHRoZSByZWNvcmQgaG9sZGluZyB0aGUgbWVzc2FnZSBsZWF2ZXMgdGhlIG5hbWUsIG9yaWdpbiBhbmQgc2tlbGV0b24gdG8gdGhhdCByZWNvcmQuIEEgaGVhZCB0aGF0IGhvbGRzIGEgbWVzc2FnZSAoZS5nLiwgYSBzdGFjayB0cmFjZSdzIGV4Y2VwdGlvbiBsaW5lKSBuYW1lcyB0aGUgZ3JvdXAuICdoZWFkJyBhbHdheXMgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBoZWFkLiAoRGVmYXVsdDogZmlyc3RXaXRoTWVzc2FnZSkiLAogICAgICAgICAgImRlZmF1bHQiIDogImZpcnN0V2l0aE1lc3NhZ2UiCiAgICAgICAgfSwKICAgICAgICAibWF4T3JpZ2lucyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heCBudW1iZXIgb2Ygc291cmNlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbFxuXG5Db250cm9scyB0aGUgbnVtYmVyIG9mIHNvdXJjZSBjb2RlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbCB0b2tlbiBzZXF1ZW5jZS4gQXMgYSBzZXJpZXMgb2YgdG9rZW5zIHdpdGhpbiAgYSBnaXZlbiB0ZW1wbGF0ZSAoZS5nLiwgJ0VSUk9SJywgJ2NvdWxkIG5vdCBjb25uZWN0IHRvIFwie30nKSBtYXkgYXBwZWFyICBpbiBtdWx0aXBsZSBzb3VyY2UvYmluYXJ5IGZpbGVzIHdpdGhpbiB0aGUgcGlwZWxpbmUncyBzeW1ib2wgZmlsZXMsIHRoZSBzb3J0aW5nIGFsZ29yaXRobSBzZWxlY3RzIFttYXhTeW1ib2xPcmlnaW5zXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xtYXhvcmlnaW5zKSBmb3IgY29tcGFyaXNvbi4gKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogNjQpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IDY0CiAgICAgICAgfSwKICAgICAgICAiZGVidWciIDogewogICAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICJvcmlnaW5zIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHNvdXJjZSBzY2FubmVkIGZpbGUgbmFtZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgd2l0aGluIHRoZSBsb2FkZWQgc3ltYm9sIGxpYnJhcnkgKGUuZy4sICdteS5zY2FsYScsICdmb28uamF2YScpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaWYvaG93IHRoZXkgcGFydGljaXBhdGUgaW4gc2VsZWN0aW5nIHRoZSBvcmlnaW4gb2YgYSB0YXJnZXQgVGVuWFRlbXBsYXRlIHN5bWJvbCBzZXF1ZW5jZS4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBpbnB1dCBmaWxlcy4iLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN5bWJvbHMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgVGVuWFRlbXBsYXRlIHN5bWJvbCB2YWx1ZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5MaXN0IG9mIHN5bWJvbCB2YWx1ZXMgc3VjaCBhcyBjbGFzcyBhbmQgbWV0aG9kIG5hbWVzKGUuZy4sICdNeUNsYXNzJywgJ2ZvbycpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaG93IHRoZWlyIG9yaWdpbiBpbmZvcm1hdGlvbiBpcyBzZWxlY3RlZC4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBzeW1ib2xzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibG9nZ2VyTmFtZSIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEZWJ1ZyBsb2dnZXIgbmFtZVxuXG5Db250cm9scyB0aGUgbmFtZSBvZiB0aGUgbG9nNGogbG9nZ2VyIHVzZWQgYnkgW2RlYnVnT3JpZ2luc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdvcmlnaW5zKSBhbmQgW2RlYnVnU3ltYm9sc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdzeW1ib2xzKS4gKERlZmF1bHQ6IFtjb25zb2xlT3V0XShodHRwczovL2dpdGh1Yi5jb20vbG9nLTEweC9jb25maWcvYmxvYi9tYWluL2xvZzRqMi55YW1sI0w2NikpIiwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiAiW2NvbnNvbGVPdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L2NvbmZpZy9ibG9iL21haW4vbG9nNGoyLnlhbWwjTDY2KSIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=</template>
6624
+ <template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAic3ltYm9sIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJzZXF1ZW5jZVJlc2VydmVkIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHRlcm1zIHRvIGlnbm9yZSB3aGVuIHNjYW5uaW5nIHN5bWJvbCB0b2tlbnNcblxuRGVmaW5lcyBhIGxpc3Qgb2YgdGVybXMgdGhhdCB0byBpZ25vcmUgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBzeW1ib2wgdG9rZW5zIGNvbnN0aXR1dGluZyBhbiBUZW5YVGVtcGxhdGUncyAnbWVzc2FnZScgcG9ydGlvbiAoaS5lLiwgdGhlIFtzeW1ib2xdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zdHJ1Y3R1cmUvI3N5bWJvbHMpIHRva2VucyBvZiB0aGUgb3JpZ2luIHJhbmtlZCBoaWdoZXN0IGJ5IGNvdmVyYWdlLCBtZWFuaW5nIHRoZSBjb3VudCBvZiBkaXN0aW5jdCBsaWJyYXJ5LWtub3duIHRva2VucyBpdCBleHBsYWluczsgc3BhbiBsZW5ndGggaXMgdGhlIGxhc3QgdGllYnJlYWspLiBGb3IgZXhhbXBsZSwgZm9yIGFuIFRlblhPYmplY3Qgd2hvc2UgdGV4dCBjb250YWluczogJ2Nvbm5lY3Qgc3VjY2VzcyA9IHRydWUnLCB0aGUgdmFsdWUgJ3RydWUnIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBwYXJ0IG9mIHRoZSBpbnN0YW5jZSdzIG1lc3NhZ2UsIGFzIGl0IGlzIG1vc3RseSBsaWtlbHkgdGhlIHJlc3VsdCBvZiBhIHZhcmlhYmxlIGJvb2xlYW4gc3RhdGUuIFRvIGxlYXJuIG1vcmUgc2VlIFtzeW1ib2xTZXF1ZW5jZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhPYmplY3Qrc3ltYm9sU2VxdWVuY2UpLiAoRGVmYXVsdDogW1wibnVsbFwiLFwibmlsXCIsXCJ0cnVlXCIsXCJmYWxzZVwiXSkiLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICJudWxsIiwKICAgICAgICAgICAgIm5pbCIsCiAgICAgICAgICAgICJ0cnVlIiwKICAgICAgICAgICAgImZhbHNlIgogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgInByZWFtYmxlIiA6IHsKICAgICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgICAiZW5jbG9zdXJlcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGFpcnMgb2Ygb3BlbiBhbmQgY2xvc2UgY2hhcmFjdGVycyB3aG9zZSB0ZXh0IGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBlbnZlbG9wZVxuXG5EZWZpbmVzIHRoZSBlbmNsb3N1cmVzIG9mIGEgbGluZSdzIHByZWFtYmxlLCBlYWNoIGFuIG9wZW4gYW5kIGEgY2xvc2UgY2hhcmFjdGVyLiBBIHdvcmQgaW5zaWRlIG9uZSBvZiB0aGVtIGJlZm9yZSB0aGUgbWVzc2FnZSAoZS5nLiwgJ21haW4nIGluICdbbWFpbl0gU3RhcnRpbmcgd29ya2VyJykgaXMgZW52ZWxvcGUgYW5kIHN0YXlzIG91dCBvZiB0aGUgVGVuWFRlbXBsYXRlJ3MgbWVzc2FnZSBuYW1lLiBBbiBvcGVuIHdpdGggbm8gY2xvc2UgYWZ0ZXIgaXQgaW4gdGhlIHNhbWUgZmllbGQgZW5jbG9zZXMgbm90aGluZywgc3VjaCBhcyB0aGUgJ1snIG9mIGEgY29sb3IgY29kZSAoJ1xcMDMzWzA7MzNtV0FSTicpIG9yIG9uZSB0aGF0IGNsb3NlcyBvbiBhIGxhdGVyIGxpbmUgb2YgYSBtdWx0aS1saW5lIGV2ZW50LiBUaGUgbWVzc2FnZSBzdGFydHMgYXQgdGhlIGZpcnN0IHdvcmQgdGhhdCBubyBwYXJ0IG9mIHRoZSBwcmVhbWJsZSBkZXNjcmliZXM6IG5vdCBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpLCBub3QgYSBbbWVzc2FnZSBrZXldKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHByZWFtYmxlbWVzc2FnZWtleXMpLCBub3QgZW5jbG9zZWQgYW5kIG5vdCBhIHJlc2VydmVkIGtleSBvciBpdHMgdmFsdWUuIChEZWZhdWx0OiBbXCJbXVwiLFwiKClcIl0pIiwKICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJkZWZhdWx0IiA6IFsKICAgICAgICAgICAgICAgICJbXSIsCiAgICAgICAgICAgICAgICAiKCkiCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYmluZCBhIGtleSB0byBpdHMgdmFsdWUgd2hlbiB0aGUga2V5IG9yIHRoZSB2YWx1ZSBpcyBxdW90ZWRcblxuRGVmaW5lcyB0aGUgY2hhcmFjdGVycyB0aGF0IGJpbmQgYSBrZXkgdG8gaXRzIHZhbHVlLCBvbmUgY2hhcmFjdGVyIGVhY2gsIHdoZW4gdGhlIGtleSBvciB0aGUgdmFsdWUgaXMgcXVvdGVkIChlLmcuLCAnXCJsZXZlbFwiOlwiaW5mb1wiJywgXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gQSBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpIGtleSBhbmQgaXRzIHZhbHVlIGFyZSBlbnZlbG9wZTsgdGhlIG1lc3NhZ2Ugc3RhcnRzIGluc2lkZSBhIFttZXNzYWdlIGtleV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9scHJlYW1ibGVtZXNzYWdla2V5cykncyB2YWx1ZS4gVW5xdW90ZWQsIGEgY29sb24gYmluZHMgbm90aGluZywgc28gJ0Vycm9yOiAxMyBJTlRFUk5BTCcgYW5kICdJTkZPOnJvb3Q6U3RhcnRpbmcnIGtlZXAgdGhlaXIgd29yZHMuIChEZWZhdWx0OiBbXCI9XCIsXCI6XCJdKSIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICAgICAiPSIsCiAgICAgICAgICAgICAgICAiOiIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJiYXJlQXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYWxzbyBiaW5kIGFuIHVucXVvdGVkIGtleSB0byBhbiB1bnF1b3RlZCB2YWx1ZVxuXG5EZWZpbmVzIHRoZSBhc3NpZ25lcnMgdGhhdCBiaW5kIGEga2V5IHdpdGhvdXQgcXVvdGVzLCBvbmUgY2hhcmFjdGVyIGVhY2gsIGFzIGxvZ2ZtdCB3cml0ZXMgdGhlbSAoZS5nLiwgJ2xldmVsPWluZm8nLCAnbG9nZ2VyPWNsZWFudXAnKS4gQW4gYXNzaWduZXIgbGlzdGVkIGhlcmUgYmluZHMgaW4gcmVjb3JkIGZvcm0gdG9vLiAoRGVmYXVsdDogW1wiPVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIj0iCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiam9pbmVycyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU2VwYXJhdG9ycyB0aGF0IGNoYWluIHdvcmRzIGludG8gb25lIG5hbWUsIHJlYWQgdG8gZmluZCBhIGdyb3VwJ3MgbGVhZFxuXG5EZWZpbmVzIHRoZSBzZXBhcmF0b3JzIHRoYXQgY2hhaW4gdHdvIG9yIG1vcmUgd29yZHMsIHdyaXR0ZW4gd2l0aG91dCB3aGl0ZXNwYWNlLCBpbnRvIG9uZSBuYW1lIChlLmcuLCAnb3JnLmFwYWNoZS5rYWZrYS5sb2cuTG9jYWxMb2cnLCAnY2FydC5jYXJ0c3RvcmUuVmFsa2V5Q2FydFN0b3JlJyksIHR5cGljYWxseSBhIGxvZ2dlciwgY2xhc3Mgb3IgZmlsZSBuYW1lLiBUaGV5IGRlY2lkZSBvbmx5IHdoaWNoIG1lbWJlciBvZiBhIG11bHRpLWxpbmUgZXZlbnQgbmFtZXMgaXQ6IGEgbWVtYmVyIHdob3NlIGV2ZXJ5IHdvcmQgaXMgc3VjaCBhIG5hbWUgb3Igb3RoZXIgZW52ZWxvcGUgZG9lcyBub3QgbGVhZCB0aGUgZ3JvdXAgKHNlZSBbc3ltYm9sR3JvdXBMZWFkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xncm91cGxlYWQpKS4gSW4gYSBtZXNzYWdlIG5hbWUgYSBqb2luZWQgbmFtZSBzdGF5cywgYXMgYSBsb2dnZXIgb3IgY2xhc3MgbmFtZSBpcyBvZnRlbiB0aGUgb25seSB0ZXh0IHRoYXQgdGVsbHMgdHdvIHN0YXRlbWVudHMgYXBhcnQuIChEZWZhdWx0OiBbXCIuXCIsXCI6OlwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIi4iLAogICAgICAgICAgICAgICAgIjo6IgogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm1lc3NhZ2VLZXlzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJLZXlzIHdob3NlIGJvdW5kIHZhbHVlIGhvbGRzIHRoZSBtZXNzYWdlXG5cbkRlZmluZXMgdGhlIGtleXMgd2hvc2UgdmFsdWUgaG9sZHMgdGhlIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHN0YXJ0cyBhdCB0aGUgdmFsdWUncyBmaXJzdCB3b3JkIHRoZSBwcmVhbWJsZSBkb2VzIG5vdCBkZXNjcmliZSAoZS5nLiwgJ3N0YXJ0aW5nJyBpbiAnbXNnPXN0YXJ0aW5nJywgJ1N1YmNoYW5uZWwnIGluICdcIm1zZ1wiOlwiW2NvcmVdW0NoYW5uZWwgIzFdIFN1YmNoYW5uZWwgY3JlYXRlZFwiJywgJ0NoYXJnZScgaW4gXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gSW4gYSByZWNvcmQgdGhhdCBvcGVucyB3aXRoICd7JywgcmVhZGluZyBzdGFydHMgYXQgdGhlIGZpcnN0IG1lc3NhZ2Uga2V5IHdpdGggYSB2YWx1ZS4gQSBtZXNzYWdlIGtleSB3aXRob3V0IGEgdmFsdWUgaXMgZW52ZWxvcGUsIGFzIGEgcmVzZXJ2ZWQgd29yZCBpcy4gKERlZmF1bHQ6IFtcIm1zZ1wiLFwibWVzc2FnZVwiLFwiYm9keVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIm1zZyIsCiAgICAgICAgICAgICAgICAibWVzc2FnZSIsCiAgICAgICAgICAgICAgICAiYm9keSIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJncm91cExlYWQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1lbWJlciBvZiBhIG11bHRpLWxpbmUgZ3JvdXAgd2hvc2UgdGV4dCBuYW1lcyB0aGUgZ3JvdXBcblxuU2VsZWN0cyB0aGUgbWVtYmVyIG9mIGEgbXVsdGktbGluZSBldmVudCBncm91cCB3aG9zZSB0ZXh0IG5hbWVzIGl0LiAnZmlyc3RXaXRoTWVzc2FnZScgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBmaXJzdCBtZW1iZXIgd2hvc2UgaW5wdXQgZmllbGQgaXMgbm90IGFsbCBlbnZlbG9wZSwgYSBuYW1lIG9mIHdvcmRzIGNoYWluZWQgYnkgYSBbam9pbmVyXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xwcmVhbWJsZWpvaW5lcnMpIGNvdW50aW5nIGFzIGVudmVsb3BlIGhlcmUsIHNvIGEgaGVhZCBzdWNoIGFzIHRoZSAuTkVUIGNvbnNvbGUgbG9nZ2VyJ3MgJ2luZm86IGNhcnQuY2FydHN0b3JlLlZhbGtleUNhcnRTdG9yZVswXScgYmVmb3JlIHRoZSByZWNvcmQgaG9sZGluZyB0aGUgbWVzc2FnZSBsZWF2ZXMgdGhlIG5hbWUsIG9yaWdpbiBhbmQgc2tlbGV0b24gdG8gdGhhdCByZWNvcmQuIEEgaGVhZCB0aGF0IGhvbGRzIGEgbWVzc2FnZSAoZS5nLiwgYSBzdGFjayB0cmFjZSdzIGV4Y2VwdGlvbiBsaW5lKSBuYW1lcyB0aGUgZ3JvdXAuICdoZWFkJyBhbHdheXMgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBoZWFkLiAoRGVmYXVsdDogZmlyc3RXaXRoTWVzc2FnZSkiLAogICAgICAgICAgImRlZmF1bHQiIDogImZpcnN0V2l0aE1lc3NhZ2UiCiAgICAgICAgfSwKICAgICAgICAibWF4T3JpZ2lucyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heCBudW1iZXIgb2Ygc291cmNlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbFxuXG5Db250cm9scyB0aGUgbnVtYmVyIG9mIHNvdXJjZSBjb2RlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbCB0b2tlbiBzZXF1ZW5jZS4gQXMgYSBzZXJpZXMgb2YgdG9rZW5zIHdpdGhpbiAgYSBnaXZlbiB0ZW1wbGF0ZSAoZS5nLiwgJ0VSUk9SJywgJ2NvdWxkIG5vdCBjb25uZWN0IHRvIFwie30nKSBtYXkgYXBwZWFyICBpbiBtdWx0aXBsZSBzb3VyY2UvYmluYXJ5IGZpbGVzIHdpdGhpbiB0aGUgcGlwZWxpbmUncyBzeW1ib2wgZmlsZXMsIHRoZSBzb3J0aW5nIGFsZ29yaXRobSBzZWxlY3RzIFttYXhTeW1ib2xPcmlnaW5zXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xtYXhvcmlnaW5zKSBmb3IgY29tcGFyaXNvbi4gKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogNjQpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IDY0CiAgICAgICAgfSwKICAgICAgICAiZGVidWciIDogewogICAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICJvcmlnaW5zIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHNvdXJjZSBzY2FubmVkIGZpbGUgbmFtZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgd2l0aGluIHRoZSBsb2FkZWQgc3ltYm9sIGxpYnJhcnkgKGUuZy4sICdteS5zY2FsYScsICdmb28uamF2YScpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaWYvaG93IHRoZXkgcGFydGljaXBhdGUgaW4gc2VsZWN0aW5nIHRoZSBvcmlnaW4gb2YgYSB0YXJnZXQgVGVuWFRlbXBsYXRlIHN5bWJvbCBzZXF1ZW5jZS4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBpbnB1dCBmaWxlcy4iLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN5bWJvbHMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgVGVuWFRlbXBsYXRlIHN5bWJvbCB2YWx1ZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5MaXN0IG9mIHN5bWJvbCB2YWx1ZXMgc3VjaCBhcyBjbGFzcyBhbmQgbWV0aG9kIG5hbWVzKGUuZy4sICdNeUNsYXNzJywgJ2ZvbycpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaG93IHRoZWlyIG9yaWdpbiBpbmZvcm1hdGlvbiBpcyBzZWxlY3RlZC4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBzeW1ib2xzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibG9nZ2VyTmFtZSIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEZWJ1ZyBsb2dnZXIgbmFtZVxuXG5Db250cm9scyB0aGUgbmFtZSBvZiB0aGUgbG9nNGogbG9nZ2VyIHVzZWQgYnkgW2RlYnVnT3JpZ2luc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdvcmlnaW5zKSBhbmQgW2RlYnVnU3ltYm9sc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdzeW1ib2xzKS4gKERlZmF1bHQ6IFtjb25zb2xlT3V0XShodHRwczovL2dpdGh1Yi5jb20vbG9nLTEweC9jb25maWcvYmxvYi9tYWluL2xvZzRqMi55YW1sI0w2NikpIiwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiAiW2NvbnNvbGVPdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L2NvbmZpZy9ibG9iL21haW4vbG9nNGoyLnlhbWwjTDY2KSIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=</template>
6625
6625
 
6626
6626
  ```yaml
6627
6627
  # 🔟❎ 'run' symbol origin configuration
@@ -6697,13 +6697,8 @@ To configure advanced options (optional) for the Retriever app, [:material-cog:
6697
6697
  - FATAL
6698
6698
  - PANIC
6699
6699
  # severity levels, lowercase (engine matching is case-sensitive).
6700
- # Note. The token "error" is intentionally NOT reserved here.
6701
- # Verification against 3254 demo events (2026-05-20) found 1280
6702
- # signal hits where the "error" key carries the actual message
6703
- # body the pattern groups; reserving it would collapse distinct
6704
- # error patterns into one.
6705
- # Note. The token "emergency" is also intentionally NOT reserved
6706
- #, sample showed only prose hits, no envelope use observed.
6700
+ # 'error' and 'emergency' are not reserved: an 'error' key often
6701
+ # carries the message itself, and 'emergency' appears as prose.
6707
6702
  - "trace"
6708
6703
  - "debug"
6709
6704
  - "info"
@@ -6725,8 +6720,7 @@ To configure advanced options (optional) for the Retriever app, [:material-cog:
6725
6720
  - "timestamp"
6726
6721
  - "ts"
6727
6722
  # 'msg' and 'message' are message keys (see 'preamble.messageKeys')
6728
- # OpenTelemetry / collector envelope (these tokens leak from the
6729
- # otelcol's Go-package logging into pattern names)
6723
+ # OpenTelemetry / collector envelope
6730
6724
  - "otel"
6731
6725
  - "otelcol"
6732
6726
  - "opentelemetry"
@@ -6740,9 +6734,7 @@ To configure advanced options (optional) for the Retriever app, [:material-cog:
6740
6734
  - "exporters"
6741
6735
  - "pipeline"
6742
6736
  - "pipelines"
6743
- # structured / envelope keys (singular + plural, engine matcher
6744
- # is exact, no stem; both forms appear in real otel logs).
6745
- # Note: "trace" is already reserved above under lowercase severity.
6737
+ # structured / envelope keys, singular and plural (matching is exact)
6746
6738
  - "service"
6747
6739
  - "services"
6748
6740
  - "instance"
@@ -6765,9 +6757,7 @@ To configure advanced options (optional) for the Retriever app, [:material-cog:
6765
6757
  - "context"
6766
6758
  - "contexts"
6767
6759
  - "baggage"
6768
- # K8s audit / Kubernetes API envelope (verified zero signal in
6769
- # the 2026-05-20 sample, every occurrence was a JSON metadata
6770
- # key or audit field)
6760
+ # Kubernetes API / audit envelope
6771
6761
  - "metadata"
6772
6762
  - "namespace"
6773
6763
  - "verb"
@@ -6778,8 +6768,7 @@ To configure advanced options (optional) for the Retriever app, [:material-cog:
6778
6768
  - "encoding"
6779
6769
  - "headers"
6780
6770
  - "duration"
6781
- # HTTP / request envelope (verified safe, appear only as
6782
- # klog field markers or JSON keys, not as message content)
6771
+ # HTTP / request envelope
6783
6772
  - "path"
6784
6773
  - "status"
6785
6774
  # generic identity keys (very common envelope tokens in JSON logs)
@@ -6788,7 +6777,7 @@ To configure advanced options (optional) for the Retriever app, [:material-cog:
6788
6777
  - "kind"
6789
6778
  - "version"
6790
6779
  - "type"
6791
- # source-location envelope (Go / Java / Python loggers leak these)
6780
+ # source-location envelope (Go / Java / Python loggers print these)
6792
6781
  - "caller"
6793
6782
  - "func"
6794
6783
  - "function"
@@ -6800,15 +6789,9 @@ To configure advanced options (optional) for the Retriever app, [:material-cog:
6800
6789
  - "method"
6801
6790
  - "stack"
6802
6791
  - "stacktrace"
6803
- # process / runtime context.
6804
- # Note. The token "host" is intentionally NOT reserved, 1018 of
6805
- # 1024 occurrences in the verification corpus were the content
6806
- # phrase "no such host" inside DNS-failure messages; reserving
6807
- # it would collapse every "no such host" pattern into one.
6808
- # Note. The token "app" is intentionally NOT reserved, 42 of 44
6809
- # occurrences were the Flask logger-name discriminator in
6810
- # "INFO in app:" lines; reserving it would collapse Python-app
6811
- # logger structure.
6792
+ # process / runtime context. 'host' and 'app' are not reserved:
6793
+ # 'host' is message text in 'no such host', and 'app' is the Flask
6794
+ # logger name that tells one application's statements from another's.
6812
6795
  - "pid"
6813
6796
  - "tid"
6814
6797
  - "process"
@@ -6837,6 +6820,9 @@ To configure advanced options (optional) for the Retriever app, [:material-cog:
6837
6820
 
6838
6821
  # 'enclosures' lists open and close character pairs: text inside them
6839
6822
  # before the message is envelope (e.g., 'main' in '[main] Starting worker').
6823
+ # An open with no close after it in the same field encloses nothing, such
6824
+ # as the '[' of a color code ('\033[0;33mWARN') or one that closes on a
6825
+ # later line of a multi-line event.
6840
6826
  enclosures: ['[]', '()']
6841
6827
 
6842
6828
  # 'assigners' lists the characters that bind a key to its value when the
@@ -6,7 +6,7 @@ Deploy a Red Hat (ubi8) container with the 10x Engine [Compiler](https://doc.log
6
6
 
7
7
  ## Image tags { #image-tags }
8
8
 
9
- Every command on this page names an explicit version, `1.1.69`. Pin a version, or a `sha256:` digest, for anything that has to come back the same twice: a CI job, a Kubernetes manifest, a runbook someone reruns in six months. Substitute the version you actually want; [Old Releases](https://doc.log10x.com/install/oldreleases/) lists what is published.
9
+ Every command on this page names an explicit version, `1.1.135`. Pin a version, or a `sha256:` digest, for anything that has to come back the same twice: a CI job, a Kubernetes manifest, a runbook someone reruns in six months. Substitute the version you actually want; [Old Releases](https://doc.log10x.com/install/oldreleases/) lists what is published.
10
10
 
11
11
  `:latest` exists on most 10x images and means one thing: the newest build of that specific image, nothing more. The tag is mutable, so it moves on the next release, and two pulls a week apart can hand you different bits with no signal that anything changed. Use it for a throwaway local try. Anywhere else, pin.
12
12
 
@@ -21,16 +21,17 @@ Two images carry no `:latest` at all, `log10x/fluentd-10x` and `log10x/fluent-bi
21
21
  1. Download the image:
22
22
 
23
23
  ``` { .console .copy }
24
- docker pull log10x/pipeline-10x:1.1.69
24
+ docker pull log10x/pipeline-10x:1.1.135
25
25
  ```
26
26
 
27
- 2. Run the following test, which will read an embedded [Sample Spark log](https://github.com/log-10x/config/blob/main/data/sample/input/sample.log), and emits [optimized](/apps/receiver/) events and [summaries](https://doc.log10x.com/run/aggregate/).
27
+ 2. Run the following test, which reads the [OpenTelemetry sample](https://github.com/log-10x/config/blob/main/data/sample/otel-sample.log) bundled in the image (500 lines of Kubernetes container output) and emits [optimized](/apps/receiver/) events and [summaries](https://doc.log10x.com/run/aggregate/).
28
28
 
29
29
  ``` { .console .copy }
30
30
  docker run \
31
31
  -v "$PWD/license.jwt:/lic/license.jwt:ro" \
32
32
  -e TENX_LICENSE_FILE=/lic/license.jwt \
33
- log10x/pipeline-10x:1.1.69
33
+ log10x/pipeline-10x:1.1.135 \
34
+ @apps/dev inputFilePath /etc/tenx/config/data/sample/otel-sample.log
34
35
  ```
35
36
 
36
37
  3. To configure, pass [CLI arguments](https://doc.log10x.com/config/cli/) or mount [config files](https://doc.log10x.com/config/yaml/) and pass them to the 10x Engine:
@@ -40,7 +41,7 @@ docker run \
40
41
  -v "$PWD/license.jwt:/lic/license.jwt:ro" \
41
42
  -e TENX_LICENSE_FILE=/lic/license.jwt \
42
43
  -v /path/to/local/my-config.yaml:/etc/log-10x/my-config.yaml \
43
- log10x/pipeline-10x:1.1.69 \
44
+ log10x/pipeline-10x:1.1.135 \
44
45
  run @/etc/log-10x/my-config.yaml
45
46
  ```
46
47
 
@@ -49,11 +50,11 @@ docker run \
49
50
  To generate [symbol libraries](https://doc.log10x.com/compile/link/#symbol-library), use the **`log10x/compiler-10x`** image, the [Compiler](https://doc.log10x.com/engine/flavors/#compiler) bundled with the source-fetch toolchain (`git`, `docker` CLI, `helm`) the [pull stage](https://doc.log10x.com/compile/pull/) shells out to. The lean `pipeline-10x` image above omits those tools.
50
51
 
51
52
  ``` { .console .copy }
52
- docker pull log10x/compiler-10x:1.1.69
53
+ docker pull log10x/compiler-10x:1.1.135
53
54
  ```
54
55
 
55
56
  ``` { .console .copy }
56
- docker run log10x/compiler-10x:1.1.69 @apps/compiler
57
+ docker run log10x/compiler-10x:1.1.135 @apps/compiler
57
58
  ```
58
59
 
59
60
  See [Compile → Deploy](https://doc.log10x.com/compile/deploy/) for full Kubernetes and CI/CD examples.
@@ -70,7 +70,7 @@ The comparator is deterministic: every key is a content-derived integer, and a f
70
70
 
71
71
  - A full five-key tie that the authorship pass also leaves undecided falls back to candidate order. Entries are keyed on content, so that order is the same in every run and on every node.
72
72
  - Two truncation caps can hide a true origin: [`symbolMaxOrigins`](https://doc.log10x.com/run/transform/symbol/#symbolmaxorigins "max number of source/binary origins to list per symbol") (default 64, the cap that binds at runtime) and [`maxSymbolUnitsPerToken`](https://doc.log10x.com/run/symbol/#maxsymbolunitspertoken "number of symbol units to retrieve when searching for the origin of an TenXTemplate symbol sequence") (default 128, approximate, stopping in the low 130s).
73
- - When the selected sequence comes back as a single token, the module re-runs the selection under the `any` context, which takes the symbol tokens in range from the first word of the message, each once, minus identifier fragments, and bypasses the comparator. The words before it are the preamble: [reserved](https://doc.log10x.com/run/transform/symbol/#symbolsequencereserved "list of terms to ignore when scanning symbol tokens") words, text inside an [enclosure](https://doc.log10x.com/run/transform/symbol/#symbolpreambleenclosures "pairs of open and close characters whose text before the message is envelope"), and a reserved key with its value, quoted or not, bound by an [assigner](https://doc.log10x.com/run/transform/symbol/#symbolpreambleassigners "characters that bind a key to its value when the key or the value is quoted"). A logger or class name such as `org.apache.kafka.log.LocalLog` stays in the name: it is often the only text that tells two statements apart. A [message key](https://doc.log10x.com/run/transform/symbol/#symbolpreamblemessagekeys "keys whose bound value holds the message") (`msg=starting`, `"msg":"Serving metrics"`, `body: 'Charge request received.'`) is preamble, and when an assigner binds it the message starts inside its value, quoted or not, at the first word none of these describe: `Subchannel` in `"msg":"[core][Channel #1] Subchannel created"`. In a record that opens with `{`, reading starts at the first such key that binds, whatever keys come before it. `:` binds only in record form, a quoted key or a quoted value, so `WARN: GF_INSTALL_PLUGINS is deprecated` and `INFO:root:Starting worker` bind nothing.
73
+ - When the selected sequence comes back as a single token, the module re-runs the selection under the `any` context, which takes the symbol tokens in range from the first word of the message, each once, minus identifier fragments, and bypasses the comparator. The words before it are the preamble: [reserved](https://doc.log10x.com/run/transform/symbol/#symbolsequencereserved "list of terms to ignore when scanning symbol tokens") words, text inside an [enclosure](https://doc.log10x.com/run/transform/symbol/#symbolpreambleenclosures "pairs of open and close characters whose text before the message is envelope") that closes within the field, and a reserved key with its value, quoted or not, bound by an [assigner](https://doc.log10x.com/run/transform/symbol/#symbolpreambleassigners "characters that bind a key to its value when the key or the value is quoted"). A logger or class name such as `org.apache.kafka.log.LocalLog` stays in the name: it is often the only text that tells two statements apart. A [message key](https://doc.log10x.com/run/transform/symbol/#symbolpreamblemessagekeys "keys whose bound value holds the message") (`msg=starting`, `"msg":"Serving metrics"`, `body: 'Charge request received.'`) is preamble, and when an assigner binds it the message starts inside its value, quoted or not, at the first word none of these describe: `Subchannel` in `"msg":"[core][Channel #1] Subchannel created"`. In a record that opens with `{`, reading starts at the first such key that binds, whatever keys come before it. `:` binds only in record form, a quoted key or a quoted value, so `WARN: GF_INSTALL_PLUGINS is deprecated` and `INFO:root:Starting worker` bind nothing.
74
74
 
75
75
  The claim the engine supports is scoped: the same engine version, the same symbol library and the same configuration give the same pattern for every event of a template, whatever other traffic the run carries and however many times it runs.
76
76
 
@@ -332,6 +332,8 @@ This approach mirrors [Protocol Buffers](https://blog.calvinsd.in/data-serializa
332
332
 
333
333
  In compact form the event's footprint is **36% in volume** (662B vs. 1835B) compared to its raw form with **no loss** of information.
334
334
 
335
+ Each timestamp travels as one epoch value, so its instant is always kept. Its text comes back exactly when written in UTC with `Z` or `+0000`, or with no zone; a timestamp with any other offset or zone name (`-0700`, `+05:30`, `PDT`, `GMT`) can come back written in another zone.
336
+
335
337
  Compacting [Grouped instances](https://doc.log10x.com/run/transform/group/ "Group and sequence TenXObjects") (e.g., stack traces) can reduce transport and storage volume by *more than 90%* compared to serializing each element of the group separately.
336
338
 
337
339
  ### :material-arrow-expand-all: Expand
@@ -314,7 +314,7 @@ Below is the default configuration from: [symbol/config.yaml](https://github.dev
314
314
  </div>
315
315
  </dialog>
316
316
 
317
- <template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAic3ltYm9sIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJzZXF1ZW5jZVJlc2VydmVkIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHRlcm1zIHRvIGlnbm9yZSB3aGVuIHNjYW5uaW5nIHN5bWJvbCB0b2tlbnNcblxuRGVmaW5lcyBhIGxpc3Qgb2YgdGVybXMgdGhhdCB0byBpZ25vcmUgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBzeW1ib2wgdG9rZW5zIGNvbnN0aXR1dGluZyBhbiBUZW5YVGVtcGxhdGUncyAnbWVzc2FnZScgcG9ydGlvbiAoaS5lLiwgdGhlIFtzeW1ib2xdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zdHJ1Y3R1cmUvI3N5bWJvbHMpIHRva2VucyBvZiB0aGUgb3JpZ2luIHJhbmtlZCBoaWdoZXN0IGJ5IGNvdmVyYWdlLCBtZWFuaW5nIHRoZSBjb3VudCBvZiBkaXN0aW5jdCBsaWJyYXJ5LWtub3duIHRva2VucyBpdCBleHBsYWluczsgc3BhbiBsZW5ndGggaXMgdGhlIGxhc3QgdGllYnJlYWspLiBGb3IgZXhhbXBsZSwgZm9yIGFuIFRlblhPYmplY3Qgd2hvc2UgdGV4dCBjb250YWluczogJ2Nvbm5lY3Qgc3VjY2VzcyA9IHRydWUnLCB0aGUgdmFsdWUgJ3RydWUnIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBwYXJ0IG9mIHRoZSBpbnN0YW5jZSdzIG1lc3NhZ2UsIGFzIGl0IGlzIG1vc3RseSBsaWtlbHkgdGhlIHJlc3VsdCBvZiBhIHZhcmlhYmxlIGJvb2xlYW4gc3RhdGUuIFRvIGxlYXJuIG1vcmUgc2VlIFtzeW1ib2xTZXF1ZW5jZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhPYmplY3Qrc3ltYm9sU2VxdWVuY2UpLiAoRGVmYXVsdDogW1wibnVsbFwiLFwibmlsXCIsXCJ0cnVlXCIsXCJmYWxzZVwiXSkiLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICJudWxsIiwKICAgICAgICAgICAgIm5pbCIsCiAgICAgICAgICAgICJ0cnVlIiwKICAgICAgICAgICAgImZhbHNlIgogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgInByZWFtYmxlIiA6IHsKICAgICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgICAiZW5jbG9zdXJlcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGFpcnMgb2Ygb3BlbiBhbmQgY2xvc2UgY2hhcmFjdGVycyB3aG9zZSB0ZXh0IGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBlbnZlbG9wZVxuXG5EZWZpbmVzIHRoZSBlbmNsb3N1cmVzIG9mIGEgbGluZSdzIHByZWFtYmxlLCBlYWNoIGFuIG9wZW4gYW5kIGEgY2xvc2UgY2hhcmFjdGVyLiBBIHdvcmQgaW5zaWRlIG9uZSBvZiB0aGVtIGJlZm9yZSB0aGUgbWVzc2FnZSAoZS5nLiwgJ21haW4nIGluICdbbWFpbl0gU3RhcnRpbmcgd29ya2VyJykgaXMgZW52ZWxvcGUgYW5kIHN0YXlzIG91dCBvZiB0aGUgVGVuWFRlbXBsYXRlJ3MgbWVzc2FnZSBuYW1lLiBUaGUgbWVzc2FnZSBzdGFydHMgYXQgdGhlIGZpcnN0IHdvcmQgdGhhdCBubyBwYXJ0IG9mIHRoZSBwcmVhbWJsZSBkZXNjcmliZXM6IG5vdCBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpLCBub3QgYSBbbWVzc2FnZSBrZXldKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHByZWFtYmxlbWVzc2FnZWtleXMpLCBub3QgZW5jbG9zZWQgYW5kIG5vdCBhIHJlc2VydmVkIGtleSBvciBpdHMgdmFsdWUuIChEZWZhdWx0OiBbXCJbXVwiLFwiKClcIl0pIiwKICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJkZWZhdWx0IiA6IFsKICAgICAgICAgICAgICAgICJbXSIsCiAgICAgICAgICAgICAgICAiKCkiCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYmluZCBhIGtleSB0byBpdHMgdmFsdWUgd2hlbiB0aGUga2V5IG9yIHRoZSB2YWx1ZSBpcyBxdW90ZWRcblxuRGVmaW5lcyB0aGUgY2hhcmFjdGVycyB0aGF0IGJpbmQgYSBrZXkgdG8gaXRzIHZhbHVlLCBvbmUgY2hhcmFjdGVyIGVhY2gsIHdoZW4gdGhlIGtleSBvciB0aGUgdmFsdWUgaXMgcXVvdGVkIChlLmcuLCAnXCJsZXZlbFwiOlwiaW5mb1wiJywgXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gQSBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpIGtleSBhbmQgaXRzIHZhbHVlIGFyZSBlbnZlbG9wZTsgdGhlIG1lc3NhZ2Ugc3RhcnRzIGluc2lkZSBhIFttZXNzYWdlIGtleV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9scHJlYW1ibGVtZXNzYWdla2V5cykncyB2YWx1ZS4gVW5xdW90ZWQsIGEgY29sb24gYmluZHMgbm90aGluZywgc28gJ0Vycm9yOiAxMyBJTlRFUk5BTCcgYW5kICdJTkZPOnJvb3Q6U3RhcnRpbmcnIGtlZXAgdGhlaXIgd29yZHMuIChEZWZhdWx0OiBbXCI9XCIsXCI6XCJdKSIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICAgICAiPSIsCiAgICAgICAgICAgICAgICAiOiIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJiYXJlQXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYWxzbyBiaW5kIGFuIHVucXVvdGVkIGtleSB0byBhbiB1bnF1b3RlZCB2YWx1ZVxuXG5EZWZpbmVzIHRoZSBhc3NpZ25lcnMgdGhhdCBiaW5kIGEga2V5IHdpdGhvdXQgcXVvdGVzLCBvbmUgY2hhcmFjdGVyIGVhY2gsIGFzIGxvZ2ZtdCB3cml0ZXMgdGhlbSAoZS5nLiwgJ2xldmVsPWluZm8nLCAnbG9nZ2VyPWNsZWFudXAnKS4gQW4gYXNzaWduZXIgbGlzdGVkIGhlcmUgYmluZHMgaW4gcmVjb3JkIGZvcm0gdG9vLiAoRGVmYXVsdDogW1wiPVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIj0iCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiam9pbmVycyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU2VwYXJhdG9ycyB0aGF0IGNoYWluIHdvcmRzIGludG8gb25lIG5hbWUsIHJlYWQgdG8gZmluZCBhIGdyb3VwJ3MgbGVhZFxuXG5EZWZpbmVzIHRoZSBzZXBhcmF0b3JzIHRoYXQgY2hhaW4gdHdvIG9yIG1vcmUgd29yZHMsIHdyaXR0ZW4gd2l0aG91dCB3aGl0ZXNwYWNlLCBpbnRvIG9uZSBuYW1lIChlLmcuLCAnb3JnLmFwYWNoZS5rYWZrYS5sb2cuTG9jYWxMb2cnLCAnY2FydC5jYXJ0c3RvcmUuVmFsa2V5Q2FydFN0b3JlJyksIHR5cGljYWxseSBhIGxvZ2dlciwgY2xhc3Mgb3IgZmlsZSBuYW1lLiBUaGV5IGRlY2lkZSBvbmx5IHdoaWNoIG1lbWJlciBvZiBhIG11bHRpLWxpbmUgZXZlbnQgbmFtZXMgaXQ6IGEgbWVtYmVyIHdob3NlIGV2ZXJ5IHdvcmQgaXMgc3VjaCBhIG5hbWUgb3Igb3RoZXIgZW52ZWxvcGUgZG9lcyBub3QgbGVhZCB0aGUgZ3JvdXAgKHNlZSBbc3ltYm9sR3JvdXBMZWFkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xncm91cGxlYWQpKS4gSW4gYSBtZXNzYWdlIG5hbWUgYSBqb2luZWQgbmFtZSBzdGF5cywgYXMgYSBsb2dnZXIgb3IgY2xhc3MgbmFtZSBpcyBvZnRlbiB0aGUgb25seSB0ZXh0IHRoYXQgdGVsbHMgdHdvIHN0YXRlbWVudHMgYXBhcnQuIChEZWZhdWx0OiBbXCIuXCIsXCI6OlwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIi4iLAogICAgICAgICAgICAgICAgIjo6IgogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm1lc3NhZ2VLZXlzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJLZXlzIHdob3NlIGJvdW5kIHZhbHVlIGhvbGRzIHRoZSBtZXNzYWdlXG5cbkRlZmluZXMgdGhlIGtleXMgd2hvc2UgdmFsdWUgaG9sZHMgdGhlIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHN0YXJ0cyBhdCB0aGUgdmFsdWUncyBmaXJzdCB3b3JkIHRoZSBwcmVhbWJsZSBkb2VzIG5vdCBkZXNjcmliZSAoZS5nLiwgJ3N0YXJ0aW5nJyBpbiAnbXNnPXN0YXJ0aW5nJywgJ1N1YmNoYW5uZWwnIGluICdcIm1zZ1wiOlwiW2NvcmVdW0NoYW5uZWwgIzFdIFN1YmNoYW5uZWwgY3JlYXRlZFwiJywgJ0NoYXJnZScgaW4gXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gSW4gYSByZWNvcmQgdGhhdCBvcGVucyB3aXRoICd7JywgcmVhZGluZyBzdGFydHMgYXQgdGhlIGZpcnN0IG1lc3NhZ2Uga2V5IHdpdGggYSB2YWx1ZS4gQSBtZXNzYWdlIGtleSB3aXRob3V0IGEgdmFsdWUgaXMgZW52ZWxvcGUsIGFzIGEgcmVzZXJ2ZWQgd29yZCBpcy4gKERlZmF1bHQ6IFtcIm1zZ1wiLFwibWVzc2FnZVwiLFwiYm9keVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIm1zZyIsCiAgICAgICAgICAgICAgICAibWVzc2FnZSIsCiAgICAgICAgICAgICAgICAiYm9keSIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJncm91cExlYWQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1lbWJlciBvZiBhIG11bHRpLWxpbmUgZ3JvdXAgd2hvc2UgdGV4dCBuYW1lcyB0aGUgZ3JvdXBcblxuU2VsZWN0cyB0aGUgbWVtYmVyIG9mIGEgbXVsdGktbGluZSBldmVudCBncm91cCB3aG9zZSB0ZXh0IG5hbWVzIGl0LiAnZmlyc3RXaXRoTWVzc2FnZScgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBmaXJzdCBtZW1iZXIgd2hvc2UgaW5wdXQgZmllbGQgaXMgbm90IGFsbCBlbnZlbG9wZSwgYSBuYW1lIG9mIHdvcmRzIGNoYWluZWQgYnkgYSBbam9pbmVyXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xwcmVhbWJsZWpvaW5lcnMpIGNvdW50aW5nIGFzIGVudmVsb3BlIGhlcmUsIHNvIGEgaGVhZCBzdWNoIGFzIHRoZSAuTkVUIGNvbnNvbGUgbG9nZ2VyJ3MgJ2luZm86IGNhcnQuY2FydHN0b3JlLlZhbGtleUNhcnRTdG9yZVswXScgYmVmb3JlIHRoZSByZWNvcmQgaG9sZGluZyB0aGUgbWVzc2FnZSBsZWF2ZXMgdGhlIG5hbWUsIG9yaWdpbiBhbmQgc2tlbGV0b24gdG8gdGhhdCByZWNvcmQuIEEgaGVhZCB0aGF0IGhvbGRzIGEgbWVzc2FnZSAoZS5nLiwgYSBzdGFjayB0cmFjZSdzIGV4Y2VwdGlvbiBsaW5lKSBuYW1lcyB0aGUgZ3JvdXAuICdoZWFkJyBhbHdheXMgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBoZWFkLiAoRGVmYXVsdDogZmlyc3RXaXRoTWVzc2FnZSkiLAogICAgICAgICAgImRlZmF1bHQiIDogImZpcnN0V2l0aE1lc3NhZ2UiCiAgICAgICAgfSwKICAgICAgICAibWF4T3JpZ2lucyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heCBudW1iZXIgb2Ygc291cmNlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbFxuXG5Db250cm9scyB0aGUgbnVtYmVyIG9mIHNvdXJjZSBjb2RlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbCB0b2tlbiBzZXF1ZW5jZS4gQXMgYSBzZXJpZXMgb2YgdG9rZW5zIHdpdGhpbiAgYSBnaXZlbiB0ZW1wbGF0ZSAoZS5nLiwgJ0VSUk9SJywgJ2NvdWxkIG5vdCBjb25uZWN0IHRvIFwie30nKSBtYXkgYXBwZWFyICBpbiBtdWx0aXBsZSBzb3VyY2UvYmluYXJ5IGZpbGVzIHdpdGhpbiB0aGUgcGlwZWxpbmUncyBzeW1ib2wgZmlsZXMsIHRoZSBzb3J0aW5nIGFsZ29yaXRobSBzZWxlY3RzIFttYXhTeW1ib2xPcmlnaW5zXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xtYXhvcmlnaW5zKSBmb3IgY29tcGFyaXNvbi4gKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogNjQpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IDY0CiAgICAgICAgfSwKICAgICAgICAiZGVidWciIDogewogICAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICJvcmlnaW5zIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHNvdXJjZSBzY2FubmVkIGZpbGUgbmFtZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgd2l0aGluIHRoZSBsb2FkZWQgc3ltYm9sIGxpYnJhcnkgKGUuZy4sICdteS5zY2FsYScsICdmb28uamF2YScpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaWYvaG93IHRoZXkgcGFydGljaXBhdGUgaW4gc2VsZWN0aW5nIHRoZSBvcmlnaW4gb2YgYSB0YXJnZXQgVGVuWFRlbXBsYXRlIHN5bWJvbCBzZXF1ZW5jZS4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBpbnB1dCBmaWxlcy4iLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN5bWJvbHMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgVGVuWFRlbXBsYXRlIHN5bWJvbCB2YWx1ZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5MaXN0IG9mIHN5bWJvbCB2YWx1ZXMgc3VjaCBhcyBjbGFzcyBhbmQgbWV0aG9kIG5hbWVzKGUuZy4sICdNeUNsYXNzJywgJ2ZvbycpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaG93IHRoZWlyIG9yaWdpbiBpbmZvcm1hdGlvbiBpcyBzZWxlY3RlZC4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBzeW1ib2xzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibG9nZ2VyTmFtZSIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEZWJ1ZyBsb2dnZXIgbmFtZVxuXG5Db250cm9scyB0aGUgbmFtZSBvZiB0aGUgbG9nNGogbG9nZ2VyIHVzZWQgYnkgW2RlYnVnT3JpZ2luc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdvcmlnaW5zKSBhbmQgW2RlYnVnU3ltYm9sc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdzeW1ib2xzKS4gKERlZmF1bHQ6IFtjb25zb2xlT3V0XShodHRwczovL2dpdGh1Yi5jb20vbG9nLTEweC9jb25maWcvYmxvYi9tYWluL2xvZzRqMi55YW1sI0w2NikpIiwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiAiW2NvbnNvbGVPdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L2NvbmZpZy9ibG9iL21haW4vbG9nNGoyLnlhbWwjTDY2KSIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=</template>
317
+ <template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAic3ltYm9sIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJzZXF1ZW5jZVJlc2VydmVkIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHRlcm1zIHRvIGlnbm9yZSB3aGVuIHNjYW5uaW5nIHN5bWJvbCB0b2tlbnNcblxuRGVmaW5lcyBhIGxpc3Qgb2YgdGVybXMgdGhhdCB0byBpZ25vcmUgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBzeW1ib2wgdG9rZW5zIGNvbnN0aXR1dGluZyBhbiBUZW5YVGVtcGxhdGUncyAnbWVzc2FnZScgcG9ydGlvbiAoaS5lLiwgdGhlIFtzeW1ib2xdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zdHJ1Y3R1cmUvI3N5bWJvbHMpIHRva2VucyBvZiB0aGUgb3JpZ2luIHJhbmtlZCBoaWdoZXN0IGJ5IGNvdmVyYWdlLCBtZWFuaW5nIHRoZSBjb3VudCBvZiBkaXN0aW5jdCBsaWJyYXJ5LWtub3duIHRva2VucyBpdCBleHBsYWluczsgc3BhbiBsZW5ndGggaXMgdGhlIGxhc3QgdGllYnJlYWspLiBGb3IgZXhhbXBsZSwgZm9yIGFuIFRlblhPYmplY3Qgd2hvc2UgdGV4dCBjb250YWluczogJ2Nvbm5lY3Qgc3VjY2VzcyA9IHRydWUnLCB0aGUgdmFsdWUgJ3RydWUnIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBwYXJ0IG9mIHRoZSBpbnN0YW5jZSdzIG1lc3NhZ2UsIGFzIGl0IGlzIG1vc3RseSBsaWtlbHkgdGhlIHJlc3VsdCBvZiBhIHZhcmlhYmxlIGJvb2xlYW4gc3RhdGUuIFRvIGxlYXJuIG1vcmUgc2VlIFtzeW1ib2xTZXF1ZW5jZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhPYmplY3Qrc3ltYm9sU2VxdWVuY2UpLiAoRGVmYXVsdDogW1wibnVsbFwiLFwibmlsXCIsXCJ0cnVlXCIsXCJmYWxzZVwiXSkiLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICJudWxsIiwKICAgICAgICAgICAgIm5pbCIsCiAgICAgICAgICAgICJ0cnVlIiwKICAgICAgICAgICAgImZhbHNlIgogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgInByZWFtYmxlIiA6IHsKICAgICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgICAiZW5jbG9zdXJlcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGFpcnMgb2Ygb3BlbiBhbmQgY2xvc2UgY2hhcmFjdGVycyB3aG9zZSB0ZXh0IGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBlbnZlbG9wZVxuXG5EZWZpbmVzIHRoZSBlbmNsb3N1cmVzIG9mIGEgbGluZSdzIHByZWFtYmxlLCBlYWNoIGFuIG9wZW4gYW5kIGEgY2xvc2UgY2hhcmFjdGVyLiBBIHdvcmQgaW5zaWRlIG9uZSBvZiB0aGVtIGJlZm9yZSB0aGUgbWVzc2FnZSAoZS5nLiwgJ21haW4nIGluICdbbWFpbl0gU3RhcnRpbmcgd29ya2VyJykgaXMgZW52ZWxvcGUgYW5kIHN0YXlzIG91dCBvZiB0aGUgVGVuWFRlbXBsYXRlJ3MgbWVzc2FnZSBuYW1lLiBBbiBvcGVuIHdpdGggbm8gY2xvc2UgYWZ0ZXIgaXQgaW4gdGhlIHNhbWUgZmllbGQgZW5jbG9zZXMgbm90aGluZywgc3VjaCBhcyB0aGUgJ1snIG9mIGEgY29sb3IgY29kZSAoJ1xcMDMzWzA7MzNtV0FSTicpIG9yIG9uZSB0aGF0IGNsb3NlcyBvbiBhIGxhdGVyIGxpbmUgb2YgYSBtdWx0aS1saW5lIGV2ZW50LiBUaGUgbWVzc2FnZSBzdGFydHMgYXQgdGhlIGZpcnN0IHdvcmQgdGhhdCBubyBwYXJ0IG9mIHRoZSBwcmVhbWJsZSBkZXNjcmliZXM6IG5vdCBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpLCBub3QgYSBbbWVzc2FnZSBrZXldKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHByZWFtYmxlbWVzc2FnZWtleXMpLCBub3QgZW5jbG9zZWQgYW5kIG5vdCBhIHJlc2VydmVkIGtleSBvciBpdHMgdmFsdWUuIChEZWZhdWx0OiBbXCJbXVwiLFwiKClcIl0pIiwKICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJkZWZhdWx0IiA6IFsKICAgICAgICAgICAgICAgICJbXSIsCiAgICAgICAgICAgICAgICAiKCkiCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYmluZCBhIGtleSB0byBpdHMgdmFsdWUgd2hlbiB0aGUga2V5IG9yIHRoZSB2YWx1ZSBpcyBxdW90ZWRcblxuRGVmaW5lcyB0aGUgY2hhcmFjdGVycyB0aGF0IGJpbmQgYSBrZXkgdG8gaXRzIHZhbHVlLCBvbmUgY2hhcmFjdGVyIGVhY2gsIHdoZW4gdGhlIGtleSBvciB0aGUgdmFsdWUgaXMgcXVvdGVkIChlLmcuLCAnXCJsZXZlbFwiOlwiaW5mb1wiJywgXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gQSBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpIGtleSBhbmQgaXRzIHZhbHVlIGFyZSBlbnZlbG9wZTsgdGhlIG1lc3NhZ2Ugc3RhcnRzIGluc2lkZSBhIFttZXNzYWdlIGtleV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9scHJlYW1ibGVtZXNzYWdla2V5cykncyB2YWx1ZS4gVW5xdW90ZWQsIGEgY29sb24gYmluZHMgbm90aGluZywgc28gJ0Vycm9yOiAxMyBJTlRFUk5BTCcgYW5kICdJTkZPOnJvb3Q6U3RhcnRpbmcnIGtlZXAgdGhlaXIgd29yZHMuIChEZWZhdWx0OiBbXCI9XCIsXCI6XCJdKSIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICAgICAiPSIsCiAgICAgICAgICAgICAgICAiOiIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJiYXJlQXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYWxzbyBiaW5kIGFuIHVucXVvdGVkIGtleSB0byBhbiB1bnF1b3RlZCB2YWx1ZVxuXG5EZWZpbmVzIHRoZSBhc3NpZ25lcnMgdGhhdCBiaW5kIGEga2V5IHdpdGhvdXQgcXVvdGVzLCBvbmUgY2hhcmFjdGVyIGVhY2gsIGFzIGxvZ2ZtdCB3cml0ZXMgdGhlbSAoZS5nLiwgJ2xldmVsPWluZm8nLCAnbG9nZ2VyPWNsZWFudXAnKS4gQW4gYXNzaWduZXIgbGlzdGVkIGhlcmUgYmluZHMgaW4gcmVjb3JkIGZvcm0gdG9vLiAoRGVmYXVsdDogW1wiPVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIj0iCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiam9pbmVycyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU2VwYXJhdG9ycyB0aGF0IGNoYWluIHdvcmRzIGludG8gb25lIG5hbWUsIHJlYWQgdG8gZmluZCBhIGdyb3VwJ3MgbGVhZFxuXG5EZWZpbmVzIHRoZSBzZXBhcmF0b3JzIHRoYXQgY2hhaW4gdHdvIG9yIG1vcmUgd29yZHMsIHdyaXR0ZW4gd2l0aG91dCB3aGl0ZXNwYWNlLCBpbnRvIG9uZSBuYW1lIChlLmcuLCAnb3JnLmFwYWNoZS5rYWZrYS5sb2cuTG9jYWxMb2cnLCAnY2FydC5jYXJ0c3RvcmUuVmFsa2V5Q2FydFN0b3JlJyksIHR5cGljYWxseSBhIGxvZ2dlciwgY2xhc3Mgb3IgZmlsZSBuYW1lLiBUaGV5IGRlY2lkZSBvbmx5IHdoaWNoIG1lbWJlciBvZiBhIG11bHRpLWxpbmUgZXZlbnQgbmFtZXMgaXQ6IGEgbWVtYmVyIHdob3NlIGV2ZXJ5IHdvcmQgaXMgc3VjaCBhIG5hbWUgb3Igb3RoZXIgZW52ZWxvcGUgZG9lcyBub3QgbGVhZCB0aGUgZ3JvdXAgKHNlZSBbc3ltYm9sR3JvdXBMZWFkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xncm91cGxlYWQpKS4gSW4gYSBtZXNzYWdlIG5hbWUgYSBqb2luZWQgbmFtZSBzdGF5cywgYXMgYSBsb2dnZXIgb3IgY2xhc3MgbmFtZSBpcyBvZnRlbiB0aGUgb25seSB0ZXh0IHRoYXQgdGVsbHMgdHdvIHN0YXRlbWVudHMgYXBhcnQuIChEZWZhdWx0OiBbXCIuXCIsXCI6OlwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIi4iLAogICAgICAgICAgICAgICAgIjo6IgogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm1lc3NhZ2VLZXlzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJLZXlzIHdob3NlIGJvdW5kIHZhbHVlIGhvbGRzIHRoZSBtZXNzYWdlXG5cbkRlZmluZXMgdGhlIGtleXMgd2hvc2UgdmFsdWUgaG9sZHMgdGhlIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHN0YXJ0cyBhdCB0aGUgdmFsdWUncyBmaXJzdCB3b3JkIHRoZSBwcmVhbWJsZSBkb2VzIG5vdCBkZXNjcmliZSAoZS5nLiwgJ3N0YXJ0aW5nJyBpbiAnbXNnPXN0YXJ0aW5nJywgJ1N1YmNoYW5uZWwnIGluICdcIm1zZ1wiOlwiW2NvcmVdW0NoYW5uZWwgIzFdIFN1YmNoYW5uZWwgY3JlYXRlZFwiJywgJ0NoYXJnZScgaW4gXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gSW4gYSByZWNvcmQgdGhhdCBvcGVucyB3aXRoICd7JywgcmVhZGluZyBzdGFydHMgYXQgdGhlIGZpcnN0IG1lc3NhZ2Uga2V5IHdpdGggYSB2YWx1ZS4gQSBtZXNzYWdlIGtleSB3aXRob3V0IGEgdmFsdWUgaXMgZW52ZWxvcGUsIGFzIGEgcmVzZXJ2ZWQgd29yZCBpcy4gKERlZmF1bHQ6IFtcIm1zZ1wiLFwibWVzc2FnZVwiLFwiYm9keVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIm1zZyIsCiAgICAgICAgICAgICAgICAibWVzc2FnZSIsCiAgICAgICAgICAgICAgICAiYm9keSIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJncm91cExlYWQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1lbWJlciBvZiBhIG11bHRpLWxpbmUgZ3JvdXAgd2hvc2UgdGV4dCBuYW1lcyB0aGUgZ3JvdXBcblxuU2VsZWN0cyB0aGUgbWVtYmVyIG9mIGEgbXVsdGktbGluZSBldmVudCBncm91cCB3aG9zZSB0ZXh0IG5hbWVzIGl0LiAnZmlyc3RXaXRoTWVzc2FnZScgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBmaXJzdCBtZW1iZXIgd2hvc2UgaW5wdXQgZmllbGQgaXMgbm90IGFsbCBlbnZlbG9wZSwgYSBuYW1lIG9mIHdvcmRzIGNoYWluZWQgYnkgYSBbam9pbmVyXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xwcmVhbWJsZWpvaW5lcnMpIGNvdW50aW5nIGFzIGVudmVsb3BlIGhlcmUsIHNvIGEgaGVhZCBzdWNoIGFzIHRoZSAuTkVUIGNvbnNvbGUgbG9nZ2VyJ3MgJ2luZm86IGNhcnQuY2FydHN0b3JlLlZhbGtleUNhcnRTdG9yZVswXScgYmVmb3JlIHRoZSByZWNvcmQgaG9sZGluZyB0aGUgbWVzc2FnZSBsZWF2ZXMgdGhlIG5hbWUsIG9yaWdpbiBhbmQgc2tlbGV0b24gdG8gdGhhdCByZWNvcmQuIEEgaGVhZCB0aGF0IGhvbGRzIGEgbWVzc2FnZSAoZS5nLiwgYSBzdGFjayB0cmFjZSdzIGV4Y2VwdGlvbiBsaW5lKSBuYW1lcyB0aGUgZ3JvdXAuICdoZWFkJyBhbHdheXMgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBoZWFkLiAoRGVmYXVsdDogZmlyc3RXaXRoTWVzc2FnZSkiLAogICAgICAgICAgImRlZmF1bHQiIDogImZpcnN0V2l0aE1lc3NhZ2UiCiAgICAgICAgfSwKICAgICAgICAibWF4T3JpZ2lucyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heCBudW1iZXIgb2Ygc291cmNlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbFxuXG5Db250cm9scyB0aGUgbnVtYmVyIG9mIHNvdXJjZSBjb2RlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbCB0b2tlbiBzZXF1ZW5jZS4gQXMgYSBzZXJpZXMgb2YgdG9rZW5zIHdpdGhpbiAgYSBnaXZlbiB0ZW1wbGF0ZSAoZS5nLiwgJ0VSUk9SJywgJ2NvdWxkIG5vdCBjb25uZWN0IHRvIFwie30nKSBtYXkgYXBwZWFyICBpbiBtdWx0aXBsZSBzb3VyY2UvYmluYXJ5IGZpbGVzIHdpdGhpbiB0aGUgcGlwZWxpbmUncyBzeW1ib2wgZmlsZXMsIHRoZSBzb3J0aW5nIGFsZ29yaXRobSBzZWxlY3RzIFttYXhTeW1ib2xPcmlnaW5zXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xtYXhvcmlnaW5zKSBmb3IgY29tcGFyaXNvbi4gKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogNjQpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IDY0CiAgICAgICAgfSwKICAgICAgICAiZGVidWciIDogewogICAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICJvcmlnaW5zIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHNvdXJjZSBzY2FubmVkIGZpbGUgbmFtZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgd2l0aGluIHRoZSBsb2FkZWQgc3ltYm9sIGxpYnJhcnkgKGUuZy4sICdteS5zY2FsYScsICdmb28uamF2YScpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaWYvaG93IHRoZXkgcGFydGljaXBhdGUgaW4gc2VsZWN0aW5nIHRoZSBvcmlnaW4gb2YgYSB0YXJnZXQgVGVuWFRlbXBsYXRlIHN5bWJvbCBzZXF1ZW5jZS4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBpbnB1dCBmaWxlcy4iLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN5bWJvbHMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgVGVuWFRlbXBsYXRlIHN5bWJvbCB2YWx1ZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5MaXN0IG9mIHN5bWJvbCB2YWx1ZXMgc3VjaCBhcyBjbGFzcyBhbmQgbWV0aG9kIG5hbWVzKGUuZy4sICdNeUNsYXNzJywgJ2ZvbycpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaG93IHRoZWlyIG9yaWdpbiBpbmZvcm1hdGlvbiBpcyBzZWxlY3RlZC4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBzeW1ib2xzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibG9nZ2VyTmFtZSIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEZWJ1ZyBsb2dnZXIgbmFtZVxuXG5Db250cm9scyB0aGUgbmFtZSBvZiB0aGUgbG9nNGogbG9nZ2VyIHVzZWQgYnkgW2RlYnVnT3JpZ2luc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdvcmlnaW5zKSBhbmQgW2RlYnVnU3ltYm9sc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdzeW1ib2xzKS4gKERlZmF1bHQ6IFtjb25zb2xlT3V0XShodHRwczovL2dpdGh1Yi5jb20vbG9nLTEweC9jb25maWcvYmxvYi9tYWluL2xvZzRqMi55YW1sI0w2NikpIiwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiAiW2NvbnNvbGVPdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L2NvbmZpZy9ibG9iL21haW4vbG9nNGoyLnlhbWwjTDY2KSIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=</template>
318
318
 
319
319
  ```yaml
320
320
  # 🔟❎ 'run' symbol origin configuration
@@ -390,13 +390,8 @@ symbol:
390
390
  - FATAL
391
391
  - PANIC
392
392
  # severity levels, lowercase (engine matching is case-sensitive).
393
- # Note. The token "error" is intentionally NOT reserved here.
394
- # Verification against 3254 demo events (2026-05-20) found 1280
395
- # signal hits where the "error" key carries the actual message
396
- # body the pattern groups; reserving it would collapse distinct
397
- # error patterns into one.
398
- # Note. The token "emergency" is also intentionally NOT reserved
399
- #, sample showed only prose hits, no envelope use observed.
393
+ # 'error' and 'emergency' are not reserved: an 'error' key often
394
+ # carries the message itself, and 'emergency' appears as prose.
400
395
  - "trace"
401
396
  - "debug"
402
397
  - "info"
@@ -418,8 +413,7 @@ symbol:
418
413
  - "timestamp"
419
414
  - "ts"
420
415
  # 'msg' and 'message' are message keys (see 'preamble.messageKeys')
421
- # OpenTelemetry / collector envelope (these tokens leak from the
422
- # otelcol's Go-package logging into pattern names)
416
+ # OpenTelemetry / collector envelope
423
417
  - "otel"
424
418
  - "otelcol"
425
419
  - "opentelemetry"
@@ -433,9 +427,7 @@ symbol:
433
427
  - "exporters"
434
428
  - "pipeline"
435
429
  - "pipelines"
436
- # structured / envelope keys (singular + plural, engine matcher
437
- # is exact, no stem; both forms appear in real otel logs).
438
- # Note: "trace" is already reserved above under lowercase severity.
430
+ # structured / envelope keys, singular and plural (matching is exact)
439
431
  - "service"
440
432
  - "services"
441
433
  - "instance"
@@ -458,9 +450,7 @@ symbol:
458
450
  - "context"
459
451
  - "contexts"
460
452
  - "baggage"
461
- # K8s audit / Kubernetes API envelope (verified zero signal in
462
- # the 2026-05-20 sample, every occurrence was a JSON metadata
463
- # key or audit field)
453
+ # Kubernetes API / audit envelope
464
454
  - "metadata"
465
455
  - "namespace"
466
456
  - "verb"
@@ -471,8 +461,7 @@ symbol:
471
461
  - "encoding"
472
462
  - "headers"
473
463
  - "duration"
474
- # HTTP / request envelope (verified safe, appear only as
475
- # klog field markers or JSON keys, not as message content)
464
+ # HTTP / request envelope
476
465
  - "path"
477
466
  - "status"
478
467
  # generic identity keys (very common envelope tokens in JSON logs)
@@ -481,7 +470,7 @@ symbol:
481
470
  - "kind"
482
471
  - "version"
483
472
  - "type"
484
- # source-location envelope (Go / Java / Python loggers leak these)
473
+ # source-location envelope (Go / Java / Python loggers print these)
485
474
  - "caller"
486
475
  - "func"
487
476
  - "function"
@@ -493,15 +482,9 @@ symbol:
493
482
  - "method"
494
483
  - "stack"
495
484
  - "stacktrace"
496
- # process / runtime context.
497
- # Note. The token "host" is intentionally NOT reserved, 1018 of
498
- # 1024 occurrences in the verification corpus were the content
499
- # phrase "no such host" inside DNS-failure messages; reserving
500
- # it would collapse every "no such host" pattern into one.
501
- # Note. The token "app" is intentionally NOT reserved, 42 of 44
502
- # occurrences were the Flask logger-name discriminator in
503
- # "INFO in app:" lines; reserving it would collapse Python-app
504
- # logger structure.
485
+ # process / runtime context. 'host' and 'app' are not reserved:
486
+ # 'host' is message text in 'no such host', and 'app' is the Flask
487
+ # logger name that tells one application's statements from another's.
505
488
  - "pid"
506
489
  - "tid"
507
490
  - "process"
@@ -530,6 +513,9 @@ symbol:
530
513
 
531
514
  # 'enclosures' lists open and close character pairs: text inside them
532
515
  # before the message is envelope (e.g., 'main' in '[main] Starting worker').
516
+ # An open with no close after it in the same field encloses nothing, such
517
+ # as the '[' of a color code ('\033[0;33mWARN') or one that closes on a
518
+ # later line of a multi-line event.
533
519
  enclosures: ['[]', '()']
534
520
 
535
521
  # 'assigners' lists the characters that bind a key to its value when the
@@ -654,7 +640,9 @@ Pairs of open and close characters whose text before the message is envelope.
654
640
 
655
641
  Defines the enclosures of a line's preamble, each an open and a close character.
656
642
  A word inside one of them before the message (e.g., 'main' in '\[main\] Starting worker')
657
- is envelope and stays out of the TenXTemplate's message name.
643
+ is envelope and stays out of the TenXTemplate's message name. An open with no close after it
644
+ in the same field encloses nothing, such as the '\[' of a color code ('\\033\[0;33mWARN') or one
645
+ that closes on a later line of a multi-line event.
658
646
  The message starts at the first word that no part of the preamble describes:
659
647
  not [reserved](https://doc.log10x.com/run/transform/symbol/#symbolsequencereserved "list of terms to ignore when scanning symbol tokens"),
660
648
  not a [message key](https://doc.log10x.com/run/transform/symbol/#symbolpreamblemessagekeys "keys whose bound value holds the message"),
@@ -136,14 +136,14 @@ export const compileSchema = {
136
136
  mode: z
137
137
  .enum(['auto', 'docker', 'local'])
138
138
  .default('auto')
139
- .describe('Execution backend. `auto` (default) prefers Docker (the compiler image, guaranteed compiler flavor) and falls back to a local compiler-flavor tenx; the backend is chosen once, before the output folder is keyed. `docker` forces the image (LOG10X_COMPILER_IMAGE or LOG10X_TENX_IMAGE, default log10x/compiler-10x:1.1.133 pinned by digest, so every run goes through the same compiler). `local` forces the binary (LOG10X_TENX_PATH or `tenx` on PATH) and refuses it unless its version banner reports the compiler flavor (`compiler`, or `cloud` on an engine built before the flavor rename). Of the three shipped flavors only `compiler` can compile: `runtime` (native binary) and `runtime-jvm` (JVM-packaged runtime, the only runtime available on Windows) are both refused, since neither carries the `generate` pipeline unit. With a local install, local-folder compilation and GitHub pull (REST API + token) work out of the box; docker_images pull additionally needs a container engine (podman or docker) on the host. The docker `compiler-10x` image bundles all of those (podman included, daemonless), which is why Docker is the default.'),
139
+ .describe('Execution backend. `auto` (default) prefers Docker (the compiler image, guaranteed compiler flavor) and falls back to a local compiler-flavor tenx; the backend is chosen once, before the output folder is keyed. `docker` forces the image (LOG10X_COMPILER_IMAGE or LOG10X_TENX_IMAGE, default log10x/compiler-10x:1.1.136 pinned by digest, so every run goes through the same compiler). `local` forces the binary (LOG10X_TENX_PATH or `tenx` on PATH) and refuses it unless its version banner reports the compiler flavor (`compiler`, or `cloud` on an engine built before the flavor rename). Of the three shipped flavors only `compiler` can compile: `runtime` (native binary) and `runtime-jvm` (JVM-packaged runtime, the only runtime available on Windows) are both refused, since neither carries the `generate` pipeline unit. With a local install, local-folder compilation and GitHub pull (REST API + token) work out of the box; docker_images pull additionally needs a container engine (podman or docker) on the host. The docker `compiler-10x` image bundles all of those (podman included, daemonless), which is why Docker is the default.'),
140
140
  timeout_ms: z
141
141
  .number()
142
142
  .int()
143
143
  .min(10_000)
144
144
  .max(3_600_000)
145
145
  .default(1_800_000)
146
- .describe('Hard cap on compile wall time in milliseconds. Default 1,800,000 (30 min). The engine\'s own whole-scan cap (scanOperationTimeout, bundled default 10 min) is raised to 90% of this value on the command line, so the engine cap follows this value (needs compiler 1.1.89+; the pinned default is 1.1.133; an older local engine keeps its 10 min cap). A re-run over unchanged local sources skips every file whose checksum already has a unit and finishes in seconds. Pulled sources (GitHub, images, Artifactory) are re-checked remotely each run and downloaded again only when the remote changed; Helm charts are rendered again every run.'),
146
+ .describe('Hard cap on compile wall time in milliseconds. Default 1,800,000 (30 min). The engine\'s own whole-scan cap (scanOperationTimeout, bundled default 10 min) is raised to 90% of this value on the command line, so the engine cap follows this value (needs compiler 1.1.89+; the pinned default is 1.1.136; an older local engine keeps its 10 min cap). A re-run over unchanged local sources skips every file whose checksum already has a unit and finishes in seconds. Pulled sources (GitHub, images, Artifactory) are re-checked remotely each run and downloaded again only when the remote changed; Helm charts are rendered again every run.'),
147
147
  };
148
148
  const GITHUB_REPO_RE = /^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;
149
149
  const HELM_REPO_NAME_RE = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "log10x-mcp",
3
- "version": "1.30.38",
3
+ "version": "1.30.39",
4
4
  "description": "Rank log patterns by cost, then compact, tier down or offload them. No log data reaches log10x.",
5
5
  "mcpName": "io.github.log-10x/log10x-mcp",
6
6
  "type": "module",