From 22e9473e69bc133ca290379e130a1485678159f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesu=CC=81s=20Pe=CC=81rez?= Date: Fri, 23 Jan 2026 16:11:07 +0000 Subject: [PATCH] chore: add docs --- CHANGELOG.md | 336 + CODE_OF_CONDUCT.md | 105 + CONTRIBUTING.md | 130 + SECURITY.md | 98 + assets/branding/README.md | 147 + assets/branding/index.html | 1304 ++++ assets/branding/kogral-assets-showcase.html | 1552 ++++ assets/icons/kogral-icon-mono-black.svg | 221 + assets/icons/kogral-icon-static.svg | 221 + assets/icons/kogral-icon.svg | 228 + assets/kogral-logo.svg | 354 + assets/logos/kogral-favicon-16.svg | 34 + assets/logos/kogral-favicon-32.svg | 58 + assets/logos/kogral-h-static.svg | 296 + assets/logos/kogral-h.svg | 354 + assets/logos/kogral-mono-black-h.svg | 293 + assets/logos/kogral-mono-black-v.svg | 309 + assets/logos/kogral-mono-white-h.svg | 293 + assets/logos/kogral-mono-white-v.svg | 309 + assets/logos/kogral-v-static.svg | 267 + assets/logos/kogral-v.svg | 309 + assets/web/README.md | 328 + assets/web/index.html | 1 + assets/web/kogral.svg | 354 + assets/web/minify.sh | 87 + assets/web/src/index.html | 956 +++ assets/web/src/kogral.svg | 354 + docs/README.md | 354 + docs/SUMMARY.md | 103 + docs/ai/embeddings-overview.md | 1 + docs/ai/fastembed.md | 1 + docs/ai/ollama.md | 1 + docs/ai/openai.md | 1 + docs/ai/providers.md | 1 + docs/ai/semantic-search.md | 1 + docs/api/README.md | 229 + docs/api/mcp-protocol.md | 1 + docs/api/mcp-resources.md | 1 + docs/api/mcp-tools.md | 902 +++ docs/api/rust-api.md | 1 + docs/apps/claude-code.md | 1 + docs/apps/git.md | 1 + docs/apps/logseq.md | 1 + docs/apps/mcp-quickguide.md | 488 ++ docs/apps/obsidian.md | 1 + docs/architecture/adrs/001-nickel-vs-toml.md | 313 + .../adrs/002-fastembed-ai-providers.md | 357 + docs/architecture/adrs/003-hybrid-storage.md | 449 ++ .../adrs/004-logseq-blocks-support.md | 196 + docs/architecture/adrs/005-mcp-protocol.md | 1 + docs/architecture/config-driven.md | 539 ++ docs/architecture/graph-model.md | 1 + docs/architecture/logseq-blocks-design.md | 935 +++ docs/architecture/overview.md | 486 ++ docs/architecture/storage-architecture.md | 1 + docs/book.toml | 38 + docs/book/.nojekyll | 1 + docs/book/404.html | 214 + docs/book/FontAwesome/css/font-awesome.css | 4 + docs/book/FontAwesome/fonts/FontAwesome.ttf | Bin 0 -> 165548 bytes .../FontAwesome/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes .../FontAwesome/fonts/fontawesome-webfont.svg | 2671 +++++++ .../FontAwesome/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes .../fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes .../fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes docs/book/ai/claude.html | 227 + docs/book/ai/embeddings-overview.html | 227 + docs/book/ai/fastembed.html | 227 + docs/book/ai/ollama.html | 227 + docs/book/ai/openai.html | 227 + docs/book/ai/providers.html | 227 + docs/book/ai/semantic-search.html | 227 + docs/book/api/mcp-protocol.html | 227 + docs/book/api/mcp-resources.html | 227 + docs/book/api/mcp-tools.html | 942 +++ docs/book/api/rust-api.html | 227 + docs/book/apps/claude-code.html | 227 + docs/book/apps/git.html | 227 + docs/book/apps/logseq.html | 227 + docs/book/apps/mcp-quickguide.html | 561 ++ docs/book/apps/obsidian.html | 227 + .../architecture/adrs/001-nickel-vs-toml.html | 508 ++ .../adrs/002-fastembed-ai-providers.html | 566 ++ .../architecture/adrs/003-hybrid-storage.html | 629 ++ .../adrs/004-logseq-blocks-support.html | 391 + .../architecture/adrs/005-mcp-protocol.html | 227 + docs/book/architecture/config-driven.html | 660 ++ docs/book/architecture/graph-model.html | 227 + .../architecture/logseq-blocks-design.html | 1129 +++ docs/book/architecture/overview.html | 667 ++ .../architecture/storage-architecture.html | 227 + docs/book/ayu-highlight.css | 78 + docs/book/book.js | 818 ++ docs/book/book.toml | 38 + docs/book/cli/commands.html | 227 + docs/book/cli/overview.html | 227 + docs/book/cli/workflows.html | 227 + docs/book/clipboard.min.js | 7 + docs/book/config/examples.html | 227 + docs/book/config/graph-settings.html | 227 + docs/book/config/inheritance.html | 227 + docs/book/config/nickel-schemas.html | 227 + docs/book/config/overview.html | 227 + docs/book/contributing/development.html | 227 + docs/book/contributing/standards.html | 227 + docs/book/contributing/testing.html | 221 + docs/book/css/chrome.css | 701 ++ docs/book/css/general.css | 279 + docs/book/css/print.css | 50 + docs/book/css/variables.css | 330 + docs/book/diagrams/architecture-overview.svg | 116 + docs/book/diagrams/config-composition.svg | 133 + docs/book/diagrams/core-concepts.svg | 148 + docs/book/diagrams/storage-architecture.svg | 137 + docs/book/elasticlunr.min.js | 10 + docs/book/favicon.png | Bin 0 -> 5679 bytes docs/book/favicon.svg | 22 + docs/book/fonts/OPEN-SANS-LICENSE.txt | 202 + docs/book/fonts/SOURCE-CODE-PRO-LICENSE.txt | 93 + docs/book/fonts/fonts.css | 100 + .../open-sans-v17-all-charsets-300.woff2 | Bin 0 -> 44352 bytes ...open-sans-v17-all-charsets-300italic.woff2 | Bin 0 -> 40656 bytes .../open-sans-v17-all-charsets-600.woff2 | Bin 0 -> 44936 bytes ...open-sans-v17-all-charsets-600italic.woff2 | Bin 0 -> 42120 bytes .../open-sans-v17-all-charsets-700.woff2 | Bin 0 -> 44988 bytes ...open-sans-v17-all-charsets-700italic.woff2 | Bin 0 -> 40800 bytes .../open-sans-v17-all-charsets-800.woff2 | Bin 0 -> 44536 bytes ...open-sans-v17-all-charsets-800italic.woff2 | Bin 0 -> 40812 bytes .../open-sans-v17-all-charsets-italic.woff2 | Bin 0 -> 41076 bytes .../open-sans-v17-all-charsets-regular.woff2 | Bin 0 -> 43236 bytes ...source-code-pro-v11-all-charsets-500.woff2 | Bin 0 -> 59140 bytes docs/book/guides/best-practices.html | 227 + docs/book/guides/daily-workflows.html | 227 + docs/book/guides/installation.html | 510 ++ docs/book/guides/quickstart.html | 495 ++ docs/book/guides/use-cases.html | 674 ++ docs/book/highlight.css | 83 + docs/book/highlight.js | 54 + docs/book/index.html | 504 ++ docs/book/kogral/core-concepts.html | 709 ++ docs/book/kogral/design-philosophy.html | 622 ++ docs/book/kogral/what-is-kogral.html | 423 + docs/book/kogral/why-kogral.html | 461 ++ docs/book/mark.min.js | 7 + docs/book/print.html | 6877 +++++++++++++++++ docs/book/searcher.js | 529 ++ docs/book/searchindex.js | 1 + docs/book/setup/environment.html | 227 + docs/book/setup/installation.html | 227 + docs/book/setup/prerequisites.html | 227 + docs/book/setup/project-init.html | 227 + docs/book/setup/verification.html | 227 + docs/book/storage/backends.html | 227 + docs/book/storage/filesystem.html | 227 + docs/book/storage/memory.html | 227 + docs/book/storage/surrealdb.html | 227 + docs/book/storage/sync.html | 227 + docs/book/templates/customization.html | 227 + docs/book/templates/documents.html | 227 + docs/book/templates/export.html | 227 + docs/book/templates/overview.html | 227 + docs/book/toc.html | 32 + docs/book/toc.js | 70 + docs/book/tomorrow-night.css | 104 + docs/cli/README.md | 25 + docs/cli/commands.md | 1 + docs/cli/overview.md | 242 + docs/cli/workflows.md | 1 + docs/config/examples.md | 1 + docs/config/graph-settings.md | 1 + docs/config/inheritance.md | 1 + docs/config/nickel-schemas.md | 1 + docs/config/overview.md | 1 + docs/contributing/development.md | 1 + docs/contributing/standards.md | 1 + docs/contributing/testing.md | 1 + docs/diagrams/architecture-overview.svg | 116 + docs/diagrams/config-composition.svg | 133 + docs/diagrams/core-concepts.svg | 148 + docs/diagrams/storage-architecture.svg | 137 + docs/guides/best-practices.md | 1 + docs/guides/daily-workflows.md | 1 + docs/guides/installation.md | 380 + docs/guides/quickstart.md | 383 + docs/guides/use-cases.md | 578 ++ docs/kogral/core-concepts.md | 622 ++ docs/kogral/design-philosophy.md | 471 ++ docs/kogral/what-is-kogral.md | 228 + docs/kogral/why-kogral.md | 317 + docs/setup/environment.md | 1 + docs/setup/installation.md | 1 + docs/setup/prerequisites.md | 1 + docs/setup/project-init.md | 1 + docs/setup/verification.md | 1 + docs/storage/backends.md | 1 + docs/storage/filesystem.md | 1 + docs/storage/memory.md | 1 + docs/storage/overview.md | 639 ++ docs/storage/surrealdb.md | 1 + docs/storage/sync.md | 1 + docs/templates/customization.md | 1 + docs/templates/documents.md | 1 + docs/templates/export.md | 1 + docs/templates/overview.md | 1 + docs/user-guide/README.md | 36 + docs/user-guide/configuration.md | 635 ++ 206 files changed, 54161 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 SECURITY.md create mode 100644 assets/branding/README.md create mode 100644 assets/branding/index.html create mode 100644 assets/branding/kogral-assets-showcase.html create mode 100644 assets/icons/kogral-icon-mono-black.svg create mode 100644 assets/icons/kogral-icon-static.svg create mode 100644 assets/icons/kogral-icon.svg create mode 100644 assets/kogral-logo.svg create mode 100644 assets/logos/kogral-favicon-16.svg create mode 100644 assets/logos/kogral-favicon-32.svg create mode 100644 assets/logos/kogral-h-static.svg create mode 100644 assets/logos/kogral-h.svg create mode 100644 assets/logos/kogral-mono-black-h.svg create mode 100644 assets/logos/kogral-mono-black-v.svg create mode 100644 assets/logos/kogral-mono-white-h.svg create mode 100644 assets/logos/kogral-mono-white-v.svg create mode 100644 assets/logos/kogral-v-static.svg create mode 100644 assets/logos/kogral-v.svg create mode 100644 assets/web/README.md create mode 100644 assets/web/index.html create mode 100644 assets/web/kogral.svg create mode 100755 assets/web/minify.sh create mode 100644 assets/web/src/index.html create mode 100644 assets/web/src/kogral.svg create mode 100644 docs/README.md create mode 100644 docs/SUMMARY.md create mode 100644 docs/ai/embeddings-overview.md create mode 100644 docs/ai/fastembed.md create mode 100644 docs/ai/ollama.md create mode 100644 docs/ai/openai.md create mode 100644 docs/ai/providers.md create mode 100644 docs/ai/semantic-search.md create mode 100644 docs/api/README.md create mode 100644 docs/api/mcp-protocol.md create mode 100644 docs/api/mcp-resources.md create mode 100644 docs/api/mcp-tools.md create mode 100644 docs/api/rust-api.md create mode 100644 docs/apps/claude-code.md create mode 100644 docs/apps/git.md create mode 100644 docs/apps/logseq.md create mode 100644 docs/apps/mcp-quickguide.md create mode 100644 docs/apps/obsidian.md create mode 100644 docs/architecture/adrs/001-nickel-vs-toml.md create mode 100644 docs/architecture/adrs/002-fastembed-ai-providers.md create mode 100644 docs/architecture/adrs/003-hybrid-storage.md create mode 100644 docs/architecture/adrs/004-logseq-blocks-support.md create mode 100644 docs/architecture/adrs/005-mcp-protocol.md create mode 100644 docs/architecture/config-driven.md create mode 100644 docs/architecture/graph-model.md create mode 100644 docs/architecture/logseq-blocks-design.md create mode 100644 docs/architecture/overview.md create mode 100644 docs/architecture/storage-architecture.md create mode 100644 docs/book.toml create mode 100644 docs/book/.nojekyll create mode 100644 docs/book/404.html create mode 100644 docs/book/FontAwesome/css/font-awesome.css create mode 100644 docs/book/FontAwesome/fonts/FontAwesome.ttf create mode 100644 docs/book/FontAwesome/fonts/fontawesome-webfont.eot create mode 100644 docs/book/FontAwesome/fonts/fontawesome-webfont.svg create mode 100644 docs/book/FontAwesome/fonts/fontawesome-webfont.ttf create mode 100644 docs/book/FontAwesome/fonts/fontawesome-webfont.woff create mode 100644 docs/book/FontAwesome/fonts/fontawesome-webfont.woff2 create mode 100644 docs/book/ai/claude.html create mode 100644 docs/book/ai/embeddings-overview.html create mode 100644 docs/book/ai/fastembed.html create mode 100644 docs/book/ai/ollama.html create mode 100644 docs/book/ai/openai.html create mode 100644 docs/book/ai/providers.html create mode 100644 docs/book/ai/semantic-search.html create mode 100644 docs/book/api/mcp-protocol.html create mode 100644 docs/book/api/mcp-resources.html create mode 100644 docs/book/api/mcp-tools.html create mode 100644 docs/book/api/rust-api.html create mode 100644 docs/book/apps/claude-code.html create mode 100644 docs/book/apps/git.html create mode 100644 docs/book/apps/logseq.html create mode 100644 docs/book/apps/mcp-quickguide.html create mode 100644 docs/book/apps/obsidian.html create mode 100644 docs/book/architecture/adrs/001-nickel-vs-toml.html create mode 100644 docs/book/architecture/adrs/002-fastembed-ai-providers.html create mode 100644 docs/book/architecture/adrs/003-hybrid-storage.html create mode 100644 docs/book/architecture/adrs/004-logseq-blocks-support.html create mode 100644 docs/book/architecture/adrs/005-mcp-protocol.html create mode 100644 docs/book/architecture/config-driven.html create mode 100644 docs/book/architecture/graph-model.html create mode 100644 docs/book/architecture/logseq-blocks-design.html create mode 100644 docs/book/architecture/overview.html create mode 100644 docs/book/architecture/storage-architecture.html create mode 100644 docs/book/ayu-highlight.css create mode 100644 docs/book/book.js create mode 100644 docs/book/book.toml create mode 100644 docs/book/cli/commands.html create mode 100644 docs/book/cli/overview.html create mode 100644 docs/book/cli/workflows.html create mode 100644 docs/book/clipboard.min.js create mode 100644 docs/book/config/examples.html create mode 100644 docs/book/config/graph-settings.html create mode 100644 docs/book/config/inheritance.html create mode 100644 docs/book/config/nickel-schemas.html create mode 100644 docs/book/config/overview.html create mode 100644 docs/book/contributing/development.html create mode 100644 docs/book/contributing/standards.html create mode 100644 docs/book/contributing/testing.html create mode 100644 docs/book/css/chrome.css create mode 100644 docs/book/css/general.css create mode 100644 docs/book/css/print.css create mode 100644 docs/book/css/variables.css create mode 100644 docs/book/diagrams/architecture-overview.svg create mode 100644 docs/book/diagrams/config-composition.svg create mode 100644 docs/book/diagrams/core-concepts.svg create mode 100644 docs/book/diagrams/storage-architecture.svg create mode 100644 docs/book/elasticlunr.min.js create mode 100644 docs/book/favicon.png create mode 100644 docs/book/favicon.svg create mode 100644 docs/book/fonts/OPEN-SANS-LICENSE.txt create mode 100644 docs/book/fonts/SOURCE-CODE-PRO-LICENSE.txt create mode 100644 docs/book/fonts/fonts.css create mode 100644 docs/book/fonts/open-sans-v17-all-charsets-300.woff2 create mode 100644 docs/book/fonts/open-sans-v17-all-charsets-300italic.woff2 create mode 100644 docs/book/fonts/open-sans-v17-all-charsets-600.woff2 create mode 100644 docs/book/fonts/open-sans-v17-all-charsets-600italic.woff2 create mode 100644 docs/book/fonts/open-sans-v17-all-charsets-700.woff2 create mode 100644 docs/book/fonts/open-sans-v17-all-charsets-700italic.woff2 create mode 100644 docs/book/fonts/open-sans-v17-all-charsets-800.woff2 create mode 100644 docs/book/fonts/open-sans-v17-all-charsets-800italic.woff2 create mode 100644 docs/book/fonts/open-sans-v17-all-charsets-italic.woff2 create mode 100644 docs/book/fonts/open-sans-v17-all-charsets-regular.woff2 create mode 100644 docs/book/fonts/source-code-pro-v11-all-charsets-500.woff2 create mode 100644 docs/book/guides/best-practices.html create mode 100644 docs/book/guides/daily-workflows.html create mode 100644 docs/book/guides/installation.html create mode 100644 docs/book/guides/quickstart.html create mode 100644 docs/book/guides/use-cases.html create mode 100644 docs/book/highlight.css create mode 100644 docs/book/highlight.js create mode 100644 docs/book/index.html create mode 100644 docs/book/kogral/core-concepts.html create mode 100644 docs/book/kogral/design-philosophy.html create mode 100644 docs/book/kogral/what-is-kogral.html create mode 100644 docs/book/kogral/why-kogral.html create mode 100644 docs/book/mark.min.js create mode 100644 docs/book/print.html create mode 100644 docs/book/searcher.js create mode 100644 docs/book/searchindex.js create mode 100644 docs/book/setup/environment.html create mode 100644 docs/book/setup/installation.html create mode 100644 docs/book/setup/prerequisites.html create mode 100644 docs/book/setup/project-init.html create mode 100644 docs/book/setup/verification.html create mode 100644 docs/book/storage/backends.html create mode 100644 docs/book/storage/filesystem.html create mode 100644 docs/book/storage/memory.html create mode 100644 docs/book/storage/surrealdb.html create mode 100644 docs/book/storage/sync.html create mode 100644 docs/book/templates/customization.html create mode 100644 docs/book/templates/documents.html create mode 100644 docs/book/templates/export.html create mode 100644 docs/book/templates/overview.html create mode 100644 docs/book/toc.html create mode 100644 docs/book/toc.js create mode 100644 docs/book/tomorrow-night.css create mode 100644 docs/cli/README.md create mode 100644 docs/cli/commands.md create mode 100644 docs/cli/overview.md create mode 100644 docs/cli/workflows.md create mode 100644 docs/config/examples.md create mode 100644 docs/config/graph-settings.md create mode 100644 docs/config/inheritance.md create mode 100644 docs/config/nickel-schemas.md create mode 100644 docs/config/overview.md create mode 100644 docs/contributing/development.md create mode 100644 docs/contributing/standards.md create mode 100644 docs/contributing/testing.md create mode 100644 docs/diagrams/architecture-overview.svg create mode 100644 docs/diagrams/config-composition.svg create mode 100644 docs/diagrams/core-concepts.svg create mode 100644 docs/diagrams/storage-architecture.svg create mode 100644 docs/guides/best-practices.md create mode 100644 docs/guides/daily-workflows.md create mode 100644 docs/guides/installation.md create mode 100644 docs/guides/quickstart.md create mode 100644 docs/guides/use-cases.md create mode 100644 docs/kogral/core-concepts.md create mode 100644 docs/kogral/design-philosophy.md create mode 100644 docs/kogral/what-is-kogral.md create mode 100644 docs/kogral/why-kogral.md create mode 100644 docs/setup/environment.md create mode 100644 docs/setup/installation.md create mode 100644 docs/setup/prerequisites.md create mode 100644 docs/setup/project-init.md create mode 100644 docs/setup/verification.md create mode 100644 docs/storage/backends.md create mode 100644 docs/storage/filesystem.md create mode 100644 docs/storage/memory.md create mode 100644 docs/storage/overview.md create mode 100644 docs/storage/surrealdb.md create mode 100644 docs/storage/sync.md create mode 100644 docs/templates/customization.md create mode 100644 docs/templates/documents.md create mode 100644 docs/templates/export.md create mode 100644 docs/templates/overview.md create mode 100644 docs/user-guide/README.md create mode 100644 docs/user-guide/configuration.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..dc629d8 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,336 @@ +# Changelog + +All notable changes to the Knowledge Base project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Changed + +#### BREAKING: MCP Protocol Rebranding +- **All MCP URIs, tool names, and prompts updated to KOGRAL namespace** + - **URI Scheme**: `kb://` → `kogral://` + - `kb://project/notes` → `kogral://project/notes` + - `kb://project/decisions` → `kogral://project/decisions` + - `kb://project/guidelines` → `kogral://project/guidelines` + - `kb://project/patterns` → `kogral://project/patterns` + - `kb://shared/guidelines` → `kogral://shared/guidelines` + - `kb://shared/patterns` → `kogral://shared/patterns` + - **Tool Names**: `kb/*` → `kogral/*` + - `kb/search` → `kogral/search` + - `kb/add_note` → `kogral/add_note` + - `kb/add_decision` → `kogral/add_decision` + - `kb/link` → `kogral/link` + - `kb/get_guidelines` → `kogral/get_guidelines` + - `kb/list_graphs` → `kogral/list_graphs` + - `kb/export` → `kogral/export` + - `kb/find_blocks` → `kogral/find_blocks` + - `kb/find_todos` → `kogral/find_todos` + - `kb/find_cards` → `kogral/find_cards` + - **Prompt Names**: `kb/*` → `kogral/*` + - `kb/summarize_project` → `kogral/summarize_project` + - `kb/find_related` → `kogral/find_related` + - **Server Name**: `kb-mcp` → `kogral-mcp` + - **Migration Required**: Users must update `~/.config/claude/config.json`: + + ```diff + { + "mcpServers": { + - "kb-mcp": { + - "command": "/path/to/kb-mcp", + + "kogral-mcp": { + + "command": "/path/to/kogral-mcp", + - "env": { "KB_DIR": "/path/to/.kb" } + + "env": { "KOGRAL_DIR": "/path/to/.kogral" } + } + } + } + ``` + + - **Rationale**: Complete branding consistency across all interfaces. Pre-release status (v0.x) allows breaking changes without user pain. + - **Files updated**: + - `crates/kb-mcp/src/resources.rs`: All URI definitions and parsing + - `crates/kb-mcp/src/tools.rs`: All tool name definitions and dispatch + - `crates/kb-mcp/src/prompts.rs`: All prompt name definitions and dispatch + - `crates/kb-mcp/src/main.rs`: Server name registration + - `crates/kb-mcp/tests/integration_test.rs`: Test assertions updated + - `docs/apps/mcp-quickguide.md`: All examples and references + - `docs/kogral/core-concepts.md`: MCP protocol documentation + - `docs/api/mcp-tools.md`: API reference documentation + - `README.md`: MCP integration examples + +#### Branding +- **Rebranded to KOGRAL** (**KO**wledge **GRA**phs, **L**ocal-first) + - Updated project name from "Knowledge Base" to "KOGRAL" across all documentation + - New tagline: "Git-native knowledge graphs for developer teams" + - Updated description emphasizing structured knowledge management for developers + - Documentation folder renamed: `docs/kb/` → `docs/kogral/` + - Documentation files renamed: + - `docs/kogral/what-is-kb.md` → `what-is-kogral.md` + - `docs/kogral/why-kb.md` → `why-kogral.md` + - Technical names maintained for compatibility: `kb-core`, `kb-cli`, `kb-mcp` (crate names), `kb` (CLI binary) + - Hybrid naming strategy: KOGRAL as primary brand, `kb.vapora.dev` as future alias + - Files updated: + - `README.md`: Title, description, and branding + - `Cargo.toml` (workspace): Homepage, description, repository metadata + - `crates/kb-core/Cargo.toml`: Package description + - `crates/kb-cli/Cargo.toml`: Package description + - `crates/kb-mcp/Cargo.toml`: Package description + - `crates/kb-core/src/lib.rs`: Module documentation comments + - `crates/kb-core/src/models.rs`: Type documentation comments + - `crates/kb-cli/src/main.rs`: CLI description and messages + - `docs/kogral/what-is-kogral.md`: Full KOGRAL branding with acronym explanation + - `docs/kogral/core-concepts.md`: All "KB" references replaced with "KOGRAL" + - `docs/README.md`: Title and section headers + - `docs/book.toml`: mdBook title and description + - `docs/SUMMARY.md`: Navigation titles + - `.claude/CLAUDE.md`: Project description and documentation links + +#### BREAKING: Filesystem Paths and Environment Variables +- **Directory structure renamed from `.kb/` to `.kogral/`** + - Project directory: `.kb/` → `.kogral/` + - Shared directory: `.kb-shared/` → `.kogral-shared/` + - Configuration paths updated throughout codebase + - All storage paths use `.kogral/` prefix +- **Environment variable renamed from `KB_DIR` to `KOGRAL_DIR`** + - MCP server configuration requires `KOGRAL_DIR` environment variable + - CLI tools respect `KOGRAL_DIR` for custom directory location +- **Migration Required**: + 1. Rename existing directory: `mv .kb .kogral` + 2. Update environment variables: `KB_DIR` → `KOGRAL_DIR` + 3. Update config files referencing `.kb/` paths +- **Rationale**: Complete branding consistency across all filesystem operations. Pre-release status allows breaking changes. +- **Files updated**: + - All Rust source files in `crates/`: Path constants and variable names + - `crates/kb-core/src/config/loader.rs`: Configuration path discovery + - `crates/kb-core/src/storage/filesystem.rs`: Storage paths + - `crates/kb-cli/src/main.rs`: CLI messages and examples + - `crates/kb-mcp/src/main.rs`: Environment variable handling + - All documentation in `docs/`: Examples and instructions + - `README.md`: Setup and usage examples + - `.claude/CLAUDE.md`: Project configuration paths + +### Added + +#### Core Infrastructure +- Initial project structure with Cargo workspace (kb-core, kb-cli, kb-mcp) +- Core graph models (Node, Edge, Graph) with 6 node types and 6 relationship types +- Config-driven architecture using Nickel schemas (NCL → JSON → Rust) +- Markdown parser with Logseq compatibility (YAML frontmatter + wikilinks) +- Storage backends: Filesystem (default), In-Memory, SurrealDB (feature-gated) +- Embedding integration via rig-core (OpenAI, Claude, Ollama) + fastembed local fallback +- Tera template engine for document generation and export + +#### Logseq Blocks Support (ADR-004) +- **Block Data Structures** (`crates/kb-core/src/models.rs`): + - `TaskStatus` enum: TODO, DOING, DONE, LATER, NOW, WAITING, CANCELLED + - `BlockProperties` struct: tags, task status, custom properties, block/page references + - `Block` struct: hierarchical content blocks with properties and children + - `Node.blocks` field: Optional cached block structure (lazy parsing) +- **BlockParser** (`crates/kb-core/src/block_parser.rs`): + - Bidirectional parser: Markdown outliner ↔ Block structures + - Supports: task markers, #tags, custom properties (key:: value), ((block-refs)), [[page-refs]] + - Hierarchical parsing based on indentation + - Round-trip fidelity for Logseq import/export + - 15 comprehensive tests covering parsing, serialization, and round-trips +- **Block Query API**: + - `Node::get_blocks()`: Lazy parsing from content with caching + - `Node::find_blocks_by_tag()`: Find blocks with specific tag + - `Node::find_all_todos()`: Find all task blocks + - `Node::find_blocks_by_status()`: Find blocks by task status + - `Node::find_blocks_by_property()`: Find blocks with custom property + - `Graph::find_blocks_by_tag()`: Search blocks across all nodes + - `Graph::find_all_todos()`: Find TODOs across entire graph + - 6 integration tests for Node and Graph block queries +- **SurrealDB Schema** (`schemas/surrealdb/blocks.surql`): + - `block` table with indexes on node_id, block_id, tags, status, parent_id + - Full-text search index on content + - Support for hierarchical queries and tag-based filtering + - Migration queries and example usage patterns +- **Logseq Import/Export** (`crates/kb-core/src/import/logseq.rs`, `crates/kb-core/src/export/logseq.rs`): + - Round-trip import: Logseq markdown → KB Node with blocks + - Property parsing: key:: value format, tags ([[tag]] and #tag), references, timestamps + - Export to Logseq page/journal formats with block serialization + - 12 comprehensive tests covering import/export round-trips +- **MCP Block Tools** (`crates/kb-mcp/src/tools.rs`): + - `kb/find_blocks`: Search blocks by tag, task status, or custom property + - `kb/find_todos`: Find all TODO blocks across KB + - `kb/find_cards`: Find all flashcard blocks (#card tag) + - Fixed borrowing issues with two-phase data collection pattern +- **Configuration Schema** (`schemas/kb-config.ncl`, `config/*.ncl`): + - Added `BlocksConfig` schema with 4 settings: + - `enabled`: Enable/disable Logseq blocks parsing (default: false, opt-in) + - `parse_on_import`: Auto-parse blocks from Logseq imports (default: true) + - `serialize_on_export`: Serialize blocks to outliner format on export (default: true) + - `enable_mcp_tools`: Enable block-related MCP tools (default: true) + - Updated all config files (defaults.ncl, production.ncl, minimal.ncl) + - Validated: All configs export to JSON successfully +- **Documentation**: + - Complete technical design: `docs/architecture/logseq-blocks-design.md` + - Architectural Decision Record: `docs/architecture/adrs/004-logseq-blocks-support.md` + - 6-phase implementation plan documented + - Use cases and examples for flashcards, task tracking, and block references + +#### Applications +- CLI tool (kb-cli) with 13 commands (init, add, search, link, sync, serve, etc.) +- MCP server (kb-mcp) with 10 tools (7 core + 3 block tools), 6 resources, 2 prompts for Claude Code integration +- NuShell maintenance scripts (6 scripts: sync, backup, reindex, import/export Logseq, stats) + +#### Configuration System (Nickel) +- Complete Nickel configuration schema following typedialog/provisioning pattern +- Schema contracts (`schemas/kb/contracts.ncl`) - Type definitions with validation +- Default values (`schemas/kb/defaults.ncl`) - Base configuration values +- Composition helpers (`schemas/kb/helpers.ncl`) - merge_with_override, compose_config +- Mode overlays (`schemas/kb/modes/{dev,prod,test}.ncl`) - Environment-specific tuning +- Runtime configurations (`.kb-config/core/kb.ncl`, `.kb-config/platform/*.ncl`) +- Double validation pattern: Nickel contracts + serde deserialization +- Config export to JSON for Rust consumption (`.kb-config/targets/*.json`) + +#### Templates +- Tera templates for 6 document types (note, decision, guideline, pattern, journal, execution) +- 4 export format templates (Logseq page/journal, summary, JSON) +- Customizable template system with frontmatter generation + +#### Documentation (mdBook) +- Complete mdBook documentation structure with SUMMARY.md navigation +- 4 SVG diagrams for visual guides: + - `architecture-overview.svg` - Complete system architecture + - `core-concepts.svg` - Node types and relationships + - `config-composition.svg` - Configuration flow (Schema → Defaults → Mode → User → JSON) + - `storage-architecture.svg` - Hybrid storage strategy +- 11 major documentation sections (kb/, guides/, architecture/, setup/, config/, storage/, ai/, templates/, cli/, apps/, api/, contributing/) +- ADR documentation (ADR-001: Nickel vs TOML, ADR-002: FastEmbed + AI providers, ADR-003: Hybrid storage) +- Use cases documentation (8 real-world scenarios) +- MCP quick guide (5-minute setup for Claude Code) +- Config-driven architecture deep dive +- Storage architecture deep dive with code examples +- docs/README.md - Comprehensive guide for using and building documentation + +#### Build System +- Modular justfile system (7 modules: build, test, dev, ci, nickel, docs, scripts) +- Nickel validation and export recipes (`just nickel::validate-all`, `just nickel::export-all`) +- mdBook documentation recipes (`just docs::serve`, `just docs::build`, `just docs::test`) +- CI/CD pipeline recipes (format, lint, test, build validation) +- NuShell script validation and execution recipes + +#### Project Documentation +- Enhanced README.md with complete documentation links and visual diagram references +- Directory structure documentation with detailed explanations +- Quick start guide with MCP integration +- Integration guides (Vapora, Logseq, Claude Code) +- CHANGELOG.md following Keep a Changelog format + +### Changed +- Updated README.md with comprehensive documentation links (mdBook, guides, architecture, config) +- Enhanced directory structure documentation with .kb-config/ and schemas/kb/ details +- Improved documentation section with visual diagrams and just recipe references +- **Blocks Feature Documentation**: + - README.md: Added Logseq blocks section with examples, features, and configuration + - README.md: Updated architecture diagram to include BlockParser + - README.md: Added 3 new MCP tools to integration section + - docs/kb/core-concepts.md: Added comprehensive "Logseq Content Blocks" section with examples, use cases, and queries + - docs/api/mcp-tools.md: Added "Block Tools" section documenting kb/find_blocks, kb/find_todos, kb/find_cards + - docs/api/mcp-tools.md: Updated overview from 7 to 10 tools + +### Infrastructure +- Cargo workspace with 3 crates +- Feature flags: `filesystem` (default), `surrealdb`, `fastembed`, `full` +- 90 tests across workspace (81 kb-core + 5 kb-mcp + 4 kb-cli) + - 15 tests for block parser + - 12 tests for Logseq import/export + - 6 tests for block queries +- mdBook integration for documentation (serves on [http://localhost:3000](http://localhost:3000)) +- Nickel → JSON → Rust configuration pipeline +- Justfile modules: build, test, dev, ci, nickel, docs, scripts +- CI/CD pipeline recipes (format, lint, test, build validation) +- mdBook documentation structure with SUMMARY.md +- NuShell script validation recipes + +## [1.0.0] - TBD + +Initial release (planned). + +### Planned Features +- Full FilesystemStorage implementation with file watching +- Complete Query Engine with semantic search +- Guideline inheritance resolution (shared → local override priority) +- SurrealDB schema and complete backend implementation +- Sync mechanism: bidirectional Filesystem ↔ SurrealDB +- FastEmbed local embeddings integration +- API provider integrations (OpenAI, Claude, Ollama) for embeddings +- Cross-graph queries (project + shared knowledge bases) +- Template customization system +- Export to multiple formats (Logseq, JSON, Markdown) +- Import from Logseq graphs +- MCP protocol compliance testing +- Production-ready CLI tool +- Performance benchmarks +- Security audit + +--- + +## Version History + +### Version Numbering + +This project follows semantic versioning (MAJOR.MINOR.PATCH): + +- **MAJOR**: Incompatible API changes +- **MINOR**: New features (backward compatible) +- **PATCH**: Bug fixes (backward compatible) + +### Release Schedule + +- **Alpha** (0.x.x): API unstable, features incomplete +- **Beta** (1.0.0-beta.x): API stable, features complete, testing phase +- **Stable** (1.0.0+): Production ready + +### Feature Roadmap + +#### Phase 1: Foundation ✅ (Completed) +- [x] Core models and graph structure +- [x] Nickel configuration system +- [x] Markdown parser with Logseq compatibility +- [x] Storage trait abstraction +- [x] CLI structure with clap +- [x] MCP server protocol implementation +- [x] NuShell maintenance scripts +- [x] Documentation structure + +#### Phase 2: Integration (In Progress) +- [ ] Full FilesystemStorage with file watching +- [ ] SurrealDB backend implementation +- [ ] Query engine with text + semantic search +- [ ] Embedding provider integrations +- [ ] Guideline inheritance resolution +- [ ] Sync mechanism implementation + +#### Phase 3: Polish (Planned) +- [ ] Performance optimization +- [ ] Comprehensive error handling +- [ ] Production testing +- [ ] Security audit +- [ ] API stabilization +- [ ] Release preparation + +--- + +## Migration Guides + +### Upgrading from 0.x to 1.0 + +(To be documented when 1.0 is released) + +--- + +## Contributing + +See [CONTRIBUTING.md](docs/contributing/development.md) for development setup and guidelines. + +--- + +## License + +(To be determined) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..f3eaea2 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,105 @@ +# Code of Conduct + +## Our Pledge + +We, as members, contributors, and leaders, pledge to make participation in our project and +community a harassment-free experience for everyone, regardless of: + +- Age +- Body size +- Visible or invisible disability +- Ethnicity +- Sex characteristics +- Gender identity and expression +- Level of experience +- Education +- Socioeconomic status +- Nationality +- Personal appearance +- Race +- Caste +- Color +- Religion +- Sexual identity and orientation + +We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our community include: + +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologizing to those affected by mistakes +- Focusing on what is best not just for us as individuals, but for the overall community + +Examples of unacceptable behavior include: + +- The use of sexualized language or imagery +- Trolling, insulting, or derogatory comments +- Personal or political attacks +- Public or private harassment +- Publishing others' private information (doxing) +- Other conduct which could reasonably be considered inappropriate in a professional setting + +## Enforcement Responsibilities + +Project maintainers are responsible for clarifying and enforcing our standards of acceptable +behavior and will take appropriate corrective action in response to unacceptable behavior. + +Maintainers have the right and responsibility to: + +- Remove, edit, or reject comments, commits, code, and other contributions +- Ban contributors for behavior they deem inappropriate, threatening, or harmful + +## Scope + +This Code of Conduct applies to: + +- All community spaces (GitHub, forums, chat, events, etc.) +- Official project channels and representations +- Interactions between community members related to the project + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to project maintainers: + +- Email: [project contact] +- GitHub: Private security advisory +- Issues: Report with `conduct` label (public discussions only) + +All complaints will be reviewed and investigated promptly and fairly. + +### Enforcement Guidelines + +**1. Correction** +- Community impact: Use of inappropriate language or unwelcoming behavior +- Action: Private written warning with explanation and clarity on impact +- Consequence: Warning and no further violations + +**2. Warning** +- Community impact: Violation through single incident or series of actions +- Action: Written warning with severity consequences for continued behavior +- Consequence: Suspension from community interaction + +**3. Temporary Ban** +- Community impact: Serious violation of standards +- Action: Temporary ban from community interaction +- Consequence: Revocation of ban after reflection period + +**4. Permanent Ban** +- Community impact: Pattern of violating community standards +- Action: Permanent ban from community interaction + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 2.1. + +For answers to common questions about this code of conduct, see the [FAQ](https://www.contributor-covenant.org/faq). + +--- + +**Thank you for being part of our community!** + +We believe in creating a welcoming and inclusive space where everyone can contribute their best work. Together, we make this project better. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..0dd1ff8 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,130 @@ +# Contributing + +Thank you for your interest in contributing! This document provides guidelines and instructions for contributing to this project. + +## Code of Conduct + +This project adheres to a Code of Conduct. By participating, you are expected to uphold this code. +Please see [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) for details. + +## Getting Started + +### Prerequisites + +- Rust 1.70+ (if project uses Rust) +- NuShell (if project uses Nushell scripts) +- Git + +### Development Setup + +1. Fork the repository +2. Clone your fork: `git clone ` +3. Add upstream: `git remote add upstream ` +4. Create a branch: `git checkout -b feature/your-feature` + +## Development Workflow + +### Before You Code + +- Check existing issues and pull requests to avoid duplication +- Create an issue to discuss major changes before implementing +- Assign yourself to let others know you're working on it + +### Code Standards + +#### Rust + +- Run `cargo fmt --all` before committing +- All code must pass `cargo clippy -- -D warnings` +- Write tests for new functionality +- Maintain 100% documentation coverage for public APIs + +#### Nushell + +- Validate scripts with `nu --ide-check 100 script.nu` +- Follow consistent naming conventions +- Use type hints where applicable + +#### Nickel + +- Type check schemas with `nickel typecheck` +- Document schema fields with comments +- Test schema validation + +### Commit Guidelines + +- Write clear, descriptive commit messages +- Reference issues with `Fixes #123` or `Related to #123` +- Keep commits focused on a single concern +- Use imperative mood: "Add feature" not "Added feature" + +### Testing + +All changes must include tests: + +```bash +# Run all tests +cargo test --workspace + +# Run with coverage +cargo llvm-cov --all-features --lcov + +# Run locally before pushing +just ci-full +``` + +### Pull Request Process + +1. Update documentation for any changed functionality +2. Add tests for new code +3. Ensure all CI checks pass +4. Request review from maintainers +5. Be responsive to feedback and iterate quickly + +## Review Process + +- Maintainers will review your PR within 3-5 business days +- Feedback is constructive and meant to improve the code +- All discussions should be respectful and professional +- Once approved, maintainers will merge the PR + +## Reporting Bugs + +Found a bug? Please file an issue with: + +- **Title**: Clear, descriptive title +- **Description**: What happened and what you expected +- **Steps to reproduce**: Minimal reproducible example +- **Environment**: OS, Rust version, etc. +- **Screenshots**: If applicable + +## Suggesting Enhancements + +Have an idea? Please file an issue with: + +- **Title**: Clear feature title +- **Description**: What, why, and how +- **Use cases**: Real-world scenarios where this would help +- **Alternative approaches**: If you've considered any + +## Documentation + +- Keep README.md up to date +- Document public APIs with rustdoc comments +- Add examples for non-obvious functionality +- Update CHANGELOG.md with your changes + +## Release Process + +Maintainers handle releases following semantic versioning: +- MAJOR: Breaking changes +- MINOR: New features (backward compatible) +- PATCH: Bug fixes + +## Questions + +- Check existing documentation and issues +- Ask in discussions or open an issue +- Join our community channels + +Thank you for contributing! diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..08a5f7a --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,98 @@ +# Security Policy + +## Supported Versions + +This project provides security updates for the following versions: + +| Version | Supported | +|---------|-----------| +| 1.x | ✅ Yes | +| 0.x | ❌ No | + +Only the latest major version receives security patches. Users are encouraged to upgrade to the latest version. + +## Reporting a Vulnerability + +**Do not open public GitHub issues for security vulnerabilities.** + +Instead, please report security issues to the maintainers privately: + +### Reporting Process + +1. Email security details to the maintainers (see project README for contact) +2. Include: + - Description of the vulnerability + - Steps to reproduce (if possible) + - Potential impact + - Suggested fix (if you have one) + +3. Expect acknowledgment within 48 hours +4. We will work on a fix and coordinate disclosure timing + +### Responsible Disclosure + +- Allow reasonable time for a fix before public disclosure +- Work with us to understand and validate the issue +- Maintain confidentiality until the fix is released + +## Security Best Practices + +### For Users + +- Keep dependencies up to date +- Use the latest version of this project +- Review security advisories regularly +- Report vulnerabilities responsibly + +### For Contributors + +- Run `cargo audit` before submitting PRs +- Use `cargo deny` to check license compliance +- Follow secure coding practices +- Don't hardcode secrets or credentials +- Validate all external inputs + +## Dependency Security + +We use automated tools to monitor dependencies: + +- **cargo-audit**: Scans for known security vulnerabilities +- **cargo-deny**: Checks licenses and bans unsafe dependencies + +These run in CI on every push and PR. + +## Code Review + +All code changes go through review before merging: +- At least one maintainer review required +- Security implications considered +- Tests required for all changes +- CI checks must pass + +## Known Vulnerabilities + +We maintain transparency about known issues: +- Documented in GitHub security advisories +- Announced in release notes +- Tracked in issues with `security` label + +## Security Contact + +For security inquiries, please contact: +- Email: [project maintainers] +- Issue: Open a private security advisory on GitHub + +## Changelog + +Security fixes are highlighted in CHANGELOG.md with [SECURITY] prefix. + +## Resources + +- [OWASP Top 10](https://owasp.org/www-project-top-ten/) +- [CWE: Common Weakness Enumeration](https://cwe.mitre.org/) +- [Rust Security](https://www.rust-lang.org/governance/security-disclosures) +- [npm Security](https://docs.npmjs.com/about-npm/security) + +## Questions + +If you have security questions (not vulnerabilities), open a discussion or issue with the `security` label. diff --git a/assets/branding/README.md b/assets/branding/README.md new file mode 100644 index 0000000..df13acb --- /dev/null +++ b/assets/branding/README.md @@ -0,0 +1,147 @@ +# KOGRAL Branding Assets + +Complete branding system for KOGRAL (KOwledge GRAphs, Local-first) - Git-native knowledge graphs for developer teams. + +## Directory Structure + +```text +branding/ +├── README.md # This file +├── index.html # Quick reference showcase +└── kogral-assets-showcase.html # Comprehensive assets catalog +``` + +## Quick Start + +Open either HTML file in your browser to view the interactive branding showcase: + +- **`index.html`** - Compact version with dark/light mode toggle +- **`kogral-assets-showcase.html`** - Full-featured showcase with navigation, comparison tables, and detailed guidelines + +## Logo Variants + +All logos are available in the `../logos/` directory with these suffixes: + +| Suffix | Variant | Dimensions | Use Case | +|--------|---------|------------|----------| +| (none) | Full logo | 610×200px | Primary branding | +| `-h` | Horizontal | 1000×300px | Banners, headers | +| `-s` | Square | 200×200px | Apps, UI, icons | +| `-h-s` | Horizontal small | 500×150px | Navbars, sidebars | +| `-bn` | Black & white | 610×200px | Print, documents | + +## Icon Variants + +All icons are available in the `../icons/` directory: + +| Variant | Dimensions | Use Case | +|---------|------------|----------| +| `kogral-icon.svg` | 200×200px | Standard favicon, UI elements | +| `kogral-icon-s.svg` | 100×100px | Compact spaces, mobile UI | +| `kogral-icon-bn.svg` | 200×200px | Print, monochrome contexts | + +## Color Palette + +Core brand colors with semantic meaning: + +- **Primary Blue** (`#4a9eff`) - Knowledge, connectivity, main interactions +- **Accent Green** (`#3dd68d`) - Active states, growth, highlights +- **Gold** (`#fbbf24`) - Important elements, central focal point +- **Slate Secondary** (`#64748b`) - Secondary elements, borders +- **Dark Primary** (`#1a2744`) - UI backgrounds, primary dark +- **Dark Secondary** (`#2a3f6a`) - UI emphasis, secondary dark + +## Usage Guidelines + +### Logo Sizing +- Use the full logo for primary brand identification +- Maintain minimum 20px whitespace around all sides +- Never distort or rotate the logo +- For small spaces, prefer square or horizontal-small variants + +### Color Usage +- Primary Blue for main interactions and hierarchy +- Accent Green highlights active states and positive actions +- Gold emphasizes central knowledge nodes and critical elements +- Use monochrome variants on dark/light backgrounds for accessibility + +### Digital Applications +- All assets are SVG format for infinite scalability +- Use in web apps, mobile interfaces, and digital signage +- Animations are preserved and scale responsively +- Export to PNG at 2x resolution for high-DPI displays + +### Print Production +- Always use black & white variants for print materials +- Ensure minimum 1/4" clear space around logo +- Test colors on actual materials before final production +- Monochrome is preferred for single-color prints + +### Social Media +- Use square logo (200×200px) for profile pictures +- Horizontal variants (1000×300px) for banners and covers +- Export PNG at 2x scale for high-DPI displays +- Use full logo for primary brand identification + +### Accessibility +- All color combinations meet WCAG AA standards +- Monochrome variants ensure colorblind accessibility +- Use descriptive alt-text: "KOGRAL - Git-native knowledge graphs" + +## Asset Features + +✨ **Interactive HTML Showcases** +- Dark/light mode toggle with persistent storage +- Responsive grid layouts +- One-click filename copy +- Sticky navigation (showcase version) +- Color palette visualization +- Comparison tables + +🎨 **SVG Animations** +- Pulsing central node +- Flowing connection lines +- Rotating hexagon outlines +- Synchronized glow effects + +📊 **Format & Scalability** +- All assets in SVG format +- Infinite scalability without quality loss +- Animations preserved across all sizes +- Print-ready monochrome variants + +## File Sizes + +- Full logos: ~3-5KB each +- Icons: ~2-3KB each +- HTML showcases: ~20-29KB + +## Version Information + +- **Last Updated:** 2026-01-18 +- **Version:** 1.0 +- **Format:** SVG + HTML5 +- **Compatibility:** All modern browsers + +## Brand Identity + +**KOGRAL** represents: +- 🧠 Knowledge graphs for intelligent organization +- 🔗 Connected nodes and relationships +- 💾 Git-native, local-first architecture +- 🌍 Distributed, team-friendly knowledge management +- ✨ Elegant, animated visual identity + +## Related Assets + +- Logos: `/assets/logos/` +- Icons: `/assets/icons/` +- Main logo file: `/assets/kogral-logo.svg` + +## Contact & Updates + +For asset requests or updates, refer to the KOGRAL project documentation. + +--- + +**All assets in KOGRAL branding system are optimized for scalability, accessibility, and brand consistency.** diff --git a/assets/branding/index.html b/assets/branding/index.html new file mode 100644 index 0000000..591bf23 --- /dev/null +++ b/assets/branding/index.html @@ -0,0 +1,1304 @@ + + + + + + KOGRAL Branding Assets + + + + + + + + +
+ +
+

Color Palette

+
+
+
+
Primary Blue
+
#4a9eff
+
+
+
+
Accent Green
+
#3dd68d
+
+
+
+
Gold Highlight
+
#fbbf24
+
+
+
+
Slate Secondary
+
#64748b
+
+
+
+
Dark Primary
+
#1a2744
+
+
+
+
Dark Secondary
+
#2a3f6a
+
+
+
+ + +
+

Logo Variants

+ +
+ + +
+

Icon Variants

+ +
+ + +
+

Scalability Test

+
+

Icon clarity at different sizes - from favicon to app icons

+
+
+
+
+ 16×16 Icon +
+
16×16
+
Favicon
+
+ +
+
+ 32×32 Icon +
+
32×32
+
Browser tab
+
+ +
+
+ 64×64 Icon +
+
64×64
+
App icon
+
+ +
+
+ 128×128 Icon +
+
128×128
+
Apple touch
+
+ +
+
+ 256×256 Icon +
+
256×256
+
PWA icon
+
+
+
+ + +
+

Typography

+
+
+
Display / Headings
+
+ KOGRAL +
+
+
+ Family + Inter +
+
+ Weight + 800 +
+
+ Size + 32px+ +
+
+ Use + Hero, H1 +
+
+
+ +
+
Headings / Titles
+
+ Knowledge Graphs +
+
+
+ Family + Inter +
+
+ Weight + 700 +
+
+ Size + 24px +
+
+ Use + H2, H3 +
+
+
+ +
+
Body / Regular
+
+ Git-native knowledge graphs for developer teams with structured + knowledge management. +
+
+
+ Family + Inter +
+
+ Weight + 400 +
+
+ Size + 16px +
+
+ Use + Body text +
+
+
+ +
+
Emphasis / Semibold
+
+ Local-first architecture with config-driven behavior +
+
+
+ Family + Inter +
+
+ Weight + 600 +
+
+ Size + 16px +
+
+ Use + Emphasis +
+
+
+ +
+
Small / UI Elements
+
+ Markdown · Nickel · SurrealDB +
+
+
+ Family + Inter +
+
+ Weight + 500 +
+
+ Size + 14px +
+
+ Use + Labels, UI +
+
+
+ +
+
Code / Monospace
+
+ kogral-h.svg +
+
+
+ Family + Courier +
+
+ Weight + 400 +
+
+ Size + 14px +
+
+ Use + Code, files +
+
+
+
+ +
+

Font Usage

+

+ Inter is used for all typography in KOGRAL branding. The font is + clean, modern, and highly readable at all sizes. +

+
+
+ Import from Google Fonts: +
+
+ @import + url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap'); + +
+
+
+
+ + +
+

Usage Guidelines

+
+

Logo Usage

+

+ Use the full logo for primary brand identification on + websites, marketing materials, and product pages. The horizontal variant + works well for header areas and social media. For small spaces, use the + square or horizontal-small variants. Always maintain sufficient whitespace + around the logo (minimum 20px). +

+
+ +
+

Color Palette

+

+ Primary Blue (#4a9eff) is the main brand color + representing knowledge and connectivity. Accent Green (#3dd68d) + highlights active states and interactions. Gold (#fbbf24) + emphasizes important elements like the central knowledge node. Use the + black & white variants for print and high-contrast applications. +

+
+ +
+

Typography

+

+ Use Inter font family from Google Fonts for all text. + Weight 800 for display/hero text, 700 for headings, 600 for subheadings, + 400 for body text, and 500 for UI elements. Use + Courier New monospace for code, filenames, and HEX values. + Maintain line height of 1.3-1.7 for optimal readability. +

+
+ +
+

Icon Usage

+

+ Use kogral-icon.svg (200x200px) for most applications + including favicons and UI elements. The small variant is + optimized for tight spaces and mobile interfaces. The monochrome versions + are suitable for print, document headers, and accessibility contexts. +

+
+
+ +
+

+ KOGRAL Branding System • All assets are SVG format for maximum + scalability • Last updated 2026-01-23 +

+
+
+ + + + diff --git a/assets/branding/kogral-assets-showcase.html b/assets/branding/kogral-assets-showcase.html new file mode 100644 index 0000000..02dde32 --- /dev/null +++ b/assets/branding/kogral-assets-showcase.html @@ -0,0 +1,1552 @@ + + + + + + KOGRAL Assets Showcase + + + + + + + + + +
+
+

KOGRAL Branding Assets

+

Complete design system for git-native knowledge graphs

+
+
+
13
+
Total Assets
+
+
+
10
+
Logo Variants
+
+
+
3
+
Icon Variants
+
+
+
6
+
Brand Colors
+
+
+
SVG
+
Format
+
+
+
+
+ +
+ +
+
+
+

Color Palette

+

Core brand colors with semantic meaning

+
+ +
+
+
+
+
Primary Blue
+
#4a9eff
+
Knowledge & Connection
+
+
+ +
+
+
+
Accent Green
+
#3dd68d
+
Active & Growth
+
+
+ +
+
+
+
Gold Highlight
+
#fbbf24
+
Important & Central
+
+
+ +
+
+
+
Slate Secondary
+
#64748b
+
Secondary & Border
+
+
+ +
+
+
+
Dark Primary
+
#1a2744
+
UI Background
+
+
+ +
+
+
+
Dark Secondary
+
#2a3f6a
+
UI Emphasis
+
+
+
+
+
+ + +
+
+
+

Logo Variants

+

Full brand identity in multiple formats

+
+ +
+ +
+
+ Full Logo +
+
+
Full Logo
+
Primary
+
+
+
Dimensions
+
610×200px
+
+
+
Format
+
SVG
+
+
+
+ kogral-h.svg + +
+
+
+ + +
+
+ Horizontal Logo +
+
+
Horizontal
+
Layout
+
+
+
Dimensions
+
1000×300px
+
+
+
Use Case
+
Banners
+
+
+
+ kogral-v.svg + +
+
+
+ + +
+
+ Square Logo +
+
+
Square
+
Compact
+
+
+
Dimensions
+
200×200px
+
+
+
Use Case
+
Apps & UI
+
+
+
+ kogral-h-static.svg + +
+
+
+ + +
+
+ Horizontal Small Logo +
+
+
Horizontal Small
+
Compact
+
+
+
Dimensions
+
500×150px
+
+
+
Use Case
+
Navbars
+
+
+
+ kogral-v-static.svg + +
+
+
+ + +
+
+ Mono Black H Logo +
+
+
Mono Black H
+
Mono
+
+
+
Dimensions
+
610×200px
+
+
+
Use Case
+
Print, Fax
+
+
+
+ kogral-mono-black-h.svg + +
+
+
+ + +
+
+ Mono White H Logo +
+
+
Mono White H
+
Mono
+
+
+
Dimensions
+
610×200px
+
+
+
Use Case
+
Dark Mode
+
+
+
+ kogral-mono-white-h.svg + +
+
+
+ + +
+
+ Mono Black V Logo +
+
+
Mono Black V
+
Mono
+
+
+
Dimensions
+
450×315px
+
+
+
Use Case
+
Print Vertical
+
+
+
+ kogral-mono-black-v.svg + +
+
+
+ + +
+
+ Mono White V Logo +
+
+
Mono White V
+
Mono
+
+
+
Dimensions
+
450×315px
+
+
+
Use Case
+
Dark Mode V
+
+
+
+ kogral-mono-white-v.svg + +
+
+
+
+
+
+ + +
+
+
+

Icon Variants

+

Scalable icons for every use case

+
+ +
+ +
+
+ Main Icon +
+
+
Main Icon
+
Standard
+
+
+
Dimensions
+
200×200px
+
+
+
Use Case
+
Favicons
+
+
+
+ kogral-icon.svg + +
+
+
+ + +
+
+ Small Icon +
+
+
Small Icon
+
Compact
+
+
+
Dimensions
+
100×100px
+
+
+
Use Case
+
UI Elements
+
+
+
+ kogral-icon-static.svg + +
+
+
+ + +
+
+ Black & White Icon +
+
+
Black & White Icon
+
Mono
+
+
+
Dimensions
+
200×200px
+
+
+
Use Case
+
Print
+
+
+
+ kogral-icon-mono-black.svg + +
+
+
+
+
+
+ + +
+
+
+

Scalability Test

+

+ Icon clarity at different sizes - from favicon to app icons +

+
+ +
+
+
+ 16×16 Icon +
+
16×16
+
Favicon
+
+ +
+
+ 32×32 Icon +
+
32×32
+
Browser tab
+
+ +
+
+ 64×64 Icon +
+
64×64
+
App icon
+
+ +
+
+ 128×128 Icon +
+
128×128
+
Apple touch
+
+ +
+
+ 256×256 Icon +
+
256×256
+
PWA icon
+
+
+
+
+ + +
+
+
+

Typography

+

Font family, weights, and usage guidelines

+
+ +
+
+
Display / Hero
+
+ KOGRAL +
+
+
+ Family + Inter +
+
+ Weight + 800 (ExtraBold) +
+
+ Size + 32-48px +
+
+ Use Case + Hero, H1 +
+
+
+ +
+
Headings / Titles
+
+ Knowledge Graphs +
+
+
+ Family + Inter +
+
+ Weight + 700 (Bold) +
+
+ Size + 20-28px +
+
+ Use Case + H2, H3, Sections +
+
+
+ +
+
Subheadings
+
+ Git-native and local-first +
+
+
+ Family + Inter +
+
+ Weight + 600 (SemiBold) +
+
+ Size + 16-20px +
+
+ Use Case + H4, Cards +
+
+
+ +
+
Body Text / Regular
+
+ Structured knowledge management that scales from solo projects to + organizations. Config-driven architecture for capturing architectural + decisions, coding guidelines, and reusable patterns. +
+
+
+ Family + Inter +
+
+ Weight + 400 (Regular) +
+
+ Size + 16px +
+
+ Use Case + Paragraphs, Body +
+
+
+ +
+
Small / UI Elements
+
+ Markdown · Nickel · SurrealDB · Logseq +
+
+
+ Family + Inter +
+
+ Weight + 500 (Medium) +
+
+ Size + 14px +
+
+ Use Case + Labels, Badges, UI +
+
+
+ +
+
Code / Monospace
+
+ kogral-h.svg
+ #4a9eff +
+
+
+ Family + Courier New +
+
+ Weight + 400 (Regular) +
+
+ Size + 13-14px +
+
+ Use Case + Code, Files, HEX +
+
+
+
+
+
+ + +
+
+
+

Usage Guidelines

+

Best practices for brand consistency

+
+ +
+
+

📐 Logo Sizing

+

+ Use horizontal variants for banners and headers. Square variants work + best for apps and compact spaces. Maintain minimum 20px clear space + around all logos. Never distort, rotate, or modify the aspect ratio. +

+
+ +
+

🎨 Color Usage

+

+ Primary Blue (#4a9eff) is the main brand color. Green (#3dd68d) + highlights active states and growth. Gold (#fbbf24) emphasizes central + knowledge nodes. Use monochrome variants for print and high-contrast + applications. +

+
+ +
+

🔤 Typography

+

+ Use Inter font family from Google Fonts. Weight 800 for display/hero + text, 700 for headings, 600 for subheadings, 400 for body text, and 500 + for UI elements. Courier New monospace for code and filenames. Line + height 1.3-1.7 for readability. +

+
+ +
+

📱 Digital Applications

+

+ All assets are SVG format for infinite scalability. Use favicon variants + for browser tabs. Icons scale from 16×16 to 512×512 without quality + loss. Perfect for web apps, mobile interfaces, and digital signage. +

+
+ +
+

🖨️ Print Production

+

+ Use black & white variants for print materials. Ensure minimum 1/4" + clear space around logo. Test colors on actual materials before + production. Monochrome is preferred for single-color prints. +

+
+ +
+

♿ Accessibility

+

+ All color combinations meet WCAG AA standards. Monochrome variants + ensure colorblind accessibility. Always provide alt-text: "KOGRAL - + Git-native knowledge graphs". +

+
+
+
+
+ + +
+
+
+

Variant Comparison

+

Complete overview of all 8 asset variations

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CategoryVariantDimensionsBest ForFilename
LogosFull610×200pxPrimary brandingkogral-h.svg
Horizontal1000×300pxBanners, headerskogral-v.svg
Square200×200pxApps, UI elementskogral-h-static.svg
Horizontal Small500×150pxNavbars, sidebarskogral-v-static.svg
Black & White610×200pxPrint, documentskogral-mono-black-h.svg
IconsMain200×200pxFavicons, UIkogral-icon.svg
Small100×100pxCompact spaceskogral-icon-static.svg
Black & White200×200pxPrint, monochromekogral-icon-mono-black.svg
+
+
+
+ + +
+
+

KOGRAL Branding System

+

+ 8 Total Assets • 5 Logo Variants • 3 Icon Variants • 6 Brand Colors +

+

+ All assets in SVG format • Fully scalable • Print-ready • Accessible +

+

+ Last updated: 2026-01-23 • Version 1.0 +

+
+
+ + + + diff --git a/assets/icons/kogral-icon-mono-black.svg b/assets/icons/kogral-icon-mono-black.svg new file mode 100644 index 0000000..07c4cd0 --- /dev/null +++ b/assets/icons/kogral-icon-mono-black.svg @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/icons/kogral-icon-static.svg b/assets/icons/kogral-icon-static.svg new file mode 100644 index 0000000..18bb6d4 --- /dev/null +++ b/assets/icons/kogral-icon-static.svg @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/icons/kogral-icon.svg b/assets/icons/kogral-icon.svg new file mode 100644 index 0000000..d0bfe66 --- /dev/null +++ b/assets/icons/kogral-icon.svg @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/kogral-logo.svg b/assets/kogral-logo.svg new file mode 100644 index 0000000..ef28420 --- /dev/null +++ b/assets/kogral-logo.svg @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/logos/kogral-favicon-16.svg b/assets/logos/kogral-favicon-16.svg new file mode 100644 index 0000000..af99a8b --- /dev/null +++ b/assets/logos/kogral-favicon-16.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/logos/kogral-favicon-32.svg b/assets/logos/kogral-favicon-32.svg new file mode 100644 index 0000000..f75bf59 --- /dev/null +++ b/assets/logos/kogral-favicon-32.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/logos/kogral-h-static.svg b/assets/logos/kogral-h-static.svg new file mode 100644 index 0000000..b724dcb --- /dev/null +++ b/assets/logos/kogral-h-static.svg @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/logos/kogral-h.svg b/assets/logos/kogral-h.svg new file mode 100644 index 0000000..ef28420 --- /dev/null +++ b/assets/logos/kogral-h.svg @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/logos/kogral-mono-black-h.svg b/assets/logos/kogral-mono-black-h.svg new file mode 100644 index 0000000..87aad48 --- /dev/null +++ b/assets/logos/kogral-mono-black-h.svg @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/logos/kogral-mono-black-v.svg b/assets/logos/kogral-mono-black-v.svg new file mode 100644 index 0000000..e762f15 --- /dev/null +++ b/assets/logos/kogral-mono-black-v.svg @@ -0,0 +1,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/logos/kogral-mono-white-h.svg b/assets/logos/kogral-mono-white-h.svg new file mode 100644 index 0000000..a3e89f4 --- /dev/null +++ b/assets/logos/kogral-mono-white-h.svg @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/logos/kogral-mono-white-v.svg b/assets/logos/kogral-mono-white-v.svg new file mode 100644 index 0000000..f3e3eda --- /dev/null +++ b/assets/logos/kogral-mono-white-v.svg @@ -0,0 +1,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/logos/kogral-v-static.svg b/assets/logos/kogral-v-static.svg new file mode 100644 index 0000000..b2d0712 --- /dev/null +++ b/assets/logos/kogral-v-static.svg @@ -0,0 +1,267 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/logos/kogral-v.svg b/assets/logos/kogral-v.svg new file mode 100644 index 0000000..c3a4820 --- /dev/null +++ b/assets/logos/kogral-v.svg @@ -0,0 +1,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/web/README.md b/assets/web/README.md new file mode 100644 index 0000000..5b9fdc8 --- /dev/null +++ b/assets/web/README.md @@ -0,0 +1,328 @@ +# KOGRAL Web Assets + +Web-based landing page and static content for KOGRAL. + +## Directory Structure + +```text +assets/web/ +├── src/ +│ ├── index.html # Source HTML (readable) +│ └── kogral.svg # Logo for landing page +├── index.html # Minified/Production HTML +├── kogral.svg # Logo for landing page +├── minify.sh # Minification script +└── README.md # This file +``` + +## Files + +### `src/index.html` - Source Version + +- **Purpose**: Development and maintenance +- **Content**: + - Full formatting and indentation + - Inline CSS and JavaScript + - Bilingual (English/Spanish) content + - Language-aware dynamic switching + - Knowledge graph showcase + - Technology stack display + - Core components grid + +**Use for:** + +- Editing content +- Understanding structure +- Version control +- Making translation updates + +### `index.html` - Production Version + +- **Purpose**: Served to browsers (fast loading) +- **Optimizations**: + - Removed all comments + - Compressed CSS (removed spaces, combined rules) + - Minified JavaScript (single line) + - Removed whitespace between tags + - Preserved all functionality + +**Use for:** + +- Production web server +- CDN distribution +- Browser caching +- Fast load times + +### `kogral.svg` - Logo + +- **Purpose**: Landing page branding +- **Source**: Copy of `../logos/kogral-h.svg` (horizontal logo) +- **Dimensions**: 610×200px (viewBox 0 0 610 200) +- **Features**: Animated knowledge graph nodes, connections, and text + +## How to Use + +### Development + +Edit `src/index.html`: + +```bash +# Edit source file +nano assets/web/src/index.html + +# Regenerate minified version (see below) +./assets/web/minify.sh +``` + +### Update Minified Version + +When you update `src/index.html`, regenerate `index.html`: + +```bash +# Using minify.sh script +cd /path/to/kogral +./assets/web/minify.sh + +# Or manually +cd /path/to/kogral +perl -e ' +use strict; +use warnings; + +open(my $fh, "<", "assets/web/src/index.html") or die $!; +my $content = do { local $/; <$fh> }; +close($fh); + +# Remove comments +$content =~ s///gs; + +# Compress whitespace in style tags +$content =~ s/(]*>)(.*?)(<\/style>)/ + my $before = $1; + my $style = $2; + my $after = $3; + $style =~ s{\/\*.*?\*\/}{}gs; + $style =~ s{\s+}{ }gs; + $style =~ s{\s*([{}:;,>+~])\s*}{$1}gs; + $before . $style . $after; +/gies; + +# Compress whitespace in script tags +$content =~ s/(]*>)(.*?)(<\/script>)/ + my $before = $1; + my $script = $2; + my $after = $3; + $script =~ s{\/\/.*$}{}gm; + $script =~ s{\s+}{ }gs; + $script =~ s{\s*([{}();,])\s*}{$1}gs; + $before . $script . $after; +/gies; + +# Remove whitespace between tags +$content =~ s/>\s+", "assets/web/index.html") or die $!; +print $out $content; +close($out); + +print "✅ Minified version created\n"; +' +``` + +### Deployment + +Serve `index.html` from your web server: + +```bash +# Using Rust +cargo install static-web-server +static-web-server -d assets/web/ + +# Using Python +python3 -m http.server --directory assets/web + +# Using Node.js +npx http-server assets/web + +# Using nginx +# Point root to assets/web/ +# Serve index.html as default +``` + +## Features + +### Responsive Design + +- Mobile-first approach +- Flexbox and Grid layouts +- Media queries for mobile +- Touch-friendly navigation + +### Performance + +- Inline CSS (no separate requests) +- Inline JavaScript (no blocking external scripts) +- Minimal dependencies (no frameworks) +- Optimized minified size + +### Bilingual + +- English and Spanish +- LocalStorage persistence +- Data attributes for translations +- Dynamic language switching + +### Modern CSS + +- CSS Gradients +- Animations (fadeInUp) +- Hover effects +- Grid and Flexbox layouts + +### Styling + +- KOGRAL color scheme (Blue #4a9eff, Green #3dd68d, Gold #fbbf24) +- Gradient backgrounds +- Inter font family +- Smooth transitions + +## Content Sections + +1. **Hero** - Title, tagline, logo, version badge +2. **Problems** - 4 knowledge management problems KOGRAL solves + - Scattered documentation + - No version control for decisions + - Lost context over time + - Isolated team knowledge +3. **How It Works** - Feature overview (Markdown-native, Semantic Search, Config-driven, Claude Code) +4. **Technology Stack** - Tech badges (Rust, Nickel, SurrealDB, fastembed, MCP, Logseq, etc.) +5. **Core Components** - Component showcase (kogral-core, kogral-cli, kogral-mcp, etc.) +6. **CTA** - Call-to-action button linking to GitHub +7. **Footer** - Credits and tagline + +## Translations + +All text content is bilingual. Edit data attributes in `src/index.html`: + +```html + +Knowledge Graphs +``` + +The JavaScript automatically updates based on selected language. + +## Color Scheme + +KOGRAL branding colors: + +- **Primary Blue**: `#4a9eff` - Main brand color +- **Secondary Green**: `#3dd68d` - Highlights and active states +- **Gold Accent**: `#fbbf24` - Gradient accents +- **Slate**: `#64748b` - Secondary text +- **Dark Background**: `#0a0a14` - Main background + +## Maintenance + +- Source edits go in `src/index.html` +- Regenerate `index.html` when source changes +- Both files are versioned in git +- Keep them in sync + +## Git Workflow + +```bash +# Edit source +nano assets/web/src/index.html + +# Regenerate minified version +./assets/web/minify.sh + +# Commit changes +git add assets/web/src/index.html +git add assets/web/index.html +git commit -m "Update landing page content" +git push +``` + +## File Sizes + +Source and production versions: + +| File | Type | +|------|------| +| `src/index.html` | Source (readable, formatted) | +| `index.html` | Production (minified, optimized) | +| `kogral.svg` | ~15KB (animated horizontal logo) | + +## Version Information + +- **Last Updated**: 2026-01-23 +- **Version**: 0.1.0 +- **Format**: HTML5 + CSS3 + ES6 +- **Compatibility**: All modern browsers +- **Languages**: English, Spanish + +## Technology Focus + +**KOGRAL** landing page emphasizes: + +- 📝 Git-native knowledge management +- 🔍 Semantic search with embeddings +- ⚙️ Config-driven architecture (Nickel) +- 🤖 Claude Code integration (MCP) +- 📊 6 node types, 6 relationships +- 🗄️ Multi-backend storage (Filesystem, SurrealDB, Memory) + +## Features Highlighted + +### 4 Core Problems Solved + +1. **Scattered Documentation** - Unifies notes, decisions, guidelines across tools +2. **No Version Control** - Git-tracked ADRs with full history +3. **Lost Context** - Semantic search and relationship tracking +4. **Isolated Knowledge** - Multi-graph architecture with inheritance + +### How It Works + +1. **Markdown-Native** - YAML frontmatter, wikilinks, code references +2. **Semantic Search** - Vector embeddings, local or cloud +3. **Config-Driven** - Nickel schemas, 3 modes (dev/prod/test) +4. **Claude Code** - MCP server with 7 tools, 6 resources, 2 prompts + +### Technology Stack + +- Rust Edition 2021 +- Nickel Config +- SurrealDB +- fastembed (local embeddings) +- rig-core (cloud embeddings) +- MCP Protocol +- Logseq Compatible +- Nushell Scripts + +### Core Components + +- **kogral-core** - Core library +- **kogral-cli** - 13 commands +- **kogral-mcp** - MCP server +- **Config System** - Nickel schemas +- **3 Storage Backends** - Filesystem, SurrealDB, Memory +- **2 Embedding Providers** - FastEmbed, rig-core +- **6 Node Types** - Note, Decision, Guideline, Pattern, Journal, Execution +- **6 Relationships** - relates_to, depends_on, implements, extends, supersedes, explains + +## Quality Metrics + +- 3 Rust crates +- 56 tests passing +- 15K lines of code +- 0 unsafe blocks +- 100% documentation coverage +- 0 clippy warnings + +--- + +**Last Updated**: 2026-01-23 +**Version**: 0.1.0 (matches KOGRAL release) diff --git a/assets/web/index.html b/assets/web/index.html new file mode 100644 index 0000000..5576cf1 --- /dev/null +++ b/assets/web/index.html @@ -0,0 +1 @@ + KOGRAL
✅ v0.1.0
KOGRAL - Git-Native Knowledge Graphs

Git-Native Knowledge Management

Knowledge Graphs

Structured knowledge management that scales from solo projects to organizations. Config-driven architecture for capturing architectural decisions, coding guidelines, and reusable patterns in version-controlled markdown.
100% Rust. Zero compromises.

The 4 Problems It Solves

01

Scattered Documentation

  • Notes in Notion
  • Decisions in Slack
  • Guidelines in wikis—all disconnected
  • KOGRAL unifies with git-native markdown + MCP
02

No Version Control for Decisions

  • Architectural decisions lost in chat history
  • No traceability for why code exists
  • KOGRAL: Git-tracked ADRs with full history
  • Link decisions directly to code with @file:line
03

Lost Context Over Time

  • Team members join and can't find past decisions
  • Outdated documentation causes repeated mistakes
  • KOGRAL: Semantic search across your knowledge base
  • Relationship tracking shows why patterns exist
04

Isolated Team Knowledge

  • Every project reinvents the wheel
  • Patterns can't be shared across teams
  • KOGRAL: Multi-graph architecture
  • Shared organizational knowledge + project-specific overrides
  • Inheritance system for guidelines

How It Works

📝

Markdown-Native

  • YAML frontmatter for metadata
  • Wikilinks [[like-this]] for relationships
  • Code references @file.rs:42
  • Logseq-compatible format
  • Human-readable, Git-friendly
🔍

Semantic Search

  • Text search across all nodes
  • Vector embeddings for semantic queries
  • Local embeddings (fastembed, no API costs)
  • Cloud APIs supported (OpenAI, Claude, Ollama)
  • Find related knowledge automatically
⚙️

Config-Driven

  • Nickel schemas with validation
  • 3 modes: dev, prod, test
  • Storage backend selection (filesystem, SurrealDB, in-memory)
  • Embedding provider configuration
  • No hardcoded paths or settings
🤖

Claude Code Integration

  • MCP server (Model Context Protocol)
  • 7 tools: search, add notes/decisions, link, export
  • 6 resources: project/shared graphs
  • 2 prompts: summarize project, find related
  • JSON-RPC 2.0 over stdio

Technology Stack

Rust Edition 2021Nickel ConfigSurrealDBfastembedrig-coreMCP ProtocolLogseq CompatibleTera TemplatesClap CLIDashMapNushell ScriptsmdBook Docs

Core Components

kogral-coreCore library
kogral-cli13 commands
kogral-mcpMCP server
Config SystemNickel schemas
3 Storage BackendsFilesystem, SurrealDB, Memory
2 Embedding ProvidersFastEmbed, rig-core
6 Node TypesNote, Decision, Guideline, Pattern, Journal, Execution
6 Relationshipsrelates_to, depends_on, implements, extends, supersedes, explains
Multi-GraphProject + Shared
56 Tests PassingQuality assurance
0 Unsafe CodeMemory safety
100% Doc CoveragePublic APIs documented

Ready to organize your knowledge?

3 Crates | 56 Tests | 15K LOC | 100% Rust 🦀

Get Started →

KOGRAL v0.1.0

Built with Rust • Configuration with Nickel

Git-Native Knowledge Graphs for Developer Teams

\ No newline at end of file diff --git a/assets/web/kogral.svg b/assets/web/kogral.svg new file mode 100644 index 0000000..ef28420 --- /dev/null +++ b/assets/web/kogral.svg @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/web/minify.sh b/assets/web/minify.sh new file mode 100755 index 0000000..c42d733 --- /dev/null +++ b/assets/web/minify.sh @@ -0,0 +1,87 @@ +#!/bin/bash +# Minify index.html from src/ to production version +# Usage: ./minify.sh + +set -e + +SRC_FILE="$(dirname "$0")/src/index.html" +OUT_FILE="$(dirname "$0")/index.html" +TEMP_FILE="${OUT_FILE}.tmp" + +if [ ! -f "$SRC_FILE" ]; then + echo "❌ Source file not found: $SRC_FILE" + exit 1 +fi + +echo "🔨 Minifying HTML..." +echo " Input: $SRC_FILE" +echo " Output: $OUT_FILE" + +perl -e " +use strict; +use warnings; + +open(my \$fh, '<', '$SRC_FILE') or die \$!; +my \$content = do { local \$/; <\$fh> }; +close(\$fh); + +# Remove HTML comments +\$content =~ s///gs; + +# Compress CSS (remove spaces and comments) +\$content =~ s/(]*>)(.*?)(<\/style>)/ + my \$before = \$1; + my \$style = \$2; + my \$after = \$3; + \$style =~ s{\/\*.*?\*\/}{}gs; + \$style =~ s{\s+}{ }gs; + \$style =~ s{\s*([{}:;,>+~])\s*}{\$1}gs; + \$before . \$style . \$after; +/gies; + +# Compress JavaScript (remove comments and extra spaces) +\$content =~ s/(]*>)(.*?)(<\/script>)/ + my \$before = \$1; + my \$script = \$2; + my \$after = \$3; + \$script =~ s{\/\/.*\$}{}gm; + \$script =~ s{\s+}{ }gs; + \$script =~ s{\s*([{}();,])\s*}{\$1}gs; + \$before . \$script . \$after; +/gies; + +# Remove whitespace between tags +\$content =~ s/>\s+', '$TEMP_FILE') or die \$!; +print \$out \$content; +close(\$out); +" || { + echo "❌ Minification failed" + rm -f "$TEMP_FILE" + exit 1 +} + +mv "$TEMP_FILE" "$OUT_FILE" + +# Show statistics +original=$(wc -c < "$SRC_FILE") +minified=$(wc -c < "$OUT_FILE") +saved=$((original - minified)) +percent=$((saved * 100 / original)) + +echo "" +echo "✅ Minification complete!" +echo "" +echo "📊 Compression statistics:" +printf " Original: %6d bytes\n" "$original" +printf " Minified: %6d bytes\n" "$minified" +printf " Saved: %6d bytes (%d%%)\n" "$saved" "$percent" +echo "" +echo "✅ $OUT_FILE is ready for production" diff --git a/assets/web/src/index.html b/assets/web/src/index.html new file mode 100644 index 0000000..1e4f96e --- /dev/null +++ b/assets/web/src/index.html @@ -0,0 +1,956 @@ + + + + + + + KOGRAL + + + + + +
+ +
+ + +
+ +
+
+ ✅ v0.1.0 +
+ KOGRAL - Git-Native Knowledge Graphs +
+

Git-Native Knowledge Management

+

+ Knowledge Graphs +

+

+ Structured knowledge management that scales from solo projects to organizations. Config-driven architecture for capturing architectural decisions, coding guidelines, and reusable patterns in version-controlled markdown. + +
100% Rust. Zero compromises. + +

+
+ +
+

+ The 4 Problems It Solves +

+
+
+
01
+

+ Scattered Documentation +

+
    +
  • Notes in Notion
  • +
  • Decisions in Slack
  • +
  • Guidelines in wikis—all disconnected
  • +
  • KOGRAL unifies with git-native markdown + MCP
  • +
+
+
+
02
+

+ No Version Control for Decisions +

+
    +
  • Architectural decisions lost in chat history
  • +
  • No traceability for why code exists
  • +
  • KOGRAL: Git-tracked ADRs with full history
  • +
  • Link decisions directly to code with @file:line
  • +
+
+
+
03
+

+ Lost Context Over Time +

+
    +
  • Team members join and can't find past decisions
  • +
  • Outdated documentation causes repeated mistakes
  • +
  • KOGRAL: Semantic search across your knowledge base
  • +
  • Relationship tracking shows why patterns exist
  • +
+
+
+
04
+

+ Isolated Team Knowledge +

+
    +
  • Every project reinvents the wheel
  • +
  • Patterns can't be shared across teams
  • +
  • KOGRAL: Multi-graph architecture
  • +
  • Shared organizational knowledge + project-specific overrides
  • +
  • Inheritance system for guidelines
  • +
+
+
+
+ +
+

+ How It Works +

+
+
+
📝
+

+ Markdown-Native +

+
    +
  • YAML frontmatter for metadata
  • +
  • Wikilinks [[like-this]] for relationships
  • +
  • Code references @file.rs:42
  • +
  • Logseq-compatible format
  • +
  • Human-readable, Git-friendly
  • +
+
+
+
🔍
+

+ Semantic Search +

+
    +
  • Text search across all nodes
  • +
  • Vector embeddings for semantic queries
  • +
  • Local embeddings (fastembed, no API costs)
  • +
  • Cloud APIs supported (OpenAI, Claude, Ollama)
  • +
  • Find related knowledge automatically
  • +
+
+
+
⚙️
+

+ Config-Driven +

+
    +
  • Nickel schemas with validation
  • +
  • 3 modes: dev, prod, test
  • +
  • Storage backend selection (filesystem, SurrealDB, in-memory)
  • +
  • Embedding provider configuration
  • +
  • No hardcoded paths or settings
  • +
+
+
+
🤖
+

+ Claude Code Integration +

+
    +
  • MCP server (Model Context Protocol)
  • +
  • 7 tools: search, add notes/decisions, link, export
  • +
  • 6 resources: project/shared graphs
  • +
  • 2 prompts: summarize project, find related
  • +
  • JSON-RPC 2.0 over stdio
  • +
+
+
+
+ +
+

+ Technology Stack +

+
+ Rust Edition 2021 + Nickel Config + SurrealDB + fastembed + rig-core + MCP Protocol + Logseq Compatible + Tera Templates + Clap CLI + DashMap + Nushell Scripts + mdBook Docs +
+
+ +
+

+ Core Components +

+
+
+ kogral-coreCore library +
+
+ kogral-cli13 commands +
+
+ kogral-mcpMCP server +
+
+ Config SystemNickel schemas +
+
+ 3 Storage BackendsFilesystem, SurrealDB, Memory +
+
+ 2 Embedding ProvidersFastEmbed, rig-core +
+
+ 6 Node TypesNote, Decision, Guideline, Pattern, Journal, Execution +
+
+ 6 Relationshipsrelates_to, depends_on, implements, extends, supersedes, explains +
+
+ Multi-GraphProject + Shared +
+
+ 56 Tests PassingQuality assurance +
+
+ 0 Unsafe CodeMemory safety +
+
+ 100% Doc CoveragePublic APIs documented +
+
+
+ +
+

+ Ready to organize your knowledge? +

+

+ 3 Crates | 56 Tests | 15K LOC | 100% Rust 🦀 +

+ Get Started → +
+ +
+

KOGRAL v0.1.0

+

+ Built with Rust • Configuration with Nickel +

+

+ Git-Native Knowledge Graphs for Developer Teams +

+
+
+ + + + diff --git a/assets/web/src/kogral.svg b/assets/web/src/kogral.svg new file mode 100644 index 0000000..ef28420 --- /dev/null +++ b/assets/web/src/kogral.svg @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..4aad622 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,354 @@ +# KOGRAL Documentation + +
KoGraL Logo
+ +Welcome to the KOGRAL documentation! This directory contains comprehensive documentation for KOGRAL (**KO**wledge **GRA**phs, **L**ocal-first), built with [mdBook](https://rust-lang.github.io/mdBook/). + +## 📚 Reading the Documentation + +You have several options for reading the documentation: + +### Option 1: Serve Locally with mdBook (Recommended) + +The best reading experience with navigation, search, and live reload: + +```bash +# Serve documentation at http://localhost:3000 +just docs::serve +``` + +This will: +- Build the mdBook +- Start a local web server on port 3000 +- Open your browser automatically +- Watch for changes and auto-reload + +### Option 2: Build Static HTML + +Generate static HTML files you can browse offline: + +```bash +# Build mdBook to docs/book/ +just docs::build +``` + +Then open `docs/book/index.html` in your browser. + +### Option 3: Read Markdown Files Directly + +All documentation is written in Markdown and can be read directly: + +- Browse via GitHub/GitLab web interface +- Use your editor's Markdown preview +- Read from terminal with `bat`, `glow`, or similar tools + +**Navigation**: See [SUMMARY.md](SUMMARY.md) for the complete table of contents. + +## 🛠️ Documentation Commands + +We use `just` recipes for documentation tasks. All commands assume you're in the project root directory. + +### Build and Serve + +```bash +# Serve documentation locally (recommended) +just docs::serve + +# Build static HTML +just docs::build + +# Watch and rebuild on file changes +just docs::watch +``` + +### Validation + +```bash +# Test code examples in documentation +just docs::test + +# Check for broken links +just docs::check-links +``` + +### Cleanup + +```bash +# Remove build artifacts +just docs::clean +``` + +### View All Documentation Commands + +```bash +just docs::help +``` + +## 📦 Installing mdBook + +mdBook is required to build and serve the documentation. + +### Install via Cargo + +```bash +cargo install mdbook +``` + +### Install Optional Tools + +For enhanced functionality: + +```bash +# Link checker (validates internal/external links) +cargo install mdbook-linkcheck + +# Mermaid diagram support +cargo install mdbook-mermaid + +# PlantUML diagram support +cargo install mdbook-plantuml +``` + +### Verify Installation + +```bash +mdbook --version +# Should output: mdbook v0.4.x or later +``` + +## 📖 Documentation Structure + +The documentation is organized into the following sections: + +### 1. **KOGRAL Definition** (`kogral/`) +- What is KOGRAL and why it exists +- Core concepts (nodes, edges, graphs) +- Design philosophy + +### 2. **Guides** (`guides/`) +- Quick start (5 minutes) +- Installation guide +- Use cases with examples + +### 3. **Architecture** (`architecture/`) +- System overview with diagrams +- Config-driven architecture +- Graph model details +- ADRs (Architectural Decision Records) + +### 4. **Setup** (`setup/`) +- Initial setup +- Development environment +- Production deployment +- Testing environment +- CI/CD integration + +### 5. **Configuration** (`config/`) +- Configuration overview +- Nickel schema reference +- Runtime configuration +- Environment modes (dev/prod/test) + +### 6. **Storage** (`storage/`) +- Storage architecture (hybrid strategy) +- Filesystem backend +- SurrealDB backend +- In-memory backend +- Sync mechanism + +### 7. **AI & Embeddings** (`ai/`) +- Semantic search +- Embedding providers +- Provider comparison +- Configuration examples + +### 8. **Templates** (`templates/`) +- Template system (Tera) +- Document templates +- Export templates +- Custom templates + +### 9. **CLI Reference** (`cli/`) +- All kogral-cli commands +- Common workflows +- Advanced usage +- Troubleshooting + +### 10. **Apps & Integrations** (`apps/`) +- MCP quick guide (Claude Code) +- Logseq integration +- Vapora integration + +### 11. **API Reference** (`api/`) +- MCP tools specification +- Storage trait +- Embedding trait +- REST API (future) + +### 12. **Contributing** (`contributing/`) +- Development setup +- Code guidelines +- Testing standards +- Documentation guidelines + +## 🎨 Visual Diagrams + +The documentation includes SVG diagrams for visual understanding: + +- **[architecture-overview.svg](diagrams/architecture-overview.svg)** - Complete system architecture +- **[core-concepts.svg](diagrams/core-concepts.svg)** - Node types and relationships +- **[config-composition.svg](diagrams/config-composition.svg)** - Configuration flow (Nickel → JSON → Rust) +- **[storage-architecture.svg](diagrams/storage-architecture.svg)** - Hybrid storage strategy + +These diagrams are embedded in relevant documentation pages and can be viewed standalone in a browser. + +## 🔍 Searching the Documentation + +When using `just docs::serve`, you get a built-in search feature: + +1. Click the search icon (🔍) in the top-left corner +2. Type your query +3. Press Enter to navigate results + +The search indexes all documentation content including: +- Page titles +- Headers +- Body text +- Code examples (optionally) + +## ✏️ Editing Documentation + +### File Format + +All documentation is written in **GitHub Flavored Markdown** with mdBook extensions. + +See [contributing/documentation.md](contributing/documentation.md) for detailed editing guidelines. + +### Adding a New Page + +1. Create the markdown file in the appropriate directory +2. Add it to `SUMMARY.md` for navigation +3. Build to verify: `just docs::build` + +### Adding a New Section + +1. Create the directory +2. Add a `README.md` for the section landing page +3. Add section to `SUMMARY.md` + +## 🧪 Testing Documentation + +### Test Code Examples + +```bash +just docs::test +``` + +This runs all Rust code examples in the documentation to ensure they compile. + +### Check Links + +```bash +just docs::check-links +``` + +This validates all internal and external links. + +## 📝 Documentation Standards + +When contributing to documentation: + +1. **Use clear, concise language** - Write for developers and AI agents +2. **Include code examples** - Show, don't just tell +3. **Add diagrams where helpful** - Visual aids improve understanding +4. **Link related concepts** - Help readers discover related content +5. **Test code examples** - Ensure code compiles and works +6. **Use consistent formatting** - Follow existing page structure +7. **Update SUMMARY.md** - New pages must be in navigation +8. **Run checks before committing**: + +```bash +just docs::build +just docs::test +just docs::check-links +``` + +## 💡 Tips + +### Live Reload While Writing + +```bash +just docs::watch +``` + +This watches for changes and rebuilds automatically. Open in your browser to see updates in real-time. + +### Markdown Preview in Editor + +Most editors have Markdown preview: + +- **VS Code**: `Ctrl+Shift+V` (Cmd+Shift+V on Mac) +- **IntelliJ/CLion**: Preview pane (right side) +- **Vim/Neovim**: Use plugins like `markdown-preview.nvim` + +### Quick Reference + +- **SUMMARY.md** - Table of contents (edit to add/remove pages) +- **book.toml** - mdBook configuration +- **theme/** - Custom CSS/JS (if needed) +- **diagrams/** - SVG diagrams + +## 🐛 Troubleshooting + +### mdbook command not found + +```bash +# Install mdBook +cargo install mdbook + +# Verify installation +mdbook --version +``` + +### Port 3000 already in use + +```bash +# Serve on different port +cd docs +mdbook serve --port 3001 +``` + +### Links broken after moving files + +```bash +# Check all links +just docs::check-links + +# Update internal links in affected files +# Then rebuild +just docs::build +``` + +## 📚 Resources + +- [mdBook User Guide](https://rust-lang.github.io/mdBook/) +- [GitHub Flavored Markdown Spec](https://github.github.com/gfm/) +- [Markdown Guide](https://www.markdownguide.org/) + +## 🤝 Contributing to Documentation + +Documentation improvements are always welcome! To contribute: + +1. Fork the repository +2. Create a feature branch +3. Make your changes +4. Test with `just docs::build` and `just docs::test` +5. Submit a pull request + +See [contributing/documentation.md](contributing/documentation.md) for detailed guidelines. + +--- + +**Happy documenting! 📖** + +If you have questions or need help, please open an issue or reach out to the maintainers. diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md new file mode 100644 index 0000000..53ef1b0 --- /dev/null +++ b/docs/SUMMARY.md @@ -0,0 +1,103 @@ +# Summary + +[Introduction](README.md) + +# Project Definition + +- [What is KOGRAL?](kogral/what-is-kogral.md) +- [Core Concepts](kogral/core-concepts.md) +- [Why KOGRAL?](kogral/why-kogral.md) +- [Design Philosophy](kogral/design-philosophy.md) + +# Guides + +- [Installation](guides/installation.md) +- [Quick Start](guides/quickstart.md) +- [Daily Workflows](guides/daily-workflows.md) +- [Use Cases](guides/use-cases.md) +- [Best Practices](guides/best-practices.md) + +# Architecture + +- [System Overview](architecture/overview.md) +- [Graph Model](architecture/graph-model.md) +- [Config-Driven Design](architecture/config-driven.md) +- [Storage Architecture](architecture/storage-architecture.md) +- [Logseq Blocks Design](architecture/logseq-blocks-design.md) + +## ADRs + +- [ADR-001: Nickel vs TOML for Configuration](architecture/adrs/001-nickel-vs-toml.md) +- [ADR-002: FastEmbed via AI Providers](architecture/adrs/002-fastembed-ai-providers.md) +- [ADR-003: Hybrid Storage Strategy](architecture/adrs/003-hybrid-storage.md) +- [ADR-004: Logseq Blocks Support](architecture/adrs/004-logseq-blocks-support.md) +- [ADR-005: MCP Protocol for AI Integration](architecture/adrs/005-mcp-protocol.md) + +# Setup + +- [Prerequisites](setup/prerequisites.md) +- [Installation Methods](setup/installation.md) +- [Project Initialization](setup/project-init.md) +- [Environment Configuration](setup/environment.md) +- [Verification](setup/verification.md) + +# Configuration + +- [Configuration Overview](config/overview.md) +- [Nickel Schemas](config/nickel-schemas.md) +- [Graph Settings](config/graph-settings.md) +- [Inheritance](config/inheritance.md) +- [Examples](config/examples.md) + +# Storage + +- [Storage Backends](storage/backends.md) +- [Filesystem Storage](storage/filesystem.md) +- [SurrealDB Storage](storage/surrealdb.md) +- [In-Memory Storage](storage/memory.md) +- [Sync Strategies](storage/sync.md) + +# AI & Embeddings + +- [Embeddings Overview](ai/embeddings-overview.md) +- [Provider Configuration](ai/providers.md) +- [FastEmbed Local](ai/fastembed.md) +- [OpenAI Integration](ai/openai.md) +- [Claude Integration](ai/claude.md) +- [Ollama Integration](ai/ollama.md) +- [Semantic Search](ai/semantic-search.md) + +# Templates + +- [Template System](templates/overview.md) +- [Document Templates](templates/documents.md) +- [Export Templates](templates/export.md) +- [Customization](templates/customization.md) + +# CLI + +- [CLI Overview](cli/overview.md) +- [Commands Reference](cli/commands.md) +- [Workflows](cli/workflows.md) +- [NuShell Scripts](cli/nushell-scripts.md) + +# Apps & Connections + +- [MCP Quick Guide](apps/mcp-quickguide.md) +- [Claude Code Integration](apps/claude-code.md) +- [Logseq Integration](apps/logseq.md) +- [Obsidian Compatibility](apps/obsidian.md) +- [Git Workflows](apps/git.md) + +# API Reference + +- [MCP Protocol](api/mcp-protocol.md) +- [Tools Reference](api/mcp-tools.md) +- [Resources](api/mcp-resources.md) +- [Rust API](api/rust-api.md) + +# Contributing + +- [Development Setup](contributing/development.md) +- [Code Standards](contributing/standards.md) +- [Testing](contributing/testing.md) diff --git a/docs/ai/embeddings-overview.md b/docs/ai/embeddings-overview.md new file mode 100644 index 0000000..5d1c7ad --- /dev/null +++ b/docs/ai/embeddings-overview.md @@ -0,0 +1 @@ +# Embeddings Overview diff --git a/docs/ai/fastembed.md b/docs/ai/fastembed.md new file mode 100644 index 0000000..46b26bf --- /dev/null +++ b/docs/ai/fastembed.md @@ -0,0 +1 @@ +# FastEmbed Local diff --git a/docs/ai/ollama.md b/docs/ai/ollama.md new file mode 100644 index 0000000..481249e --- /dev/null +++ b/docs/ai/ollama.md @@ -0,0 +1 @@ +# Ollama Integration diff --git a/docs/ai/openai.md b/docs/ai/openai.md new file mode 100644 index 0000000..71042f0 --- /dev/null +++ b/docs/ai/openai.md @@ -0,0 +1 @@ +# OpenAI Integration diff --git a/docs/ai/providers.md b/docs/ai/providers.md new file mode 100644 index 0000000..d687c56 --- /dev/null +++ b/docs/ai/providers.md @@ -0,0 +1 @@ +# Provider Configuration diff --git a/docs/ai/semantic-search.md b/docs/ai/semantic-search.md new file mode 100644 index 0000000..95a7eed --- /dev/null +++ b/docs/ai/semantic-search.md @@ -0,0 +1 @@ +# Semantic Search diff --git a/docs/api/README.md b/docs/api/README.md new file mode 100644 index 0000000..da69370 --- /dev/null +++ b/docs/api/README.md @@ -0,0 +1,229 @@ +# API Reference + +API documentation for the Knowledge Base system. + +## Available APIs + +- [MCP Tools](mcp-tools.md) - Model Context Protocol tools and resources for Claude Code integration +- [Rust API](rust-api.md) - kogral-core library API for programmatic access + +## Overview + +The Knowledge Base system provides multiple API layers: + +### MCP Protocol + +JSON-RPC 2.0 protocol for Claude Code integration: +- 7 Tools for interacting with knowledge base +- 6 Resources for accessing knowledge graphs +- 2 Prompts for guided workflows + +See [MCP Tools](mcp-tools.md) for complete reference. + +### Rust Library + +Direct programmatic access via kogral-core: + +```rust +use kb_core::prelude::*; + +// Load a graph +let storage = FilesystemStorage::new(".kogral")?; +let graph = storage.load_graph("default").await?; + +// Query nodes +let results = graph.nodes.values() + .filter(|n| n.tags.contains(&"rust".to_string())) + .collect::>(); +``` + +See [Rust API](rust-api.md) for complete reference. + +## Quick Reference + +### Common MCP Operations + +```json +// Search knowledge base +{ + "jsonrpc": "2.0", + "method": "kogral/search", + "params": { + "query": "error handling", + "type": "guideline", + "semantic": true + } +} + +// Add a note +{ + "jsonrpc": "2.0", + "method": "kogral/add_note", + "params": { + "title": "New Discovery", + "content": "Interesting finding about...", + "tags": ["research", "rust"] + } +} + +// Get guidelines +{ + "jsonrpc": "2.0", + "method": "kogral/get_guidelines", + "params": { + "language": "rust", + "category": "error-handling" + } +} +``` + +### Common Rust Operations + +```rust +// Create a new graph +let mut graph = Graph::new("my-project".to_string()); + +// Add a node +let node = Node { + id: "note-1".to_string(), + node_type: NodeType::Note, + title: "Example Note".to_string(), + content: "Note content".to_string(), + tags: vec!["rust".to_string()], + status: NodeStatus::Active, + // ... +}; +graph.add_node(node)?; + +// Create a relationship +let edge = Edge::new( + "note-1".to_string(), + "note-2".to_string(), + EdgeType::RelatesTo, +); +graph.add_edge(edge)?; + +// Save graph +storage.save_graph(&graph).await?; +``` + +## Authentication + +### MCP Server + +No authentication required for stdio transport (local use). + +For remote access (SSE transport), configure API keys in environment: + +```bash +export KB_API_KEY="your-api-key" +``` + +### Rust Library + +No authentication needed for local filesystem access. + +For SurrealDB backend, configure credentials: + +```rust +let config = SurrealDbConfig { + url: "ws://localhost:8000".to_string(), + namespace: "kb".to_string(), + database: "default".to_string(), + username: Some("root".to_string()), + password: Some("root".to_string()), +}; +let storage = SurrealDbStorage::new(config).await?; +``` + +## Error Handling + +All APIs use structured error types: + +### MCP Errors + +JSON-RPC error responses: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "error": { + "code": -32600, + "message": "Invalid request", + "data": { + "details": "Missing required parameter: query" + } + } +} +``` + +Error codes: +- `-32700`: Parse error +- `-32600`: Invalid request +- `-32601`: Method not found +- `-32602`: Invalid params +- `-32603`: Internal error + +### Rust Errors + +`KbError` enum with thiserror: + +```rust +pub enum KbError { + #[error("Storage error: {0}")] + Storage(String), + + #[error("Node not found: {0}")] + NodeNotFound(String), + + #[error("Invalid configuration: {0}")] + Config(String), + + #[error("Parse error: {0}")] + Parse(String), +} +``` + +## Rate Limiting + +MCP server has no rate limiting for local stdio use. + +For production deployments with remote access, configure rate limits: + +```nickel +mcp = { + rate_limit = { + enabled = true, + requests_per_minute = 60, + }, +} +``` + +## Versioning + +API follows semantic versioning: + +- **Major version**: Breaking changes to API +- **Minor version**: New features, backward compatible +- **Patch version**: Bug fixes, backward compatible + +Current version: `1.0.0` + +## Deprecation Policy + +- Deprecated features marked in documentation +- Minimum 1 major version before removal +- Migration guide provided + +## Support + +- File issues on GitHub +- Check documentation updates +- Join community discussions + +## See Also + +- [MCP Specification](https://modelcontextprotocol.io/docs) +- [kogral-core Documentation](../../crates/kogral-core/README.md) +- [Configuration Reference](../user-guide/configuration.md) diff --git a/docs/api/mcp-protocol.md b/docs/api/mcp-protocol.md new file mode 100644 index 0000000..3d7fbf8 --- /dev/null +++ b/docs/api/mcp-protocol.md @@ -0,0 +1 @@ +# MCP Protocol diff --git a/docs/api/mcp-resources.md b/docs/api/mcp-resources.md new file mode 100644 index 0000000..3c1229e --- /dev/null +++ b/docs/api/mcp-resources.md @@ -0,0 +1 @@ +# Resources diff --git a/docs/api/mcp-tools.md b/docs/api/mcp-tools.md new file mode 100644 index 0000000..6b90ead --- /dev/null +++ b/docs/api/mcp-tools.md @@ -0,0 +1,902 @@ +# MCP Tools API Reference + +Complete reference for the Model Context Protocol (MCP) server tools and resources. + +## Overview + +The kogral-mcp server implements the MCP protocol (JSON-RPC 2.0) for Claude Code integration. It provides: + +- **10 Tools**: Operations for querying and modifying knowledge base (7 core + 3 block tools) +- **6 Resources**: Access to knowledge graph content via URIs +- **2 Prompts**: Guided workflows for common tasks + +## Server Configuration + +### Start MCP Server + +```bash +# Stdio transport (local use) +kogral serve + +# Or run directly +kogral-mcp serve +``` + +### Claude Code Configuration + +Add to `~/.config/claude/config.json`: + +```json +{ + "mcpServers": { + "kogral-mcp": { + "command": "/path/to/kogral-mcp", + "args": ["serve"], + "env": { + "KOGRAL_DIR": "/path/to/project/.kogral" + } + } + } +} +``` + +## Tools + +### kogral/search + +Search the knowledge base using text and/or semantic similarity. + +**Input Schema**: + +```json +{ + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "Search query" + }, + "type": { + "type": "string", + "enum": ["note", "decision", "guideline", "pattern", "journal", "execution", "all"], + "description": "Filter by node type", + "default": "all" + }, + "project": { + "type": "string", + "description": "Limit search to specific project graph" + }, + "semantic": { + "type": "boolean", + "description": "Enable semantic similarity search", + "default": true + }, + "threshold": { + "type": "number", + "description": "Minimum similarity threshold (0-1)", + "default": 0.4 + }, + "limit": { + "type": "integer", + "description": "Maximum number of results", + "default": 10 + } + }, + "required": ["query"] +} +``` + +**Example Request**: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "kogral/search", + "params": { + "query": "error handling patterns in Rust", + "type": "pattern", + "semantic": true, + "threshold": 0.6, + "limit": 5 + } +} +``` + +**Example Response**: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "type": "text", + "text": "Found 3 result(s):\n\n1. Error Handling with thiserror (pattern, score: 0.85)\n Tags: rust, error-handling\n Created: 2026-01-15\n \n2. Result Type Best Practices (guideline, score: 0.72)\n Tags: rust, error-handling, best-practices\n Created: 2026-01-10\n\n3. Custom Error Types (note, score: 0.65)\n Tags: rust, error-handling\n Created: 2026-01-08" + } +} +``` + +### kogral/add_note + +Add a new note to the knowledge base. + +**Input Schema**: + +```json +{ + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "Note title" + }, + "content": { + "type": "string", + "description": "Note content (markdown)" + }, + "tags": { + "type": "array", + "items": { "type": "string" }, + "description": "Tags for categorization", + "default": [] + }, + "relates_to": { + "type": "array", + "items": { "type": "string" }, + "description": "Related node IDs", + "default": [] + }, + "project": { + "type": "string", + "description": "Project graph name", + "default": "default" + } + }, + "required": ["title", "content"] +} +``` + +**Example Request**: + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "method": "kogral/add_note", + "params": { + "title": "Async Trait Patterns", + "content": "Common patterns for using async traits in Rust:\n\n1. Use `async-trait` crate\n2. Box return types for flexibility\n3. Consider Send + Sync bounds", + "tags": ["rust", "async", "patterns"], + "relates_to": ["pattern-error-handling"] + } +} +``` + +**Example Response**: + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "result": { + "type": "text", + "text": "Note added successfully: note-async-trait-patterns (ID: note-abc123)" + } +} +``` + +### kogral/add_decision + +Create an Architectural Decision Record (ADR). + +**Input Schema**: + +```json +{ + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "Decision title" + }, + "context": { + "type": "string", + "description": "Decision context and background" + }, + "decision": { + "type": "string", + "description": "The decision made" + }, + "consequences": { + "type": "array", + "items": { "type": "string" }, + "description": "List of consequences", + "default": [] + }, + "status": { + "type": "string", + "enum": ["proposed", "accepted", "rejected", "deprecated", "superseded"], + "default": "proposed" + }, + "tags": { + "type": "array", + "items": { "type": "string" }, + "default": [] + } + }, + "required": ["title", "context", "decision"] +} +``` + +**Example Request**: + +```json +{ + "jsonrpc": "2.0", + "id": 3, + "method": "kogral/add_decision", + "params": { + "title": "Use SurrealDB for Knowledge Graph Storage", + "context": "Need a scalable storage solution that supports graph queries and can handle growing knowledge base", + "decision": "Adopt SurrealDB as the primary storage backend for production deployments", + "consequences": [ + "Better query performance for graph traversal", + "Native support for relationships", + "Additional infrastructure dependency", + "Team needs to learn SurrealDB query language" + ], + "status": "accepted", + "tags": ["architecture", "storage", "surrealdb"] + } +} +``` + +**Example Response**: + +```json +{ + "jsonrpc": "2.0", + "id": 3, + "result": { + "type": "text", + "text": "Decision added: decision-use-surrealdb (ID: decision-xyz789)\nStatus: accepted" + } +} +``` + +### kogral/link + +Create a relationship between two nodes. + +**Input Schema**: + +```json +{ + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "Source node ID" + }, + "to": { + "type": "string", + "description": "Target node ID" + }, + "relation": { + "type": "string", + "enum": ["relates_to", "depends_on", "implements", "extends", "supersedes", "explains"], + "description": "Relationship type" + }, + "strength": { + "type": "number", + "description": "Relationship strength (0-1)", + "minimum": 0, + "maximum": 1, + "default": 1.0 + } + }, + "required": ["from", "to", "relation"] +} +``` + +**Example Request**: + +```json +{ + "jsonrpc": "2.0", + "id": 4, + "method": "kogral/link", + "params": { + "from": "note-async-trait-patterns", + "to": "pattern-error-handling", + "relation": "relates_to", + "strength": 0.8 + } +} +``` + +**Example Response**: + +```json +{ + "jsonrpc": "2.0", + "id": 4, + "result": { + "type": "text", + "text": "Link created: note-async-trait-patterns --[relates_to]--> pattern-error-handling (strength: 0.8)" + } +} +``` + +**Relationship Types**: + +- `relates_to`: General conceptual relationship +- `depends_on`: Dependency (from depends on to) +- `implements`: Implementation of concept/pattern +- `extends`: Inherits or extends another node +- `supersedes`: Replaces an older version +- `explains`: Provides documentation/clarification + +### kogral/get_guidelines + +Retrieve guidelines for current project with inheritance resolution. + +**Input Schema**: + +```json +{ + "type": "object", + "properties": { + "language": { + "type": "string", + "description": "Programming language (e.g., rust, nushell)" + }, + "category": { + "type": "string", + "description": "Guideline category (e.g., error-handling, testing)" + }, + "include_base": { + "type": "boolean", + "description": "Include shared/base guidelines", + "default": true + } + } +} +``` + +**Example Request**: + +```json +{ + "jsonrpc": "2.0", + "id": 5, + "method": "kogral/get_guidelines", + "params": { + "language": "rust", + "category": "error-handling", + "include_base": true + } +} +``` + +**Example Response**: + +```json +{ + "jsonrpc": "2.0", + "id": 5, + "result": { + "type": "text", + "text": "Guidelines for rust/error-handling:\n\n## Project Guidelines (priority: 150)\n\n1. Custom Error Types (guideline-custom-errors)\n - Use thiserror for error definitions\n - Implement From traits for conversions\n - Source: .kogral/guidelines/rust-errors.md\n\n## Shared Guidelines (priority: 50)\n\n1. Result Type Best Practices (guideline-result-best-practices)\n - Always use Result for fallible operations\n - Never use unwrap() in production\n - Source: ~/Tools/.kogral-shared/guidelines/rust-errors.md\n\n2. Error Propagation (guideline-error-propagation)\n - Use ? operator for error propagation\n - Add context with .context()\n - Source: ~/Tools/.kogral-shared/guidelines/rust-errors.md" + } +} +``` + +### kogral/list_graphs + +List available knowledge graphs. + +**Input Schema**: + +```json +{ + "type": "object", + "properties": {} +} +``` + +**Example Request**: + +```json +{ + "jsonrpc": "2.0", + "id": 6, + "method": "kogral/list_graphs" +} +``` + +**Example Response**: + +```json +{ + "jsonrpc": "2.0", + "id": 6, + "result": { + "type": "text", + "text": "Available graphs:\n\n- default (Current project)\n Path: /path/to/project/.kogral\n Nodes: 42\n Last modified: 2026-01-17T10:30:00Z\n\n- shared (Shared guidelines)\n Path: ~/Tools/.kogral-shared\n Nodes: 156\n Last modified: 2026-01-15T14:20:00Z" + } +} +``` + +### kogral/export + +Export knowledge base to various formats. + +**Input Schema**: + +```json +{ + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": ["logseq", "json", "markdown"], + "description": "Export format" + }, + "output_path": { + "type": "string", + "description": "Output file or directory path" + }, + "include_types": { + "type": "array", + "items": { + "type": "string", + "enum": ["note", "decision", "guideline", "pattern", "journal", "execution"] + }, + "description": "Node types to include", + "default": ["note", "decision", "guideline", "pattern"] + }, + "skip_journals": { + "type": "boolean", + "default": true + } + }, + "required": ["format", "output_path"] +} +``` + +**Example Request**: + +```json +{ + "jsonrpc": "2.0", + "id": 7, + "method": "kogral/export", + "params": { + "format": "logseq", + "output_path": "/Users/akasha/logseq-graph", + "include_types": ["note", "decision", "guideline"], + "skip_journals": true + } +} +``` + +**Example Response**: + +```json +{ + "jsonrpc": "2.0", + "id": 7, + "result": { + "type": "text", + "text": "Export completed:\n\nFormat: Logseq\nOutput: /Users/akasha/logseq-graph\nExported: 42 nodes\n - 23 notes\n - 12 decisions\n - 7 guidelines\n\nLogseq graph ready to open." + } +} +``` + +## Block Tools + +Tools for querying Logseq content blocks. Requires `blocks.enable_mcp_tools = true` in configuration. + +### kogral/find_blocks + +Find blocks by tag, task status, or custom property across the knowledge base. + +**Input Schema**: + +```json +{ + "type": "object", + "properties": { + "tag": { + "type": "string", + "description": "Find blocks with this tag (e.g., 'card', 'important')" + }, + "status": { + "type": "string", + "enum": ["TODO", "DOING", "DONE", "LATER", "NOW", "WAITING", "CANCELLED"], + "description": "Find blocks with this task status" + }, + "property_key": { + "type": "string", + "description": "Custom property key to search for" + }, + "property_value": { + "type": "string", + "description": "Custom property value to match" + }, + "limit": { + "type": "integer", + "description": "Maximum number of results", + "default": 20 + } + } +} +``` + +**Note**: Provide one of: `tag`, `status`, or both `property_key` and `property_value`. + +**Example Request** (find blocks by tag): + +```json +{ + "jsonrpc": "2.0", + "id": 8, + "method": "kogral/find_blocks", + "params": { + "tag": "high-priority", + "limit": 10 + } +} +``` + +**Example Response**: + +```json +{ + "jsonrpc": "2.0", + "id": 8, + "result": { + "type": "text", + "text": "Found 3 blocks with tag '#high-priority':\n\n**Project Tasks** (project-tasks-123)\n - TODO Implement authentication #high-priority\n - TODO Fix security vulnerability #high-priority\n\n**Sprint Planning** (sprint-planning-456)\n - DOING Refactor database layer #high-priority" + } +} +``` + +**Example Request** (find blocks by property): + +```json +{ + "jsonrpc": "2.0", + "id": 9, + "method": "kogral/find_blocks", + "params": { + "property_key": "priority", + "property_value": "high", + "limit": 15 + } +} +``` + +### kogral/find_todos + +Find all TODO blocks across the knowledge base. + +**Input Schema**: + +```json +{ + "type": "object", + "properties": { + "limit": { + "type": "integer", + "description": "Maximum number of results", + "default": 20 + } + } +} +``` + +**Example Request**: + +```json +{ + "jsonrpc": "2.0", + "id": 10, + "method": "kogral/find_todos", + "params": { + "limit": 25 + } +} +``` + +**Example Response**: + +```json +{ + "jsonrpc": "2.0", + "id": 10, + "result": { + "type": "text", + "text": "Found 8 TODO blocks:\n\n**Project Tasks** (project-tasks-123)\n - TODO Implement authentication\n - TODO Write integration tests\n - TODO Update documentation\n\n**Bug Fixes** (bug-fixes-456)\n - TODO Fix race condition in cache\n - TODO Address memory leak\n\n**Research** (research-789)\n - TODO Evaluate GraphQL alternatives\n - TODO Benchmark new approach\n - TODO Document findings" + } +} +``` + +### kogral/find_cards + +Find all flashcard blocks (blocks tagged with #card) for spaced repetition learning. + +**Input Schema**: + +```json +{ + "type": "object", + "properties": { + "limit": { + "type": "integer", + "description": "Maximum number of flashcards", + "default": 10 + } + } +} +``` + +**Example Request**: + +```json +{ + "jsonrpc": "2.0", + "id": 11, + "method": "kogral/find_cards", + "params": { + "limit": 5 + } +} +``` + +**Example Response**: + +```json +{ + "jsonrpc": "2.0", + "id": 11, + "result": { + "type": "text", + "text": "Found 3 flashcards:\n\n**Rust Learning** (rust-learning-123)\n - What is Rust's ownership model? #card #rust\n - Ownership prevents data races at compile time\n - Each value has a single owner\n\n**System Design** (system-design-456)\n - What is the CAP theorem? #card #distributed-systems\n - Consistency, Availability, Partition tolerance\n - Can only guarantee 2 of 3\n\n**Algorithms** (algorithms-789)\n - What is the time complexity of quicksort? #card #algorithms\n - Average: O(n log n)\n - Worst case: O(n²)" + } +} +``` + +**Use Cases**: +- **kogral/find_blocks**: General block search by metadata +- **kogral/find_todos**: Task management and tracking +- **kogral/find_cards**: Spaced repetition learning system + +**See Also**: +- [Logseq Blocks Support](../kogral/core-concepts.md#logseq-content-blocks) +- [ADR-004: Logseq Blocks Support](../architecture/adrs/004-logseq-blocks-support.md) + +## Resources + +Resources provide read-only access to knowledge graph content via URIs. + +### kogral://project/notes + +Access project notes. + +**URI**: `kogral://project/notes` or `kogral://project/notes/{note-id}` + +**Example**: Read all project notes + +```text +kogral://project/notes +``` + +**Example**: Read specific note + +```text +kogral://project/notes/async-trait-patterns +``` + +### kogral://project/decisions + +Access project decisions (ADRs). + +**URI**: `kogral://project/decisions` or `kogral://project/decisions/{decision-id}` + +### kogral://project/guidelines + +Access project-specific guidelines. + +**URI**: `kogral://project/guidelines` or `kogral://project/guidelines/{guideline-id}` + +### kogral://project/patterns + +Access project patterns. + +**URI**: `kogral://project/patterns` or `kogral://project/patterns/{pattern-id}` + +### kogral://shared/guidelines + +Access shared guidelines (inherited). + +**URI**: `kogral://shared/guidelines` or `kogral://shared/guidelines/{guideline-id}` + +### kogral://shared/patterns + +Access shared patterns (inherited). + +**URI**: `kogral://shared/patterns` or `kogral://shared/patterns/{pattern-id}` + +## Prompts + +Prompts provide guided workflows for common tasks. + +### kogral/summarize_project + +Generate a comprehensive project knowledge summary. + +**Arguments**: + +```json +{ + "project": { + "type": "string", + "description": "Project graph name", + "default": "default" + } +} +``` + +**Example Request**: + +```json +{ + "jsonrpc": "2.0", + "id": 8, + "method": "kogral/summarize_project", + "params": { + "project": "default" + } +} +``` + +**Returns**: Prompt messages with project summary including: +- Total node counts by type +- Recent additions +- Top tags +- Key decisions +- Active patterns + +### kogral/find_related + +Find nodes related to a specific topic or node. + +**Arguments**: + +```json +{ + "node_id": { + "type": "string", + "description": "Node ID to find relations for" + }, + "depth": { + "type": "integer", + "description": "Maximum traversal depth", + "default": 2 + } +} +``` + +**Example Request**: + +```json +{ + "jsonrpc": "2.0", + "id": 9, + "method": "kogral/find_related", + "params": { + "node_id": "pattern-error-handling", + "depth": 2 + } +} +``` + +**Returns**: Prompt messages with: +- Direct relationships +- Indirect relationships (depth 2+) +- Common tags +- Related guidelines + +## Error Handling + +### Error Codes + +Standard JSON-RPC 2.0 error codes: + +| Code | Meaning | Description | +| ------ | --------- | ------------- | +| -32700 | Parse error | Invalid JSON | +| -32600 | Invalid Request | Missing required fields | +| -32601 | Method not found | Unknown tool/resource | +| -32602 | Invalid params | Parameter validation failed | +| -32603 | Internal error | Server-side error | + +### Example Error Response + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "error": { + "code": -32602, + "message": "Invalid params", + "data": { + "details": "Field 'query' is required but missing", + "field": "query" + } + } +} +``` + +## Best Practices + +### 1. Use Semantic Search for Discovery + +```json +{ + "method": "kogral/search", + "params": { + "query": "how to handle database connection errors", + "semantic": true, + "threshold": 0.5 + } +} +``` + +### 2. Link Related Concepts + +```json +{ + "method": "kogral/link", + "params": { + "from": "note-new-discovery", + "to": "pattern-related-pattern", + "relation": "implements" + } +} +``` + +### 3. Query Guidelines Before Implementation + +```json +{ + "method": "kogral/get_guidelines", + "params": { + "language": "rust", + "category": "testing" + } +} +``` + +### 4. Document Decisions with ADRs + +```json +{ + "method": "kogral/add_decision", + "params": { + "title": "Use X for Y", + "context": "Background...", + "decision": "We will...", + "consequences": ["Pro 1", "Con 1"] + } +} +``` + +## See Also + +- [MCP Specification](https://modelcontextprotocol.io/docs) +- [Quick Start Guide](../user-guide/quickstart.md) +- [Configuration Reference](../user-guide/configuration.md) +- [kogral-mcp Source Code](../../crates/kogral-mcp/src/) diff --git a/docs/api/rust-api.md b/docs/api/rust-api.md new file mode 100644 index 0000000..f8c2ce9 --- /dev/null +++ b/docs/api/rust-api.md @@ -0,0 +1 @@ +# Rust API diff --git a/docs/apps/claude-code.md b/docs/apps/claude-code.md new file mode 100644 index 0000000..5210fc2 --- /dev/null +++ b/docs/apps/claude-code.md @@ -0,0 +1 @@ +# Claude Code Integration diff --git a/docs/apps/git.md b/docs/apps/git.md new file mode 100644 index 0000000..e3a50b7 --- /dev/null +++ b/docs/apps/git.md @@ -0,0 +1 @@ +# Git Workflows diff --git a/docs/apps/logseq.md b/docs/apps/logseq.md new file mode 100644 index 0000000..38fbabe --- /dev/null +++ b/docs/apps/logseq.md @@ -0,0 +1 @@ +# Logseq Integration diff --git a/docs/apps/mcp-quickguide.md b/docs/apps/mcp-quickguide.md new file mode 100644 index 0000000..28ddead --- /dev/null +++ b/docs/apps/mcp-quickguide.md @@ -0,0 +1,488 @@ +# MCP Quick Guide + +Fast-track guide to integrating KOGRAL with Claude Code via the Model Context Protocol (MCP). + +## What is MCP + +MCP (Model Context Protocol) is a protocol that allows Claude Code to interact with external tools and data sources. The kogral-mcp server exposes your KOGRAL knowledge base to Claude Code for AI-assisted knowledge management. + +## Quick Setup (5 Minutes) + +### Step 1: Build MCP Server + +```bash +# Build kogral-mcp server +cargo build --package kogral-mcp --release + +# Verify binary +ls -lh target/release/kogral-mcp +``` + +### Step 2: Configure Claude Code + +Add to `~/.config/claude/config.json`: + +```json +{ + "mcpServers": { + "kogral-mcp": { + "command": "/path/to/knowledge-base/target/release/kogral-mcp", + "args": ["serve"], + "env": { + "KOGRAL_DIR": "/path/to/your/project/.kogral" + } + } + } +} +``` + +Replace `/path/to/knowledge-base` and `/path/to/your/project/.kogral` with your actual paths. + +### Step 3: Initialize KOGRAL + +```bash +# Navigate to your project +cd /path/to/your/project + +# Initialize .kogral directory +kogral init +``` + +### Step 4: Start Claude Code + +```bash +# Start Claude Code (will auto-connect to kogral-mcp) +claude-code +``` + +### Step 5: Test Connection + +In Claude Code, try: + +```text +Search for "error handling" +``` + +Claude will use the `kogral/search` tool to query your knowledge base. + +--- + +## Essential Commands + +### Search Knowledge Base + +**Natural language**: + +```text +Find notes about Rust error handling +``` + +**Claude translates to**: + +```json +{ + "tool": "kogral/search", + "params": { + "query": "error handling", + "type": "note", + "semantic": true + } +} +``` + +### Add Note + +**Natural language**: + +```text +Add a note about async Rust patterns with tags rust, async, patterns +``` + +**Claude translates to**: + +```json +{ + "tool": "kogral/add_note", + "params": { + "title": "Async Rust Patterns", + "content": "...", + "tags": ["rust", "async", "patterns"] + } +} +``` + +### Add Decision + +**Natural language**: + +```text +Document decision to use SurrealDB for storage +``` + +**Claude translates to**: + +```json +{ + "tool": "kogral/add_decision", + "params": { + "title": "Use SurrealDB for Storage", + "context": "Need scalable graph database", + "decision": "Adopt SurrealDB as primary storage backend", + "consequences": ["Better query performance", "Additional infrastructure"] + } +} +``` + +### Get Guidelines + +**Natural language**: + +```text +What are our Rust error handling guidelines? +``` + +**Claude translates to**: + +```json +{ + "tool": "kogral/get_guidelines", + "params": { + "language": "rust", + "category": "error-handling" + } +} +``` + +### Link Concepts + +**Natural language**: + +```text +Link note-async-patterns to decision-use-tokio as implements +``` + +**Claude translates to**: + +```json +{ + "tool": "kogral/link", + "params": { + "from": "note-async-patterns", + "to": "decision-use-tokio", + "relation": "implements" + } +} +``` + +--- + +## Common Workflows + +### Capture Meeting Notes + +**You**: + +```text +We just decided in our meeting to migrate from REST to GraphQL. +Context: current REST API is too chatty, requires multiple round trips. +Consequences: better client performance, but team needs to learn GraphQL. +Create a decision record. +``` + +**Claude** (uses `kogral/add_decision`): + +```text +Created decision: decision-migrate-to-graphql + +Status: proposed +Context: Current REST API requires multiple round trips (chatty) +Decision: Migrate from REST to GraphQL API +Consequences: + - ✅ Better client performance + - ❌ Team learning curve for GraphQL +``` + +### Find Related Knowledge + +**You**: + +```text +I'm working on error handling. What related notes and patterns do we have? +``` + +**Claude** (uses `kogral/search` with semantic=true): + +```text +Found 5 related items: + +1. **Error Handling with thiserror** (pattern) + Tags: rust, error-handling + Created: 2026-01-15 + +2. **Result Type Best Practices** (guideline) + Tags: rust, error-handling, best-practices + Created: 2026-01-10 + +3. **Decision: Use anyhow for Application Errors** (decision) + Status: accepted + Created: 2026-01-08 + +4. **Custom Error Types** (note) + Tags: rust, error-handling + Created: 2026-01-05 + +5. **Error Propagation Patterns** (pattern) + Tags: rust, error-handling + Created: 2026-01-03 + +Would you like me to link your current work to any of these? +``` + +### Document Implementation + +**You**: + +```text +I just implemented the user authentication module following our security guidelines. +Add a note and link it to our security guideline. +``` + +**Claude** (uses `kogral/add_note` + `kogral/link`): + +```text +Created note: note-user-auth-implementation +Tags: security, authentication, implementation + +Linked: + note-user-auth-implementation --[implements]--> guideline-security-practices + +Done! Your implementation is now documented and connected to our guidelines. +``` + +### Review Project Knowledge + +**You**: + +```text +Summarize our project knowledge: what decisions have we made, what patterns are we using? +``` + +**Claude** (uses `kogral/summarize_project` prompt): + +```text +# Project Knowledge Summary + +**Total Nodes**: 42 + +## Recent Decisions (5) +- Use SurrealDB for Storage (accepted, 2 days ago) +- Adopt MCP for AI Integration (accepted, 5 days ago) +- Nickel for Configuration (accepted, 1 week ago) + +## Active Patterns (8) +- Error Handling with thiserror +- Repository Pattern for DB +- Builder Pattern for Complex Objects +- ... + +## Top Tags +1. rust (23 nodes) +2. architecture (12 nodes) +3. error-handling (8 nodes) +4. patterns (7 nodes) + +## Guideline Coverage +- Rust: 5 guidelines +- Testing: 3 guidelines +- Security: 2 guidelines +``` + +--- + +## Advanced Usage + +### Conditional Queries + +**You**: + +```text +Find all decisions made in the last week that are still proposed (not accepted) +``` + +**Claude** (combines `kogral/search` with filtering): + +```text +Found 2 proposed decisions from last week: + +1. **Migrate to GraphQL** (proposed) + Created: 3 days ago + Context: REST API is too chatty... + +2. **Add Redis Caching** (proposed) + Created: 5 days ago + Context: Database queries are slow... + +Would you like to review these and update their status? +``` + +### Cross-Reference Check + +**You**: + +```text +Before I implement X, check if we have any decisions or guidelines about it +``` + +**Claude** (uses `kogral/search` + `kogral/get_guidelines`): + +```text +Checking existing knowledge about X... + +**Decisions**: None found +**Guidelines**: 1 relevant guideline found + - guideline-module-structure: "Keep modules focused and small" + +**Related Notes**: 2 notes mention similar topics + - note-module-design-patterns + - note-separation-of-concerns + +Recommendation: Your implementation of X looks aligned with our guidelines. +Consider linking it to guideline-module-structure when done. +``` + +### Export for Sharing + +**You**: + +```text +Export our architectural decisions to Logseq so I can review them visually +``` + +**Claude** (uses `kogral/export`): + +```text +Exporting to Logseq format... + +✓ Exported 12 decisions to /Users/akasha/logseq-export/ + - 12 decision records + - Preserved wikilinks + - Added Logseq properties + +You can now open /Users/akasha/logseq-export/ in Logseq to visualize the decision graph. +``` + +--- + +## Tips and Tricks + +### 1. Use Natural Language + +Don't worry about exact tool syntax. Claude understands: + +❌ **Don't say**: "Use kogral/search with query='rust' and type='pattern'" +✅ **Do say**: "Find Rust patterns in KOGRAL" + +### 2. Be Specific with Tags + +When adding notes, use consistent tags: + +✅ **Good**: `tags: rust, error-handling, pattern` +❌ **Bad**: `tags: Rust, ErrorHandling, patterns` + +### 3. Link as You Go + +After creating notes, ask Claude to link them: + +```text +Link this note to our error handling guideline as 'implements' +``` + +### 4. Review Regularly + +Ask Claude for summaries: + +```text +What have we documented this week? +``` + +### 5. Use Semantic Search + +For conceptual queries: + +```text +Find anything related to "making code maintainable" +``` + +Not just keyword "maintainable", but concepts like refactoring, clean code, patterns, etc. + +--- + +## Troubleshooting + +### "MCP server not responding" + +```bash +# Check kogral-mcp is built +ls target/release/kogral-mcp + +# Test manually +echo '{"jsonrpc":"2.0","id":1,"method":"kogral/search","params":{"query":"test"}}' \ + | target/release/kogral-mcp serve +``` + +### "KB directory not found" + +```bash +# Verify .kogral exists +ls -la /path/to/project/.kogral + +# Initialize if missing +cd /path/to/project +kogral init +``` + +### "Permission denied" + +```bash +# Make binary executable +chmod +x target/release/kogral-mcp + +# Check environment variable +echo $KOGRAL_DIR +``` + +### "Empty search results" + +```bash +# Add some test content +kogral add note "Test Note" --content "Test content" + +# Try search again in Claude Code +``` + +--- + +## Next Steps + +- **Read**: [MCP Tools API Reference](../api/mcp-tools.md) for all available tools +- **Explore**: [Use Cases](../guides/use-cases.md) for more examples +- **Configure**: [Configuration Reference](../config/overview.md) to customize behavior +- **Integrate**: [Claude Code Integration](claude-code.md) for advanced setup + +--- + +## Quick Reference Card + +| Task | Say to Claude | +| ------ | --------------- | +| Search | "Find notes about X" | +| Add note | "Add a note about X with tags Y, Z" | +| Add decision | "Document decision to use X for Y" | +| Get guidelines | "What are our X guidelines?" | +| Link nodes | "Link A to B as implements" | +| Summarize | "Summarize project knowledge" | +| Export | "Export to Logseq format" | + +--- + +**Remember**: Claude Code with MCP turns KOGRAL into an active participant in your development workflow. Ask questions, capture decisions, and let AI help you maintain your project's knowledge graph. diff --git a/docs/apps/obsidian.md b/docs/apps/obsidian.md new file mode 100644 index 0000000..97298c4 --- /dev/null +++ b/docs/apps/obsidian.md @@ -0,0 +1 @@ +# Obsidian Compatibility diff --git a/docs/architecture/adrs/001-nickel-vs-toml.md b/docs/architecture/adrs/001-nickel-vs-toml.md new file mode 100644 index 0000000..42e969f --- /dev/null +++ b/docs/architecture/adrs/001-nickel-vs-toml.md @@ -0,0 +1,313 @@ +# ADR-001: Nickel vs TOML for Configuration + +**Status**: Accepted + +**Date**: 2026-01-17 + +**Deciders**: Architecture Team + +**Context**: Configuration Strategy for Knowledge Base System + +--- + +## Context + +The KOGRAL requires a flexible, type-safe configuration format that supports: + +1. **Complex nested structures** (graph settings, storage configs, embedding providers) +2. **Type validation** (prevent runtime errors from config mistakes) +3. **Composition and inheritance** (shared configs, environment-specific overrides) +4. **Documentation** (self-documenting schemas) +5. **Validation before runtime** (catch errors early) + +We evaluated two primary options: + +### Option 1: TOML (Traditional Config Format) + +**Pros**: +- Widely adopted in Rust ecosystem (`Cargo.toml`) +- Simple, human-readable syntax +- Native `serde` support +- IDE support (syntax highlighting, completion) + +**Cons**: +- No type system (validation only at runtime) +- Limited composition (no imports, no functions) +- No schema validation (errors discovered during execution) +- Verbose for complex nested structures +- No documentation in config files + +**Example TOML**: + +```toml +[graph] +name = "my-project" +version = "1.0.0" + +[storage] +primary = "filesystem" # String, not validated as enum + +[storage.secondary] +enabled = true +type = "surrealdb" # Typo would fail at runtime +url = "ws://localhost:8000" + +[embeddings] +enabled = true +provider = "openai" # No validation of valid providers +model = "text-embedding-3-small" +``` + +**Problems**: +- Typos in enum values (`"surrealdb"` vs `"surealdb"`) fail at runtime +- No validation that `provider = "openai"` requires `api_key_env` +- No documentation of valid options +- No way to compose configs (e.g., base config + environment override) + +### Option 2: Nickel (Functional Configuration Language) + +**Pros**: +- **Type system** with contracts (validate before runtime) +- **Composition** via imports and merging +- **Documentation** in schemas (self-documenting) +- **Validation** at export time (catch errors early) +- **Functions** for conditional logic +- **Default values** in schema definitions + +**Cons**: +- Less familiar to Rust developers +- Requires separate `nickel` CLI tool +- Smaller ecosystem +- Steeper learning curve + +**Example Nickel**: + +```nickel +# schemas/kogral-config.ncl +{ + KbConfig = { + graph | GraphConfig, + storage | StorageConfig, + embeddings | EmbeddingConfig, + }, + + StorageConfig = { + primary | [| 'filesystem, 'memory |], # Enum validated at export + + secondary | { + enabled | Bool, + type | [| 'surrealdb, 'sqlite |], # Typos caught immediately + url | String, + } | optional, + }, + + EmbeddingConfig = { + enabled | Bool, + provider | [| 'openai, 'claude, 'fastembed |], # Valid providers enforced + model | String, + api_key_env | String | doc "Environment variable for API key", + }, +} +``` + +**Benefits**: +- Typos in enum values caught at `nickel export` time +- Schema enforces required fields based on provider +- Documentation embedded in schema +- Config can be composed: `import "base.ncl" & { /* overrides */ }` + +--- + +## Decision + +**We will use Nickel for configuration.** + +**Implementation**: + +1. Define schemas in `schemas/*.ncl` with type contracts +2. Users write configs in `.kogral/config.ncl` +3. Export to JSON via CLI: `nickel export --format json config.ncl` +4. Load JSON in Rust via `serde_json` into typed structs + +**Pattern** (double validation): + +```text +Nickel Config (.ncl) + ↓ [nickel export] +JSON (validated by Nickel contracts) + ↓ [serde_json::from_str] +Rust Struct (validated by serde) + ↓ +Runtime (guaranteed valid config) +``` + +**Bridge Code** (`kogral-core/src/config/nickel.rs`): + +```rust +pub fn load_config>(path: P) -> Result { + // Export Nickel to JSON + let json = export_nickel_to_json(path)?; + + // Deserialize to Rust struct + let config: KbConfig = serde_json::from_str(&json)?; + + Ok(config) +} + +fn export_nickel_to_json>(path: P) -> Result { + let output = Command::new("nickel") + .arg("export") + .arg("--format").arg("json") + .arg(path.as_ref()) + .output()?; + + Ok(String::from_utf8(output.stdout)?) +} +``` + +--- + +## Consequences + +### Positive + +✅ **Type Safety**: Config errors caught before runtime +- Invalid enum values fail at export: `'filesystm` → error +- Missing required fields detected: no `graph.name` → error +- Type mismatches prevented: `enabled = "yes"` → error (expects Bool) + +✅ **Self-Documenting**: Schemas serve as documentation +- `| doc "Environment variable for API key"` describes fields +- Enum options visible in schema: `[| 'openai, 'claude, 'fastembed |]` +- Default values explicit: `| default = 'filesystem` + +✅ **Composition**: Config reuse and overrides + +```nickel +# base.ncl +{ graph = { version = "1.0.0" } } + +# project.ncl +import "base.ncl" & { graph = { name = "my-project" } } +``` + +✅ **Validation Before Deployment**: Catch errors in CI + +```bash +# CI pipeline +nickel typecheck config.ncl +nickel export --format json config.ncl > /dev/null +``` + +✅ **Conditional Logic**: Environment-specific configs + +```nickel +let is_prod = std.string.is_match "prod" (std.env.get "ENV") in +{ + embeddings = { + provider = if is_prod then 'openai else 'fastembed, + }, +} +``` + +### Negative + +❌ **Learning Curve**: Team must learn Nickel syntax +- **Mitigation**: Provide comprehensive examples in `config/` directory +- **Mitigation**: Document common patterns in `docs/config/` + +❌ **Tool Dependency**: Requires `nickel` CLI installed +- **Mitigation**: Document installation in setup guide +- **Mitigation**: Check `nickel` availability in `kogral init` command + +❌ **IDE Support**: Limited compared to TOML +- **Mitigation**: Use LSP (nickel-lang-lsp) for VSCode/Neovim +- **Mitigation**: Syntax highlighting available for major editors + +❌ **Ecosystem Size**: Smaller than TOML +- **Mitigation**: Nickel actively developed by Tweag +- **Mitigation**: Stable language specification (v1.0+) + +### Neutral + +⚪ **Two-Stage Loading**: Nickel → JSON → Rust +- Not a performance concern (config loaded once at startup) +- Adds resilience (double validation) +- Allows runtime config inspection (read JSON directly) + +--- + +## Alternatives Considered + +### JSON Schema + +**Rejected**: Not ergonomic for humans to write +- No comments +- Verbose syntax (`{"key": "value"}` vs `key = value`) +- JSON Schema separate from config (duplication) + +### YAML + +**Rejected**: No type system, ambiguous parsing +- Boolean confusion: `yes`/`no`/`on`/`off`/`true`/`false` +- Indentation-sensitive (error-prone) +- No validation without external tools + +### Dhall + +**Rejected**: More complex than needed +- Turing-incomplete by design (limits use cases) +- Smaller ecosystem than Nickel +- Steeper learning curve + +### KCL (KusionStack Configuration Language) + +**Rejected**: Kubernetes-focused, less general-purpose +- Designed for K8s manifests +- Less mature than Nickel for general config + +--- + +## Implementation Timeline + +1. ✅ Define base schemas (`schemas/kogral-config.ncl`) +2. ✅ Implement Nickel loader (`kogral-core/src/config/nickel.rs`) +3. ✅ Create example configs (`config/defaults.ncl`, `config/production.ncl`) +4. ✅ Document Nickel usage (`docs/config/nickel-schemas.md`) +5. ⏳ Add LSP recommendations to setup guide +6. ⏳ Create Nickel → TOML migration tool (for existing users) + +--- + +## Monitoring + +**Success Criteria**: +- Config errors caught at export time (not runtime) +- Users can compose configs for different environments +- Team comfortable with Nickel syntax within 2 weeks + +**Metrics**: +- Number of config validation errors caught before runtime +- Time to diagnose config issues (should decrease) +- User feedback on config complexity + +--- + +## References + +- [Nickel Language](https://nickel-lang.org/) +- [Nickel User Manual](https://nickel-lang.org/user-manual/introduction) +- [platform-config pattern](../../crates/kogral-core/src/config/README.md) (reference implementation) +- [TOML Specification](https://toml.io/) + +--- + +## Revision History + +| Date | Author | Change | +| ---------- | ------------------ | ---------------- | +| 2026-01-17 | Architecture Team | Initial decision | + +--- + +**Next ADR**: [ADR-002: FastEmbed via AI Providers](002-fastembed-ai-providers.md) diff --git a/docs/architecture/adrs/002-fastembed-ai-providers.md b/docs/architecture/adrs/002-fastembed-ai-providers.md new file mode 100644 index 0000000..96b9c49 --- /dev/null +++ b/docs/architecture/adrs/002-fastembed-ai-providers.md @@ -0,0 +1,357 @@ +# ADR-002: FastEmbed via AI Providers for Embeddings + +**Status**: Accepted + +**Date**: 2026-01-17 + +**Deciders**: Architecture Team + +**Context**: Embedding Strategy for Semantic Search + +--- + +## Context + +The KOGRAL requires embedding generation for semantic search capabilities. Embeddings convert text into numerical vectors that capture semantic meaning, enabling "find concepts" rather than just "find keywords". + +**Requirements**: + +1. **Local-First Option**: Must work offline without external API dependencies +2. **Production Scalability**: Support cloud AI providers for large-scale deployments +3. **Multiple Providers**: Flexibility to choose based on cost, quality, privacy +4. **Cost-Effective Development**: Free local embeddings for development and testing +5. **Quality**: Good enough embeddings for finding related concepts + +**Options Evaluated**: + +### Option 1: Only Local Embeddings (fastembed) + +**Pros**: +- No API costs +- Works offline +- Privacy-preserving (no data leaves machine) +- Fast (local GPU acceleration possible) + +**Cons**: +- Limited model quality compared to cloud providers +- Resource-intensive (requires download ~100MB models) +- Single provider lock-in (fastembed library) + +**Example**: + +```rust +use fastembed::{TextEmbedding, InitOptions}; + +let model = TextEmbedding::try_new(InitOptions { + model_name: "BAAI/bge-small-en-v1.5", + ..Default::default() +})?; + +let embeddings = model.embed(vec!["Hello world"], None)?; +// Output: Vec> with 384 dimensions +``` + +### Option 2: Only Cloud AI Providers (OpenAI, Claude, etc.) + +**Pros**: +- State-of-the-art embedding quality +- No local resource usage +- Latest models available +- Scalable to millions of documents + +**Cons**: +- Requires API keys (cost per embedding) +- Network dependency (no offline mode) +- Privacy concerns (data sent to third parties) +- Vendor lock-in risk + +**Example**: + +```rust +use rig::providers::openai; + +let client = openai::Client::new("sk-..."); +let embeddings = client.embeddings("text-embedding-3-small") + .embed_documents(vec!["Hello world"]).await?; +// Output: Vec> with 1536 dimensions +``` + +### Option 3: Hybrid Strategy (fastembed + AI providers via rig-core) + +**Pros**: +- ✅ Best of both worlds: local dev, cloud production +- ✅ User choice: privacy-first or quality-first +- ✅ Cost flexibility: free for small projects, paid for scale +- ✅ Unified interface via `rig-core` library +- ✅ Easy provider switching (config-driven) + +**Cons**: +- ❌ More complex implementation (multiple providers) +- ❌ Dimension mismatch between providers (384 vs 1536) +- ❌ Additional dependencies (`rig-core`, `fastembed`) + +--- + +## Decision + +**We will use a hybrid strategy: fastembed (local) + AI providers (via rig-core).** + +**Implementation**: + +1. **Default**: `fastembed` with `BAAI/bge-small-en-v1.5` (384 dimensions) +2. **Optional**: OpenAI, Claude, Ollama via `rig-core` (configurable) +3. **Interface**: `EmbeddingProvider` trait abstracts provider details +4. **Config-Driven**: Provider selection via Nickel configuration + +**Architecture**: + +```rust +#[async_trait] +pub trait EmbeddingProvider: Send + Sync { + async fn embed(&self, texts: Vec) -> Result>>; + fn dimensions(&self) -> usize; + fn model_name(&self) -> &str; +} + +// Local implementation +pub struct FastEmbedProvider { + model: TextEmbedding, +} + +impl FastEmbedProvider { + pub fn new(model_name: &str) -> Result { + let model = TextEmbedding::try_new(InitOptions { + model_name: model_name.into(), + ..Default::default() + })?; + Ok(Self { model }) + } +} + +#[async_trait] +impl EmbeddingProvider for FastEmbedProvider { + async fn embed(&self, texts: Vec) -> Result>> { + Ok(self.model.embed(texts, None)?) + } + + fn dimensions(&self) -> usize { 384 } + fn model_name(&self) -> &str { "BAAI/bge-small-en-v1.5" } +} + +// Cloud provider implementation (via rig-core) +pub struct RigEmbeddingProvider { + client: rig::Client, + model: String, + dimensions: usize, +} + +#[async_trait] +impl EmbeddingProvider for RigEmbeddingProvider { + async fn embed(&self, texts: Vec) -> Result>> { + let embeddings = self.client + .embeddings(&self.model) + .embed_documents(texts) + .await?; + Ok(embeddings) + } + + fn dimensions(&self) -> usize { self.dimensions } + fn model_name(&self) -> &str { &self.model } +} +``` + +**Configuration** (Nickel): + +```nickel +# Local development (default) +{ + embeddings = { + enabled = true, + provider = 'fastembed, + model = "BAAI/bge-small-en-v1.5", + dimensions = 384, + }, +} + +# Production with OpenAI +{ + embeddings = { + enabled = true, + provider = 'openai, + model = "text-embedding-3-small", + dimensions = 1536, + api_key_env = "OPENAI_API_KEY", + }, +} + +# Self-hosted with Ollama +{ + embeddings = { + enabled = true, + provider = 'ollama, + model = "nomic-embed-text", + dimensions = 768, + }, +} +``` + +**Provider Selection** (`kogral-core/src/embeddings/mod.rs`): + +```rust +pub fn create_provider(config: &EmbeddingConfig) -> Result> { + match config.provider { + EmbeddingProviderType::FastEmbed => { + Ok(Box::new(FastEmbedProvider::new(&config.model)?)) + } + EmbeddingProviderType::OpenAI => { + let api_key = std::env::var(&config.api_key_env)?; + Ok(Box::new(RigEmbeddingProvider::new_openai(api_key, &config.model)?)) + } + EmbeddingProviderType::Claude => { + let api_key = std::env::var(&config.api_key_env)?; + Ok(Box::new(RigEmbeddingProvider::new_claude(api_key, &config.model)?)) + } + EmbeddingProviderType::Ollama => { + Ok(Box::new(RigEmbeddingProvider::new_ollama(&config.model)?)) + } + } +} +``` + +--- + +## Consequences + +### Positive + +✅ **Development Flexibility**: +- Developers can use `fastembed` without API keys +- Fast feedback loop (local embeddings, no network calls) +- Works offline (train trips, flights) + +✅ **Production Quality**: +- Production deployments can use OpenAI/Claude for better quality +- Latest embedding models available +- Scalable to millions of documents + +✅ **Privacy Control**: +- Privacy-sensitive projects use local embeddings +- Public projects can use cloud providers +- User choice via configuration + +✅ **Cost Optimization**: +- Small projects: free (fastembed) +- Large projects: pay for quality (cloud providers) +- Hybrid: important docs via cloud, bulk via local + +✅ **Unified Interface**: +- `EmbeddingProvider` trait abstracts provider details +- Query code doesn't know/care about provider +- Easy to add new providers + +### Negative + +❌ **Dimension Mismatch**: +- fastembed: 384 dimensions +- OpenAI: 1536 dimensions +- Cannot mix in same index + +**Mitigation**: +- Store provider + dimensions in node metadata +- Rebuild index when changing providers +- Document dimension constraints + +❌ **Model Download**: +- First use of fastembed downloads ~100MB model +- Slow initial startup + +**Mitigation**: +- Pre-download in Docker images +- Document model download in setup guide +- Cache models in `~/.cache/fastembed` + +❌ **Complex Configuration**: +- Multiple provider options may confuse users + +**Mitigation**: +- Sane default (fastembed) +- Clear examples for each provider +- Validation errors explain misconfigurations + +### Neutral + +⚪ **Dependency Trade-off**: +- `fastembed` adds ~5MB to binary +- `rig-core` adds ~2MB +- Total: ~7MB overhead + +Not a concern for CLI/MCP server use case. + +--- + +## Provider Comparison + +| Provider | Dimensions | Quality | Cost | Privacy | Offline | +| -------------- | ---------- | --------- | ------------- | --------- | ------- | +| **fastembed** | 384 | Good | Free | ✅ Local | ✅ Yes | +| **OpenAI** | 1536 | Excellent | $0.0001/1K | ❌ Cloud | ❌ No | +| **Claude** | 1024 | Excellent | $0.00025/1K | ❌ Cloud | ❌ No | +| **Ollama** | 768 | Very Good | Free | ✅ Local | ✅ Yes | + +**Recommendation by Use Case**: + +- **Development**: fastembed (fast, free, offline) +- **Small Teams**: fastembed or Ollama (privacy, no costs) +- **Enterprise**: OpenAI or Claude (best quality, scalable) +- **Self-Hosted**: Ollama (good quality, local control) + +--- + +## Implementation Timeline + +1. ✅ Define `EmbeddingProvider` trait +2. ✅ Implement FastEmbedProvider (stub, feature-gated) +3. ✅ Implement RigEmbeddingProvider (stub, feature-gated) +4. ⏳ Complete FastEmbed integration with model download +5. ⏳ Complete rig-core integration (OpenAI, Claude, Ollama) +6. ⏳ Add query engine with similarity search +7. ⏳ Document provider selection and trade-offs + +--- + +## Monitoring + +**Success Criteria**: +- Users can switch providers via config change +- Local embeddings work without API keys +- Production deployments use cloud providers successfully +- Query quality acceptable for both local and cloud embeddings + +**Metrics**: +- Embedding generation latency (local vs cloud) +- Query accuracy (precision@10 for semantic search) +- API costs (cloud providers) +- User satisfaction (feedback on search quality) + +--- + +## References + +- [fastembed Documentation](https://github.com/Anush008/fastembed-rs) +- [rig-core Documentation](https://github.com/0xPlaygrounds/rig) +- [OpenAI Embeddings API](https://platform.openai.com/docs/guides/embeddings) +- [BAAI/bge Models](https://huggingface.co/BAAI/bge-small-en-v1.5) +- [Ollama Embeddings](https://ollama.com/blog/embedding-models) + +--- + +## Revision History + +| Date | Author | Change | +| ---------- | ------------------ | ---------------- | +| 2026-01-17 | Architecture Team | Initial decision | + +--- + +**Previous ADR**: [ADR-001: Nickel vs TOML](001-nickel-vs-toml.md) +**Next ADR**: [ADR-003: Hybrid Storage Strategy](003-hybrid-storage.md) diff --git a/docs/architecture/adrs/003-hybrid-storage.md b/docs/architecture/adrs/003-hybrid-storage.md new file mode 100644 index 0000000..ddd19a3 --- /dev/null +++ b/docs/architecture/adrs/003-hybrid-storage.md @@ -0,0 +1,449 @@ +# ADR-003: Hybrid Storage Strategy + +**Status**: Accepted + +**Date**: 2026-01-17 + +**Deciders**: Architecture Team + +**Context**: Storage Backend Strategy for Knowledge Base + +--- + +## Context + +The KOGRAL needs to store knowledge graphs with these requirements: + +1. **Git-Friendly**: Knowledge should version alongside code +2. **Scalable**: Support small projects (10s of nodes) to large organizations (10,000+ nodes) +3. **Queryable**: Efficient graph queries and relationship traversal +4. **Offline-Capable**: Work without network access +5. **Collaborative**: Support shared organizational knowledge +6. **Cost-Effective**: Free for small projects, reasonable cost at scale + +**Constraints**: + +- Developers want to edit knowledge in text editors +- Organizations want centralized guideline management +- Git workflows essential for code-adjacent knowledge +- Large graphs need database performance + +### Option 1: Filesystem Only + +**Approach**: Store everything as markdown files + +**Pros**: +- ✅ Git-native (perfect for versioning) +- ✅ Text editor friendly +- ✅ No dependencies +- ✅ Works offline +- ✅ Free + +**Cons**: +- ❌ Poor performance for large graphs (100 0+ nodes) +- ❌ No efficient graph queries +- ❌ Difficult to share across projects +- ❌ Manual sync for collaboration + +**Scalability**: Good for < 100 nodes, poor beyond + +### Option 2: Database Only (SurrealDB) + +**Approach**: Store all knowledge in SurrealDB graph database + +**Pros**: +- ✅ Excellent query performance +- ✅ Native graph relationships +- ✅ Scalable to millions of nodes +- ✅ Centralized for collaboration + +**Cons**: +- ❌ Not git-trackable +- ❌ Requires running database server +- ❌ Can't edit with text editor +- ❌ Network dependency +- ❌ Infrastructure cost + +**Scalability**: Excellent, but loses developer workflow benefits + +### Option 3: Hybrid (Filesystem + SurrealDB) + +**Approach**: Filesystem for local project knowledge, SurrealDB for shared organizational knowledge + +**Pros**: +- ✅ Git-friendly for project knowledge +- ✅ Text editor friendly +- ✅ Scalable for shared knowledge +- ✅ Works offline (local graph) +- ✅ Collaborative (shared graph) +- ✅ Cost-effective (DB only for shared) + +**Cons**: +- ❌ More complex implementation +- ❌ Sync mechanism needed +- ❌ Two storage systems to manage + +**Scalability**: Excellent - best of both worlds + +--- + +## Decision + +**We will use a hybrid storage strategy: Filesystem (local) + SurrealDB (shared).** + +**Architecture**: + +```text +┌─────────────────────────────────────────────────────────────┐ +│ Project A (.kogral/) │ +│ Storage: Filesystem (git-tracked) │ +│ Scope: Project-specific notes, decisions, patterns │ +│ Access: Local only │ +└──────────────────┬──────────────────────────────────────────┘ + │ + │ [inherits] + ↓ +┌─────────────────────────────────────────────────────────────┐ +│ Shared KB (SurrealDB or synced filesystem) │ +│ Storage: SurrealDB (scalable) or filesystem (synced) │ +│ Scope: Organization-wide guidelines, patterns │ +│ Access: All projects │ +└─────────────────────────────────────────────────────────────┘ +``` + +**Implementation**: + +```nickel +# Project config +{ + storage = { + primary = 'filesystem, # Local project knowledge + secondary = { + enabled = true, + type = 'surrealdb, # Shared knowledge + url = "ws://kb-central.company.com:8000", + namespace = "organization", + database = "shared-kb", + }, + }, + + inheritance = { + base = "surrealdb://organization/shared-kb", # Inherit from shared + priority = 100, # Project overrides shared + }, +} +``` + +**Sync Strategy**: + +```text +.kogral/ (Filesystem) + ↓ [on save] +Watch for changes + ↓ [debounced] +Sync to SurrealDB + ↓ +Shared graph updated + ↓ [on query] +Merge local + shared results +``` + +--- + +## Consequences + +### Positive + +✅ **Developer Workflow Preserved**: + +```bash +# Local knowledge workflow (unchanged) +vim .kogral/notes/my-note.md +git add .kogral/notes/my-note.md +git commit -m "Add implementation note" +git push +``` + +✅ **Git Integration**: +- Project knowledge versioned with code +- Branches include relevant knowledge +- Merges resolve knowledge conflicts +- PR reviews include knowledge changes + +✅ **Offline Development**: +- Full functionality without network +- Shared guidelines cached locally +- Sync when reconnected + +✅ **Scalability**: +- Projects: filesystem (100s of nodes, fine performance) +- Organization: SurrealDB (10,000+ nodes, excellent performance) + +✅ **Collaboration**: +- Shared guidelines accessible to all projects +- Updates to shared knowledge propagate automatically +- Consistent practices across organization + +✅ **Cost-Effective**: +- Small projects: free (filesystem only) +- Organizations: SurrealDB for shared only (not all project knowledge) + +✅ **Gradual Adoption**: +- Start with filesystem only +- Add SurrealDB when needed +- Feature-gated (`--features surrealdb`) + +### Negative + +❌ **Complexity**: +- Two storage implementations +- Sync mechanism required +- Conflict resolution needed + +**Mitigation**: +- Storage trait abstracts differences +- Sync is optional (can disable) +- Conflicts rare (guidelines change infrequently) + +❌ **Sync Latency**: +- Changes to shared KOGRAL not instant in all projects + +**Mitigation**: +- Acceptable latency (guidelines don't change rapidly) +- Manual sync command available (`kogral sync`) +- Auto-sync on query (fetch latest) + +❌ **Infrastructure Requirement**: +- SurrealDB server needed for shared KOGRAL + +**Mitigation**: +- Optional (can use synced filesystem instead) +- Docker Compose for easy setup +- Managed SurrealDB Cloud option + +### Neutral + +⚪ **Storage Trait Implementation**: + +```rust +#[async_trait] +pub trait Storage { + async fn save_graph(&self, graph: &Graph) -> Result<()>; + async fn load_graph(&self, name: &str) -> Result; + async fn list_graphs(&self) -> Result>; +} + +// Three implementations +impl Storage for FilesystemStorage { /* ... */ } +impl Storage for SurrealDbStorage { /* ... */ } +impl Storage for MemoryStorage { /* ... */ } +``` + +Abstraction makes multi-backend manageable. + +--- + +## Use Cases + +### Small Project (Solo Developer) + +**Config**: + +```nickel +{ storage = { primary = 'filesystem } } +``` + +**Behavior**: +- All knowledge in `.kogral/` directory +- Git-tracked with code +- No database required +- Works offline + +### Medium Project (Team) + +**Config**: + +```nickel +{ + storage = { + primary = 'filesystem, + secondary = { + enabled = true, + type = 'surrealdb, + url = "ws://team-kb.local:8000", + }, + }, +} +``` + +**Behavior**: +- Project knowledge in `.kogral/` (git-tracked) +- Shared team patterns in SurrealDB +- Automatic sync +- Offline fallback to cached + +### Large Organization + +**Config**: + +```nickel +{ + storage = { + primary = 'filesystem, + secondary = { + enabled = true, + type = 'surrealdb, + url = "ws://kb.company.com:8000", + namespace = "engineering", + database = "shared-kb", + }, + }, + + inheritance = { + base = "surrealdb://engineering/shared-kb", + guidelines = [ + "surrealdb://engineering/rust-guidelines", + "surrealdb://engineering/security-policies", + ], + }, +} +``` + +**Behavior**: +- Project-specific in `.kogral/` +- Organization guidelines in SurrealDB +- Security policies enforced +- Automatic guideline updates + +--- + +## Sync Mechanism + +### Filesystem → SurrealDB + +**Trigger**: File changes detected (via `notify` crate) + +**Process**: +1. Parse changed markdown file +2. Convert to Node struct +3. Upsert to SurrealDB +4. Update relationships + +**Debouncing**: 500ms (configurable) + +### SurrealDB → Filesystem + +**Trigger**: Query for shared knowledge + +**Process**: +1. Query SurrealDB for shared nodes +2. Cache locally (in-memory or filesystem) +3. Merge with local results +4. Return combined + +**Caching**: TTL-based (5 minutes default) + +### Conflict Resolution + +**Strategy**: Last-write-wins with version tracking + +**Example**: + +```text +Project A: Updates shared guideline (v1 → v2) +Project B: Has cached v1 + +On Project B query: + - Detects v2 available + - Fetches v2 + - Updates cache + - Uses v2 going forward +``` + +--- + +## Alternatives Considered + +### Git Submodules for Shared Knowledge + +**Rejected**: Cumbersome workflow +- Requires manual submodule update +- Merge conflicts in shared submodule +- Not discoverable (need to know submodule exists) + +### Syncthing for Filesystem Sync + +**Rejected**: Not designed for this use case +- No query optimization +- No relationship indexes +- Sync conflicts difficult to resolve + +### PostgreSQL with JSON + +**Rejected**: Not a graph database +- Poor graph query performance +- Relationship traversal requires complex SQL joins +- No native graph features + +--- + +## Migration Path + +### Phase 1: Filesystem Only (Current) +- All storage via filesystem +- Git-tracked +- No database required + +### Phase 2: Optional SurrealDB +- Add SurrealDB support (feature-gated) +- Manual sync command +- Shared KB opt-in + +### Phase 3: Automatic Sync +- File watching +- Auto-sync on changes +- Background sync + +### Phase 4: Multi-Tenant SurrealDB +- Organization namespaces +- Access control +- Audit logs + +--- + +## Monitoring + +**Success Criteria**: +- Developers don't notice hybrid complexity +- Sync completes < 1 second for typical changes +- Shared guidelines accessible in < 100ms +- Zero data loss in sync + +**Metrics**: +- Sync latency (P50, P95, P99) +- Cache hit rate (shared knowledge) +- Conflict rate (expect < 0.1%) +- User satisfaction + +--- + +## References + +- [SurrealDB Documentation](https://surrealdb.com/docs) +- [Storage Trait Implementation](../../crates/kogral-core/src/storage/mod.rs) +- [FilesystemStorage](../../crates/kogral-core/src/storage/filesystem.rs) +- [SurrealDbStorage](../../crates/kogral-core/src/storage/surrealdb.rs) +- [Sync Mechanism](../../scripts/kogral-sync.nu) + +--- + +## Revision History + +| Date | Author | Change | +| ---------- | ------------------ | ---------------- | +| 2026-01-17 | Architecture Team | Initial decision | + +--- + +**Previous ADR**: [ADR-002: FastEmbed via AI Providers](002-fastembed-ai-providers.md) +**Next ADR**: [ADR-004: Logseq Compatibility](004-logseq-compatibility.md) diff --git a/docs/architecture/adrs/004-logseq-blocks-support.md b/docs/architecture/adrs/004-logseq-blocks-support.md new file mode 100644 index 0000000..d7c0dc0 --- /dev/null +++ b/docs/architecture/adrs/004-logseq-blocks-support.md @@ -0,0 +1,196 @@ +# ADR-004: Logseq Blocks Support + +## Status + +**Proposed** (Design phase) + +## Context + +Logseq uses **content blocks** as the fundamental unit of information, not full documents. KB currently treats `Node.content` as flat markdown string, which loses block-level features on import/export: + +**Lost features**: +- Block properties (`#card`, `TODO`, custom properties) +- Block hierarchy (outliner nesting) +- Block references (`((block-uuid))`) +- Block-level queries (find all flashcards, TODOs) + +**User requirement**: Round-trip Logseq import/export with full fidelity: + +```text +Logseq → KOGRAL Import → KOGRAL Storage → KOGRAL Export → Logseq + (blocks preserved at every step) +``` + +## Decision + +Implement **Hybrid Block Support** (structured + markdown): + +### 1. Add Block Data Structure + +```rust +pub struct Block { + pub id: String, // UUID + pub content: String, // Block text + pub properties: BlockProperties, // Tags, status, custom + pub children: Vec, // Nested blocks + // ... timestamps ... +} + +pub struct BlockProperties { + pub tags: Vec, // #card, #important + pub status: Option, // TODO, DONE, etc. + pub custom: HashMap, // property:: value + pub block_refs: Vec, // ((uuid)) + pub page_refs: Vec, // [[page]] +} +``` + +### 2. Extend Node Model + +```rust +pub struct Node { + // ... existing fields ... + pub content: String, // Source of truth (markdown) + pub blocks: Option>, // Cached structure (optional) +} +``` + +### 3. Bidirectional Parser + +- **Parse**: Markdown → `Vec` (lazy, on-demand) +- **Serialize**: `Vec` → Markdown (for export) + +### 4. Storage Strategy + +**Filesystem** (git-friendly, Logseq-compatible): + +```markdown +- Block 1 #card + - Nested answer +- TODO Block 2 + priority:: high +``` + +**SurrealDB** (queryable): + +```sql +DEFINE TABLE block; +DEFINE FIELD node_id ON block TYPE record(node); +DEFINE FIELD block_id ON block TYPE string; +DEFINE FIELD properties ON block TYPE object; +DEFINE INDEX block_tags ON block COLUMNS properties.tags; +``` + +### 5. Query Extensions + +```rust +// Find all flashcards +graph.find_blocks_by_tag("card") + +// Find all TODOs +graph.find_all_todos() + +// Find blocks with custom property +node.find_blocks_by_property("priority", "high") +``` + +## Consequences + +### Positive + +✅ **Full Logseq Compatibility** - Import/export preserves all block features +✅ **Queryable Blocks** - Find #card, TODO, custom properties across KOGRAL +✅ **Backward Compatible** - Existing nodes without blocks still work +✅ **Type-Safe** - Structured data instead of regex parsing everywhere +✅ **Extensible** - Custom block properties supported +✅ **Hierarchy Preserved** - Nested blocks maintain parent-child relationships + +### Negative + +⚠️ **Added Complexity** - New data structures, parser, sync logic +⚠️ **Dual Representation** - Must keep `content` and `blocks` in sync +⚠️ **Storage Overhead** - SurrealDB stores both markdown and structure +⚠️ **Migration Required** - Existing data needs parsing to populate blocks + +### Neutral + +⚙️ **Lazy Parsing** - Blocks parsed on-demand (not stored by default) +⚙️ **Opt-In** - Config flag `blocks.enabled` to activate features +⚙️ **Gradual Adoption** - Can implement in phases + +## Implementation Phases + +**Phase 1: Foundation** (No behavior change) +- Add `Block` struct to `models/block.rs` +- Add optional `blocks` field to `Node` +- Add config: `blocks.enabled = false` (default off) + +**Phase 2: Parser** +- Implement `BlockParser::parse()` (markdown → blocks) +- Implement `BlockParser::serialize()` (blocks → markdown) +- Add `Node::get_blocks()` method (lazy parsing) + +**Phase 3: Logseq Integration** +- Update `LogseqImporter` to parse blocks +- Update `LogseqExporter` to serialize blocks +- Test round-trip (Logseq → KB → Logseq) + +**Phase 4: Query API** +- Add `Graph::find_blocks_by_tag()` +- Add `Graph::find_all_todos()` +- Add `Node::find_blocks_by_property()` + +**Phase 5: MCP/CLI Integration** +- Add `kb/find_blocks` MCP tool +- Add `kogral find-cards` CLI command +- Add `kogral find-todos` CLI command + +**Phase 6: SurrealDB Backend** +- Create `block` table schema +- Index on tags, status, properties +- Store blocks alongside nodes + +## Alternatives Considered + +### Alternative 1: Blocks as First-Class Nodes + +Convert each Logseq block to a separate KOGRAL Node. + +**Rejected**: Too granular, explosion of nodes, loses document context. + +### Alternative 2: Parser-Only (No Storage) + +Keep `content: String`, parse blocks on every access. + +**Rejected**: Can't query blocks in database, parse overhead, can't index. + +### Alternative 3: Metadata Field + +Store blocks in `metadata: HashMap`. + +**Rejected**: Not type-safe, harder to query, no schema validation. + +## References + +- [Logseq Block Format](https://docs.logseq.com/#/page/blocks) +- [Full Design Document](../logseq-blocks-design.md) +- [Implementation Tracking](https://github.com/.../issues/XXX) + +## Notes + +**Backward Compatibility Strategy**: +- `content` remains source of truth +- `blocks` is optional enhancement +- Old code works unchanged +- New features opt-in via config + +**Migration Path**: +- Existing users: blocks disabled by default +- New users: blocks enabled, parsed on import +- Manual: `kogral reindex --parse-blocks` to populate + +--- + +**Decision Date**: 2026-01-17 +**Approvers**: TBD +**Review Date**: After Phase 2 implementation diff --git a/docs/architecture/adrs/005-mcp-protocol.md b/docs/architecture/adrs/005-mcp-protocol.md new file mode 100644 index 0000000..73e8f4b --- /dev/null +++ b/docs/architecture/adrs/005-mcp-protocol.md @@ -0,0 +1 @@ +# ADR-005: MCP Protocol for AI Integration diff --git a/docs/architecture/config-driven.md b/docs/architecture/config-driven.md new file mode 100644 index 0000000..ec82a18 --- /dev/null +++ b/docs/architecture/config-driven.md @@ -0,0 +1,539 @@ +# Config-Driven Architecture + +The KOGRAL follows a **config-driven architecture** where all behavior is defined through Nickel configuration files rather than hardcoded in Rust. + +## Philosophy + +**"Configuration, not code, defines behavior"** + +Instead of hardcoding storage backends, embedding providers, or query parameters, KOGRAL uses a layered configuration system that composes settings from multiple sources: + +1. **Schema contracts** (type definitions) +2. **Defaults** (base values) +3. **Mode overlays** (dev/prod/test optimizations) +4. **User customizations** (project-specific overrides) + +This approach provides: + +- ✅ **Type safety** - Nickel contracts validate configuration before runtime +- ✅ **Composability** - Mix and match configurations for different environments +- ✅ **Discoverability** - Self-documenting schemas with inline documentation +- ✅ **Hot-reload** - Change behavior without recompiling Rust code +- ✅ **Double validation** - Nickel contracts + serde ensure correctness + +## Configuration Composition Flow + +![Configuration Composition](../diagrams/config-composition.svg) + +The configuration system uses a **four-layer composition pattern**: + +### Layer 1: Schema Contracts + +**Location**: `schemas/contracts.ncl` + +**Purpose**: Define types and validation rules using Nickel contracts. + +**Example**: + +```nickel +{ + StorageType = [| 'filesystem, 'memory, 'surrealdb |], + + StorageConfig = { + primary | StorageType + | doc "Primary storage backend" + | default = 'filesystem, + + secondary | SecondaryStorageConfig + | doc "Optional secondary storage" + | default = { enabled = false }, + }, +} +``` + +**Benefits**: +- Enum validation (only valid storage types accepted) +- Required vs optional fields +- Default values for optional fields +- Documentation attached to types + +### Layer 2: Defaults + +**Location**: `schemas/defaults.ncl` + +**Purpose**: Provide sensible base values for all configuration options. + +**Example**: + +```nickel +{ + base = { + storage = { + primary = 'filesystem, + secondary = { + enabled = false, + type = 'surrealdb, + url = "ws://localhost:8000", + }, + }, + embeddings = { + enabled = true, + provider = 'fastembed, + model = "BAAI/bge-small-en-v1.5", + dimensions = 384, + }, + } | contracts.KbConfig, +} +``` + +**Validated by**: `contracts.KbConfig` contract ensures defaults are valid. + +### Layer 3: Mode Overlays + +**Location**: `schemas/modes/{dev,prod,test}.ncl` + +**Purpose**: Environment-specific optimizations and tuning. + +#### Development Mode (`dev.ncl`) + +Optimized for: Fast iteration, local development, debugging + +```nickel +{ + storage = { + primary = 'filesystem, + secondary = { enabled = false }, # No database overhead + }, + embeddings = { + provider = 'fastembed, # Local, no API costs + }, + sync = { + auto_index = false, # Manual control + }, +} +``` + +#### Production Mode (`prod.ncl`) + +Optimized for: Performance, reliability, scalability + +```nickel +{ + storage = { + secondary = { enabled = true }, # SurrealDB for scale + }, + embeddings = { + provider = 'openai, # High-quality cloud embeddings + model = "text-embedding-3-small", + dimensions = 1536, + }, + sync = { + auto_index = true, + debounce_ms = 300, # Fast response + }, +} +``` + +#### Test Mode (`test.ncl`) + +Optimized for: Fast tests, isolation, determinism + +```nickel +{ + storage = { + primary = 'memory, # Ephemeral, no disk I/O + }, + embeddings = { + enabled = false, # Disable for speed + }, + sync = { + auto_index = false, + debounce_ms = 0, # No delays in tests + }, +} +``` + +### Layer 4: User Customizations + +**Location**: `.kogral-config/core/kogral.ncl` or `.kogral-config/platform/{dev,prod,test}.ncl` + +**Purpose**: Project-specific or deployment-specific overrides. + +**Example** (user project config): + +```nickel +let mode = import "../../schemas/modes/dev.ncl" in + +let user_custom = { + graph = { + name = "my-project", + }, + embeddings = { + provider = 'claude, # Override to use Claude + model = "claude-3-haiku-20240307", + }, + query = { + similarity_threshold = 0.7, # Stricter threshold + }, +} in + +helpers.compose_config defaults.base mode user_custom + | contracts.KbConfig +``` + +## Composition Mechanism + +The `helpers.ncl` module provides the composition function: + +```nickel +{ + # Recursively merge with override precedence + merge_with_override = fun base override => /* ... */, + + # Compose three layers + compose_config = fun defaults mode_config user_custom => + let with_mode = merge_with_override defaults mode_config in + merge_with_override with_mode user_custom, +} +``` + +**Merge behavior**: +- Records are merged recursively +- Override values take precedence over base values +- Arrays are not merged, override replaces base +- Null in override keeps base value + +**Example merge**: + +```nickel +base = { storage = { primary = 'filesystem }, embeddings = { enabled = true } } +override = { storage = { primary = 'memory } } +# Result: { storage = { primary = 'memory }, embeddings = { enabled = true } } +``` + +## Export to JSON + +Once composed, the Nickel configuration is exported to JSON for Rust consumption: + +```bash +nickel export --format json .kogral-config/core/kogral.ncl > .kogral-config/targets/kogral-core.json +``` + +**Output** (`.kogral-config/targets/kogral-core.json`): + +```json +{ + "graph": { + "name": "my-project", + "version": "1.0.0" + }, + "storage": { + "primary": "memory", + "secondary": { + "enabled": false + } + }, + "embeddings": { + "enabled": true, + "provider": "claude", + "model": "claude-3-haiku-20240307", + "dimensions": 768 + } +} +``` + +## Rust Integration + +The Rust code deserializes the JSON into typed structs using serde: + +```rust +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Deserialize, Serialize)] +pub struct KbConfig { + pub graph: GraphConfig, + pub storage: StorageConfig, + pub embeddings: EmbeddingConfig, + pub templates: TemplateConfig, + pub query: QueryConfig, + pub mcp: McpConfig, + pub sync: SyncConfig, +} + +impl KbConfig { + pub fn from_file(path: &Path) -> Result { + let json = std::fs::read_to_string(path)?; + let config: KbConfig = serde_json::from_str(&json)?; + Ok(config) + } +} +``` + +**Usage in kogral-core**: + +```rust +let config = KbConfig::from_file(".kogral-config/targets/kogral-core.json")?; + +// Config drives behavior +let storage: Box = match config.storage.primary { + StorageType::Filesystem => Box::new(FilesystemStorage::new(&config)?), + StorageType::Memory => Box::new(MemoryStorage::new()), + StorageType::SurrealDb => Box::new(SurrealDbStorage::new(&config).await?), +}; + +let embeddings: Box = match config.embeddings.provider { + EmbeddingProviderType::FastEmbed => Box::new(FastEmbedProvider::new()?), + EmbeddingProviderType::OpenAI => Box::new(RigEmbeddingProvider::openai(&config)?), + EmbeddingProviderType::Claude => Box::new(RigEmbeddingProvider::claude(&config)?), + EmbeddingProviderType::Ollama => Box::new(RigEmbeddingProvider::ollama(&config)?), +}; +``` + +## Double Validation + +Configuration is validated **twice**: + +### 1. Nickel Contract Validation + +At export time, Nickel validates: +- ✅ Types match contracts (e.g., `primary | StorageType`) +- ✅ Required fields are present +- ✅ Enums have valid values +- ✅ Nested structure is correct + +**Error example**: + +```text +error: contract broken by a value + ┌─ .kogral-config/core/kogral.ncl:15:5 + │ +15│ primary = 'invalid, + │ ^^^^^^^^^^^^^^^^^^^ applied to this expression + │ + = This value is not in the enum ['filesystem, 'memory, 'surrealdb] +``` + +### 2. Serde Deserialization Validation + +At runtime, serde validates: +- ✅ JSON structure matches Rust types +- ✅ Field names match (with rename support) +- ✅ Values can be converted to Rust types +- ✅ Required fields are not null + +**Error example**: + +```rust +Error: missing field `graph` at line 1 column 123 +``` + +## Benefits of Config-Driven Architecture + +### 1. Zero Hardcoding + +**Bad** (hardcoded): + +```rust +// Hardcoded - requires recompilation to change +let storage = FilesystemStorage::new("/fixed/path"); +let threshold = 0.6; +``` + +**Good** (config-driven): + +```rust +// Config-driven - change via .ncl file +let storage = create_storage(&config)?; +let threshold = config.query.similarity_threshold; +``` + +### 2. Environment Flexibility + +Same codebase, different behavior: + +```bash +# Development +nickel export .kogral-config/platform/dev.ncl > targets/kogral-core.json +# → Filesystem storage, fastembed, no auto-sync + +# Production +nickel export .kogral-config/platform/prod.ncl > targets/kogral-core.json +# → SurrealDB enabled, OpenAI embeddings, auto-sync + +# Testing +nickel export .kogral-config/platform/test.ncl > targets/kogral-core.json +# → In-memory storage, no embeddings, isolated +``` + +### 3. Self-Documenting + +Nickel contracts include inline documentation: + +```nickel +StorageType = [| 'filesystem, 'memory, 'surrealdb |] + | doc "Storage backend type: filesystem (git-tracked), memory (ephemeral), surrealdb (scalable)", +``` + +IDEs can show this documentation when editing `.ncl` files. + +### 4. Type-Safe Evolution + +When adding new features: + +1. Update contract in `contracts.ncl` +2. Add default in `defaults.ncl` +3. Export validates existing configs +4. Rust compilation validates deserialization + +Breaking changes are caught **before runtime**. + +### 5. Testability + +Different test scenarios without code changes: + +```nickel +# test-semantic-search.ncl +let test_config = defaults.base & { + embeddings = { enabled = true, provider = 'fastembed }, + query = { similarity_threshold = 0.3 }, +} in test_config +``` + +```rust +#[test] +fn test_semantic_search() { + let config = KbConfig::from_file("test-semantic-search.json")?; + // Config drives test behavior +} +``` + +## Configuration Discovery + +KOGRAL tools automatically discover configuration: + +1. **Check `.kogral-config/targets/kogral-core.json`** (pre-exported) +2. **Check `.kogral-config/core/kogral.ncl`** (export on-demand) +3. **Check environment variable `KOGRAL_CONFIG`** +4. **Fall back to embedded defaults** + +```rust +impl KbConfig { + pub fn discover() -> Result { + if let Ok(config) = Self::from_file(".kogral-config/targets/kogral-core.json") { + return Ok(config); + } + + if Path::new(".kogral-config/core/kogral.ncl").exists() { + // Export and load + let output = Command::new("nickel") + .args(["export", "--format", "json", ".kogral-config/core/kogral.ncl"]) + .output()?; + return serde_json::from_slice(&output.stdout)?; + } + + if let Ok(path) = std::env::var("KOGRAL_CONFIG") { + return Self::from_file(&path); + } + + Ok(Self::default()) // Embedded defaults + } +} +``` + +## Integration with justfile + +The `justfile` integrates configuration validation: + +```just +# Validate all Nickel configs +nickel-validate-all: + @echo "Validating Nickel schemas..." + nickel typecheck schemas/contracts.ncl + nickel typecheck schemas/defaults.ncl + nickel typecheck schemas/helpers.ncl + nickel typecheck schemas/modes/dev.ncl + nickel typecheck schemas/modes/prod.ncl + nickel typecheck schemas/modes/test.ncl + nickel typecheck .kogral-config/core/kogral.ncl + +# Export all platform configs +nickel-export-all: + @echo "Exporting platform configs to JSON..." + @mkdir -p .kogral-config/targets + nickel export --format json .kogral-config/platform/dev.ncl > .kogral-config/targets/kogral-dev.json + nickel export --format json .kogral-config/platform/prod.ncl > .kogral-config/targets/kogral-prod.json + nickel export --format json .kogral-config/platform/test.ncl > .kogral-config/targets/kogral-test.json + @echo "Exported 3 configurations to .kogral-config/targets/" +``` + +Usage: + +```bash +just nickel::validate-all # Check configs are valid +just nickel::export-all # Generate JSON for all environments +``` + +## Best Practices + +### 1. Never Hardcode + +If it's behavior, it's config: +- Storage paths +- API endpoints +- Thresholds +- Timeouts +- Feature flags +- Provider selection + +### 2. Use Modes for Environment Differences + +Don't put environment-specific values in user config: + +**Bad**: + +```nickel +# user config with env-specific values +{ + storage = { + url = if env == "prod" then "prod-url" else "dev-url" # Don't do this + } +} +``` + +**Good**: + +```nickel +# modes/prod.ncl +{ storage = { url = "prod-url" } } + +# modes/dev.ncl +{ storage = { url = "dev-url" } } + +# user config is environment-agnostic +{ graph = { name = "my-project" } } +``` + +### 3. Document Complex Fields + +Use Nickel's `doc` metadata: + +```nickel +similarity_threshold | Number + | doc "Minimum cosine similarity (0-1) for semantic search matches. Higher = stricter." + | default = 0.6, +``` + +### 4. Validate Early + +Run `nickel typecheck` in CI/CD before building Rust code. + +### 5. Version Configs + +Track `.ncl` files in git, ignore `.kogral-config/targets/*.json` (generated). + +## See Also + +- **Schema Reference**: [Configuration Schema](../config/schema.md) +- **User Guide**: [Configuration Guide](../config/overview.md) +- **ADR**: [Why Nickel vs TOML](adrs/001-nickel-vs-toml.md) +- **Examples**: `.kogral-config/core/kogral.ncl`, `.kogral-config/platform/*.ncl` diff --git a/docs/architecture/graph-model.md b/docs/architecture/graph-model.md new file mode 100644 index 0000000..52302dd --- /dev/null +++ b/docs/architecture/graph-model.md @@ -0,0 +1 @@ +# Graph Model diff --git a/docs/architecture/logseq-blocks-design.md b/docs/architecture/logseq-blocks-design.md new file mode 100644 index 0000000..f844744 --- /dev/null +++ b/docs/architecture/logseq-blocks-design.md @@ -0,0 +1,935 @@ +# Logseq Blocks Support - Architecture Design + +## Problem Statement + +Logseq uses **content blocks** as the fundamental unit of information, not full documents. Each block can have: + +- **Properties**: `#card`, `TODO`, `DONE`, custom properties +- **Tags**: Inline tags like `#flashcard`, `#important` +- **References**: Block references `((block-id))`, page references `[[page]]` +- **Nesting**: Outliner-style hierarchy (parent-child blocks) +- **Metadata**: Block-level properties (unlike page-level frontmatter) + +**Current KB limitation**: Nodes only have `content: String` (flat markdown). Importing from Logseq loses block structure and properties. + +**Requirement**: Support round-trip import/export with full block fidelity: + +```text +Logseq Graph → KOGRAL Import → KOGRAL Storage → KOGRAL Export → Logseq Graph + (blocks preserved) (blocks preserved) +``` + +## Use Cases + +### 1. Flashcards (`#card`) + +**Logseq**: + +```markdown +- What is Rust's ownership model? #card + - Rust uses ownership, borrowing, and lifetimes + - Three rules: one owner, many borrows XOR one mutable +``` + +**KB needs to preserve**: +- Block with `#card` property +- Nested answer blocks +- Ability to query all cards + +### 2. Task Tracking (`TODO`/`DONE`) + +**Logseq**: + +```markdown +- TODO Implement block parser #rust + - DONE Research block structure + - TODO Write parser tests +``` + +**KB needs to preserve**: +- Task status per block +- Hierarchical task breakdown +- Tags on tasks + +### 3. Block References + +**Logseq**: + +```markdown +- Core concept: ((block-uuid-123)) + - See also: [[Related Page]] +``` + +**KB needs to preserve**: +- Block-to-block links (not just page-to-page) +- UUID references + +### 4. Block Properties + +**Logseq**: + +```markdown +- This is a block with properties + property1:: value1 + property2:: value2 +``` + +**KB needs to preserve**: +- Custom key-value properties per block +- Property inheritance/override + +## Design Options + +### Option A: Blocks as First-Class Data Structure + +**Add `blocks` field to Node**: + +```rust +pub struct Node { + // ... existing fields ... + pub content: String, // Backward compat: flat markdown + pub blocks: Option>, // NEW: Structured blocks +} + +pub struct Block { + pub id: String, // UUID or auto-generated + pub content: String, // Block text + pub properties: BlockProperties, // Tags, status, custom props + pub children: Vec, // Nested blocks + pub created: DateTime, + pub modified: DateTime, +} + +pub struct BlockProperties { + pub tags: Vec, // #card, #important + pub status: Option, // TODO, DONE, WAITING + pub custom: HashMap, // property:: value +} + +pub enum TaskStatus { + Todo, + Doing, + Done, + Waiting, + Cancelled, +} +``` + +**Pros**: +- ✅ Type-safe, explicit structure +- ✅ Queryable (find all #card blocks) +- ✅ Preserves hierarchy +- ✅ Supports block-level operations + +**Cons**: +- ❌ Adds complexity to Node +- ❌ Dual representation (content + blocks) +- ❌ Requires migration of existing data + +### Option B: Parser-Only Approach + +**Keep `content: String`, parse blocks on-demand**: + +```rust +pub struct BlockParser; + +impl BlockParser { + // Parse markdown content into block structure + fn parse(content: &str) -> Vec; + + // Serialize blocks back to markdown + fn serialize(blocks: &[Block]) -> String; +} + +// Usage +let blocks = BlockParser::parse(&node.content); +let filtered = blocks.iter().filter(|b| b.properties.tags.contains("card")); +``` + +**Pros**: +- ✅ No schema changes +- ✅ Backward compatible +- ✅ Simple storage (still just String) + +**Cons**: +- ❌ Parse overhead on every access +- ❌ Can't query blocks in database (SurrealDB) +- ❌ Harder to index/search blocks + +### Option C: Hybrid Approach (RECOMMENDED) + +**Combine both: structured storage + lazy parsing**: + +```rust +pub struct Node { + // ... existing fields ... + pub content: String, // Source of truth (markdown) + + #[serde(skip_serializing_if = "Option::is_none")] + pub blocks: Option>, // Cached structure (parsed) +} + +impl Node { + // Parse blocks from content if not already cached + pub fn get_blocks(&mut self) -> &Vec { + if self.blocks.is_none() { + self.blocks = Some(BlockParser::parse(&self.content)); + } + self.blocks.as_ref().unwrap() + } + + // Update content from blocks (when blocks modified) + pub fn sync_blocks_to_content(&mut self) { + if let Some(ref blocks) = self.blocks { + self.content = BlockParser::serialize(blocks); + } + } +} +``` + +**Storage Strategy**: + +1. **Filesystem** - Store as markdown (Logseq compatible): + + ```markdown + - Block 1 #card + - Nested block + - Block 2 TODO + ``` + +2. **SurrealDB** - Store both: + + ```sql + DEFINE TABLE block SCHEMAFULL; + DEFINE FIELD node_id ON block TYPE record(node); + DEFINE FIELD block_id ON block TYPE string; + DEFINE FIELD content ON block TYPE string; + DEFINE FIELD properties ON block TYPE object; + DEFINE FIELD parent_id ON block TYPE option; + + -- Index for queries + DEFINE INDEX block_tags ON block COLUMNS properties.tags; + DEFINE INDEX block_status ON block COLUMNS properties.status; + ``` + +**Pros**: +- ✅ Best of both worlds +- ✅ Filesystem stays Logseq-compatible +- ✅ SurrealDB can query blocks +- ✅ Lazy parsing (only when needed) +- ✅ Backward compatible + +**Cons**: +- ⚠️ Need to keep content/blocks in sync +- ⚠️ More complex implementation + +## Recommended Implementation + +**Phase 1: Data Model** + +```rust +// crates/kogral-core/src/models/block.rs + +use chrono::{DateTime, Utc}; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; + +/// A content block (Logseq-style) +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Block { + /// Unique block identifier (UUID) + pub id: String, + + /// Block content (markdown text, excluding nested blocks) + pub content: String, + + /// Block properties (tags, status, custom) + pub properties: BlockProperties, + + /// Child blocks (nested hierarchy) + #[serde(default)] + pub children: Vec, + + /// Creation timestamp + pub created: DateTime, + + /// Last modification timestamp + pub modified: DateTime, + + /// Parent block ID (if nested) + #[serde(skip_serializing_if = "Option::is_none")] + pub parent_id: Option, +} + +/// Block-level properties +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +pub struct BlockProperties { + /// Tags (e.g., #card, #important) + #[serde(default)] + pub tags: Vec, + + /// Task status (TODO, DONE, etc.) + #[serde(skip_serializing_if = "Option::is_none")] + pub status: Option, + + /// Custom properties (property:: value) + #[serde(default)] + pub custom: HashMap, + + /// Block references ((uuid)) + #[serde(default)] + pub block_refs: Vec, + + /// Page references ([[page]]) + #[serde(default)] + pub page_refs: Vec, +} + +/// Task status for TODO blocks +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] +#[serde(rename_all = "UPPERCASE")] +pub enum TaskStatus { + Todo, + Doing, + Done, + Later, + Now, + Waiting, + Cancelled, +} + +impl Block { + /// Create a new block with content + pub fn new(content: String) -> Self { + use uuid::Uuid; + Self { + id: Uuid::new_v4().to_string(), + content, + properties: BlockProperties::default(), + children: Vec::new(), + created: Utc::now(), + modified: Utc::now(), + parent_id: None, + } + } + + /// Add a child block + pub fn add_child(&mut self, mut child: Block) { + child.parent_id = Some(self.id.clone()); + self.children.push(child); + self.modified = Utc::now(); + } + + /// Add a tag to this block + pub fn add_tag(&mut self, tag: String) { + if !self.properties.tags.contains(&tag) { + self.properties.tags.push(tag); + self.modified = Utc::now(); + } + } + + /// Set task status + pub fn set_status(&mut self, status: TaskStatus) { + self.properties.status = Some(status); + self.modified = Utc::now(); + } + + /// Get all blocks (self + descendants) as flat list + pub fn flatten(&self) -> Vec<&Block> { + let mut result = vec![self]; + for child in &self.children { + result.extend(child.flatten()); + } + result + } + + /// Find block by ID in tree + pub fn find(&self, id: &str) -> Option<&Block> { + if self.id == id { + return Some(self); + } + for child in &self.children { + if let Some(found) = child.find(id) { + return Some(found); + } + } + None + } +} +``` + +**Phase 2: Update Node Model** + +```rust +// crates/kogral-core/src/models.rs (modifications) + +use crate::models::block::Block; + +pub struct Node { + // ... existing fields ... + pub content: String, + + /// Structured blocks (optional, parsed from content) + #[serde(skip_serializing_if = "Option::is_none")] + pub blocks: Option>, +} + +impl Node { + /// Get blocks, parsing from content if needed + pub fn get_blocks(&mut self) -> Result<&Vec> { + if self.blocks.is_none() { + self.blocks = Some(crate::parser::BlockParser::parse(&self.content)?); + } + Ok(self.blocks.as_ref().unwrap()) + } + + /// Update content from blocks + pub fn sync_blocks_to_content(&mut self) { + if let Some(ref blocks) = self.blocks { + self.content = crate::parser::BlockParser::serialize(blocks); + } + } + + /// Find all blocks with a specific tag + pub fn find_blocks_by_tag(&mut self, tag: &str) -> Result> { + let blocks = self.get_blocks()?; + let mut result = Vec::new(); + for block in blocks { + for b in block.flatten() { + if b.properties.tags.iter().any(|t| t == tag) { + result.push(b); + } + } + } + Ok(result) + } + + /// Find all TODO blocks + pub fn find_todos(&mut self) -> Result> { + let blocks = self.get_blocks()?; + let mut result = Vec::new(); + for block in blocks { + for b in block.flatten() { + if matches!(b.properties.status, Some(TaskStatus::Todo)) { + result.push(b); + } + } + } + Ok(result) + } +} +``` + +**Phase 3: Block Parser** + +```rust +// crates/kogral-core/src/parser/block_parser.rs + +use crate::models::block::{Block, BlockProperties, TaskStatus}; +use regex::Regex; + +pub struct BlockParser; + +impl BlockParser { + /// Parse markdown content into block structure + /// + /// Handles: + /// - Outliner format (- prefix with indentation) + /// - Tags (#card, #important) + /// - Task status (TODO, DONE) + /// - Properties (property:: value) + /// - Block references (((uuid))) + /// - Page references ([[page]]) + pub fn parse(content: &str) -> Result> { + let mut blocks = Vec::new(); + let mut stack: Vec<(usize, Block)> = Vec::new(); // (indent_level, block) + + for line in content.lines() { + // Detect indentation level + let indent = count_indent(line); + let trimmed = line.trim_start(); + + // Skip empty lines + if trimmed.is_empty() { + continue; + } + + // Parse block line + if let Some(block_content) = trimmed.strip_prefix("- ") { + let mut block = Self::parse_block_line(block_content)?; + + // Pop stack until we find parent level + while let Some((level, _)) = stack.last() { + if *level < indent { + break; + } + stack.pop(); + } + + // Add as child to parent or as root + if let Some((_, parent)) = stack.last_mut() { + parent.add_child(block.clone()); + } else { + blocks.push(block.clone()); + } + + stack.push((indent, block)); + } + } + + Ok(blocks) + } + + /// Parse a single block line (after "- " prefix) + fn parse_block_line(line: &str) -> Result { + let mut block = Block::new(String::new()); + let mut properties = BlockProperties::default(); + + // Extract task status (TODO, DONE, etc.) + let (status, remaining) = Self::extract_task_status(line); + properties.status = status; + + // Extract tags (#card, #important) + let (tags, remaining) = Self::extract_tags(remaining); + properties.tags = tags; + + // Extract properties (property:: value) + let (custom_props, remaining) = Self::extract_properties(remaining); + properties.custom = custom_props; + + // Extract block references (((uuid))) + let (block_refs, remaining) = Self::extract_block_refs(remaining); + properties.block_refs = block_refs; + + // Extract page references ([[page]]) + let (page_refs, content) = Self::extract_page_refs(remaining); + properties.page_refs = page_refs; + + block.content = content.trim().to_string(); + block.properties = properties; + + Ok(block) + } + + /// Serialize blocks back to markdown + pub fn serialize(blocks: &[Block]) -> String { + let mut result = String::new(); + for block in blocks { + Self::serialize_block(&mut result, block, 0); + } + result + } + + fn serialize_block(output: &mut String, block: &Block, indent: usize) { + // Write indent + for _ in 0..indent { + output.push_str(" "); + } + + // Write prefix + output.push_str("- "); + + // Write task status + if let Some(status) = block.properties.status { + output.push_str(&format!("{:?} ", status).to_uppercase()); + } + + // Write content + output.push_str(&block.content); + + // Write tags + for tag in &block.properties.tags { + output.push_str(&format!(" #{}", tag)); + } + + // Write properties + if !block.properties.custom.is_empty() { + output.push('\n'); + for (key, value) in &block.properties.custom { + for _ in 0..=indent { + output.push_str(" "); + } + output.push_str(&format!("{}:: {}\n", key, value)); + } + } + + output.push('\n'); + + // Write children recursively + for child in &block.children { + Self::serialize_block(output, child, indent + 1); + } + } + + // Helper methods for extraction + fn extract_task_status(line: &str) -> (Option, &str) { + let line = line.trim_start(); + if let Some(rest) = line.strip_prefix("TODO ") { + (Some(TaskStatus::Todo), rest) + } else if let Some(rest) = line.strip_prefix("DONE ") { + (Some(TaskStatus::Done), rest) + } else if let Some(rest) = line.strip_prefix("DOING ") { + (Some(TaskStatus::Doing), rest) + } else if let Some(rest) = line.strip_prefix("LATER ") { + (Some(TaskStatus::Later), rest) + } else if let Some(rest) = line.strip_prefix("NOW ") { + (Some(TaskStatus::Now), rest) + } else if let Some(rest) = line.strip_prefix("WAITING ") { + (Some(TaskStatus::Waiting), rest) + } else if let Some(rest) = line.strip_prefix("CANCELLED ") { + (Some(TaskStatus::Cancelled), rest) + } else { + (None, line) + } + } + + fn extract_tags(line: &str) -> (Vec, String) { + let tag_regex = Regex::new(r"#(\w+)").unwrap(); + let mut tags = Vec::new(); + let mut result = line.to_string(); + + for cap in tag_regex.captures_iter(line) { + if let Some(tag) = cap.get(1) { + tags.push(tag.as_str().to_string()); + result = result.replace(&format!("#{}", tag.as_str()), ""); + } + } + + (tags, result.trim().to_string()) + } + + fn extract_properties(line: &str) -> (HashMap, String) { + let prop_regex = Regex::new(r"(\w+)::\s*([^\n]+)").unwrap(); + let mut props = HashMap::new(); + let mut result = line.to_string(); + + for cap in prop_regex.captures_iter(line) { + if let (Some(key), Some(value)) = (cap.get(1), cap.get(2)) { + props.insert(key.as_str().to_string(), value.as_str().trim().to_string()); + result = result.replace(&cap[0], ""); + } + } + + (props, result.trim().to_string()) + } + + fn extract_block_refs(line: &str) -> (Vec, String) { + let ref_regex = Regex::new(r"\(\(([^)]+)\)\)").unwrap(); + let mut refs = Vec::new(); + let mut result = line.to_string(); + + for cap in ref_regex.captures_iter(line) { + if let Some(uuid) = cap.get(1) { + refs.push(uuid.as_str().to_string()); + result = result.replace(&cap[0], ""); + } + } + + (refs, result.trim().to_string()) + } + + fn extract_page_refs(line: &str) -> (Vec, String) { + let page_regex = Regex::new(r"\[\[([^\]]+)\]\]").unwrap(); + let mut pages = Vec::new(); + let result = line.to_string(); + + for cap in page_regex.captures_iter(line) { + if let Some(page) = cap.get(1) { + pages.push(page.as_str().to_string()); + // Keep [[page]] in content for now (backward compat) + } + } + + (pages, result) + } +} + +fn count_indent(line: &str) -> usize { + line.chars().take_while(|c| c.is_whitespace()).count() / 2 +} +``` + +**Phase 4: Logseq Import/Export** + +```rust +// crates/kogral-core/src/logseq.rs + +use crate::models::{Node, NodeType}; +use crate::models::block::Block; +use crate::parser::BlockParser; + +pub struct LogseqImporter; + +impl LogseqImporter { + /// Import a Logseq page (markdown file) as a Node + pub fn import_page(path: &Path) -> Result { + let content = std::fs::read_to_string(path)?; + + // Extract frontmatter if present + let (frontmatter, body) = Self::split_frontmatter(&content); + + // Parse blocks from body + let blocks = BlockParser::parse(&body)?; + + // Create node with blocks + let mut node = Node::new(NodeType::Note, Self::extract_title(path)); + node.content = body; + node.blocks = Some(blocks); + + // Apply frontmatter properties + if let Some(fm) = frontmatter { + Self::apply_frontmatter(&mut node, &fm)?; + } + + Ok(node) + } + + fn split_frontmatter(content: &str) -> (Option, String) { + if content.starts_with("---\n") { + if let Some(end) = content[4..].find("\n---\n") { + let frontmatter = content[4..4 + end].to_string(); + let body = content[4 + end + 5..].to_string(); + return (Some(frontmatter), body); + } + } + (None, content.to_string()) + } + + fn extract_title(path: &Path) -> String { + path.file_stem() + .and_then(|s| s.to_str()) + .unwrap_or("Untitled") + .to_string() + } + + fn apply_frontmatter(node: &mut Node, frontmatter: &str) -> Result<()> { + // Parse YAML frontmatter and apply to node + // ... implementation ... + Ok(()) + } +} + +pub struct LogseqExporter; + +impl LogseqExporter { + /// Export a Node to Logseq page format + pub fn export_page(node: &Node, path: &Path) -> Result<()> { + let mut output = String::new(); + + // Generate frontmatter + output.push_str("---\n"); + output.push_str(&Self::generate_frontmatter(node)?); + output.push_str("---\n\n"); + + // Serialize blocks or use content + if let Some(ref blocks) = node.blocks { + output.push_str(&BlockParser::serialize(blocks)); + } else { + output.push_str(&node.content); + } + + std::fs::write(path, output)?; + Ok(()) + } + + fn generate_frontmatter(node: &Node) -> Result { + let mut fm = String::new(); + fm.push_str(&format!("title: {}\n", node.title)); + fm.push_str(&format!("tags: {}\n", node.tags.join(", "))); + // ... more frontmatter fields ... + Ok(fm) + } +} +``` + +## Query API Extensions + +```rust +// New methods in Graph or Query module + +impl Graph { + /// Find all blocks with a specific tag across all nodes + pub fn find_blocks_by_tag(&mut self, tag: &str) -> Vec<(&Node, &Block)> { + let mut results = Vec::new(); + for node in self.nodes.values_mut() { + if let Ok(blocks) = node.find_blocks_by_tag(tag) { + for block in blocks { + results.push((node as &Node, block)); + } + } + } + results + } + + /// Find all flashcards (#card blocks) + pub fn find_flashcards(&mut self) -> Vec<(&Node, &Block)> { + self.find_blocks_by_tag("card") + } + + /// Find all TODO items across knowledge base + pub fn find_all_todos(&mut self) -> Vec<(&Node, &Block)> { + let mut results = Vec::new(); + for node in self.nodes.values_mut() { + if let Ok(todos) = node.find_todos() { + for block in todos { + results.push((node as &Node, block)); + } + } + } + results + } +} +``` + +## MCP Tool Extensions + +```json +{ + "name": "kogral/find_blocks", + "description": "Find blocks by tag, status, or properties", + "inputSchema": { + "type": "object", + "properties": { + "tag": { "type": "string", "description": "Filter by tag (e.g., 'card')" }, + "status": { "type": "string", "enum": ["TODO", "DONE", "DOING"] }, + "property": { "type": "string", "description": "Custom property key" }, + "value": { "type": "string", "description": "Property value to match" } + } + } +} +``` + +## Configuration + +```nickel +# schemas/contracts.ncl (additions) + +BlockConfig = { + enabled | Bool + | doc "Enable block-level parsing and storage" + | default = true, + + preserve_hierarchy | Bool + | doc "Preserve block nesting on import/export" + | default = true, + + parse_on_load | Bool + | doc "Automatically parse blocks when loading nodes" + | default = false, # Lazy parsing by default + + supported_statuses | Array String + | doc "Supported task statuses" + | default = ["TODO", "DONE", "DOING", "LATER", "NOW", "WAITING", "CANCELLED"], +} + +KbConfig = { + # ... existing fields ... + + blocks | BlockConfig + | doc "Block-level features configuration" + | default = {}, +} +``` + +## Migration Path + +**Phase 1**: Add Block models (no behavior change) +**Phase 2**: Add BlockParser (opt-in via config) +**Phase 3**: Update Logseq import/export +**Phase 4**: Add block queries to CLI/MCP +**Phase 5**: SurrealDB block indexing + +**Backward Compatibility**: +- Existing nodes without `blocks` field work as before +- `content` remains source of truth +- `blocks` is optional cache/structure +- Config flag `blocks.enabled` to opt-in + +## Testing Strategy + +```rust +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_parse_simple_block() { + let content = "- This is a block #card"; + let blocks = BlockParser::parse(content).unwrap(); + + assert_eq!(blocks.len(), 1); + assert_eq!(blocks[0].content, "This is a block"); + assert_eq!(blocks[0].properties.tags, vec!["card"]); + } + + #[test] + fn test_parse_nested_blocks() { + let content = r#" +- Parent block + - Child block 1 + - Child block 2 + - Grandchild +"#; + let blocks = BlockParser::parse(content).unwrap(); + + assert_eq!(blocks.len(), 1); + assert_eq!(blocks[0].children.len(), 2); + assert_eq!(blocks[0].children[1].children.len(), 1); + } + + #[test] + fn test_parse_todo() { + let content = "- TODO Implement feature #rust"; + let blocks = BlockParser::parse(content).unwrap(); + + assert_eq!(blocks[0].properties.status, Some(TaskStatus::Todo)); + assert_eq!(blocks[0].content, "Implement feature"); + assert_eq!(blocks[0].properties.tags, vec!["rust"]); + } + + #[test] + fn test_roundtrip() { + let original = r#"- Block 1 #card + - Nested +- TODO Block 2 + priority:: high +"#; + let blocks = BlockParser::parse(original).unwrap(); + let serialized = BlockParser::serialize(&blocks); + let reparsed = BlockParser::parse(&serialized).unwrap(); + + assert_eq!(blocks.len(), reparsed.len()); + assert_eq!(blocks[0].properties, reparsed[0].properties); + } +} +``` + +## Summary + +**Recommended Approach**: Hybrid (Option C) + +- **Add** `Block` struct with properties, hierarchy +- **Extend** `Node` with optional `blocks: Option>` +- **Implement** bidirectional parser (markdown ↔ blocks) +- **Preserve** `content` as source of truth (backward compat) +- **Enable** block queries in CLI/MCP +- **Support** round-trip Logseq import/export + +**Benefits**: +- ✅ Full Logseq compatibility +- ✅ Queryable blocks (find #card, TODO, etc.) +- ✅ Backward compatible +- ✅ Extensible (custom properties) +- ✅ Type-safe structure + +**Trade-offs**: +- ⚠️ Added complexity +- ⚠️ Need to sync content ↔ blocks +- ⚠️ More storage for SurrealDB backend + +**Next Steps**: +1. Review and approve design +2. Implement Phase 1 (Block models) +3. Implement Phase 2 (BlockParser) +4. Update Logseq import/export +5. Add block queries to MCP/CLI diff --git a/docs/architecture/overview.md b/docs/architecture/overview.md new file mode 100644 index 0000000..de2668c --- /dev/null +++ b/docs/architecture/overview.md @@ -0,0 +1,486 @@ +# System Architecture + +Comprehensive overview of the KOGRAL architecture. + +## High-Level Architecture + +![Architecture Overview](../diagrams/architecture-overview.svg) + +The KOGRAL consists of three main layers: + +1. **User Interfaces**: kogral-cli (terminal), kogral-mcp (AI integration), NuShell scripts (automation) +2. **Core Library (kogral-core)**: Rust library with graph engine, storage abstraction, embeddings, query engine +3. **Storage Backends**: Filesystem (git-friendly), SurrealDB (scalable), In-Memory (cache/testing) + +## Component Details + +### kogral-cli (Command-Line Interface) + +**Purpose**: Primary user interface for local knowledge management. + +**Commands** (13 total): +- `init`: Initialize `.kogral/` directory +- `add`: Create nodes (note, decision, guideline, pattern, journal) +- `search`: Text and semantic search +- `link`: Create relationships between nodes +- `list`: List all nodes +- `show`: Display node details +- `delete`: Remove nodes +- `graph`: Visualize knowledge graph +- `sync`: Sync filesystem ↔ SurrealDB +- `serve`: Start MCP server +- `import`: Import from Logseq +- `export`: Export to Logseq/JSON +- `config`: Manage configuration + +**Technology**: Rust + clap (derive API) + +**Features**: +- Colored terminal output +- Interactive prompts +- Dry-run modes +- Validation before operations + +### kogral-mcp (MCP Server) + +**Purpose**: AI integration via Model Context Protocol. + +**Protocol**: JSON-RPC 2.0 over stdio + +**Components**: + +1. **Tools** (7): + - `kogral/search`: Query knowledge base + - `kogral/add_note`: Create notes + - `kogral/add_decision`: Create ADRs + - `kogral/link`: Create relationships + - `kogral/get_guidelines`: Retrieve guidelines with inheritance + - `kb/list_graphs`: List available graphs + - `kogral/export`: Export to formats + +2. **Resources** (6 URIs): + - `kogral://project/notes` + - `kogral://project/decisions` + - `kogral://project/guidelines` + - `kogral://project/patterns` + - `kogral://shared/guidelines` + - `kogral://shared/patterns` + +3. **Prompts** (2): + - `kogral/summarize_project`: Generate project summary + - `kogral/find_related`: Find related nodes + +**Integration**: Claude Code via `~/.config/claude/config.json` + +### NuShell Scripts + +**Purpose**: Automation and maintenance tasks. + +**Scripts** (6): +- `kogral-sync.nu`: Filesystem ↔ SurrealDB sync +- `kogral-backup.nu`: Archive knowledge base +- `kogral-reindex.nu`: Rebuild embeddings +- `kogral-import-logseq.nu`: Import from Logseq +- `kogral-export-logseq.nu`: Export to Logseq +- `kogral-stats.nu`: Graph statistics + +**Features**: +- Colored output +- Dry-run modes +- Progress indicators +- Error handling + +## Core Library (kogral-core) + +### Models + +**Graph**: + +```rust +pub struct Graph { + pub name: String, + pub version: String, + pub nodes: HashMap, // ID → Node + pub edges: Vec, + pub metadata: HashMap, +} +``` + +**Node**: + +```rust +pub struct Node { + pub id: String, + pub node_type: NodeType, + pub title: String, + pub content: String, + pub tags: Vec, + pub status: NodeStatus, + pub created: DateTime, + pub modified: DateTime, + // ... relationships, metadata +} +``` + +**Edge**: + +```rust +pub struct Edge { + pub from: String, + pub to: String, + pub relation: EdgeType, + pub strength: f32, + pub created: DateTime, +} +``` + +### Storage Trait + +```rust +#[async_trait] +pub trait Storage: Send + Sync { + /// Save a complete graph to storage + async fn save_graph(&mut self, graph: &Graph) -> Result<()>; + + /// Load a graph from storage + async fn load_graph(&self, name: &str) -> Result; + + /// Save a single node to storage + async fn save_node(&mut self, node: &Node) -> Result<()>; + + /// Load a node by ID + async fn load_node(&self, graph_name: &str, node_id: &str) -> Result; + + /// Delete a node + async fn delete_node(&mut self, graph_name: &str, node_id: &str) -> Result<()>; + + /// List all graphs + async fn list_graphs(&self) -> Result>; + + /// List nodes in a graph, optionally filtered by type + async fn list_nodes(&self, graph_name: &str, node_type: Option<&str>) -> Result>; +} +``` + +**Implementations**: +1. `FilesystemStorage`: Git-friendly markdown files +2. `MemoryStorage`: In-memory with DashMap +3. `SurrealDbStorage`: Scalable graph database + +### Embedding Provider Trait + +```rust +#[async_trait] +pub trait EmbeddingProvider: Send + Sync { + async fn embed(&self, texts: Vec) -> Result>>; + fn dimensions(&self) -> usize; + fn model_name(&self) -> &str; +} +``` + +**Implementations**: +1. `FastEmbedProvider`: Local fastembed +2. `RigEmbeddingProvider`: OpenAI, Claude, Ollama (via rig-core) + +### Parser + +**Input**: Markdown file with YAML frontmatter + +**Output**: `Node` struct + +**Features**: +- YAML frontmatter extraction +- Markdown body parsing +- Wikilink detection (`[[linked-note]]`) +- Code reference parsing (`@file.rs:42`) + +**Example**: + +```markdown +--- +id: note-123 +type: note +title: My Note +tags: [rust, async] +--- + +# My Note + +Content with [[other-note]] and @src/main.rs:10 +``` + +→ + +```rust +Node { + id: "note-123", + node_type: NodeType::Note, + title: "My Note", + content: "Content with [[other-note]] and @src/main.rs:10", + tags: vec!["rust", "async"], + // ... parsed wikilinks, code refs +} +``` + +## Configuration System + +### Nickel Schema + +```nickel +# schemas/kogral-config.ncl +{ + KbConfig = { + graph | GraphConfig, + storage | StorageConfig, + embeddings | EmbeddingConfig, + templates | TemplateConfig, + query | QueryConfig, + mcp | McpConfig, + sync | SyncConfig, + }, +} +``` + +### Loading Process + +```text +User writes: .kogral/config.ncl + ↓ [nickel export --format json] +JSON intermediate + ↓ [serde_json::from_str] +KbConfig struct (Rust) + ↓ +Runtime behavior +``` + +**Double Validation**: +1. Nickel contracts: Type-safe, enum validation +2. Serde deserialization: Rust type checking + +**Benefits**: +- Errors caught at export time +- Runtime guaranteed valid config +- Self-documenting schemas + +## Storage Architecture + +### Hybrid Strategy + +**Local Graph** (per project): +- Storage: Filesystem (`.kogral/` directory) +- Format: Markdown + YAML frontmatter +- Version control: Git +- Scope: Project-specific knowledge + +**Shared Graph** (organization): +- Storage: SurrealDB (or synced filesystem) +- Format: Same markdown (for compatibility) +- Version control: Optional +- Scope: Organization-wide guidelines + +**Sync**: + +```text +Filesystem (.kogral/) + ↕ [bidirectional sync] +SurrealDB (central) +``` + +### File Layout + +```text +.kogral/ +├── config.toml # Graph metadata +├── notes/ +│ ├── async-patterns.md # Individual note +│ └── error-handling.md +├── decisions/ +│ ├── 0001-use-rust.md # ADR format +│ └── 0002-surrealdb.md +├── guidelines/ +│ ├── rust-errors.md # Project guideline +│ └── testing.md +├── patterns/ +│ └── repository.md +└── journal/ + ├── 2026-01-17.md # Daily journal + └── 2026-01-18.md +``` + +## Query Engine + +### Text Search + +```rust +let results = graph.nodes.values() + .filter(|node| { + node.title.contains(&query) || + node.content.contains(&query) || + node.tags.iter().any(|tag| tag.contains(&query)) + }) + .collect(); +``` + +### Semantic Search + +```rust +let query_embedding = embeddings.embed(vec![query]).await?; +let mut scored: Vec<_> = graph.nodes.values() + .filter_map(|node| { + let node_embedding = node.embedding.as_ref()?; + let similarity = cosine_similarity(&query_embedding[0], node_embedding); + (similarity >= threshold).then_some((node, similarity)) + }) + .collect(); +scored.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap()); +``` + +### Cross-Graph Query + +```rust +// Query both project and shared graphs +let project_results = project_graph.search(&query).await?; +let shared_results = shared_graph.search(&query).await?; + +// Merge with deduplication +let combined = merge_results(project_results, shared_results); +``` + +## MCP Protocol Flow + +```text +Claude Code kogral-mcp kogral-core + │ │ │ + ├─ JSON-RPC request ───→ │ │ + │ kogral/search │ │ + │ {"query": "rust"} │ │ + │ ├─ search() ──────────→ │ + │ │ │ + │ │ Query engine + │ │ Text + semantic + │ │ │ + │ │ ←──── results ─────────┤ + │ │ │ + │ ←─ JSON-RPC response ──┤ │ + │ {"results": [...]} │ │ +``` + +## Template System + +**Engine**: Tera (Jinja2-like) + +**Templates**: + +1. **Document Templates** (6): + - `note.md.tera` + - `decision.md.tera` + - `guideline.md.tera` + - `pattern.md.tera` + - `journal.md.tera` + - `execution.md.tera` + +2. **Export Templates** (4): + - `logseq-page.md.tera` + - `logseq-journal.md.tera` + - `summary.md.tera` + - `graph.json.tera` + +**Usage**: + +```rust +let mut tera = Tera::new("templates/**/*.tera")?; +let rendered = tera.render("note.md.tera", &context)?; +``` + +## Error Handling + +**Strategy**: `thiserror` for structured errors + +```rust +#[derive(Error, Debug)] +pub enum KbError { + #[error("Storage error: {0}")] + Storage(String), + + #[error("Node not found: {0}")] + NodeNotFound(String), + + #[error("Configuration error: {0}")] + Config(String), + + #[error("Parse error: {0}")] + Parse(String), + + #[error("Embedding error: {0}")] + Embedding(String), +} +``` + +**Propagation**: `?` operator throughout + +## Testing Strategy + +**Unit Tests**: Per module (models, parser, storage) + +**Integration Tests**: Full workflow (add → save → load → query) + +**Test Coverage**: +- kogral-core: 48 tests +- kogral-mcp: 5 tests +- Total: 56 tests + +**Test Data**: Fixtures in `tests/fixtures/` + +## Performance Considerations + +**Node Lookup**: O(1) via HashMap + +**Semantic Search**: O(n) with early termination (threshold filter) + +**Storage**: +- Filesystem: Lazy loading (load on demand) +- Memory: Full graph in RAM +- SurrealDB: Query optimization (indexes) + +**Embeddings**: +- Cache embeddings in node metadata +- Batch processing (configurable batch size) +- Async generation (non-blocking) + +## Security + +**No unsafe code**: `#![forbid(unsafe_code)]` + +**Input validation**: +- Nickel contracts validate config +- serde validates JSON +- Custom validation for user input + +**File operations**: +- Path sanitization (no `../` traversal) +- Permissions checking +- Atomic writes (temp file + rename) + +## Scalability + +**Small Projects** (< 1000 nodes): +- Filesystem storage +- In-memory search +- Local embeddings (fastembed) + +**Medium Projects** (1000-10,000 nodes): +- Filesystem + SurrealDB sync +- Semantic search with caching +- Cloud embeddings (OpenAI/Claude) + +**Large Organizations** (> 10,000 nodes): +- SurrealDB primary +- Distributed embeddings +- Multi-graph federation + +## Next Steps + +- **Graph Model Details**: [Graph Model](graph-model.md) +- **Storage Deep Dive**: [Storage Architecture](storage-architecture.md) +- **ADRs**: [Architectural Decisions](adrs/001-nickel-vs-toml.md) +- **Implementation**: [Development Guide](../contributing/development.md) diff --git a/docs/architecture/storage-architecture.md b/docs/architecture/storage-architecture.md new file mode 100644 index 0000000..4485cee --- /dev/null +++ b/docs/architecture/storage-architecture.md @@ -0,0 +1 @@ +# Storage Architecture diff --git a/docs/book.toml b/docs/book.toml new file mode 100644 index 0000000..401b311 --- /dev/null +++ b/docs/book.toml @@ -0,0 +1,38 @@ +[book] +title = "KOGRAL Documentation" +authors = ["KOGRAL Team"] +description = "Complete documentation for KOGRAL - Git-native knowledge graphs for developer teams" +language = "en" +multilingual = false +src = "." + +[build] +build-dir = "book" +create-missing = true + +[output.html] +default-theme = "rust" +preferred-dark-theme = "navy" +git-repository-url = "https://github.com/your-org/knowledge-base" +edit-url-template = "https://github.com/your-org/knowledge-base/edit/main/docs/{path}" + +[output.html.print] +enable = true + +[output.html.fold] +enable = true +level = 1 + +[output.html.search] +enable = true +limit-results = 30 +teaser-word-count = 30 +use-boolean-and = true +boost-title = 2 +boost-hierarchy = 1 +boost-paragraph = 1 +expand = true +heading-split-level = 3 + +[preprocessor.links] +[preprocessor.index] diff --git a/docs/book/.nojekyll b/docs/book/.nojekyll new file mode 100644 index 0000000..f173110 --- /dev/null +++ b/docs/book/.nojekyll @@ -0,0 +1 @@ +This file makes sure that Github Pages doesn't process mdBook's output. diff --git a/docs/book/404.html b/docs/book/404.html new file mode 100644 index 0000000..732ad4a --- /dev/null +++ b/docs/book/404.html @@ -0,0 +1,214 @@ + + + + + + Page not found - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Document not found (404)

+

This URL is invalid, sorry. Please use the navigation bar or search to continue.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/FontAwesome/css/font-awesome.css b/docs/book/FontAwesome/css/font-awesome.css new file mode 100644 index 0000000..540440c --- /dev/null +++ b/docs/book/FontAwesome/css/font-awesome.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/docs/book/FontAwesome/fonts/FontAwesome.ttf b/docs/book/FontAwesome/fonts/FontAwesome.ttf new file mode 100644 index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3 GIT binary patch literal 165548 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 z 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 d0mW2@EHO9NV8h3u2x_sp}KECIB>@9+Qn{FBV{ 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 G*yFsbY~cLNXLP73aA74Mq6M9f^&YV`isWW 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

5q!RY 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 + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/book/FontAwesome/fonts/fontawesome-webfont.ttf b/docs/book/FontAwesome/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3 GIT binary patch literal 165548 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 z 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 d0mRO}xo^G_%I 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 SdSQM28?+M|D(2r_;{O0|uQ74} literal 0 HcmV?d00001 diff --git a/docs/book/FontAwesome/fonts/fontawesome-webfont.woff2 b/docs/book/FontAwesome/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4d13fc60404b91e398a37200c4a77b645cfd9586 GIT binary patch literal 77160 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 literal 0 HcmV?d00001 diff --git a/docs/book/ai/claude.html b/docs/book/ai/claude.html new file mode 100644 index 0000000..9ce9826 --- /dev/null +++ b/docs/book/ai/claude.html @@ -0,0 +1,227 @@ + + + + + + Claude Integration - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Claude Integration

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/ai/embeddings-overview.html b/docs/book/ai/embeddings-overview.html new file mode 100644 index 0000000..52631c0 --- /dev/null +++ b/docs/book/ai/embeddings-overview.html @@ -0,0 +1,227 @@ + + + + + + Embeddings Overview - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Embeddings Overview

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/ai/fastembed.html b/docs/book/ai/fastembed.html new file mode 100644 index 0000000..be3eb3b --- /dev/null +++ b/docs/book/ai/fastembed.html @@ -0,0 +1,227 @@ + + + + + + FastEmbed Local - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

FastEmbed Local

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/ai/ollama.html b/docs/book/ai/ollama.html new file mode 100644 index 0000000..ba46fc8 --- /dev/null +++ b/docs/book/ai/ollama.html @@ -0,0 +1,227 @@ + + + + + + Ollama Integration - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Ollama Integration

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/ai/openai.html b/docs/book/ai/openai.html new file mode 100644 index 0000000..8381c23 --- /dev/null +++ b/docs/book/ai/openai.html @@ -0,0 +1,227 @@ + + + + + + OpenAI Integration - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

OpenAI Integration

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/ai/providers.html b/docs/book/ai/providers.html new file mode 100644 index 0000000..b6715bb --- /dev/null +++ b/docs/book/ai/providers.html @@ -0,0 +1,227 @@ + + + + + + Provider Configuration - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Provider Configuration

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/ai/semantic-search.html b/docs/book/ai/semantic-search.html new file mode 100644 index 0000000..f0fa41d --- /dev/null +++ b/docs/book/ai/semantic-search.html @@ -0,0 +1,227 @@ + + + + + + Semantic Search - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Semantic Search

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/api/mcp-protocol.html b/docs/book/api/mcp-protocol.html new file mode 100644 index 0000000..68e72c0 --- /dev/null +++ b/docs/book/api/mcp-protocol.html @@ -0,0 +1,227 @@ + + + + + + MCP Protocol - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

MCP Protocol

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/api/mcp-resources.html b/docs/book/api/mcp-resources.html new file mode 100644 index 0000000..19b976f --- /dev/null +++ b/docs/book/api/mcp-resources.html @@ -0,0 +1,227 @@ + + + + + + Resources - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Resources

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/api/mcp-tools.html b/docs/book/api/mcp-tools.html new file mode 100644 index 0000000..ecb0cdb --- /dev/null +++ b/docs/book/api/mcp-tools.html @@ -0,0 +1,942 @@ + + + + + + Tools Reference - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

MCP Tools API Reference

+

Complete reference for the Model Context Protocol (MCP) server tools and resources.

+

Overview

+

The kogral-mcp server implements the MCP protocol (JSON-RPC 2.0) for Claude Code integration. It provides:

+
    +
  • 10 Tools: Operations for querying and modifying knowledge base (7 core + 3 block tools)
  • +
  • 6 Resources: Access to knowledge graph content via URIs
  • +
  • 2 Prompts: Guided workflows for common tasks
  • +
+

Server Configuration

+

Start MCP Server

+
# Stdio transport (local use)
+kb serve
+
+# Or run directly
+kb-mcp serve
+
+

Claude Code Configuration

+

Add to ~/.config/claude/config.json:

+
{
+  "mcpServers": {
+    "kogral-mcp": {
+      "command": "/path/to/kb-mcp",
+      "args": ["serve"],
+      "env": {
+        "KOGRAL_DIR": "/path/to/project/.kogral"
+      }
+    }
+  }
+}
+
+

Tools

+

kb/search

+

Search the knowledge base using text and/or semantic similarity.

+

Input Schema:

+
{
+  "type": "object",
+  "properties": {
+    "query": {
+      "type": "string",
+      "description": "Search query"
+    },
+    "type": {
+      "type": "string",
+      "enum": ["note", "decision", "guideline", "pattern", "journal", "execution", "all"],
+      "description": "Filter by node type",
+      "default": "all"
+    },
+    "project": {
+      "type": "string",
+      "description": "Limit search to specific project graph"
+    },
+    "semantic": {
+      "type": "boolean",
+      "description": "Enable semantic similarity search",
+      "default": true
+    },
+    "threshold": {
+      "type": "number",
+      "description": "Minimum similarity threshold (0-1)",
+      "default": 0.4
+    },
+    "limit": {
+      "type": "integer",
+      "description": "Maximum number of results",
+      "default": 10
+    }
+  },
+  "required": ["query"]
+}
+
+

Example Request:

+
{
+  "jsonrpc": "2.0",
+  "id": 1,
+  "method": "kogral/search",
+  "params": {
+    "query": "error handling patterns in Rust",
+    "type": "pattern",
+    "semantic": true,
+    "threshold": 0.6,
+    "limit": 5
+  }
+}
+
+

Example Response:

+
{
+  "jsonrpc": "2.0",
+  "id": 1,
+  "result": {
+    "type": "text",
+    "text": "Found 3 result(s):\n\n1. Error Handling with thiserror (pattern, score: 0.85)\n   Tags: rust, error-handling\n   Created: 2026-01-15\n   \n2. Result Type Best Practices (guideline, score: 0.72)\n   Tags: rust, error-handling, best-practices\n   Created: 2026-01-10\n\n3. Custom Error Types (note, score: 0.65)\n   Tags: rust, error-handling\n   Created: 2026-01-08"
+  }
+}
+
+

kb/add_note

+

Add a new note to the knowledge base.

+

Input Schema:

+
{
+  "type": "object",
+  "properties": {
+    "title": {
+      "type": "string",
+      "description": "Note title"
+    },
+    "content": {
+      "type": "string",
+      "description": "Note content (markdown)"
+    },
+    "tags": {
+      "type": "array",
+      "items": { "type": "string" },
+      "description": "Tags for categorization",
+      "default": []
+    },
+    "relates_to": {
+      "type": "array",
+      "items": { "type": "string" },
+      "description": "Related node IDs",
+      "default": []
+    },
+    "project": {
+      "type": "string",
+      "description": "Project graph name",
+      "default": "default"
+    }
+  },
+  "required": ["title", "content"]
+}
+
+

Example Request:

+
{
+  "jsonrpc": "2.0",
+  "id": 2,
+  "method": "kogral/add_note",
+  "params": {
+    "title": "Async Trait Patterns",
+    "content": "Common patterns for using async traits in Rust:\n\n1. Use `async-trait` crate\n2. Box return types for flexibility\n3. Consider Send + Sync bounds",
+    "tags": ["rust", "async", "patterns"],
+    "relates_to": ["pattern-error-handling"]
+  }
+}
+
+

Example Response:

+
{
+  "jsonrpc": "2.0",
+  "id": 2,
+  "result": {
+    "type": "text",
+    "text": "Note added successfully: note-async-trait-patterns (ID: note-abc123)"
+  }
+}
+
+

kb/add_decision

+

Create an Architectural Decision Record (ADR).

+

Input Schema:

+
{
+  "type": "object",
+  "properties": {
+    "title": {
+      "type": "string",
+      "description": "Decision title"
+    },
+    "context": {
+      "type": "string",
+      "description": "Decision context and background"
+    },
+    "decision": {
+      "type": "string",
+      "description": "The decision made"
+    },
+    "consequences": {
+      "type": "array",
+      "items": { "type": "string" },
+      "description": "List of consequences",
+      "default": []
+    },
+    "status": {
+      "type": "string",
+      "enum": ["proposed", "accepted", "rejected", "deprecated", "superseded"],
+      "default": "proposed"
+    },
+    "tags": {
+      "type": "array",
+      "items": { "type": "string" },
+      "default": []
+    }
+  },
+  "required": ["title", "context", "decision"]
+}
+
+

Example Request:

+
{
+  "jsonrpc": "2.0",
+  "id": 3,
+  "method": "kogral/add_decision",
+  "params": {
+    "title": "Use SurrealDB for Knowledge Graph Storage",
+    "context": "Need a scalable storage solution that supports graph queries and can handle growing knowledge base",
+    "decision": "Adopt SurrealDB as the primary storage backend for production deployments",
+    "consequences": [
+      "Better query performance for graph traversal",
+      "Native support for relationships",
+      "Additional infrastructure dependency",
+      "Team needs to learn SurrealDB query language"
+    ],
+    "status": "accepted",
+    "tags": ["architecture", "storage", "surrealdb"]
+  }
+}
+
+

Example Response:

+
{
+  "jsonrpc": "2.0",
+  "id": 3,
+  "result": {
+    "type": "text",
+    "text": "Decision added: decision-use-surrealdb (ID: decision-xyz789)\nStatus: accepted"
+  }
+}
+
+ +

Create a relationship between two nodes.

+

Input Schema:

+
{
+  "type": "object",
+  "properties": {
+    "from": {
+      "type": "string",
+      "description": "Source node ID"
+    },
+    "to": {
+      "type": "string",
+      "description": "Target node ID"
+    },
+    "relation": {
+      "type": "string",
+      "enum": ["relates_to", "depends_on", "implements", "extends", "supersedes", "explains"],
+      "description": "Relationship type"
+    },
+    "strength": {
+      "type": "number",
+      "description": "Relationship strength (0-1)",
+      "minimum": 0,
+      "maximum": 1,
+      "default": 1.0
+    }
+  },
+  "required": ["from", "to", "relation"]
+}
+
+

Example Request:

+
{
+  "jsonrpc": "2.0",
+  "id": 4,
+  "method": "kogral/link",
+  "params": {
+    "from": "note-async-trait-patterns",
+    "to": "pattern-error-handling",
+    "relation": "relates_to",
+    "strength": 0.8
+  }
+}
+
+

Example Response:

+
{
+  "jsonrpc": "2.0",
+  "id": 4,
+  "result": {
+    "type": "text",
+    "text": "Link created: note-async-trait-patterns --[relates_to]--> pattern-error-handling (strength: 0.8)"
+  }
+}
+
+

Relationship Types:

+
    +
  • relates_to: General conceptual relationship
  • +
  • depends_on: Dependency (from depends on to)
  • +
  • implements: Implementation of concept/pattern
  • +
  • extends: Inherits or extends another node
  • +
  • supersedes: Replaces an older version
  • +
  • explains: Provides documentation/clarification
  • +
+

kb/get_guidelines

+

Retrieve guidelines for current project with inheritance resolution.

+

Input Schema:

+
{
+  "type": "object",
+  "properties": {
+    "language": {
+      "type": "string",
+      "description": "Programming language (e.g., rust, nushell)"
+    },
+    "category": {
+      "type": "string",
+      "description": "Guideline category (e.g., error-handling, testing)"
+    },
+    "include_base": {
+      "type": "boolean",
+      "description": "Include shared/base guidelines",
+      "default": true
+    }
+  }
+}
+
+

Example Request:

+
{
+  "jsonrpc": "2.0",
+  "id": 5,
+  "method": "kogral/get_guidelines",
+  "params": {
+    "language": "rust",
+    "category": "error-handling",
+    "include_base": true
+  }
+}
+
+

Example Response:

+
{
+  "jsonrpc": "2.0",
+  "id": 5,
+  "result": {
+    "type": "text",
+    "text": "Guidelines for rust/error-handling:\n\n## Project Guidelines (priority: 150)\n\n1. Custom Error Types (guideline-custom-errors)\n   - Use thiserror for error definitions\n   - Implement From traits for conversions\n   - Source: .kogral/guidelines/rust-errors.md\n\n## Shared Guidelines (priority: 50)\n\n1. Result Type Best Practices (guideline-result-best-practices)\n   - Always use Result<T> for fallible operations\n   - Never use unwrap() in production\n   - Source: ~/Tools/.kogral-shared/guidelines/rust-errors.md\n\n2. Error Propagation (guideline-error-propagation)\n   - Use ? operator for error propagation\n   - Add context with .context()\n   - Source: ~/Tools/.kogral-shared/guidelines/rust-errors.md"
+  }
+}
+
+

kb/list_graphs

+

List available knowledge graphs.

+

Input Schema:

+
{
+  "type": "object",
+  "properties": {}
+}
+
+

Example Request:

+
{
+  "jsonrpc": "2.0",
+  "id": 6,
+  "method": "kb/list_graphs"
+}
+
+

Example Response:

+
{
+  "jsonrpc": "2.0",
+  "id": 6,
+  "result": {
+    "type": "text",
+    "text": "Available graphs:\n\n- default (Current project)\n  Path: /path/to/project/.kogral\n  Nodes: 42\n  Last modified: 2026-01-17T10:30:00Z\n\n- shared (Shared guidelines)\n  Path: ~/Tools/.kogral-shared\n  Nodes: 156\n  Last modified: 2026-01-15T14:20:00Z"
+  }
+}
+
+

kb/export

+

Export knowledge base to various formats.

+

Input Schema:

+
{
+  "type": "object",
+  "properties": {
+    "format": {
+      "type": "string",
+      "enum": ["logseq", "json", "markdown"],
+      "description": "Export format"
+    },
+    "output_path": {
+      "type": "string",
+      "description": "Output file or directory path"
+    },
+    "include_types": {
+      "type": "array",
+      "items": {
+        "type": "string",
+        "enum": ["note", "decision", "guideline", "pattern", "journal", "execution"]
+      },
+      "description": "Node types to include",
+      "default": ["note", "decision", "guideline", "pattern"]
+    },
+    "skip_journals": {
+      "type": "boolean",
+      "default": true
+    }
+  },
+  "required": ["format", "output_path"]
+}
+
+

Example Request:

+
{
+  "jsonrpc": "2.0",
+  "id": 7,
+  "method": "kogral/export",
+  "params": {
+    "format": "logseq",
+    "output_path": "/Users/akasha/logseq-graph",
+    "include_types": ["note", "decision", "guideline"],
+    "skip_journals": true
+  }
+}
+
+

Example Response:

+
{
+  "jsonrpc": "2.0",
+  "id": 7,
+  "result": {
+    "type": "text",
+    "text": "Export completed:\n\nFormat: Logseq\nOutput: /Users/akasha/logseq-graph\nExported: 42 nodes\n  - 23 notes\n  - 12 decisions\n  - 7 guidelines\n\nLogseq graph ready to open."
+  }
+}
+
+

Block Tools

+

Tools for querying Logseq content blocks. Requires blocks.enable_mcp_tools = true in configuration.

+

kb/find_blocks

+

Find blocks by tag, task status, or custom property across the knowledge base.

+

Input Schema:

+
{
+  "type": "object",
+  "properties": {
+    "tag": {
+      "type": "string",
+      "description": "Find blocks with this tag (e.g., 'card', 'important')"
+    },
+    "status": {
+      "type": "string",
+      "enum": ["TODO", "DOING", "DONE", "LATER", "NOW", "WAITING", "CANCELLED"],
+      "description": "Find blocks with this task status"
+    },
+    "property_key": {
+      "type": "string",
+      "description": "Custom property key to search for"
+    },
+    "property_value": {
+      "type": "string",
+      "description": "Custom property value to match"
+    },
+    "limit": {
+      "type": "integer",
+      "description": "Maximum number of results",
+      "default": 20
+    }
+  }
+}
+
+

Note: Provide one of: tag, status, or both property_key and property_value.

+

Example Request (find blocks by tag):

+
{
+  "jsonrpc": "2.0",
+  "id": 8,
+  "method": "kogral/find_blocks",
+  "params": {
+    "tag": "high-priority",
+    "limit": 10
+  }
+}
+
+

Example Response:

+
{
+  "jsonrpc": "2.0",
+  "id": 8,
+  "result": {
+    "type": "text",
+    "text": "Found 3 blocks with tag '#high-priority':\n\n**Project Tasks** (project-tasks-123)\n  - TODO Implement authentication #high-priority\n  - TODO Fix security vulnerability #high-priority\n\n**Sprint Planning** (sprint-planning-456)\n  - DOING Refactor database layer #high-priority"
+  }
+}
+
+

Example Request (find blocks by property):

+
{
+  "jsonrpc": "2.0",
+  "id": 9,
+  "method": "kogral/find_blocks",
+  "params": {
+    "property_key": "priority",
+    "property_value": "high",
+    "limit": 15
+  }
+}
+
+

kb/find_todos

+

Find all TODO blocks across the knowledge base.

+

Input Schema:

+
{
+  "type": "object",
+  "properties": {
+    "limit": {
+      "type": "integer",
+      "description": "Maximum number of results",
+      "default": 20
+    }
+  }
+}
+
+

Example Request:

+
{
+  "jsonrpc": "2.0",
+  "id": 10,
+  "method": "kogral/find_todos",
+  "params": {
+    "limit": 25
+  }
+}
+
+

Example Response:

+
{
+  "jsonrpc": "2.0",
+  "id": 10,
+  "result": {
+    "type": "text",
+    "text": "Found 8 TODO blocks:\n\n**Project Tasks** (project-tasks-123)\n  - TODO Implement authentication\n  - TODO Write integration tests\n  - TODO Update documentation\n\n**Bug Fixes** (bug-fixes-456)\n  - TODO Fix race condition in cache\n  - TODO Address memory leak\n\n**Research** (research-789)\n  - TODO Evaluate GraphQL alternatives\n  - TODO Benchmark new approach\n  - TODO Document findings"
+  }
+}
+
+

kb/find_cards

+

Find all flashcard blocks (blocks tagged with #card) for spaced repetition learning.

+

Input Schema:

+
{
+  "type": "object",
+  "properties": {
+    "limit": {
+      "type": "integer",
+      "description": "Maximum number of flashcards",
+      "default": 10
+    }
+  }
+}
+
+

Example Request:

+
{
+  "jsonrpc": "2.0",
+  "id": 11,
+  "method": "kogral/find_cards",
+  "params": {
+    "limit": 5
+  }
+}
+
+

Example Response:

+
{
+  "jsonrpc": "2.0",
+  "id": 11,
+  "result": {
+    "type": "text",
+    "text": "Found 3 flashcards:\n\n**Rust Learning** (rust-learning-123)\n  - What is Rust's ownership model? #card #rust\n    - Ownership prevents data races at compile time\n    - Each value has a single owner\n\n**System Design** (system-design-456)\n  - What is the CAP theorem? #card #distributed-systems\n    - Consistency, Availability, Partition tolerance\n    - Can only guarantee 2 of 3\n\n**Algorithms** (algorithms-789)\n  - What is the time complexity of quicksort? #card #algorithms\n    - Average: O(n log n)\n    - Worst case: O(n²)"
+  }
+}
+
+

Use Cases:

+
    +
  • kb/find_blocks: General block search by metadata
  • +
  • kb/find_todos: Task management and tracking
  • +
  • kb/find_cards: Spaced repetition learning system
  • +
+

See Also:

+ +

Resources

+

Resources provide read-only access to knowledge graph content via URIs.

+

kogral://project/notes

+

Access project notes.

+

URI: kogral://project/notes or kogral://project/notes/{note-id}

+

Example: Read all project notes

+
kogral://project/notes
+
+

Example: Read specific note

+
kogral://project/notes/async-trait-patterns
+
+

kogral://project/decisions

+

Access project decisions (ADRs).

+

URI: kogral://project/decisions or kogral://project/decisions/{decision-id}

+

kogral://project/guidelines

+

Access project-specific guidelines.

+

URI: kogral://project/guidelines or kogral://project/guidelines/{guideline-id}

+

kogral://project/patterns

+

Access project patterns.

+

URI: kogral://project/patterns or kogral://project/patterns/{pattern-id}

+

kogral://shared/guidelines

+

Access shared guidelines (inherited).

+

URI: kogral://shared/guidelines or kogral://shared/guidelines/{guideline-id}

+

kogral://shared/patterns

+

Access shared patterns (inherited).

+

URI: kogral://shared/patterns or kogral://shared/patterns/{pattern-id}

+

Prompts

+

Prompts provide guided workflows for common tasks.

+

kb/summarize_project

+

Generate a comprehensive project knowledge summary.

+

Arguments:

+
{
+  "project": {
+    "type": "string",
+    "description": "Project graph name",
+    "default": "default"
+  }
+}
+
+

Example Request:

+
{
+  "jsonrpc": "2.0",
+  "id": 8,
+  "method": "kogral/summarize_project",
+  "params": {
+    "project": "default"
+  }
+}
+
+

Returns: Prompt messages with project summary including:

+
    +
  • Total node counts by type
  • +
  • Recent additions
  • +
  • Top tags
  • +
  • Key decisions
  • +
  • Active patterns
  • +
+ +

Find nodes related to a specific topic or node.

+

Arguments:

+
{
+  "node_id": {
+    "type": "string",
+    "description": "Node ID to find relations for"
+  },
+  "depth": {
+    "type": "integer",
+    "description": "Maximum traversal depth",
+    "default": 2
+  }
+}
+
+

Example Request:

+
{
+  "jsonrpc": "2.0",
+  "id": 9,
+  "method": "kb/find_related",
+  "params": {
+    "node_id": "pattern-error-handling",
+    "depth": 2
+  }
+}
+
+

Returns: Prompt messages with:

+
    +
  • Direct relationships
  • +
  • Indirect relationships (depth 2+)
  • +
  • Common tags
  • +
  • Related guidelines
  • +
+

Error Handling

+

Error Codes

+

Standard JSON-RPC 2.0 error codes:

+
+ + + + + +
CodeMeaningDescription
-32700Parse errorInvalid JSON
-32600Invalid RequestMissing required fields
-32601Method not foundUnknown tool/resource
-32602Invalid paramsParameter validation failed
-32603Internal errorServer-side error
+
+

Example Error Response

+
{
+  "jsonrpc": "2.0",
+  "id": 1,
+  "error": {
+    "code": -32602,
+    "message": "Invalid params",
+    "data": {
+      "details": "Field 'query' is required but missing",
+      "field": "query"
+    }
+  }
+}
+
+

Best Practices

+

1. Use Semantic Search for Discovery

+
{
+  "method": "kogral/search",
+  "params": {
+    "query": "how to handle database connection errors",
+    "semantic": true,
+    "threshold": 0.5
+  }
+}
+
+ +
{
+  "method": "kogral/link",
+  "params": {
+    "from": "note-new-discovery",
+    "to": "pattern-related-pattern",
+    "relation": "implements"
+  }
+}
+
+

3. Query Guidelines Before Implementation

+
{
+  "method": "kogral/get_guidelines",
+  "params": {
+    "language": "rust",
+    "category": "testing"
+  }
+}
+
+

4. Document Decisions with ADRs

+
{
+  "method": "kogral/add_decision",
+  "params": {
+    "title": "Use X for Y",
+    "context": "Background...",
+    "decision": "We will...",
+    "consequences": ["Pro 1", "Con 1"]
+  }
+}
+
+

See Also

+ + +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/api/rust-api.html b/docs/book/api/rust-api.html new file mode 100644 index 0000000..9a5bc98 --- /dev/null +++ b/docs/book/api/rust-api.html @@ -0,0 +1,227 @@ + + + + + + Rust API - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Rust API

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/apps/claude-code.html b/docs/book/apps/claude-code.html new file mode 100644 index 0000000..6eb1429 --- /dev/null +++ b/docs/book/apps/claude-code.html @@ -0,0 +1,227 @@ + + + + + + Claude Code Integration - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Claude Code Integration

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/apps/git.html b/docs/book/apps/git.html new file mode 100644 index 0000000..3cf791c --- /dev/null +++ b/docs/book/apps/git.html @@ -0,0 +1,227 @@ + + + + + + Git Workflows - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Git Workflows

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/apps/logseq.html b/docs/book/apps/logseq.html new file mode 100644 index 0000000..15536d5 --- /dev/null +++ b/docs/book/apps/logseq.html @@ -0,0 +1,227 @@ + + + + + + Logseq Integration - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Logseq Integration

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/apps/mcp-quickguide.html b/docs/book/apps/mcp-quickguide.html new file mode 100644 index 0000000..21b5b85 --- /dev/null +++ b/docs/book/apps/mcp-quickguide.html @@ -0,0 +1,561 @@ + + + + + + MCP Quick Guide - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

MCP Quick Guide

+

Fast-track guide to integrating KOGRAL with Claude Code via the Model Context Protocol (MCP).

+

What is MCP?

+

MCP (Model Context Protocol) is a protocol that allows Claude Code to interact with external tools and data sources. The kogral-mcp server exposes your KOGRAL knowledge base to Claude Code for AI-assisted knowledge management.

+

Quick Setup (5 Minutes)

+

Step 1: Build MCP Server

+
# Build kogral-mcp server
+cargo build --package kb-mcp --release
+
+# Verify binary
+ls -lh target/release/kb-mcp
+
+

Step 2: Configure Claude Code

+

Add to ~/.config/claude/config.json:

+
{
+  "mcpServers": {
+    "kogral-mcp": {
+      "command": "/path/to/knowledge-base/target/release/kb-mcp",
+      "args": ["serve"],
+      "env": {
+        "KOGRAL_DIR": "/path/to/your/project/.kogral"
+      }
+    }
+  }
+}
+
+

Replace /path/to/knowledge-base and /path/to/your/project/.kogral with your actual paths.

+

Step 3: Initialize KOGRAL

+
# Navigate to your project
+cd /path/to/your/project
+
+# Initialize .kb directory
+kb init
+
+

Step 4: Start Claude Code

+
# Start Claude Code (will auto-connect to kb-mcp)
+claude-code
+
+

Step 5: Test Connection

+

In Claude Code, try:

+
Search for "error handling"
+
+

Claude will use the kogral/search tool to query your knowledge base.

+
+

Essential Commands

+

Search Knowledge Base

+

Natural language:

+
Find notes about Rust error handling
+
+

Claude translates to:

+
{
+  "tool": "kogral/search",
+  "params": {
+    "query": "error handling",
+    "type": "note",
+    "semantic": true
+  }
+}
+
+

Add Note

+

Natural language:

+
Add a note about async Rust patterns with tags rust, async, patterns
+
+

Claude translates to:

+
{
+  "tool": "kogral/add_note",
+  "params": {
+    "title": "Async Rust Patterns",
+    "content": "...",
+    "tags": ["rust", "async", "patterns"]
+  }
+}
+
+

Add Decision

+

Natural language:

+
Document decision to use SurrealDB for storage
+
+

Claude translates to:

+
{
+  "tool": "kogral/add_decision",
+  "params": {
+    "title": "Use SurrealDB for Storage",
+    "context": "Need scalable graph database",
+    "decision": "Adopt SurrealDB as primary storage backend",
+    "consequences": ["Better query performance", "Additional infrastructure"]
+  }
+}
+
+

Get Guidelines

+

Natural language:

+
What are our Rust error handling guidelines?
+
+

Claude translates to:

+
{
+  "tool": "kogral/get_guidelines",
+  "params": {
+    "language": "rust",
+    "category": "error-handling"
+  }
+}
+
+ +

Natural language:

+
Link note-async-patterns to decision-use-tokio as implements
+
+

Claude translates to:

+
{
+  "tool": "kogral/link",
+  "params": {
+    "from": "note-async-patterns",
+    "to": "decision-use-tokio",
+    "relation": "implements"
+  }
+}
+
+
+

Common Workflows

+

Capture Meeting Notes

+

You:

+
We just decided in our meeting to migrate from REST to GraphQL.
+Context: current REST API is too chatty, requires multiple round trips.
+Consequences: better client performance, but team needs to learn GraphQL.
+Create a decision record.
+
+

Claude (uses kb/add_decision):

+
Created decision: decision-migrate-to-graphql
+
+Status: proposed
+Context: Current REST API requires multiple round trips (chatty)
+Decision: Migrate from REST to GraphQL API
+Consequences:
+  - ✅ Better client performance
+  - ❌ Team learning curve for GraphQL
+
+ +

You:

+
I'm working on error handling. What related notes and patterns do we have?
+
+

Claude (uses kogral/search with semantic=true):

+
Found 5 related items:
+
+1. **Error Handling with thiserror** (pattern)
+   Tags: rust, error-handling
+   Created: 2026-01-15
+
+2. **Result Type Best Practices** (guideline)
+   Tags: rust, error-handling, best-practices
+   Created: 2026-01-10
+
+3. **Decision: Use anyhow for Application Errors** (decision)
+   Status: accepted
+   Created: 2026-01-08
+
+4. **Custom Error Types** (note)
+   Tags: rust, error-handling
+   Created: 2026-01-05
+
+5. **Error Propagation Patterns** (pattern)
+   Tags: rust, error-handling
+   Created: 2026-01-03
+
+Would you like me to link your current work to any of these?
+
+

Document Implementation

+

You:

+
I just implemented the user authentication module following our security guidelines.
+Add a note and link it to our security guideline.
+
+

Claude (uses kb/add_note + kb/link):

+
Created note: note-user-auth-implementation
+Tags: security, authentication, implementation
+
+Linked:
+  note-user-auth-implementation --[implements]--> guideline-security-practices
+
+Done! Your implementation is now documented and connected to our guidelines.
+
+

Review Project Knowledge

+

You:

+
Summarize our project knowledge: what decisions have we made, what patterns are we using?
+
+

Claude (uses kb/summarize_project prompt):

+
# Project Knowledge Summary
+
+**Total Nodes**: 42
+
+## Recent Decisions (5)
+- Use SurrealDB for Storage (accepted, 2 days ago)
+- Adopt MCP for AI Integration (accepted, 5 days ago)
+- Nickel for Configuration (accepted, 1 week ago)
+
+## Active Patterns (8)
+- Error Handling with thiserror
+- Repository Pattern for DB
+- Builder Pattern for Complex Objects
+- ...
+
+## Top Tags
+1. rust (23 nodes)
+2. architecture (12 nodes)
+3. error-handling (8 nodes)
+4. patterns (7 nodes)
+
+## Guideline Coverage
+- Rust: 5 guidelines
+- Testing: 3 guidelines
+- Security: 2 guidelines
+
+
+

Advanced Usage

+

Conditional Queries

+

You:

+
Find all decisions made in the last week that are still proposed (not accepted)
+
+

Claude (combines kogral/search with filtering):

+
Found 2 proposed decisions from last week:
+
+1. **Migrate to GraphQL** (proposed)
+   Created: 3 days ago
+   Context: REST API is too chatty...
+
+2. **Add Redis Caching** (proposed)
+   Created: 5 days ago
+   Context: Database queries are slow...
+
+Would you like to review these and update their status?
+
+

Cross-Reference Check

+

You:

+
Before I implement X, check if we have any decisions or guidelines about it
+
+

Claude (uses kogral/search + kogral/get_guidelines):

+
Checking existing knowledge about X...
+
+**Decisions**: None found
+**Guidelines**: 1 relevant guideline found
+  - guideline-module-structure: "Keep modules focused and small"
+
+**Related Notes**: 2 notes mention similar topics
+  - note-module-design-patterns
+  - note-separation-of-concerns
+
+Recommendation: Your implementation of X looks aligned with our guidelines.
+Consider linking it to guideline-module-structure when done.
+
+

Export for Sharing

+

You:

+
Export our architectural decisions to Logseq so I can review them visually
+
+

Claude (uses kb/export):

+
Exporting to Logseq format...
+
+✓ Exported 12 decisions to /Users/akasha/logseq-export/
+  - 12 decision records
+  - Preserved wikilinks
+  - Added Logseq properties
+
+You can now open /Users/akasha/logseq-export/ in Logseq to visualize the decision graph.
+
+
+

Tips and Tricks

+

1. Use Natural Language

+

Don't worry about exact tool syntax. Claude understands:

+

Don't say: "Use kb/search with query='rust' and type='pattern'" +✅ Do say: "Find Rust patterns in KOGRAL"

+

2. Be Specific with Tags

+

When adding notes, use consistent tags:

+

Good: tags: rust, error-handling, pattern +❌ Bad: tags: Rust, ErrorHandling, patterns

+ +

After creating notes, ask Claude to link them:

+
Link this note to our error handling guideline as 'implements'
+
+

4. Review Regularly

+

Ask Claude for summaries:

+
What have we documented this week?
+
+ +

For conceptual queries:

+
Find anything related to "making code maintainable"
+
+

Not just keyword "maintainable", but concepts like refactoring, clean code, patterns, etc.

+
+

Troubleshooting

+

"MCP server not responding"

+
# Check kb-mcp is built
+ls target/release/kb-mcp
+
+# Test manually
+echo '{"jsonrpc":"2.0","id":1,"method":"kogral/search","params":{"query":"test"}}' \
+  | target/release/kb-mcp serve
+
+

"KB directory not found"

+
# Verify .kb exists
+ls -la /path/to/project/.kogral
+
+# Initialize if missing
+cd /path/to/project
+kb init
+
+

"Permission denied"

+
# Make binary executable
+chmod +x target/release/kb-mcp
+
+# Check environment variable
+echo $KOGRAL_DIR
+
+

"Empty search results"

+
# Add some test content
+kb add note "Test Note" --content "Test content"
+
+# Try search again in Claude Code
+
+
+

Next Steps

+ +
+

Quick Reference Card

+
+ + + + + + + +
TaskSay to Claude
Search"Find notes about X"
Add note"Add a note about X with tags Y, Z"
Add decision"Document decision to use X for Y"
Get guidelines"What are our X guidelines?"
Link nodes"Link A to B as implements"
Summarize"Summarize project knowledge"
Export"Export to Logseq format"
+
+
+

Remember: Claude Code with MCP turns KOGRAL into an active participant in your development workflow. Ask questions, capture decisions, and let AI help you maintain your project's knowledge graph.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/apps/obsidian.html b/docs/book/apps/obsidian.html new file mode 100644 index 0000000..c79e6fe --- /dev/null +++ b/docs/book/apps/obsidian.html @@ -0,0 +1,227 @@ + + + + + + Obsidian Compatibility - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Obsidian Compatibility

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/architecture/adrs/001-nickel-vs-toml.html b/docs/book/architecture/adrs/001-nickel-vs-toml.html new file mode 100644 index 0000000..de565b1 --- /dev/null +++ b/docs/book/architecture/adrs/001-nickel-vs-toml.html @@ -0,0 +1,508 @@ + + + + + + ADR-001: Nickel vs TOML for Configuration - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

ADR-001: Nickel vs TOML for Configuration

+

Status: Accepted

+

Date: 2026-01-17

+

Deciders: Architecture Team

+

Context: Configuration Strategy for Knowledge Base System

+
+

Context

+

The KOGRAL requires a flexible, type-safe configuration format that supports:

+
    +
  1. Complex nested structures (graph settings, storage configs, embedding providers)
  2. +
  3. Type validation (prevent runtime errors from config mistakes)
  4. +
  5. Composition and inheritance (shared configs, environment-specific overrides)
  6. +
  7. Documentation (self-documenting schemas)
  8. +
  9. Validation before runtime (catch errors early)
  10. +
+

We evaluated two primary options:

+

Option 1: TOML (Traditional Config Format)

+

Pros:

+
    +
  • Widely adopted in Rust ecosystem (Cargo.toml)
  • +
  • Simple, human-readable syntax
  • +
  • Native serde support
  • +
  • IDE support (syntax highlighting, completion)
  • +
+

Cons:

+
    +
  • No type system (validation only at runtime)
  • +
  • Limited composition (no imports, no functions)
  • +
  • No schema validation (errors discovered during execution)
  • +
  • Verbose for complex nested structures
  • +
  • No documentation in config files
  • +
+

Example TOML:

+
[graph]
+name = "my-project"
+version = "1.0.0"
+
+[storage]
+primary = "filesystem"  # String, not validated as enum
+
+[storage.secondary]
+enabled = true
+type = "surrealdb"  # Typo would fail at runtime
+url = "ws://localhost:8000"
+
+[embeddings]
+enabled = true
+provider = "openai"  # No validation of valid providers
+model = "text-embedding-3-small"
+
+

Problems:

+
    +
  • Typos in enum values ("surrealdb" vs "surealdb") fail at runtime
  • +
  • No validation that provider = "openai" requires api_key_env
  • +
  • No documentation of valid options
  • +
  • No way to compose configs (e.g., base config + environment override)
  • +
+

Option 2: Nickel (Functional Configuration Language)

+

Pros:

+
    +
  • Type system with contracts (validate before runtime)
  • +
  • Composition via imports and merging
  • +
  • Documentation in schemas (self-documenting)
  • +
  • Validation at export time (catch errors early)
  • +
  • Functions for conditional logic
  • +
  • Default values in schema definitions
  • +
+

Cons:

+
    +
  • Less familiar to Rust developers
  • +
  • Requires separate nickel CLI tool
  • +
  • Smaller ecosystem
  • +
  • Steeper learning curve
  • +
+

Example Nickel:

+
# schemas/kb-config.ncl
+{
+  KbConfig = {
+    graph | GraphConfig,
+    storage | StorageConfig,
+    embeddings | EmbeddingConfig,
+  },
+
+  StorageConfig = {
+    primary | [| 'filesystem, 'memory |],  # Enum validated at export
+
+    secondary | {
+      enabled | Bool,
+      type | [| 'surrealdb, 'sqlite |],  # Typos caught immediately
+      url | String,
+    } | optional,
+  },
+
+  EmbeddingConfig = {
+    enabled | Bool,
+    provider | [| 'openai, 'claude, 'fastembed |],  # Valid providers enforced
+    model | String,
+    api_key_env | String | doc "Environment variable for API key",
+  },
+}
+
+

Benefits:

+
    +
  • Typos in enum values caught at nickel export time
  • +
  • Schema enforces required fields based on provider
  • +
  • Documentation embedded in schema
  • +
  • Config can be composed: import "base.ncl" & { /* overrides */ }
  • +
+
+

Decision

+

We will use Nickel for configuration.

+

Implementation:

+
    +
  1. Define schemas in schemas/*.ncl with type contracts
  2. +
  3. Users write configs in .kogral/config.ncl
  4. +
  5. Export to JSON via CLI: nickel export --format json config.ncl
  6. +
  7. Load JSON in Rust via serde_json into typed structs
  8. +
+

Pattern (double validation):

+
Nickel Config (.ncl)
+    ↓ [nickel export]
+JSON (validated by Nickel contracts)
+    ↓ [serde_json::from_str]
+Rust Struct (validated by serde)
+    ↓
+Runtime (guaranteed valid config)
+
+

Bridge Code (kb-core/src/config/nickel.rs):

+
#![allow(unused)]
+fn main() {
+pub fn load_config<P: AsRef<Path>>(path: P) -> Result<KbConfig> {
+    // Export Nickel to JSON
+    let json = export_nickel_to_json(path)?;
+
+    // Deserialize to Rust struct
+    let config: KbConfig = serde_json::from_str(&json)?;
+
+    Ok(config)
+}
+
+fn export_nickel_to_json<P: AsRef<Path>>(path: P) -> Result<String> {
+    let output = Command::new("nickel")
+        .arg("export")
+        .arg("--format").arg("json")
+        .arg(path.as_ref())
+        .output()?;
+
+    Ok(String::from_utf8(output.stdout)?)
+}
+}
+
+

Consequences

+

Positive

+

Type Safety: Config errors caught before runtime

+
    +
  • Invalid enum values fail at export: 'filesystm → error
  • +
  • Missing required fields detected: no graph.name → error
  • +
  • Type mismatches prevented: enabled = "yes" → error (expects Bool)
  • +
+

Self-Documenting: Schemas serve as documentation

+
    +
  • | doc "Environment variable for API key" describes fields
  • +
  • Enum options visible in schema: [| 'openai, 'claude, 'fastembed |]
  • +
  • Default values explicit: | default = 'filesystem
  • +
+

Composition: Config reuse and overrides

+
# base.ncl
+{ graph = { version = "1.0.0" } }
+
+# project.ncl
+import "base.ncl" & { graph = { name = "my-project" } }
+
+

Validation Before Deployment: Catch errors in CI

+
# CI pipeline
+nickel typecheck config.ncl
+nickel export --format json config.ncl > /dev/null
+
+

Conditional Logic: Environment-specific configs

+
let is_prod = std.string.is_match "prod" (std.env.get "ENV") in
+{
+  embeddings = {
+    provider = if is_prod then 'openai else 'fastembed,
+  },
+}
+
+

Negative

+

Learning Curve: Team must learn Nickel syntax

+
    +
  • Mitigation: Provide comprehensive examples in config/ directory
  • +
  • Mitigation: Document common patterns in docs/config/
  • +
+

Tool Dependency: Requires nickel CLI installed

+
    +
  • Mitigation: Document installation in setup guide
  • +
  • Mitigation: Check nickel availability in kb init command
  • +
+

IDE Support: Limited compared to TOML

+
    +
  • Mitigation: Use LSP (nickel-lang-lsp) for VSCode/Neovim
  • +
  • Mitigation: Syntax highlighting available for major editors
  • +
+

Ecosystem Size: Smaller than TOML

+
    +
  • Mitigation: Nickel actively developed by Tweag
  • +
  • Mitigation: Stable language specification (v1.0+)
  • +
+

Neutral

+

Two-Stage Loading: Nickel → JSON → Rust

+
    +
  • Not a performance concern (config loaded once at startup)
  • +
  • Adds resilience (double validation)
  • +
  • Allows runtime config inspection (read JSON directly)
  • +
+
+

Alternatives Considered

+

JSON Schema

+

Rejected: Not ergonomic for humans to write

+
    +
  • No comments
  • +
  • Verbose syntax ({"key": "value"} vs key = value)
  • +
  • JSON Schema separate from config (duplication)
  • +
+

YAML

+

Rejected: No type system, ambiguous parsing

+
    +
  • Boolean confusion: yes/no/on/off/true/false
  • +
  • Indentation-sensitive (error-prone)
  • +
  • No validation without external tools
  • +
+

Dhall

+

Rejected: More complex than needed

+
    +
  • Turing-incomplete by design (limits use cases)
  • +
  • Smaller ecosystem than Nickel
  • +
  • Steeper learning curve
  • +
+

KCL (KusionStack Configuration Language)

+

Rejected: Kubernetes-focused, less general-purpose

+
    +
  • Designed for K8s manifests
  • +
  • Less mature than Nickel for general config
  • +
+
+

Implementation Timeline

+
    +
  1. ✅ Define base schemas (schemas/kb-config.ncl)
  2. +
  3. ✅ Implement Nickel loader (kb-core/src/config/nickel.rs)
  4. +
  5. ✅ Create example configs (config/defaults.ncl, config/production.ncl)
  6. +
  7. ✅ Document Nickel usage (docs/config/nickel-schemas.md)
  8. +
  9. ⏳ Add LSP recommendations to setup guide
  10. +
  11. ⏳ Create Nickel → TOML migration tool (for existing users)
  12. +
+
+

Monitoring

+

Success Criteria:

+
    +
  • Config errors caught at export time (not runtime)
  • +
  • Users can compose configs for different environments
  • +
  • Team comfortable with Nickel syntax within 2 weeks
  • +
+

Metrics:

+
    +
  • Number of config validation errors caught before runtime
  • +
  • Time to diagnose config issues (should decrease)
  • +
  • User feedback on config complexity
  • +
+
+

References

+ +
+

Revision History

+
+ +
DateAuthorChange
2026-01-17Architecture TeamInitial decision
+
+
+

Next ADR: ADR-002: FastEmbed via AI Providers

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/architecture/adrs/002-fastembed-ai-providers.html b/docs/book/architecture/adrs/002-fastembed-ai-providers.html new file mode 100644 index 0000000..906eb76 --- /dev/null +++ b/docs/book/architecture/adrs/002-fastembed-ai-providers.html @@ -0,0 +1,566 @@ + + + + + + ADR-002: FastEmbed via AI Providers - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

ADR-002: FastEmbed via AI Providers for Embeddings

+

Status: Accepted

+

Date: 2026-01-17

+

Deciders: Architecture Team

+

Context: Embedding Strategy for Semantic Search

+
+

Context

+

The KOGRAL requires embedding generation for semantic search capabilities. Embeddings convert text into numerical vectors that capture semantic meaning, enabling "find concepts" rather than just "find keywords".

+

Requirements:

+
    +
  1. Local-First Option: Must work offline without external API dependencies
  2. +
  3. Production Scalability: Support cloud AI providers for large-scale deployments
  4. +
  5. Multiple Providers: Flexibility to choose based on cost, quality, privacy
  6. +
  7. Cost-Effective Development: Free local embeddings for development and testing
  8. +
  9. Quality: Good enough embeddings for finding related concepts
  10. +
+

Options Evaluated:

+

Option 1: Only Local Embeddings (fastembed)

+

Pros:

+
    +
  • No API costs
  • +
  • Works offline
  • +
  • Privacy-preserving (no data leaves machine)
  • +
  • Fast (local GPU acceleration possible)
  • +
+

Cons:

+
    +
  • Limited model quality compared to cloud providers
  • +
  • Resource-intensive (requires download ~100MB models)
  • +
  • Single provider lock-in (fastembed library)
  • +
+

Example:

+
#![allow(unused)]
+fn main() {
+use fastembed::{TextEmbedding, InitOptions};
+
+let model = TextEmbedding::try_new(InitOptions {
+    model_name: "BAAI/bge-small-en-v1.5",
+    ..Default::default()
+})?;
+
+let embeddings = model.embed(vec!["Hello world"], None)?;
+// Output: Vec<Vec<f32>> with 384 dimensions
+}
+

Option 2: Only Cloud AI Providers (OpenAI, Claude, etc.)

+

Pros:

+
    +
  • State-of-the-art embedding quality
  • +
  • No local resource usage
  • +
  • Latest models available
  • +
  • Scalable to millions of documents
  • +
+

Cons:

+
    +
  • Requires API keys (cost per embedding)
  • +
  • Network dependency (no offline mode)
  • +
  • Privacy concerns (data sent to third parties)
  • +
  • Vendor lock-in risk
  • +
+

Example:

+
#![allow(unused)]
+fn main() {
+use rig::providers::openai;
+
+let client = openai::Client::new("sk-...");
+let embeddings = client.embeddings("text-embedding-3-small")
+    .embed_documents(vec!["Hello world"]).await?;
+// Output: Vec<Vec<f32>> with 1536 dimensions
+}
+

Option 3: Hybrid Strategy (fastembed + AI providers via rig-core)

+

Pros:

+
    +
  • ✅ Best of both worlds: local dev, cloud production
  • +
  • ✅ User choice: privacy-first or quality-first
  • +
  • ✅ Cost flexibility: free for small projects, paid for scale
  • +
  • ✅ Unified interface via rig-core library
  • +
  • ✅ Easy provider switching (config-driven)
  • +
+

Cons:

+
    +
  • ❌ More complex implementation (multiple providers)
  • +
  • ❌ Dimension mismatch between providers (384 vs 1536)
  • +
  • ❌ Additional dependencies (rig-core, fastembed)
  • +
+
+

Decision

+

We will use a hybrid strategy: fastembed (local) + AI providers (via rig-core).

+

Implementation:

+
    +
  1. Default: fastembed with BAAI/bge-small-en-v1.5 (384 dimensions)
  2. +
  3. Optional: OpenAI, Claude, Ollama via rig-core (configurable)
  4. +
  5. Interface: EmbeddingProvider trait abstracts provider details
  6. +
  7. Config-Driven: Provider selection via Nickel configuration
  8. +
+

Architecture:

+
#![allow(unused)]
+fn main() {
+#[async_trait]
+pub trait EmbeddingProvider: Send + Sync {
+    async fn embed(&self, texts: Vec<String>) -> Result<Vec<Vec<f32>>>;
+    fn dimensions(&self) -> usize;
+    fn model_name(&self) -> &str;
+}
+
+// Local implementation
+pub struct FastEmbedProvider {
+    model: TextEmbedding,
+}
+
+impl FastEmbedProvider {
+    pub fn new(model_name: &str) -> Result<Self> {
+        let model = TextEmbedding::try_new(InitOptions {
+            model_name: model_name.into(),
+            ..Default::default()
+        })?;
+        Ok(Self { model })
+    }
+}
+
+#[async_trait]
+impl EmbeddingProvider for FastEmbedProvider {
+    async fn embed(&self, texts: Vec<String>) -> Result<Vec<Vec<f32>>> {
+        Ok(self.model.embed(texts, None)?)
+    }
+
+    fn dimensions(&self) -> usize { 384 }
+    fn model_name(&self) -> &str { "BAAI/bge-small-en-v1.5" }
+}
+
+// Cloud provider implementation (via rig-core)
+pub struct RigEmbeddingProvider {
+    client: rig::Client,
+    model: String,
+    dimensions: usize,
+}
+
+#[async_trait]
+impl EmbeddingProvider for RigEmbeddingProvider {
+    async fn embed(&self, texts: Vec<String>) -> Result<Vec<Vec<f32>>> {
+        let embeddings = self.client
+            .embeddings(&self.model)
+            .embed_documents(texts)
+            .await?;
+        Ok(embeddings)
+    }
+
+    fn dimensions(&self) -> usize { self.dimensions }
+    fn model_name(&self) -> &str { &self.model }
+}
+}
+

Configuration (Nickel):

+
# Local development (default)
+{
+  embeddings = {
+    enabled = true,
+    provider = 'fastembed,
+    model = "BAAI/bge-small-en-v1.5",
+    dimensions = 384,
+  },
+}
+
+# Production with OpenAI
+{
+  embeddings = {
+    enabled = true,
+    provider = 'openai,
+    model = "text-embedding-3-small",
+    dimensions = 1536,
+    api_key_env = "OPENAI_API_KEY",
+  },
+}
+
+# Self-hosted with Ollama
+{
+  embeddings = {
+    enabled = true,
+    provider = 'ollama,
+    model = "nomic-embed-text",
+    dimensions = 768,
+  },
+}
+
+

Provider Selection (kb-core/src/embeddings/mod.rs):

+
#![allow(unused)]
+fn main() {
+pub fn create_provider(config: &EmbeddingConfig) -> Result<Box<dyn EmbeddingProvider>> {
+    match config.provider {
+        EmbeddingProviderType::FastEmbed => {
+            Ok(Box::new(FastEmbedProvider::new(&config.model)?))
+        }
+        EmbeddingProviderType::OpenAI => {
+            let api_key = std::env::var(&config.api_key_env)?;
+            Ok(Box::new(RigEmbeddingProvider::new_openai(api_key, &config.model)?))
+        }
+        EmbeddingProviderType::Claude => {
+            let api_key = std::env::var(&config.api_key_env)?;
+            Ok(Box::new(RigEmbeddingProvider::new_claude(api_key, &config.model)?))
+        }
+        EmbeddingProviderType::Ollama => {
+            Ok(Box::new(RigEmbeddingProvider::new_ollama(&config.model)?))
+        }
+    }
+}
+}
+
+

Consequences

+

Positive

+

Development Flexibility:

+
    +
  • Developers can use fastembed without API keys
  • +
  • Fast feedback loop (local embeddings, no network calls)
  • +
  • Works offline (train trips, flights)
  • +
+

Production Quality:

+
    +
  • Production deployments can use OpenAI/Claude for better quality
  • +
  • Latest embedding models available
  • +
  • Scalable to millions of documents
  • +
+

Privacy Control:

+
    +
  • Privacy-sensitive projects use local embeddings
  • +
  • Public projects can use cloud providers
  • +
  • User choice via configuration
  • +
+

Cost Optimization:

+
    +
  • Small projects: free (fastembed)
  • +
  • Large projects: pay for quality (cloud providers)
  • +
  • Hybrid: important docs via cloud, bulk via local
  • +
+

Unified Interface:

+
    +
  • EmbeddingProvider trait abstracts provider details
  • +
  • Query code doesn't know/care about provider
  • +
  • Easy to add new providers
  • +
+

Negative

+

Dimension Mismatch:

+
    +
  • fastembed: 384 dimensions
  • +
  • OpenAI: 1536 dimensions
  • +
  • Cannot mix in same index
  • +
+

Mitigation:

+
    +
  • Store provider + dimensions in node metadata
  • +
  • Rebuild index when changing providers
  • +
  • Document dimension constraints
  • +
+

Model Download:

+
    +
  • First use of fastembed downloads ~100MB model
  • +
  • Slow initial startup
  • +
+

Mitigation:

+
    +
  • Pre-download in Docker images
  • +
  • Document model download in setup guide
  • +
  • Cache models in ~/.cache/fastembed
  • +
+

Complex Configuration:

+
    +
  • Multiple provider options may confuse users
  • +
+

Mitigation:

+
    +
  • Sane default (fastembed)
  • +
  • Clear examples for each provider
  • +
  • Validation errors explain misconfigurations
  • +
+

Neutral

+

Dependency Trade-off:

+
    +
  • fastembed adds ~5MB to binary
  • +
  • rig-core adds ~2MB
  • +
  • Total: ~7MB overhead
  • +
+

Not a concern for CLI/MCP server use case.

+
+

Provider Comparison

+
+ + + + +
ProviderDimensionsQualityCostPrivacyOffline
fastembed384GoodFree✅ Local✅ Yes
OpenAI1536Excellent$0.0001/1K❌ Cloud❌ No
Claude1024Excellent$0.00025/1K❌ Cloud❌ No
Ollama768Very GoodFree✅ Local✅ Yes
+
+

Recommendation by Use Case:

+
    +
  • Development: fastembed (fast, free, offline)
  • +
  • Small Teams: fastembed or Ollama (privacy, no costs)
  • +
  • Enterprise: OpenAI or Claude (best quality, scalable)
  • +
  • Self-Hosted: Ollama (good quality, local control)
  • +
+
+

Implementation Timeline

+
    +
  1. ✅ Define EmbeddingProvider trait
  2. +
  3. ✅ Implement FastEmbedProvider (stub, feature-gated)
  4. +
  5. ✅ Implement RigEmbeddingProvider (stub, feature-gated)
  6. +
  7. ⏳ Complete FastEmbed integration with model download
  8. +
  9. ⏳ Complete rig-core integration (OpenAI, Claude, Ollama)
  10. +
  11. ⏳ Add query engine with similarity search
  12. +
  13. ⏳ Document provider selection and trade-offs
  14. +
+
+

Monitoring

+

Success Criteria:

+
    +
  • Users can switch providers via config change
  • +
  • Local embeddings work without API keys
  • +
  • Production deployments use cloud providers successfully
  • +
  • Query quality acceptable for both local and cloud embeddings
  • +
+

Metrics:

+
    +
  • Embedding generation latency (local vs cloud)
  • +
  • Query accuracy (precision@10 for semantic search)
  • +
  • API costs (cloud providers)
  • +
  • User satisfaction (feedback on search quality)
  • +
+
+

References

+ +
+

Revision History

+
+ +
DateAuthorChange
2026-01-17Architecture TeamInitial decision
+
+
+

Previous ADR: ADR-001: Nickel vs TOML +Next ADR: ADR-003: Hybrid Storage Strategy

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/architecture/adrs/003-hybrid-storage.html b/docs/book/architecture/adrs/003-hybrid-storage.html new file mode 100644 index 0000000..71f7604 --- /dev/null +++ b/docs/book/architecture/adrs/003-hybrid-storage.html @@ -0,0 +1,629 @@ + + + + + + ADR-003: Hybrid Storage Strategy - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

ADR-003: Hybrid Storage Strategy

+

Status: Accepted

+

Date: 2026-01-17

+

Deciders: Architecture Team

+

Context: Storage Backend Strategy for Knowledge Base

+
+

Context

+

The KOGRAL needs to store knowledge graphs with these requirements:

+
    +
  1. Git-Friendly: Knowledge should version alongside code
  2. +
  3. Scalable: Support small projects (10s of nodes) to large organizations (10,000+ nodes)
  4. +
  5. Queryable: Efficient graph queries and relationship traversal
  6. +
  7. Offline-Capable: Work without network access
  8. +
  9. Collaborative: Support shared organizational knowledge
  10. +
  11. Cost-Effective: Free for small projects, reasonable cost at scale
  12. +
+

Constraints:

+
    +
  • Developers want to edit knowledge in text editors
  • +
  • Organizations want centralized guideline management
  • +
  • Git workflows essential for code-adjacent knowledge
  • +
  • Large graphs need database performance
  • +
+

Option 1: Filesystem Only

+

Approach: Store everything as markdown files

+

Pros:

+
    +
  • ✅ Git-native (perfect for versioning)
  • +
  • ✅ Text editor friendly
  • +
  • ✅ No dependencies
  • +
  • ✅ Works offline
  • +
  • ✅ Free
  • +
+

Cons:

+
    +
  • ❌ Poor performance for large graphs (100 0+ nodes)
  • +
  • ❌ No efficient graph queries
  • +
  • ❌ Difficult to share across projects
  • +
  • ❌ Manual sync for collaboration
  • +
+

Scalability: Good for < 100 nodes, poor beyond

+

Option 2: Database Only (SurrealDB)

+

Approach: Store all knowledge in SurrealDB graph database

+

Pros:

+
    +
  • ✅ Excellent query performance
  • +
  • ✅ Native graph relationships
  • +
  • ✅ Scalable to millions of nodes
  • +
  • ✅ Centralized for collaboration
  • +
+

Cons:

+
    +
  • ❌ Not git-trackable
  • +
  • ❌ Requires running database server
  • +
  • ❌ Can't edit with text editor
  • +
  • ❌ Network dependency
  • +
  • ❌ Infrastructure cost
  • +
+

Scalability: Excellent, but loses developer workflow benefits

+

Option 3: Hybrid (Filesystem + SurrealDB)

+

Approach: Filesystem for local project knowledge, SurrealDB for shared organizational knowledge

+

Pros:

+
    +
  • ✅ Git-friendly for project knowledge
  • +
  • ✅ Text editor friendly
  • +
  • ✅ Scalable for shared knowledge
  • +
  • ✅ Works offline (local graph)
  • +
  • ✅ Collaborative (shared graph)
  • +
  • ✅ Cost-effective (DB only for shared)
  • +
+

Cons:

+
    +
  • ❌ More complex implementation
  • +
  • ❌ Sync mechanism needed
  • +
  • ❌ Two storage systems to manage
  • +
+

Scalability: Excellent - best of both worlds

+
+

Decision

+

We will use a hybrid storage strategy: Filesystem (local) + SurrealDB (shared).

+

Architecture:

+
┌─────────────────────────────────────────────────────────────┐
+│                    Project A (.kogral/)                          │
+│  Storage: Filesystem (git-tracked)                          │
+│  Scope: Project-specific notes, decisions, patterns         │
+│  Access: Local only                                         │
+└──────────────────┬──────────────────────────────────────────┘
+                   │
+                   │ [inherits]
+                   ↓
+┌─────────────────────────────────────────────────────────────┐
+│           Shared KB (SurrealDB or synced filesystem)         │
+│  Storage: SurrealDB (scalable) or filesystem (synced)       │
+│  Scope: Organization-wide guidelines, patterns              │
+│  Access: All projects                                       │
+└─────────────────────────────────────────────────────────────┘
+
+

Implementation:

+
# Project config
+{
+  storage = {
+    primary = 'filesystem,  # Local project knowledge
+    secondary = {
+      enabled = true,
+      type = 'surrealdb,   # Shared knowledge
+      url = "ws://kb-central.company.com:8000",
+      namespace = "organization",
+      database = "shared-kb",
+    },
+  },
+
+  inheritance = {
+    base = "surrealdb://organization/shared-kb",  # Inherit from shared
+    priority = 100,  # Project overrides shared
+  },
+}
+
+

Sync Strategy:

+
.kogral/ (Filesystem)
+    ↓ [on save]
+Watch for changes
+    ↓ [debounced]
+Sync to SurrealDB
+    ↓
+Shared graph updated
+    ↓ [on query]
+Merge local + shared results
+
+
+

Consequences

+

Positive

+

Developer Workflow Preserved:

+
# Local knowledge workflow (unchanged)
+vim .kogral/notes/my-note.md
+git add .kogral/notes/my-note.md
+git commit -m "Add implementation note"
+git push
+
+

Git Integration:

+
    +
  • Project knowledge versioned with code
  • +
  • Branches include relevant knowledge
  • +
  • Merges resolve knowledge conflicts
  • +
  • PR reviews include knowledge changes
  • +
+

Offline Development:

+
    +
  • Full functionality without network
  • +
  • Shared guidelines cached locally
  • +
  • Sync when reconnected
  • +
+

Scalability:

+
    +
  • Projects: filesystem (100s of nodes, fine performance)
  • +
  • Organization: SurrealDB (10,000+ nodes, excellent performance)
  • +
+

Collaboration:

+
    +
  • Shared guidelines accessible to all projects
  • +
  • Updates to shared knowledge propagate automatically
  • +
  • Consistent practices across organization
  • +
+

Cost-Effective:

+
    +
  • Small projects: free (filesystem only)
  • +
  • Organizations: SurrealDB for shared only (not all project knowledge)
  • +
+

Gradual Adoption:

+
    +
  • Start with filesystem only
  • +
  • Add SurrealDB when needed
  • +
  • Feature-gated (--features surrealdb)
  • +
+

Negative

+

Complexity:

+
    +
  • Two storage implementations
  • +
  • Sync mechanism required
  • +
  • Conflict resolution needed
  • +
+

Mitigation:

+
    +
  • Storage trait abstracts differences
  • +
  • Sync is optional (can disable)
  • +
  • Conflicts rare (guidelines change infrequently)
  • +
+

Sync Latency:

+
    +
  • Changes to shared KB not instant in all projects
  • +
+

Mitigation:

+
    +
  • Acceptable latency (guidelines don't change rapidly)
  • +
  • Manual sync command available (kb sync)
  • +
  • Auto-sync on query (fetch latest)
  • +
+

Infrastructure Requirement:

+
    +
  • SurrealDB server needed for shared KB
  • +
+

Mitigation:

+
    +
  • Optional (can use synced filesystem instead)
  • +
  • Docker Compose for easy setup
  • +
  • Managed SurrealDB Cloud option
  • +
+

Neutral

+

Storage Trait Implementation:

+
#![allow(unused)]
+fn main() {
+#[async_trait]
+pub trait Storage {
+    async fn save_graph(&self, graph: &Graph) -> Result<()>;
+    async fn load_graph(&self, name: &str) -> Result<Graph>;
+    async fn list_graphs(&self) -> Result<Vec<String>>;
+}
+
+// Three implementations
+impl Storage for FilesystemStorage { /* ... */ }
+impl Storage for SurrealDbStorage { /* ... */ }
+impl Storage for MemoryStorage { /* ... */ }
+}
+

Abstraction makes multi-backend manageable.

+
+

Use Cases

+

Small Project (Solo Developer)

+

Config:

+
{ storage = { primary = 'filesystem } }
+
+

Behavior:

+
    +
  • All knowledge in .kogral/ directory
  • +
  • Git-tracked with code
  • +
  • No database required
  • +
  • Works offline
  • +
+

Medium Project (Team)

+

Config:

+
{
+  storage = {
+    primary = 'filesystem,
+    secondary = {
+      enabled = true,
+      type = 'surrealdb,
+      url = "ws://team-kb.local:8000",
+    },
+  },
+}
+
+

Behavior:

+
    +
  • Project knowledge in .kogral/ (git-tracked)
  • +
  • Shared team patterns in SurrealDB
  • +
  • Automatic sync
  • +
  • Offline fallback to cached
  • +
+

Large Organization

+

Config:

+
{
+  storage = {
+    primary = 'filesystem,
+    secondary = {
+      enabled = true,
+      type = 'surrealdb,
+      url = "ws://kb.company.com:8000",
+      namespace = "engineering",
+      database = "shared-kb",
+    },
+  },
+
+  inheritance = {
+    base = "surrealdb://engineering/shared-kb",
+    guidelines = [
+      "surrealdb://engineering/rust-guidelines",
+      "surrealdb://engineering/security-policies",
+    ],
+  },
+}
+
+

Behavior:

+
    +
  • Project-specific in .kogral/
  • +
  • Organization guidelines in SurrealDB
  • +
  • Security policies enforced
  • +
  • Automatic guideline updates
  • +
+
+

Sync Mechanism

+

Filesystem → SurrealDB

+

Trigger: File changes detected (via notify crate)

+

Process:

+
    +
  1. Parse changed markdown file
  2. +
  3. Convert to Node struct
  4. +
  5. Upsert to SurrealDB
  6. +
  7. Update relationships
  8. +
+

Debouncing: 500ms (configurable)

+

SurrealDB → Filesystem

+

Trigger: Query for shared knowledge

+

Process:

+
    +
  1. Query SurrealDB for shared nodes
  2. +
  3. Cache locally (in-memory or filesystem)
  4. +
  5. Merge with local results
  6. +
  7. Return combined
  8. +
+

Caching: TTL-based (5 minutes default)

+

Conflict Resolution

+

Strategy: Last-write-wins with version tracking

+

Example:

+
Project A: Updates shared guideline (v1 → v2)
+Project B: Has cached v1
+
+On Project B query:
+  - Detects v2 available
+  - Fetches v2
+  - Updates cache
+  - Uses v2 going forward
+
+
+

Alternatives Considered

+

Git Submodules for Shared Knowledge

+

Rejected: Cumbersome workflow

+
    +
  • Requires manual submodule update
  • +
  • Merge conflicts in shared submodule
  • +
  • Not discoverable (need to know submodule exists)
  • +
+

Syncthing for Filesystem Sync

+

Rejected: Not designed for this use case

+
    +
  • No query optimization
  • +
  • No relationship indexes
  • +
  • Sync conflicts difficult to resolve
  • +
+

PostgreSQL with JSON

+

Rejected: Not a graph database

+
    +
  • Poor graph query performance
  • +
  • Relationship traversal requires complex SQL joins
  • +
  • No native graph features
  • +
+
+

Migration Path

+

Phase 1: Filesystem Only (Current)

+
    +
  • All storage via filesystem
  • +
  • Git-tracked
  • +
  • No database required
  • +
+

Phase 2: Optional SurrealDB

+
    +
  • Add SurrealDB support (feature-gated)
  • +
  • Manual sync command
  • +
  • Shared KB opt-in
  • +
+

Phase 3: Automatic Sync

+
    +
  • File watching
  • +
  • Auto-sync on changes
  • +
  • Background sync
  • +
+

Phase 4: Multi-Tenant SurrealDB

+
    +
  • Organization namespaces
  • +
  • Access control
  • +
  • Audit logs
  • +
+
+

Monitoring

+

Success Criteria:

+
    +
  • Developers don't notice hybrid complexity
  • +
  • Sync completes < 1 second for typical changes
  • +
  • Shared guidelines accessible in < 100ms
  • +
  • Zero data loss in sync
  • +
+

Metrics:

+
    +
  • Sync latency (P50, P95, P99)
  • +
  • Cache hit rate (shared knowledge)
  • +
  • Conflict rate (expect < 0.1%)
  • +
  • User satisfaction
  • +
+
+

References

+ +
+

Revision History

+
+ +
DateAuthorChange
2026-01-17Architecture TeamInitial decision
+
+
+

Previous ADR: ADR-002: FastEmbed via AI Providers +Next ADR: ADR-004: Logseq Compatibility

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/architecture/adrs/004-logseq-blocks-support.html b/docs/book/architecture/adrs/004-logseq-blocks-support.html new file mode 100644 index 0000000..1fd7f29 --- /dev/null +++ b/docs/book/architecture/adrs/004-logseq-blocks-support.html @@ -0,0 +1,391 @@ + + + + + + ADR-004: Logseq Blocks Support - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

ADR-004: Logseq Blocks Support

+

Status

+

Proposed (Design phase)

+

Context

+

Logseq uses content blocks as the fundamental unit of information, not full documents. KB currently treats Node.content as flat markdown string, which loses block-level features on import/export:

+

Lost features:

+
    +
  • Block properties (#card, TODO, custom properties)
  • +
  • Block hierarchy (outliner nesting)
  • +
  • Block references (((block-uuid)))
  • +
  • Block-level queries (find all flashcards, TODOs)
  • +
+

User requirement: Round-trip Logseq import/export with full fidelity:

+
Logseq → KOGRAL Import → KOGRAL Storage → KOGRAL Export → Logseq
+  (blocks preserved at every step)
+
+

Decision

+

Implement Hybrid Block Support (structured + markdown):

+

1. Add Block Data Structure

+
#![allow(unused)]
+fn main() {
+pub struct Block {
+    pub id: String,                   // UUID
+    pub content: String,              // Block text
+    pub properties: BlockProperties,  // Tags, status, custom
+    pub children: Vec<Block>,         // Nested blocks
+    // ... timestamps ...
+}
+
+pub struct BlockProperties {
+    pub tags: Vec<String>,            // #card, #important
+    pub status: Option<TaskStatus>,   // TODO, DONE, etc.
+    pub custom: HashMap<String, String>, // property:: value
+    pub block_refs: Vec<String>,      // ((uuid))
+    pub page_refs: Vec<String>,       // [[page]]
+}
+}
+

2. Extend Node Model

+
#![allow(unused)]
+fn main() {
+pub struct Node {
+    // ... existing fields ...
+    pub content: String,              // Source of truth (markdown)
+    pub blocks: Option<Vec<Block>>,   // Cached structure (optional)
+}
+}
+

3. Bidirectional Parser

+
    +
  • Parse: Markdown → Vec<Block> (lazy, on-demand)
  • +
  • Serialize: Vec<Block> → Markdown (for export)
  • +
+

4. Storage Strategy

+

Filesystem (git-friendly, Logseq-compatible):

+
- Block 1 #card
+  - Nested answer
+- TODO Block 2
+  priority:: high
+
+

SurrealDB (queryable):

+
DEFINE TABLE block;
+DEFINE FIELD node_id ON block TYPE record(node);
+DEFINE FIELD block_id ON block TYPE string;
+DEFINE FIELD properties ON block TYPE object;
+DEFINE INDEX block_tags ON block COLUMNS properties.tags;
+
+

5. Query Extensions

+
#![allow(unused)]
+fn main() {
+// Find all flashcards
+graph.find_blocks_by_tag("card")
+
+// Find all TODOs
+graph.find_all_todos()
+
+// Find blocks with custom property
+node.find_blocks_by_property("priority", "high")
+}
+

Consequences

+

Positive

+

Full Logseq Compatibility - Import/export preserves all block features +✅ Queryable Blocks - Find #card, TODO, custom properties across KOGRAL +✅ Backward Compatible - Existing nodes without blocks still work +✅ Type-Safe - Structured data instead of regex parsing everywhere +✅ Extensible - Custom block properties supported +✅ Hierarchy Preserved - Nested blocks maintain parent-child relationships

+

Negative

+

⚠️ Added Complexity - New data structures, parser, sync logic +⚠️ Dual Representation - Must keep content and blocks in sync +⚠️ Storage Overhead - SurrealDB stores both markdown and structure +⚠️ Migration Required - Existing data needs parsing to populate blocks

+

Neutral

+

⚙️ Lazy Parsing - Blocks parsed on-demand (not stored by default) +⚙️ Opt-In - Config flag blocks.enabled to activate features +⚙️ Gradual Adoption - Can implement in phases

+

Implementation Phases

+

Phase 1: Foundation (No behavior change)

+
    +
  • Add Block struct to models/block.rs
  • +
  • Add optional blocks field to Node
  • +
  • Add config: blocks.enabled = false (default off)
  • +
+

Phase 2: Parser

+
    +
  • Implement BlockParser::parse() (markdown → blocks)
  • +
  • Implement BlockParser::serialize() (blocks → markdown)
  • +
  • Add Node::get_blocks() method (lazy parsing)
  • +
+

Phase 3: Logseq Integration

+
    +
  • Update LogseqImporter to parse blocks
  • +
  • Update LogseqExporter to serialize blocks
  • +
  • Test round-trip (Logseq → KB → Logseq)
  • +
+

Phase 4: Query API

+
    +
  • Add Graph::find_blocks_by_tag()
  • +
  • Add Graph::find_all_todos()
  • +
  • Add Node::find_blocks_by_property()
  • +
+

Phase 5: MCP/CLI Integration

+
    +
  • Add kb/find_blocks MCP tool
  • +
  • Add kb find-cards CLI command
  • +
  • Add kb find-todos CLI command
  • +
+

Phase 6: SurrealDB Backend

+
    +
  • Create block table schema
  • +
  • Index on tags, status, properties
  • +
  • Store blocks alongside nodes
  • +
+

Alternatives Considered

+

Alternative 1: Blocks as First-Class Nodes

+

Convert each Logseq block to a separate KOGRAL Node.

+

Rejected: Too granular, explosion of nodes, loses document context.

+

Alternative 2: Parser-Only (No Storage)

+

Keep content: String, parse blocks on every access.

+

Rejected: Can't query blocks in database, parse overhead, can't index.

+

Alternative 3: Metadata Field

+

Store blocks in metadata: HashMap<String, Value>.

+

Rejected: Not type-safe, harder to query, no schema validation.

+

References

+ +

Notes

+

Backward Compatibility Strategy:

+
    +
  • content remains source of truth
  • +
  • blocks is optional enhancement
  • +
  • Old code works unchanged
  • +
  • New features opt-in via config
  • +
+

Migration Path:

+
    +
  • Existing users: blocks disabled by default
  • +
  • New users: blocks enabled, parsed on import
  • +
  • Manual: kb reindex --parse-blocks to populate
  • +
+
+

Decision Date: 2026-01-17 +Approvers: TBD +Review Date: After Phase 2 implementation

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/architecture/adrs/005-mcp-protocol.html b/docs/book/architecture/adrs/005-mcp-protocol.html new file mode 100644 index 0000000..82b30d9 --- /dev/null +++ b/docs/book/architecture/adrs/005-mcp-protocol.html @@ -0,0 +1,227 @@ + + + + + + ADR-005: MCP Protocol for AI Integration - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/architecture/config-driven.html b/docs/book/architecture/config-driven.html new file mode 100644 index 0000000..37ff70c --- /dev/null +++ b/docs/book/architecture/config-driven.html @@ -0,0 +1,660 @@ + + + + + + Config-Driven Design - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Config-Driven Architecture

+

The KOGRAL follows a config-driven architecture where all behavior is defined through Nickel configuration files rather than hardcoded in Rust.

+

Philosophy

+

"Configuration, not code, defines behavior"

+

Instead of hardcoding storage backends, embedding providers, or query parameters, KB uses a layered configuration system that composes settings from multiple sources:

+
    +
  1. Schema contracts (type definitions)
  2. +
  3. Defaults (base values)
  4. +
  5. Mode overlays (dev/prod/test optimizations)
  6. +
  7. User customizations (project-specific overrides)
  8. +
+

This approach provides:

+
    +
  • Type safety - Nickel contracts validate configuration before runtime
  • +
  • Composability - Mix and match configurations for different environments
  • +
  • Discoverability - Self-documenting schemas with inline documentation
  • +
  • Hot-reload - Change behavior without recompiling Rust code
  • +
  • Double validation - Nickel contracts + serde ensure correctness
  • +
+

Configuration Composition Flow

+

Configuration Composition

+

The configuration system uses a four-layer composition pattern:

+

Layer 1: Schema Contracts

+

Location: schemas/kb/contracts.ncl

+

Purpose: Define types and validation rules using Nickel contracts.

+

Example:

+
{
+  StorageType = [| 'filesystem, 'memory, 'surrealdb |],
+
+  StorageConfig = {
+    primary | StorageType
+      | doc "Primary storage backend"
+      | default = 'filesystem,
+
+    secondary | SecondaryStorageConfig
+      | doc "Optional secondary storage"
+      | default = { enabled = false },
+  },
+}
+
+

Benefits:

+
    +
  • Enum validation (only valid storage types accepted)
  • +
  • Required vs optional fields
  • +
  • Default values for optional fields
  • +
  • Documentation attached to types
  • +
+

Layer 2: Defaults

+

Location: schemas/kb/defaults.ncl

+

Purpose: Provide sensible base values for all configuration options.

+

Example:

+
{
+  base = {
+    storage = {
+      primary = 'filesystem,
+      secondary = {
+        enabled = false,
+        type = 'surrealdb,
+        url = "ws://localhost:8000",
+      },
+    },
+    embeddings = {
+      enabled = true,
+      provider = 'fastembed,
+      model = "BAAI/bge-small-en-v1.5",
+      dimensions = 384,
+    },
+  } | contracts.KbConfig,
+}
+
+

Validated by: contracts.KbConfig contract ensures defaults are valid.

+

Layer 3: Mode Overlays

+

Location: schemas/kb/modes/{dev,prod,test}.ncl

+

Purpose: Environment-specific optimizations and tuning.

+

Development Mode (dev.ncl)

+

Optimized for: Fast iteration, local development, debugging

+
{
+  storage = {
+    primary = 'filesystem,
+    secondary = { enabled = false },  # No database overhead
+  },
+  embeddings = {
+    provider = 'fastembed,  # Local, no API costs
+  },
+  sync = {
+    auto_index = false,  # Manual control
+  },
+}
+
+

Production Mode (prod.ncl)

+

Optimized for: Performance, reliability, scalability

+
{
+  storage = {
+    secondary = { enabled = true },  # SurrealDB for scale
+  },
+  embeddings = {
+    provider = 'openai,  # High-quality cloud embeddings
+    model = "text-embedding-3-small",
+    dimensions = 1536,
+  },
+  sync = {
+    auto_index = true,
+    debounce_ms = 300,  # Fast response
+  },
+}
+
+

Test Mode (test.ncl)

+

Optimized for: Fast tests, isolation, determinism

+
{
+  storage = {
+    primary = 'memory,  # Ephemeral, no disk I/O
+  },
+  embeddings = {
+    enabled = false,  # Disable for speed
+  },
+  sync = {
+    auto_index = false,
+    debounce_ms = 0,  # No delays in tests
+  },
+}
+
+

Layer 4: User Customizations

+

Location: .kb-config/core/kb.ncl or .kb-config/platform/{dev,prod,test}.ncl

+

Purpose: Project-specific or deployment-specific overrides.

+

Example (user project config):

+
let mode = import "../../schemas/kb/modes/dev.ncl" in
+
+let user_custom = {
+  graph = {
+    name = "my-project",
+  },
+  embeddings = {
+    provider = 'claude,  # Override to use Claude
+    model = "claude-3-haiku-20240307",
+  },
+  query = {
+    similarity_threshold = 0.7,  # Stricter threshold
+  },
+} in
+
+helpers.compose_config defaults.base mode user_custom
+  | contracts.KbConfig
+
+

Composition Mechanism

+

The helpers.ncl module provides the composition function:

+
{
+  # Recursively merge with override precedence
+  merge_with_override = fun base override => /* ... */,
+
+  # Compose three layers
+  compose_config = fun defaults mode_config user_custom =>
+    let with_mode = merge_with_override defaults mode_config in
+    merge_with_override with_mode user_custom,
+}
+
+

Merge behavior:

+
    +
  • Records are merged recursively
  • +
  • Override values take precedence over base values
  • +
  • Arrays are not merged, override replaces base
  • +
  • Null in override keeps base value
  • +
+

Example merge:

+
base = { storage = { primary = 'filesystem }, embeddings = { enabled = true } }
+override = { storage = { primary = 'memory } }
+# Result: { storage = { primary = 'memory }, embeddings = { enabled = true } }
+
+

Export to JSON

+

Once composed, the Nickel configuration is exported to JSON for Rust consumption:

+
nickel export --format json .kb-config/core/kb.ncl > .kb-config/targets/kb-core.json
+
+

Output (.kb-config/targets/kb-core.json):

+
{
+  "graph": {
+    "name": "my-project",
+    "version": "1.0.0"
+  },
+  "storage": {
+    "primary": "memory",
+    "secondary": {
+      "enabled": false
+    }
+  },
+  "embeddings": {
+    "enabled": true,
+    "provider": "claude",
+    "model": "claude-3-haiku-20240307",
+    "dimensions": 768
+  }
+}
+
+

Rust Integration

+

The Rust code deserializes the JSON into typed structs using serde:

+
#![allow(unused)]
+fn main() {
+use serde::{Deserialize, Serialize};
+
+#[derive(Debug, Deserialize, Serialize)]
+pub struct KbConfig {
+    pub graph: GraphConfig,
+    pub storage: StorageConfig,
+    pub embeddings: EmbeddingConfig,
+    pub templates: TemplateConfig,
+    pub query: QueryConfig,
+    pub mcp: McpConfig,
+    pub sync: SyncConfig,
+}
+
+impl KbConfig {
+    pub fn from_file(path: &Path) -> Result<Self> {
+        let json = std::fs::read_to_string(path)?;
+        let config: KbConfig = serde_json::from_str(&json)?;
+        Ok(config)
+    }
+}
+}
+

Usage in kb-core:

+
#![allow(unused)]
+fn main() {
+let config = KbConfig::from_file(".kb-config/targets/kb-core.json")?;
+
+// Config drives behavior
+let storage: Box<dyn Storage> = match config.storage.primary {
+    StorageType::Filesystem => Box::new(FilesystemStorage::new(&config)?),
+    StorageType::Memory => Box::new(MemoryStorage::new()),
+    StorageType::SurrealDb => Box::new(SurrealDbStorage::new(&config).await?),
+};
+
+let embeddings: Box<dyn EmbeddingProvider> = match config.embeddings.provider {
+    EmbeddingProviderType::FastEmbed => Box::new(FastEmbedProvider::new()?),
+    EmbeddingProviderType::OpenAI => Box::new(RigEmbeddingProvider::openai(&config)?),
+    EmbeddingProviderType::Claude => Box::new(RigEmbeddingProvider::claude(&config)?),
+    EmbeddingProviderType::Ollama => Box::new(RigEmbeddingProvider::ollama(&config)?),
+};
+}
+

Double Validation

+

Configuration is validated twice:

+

1. Nickel Contract Validation

+

At export time, Nickel validates:

+
    +
  • ✅ Types match contracts (e.g., primary | StorageType)
  • +
  • ✅ Required fields are present
  • +
  • ✅ Enums have valid values
  • +
  • ✅ Nested structure is correct
  • +
+

Error example:

+
error: contract broken by a value
+  ┌─ .kb-config/core/kb.ncl:15:5
+  │
+15│     primary = 'invalid,
+  │     ^^^^^^^^^^^^^^^^^^^ applied to this expression
+  │
+  = This value is not in the enum ['filesystem, 'memory, 'surrealdb]
+
+

2. Serde Deserialization Validation

+

At runtime, serde validates:

+
    +
  • ✅ JSON structure matches Rust types
  • +
  • ✅ Field names match (with rename support)
  • +
  • ✅ Values can be converted to Rust types
  • +
  • ✅ Required fields are not null
  • +
+

Error example:

+
#![allow(unused)]
+fn main() {
+Error: missing field `graph` at line 1 column 123
+}
+

Benefits of Config-Driven Architecture

+

1. Zero Hardcoding

+

Bad (hardcoded):

+
#![allow(unused)]
+fn main() {
+// Hardcoded - requires recompilation to change
+let storage = FilesystemStorage::new("/fixed/path");
+let threshold = 0.6;
+}
+

Good (config-driven):

+
#![allow(unused)]
+fn main() {
+// Config-driven - change via .ncl file
+let storage = create_storage(&config)?;
+let threshold = config.query.similarity_threshold;
+}
+

2. Environment Flexibility

+

Same codebase, different behavior:

+
# Development
+nickel export .kb-config/platform/dev.ncl > targets/kb-core.json
+# → Filesystem storage, fastembed, no auto-sync
+
+# Production
+nickel export .kb-config/platform/prod.ncl > targets/kb-core.json
+# → SurrealDB enabled, OpenAI embeddings, auto-sync
+
+# Testing
+nickel export .kb-config/platform/test.ncl > targets/kb-core.json
+# → In-memory storage, no embeddings, isolated
+
+

3. Self-Documenting

+

Nickel contracts include inline documentation:

+
StorageType = [| 'filesystem, 'memory, 'surrealdb |]
+  | doc "Storage backend type: filesystem (git-tracked), memory (ephemeral), surrealdb (scalable)",
+
+

IDEs can show this documentation when editing .ncl files.

+

4. Type-Safe Evolution

+

When adding new features:

+
    +
  1. Update contract in contracts.ncl
  2. +
  3. Add default in defaults.ncl
  4. +
  5. Export validates existing configs
  6. +
  7. Rust compilation validates deserialization
  8. +
+

Breaking changes are caught before runtime.

+

5. Testability

+

Different test scenarios without code changes:

+
# test-semantic-search.ncl
+let test_config = defaults.base & {
+  embeddings = { enabled = true, provider = 'fastembed },
+  query = { similarity_threshold = 0.3 },
+} in test_config
+
+
#![allow(unused)]
+fn main() {
+#[test]
+fn test_semantic_search() {
+    let config = KbConfig::from_file("test-semantic-search.json")?;
+    // Config drives test behavior
+}
+}
+

Configuration Discovery

+

KB tools automatically discover configuration:

+
    +
  1. Check .kb-config/targets/kb-core.json (pre-exported)
  2. +
  3. Check .kb-config/core/kb.ncl (export on-demand)
  4. +
  5. Check environment variable KB_CONFIG
  6. +
  7. Fall back to embedded defaults
  8. +
+
#![allow(unused)]
+fn main() {
+impl KbConfig {
+    pub fn discover() -> Result<Self> {
+        if let Ok(config) = Self::from_file(".kb-config/targets/kb-core.json") {
+            return Ok(config);
+        }
+
+        if Path::new(".kb-config/core/kb.ncl").exists() {
+            // Export and load
+            let output = Command::new("nickel")
+                .args(["export", "--format", "json", ".kb-config/core/kb.ncl"])
+                .output()?;
+            return serde_json::from_slice(&output.stdout)?;
+        }
+
+        if let Ok(path) = std::env::var("KB_CONFIG") {
+            return Self::from_file(&path);
+        }
+
+        Ok(Self::default())  // Embedded defaults
+    }
+}
+}
+

Integration with justfile

+

The justfile integrates configuration validation:

+
# Validate all Nickel configs
+nickel-validate-all:
+    @echo "Validating Nickel schemas..."
+    nickel typecheck schemas/kb/contracts.ncl
+    nickel typecheck schemas/kb/defaults.ncl
+    nickel typecheck schemas/kb/helpers.ncl
+    nickel typecheck schemas/kb/modes/dev.ncl
+    nickel typecheck schemas/kb/modes/prod.ncl
+    nickel typecheck schemas/kb/modes/test.ncl
+    nickel typecheck .kb-config/core/kb.ncl
+
+# Export all platform configs
+nickel-export-all:
+    @echo "Exporting platform configs to JSON..."
+    @mkdir -p .kb-config/targets
+    nickel export --format json .kb-config/platform/dev.ncl > .kb-config/targets/kb-dev.json
+    nickel export --format json .kb-config/platform/prod.ncl > .kb-config/targets/kb-prod.json
+    nickel export --format json .kb-config/platform/test.ncl > .kb-config/targets/kb-test.json
+    @echo "Exported 3 configurations to .kb-config/targets/"
+
+

Usage:

+
just nickel::validate-all  # Check configs are valid
+just nickel::export-all    # Generate JSON for all environments
+
+

Best Practices

+

1. Never Hardcode

+

If it's behavior, it's config:

+
    +
  • Storage paths
  • +
  • API endpoints
  • +
  • Thresholds
  • +
  • Timeouts
  • +
  • Feature flags
  • +
  • Provider selection
  • +
+

2. Use Modes for Environment Differences

+

Don't put environment-specific values in user config:

+

Bad:

+
# user config with env-specific values
+{
+  storage = {
+    url = if env == "prod" then "prod-url" else "dev-url"  # Don't do this
+  }
+}
+
+

Good:

+
# modes/prod.ncl
+{ storage = { url = "prod-url" } }
+
+# modes/dev.ncl
+{ storage = { url = "dev-url" } }
+
+# user config is environment-agnostic
+{ graph = { name = "my-project" } }
+
+

3. Document Complex Fields

+

Use Nickel's doc metadata:

+
similarity_threshold | Number
+  | doc "Minimum cosine similarity (0-1) for semantic search matches. Higher = stricter."
+  | default = 0.6,
+
+

4. Validate Early

+

Run nickel typecheck in CI/CD before building Rust code.

+

5. Version Configs

+

Track .ncl files in git, ignore .kb-config/targets/*.json (generated).

+

See Also

+ + +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/architecture/graph-model.html b/docs/book/architecture/graph-model.html new file mode 100644 index 0000000..f76edad --- /dev/null +++ b/docs/book/architecture/graph-model.html @@ -0,0 +1,227 @@ + + + + + + Graph Model - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Graph Model

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/architecture/logseq-blocks-design.html b/docs/book/architecture/logseq-blocks-design.html new file mode 100644 index 0000000..7de1c3d --- /dev/null +++ b/docs/book/architecture/logseq-blocks-design.html @@ -0,0 +1,1129 @@ + + + + + + Logseq Blocks Design - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Logseq Blocks Support - Architecture Design

+

Problem Statement

+

Logseq uses content blocks as the fundamental unit of information, not full documents. Each block can have:

+
    +
  • Properties: #card, TODO, DONE, custom properties
  • +
  • Tags: Inline tags like #flashcard, #important
  • +
  • References: Block references ((block-id)), page references [[page]]
  • +
  • Nesting: Outliner-style hierarchy (parent-child blocks)
  • +
  • Metadata: Block-level properties (unlike page-level frontmatter)
  • +
+

Current KB limitation: Nodes only have content: String (flat markdown). Importing from Logseq loses block structure and properties.

+

Requirement: Support round-trip import/export with full block fidelity:

+
Logseq Graph → KOGRAL Import → KOGRAL Storage → KOGRAL Export → Logseq Graph
+     (blocks preserved)                    (blocks preserved)
+
+

Use Cases

+

1. Flashcards (#card)

+

Logseq:

+
- What is Rust's ownership model? #card
+  - Rust uses ownership, borrowing, and lifetimes
+  - Three rules: one owner, many borrows XOR one mutable
+
+

KB needs to preserve:

+
    +
  • Block with #card property
  • +
  • Nested answer blocks
  • +
  • Ability to query all cards
  • +
+

2. Task Tracking (TODO/DONE)

+

Logseq:

+
- TODO Implement block parser #rust
+  - DONE Research block structure
+  - TODO Write parser tests
+
+

KB needs to preserve:

+
    +
  • Task status per block
  • +
  • Hierarchical task breakdown
  • +
  • Tags on tasks
  • +
+

3. Block References

+

Logseq:

+
- Core concept: ((block-uuid-123))
+  - See also: [[Related Page]]
+
+

KB needs to preserve:

+
    +
  • Block-to-block links (not just page-to-page)
  • +
  • UUID references
  • +
+

4. Block Properties

+

Logseq:

+
- This is a block with properties
+  property1:: value1
+  property2:: value2
+
+

KB needs to preserve:

+
    +
  • Custom key-value properties per block
  • +
  • Property inheritance/override
  • +
+

Design Options

+

Option A: Blocks as First-Class Data Structure

+

Add blocks field to Node:

+
#![allow(unused)]
+fn main() {
+pub struct Node {
+    // ... existing fields ...
+    pub content: String,              // Backward compat: flat markdown
+    pub blocks: Option<Vec<Block>>,   // NEW: Structured blocks
+}
+
+pub struct Block {
+    pub id: String,                   // UUID or auto-generated
+    pub content: String,              // Block text
+    pub properties: BlockProperties,  // Tags, status, custom props
+    pub children: Vec<Block>,         // Nested blocks
+    pub created: DateTime<Utc>,
+    pub modified: DateTime<Utc>,
+}
+
+pub struct BlockProperties {
+    pub tags: Vec<String>,            // #card, #important
+    pub status: Option<TaskStatus>,   // TODO, DONE, WAITING
+    pub custom: HashMap<String, String>, // property:: value
+}
+
+pub enum TaskStatus {
+    Todo,
+    Doing,
+    Done,
+    Waiting,
+    Cancelled,
+}
+}
+

Pros:

+
    +
  • ✅ Type-safe, explicit structure
  • +
  • ✅ Queryable (find all #card blocks)
  • +
  • ✅ Preserves hierarchy
  • +
  • ✅ Supports block-level operations
  • +
+

Cons:

+
    +
  • ❌ Adds complexity to Node
  • +
  • ❌ Dual representation (content + blocks)
  • +
  • ❌ Requires migration of existing data
  • +
+

Option B: Parser-Only Approach

+

Keep content: String, parse blocks on-demand:

+
#![allow(unused)]
+fn main() {
+pub struct BlockParser;
+
+impl BlockParser {
+    // Parse markdown content into block structure
+    fn parse(content: &str) -> Vec<Block>;
+
+    // Serialize blocks back to markdown
+    fn serialize(blocks: &[Block]) -> String;
+}
+
+// Usage
+let blocks = BlockParser::parse(&node.content);
+let filtered = blocks.iter().filter(|b| b.properties.tags.contains("card"));
+}
+

Pros:

+
    +
  • ✅ No schema changes
  • +
  • ✅ Backward compatible
  • +
  • ✅ Simple storage (still just String)
  • +
+

Cons:

+
    +
  • ❌ Parse overhead on every access
  • +
  • ❌ Can't query blocks in database (SurrealDB)
  • +
  • ❌ Harder to index/search blocks
  • +
+ +

Combine both: structured storage + lazy parsing:

+
#![allow(unused)]
+fn main() {
+pub struct Node {
+    // ... existing fields ...
+    pub content: String,              // Source of truth (markdown)
+
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub blocks: Option<Vec<Block>>,   // Cached structure (parsed)
+}
+
+impl Node {
+    // Parse blocks from content if not already cached
+    pub fn get_blocks(&mut self) -> &Vec<Block> {
+        if self.blocks.is_none() {
+            self.blocks = Some(BlockParser::parse(&self.content));
+        }
+        self.blocks.as_ref().unwrap()
+    }
+
+    // Update content from blocks (when blocks modified)
+    pub fn sync_blocks_to_content(&mut self) {
+        if let Some(ref blocks) = self.blocks {
+            self.content = BlockParser::serialize(blocks);
+        }
+    }
+}
+}
+

Storage Strategy:

+
    +
  1. +

    Filesystem - Store as markdown (Logseq compatible):

    +
    - Block 1 #card
    +  - Nested block
    +- Block 2 TODO
    +
    +
  2. +
  3. +

    SurrealDB - Store both:

    +
    DEFINE TABLE block SCHEMAFULL;
    +DEFINE FIELD node_id ON block TYPE record(node);
    +DEFINE FIELD block_id ON block TYPE string;
    +DEFINE FIELD content ON block TYPE string;
    +DEFINE FIELD properties ON block TYPE object;
    +DEFINE FIELD parent_id ON block TYPE option<string>;
    +
    +-- Index for queries
    +DEFINE INDEX block_tags ON block COLUMNS properties.tags;
    +DEFINE INDEX block_status ON block COLUMNS properties.status;
    +
    +
  4. +
+

Pros:

+
    +
  • ✅ Best of both worlds
  • +
  • ✅ Filesystem stays Logseq-compatible
  • +
  • ✅ SurrealDB can query blocks
  • +
  • ✅ Lazy parsing (only when needed)
  • +
  • ✅ Backward compatible
  • +
+

Cons:

+
    +
  • ⚠️ Need to keep content/blocks in sync
  • +
  • ⚠️ More complex implementation
  • +
+ +

Phase 1: Data Model

+
#![allow(unused)]
+fn main() {
+// crates/kb-core/src/models/block.rs
+
+use chrono::{DateTime, Utc};
+use serde::{Deserialize, Serialize};
+use std::collections::HashMap;
+
+/// A content block (Logseq-style)
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Block {
+    /// Unique block identifier (UUID)
+    pub id: String,
+
+    /// Block content (markdown text, excluding nested blocks)
+    pub content: String,
+
+    /// Block properties (tags, status, custom)
+    pub properties: BlockProperties,
+
+    /// Child blocks (nested hierarchy)
+    #[serde(default)]
+    pub children: Vec<Block>,
+
+    /// Creation timestamp
+    pub created: DateTime<Utc>,
+
+    /// Last modification timestamp
+    pub modified: DateTime<Utc>,
+
+    /// Parent block ID (if nested)
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub parent_id: Option<String>,
+}
+
+/// Block-level properties
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+pub struct BlockProperties {
+    /// Tags (e.g., #card, #important)
+    #[serde(default)]
+    pub tags: Vec<String>,
+
+    /// Task status (TODO, DONE, etc.)
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub status: Option<TaskStatus>,
+
+    /// Custom properties (property:: value)
+    #[serde(default)]
+    pub custom: HashMap<String, String>,
+
+    /// Block references ((uuid))
+    #[serde(default)]
+    pub block_refs: Vec<String>,
+
+    /// Page references ([[page]])
+    #[serde(default)]
+    pub page_refs: Vec<String>,
+}
+
+/// Task status for TODO blocks
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(rename_all = "UPPERCASE")]
+pub enum TaskStatus {
+    Todo,
+    Doing,
+    Done,
+    Later,
+    Now,
+    Waiting,
+    Cancelled,
+}
+
+impl Block {
+    /// Create a new block with content
+    pub fn new(content: String) -> Self {
+        use uuid::Uuid;
+        Self {
+            id: Uuid::new_v4().to_string(),
+            content,
+            properties: BlockProperties::default(),
+            children: Vec::new(),
+            created: Utc::now(),
+            modified: Utc::now(),
+            parent_id: None,
+        }
+    }
+
+    /// Add a child block
+    pub fn add_child(&mut self, mut child: Block) {
+        child.parent_id = Some(self.id.clone());
+        self.children.push(child);
+        self.modified = Utc::now();
+    }
+
+    /// Add a tag to this block
+    pub fn add_tag(&mut self, tag: String) {
+        if !self.properties.tags.contains(&tag) {
+            self.properties.tags.push(tag);
+            self.modified = Utc::now();
+        }
+    }
+
+    /// Set task status
+    pub fn set_status(&mut self, status: TaskStatus) {
+        self.properties.status = Some(status);
+        self.modified = Utc::now();
+    }
+
+    /// Get all blocks (self + descendants) as flat list
+    pub fn flatten(&self) -> Vec<&Block> {
+        let mut result = vec![self];
+        for child in &self.children {
+            result.extend(child.flatten());
+        }
+        result
+    }
+
+    /// Find block by ID in tree
+    pub fn find(&self, id: &str) -> Option<&Block> {
+        if self.id == id {
+            return Some(self);
+        }
+        for child in &self.children {
+            if let Some(found) = child.find(id) {
+                return Some(found);
+            }
+        }
+        None
+    }
+}
+}
+

Phase 2: Update Node Model

+
#![allow(unused)]
+fn main() {
+// crates/kb-core/src/models.rs (modifications)
+
+use crate::models::block::Block;
+
+pub struct Node {
+    // ... existing fields ...
+    pub content: String,
+
+    /// Structured blocks (optional, parsed from content)
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub blocks: Option<Vec<Block>>,
+}
+
+impl Node {
+    /// Get blocks, parsing from content if needed
+    pub fn get_blocks(&mut self) -> Result<&Vec<Block>> {
+        if self.blocks.is_none() {
+            self.blocks = Some(crate::parser::BlockParser::parse(&self.content)?);
+        }
+        Ok(self.blocks.as_ref().unwrap())
+    }
+
+    /// Update content from blocks
+    pub fn sync_blocks_to_content(&mut self) {
+        if let Some(ref blocks) = self.blocks {
+            self.content = crate::parser::BlockParser::serialize(blocks);
+        }
+    }
+
+    /// Find all blocks with a specific tag
+    pub fn find_blocks_by_tag(&mut self, tag: &str) -> Result<Vec<&Block>> {
+        let blocks = self.get_blocks()?;
+        let mut result = Vec::new();
+        for block in blocks {
+            for b in block.flatten() {
+                if b.properties.tags.iter().any(|t| t == tag) {
+                    result.push(b);
+                }
+            }
+        }
+        Ok(result)
+    }
+
+    /// Find all TODO blocks
+    pub fn find_todos(&mut self) -> Result<Vec<&Block>> {
+        let blocks = self.get_blocks()?;
+        let mut result = Vec::new();
+        for block in blocks {
+            for b in block.flatten() {
+                if matches!(b.properties.status, Some(TaskStatus::Todo)) {
+                    result.push(b);
+                }
+            }
+        }
+        Ok(result)
+    }
+}
+}
+

Phase 3: Block Parser

+
#![allow(unused)]
+fn main() {
+// crates/kb-core/src/parser/block_parser.rs
+
+use crate::models::block::{Block, BlockProperties, TaskStatus};
+use regex::Regex;
+
+pub struct BlockParser;
+
+impl BlockParser {
+    /// Parse markdown content into block structure
+    ///
+    /// Handles:
+    /// - Outliner format (- prefix with indentation)
+    /// - Tags (#card, #important)
+    /// - Task status (TODO, DONE)
+    /// - Properties (property:: value)
+    /// - Block references (((uuid)))
+    /// - Page references ([[page]])
+    pub fn parse(content: &str) -> Result<Vec<Block>> {
+        let mut blocks = Vec::new();
+        let mut stack: Vec<(usize, Block)> = Vec::new(); // (indent_level, block)
+
+        for line in content.lines() {
+            // Detect indentation level
+            let indent = count_indent(line);
+            let trimmed = line.trim_start();
+
+            // Skip empty lines
+            if trimmed.is_empty() {
+                continue;
+            }
+
+            // Parse block line
+            if let Some(block_content) = trimmed.strip_prefix("- ") {
+                let mut block = Self::parse_block_line(block_content)?;
+
+                // Pop stack until we find parent level
+                while let Some((level, _)) = stack.last() {
+                    if *level < indent {
+                        break;
+                    }
+                    stack.pop();
+                }
+
+                // Add as child to parent or as root
+                if let Some((_, parent)) = stack.last_mut() {
+                    parent.add_child(block.clone());
+                } else {
+                    blocks.push(block.clone());
+                }
+
+                stack.push((indent, block));
+            }
+        }
+
+        Ok(blocks)
+    }
+
+    /// Parse a single block line (after "- " prefix)
+    fn parse_block_line(line: &str) -> Result<Block> {
+        let mut block = Block::new(String::new());
+        let mut properties = BlockProperties::default();
+
+        // Extract task status (TODO, DONE, etc.)
+        let (status, remaining) = Self::extract_task_status(line);
+        properties.status = status;
+
+        // Extract tags (#card, #important)
+        let (tags, remaining) = Self::extract_tags(remaining);
+        properties.tags = tags;
+
+        // Extract properties (property:: value)
+        let (custom_props, remaining) = Self::extract_properties(remaining);
+        properties.custom = custom_props;
+
+        // Extract block references (((uuid)))
+        let (block_refs, remaining) = Self::extract_block_refs(remaining);
+        properties.block_refs = block_refs;
+
+        // Extract page references ([[page]])
+        let (page_refs, content) = Self::extract_page_refs(remaining);
+        properties.page_refs = page_refs;
+
+        block.content = content.trim().to_string();
+        block.properties = properties;
+
+        Ok(block)
+    }
+
+    /// Serialize blocks back to markdown
+    pub fn serialize(blocks: &[Block]) -> String {
+        let mut result = String::new();
+        for block in blocks {
+            Self::serialize_block(&mut result, block, 0);
+        }
+        result
+    }
+
+    fn serialize_block(output: &mut String, block: &Block, indent: usize) {
+        // Write indent
+        for _ in 0..indent {
+            output.push_str("  ");
+        }
+
+        // Write prefix
+        output.push_str("- ");
+
+        // Write task status
+        if let Some(status) = block.properties.status {
+            output.push_str(&format!("{:?} ", status).to_uppercase());
+        }
+
+        // Write content
+        output.push_str(&block.content);
+
+        // Write tags
+        for tag in &block.properties.tags {
+            output.push_str(&format!(" #{}", tag));
+        }
+
+        // Write properties
+        if !block.properties.custom.is_empty() {
+            output.push('\n');
+            for (key, value) in &block.properties.custom {
+                for _ in 0..=indent {
+                    output.push_str("  ");
+                }
+                output.push_str(&format!("{}:: {}\n", key, value));
+            }
+        }
+
+        output.push('\n');
+
+        // Write children recursively
+        for child in &block.children {
+            Self::serialize_block(output, child, indent + 1);
+        }
+    }
+
+    // Helper methods for extraction
+    fn extract_task_status(line: &str) -> (Option<TaskStatus>, &str) {
+        let line = line.trim_start();
+        if let Some(rest) = line.strip_prefix("TODO ") {
+            (Some(TaskStatus::Todo), rest)
+        } else if let Some(rest) = line.strip_prefix("DONE ") {
+            (Some(TaskStatus::Done), rest)
+        } else if let Some(rest) = line.strip_prefix("DOING ") {
+            (Some(TaskStatus::Doing), rest)
+        } else if let Some(rest) = line.strip_prefix("LATER ") {
+            (Some(TaskStatus::Later), rest)
+        } else if let Some(rest) = line.strip_prefix("NOW ") {
+            (Some(TaskStatus::Now), rest)
+        } else if let Some(rest) = line.strip_prefix("WAITING ") {
+            (Some(TaskStatus::Waiting), rest)
+        } else if let Some(rest) = line.strip_prefix("CANCELLED ") {
+            (Some(TaskStatus::Cancelled), rest)
+        } else {
+            (None, line)
+        }
+    }
+
+    fn extract_tags(line: &str) -> (Vec<String>, String) {
+        let tag_regex = Regex::new(r"#(\w+)").unwrap();
+        let mut tags = Vec::new();
+        let mut result = line.to_string();
+
+        for cap in tag_regex.captures_iter(line) {
+            if let Some(tag) = cap.get(1) {
+                tags.push(tag.as_str().to_string());
+                result = result.replace(&format!("#{}", tag.as_str()), "");
+            }
+        }
+
+        (tags, result.trim().to_string())
+    }
+
+    fn extract_properties(line: &str) -> (HashMap<String, String>, String) {
+        let prop_regex = Regex::new(r"(\w+)::\s*([^\n]+)").unwrap();
+        let mut props = HashMap::new();
+        let mut result = line.to_string();
+
+        for cap in prop_regex.captures_iter(line) {
+            if let (Some(key), Some(value)) = (cap.get(1), cap.get(2)) {
+                props.insert(key.as_str().to_string(), value.as_str().trim().to_string());
+                result = result.replace(&cap[0], "");
+            }
+        }
+
+        (props, result.trim().to_string())
+    }
+
+    fn extract_block_refs(line: &str) -> (Vec<String>, String) {
+        let ref_regex = Regex::new(r"\(\(([^)]+)\)\)").unwrap();
+        let mut refs = Vec::new();
+        let mut result = line.to_string();
+
+        for cap in ref_regex.captures_iter(line) {
+            if let Some(uuid) = cap.get(1) {
+                refs.push(uuid.as_str().to_string());
+                result = result.replace(&cap[0], "");
+            }
+        }
+
+        (refs, result.trim().to_string())
+    }
+
+    fn extract_page_refs(line: &str) -> (Vec<String>, String) {
+        let page_regex = Regex::new(r"\[\[([^\]]+)\]\]").unwrap();
+        let mut pages = Vec::new();
+        let result = line.to_string();
+
+        for cap in page_regex.captures_iter(line) {
+            if let Some(page) = cap.get(1) {
+                pages.push(page.as_str().to_string());
+                // Keep [[page]] in content for now (backward compat)
+            }
+        }
+
+        (pages, result)
+    }
+}
+
+fn count_indent(line: &str) -> usize {
+    line.chars().take_while(|c| c.is_whitespace()).count() / 2
+}
+}
+

Phase 4: Logseq Import/Export

+
#![allow(unused)]
+fn main() {
+// crates/kb-core/src/logseq.rs
+
+use crate::models::{Node, NodeType};
+use crate::models::block::Block;
+use crate::parser::BlockParser;
+
+pub struct LogseqImporter;
+
+impl LogseqImporter {
+    /// Import a Logseq page (markdown file) as a Node
+    pub fn import_page(path: &Path) -> Result<Node> {
+        let content = std::fs::read_to_string(path)?;
+
+        // Extract frontmatter if present
+        let (frontmatter, body) = Self::split_frontmatter(&content);
+
+        // Parse blocks from body
+        let blocks = BlockParser::parse(&body)?;
+
+        // Create node with blocks
+        let mut node = Node::new(NodeType::Note, Self::extract_title(path));
+        node.content = body;
+        node.blocks = Some(blocks);
+
+        // Apply frontmatter properties
+        if let Some(fm) = frontmatter {
+            Self::apply_frontmatter(&mut node, &fm)?;
+        }
+
+        Ok(node)
+    }
+
+    fn split_frontmatter(content: &str) -> (Option<String>, String) {
+        if content.starts_with("---\n") {
+            if let Some(end) = content[4..].find("\n---\n") {
+                let frontmatter = content[4..4 + end].to_string();
+                let body = content[4 + end + 5..].to_string();
+                return (Some(frontmatter), body);
+            }
+        }
+        (None, content.to_string())
+    }
+
+    fn extract_title(path: &Path) -> String {
+        path.file_stem()
+            .and_then(|s| s.to_str())
+            .unwrap_or("Untitled")
+            .to_string()
+    }
+
+    fn apply_frontmatter(node: &mut Node, frontmatter: &str) -> Result<()> {
+        // Parse YAML frontmatter and apply to node
+        // ... implementation ...
+        Ok(())
+    }
+}
+
+pub struct LogseqExporter;
+
+impl LogseqExporter {
+    /// Export a Node to Logseq page format
+    pub fn export_page(node: &Node, path: &Path) -> Result<()> {
+        let mut output = String::new();
+
+        // Generate frontmatter
+        output.push_str("---\n");
+        output.push_str(&Self::generate_frontmatter(node)?);
+        output.push_str("---\n\n");
+
+        // Serialize blocks or use content
+        if let Some(ref blocks) = node.blocks {
+            output.push_str(&BlockParser::serialize(blocks));
+        } else {
+            output.push_str(&node.content);
+        }
+
+        std::fs::write(path, output)?;
+        Ok(())
+    }
+
+    fn generate_frontmatter(node: &Node) -> Result<String> {
+        let mut fm = String::new();
+        fm.push_str(&format!("title: {}\n", node.title));
+        fm.push_str(&format!("tags: {}\n", node.tags.join(", ")));
+        // ... more frontmatter fields ...
+        Ok(fm)
+    }
+}
+}
+

Query API Extensions

+
#![allow(unused)]
+fn main() {
+// New methods in Graph or Query module
+
+impl Graph {
+    /// Find all blocks with a specific tag across all nodes
+    pub fn find_blocks_by_tag(&mut self, tag: &str) -> Vec<(&Node, &Block)> {
+        let mut results = Vec::new();
+        for node in self.nodes.values_mut() {
+            if let Ok(blocks) = node.find_blocks_by_tag(tag) {
+                for block in blocks {
+                    results.push((node as &Node, block));
+                }
+            }
+        }
+        results
+    }
+
+    /// Find all flashcards (#card blocks)
+    pub fn find_flashcards(&mut self) -> Vec<(&Node, &Block)> {
+        self.find_blocks_by_tag("card")
+    }
+
+    /// Find all TODO items across knowledge base
+    pub fn find_all_todos(&mut self) -> Vec<(&Node, &Block)> {
+        let mut results = Vec::new();
+        for node in self.nodes.values_mut() {
+            if let Ok(todos) = node.find_todos() {
+                for block in todos {
+                    results.push((node as &Node, block));
+                }
+            }
+        }
+        results
+    }
+}
+}
+

MCP Tool Extensions

+
{
+  "name": "kogral/find_blocks",
+  "description": "Find blocks by tag, status, or properties",
+  "inputSchema": {
+    "type": "object",
+    "properties": {
+      "tag": { "type": "string", "description": "Filter by tag (e.g., 'card')" },
+      "status": { "type": "string", "enum": ["TODO", "DONE", "DOING"] },
+      "property": { "type": "string", "description": "Custom property key" },
+      "value": { "type": "string", "description": "Property value to match" }
+    }
+  }
+}
+
+

Configuration

+
# schemas/kb/contracts.ncl (additions)
+
+BlockConfig = {
+  enabled | Bool
+    | doc "Enable block-level parsing and storage"
+    | default = true,
+
+  preserve_hierarchy | Bool
+    | doc "Preserve block nesting on import/export"
+    | default = true,
+
+  parse_on_load | Bool
+    | doc "Automatically parse blocks when loading nodes"
+    | default = false,  # Lazy parsing by default
+
+  supported_statuses | Array String
+    | doc "Supported task statuses"
+    | default = ["TODO", "DONE", "DOING", "LATER", "NOW", "WAITING", "CANCELLED"],
+}
+
+KbConfig = {
+  # ... existing fields ...
+
+  blocks | BlockConfig
+    | doc "Block-level features configuration"
+    | default = {},
+}
+
+

Migration Path

+

Phase 1: Add Block models (no behavior change) +Phase 2: Add BlockParser (opt-in via config) +Phase 3: Update Logseq import/export +Phase 4: Add block queries to CLI/MCP +Phase 5: SurrealDB block indexing

+

Backward Compatibility:

+
    +
  • Existing nodes without blocks field work as before
  • +
  • content remains source of truth
  • +
  • blocks is optional cache/structure
  • +
  • Config flag blocks.enabled to opt-in
  • +
+

Testing Strategy

+
#![allow(unused)]
+fn main() {
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn test_parse_simple_block() {
+        let content = "- This is a block #card";
+        let blocks = BlockParser::parse(content).unwrap();
+
+        assert_eq!(blocks.len(), 1);
+        assert_eq!(blocks[0].content, "This is a block");
+        assert_eq!(blocks[0].properties.tags, vec!["card"]);
+    }
+
+    #[test]
+    fn test_parse_nested_blocks() {
+        let content = r#"
+- Parent block
+  - Child block 1
+  - Child block 2
+    - Grandchild
+"#;
+        let blocks = BlockParser::parse(content).unwrap();
+
+        assert_eq!(blocks.len(), 1);
+        assert_eq!(blocks[0].children.len(), 2);
+        assert_eq!(blocks[0].children[1].children.len(), 1);
+    }
+
+    #[test]
+    fn test_parse_todo() {
+        let content = "- TODO Implement feature #rust";
+        let blocks = BlockParser::parse(content).unwrap();
+
+        assert_eq!(blocks[0].properties.status, Some(TaskStatus::Todo));
+        assert_eq!(blocks[0].content, "Implement feature");
+        assert_eq!(blocks[0].properties.tags, vec!["rust"]);
+    }
+
+    #[test]
+    fn test_roundtrip() {
+        let original = r#"- Block 1 #card
+  - Nested
+- TODO Block 2
+  priority:: high
+"#;
+        let blocks = BlockParser::parse(original).unwrap();
+        let serialized = BlockParser::serialize(&blocks);
+        let reparsed = BlockParser::parse(&serialized).unwrap();
+
+        assert_eq!(blocks.len(), reparsed.len());
+        assert_eq!(blocks[0].properties, reparsed[0].properties);
+    }
+}
+}
+

Summary

+

Recommended Approach: Hybrid (Option C)

+
    +
  • Add Block struct with properties, hierarchy
  • +
  • Extend Node with optional blocks: Option<Vec<Block>>
  • +
  • Implement bidirectional parser (markdown ↔ blocks)
  • +
  • Preserve content as source of truth (backward compat)
  • +
  • Enable block queries in CLI/MCP
  • +
  • Support round-trip Logseq import/export
  • +
+

Benefits:

+
    +
  • ✅ Full Logseq compatibility
  • +
  • ✅ Queryable blocks (find #card, TODO, etc.)
  • +
  • ✅ Backward compatible
  • +
  • ✅ Extensible (custom properties)
  • +
  • ✅ Type-safe structure
  • +
+

Trade-offs:

+
    +
  • ⚠️ Added complexity
  • +
  • ⚠️ Need to sync content ↔ blocks
  • +
  • ⚠️ More storage for SurrealDB backend
  • +
+

Next Steps:

+
    +
  1. Review and approve design
  2. +
  3. Implement Phase 1 (Block models)
  4. +
  5. Implement Phase 2 (BlockParser)
  6. +
  7. Update Logseq import/export
  8. +
  9. Add block queries to MCP/CLI
  10. +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/architecture/overview.html b/docs/book/architecture/overview.html new file mode 100644 index 0000000..116af42 --- /dev/null +++ b/docs/book/architecture/overview.html @@ -0,0 +1,667 @@ + + + + + + System Overview - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

System Architecture

+

Comprehensive overview of the KOGRAL architecture.

+

High-Level Architecture

+

Architecture Overview

+

The KOGRAL consists of three main layers:

+
    +
  1. User Interfaces: kb-cli (terminal), kb-mcp (AI integration), NuShell scripts (automation)
  2. +
  3. Core Library (kb-core): Rust library with graph engine, storage abstraction, embeddings, query engine
  4. +
  5. Storage Backends: Filesystem (git-friendly), SurrealDB (scalable), In-Memory (cache/testing)
  6. +
+

Component Details

+

kb-cli (Command-Line Interface)

+

Purpose: Primary user interface for local knowledge management.

+

Commands (13 total):

+
    +
  • init: Initialize .kogral/ directory
  • +
  • add: Create nodes (note, decision, guideline, pattern, journal)
  • +
  • search: Text and semantic search
  • +
  • link: Create relationships between nodes
  • +
  • list: List all nodes
  • +
  • show: Display node details
  • +
  • delete: Remove nodes
  • +
  • graph: Visualize knowledge graph
  • +
  • sync: Sync filesystem ↔ SurrealDB
  • +
  • serve: Start MCP server
  • +
  • import: Import from Logseq
  • +
  • export: Export to Logseq/JSON
  • +
  • config: Manage configuration
  • +
+

Technology: Rust + clap (derive API)

+

Features:

+
    +
  • Colored terminal output
  • +
  • Interactive prompts
  • +
  • Dry-run modes
  • +
  • Validation before operations
  • +
+

kb-mcp (MCP Server)

+

Purpose: AI integration via Model Context Protocol.

+

Protocol: JSON-RPC 2.0 over stdio

+

Components:

+
    +
  1. +

    Tools (7):

    +
      +
    • kogral/search: Query knowledge base
    • +
    • kb/add_note: Create notes
    • +
    • kb/add_decision: Create ADRs
    • +
    • kb/link: Create relationships
    • +
    • kb/get_guidelines: Retrieve guidelines with inheritance
    • +
    • kb/list_graphs: List available graphs
    • +
    • kb/export: Export to formats
    • +
    +
  2. +
  3. +

    Resources (6 URIs):

    +
      +
    • kogral://project/notes
    • +
    • kogral://project/decisions
    • +
    • kogral://project/guidelines
    • +
    • kogral://project/patterns
    • +
    • kogral://shared/guidelines
    • +
    • kogral://shared/patterns
    • +
    +
  4. +
  5. +

    Prompts (2):

    +
      +
    • kb/summarize_project: Generate project summary
    • +
    • kb/find_related: Find related nodes
    • +
    +
  6. +
+

Integration: Claude Code via ~/.config/claude/config.json

+

NuShell Scripts

+

Purpose: Automation and maintenance tasks.

+

Scripts (6):

+
    +
  • kb-sync.nu: Filesystem ↔ SurrealDB sync
  • +
  • kb-backup.nu: Archive knowledge base
  • +
  • kb-reindex.nu: Rebuild embeddings
  • +
  • kb-import-logseq.nu: Import from Logseq
  • +
  • kb-export-logseq.nu: Export to Logseq
  • +
  • kb-stats.nu: Graph statistics
  • +
+

Features:

+
    +
  • Colored output
  • +
  • Dry-run modes
  • +
  • Progress indicators
  • +
  • Error handling
  • +
+

Core Library (kb-core)

+

Models

+

Graph:

+
#![allow(unused)]
+fn main() {
+pub struct Graph {
+    pub name: String,
+    pub version: String,
+    pub nodes: HashMap<String, Node>,  // ID → Node
+    pub edges: Vec<Edge>,
+    pub metadata: HashMap<String, Value>,
+}
+}
+

Node:

+
#![allow(unused)]
+fn main() {
+pub struct Node {
+    pub id: String,
+    pub node_type: NodeType,
+    pub title: String,
+    pub content: String,
+    pub tags: Vec<String>,
+    pub status: NodeStatus,
+    pub created: DateTime<Utc>,
+    pub modified: DateTime<Utc>,
+    // ... relationships, metadata
+}
+}
+

Edge:

+
#![allow(unused)]
+fn main() {
+pub struct Edge {
+    pub from: String,
+    pub to: String,
+    pub relation: EdgeType,
+    pub strength: f32,
+    pub created: DateTime<Utc>,
+}
+}
+

Storage Trait

+
#![allow(unused)]
+fn main() {
+#[async_trait]
+pub trait Storage: Send + Sync {
+    async fn save_graph(&self, graph: &Graph) -> Result<()>;
+    async fn load_graph(&self, name: &str) -> Result<Graph>;
+    async fn delete_graph(&self, name: &str) -> Result<()>;
+    async fn list_graphs(&self) -> Result<Vec<String>>;
+}
+}
+

Implementations:

+
    +
  1. FilesystemStorage: Git-friendly markdown files
  2. +
  3. MemoryStorage: In-memory with DashMap
  4. +
  5. SurrealDbStorage: Scalable graph database
  6. +
+

Embedding Provider Trait

+
#![allow(unused)]
+fn main() {
+#[async_trait]
+pub trait EmbeddingProvider: Send + Sync {
+    async fn embed(&self, texts: Vec<String>) -> Result<Vec<Vec<f32>>>;
+    fn dimensions(&self) -> usize;
+    fn model_name(&self) -> &str;
+}
+}
+

Implementations:

+
    +
  1. FastEmbedProvider: Local fastembed
  2. +
  3. RigEmbeddingProvider: OpenAI, Claude, Ollama (via rig-core)
  4. +
+

Parser

+

Input: Markdown file with YAML frontmatter

+

Output: Node struct

+

Features:

+
    +
  • YAML frontmatter extraction
  • +
  • Markdown body parsing
  • +
  • Wikilink detection ([[linked-note]])
  • +
  • Code reference parsing (@file.rs:42)
  • +
+

Example:

+
---
+id: note-123
+type: note
+title: My Note
+tags: [rust, async]
+---
+
+# My Note
+
+Content with [[other-note]] and @src/main.rs:10
+
+

+
#![allow(unused)]
+fn main() {
+Node {
+    id: "note-123",
+    node_type: NodeType::Note,
+    title: "My Note",
+    content: "Content with [[other-note]] and @src/main.rs:10",
+    tags: vec!["rust", "async"],
+    // ... parsed wikilinks, code refs
+}
+}
+

Configuration System

+

Nickel Schema

+
# schemas/kb-config.ncl
+{
+  KbConfig = {
+    graph | GraphConfig,
+    storage | StorageConfig,
+    embeddings | EmbeddingConfig,
+    templates | TemplateConfig,
+    query | QueryConfig,
+    mcp | McpConfig,
+    sync | SyncConfig,
+  },
+}
+
+

Loading Process

+
User writes: .kogral/config.ncl
+    ↓ [nickel export --format json]
+JSON intermediate
+    ↓ [serde_json::from_str]
+KbConfig struct (Rust)
+    ↓
+Runtime behavior
+
+

Double Validation:

+
    +
  1. Nickel contracts: Type-safe, enum validation
  2. +
  3. Serde deserialization: Rust type checking
  4. +
+

Benefits:

+
    +
  • Errors caught at export time
  • +
  • Runtime guaranteed valid config
  • +
  • Self-documenting schemas
  • +
+

Storage Architecture

+

Hybrid Strategy

+

Local Graph (per project):

+
    +
  • Storage: Filesystem (.kogral/ directory)
  • +
  • Format: Markdown + YAML frontmatter
  • +
  • Version control: Git
  • +
  • Scope: Project-specific knowledge
  • +
+

Shared Graph (organization):

+
    +
  • Storage: SurrealDB (or synced filesystem)
  • +
  • Format: Same markdown (for compatibility)
  • +
  • Version control: Optional
  • +
  • Scope: Organization-wide guidelines
  • +
+

Sync:

+
Filesystem (.kogral/)
+    ↕ [bidirectional sync]
+SurrealDB (central)
+
+

File Layout

+
.kogral/
+├── config.toml              # Graph metadata
+├── notes/
+│   ├── async-patterns.md    # Individual note
+│   └── error-handling.md
+├── decisions/
+│   ├── 0001-use-rust.md     # ADR format
+│   └── 0002-surrealdb.md
+├── guidelines/
+│   ├── rust-errors.md       # Project guideline
+│   └── testing.md
+├── patterns/
+│   └── repository.md
+└── journal/
+    ├── 2026-01-17.md        # Daily journal
+    └── 2026-01-18.md
+
+

Query Engine

+ +
#![allow(unused)]
+fn main() {
+let results = graph.nodes.values()
+    .filter(|node| {
+        node.title.contains(&query) ||
+        node.content.contains(&query) ||
+        node.tags.iter().any(|tag| tag.contains(&query))
+    })
+    .collect();
+}
+ +
#![allow(unused)]
+fn main() {
+let query_embedding = embeddings.embed(vec![query]).await?;
+let mut scored: Vec<_> = graph.nodes.values()
+    .filter_map(|node| {
+        let node_embedding = node.embedding.as_ref()?;
+        let similarity = cosine_similarity(&query_embedding[0], node_embedding);
+        (similarity >= threshold).then_some((node, similarity))
+    })
+    .collect();
+scored.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap());
+}
+

Cross-Graph Query

+
#![allow(unused)]
+fn main() {
+// Query both project and shared graphs
+let project_results = project_graph.search(&query).await?;
+let shared_results = shared_graph.search(&query).await?;
+
+// Merge with deduplication
+let combined = merge_results(project_results, shared_results);
+}
+

MCP Protocol Flow

+
Claude Code                kb-mcp                    kb-core
+    │                         │                         │
+    ├─ JSON-RPC request ───→ │                         │
+    │  kb/search              │                         │
+    │  {"query": "rust"}      │                         │
+    │                         ├─ search() ──────────→  │
+    │                         │                         │
+    │                         │                    Query engine
+    │                         │                    Text + semantic
+    │                         │                         │
+    │                         │ ←──── results ─────────┤
+    │                         │                         │
+    │ ←─ JSON-RPC response ──┤                         │
+    │  {"results": [...]}     │                         │
+
+

Template System

+

Engine: Tera (Jinja2-like)

+

Templates:

+
    +
  1. +

    Document Templates (6):

    +
      +
    • note.md.tera
    • +
    • decision.md.tera
    • +
    • guideline.md.tera
    • +
    • pattern.md.tera
    • +
    • journal.md.tera
    • +
    • execution.md.tera
    • +
    +
  2. +
  3. +

    Export Templates (4):

    +
      +
    • logseq-page.md.tera
    • +
    • logseq-journal.md.tera
    • +
    • summary.md.tera
    • +
    • graph.json.tera
    • +
    +
  4. +
+

Usage:

+
#![allow(unused)]
+fn main() {
+let mut tera = Tera::new("templates/**/*.tera")?;
+let rendered = tera.render("note.md.tera", &context)?;
+}
+

Error Handling

+

Strategy: thiserror for structured errors

+
#![allow(unused)]
+fn main() {
+#[derive(Error, Debug)]
+pub enum KbError {
+    #[error("Storage error: {0}")]
+    Storage(String),
+
+    #[error("Node not found: {0}")]
+    NodeNotFound(String),
+
+    #[error("Configuration error: {0}")]
+    Config(String),
+
+    #[error("Parse error: {0}")]
+    Parse(String),
+
+    #[error("Embedding error: {0}")]
+    Embedding(String),
+}
+}
+

Propagation: ? operator throughout

+

Testing Strategy

+

Unit Tests: Per module (models, parser, storage)

+

Integration Tests: Full workflow (add → save → load → query)

+

Test Coverage:

+
    +
  • kb-core: 48 tests
  • +
  • kb-mcp: 5 tests
  • +
  • Total: 56 tests
  • +
+

Test Data: Fixtures in tests/fixtures/

+

Performance Considerations

+

Node Lookup: O(1) via HashMap

+

Semantic Search: O(n) with early termination (threshold filter)

+

Storage:

+
    +
  • Filesystem: Lazy loading (load on demand)
  • +
  • Memory: Full graph in RAM
  • +
  • SurrealDB: Query optimization (indexes)
  • +
+

Embeddings:

+
    +
  • Cache embeddings in node metadata
  • +
  • Batch processing (configurable batch size)
  • +
  • Async generation (non-blocking)
  • +
+

Security

+

No unsafe code: #![forbid(unsafe_code)]

+

Input validation:

+
    +
  • Nickel contracts validate config
  • +
  • serde validates JSON
  • +
  • Custom validation for user input
  • +
+

File operations:

+
    +
  • Path sanitization (no ../ traversal)
  • +
  • Permissions checking
  • +
  • Atomic writes (temp file + rename)
  • +
+

Scalability

+

Small Projects (< 1000 nodes):

+
    +
  • Filesystem storage
  • +
  • In-memory search
  • +
  • Local embeddings (fastembed)
  • +
+

Medium Projects (1000-10,000 nodes):

+
    +
  • Filesystem + SurrealDB sync
  • +
  • Semantic search with caching
  • +
  • Cloud embeddings (OpenAI/Claude)
  • +
+

Large Organizations (> 10,000 nodes):

+
    +
  • SurrealDB primary
  • +
  • Distributed embeddings
  • +
  • Multi-graph federation
  • +
+

Next Steps

+ + +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/architecture/storage-architecture.html b/docs/book/architecture/storage-architecture.html new file mode 100644 index 0000000..33e0ab9 --- /dev/null +++ b/docs/book/architecture/storage-architecture.html @@ -0,0 +1,227 @@ + + + + + + Storage Architecture - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Storage Architecture

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/ayu-highlight.css b/docs/book/ayu-highlight.css new file mode 100644 index 0000000..32c9432 --- /dev/null +++ b/docs/book/ayu-highlight.css @@ -0,0 +1,78 @@ +/* +Based off of the Ayu theme +Original by Dempfi (https://github.com/dempfi/ayu) +*/ + +.hljs { + display: block; + overflow-x: auto; + background: #191f26; + color: #e6e1cf; +} + +.hljs-comment, +.hljs-quote { + color: #5c6773; + font-style: italic; +} + +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-attr, +.hljs-regexp, +.hljs-link, +.hljs-selector-id, +.hljs-selector-class { + color: #ff7733; +} + +.hljs-number, +.hljs-meta, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #ffee99; +} + +.hljs-string, +.hljs-bullet { + color: #b8cc52; +} + +.hljs-title, +.hljs-built_in, +.hljs-section { + color: #ffb454; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-symbol { + color: #ff7733; +} + +.hljs-name { + color: #36a3d9; +} + +.hljs-tag { + color: #00568d; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-addition { + color: #91b362; +} + +.hljs-deletion { + color: #d96c75; +} diff --git a/docs/book/book.js b/docs/book/book.js new file mode 100644 index 0000000..5df2096 --- /dev/null +++ b/docs/book/book.js @@ -0,0 +1,818 @@ +'use strict'; + +/* global default_theme, default_dark_theme, default_light_theme, hljs, ClipboardJS */ + +// Fix back button cache problem +window.onunload = function() { }; + +// Global variable, shared between modules +function playground_text(playground, hidden = true) { + const code_block = playground.querySelector('code'); + + if (window.ace && code_block.classList.contains('editable')) { + const editor = window.ace.edit(code_block); + return editor.getValue(); + } else if (hidden) { + return code_block.textContent; + } else { + return code_block.innerText; + } +} + +(function codeSnippets() { + function fetch_with_timeout(url, options, timeout = 6000) { + return Promise.race([ + fetch(url, options), + new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout)), + ]); + } + + const playgrounds = Array.from(document.querySelectorAll('.playground')); + if (playgrounds.length > 0) { + fetch_with_timeout('https://play.rust-lang.org/meta/crates', { + headers: { + 'Content-Type': 'application/json', + }, + method: 'POST', + mode: 'cors', + }) + .then(response => response.json()) + .then(response => { + // get list of crates available in the rust playground + const playground_crates = response.crates.map(item => item['id']); + playgrounds.forEach(block => handle_crate_list_update(block, playground_crates)); + }); + } + + function handle_crate_list_update(playground_block, playground_crates) { + // update the play buttons after receiving the response + update_play_button(playground_block, playground_crates); + + // and install on change listener to dynamically update ACE editors + if (window.ace) { + const code_block = playground_block.querySelector('code'); + if (code_block.classList.contains('editable')) { + const editor = window.ace.edit(code_block); + editor.addEventListener('change', () => { + update_play_button(playground_block, playground_crates); + }); + // add Ctrl-Enter command to execute rust code + editor.commands.addCommand({ + name: 'run', + bindKey: { + win: 'Ctrl-Enter', + mac: 'Ctrl-Enter', + }, + exec: _editor => run_rust_code(playground_block), + }); + } + } + } + + // updates the visibility of play button based on `no_run` class and + // used crates vs ones available on https://play.rust-lang.org + function update_play_button(pre_block, playground_crates) { + const play_button = pre_block.querySelector('.play-button'); + + // skip if code is `no_run` + if (pre_block.querySelector('code').classList.contains('no_run')) { + play_button.classList.add('hidden'); + return; + } + + // get list of `extern crate`'s from snippet + const txt = playground_text(pre_block); + const re = /extern\s+crate\s+([a-zA-Z_0-9]+)\s*;/g; + const snippet_crates = []; + let item; + // eslint-disable-next-line no-cond-assign + while (item = re.exec(txt)) { + snippet_crates.push(item[1]); + } + + // check if all used crates are available on play.rust-lang.org + const all_available = snippet_crates.every(function(elem) { + return playground_crates.indexOf(elem) > -1; + }); + + if (all_available) { + play_button.classList.remove('hidden'); + } else { + play_button.classList.add('hidden'); + } + } + + function run_rust_code(code_block) { + let result_block = code_block.querySelector('.result'); + if (!result_block) { + result_block = document.createElement('code'); + result_block.className = 'result hljs language-bash'; + + code_block.append(result_block); + } + + const text = playground_text(code_block); + const classes = code_block.querySelector('code').classList; + let edition = '2015'; + classes.forEach(className => { + if (className.startsWith('edition')) { + edition = className.slice(7); + } + }); + const params = { + version: 'stable', + optimize: '0', + code: text, + edition: edition, + }; + + if (text.indexOf('#![feature') !== -1) { + params.version = 'nightly'; + } + + result_block.innerText = 'Running...'; + + fetch_with_timeout('https://play.rust-lang.org/evaluate.json', { + headers: { + 'Content-Type': 'application/json', + }, + method: 'POST', + mode: 'cors', + body: JSON.stringify(params), + }) + .then(response => response.json()) + .then(response => { + if (response.result.trim() === '') { + result_block.innerText = 'No output'; + result_block.classList.add('result-no-output'); + } else { + result_block.innerText = response.result; + result_block.classList.remove('result-no-output'); + } + }) + .catch(error => result_block.innerText = 'Playground Communication: ' + error.message); + } + + // Syntax highlighting Configuration + hljs.configure({ + tabReplace: ' ', // 4 spaces + languages: [], // Languages used for auto-detection + }); + + const code_nodes = Array + .from(document.querySelectorAll('code')) + // Don't highlight `inline code` blocks in headers. + .filter(function(node) { + return !node.parentElement.classList.contains('header'); + }); + + if (window.ace) { + // language-rust class needs to be removed for editable + // blocks or highlightjs will capture events + code_nodes + .filter(function(node) { + return node.classList.contains('editable'); + }) + .forEach(function(block) { + block.classList.remove('language-rust'); + }); + + code_nodes + .filter(function(node) { + return !node.classList.contains('editable'); + }) + .forEach(function(block) { + hljs.highlightBlock(block); + }); + } else { + code_nodes.forEach(function(block) { + hljs.highlightBlock(block); + }); + } + + // Adding the hljs class gives code blocks the color css + // even if highlighting doesn't apply + code_nodes.forEach(function(block) { + block.classList.add('hljs'); + }); + + Array.from(document.querySelectorAll('code.hljs')).forEach(function(block) { + + const lines = Array.from(block.querySelectorAll('.boring')); + // If no lines were hidden, return + if (!lines.length) { + return; + } + block.classList.add('hide-boring'); + + const buttons = document.createElement('div'); + buttons.className = 'buttons'; + buttons.innerHTML = ''; + + // add expand button + const pre_block = block.parentNode; + pre_block.insertBefore(buttons, pre_block.firstChild); + + pre_block.querySelector('.buttons').addEventListener('click', function(e) { + if (e.target.classList.contains('fa-eye')) { + e.target.classList.remove('fa-eye'); + e.target.classList.add('fa-eye-slash'); + e.target.title = 'Hide lines'; + e.target.setAttribute('aria-label', e.target.title); + + block.classList.remove('hide-boring'); + } else if (e.target.classList.contains('fa-eye-slash')) { + e.target.classList.remove('fa-eye-slash'); + e.target.classList.add('fa-eye'); + e.target.title = 'Show hidden lines'; + e.target.setAttribute('aria-label', e.target.title); + + block.classList.add('hide-boring'); + } + }); + }); + + if (window.playground_copyable) { + Array.from(document.querySelectorAll('pre code')).forEach(function(block) { + const pre_block = block.parentNode; + if (!pre_block.classList.contains('playground')) { + let buttons = pre_block.querySelector('.buttons'); + if (!buttons) { + buttons = document.createElement('div'); + buttons.className = 'buttons'; + pre_block.insertBefore(buttons, pre_block.firstChild); + } + + const clipButton = document.createElement('button'); + clipButton.className = 'clip-button'; + clipButton.title = 'Copy to clipboard'; + clipButton.setAttribute('aria-label', clipButton.title); + clipButton.innerHTML = ''; + + buttons.insertBefore(clipButton, buttons.firstChild); + } + }); + } + + // Process playground code blocks + Array.from(document.querySelectorAll('.playground')).forEach(function(pre_block) { + // Add play button + let buttons = pre_block.querySelector('.buttons'); + if (!buttons) { + buttons = document.createElement('div'); + buttons.className = 'buttons'; + pre_block.insertBefore(buttons, pre_block.firstChild); + } + + const runCodeButton = document.createElement('button'); + runCodeButton.className = 'fa fa-play play-button'; + runCodeButton.hidden = true; + runCodeButton.title = 'Run this code'; + runCodeButton.setAttribute('aria-label', runCodeButton.title); + + buttons.insertBefore(runCodeButton, buttons.firstChild); + runCodeButton.addEventListener('click', () => { + run_rust_code(pre_block); + }); + + if (window.playground_copyable) { + const copyCodeClipboardButton = document.createElement('button'); + copyCodeClipboardButton.className = 'clip-button'; + copyCodeClipboardButton.innerHTML = ''; + copyCodeClipboardButton.title = 'Copy to clipboard'; + copyCodeClipboardButton.setAttribute('aria-label', copyCodeClipboardButton.title); + + buttons.insertBefore(copyCodeClipboardButton, buttons.firstChild); + } + + const code_block = pre_block.querySelector('code'); + if (window.ace && code_block.classList.contains('editable')) { + const undoChangesButton = document.createElement('button'); + undoChangesButton.className = 'fa fa-history reset-button'; + undoChangesButton.title = 'Undo changes'; + undoChangesButton.setAttribute('aria-label', undoChangesButton.title); + + buttons.insertBefore(undoChangesButton, buttons.firstChild); + + undoChangesButton.addEventListener('click', function() { + const editor = window.ace.edit(code_block); + editor.setValue(editor.originalCode); + editor.clearSelection(); + }); + } + }); +})(); + +(function themes() { + const html = document.querySelector('html'); + const themeToggleButton = document.getElementById('theme-toggle'); + const themePopup = document.getElementById('theme-list'); + const themeColorMetaTag = document.querySelector('meta[name="theme-color"]'); + const themeIds = []; + themePopup.querySelectorAll('button.theme').forEach(function(el) { + themeIds.push(el.id); + }); + const stylesheets = { + ayuHighlight: document.querySelector('#ayu-highlight-css'), + tomorrowNight: document.querySelector('#tomorrow-night-css'), + highlight: document.querySelector('#highlight-css'), + }; + + function showThemes() { + themePopup.style.display = 'block'; + themeToggleButton.setAttribute('aria-expanded', true); + themePopup.querySelector('button#' + get_theme()).focus(); + } + + function updateThemeSelected() { + themePopup.querySelectorAll('.theme-selected').forEach(function(el) { + el.classList.remove('theme-selected'); + }); + const selected = get_saved_theme() ?? 'default_theme'; + let element = themePopup.querySelector('button#' + selected); + if (element === null) { + // Fall back in case there is no "Default" item. + element = themePopup.querySelector('button#' + get_theme()); + } + element.classList.add('theme-selected'); + } + + function hideThemes() { + themePopup.style.display = 'none'; + themeToggleButton.setAttribute('aria-expanded', false); + themeToggleButton.focus(); + } + + function get_saved_theme() { + let theme = null; + try { + theme = localStorage.getItem('mdbook-theme'); + } catch (e) { + // ignore error. + } + return theme; + } + + function delete_saved_theme() { + localStorage.removeItem('mdbook-theme'); + } + + function get_theme() { + const theme = get_saved_theme(); + if (theme === null || theme === undefined || !themeIds.includes(theme)) { + if (typeof default_dark_theme === 'undefined') { + // A customized index.hbs might not define this, so fall back to + // old behavior of determining the default on page load. + return default_theme; + } + return window.matchMedia('(prefers-color-scheme: dark)').matches + ? default_dark_theme + : default_light_theme; + } else { + return theme; + } + } + + let previousTheme = default_theme; + function set_theme(theme, store = true) { + let ace_theme; + + if (theme === 'coal' || theme === 'navy') { + stylesheets.ayuHighlight.disabled = true; + stylesheets.tomorrowNight.disabled = false; + stylesheets.highlight.disabled = true; + + ace_theme = 'ace/theme/tomorrow_night'; + } else if (theme === 'ayu') { + stylesheets.ayuHighlight.disabled = false; + stylesheets.tomorrowNight.disabled = true; + stylesheets.highlight.disabled = true; + ace_theme = 'ace/theme/tomorrow_night'; + } else { + stylesheets.ayuHighlight.disabled = true; + stylesheets.tomorrowNight.disabled = true; + stylesheets.highlight.disabled = false; + ace_theme = 'ace/theme/dawn'; + } + + setTimeout(function() { + themeColorMetaTag.content = getComputedStyle(document.documentElement).backgroundColor; + }, 1); + + if (window.ace && window.editors) { + window.editors.forEach(function(editor) { + editor.setTheme(ace_theme); + }); + } + + if (store) { + try { + localStorage.setItem('mdbook-theme', theme); + } catch (e) { + // ignore error. + } + } + + html.classList.remove(previousTheme); + html.classList.add(theme); + previousTheme = theme; + updateThemeSelected(); + } + + const query = window.matchMedia('(prefers-color-scheme: dark)'); + query.onchange = function() { + set_theme(get_theme(), false); + }; + + // Set theme. + set_theme(get_theme(), false); + + themeToggleButton.addEventListener('click', function() { + if (themePopup.style.display === 'block') { + hideThemes(); + } else { + showThemes(); + } + }); + + themePopup.addEventListener('click', function(e) { + let theme; + if (e.target.className === 'theme') { + theme = e.target.id; + } else if (e.target.parentElement.className === 'theme') { + theme = e.target.parentElement.id; + } else { + return; + } + if (theme === 'default_theme' || theme === null) { + delete_saved_theme(); + set_theme(get_theme(), false); + } else { + set_theme(theme); + } + }); + + themePopup.addEventListener('focusout', function(e) { + // e.relatedTarget is null in Safari and Firefox on macOS (see workaround below) + if (!!e.relatedTarget && + !themeToggleButton.contains(e.relatedTarget) && + !themePopup.contains(e.relatedTarget) + ) { + hideThemes(); + } + }); + + // Should not be needed, but it works around an issue on macOS & iOS: + // https://github.com/rust-lang/mdBook/issues/628 + document.addEventListener('click', function(e) { + if (themePopup.style.display === 'block' && + !themeToggleButton.contains(e.target) && + !themePopup.contains(e.target) + ) { + hideThemes(); + } + }); + + document.addEventListener('keydown', function(e) { + if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { + return; + } + if (!themePopup.contains(e.target)) { + return; + } + + let li; + switch (e.key) { + case 'Escape': + e.preventDefault(); + hideThemes(); + break; + case 'ArrowUp': + e.preventDefault(); + li = document.activeElement.parentElement; + if (li && li.previousElementSibling) { + li.previousElementSibling.querySelector('button').focus(); + } + break; + case 'ArrowDown': + e.preventDefault(); + li = document.activeElement.parentElement; + if (li && li.nextElementSibling) { + li.nextElementSibling.querySelector('button').focus(); + } + break; + case 'Home': + e.preventDefault(); + themePopup.querySelector('li:first-child button').focus(); + break; + case 'End': + e.preventDefault(); + themePopup.querySelector('li:last-child button').focus(); + break; + } + }); +})(); + +(function sidebar() { + const body = document.querySelector('body'); + const sidebar = document.getElementById('sidebar'); + const sidebarLinks = document.querySelectorAll('#sidebar a'); + const sidebarToggleButton = document.getElementById('sidebar-toggle'); + const sidebarToggleAnchor = document.getElementById('sidebar-toggle-anchor'); + const sidebarResizeHandle = document.getElementById('sidebar-resize-handle'); + let firstContact = null; + + function showSidebar() { + body.classList.remove('sidebar-hidden'); + body.classList.add('sidebar-visible'); + Array.from(sidebarLinks).forEach(function(link) { + link.setAttribute('tabIndex', 0); + }); + sidebarToggleButton.setAttribute('aria-expanded', true); + sidebar.setAttribute('aria-hidden', false); + try { + localStorage.setItem('mdbook-sidebar', 'visible'); + } catch (e) { + // Ignore error. + } + } + + function hideSidebar() { + body.classList.remove('sidebar-visible'); + body.classList.add('sidebar-hidden'); + Array.from(sidebarLinks).forEach(function(link) { + link.setAttribute('tabIndex', -1); + }); + sidebarToggleButton.setAttribute('aria-expanded', false); + sidebar.setAttribute('aria-hidden', true); + try { + localStorage.setItem('mdbook-sidebar', 'hidden'); + } catch (e) { + // Ignore error. + } + } + + // Toggle sidebar + sidebarToggleAnchor.addEventListener('change', function sidebarToggle() { + if (sidebarToggleAnchor.checked) { + const current_width = parseInt( + document.documentElement.style.getPropertyValue('--sidebar-target-width'), 10); + if (current_width < 150) { + document.documentElement.style.setProperty('--sidebar-target-width', '150px'); + } + showSidebar(); + } else { + hideSidebar(); + } + }); + + sidebarResizeHandle.addEventListener('mousedown', initResize, false); + + function initResize() { + window.addEventListener('mousemove', resize, false); + window.addEventListener('mouseup', stopResize, false); + body.classList.add('sidebar-resizing'); + } + function resize(e) { + let pos = e.clientX - sidebar.offsetLeft; + if (pos < 20) { + hideSidebar(); + } else { + if (body.classList.contains('sidebar-hidden')) { + showSidebar(); + } + pos = Math.min(pos, window.innerWidth - 100); + document.documentElement.style.setProperty('--sidebar-target-width', pos + 'px'); + } + } + //on mouseup remove windows functions mousemove & mouseup + function stopResize() { + body.classList.remove('sidebar-resizing'); + window.removeEventListener('mousemove', resize, false); + window.removeEventListener('mouseup', stopResize, false); + } + + document.addEventListener('touchstart', function(e) { + firstContact = { + x: e.touches[0].clientX, + time: Date.now(), + }; + }, { passive: true }); + + document.addEventListener('touchmove', function(e) { + if (!firstContact) { + return; + } + + const curX = e.touches[0].clientX; + const xDiff = curX - firstContact.x, + tDiff = Date.now() - firstContact.time; + + if (tDiff < 250 && Math.abs(xDiff) >= 150) { + if (xDiff >= 0 && firstContact.x < Math.min(document.body.clientWidth * 0.25, 300)) { + showSidebar(); + } else if (xDiff < 0 && curX < 300) { + hideSidebar(); + } + + firstContact = null; + } + }, { passive: true }); +})(); + +(function chapterNavigation() { + document.addEventListener('keydown', function(e) { + if (e.altKey || e.ctrlKey || e.metaKey) { + return; + } + if (window.search && window.search.hasFocus()) { + return; + } + const html = document.querySelector('html'); + + function next() { + const nextButton = document.querySelector('.nav-chapters.next'); + if (nextButton) { + window.location.href = nextButton.href; + } + } + function prev() { + const previousButton = document.querySelector('.nav-chapters.previous'); + if (previousButton) { + window.location.href = previousButton.href; + } + } + function showHelp() { + const container = document.getElementById('mdbook-help-container'); + const overlay = document.getElementById('mdbook-help-popup'); + container.style.display = 'flex'; + + // Clicking outside the popup will dismiss it. + const mouseHandler = event => { + if (overlay.contains(event.target)) { + return; + } + if (event.button !== 0) { + return; + } + event.preventDefault(); + event.stopPropagation(); + document.removeEventListener('mousedown', mouseHandler); + hideHelp(); + }; + + // Pressing esc will dismiss the popup. + const escapeKeyHandler = event => { + if (event.key === 'Escape') { + event.preventDefault(); + event.stopPropagation(); + document.removeEventListener('keydown', escapeKeyHandler, true); + hideHelp(); + } + }; + document.addEventListener('keydown', escapeKeyHandler, true); + document.getElementById('mdbook-help-container') + .addEventListener('mousedown', mouseHandler); + } + function hideHelp() { + document.getElementById('mdbook-help-container').style.display = 'none'; + } + + // Usually needs the Shift key to be pressed + switch (e.key) { + case '?': + e.preventDefault(); + showHelp(); + break; + } + + // Rest of the keys are only active when the Shift key is not pressed + if (e.shiftKey) { + return; + } + + switch (e.key) { + case 'ArrowRight': + e.preventDefault(); + if (html.dir === 'rtl') { + prev(); + } else { + next(); + } + break; + case 'ArrowLeft': + e.preventDefault(); + if (html.dir === 'rtl') { + next(); + } else { + prev(); + } + break; + } + }); +})(); + +(function clipboard() { + const clipButtons = document.querySelectorAll('.clip-button'); + + function hideTooltip(elem) { + elem.firstChild.innerText = ''; + elem.className = 'clip-button'; + } + + function showTooltip(elem, msg) { + elem.firstChild.innerText = msg; + elem.className = 'clip-button tooltipped'; + } + + const clipboardSnippets = new ClipboardJS('.clip-button', { + text: function(trigger) { + hideTooltip(trigger); + const playground = trigger.closest('pre'); + return playground_text(playground, false); + }, + }); + + Array.from(clipButtons).forEach(function(clipButton) { + clipButton.addEventListener('mouseout', function(e) { + hideTooltip(e.currentTarget); + }); + }); + + clipboardSnippets.on('success', function(e) { + e.clearSelection(); + showTooltip(e.trigger, 'Copied!'); + }); + + clipboardSnippets.on('error', function(e) { + showTooltip(e.trigger, 'Clipboard error!'); + }); +})(); + +(function scrollToTop() { + const menuTitle = document.querySelector('.menu-title'); + + menuTitle.addEventListener('click', function() { + document.scrollingElement.scrollTo({ top: 0, behavior: 'smooth' }); + }); +})(); + +(function controllMenu() { + const menu = document.getElementById('menu-bar'); + + (function controllPosition() { + let scrollTop = document.scrollingElement.scrollTop; + let prevScrollTop = scrollTop; + const minMenuY = -menu.clientHeight - 50; + // When the script loads, the page can be at any scroll (e.g. if you reforesh it). + menu.style.top = scrollTop + 'px'; + // Same as parseInt(menu.style.top.slice(0, -2), but faster + let topCache = menu.style.top.slice(0, -2); + menu.classList.remove('sticky'); + let stickyCache = false; // Same as menu.classList.contains('sticky'), but faster + document.addEventListener('scroll', function() { + scrollTop = Math.max(document.scrollingElement.scrollTop, 0); + // `null` means that it doesn't need to be updated + let nextSticky = null; + let nextTop = null; + const scrollDown = scrollTop > prevScrollTop; + const menuPosAbsoluteY = topCache - scrollTop; + if (scrollDown) { + nextSticky = false; + if (menuPosAbsoluteY > 0) { + nextTop = prevScrollTop; + } + } else { + if (menuPosAbsoluteY > 0) { + nextSticky = true; + } else if (menuPosAbsoluteY < minMenuY) { + nextTop = prevScrollTop + minMenuY; + } + } + if (nextSticky === true && stickyCache === false) { + menu.classList.add('sticky'); + stickyCache = true; + } else if (nextSticky === false && stickyCache === true) { + menu.classList.remove('sticky'); + stickyCache = false; + } + if (nextTop !== null) { + menu.style.top = nextTop + 'px'; + topCache = nextTop; + } + prevScrollTop = scrollTop; + }, { passive: true }); + })(); + (function controllBorder() { + function updateBorder() { + if (menu.offsetTop === 0) { + menu.classList.remove('bordered'); + } else { + menu.classList.add('bordered'); + } + } + updateBorder(); + document.addEventListener('scroll', updateBorder, { passive: true }); + })(); +})(); diff --git a/docs/book/book.toml b/docs/book/book.toml new file mode 100644 index 0000000..401b311 --- /dev/null +++ b/docs/book/book.toml @@ -0,0 +1,38 @@ +[book] +title = "KOGRAL Documentation" +authors = ["KOGRAL Team"] +description = "Complete documentation for KOGRAL - Git-native knowledge graphs for developer teams" +language = "en" +multilingual = false +src = "." + +[build] +build-dir = "book" +create-missing = true + +[output.html] +default-theme = "rust" +preferred-dark-theme = "navy" +git-repository-url = "https://github.com/your-org/knowledge-base" +edit-url-template = "https://github.com/your-org/knowledge-base/edit/main/docs/{path}" + +[output.html.print] +enable = true + +[output.html.fold] +enable = true +level = 1 + +[output.html.search] +enable = true +limit-results = 30 +teaser-word-count = 30 +use-boolean-and = true +boost-title = 2 +boost-hierarchy = 1 +boost-paragraph = 1 +expand = true +heading-split-level = 3 + +[preprocessor.links] +[preprocessor.index] diff --git a/docs/book/cli/commands.html b/docs/book/cli/commands.html new file mode 100644 index 0000000..b93bb4f --- /dev/null +++ b/docs/book/cli/commands.html @@ -0,0 +1,227 @@ + + + + + + Commands Reference - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Commands Reference

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/cli/overview.html b/docs/book/cli/overview.html new file mode 100644 index 0000000..e4fcb44 --- /dev/null +++ b/docs/book/cli/overview.html @@ -0,0 +1,227 @@ + + + + + + CLI Overview - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

CLI Overview

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/cli/workflows.html b/docs/book/cli/workflows.html new file mode 100644 index 0000000..cc558b0 --- /dev/null +++ b/docs/book/cli/workflows.html @@ -0,0 +1,227 @@ + + + + + + Workflows - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Workflows

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/clipboard.min.js b/docs/book/clipboard.min.js new file mode 100644 index 0000000..02c549e --- /dev/null +++ b/docs/book/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.4 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n + + + + + Examples - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Examples

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/config/graph-settings.html b/docs/book/config/graph-settings.html new file mode 100644 index 0000000..eb492de --- /dev/null +++ b/docs/book/config/graph-settings.html @@ -0,0 +1,227 @@ + + + + + + Graph Settings - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Graph Settings

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/config/inheritance.html b/docs/book/config/inheritance.html new file mode 100644 index 0000000..eb296bd --- /dev/null +++ b/docs/book/config/inheritance.html @@ -0,0 +1,227 @@ + + + + + + Inheritance - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Inheritance

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/config/nickel-schemas.html b/docs/book/config/nickel-schemas.html new file mode 100644 index 0000000..60e6fb8 --- /dev/null +++ b/docs/book/config/nickel-schemas.html @@ -0,0 +1,227 @@ + + + + + + Nickel Schemas - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Nickel Schemas

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/config/overview.html b/docs/book/config/overview.html new file mode 100644 index 0000000..f4d0366 --- /dev/null +++ b/docs/book/config/overview.html @@ -0,0 +1,227 @@ + + + + + + Configuration Overview - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Configuration Overview

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/contributing/development.html b/docs/book/contributing/development.html new file mode 100644 index 0000000..7757908 --- /dev/null +++ b/docs/book/contributing/development.html @@ -0,0 +1,227 @@ + + + + + + Development Setup - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Development Setup

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/contributing/standards.html b/docs/book/contributing/standards.html new file mode 100644 index 0000000..d04f9ba --- /dev/null +++ b/docs/book/contributing/standards.html @@ -0,0 +1,227 @@ + + + + + + Code Standards - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Code Standards

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/contributing/testing.html b/docs/book/contributing/testing.html new file mode 100644 index 0000000..40763d2 --- /dev/null +++ b/docs/book/contributing/testing.html @@ -0,0 +1,221 @@ + + + + + + Testing - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Keyboard shortcuts

+
+

Press or to navigate between chapters

+

Press S or / to search in the book

+

Press ? to show this help

+

Press Esc to hide this help

+
+
+
+
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Testing

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/docs/book/css/chrome.css b/docs/book/css/chrome.css new file mode 100644 index 0000000..360a653 --- /dev/null +++ b/docs/book/css/chrome.css @@ -0,0 +1,701 @@ +/* CSS for UI elements (a.k.a. chrome) */ + +html { + scrollbar-color: var(--scrollbar) var(--bg); +} +#searchresults a, +.content a:link, +a:visited, +a > .hljs { + color: var(--links); +} + +/* + body-container is necessary because mobile browsers don't seem to like + overflow-x on the body tag when there is a tag. +*/ +#body-container { + /* + This is used when the sidebar pushes the body content off the side of + the screen on small screens. Without it, dragging on mobile Safari + will want to reposition the viewport in a weird way. + */ + overflow-x: clip; +} + +/* Menu Bar */ + +#menu-bar, +#menu-bar-hover-placeholder { + z-index: 101; + margin: auto calc(0px - var(--page-padding)); +} +#menu-bar { + position: relative; + display: flex; + flex-wrap: wrap; + background-color: var(--bg); + border-block-end-color: var(--bg); + border-block-end-width: 1px; + border-block-end-style: solid; +} +#menu-bar.sticky, +#menu-bar-hover-placeholder:hover + #menu-bar, +#menu-bar:hover, +html.sidebar-visible #menu-bar { + position: -webkit-sticky; + position: sticky; + top: 0 !important; +} +#menu-bar-hover-placeholder { + position: sticky; + position: -webkit-sticky; + top: 0; + height: var(--menu-bar-height); +} +#menu-bar.bordered { + border-block-end-color: var(--table-border-color); +} +#menu-bar i, #menu-bar .icon-button { + position: relative; + padding: 0 8px; + z-index: 10; + line-height: var(--menu-bar-height); + cursor: pointer; + transition: color 0.5s; +} +@media only screen and (max-width: 420px) { + #menu-bar i, #menu-bar .icon-button { + padding: 0 5px; + } +} + +.icon-button { + border: none; + background: none; + padding: 0; + color: inherit; +} +.icon-button i { + margin: 0; +} + +.right-buttons { + margin: 0 15px; +} +.right-buttons a { + text-decoration: none; +} + +.left-buttons { + display: flex; + margin: 0 5px; +} +html:not(.js) .left-buttons button { + display: none; +} + +.menu-title { + display: inline-block; + font-weight: 200; + font-size: 2.4rem; + line-height: var(--menu-bar-height); + text-align: center; + margin: 0; + flex: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.menu-title { + cursor: pointer; +} + +.menu-bar, +.menu-bar:visited, +.nav-chapters, +.nav-chapters:visited, +.mobile-nav-chapters, +.mobile-nav-chapters:visited, +.menu-bar .icon-button, +.menu-bar a i { + color: var(--icons); +} + +.menu-bar i:hover, +.menu-bar .icon-button:hover, +.nav-chapters:hover, +.mobile-nav-chapters i:hover { + color: var(--icons-hover); +} + +/* Nav Icons */ + +.nav-chapters { + font-size: 2.5em; + text-align: center; + text-decoration: none; + + position: fixed; + top: 0; + bottom: 0; + margin: 0; + max-width: 150px; + min-width: 90px; + + display: flex; + justify-content: center; + align-content: center; + flex-direction: column; + + transition: color 0.5s, background-color 0.5s; +} + +.nav-chapters:hover { + text-decoration: none; + background-color: var(--theme-hover); + transition: background-color 0.15s, color 0.15s; +} + +.nav-wrapper { + margin-block-start: 50px; + display: none; +} + +.mobile-nav-chapters { + font-size: 2.5em; + text-align: center; + text-decoration: none; + width: 90px; + border-radius: 5px; + background-color: var(--sidebar-bg); +} + +/* Only Firefox supports flow-relative values */ +.previous { float: left; } +[dir=rtl] .previous { float: right; } + +/* Only Firefox supports flow-relative values */ +.next { + float: right; + right: var(--page-padding); +} +[dir=rtl] .next { + float: left; + right: unset; + left: var(--page-padding); +} + +/* Use the correct buttons for RTL layouts*/ +[dir=rtl] .previous i.fa-angle-left:before {content:"\f105";} +[dir=rtl] .next i.fa-angle-right:before { content:"\f104"; } + +@media only screen and (max-width: 1080px) { + .nav-wide-wrapper { display: none; } + .nav-wrapper { display: block; } +} + +/* sidebar-visible */ +@media only screen and (max-width: 1380px) { + #sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wide-wrapper { display: none; } + #sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wrapper { display: block; } +} + +/* Inline code */ + +:not(pre) > .hljs { + display: inline; + padding: 0.1em 0.3em; + border-radius: 3px; +} + +:not(pre):not(a) > .hljs { + color: var(--inline-code-color); + overflow-x: initial; +} + +a:hover > .hljs { + text-decoration: underline; +} + +pre { + position: relative; +} +pre > .buttons { + position: absolute; + z-index: 100; + right: 0px; + top: 2px; + margin: 0px; + padding: 2px 0px; + + color: var(--sidebar-fg); + cursor: pointer; + visibility: hidden; + opacity: 0; + transition: visibility 0.1s linear, opacity 0.1s linear; +} +pre:hover > .buttons { + visibility: visible; + opacity: 1 +} +pre > .buttons :hover { + color: var(--sidebar-active); + border-color: var(--icons-hover); + background-color: var(--theme-hover); +} +pre > .buttons i { + margin-inline-start: 8px; +} +pre > .buttons button { + cursor: inherit; + margin: 0px 5px; + padding: 4px 4px 3px 5px; + font-size: 23px; + + border-style: solid; + border-width: 1px; + border-radius: 4px; + border-color: var(--icons); + background-color: var(--theme-popup-bg); + transition: 100ms; + transition-property: color,border-color,background-color; + color: var(--icons); +} + +pre > .buttons button.clip-button { + padding: 2px 4px 0px 6px; +} +pre > .buttons button.clip-button::before { + /* clipboard image from octicons (https://github.com/primer/octicons/tree/v2.0.0) MIT license + */ + content: url('data:image/svg+xml,\ +\ +\ +'); + filter: var(--copy-button-filter); +} +pre > .buttons button.clip-button:hover::before { + filter: var(--copy-button-filter-hover); +} + +@media (pointer: coarse) { + pre > .buttons button { + /* On mobile, make it easier to tap buttons. */ + padding: 0.3rem 1rem; + } + + .sidebar-resize-indicator { + /* Hide resize indicator on devices with limited accuracy */ + display: none; + } +} +pre > code { + display: block; + padding: 1rem; +} + +/* FIXME: ACE editors overlap their buttons because ACE does absolute + positioning within the code block which breaks padding. The only solution I + can think of is to move the padding to the outer pre tag (or insert a div + wrapper), but that would require fixing a whole bunch of CSS rules. +*/ +.hljs.ace_editor { + padding: 0rem 0rem; +} + +pre > .result { + margin-block-start: 10px; +} + +/* Search */ + +#searchresults a { + text-decoration: none; +} + +mark { + border-radius: 2px; + padding-block-start: 0; + padding-block-end: 1px; + padding-inline-start: 3px; + padding-inline-end: 3px; + margin-block-start: 0; + margin-block-end: -1px; + margin-inline-start: -3px; + margin-inline-end: -3px; + background-color: var(--search-mark-bg); + transition: background-color 300ms linear; + cursor: pointer; +} + +mark.fade-out { + background-color: rgba(0,0,0,0) !important; + cursor: auto; +} + +.searchbar-outer { + margin-inline-start: auto; + margin-inline-end: auto; + max-width: var(--content-max-width); +} + +#searchbar { + width: 100%; + margin-block-start: 5px; + margin-block-end: 0; + margin-inline-start: auto; + margin-inline-end: auto; + padding: 10px 16px; + transition: box-shadow 300ms ease-in-out; + border: 1px solid var(--searchbar-border-color); + border-radius: 3px; + background-color: var(--searchbar-bg); + color: var(--searchbar-fg); +} +#searchbar:focus, +#searchbar.active { + box-shadow: 0 0 3px var(--searchbar-shadow-color); +} + +.searchresults-header { + font-weight: bold; + font-size: 1em; + padding-block-start: 18px; + padding-block-end: 0; + padding-inline-start: 5px; + padding-inline-end: 0; + color: var(--searchresults-header-fg); +} + +.searchresults-outer { + margin-inline-start: auto; + margin-inline-end: auto; + max-width: var(--content-max-width); + border-block-end: 1px dashed var(--searchresults-border-color); +} + +ul#searchresults { + list-style: none; + padding-inline-start: 20px; +} +ul#searchresults li { + margin: 10px 0px; + padding: 2px; + border-radius: 2px; +} +ul#searchresults li.focus { + background-color: var(--searchresults-li-bg); +} +ul#searchresults span.teaser { + display: block; + clear: both; + margin-block-start: 5px; + margin-block-end: 0; + margin-inline-start: 20px; + margin-inline-end: 0; + font-size: 0.8em; +} +ul#searchresults span.teaser em { + font-weight: bold; + font-style: normal; +} + +/* Sidebar */ + +.sidebar { + position: fixed; + left: 0; + top: 0; + bottom: 0; + width: var(--sidebar-width); + font-size: 0.875em; + box-sizing: border-box; + -webkit-overflow-scrolling: touch; + overscroll-behavior-y: contain; + background-color: var(--sidebar-bg); + color: var(--sidebar-fg); +} +.sidebar-iframe-inner { + --padding: 10px; + + background-color: var(--sidebar-bg); + padding: var(--padding); + margin: 0; + font-size: 1.4rem; + color: var(--sidebar-fg); + min-height: calc(100vh - var(--padding) * 2); +} +.sidebar-iframe-outer { + border: none; + height: 100%; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; +} +[dir=rtl] .sidebar { left: unset; right: 0; } +.sidebar-resizing { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} +html:not(.sidebar-resizing) .sidebar { + transition: transform 0.3s; /* Animation: slide away */ +} +.sidebar code { + line-height: 2em; +} +.sidebar .sidebar-scrollbox { + overflow-y: auto; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + padding: 10px 10px; +} +.sidebar .sidebar-resize-handle { + position: absolute; + cursor: col-resize; + width: 0; + right: calc(var(--sidebar-resize-indicator-width) * -1); + top: 0; + bottom: 0; + display: flex; + align-items: center; +} + +.sidebar-resize-handle .sidebar-resize-indicator { + width: 100%; + height: 16px; + color: var(--icons); + margin-inline-start: var(--sidebar-resize-indicator-space); + display: flex; + align-items: center; + justify-content: flex-start; +} +.sidebar-resize-handle .sidebar-resize-indicator::before { + content: ""; + width: 2px; + height: 12px; + border-left: dotted 2px currentColor; +} +.sidebar-resize-handle .sidebar-resize-indicator::after { + content: ""; + width: 2px; + height: 16px; + border-left: dotted 2px currentColor; +} + +[dir=rtl] .sidebar .sidebar-resize-handle { + left: calc(var(--sidebar-resize-indicator-width) * -1); + right: unset; +} +.js .sidebar .sidebar-resize-handle { + cursor: col-resize; + width: calc(var(--sidebar-resize-indicator-width) - var(--sidebar-resize-indicator-space)); +} +/* sidebar-hidden */ +#sidebar-toggle-anchor:not(:checked) ~ .sidebar { + transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width))); + z-index: -1; +} +[dir=rtl] #sidebar-toggle-anchor:not(:checked) ~ .sidebar { + transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width))); +} +.sidebar::-webkit-scrollbar { + background: var(--sidebar-bg); +} +.sidebar::-webkit-scrollbar-thumb { + background: var(--scrollbar); +} + +/* sidebar-visible */ +#sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width))); +} +[dir=rtl] #sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width))); +} +@media only screen and (min-width: 620px) { + #sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: none; + margin-inline-start: calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width)); + } + [dir=rtl] #sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: none; + } +} + +.chapter { + list-style: none outside none; + padding-inline-start: 0; + line-height: 2.2em; +} + +.chapter ol { + width: 100%; +} + +.chapter li { + display: flex; + color: var(--sidebar-non-existant); +} +.chapter li a { + display: block; + padding: 0; + text-decoration: none; + color: var(--sidebar-fg); +} + +.chapter li a:hover { + color: var(--sidebar-active); +} + +.chapter li a.active { + color: var(--sidebar-active); +} + +.chapter li > a.toggle { + cursor: pointer; + display: block; + margin-inline-start: auto; + padding: 0 10px; + user-select: none; + opacity: 0.68; +} + +.chapter li > a.toggle div { + transition: transform 0.5s; +} + +/* collapse the section */ +.chapter li:not(.expanded) + li > ol { + display: none; +} + +.chapter li.chapter-item { + line-height: 1.5em; + margin-block-start: 0.6em; +} + +.chapter li.expanded > a.toggle div { + transform: rotate(90deg); +} + +.spacer { + width: 100%; + height: 3px; + margin: 5px 0px; +} +.chapter .spacer { + background-color: var(--sidebar-spacer); +} + +@media (-moz-touch-enabled: 1), (pointer: coarse) { + .chapter li a { padding: 5px 0; } + .spacer { margin: 10px 0; } +} + +.section { + list-style: none outside none; + padding-inline-start: 20px; + line-height: 1.9em; +} + +/* Theme Menu Popup */ + +.theme-popup { + position: absolute; + left: 10px; + top: var(--menu-bar-height); + z-index: 1000; + border-radius: 4px; + font-size: 0.7em; + color: var(--fg); + background: var(--theme-popup-bg); + border: 1px solid var(--theme-popup-border); + margin: 0; + padding: 0; + list-style: none; + display: none; + /* Don't let the children's background extend past the rounded corners. */ + overflow: hidden; +} +[dir=rtl] .theme-popup { left: unset; right: 10px; } +.theme-popup .default { + color: var(--icons); +} +.theme-popup .theme { + width: 100%; + border: 0; + margin: 0; + padding: 2px 20px; + line-height: 25px; + white-space: nowrap; + text-align: start; + cursor: pointer; + color: inherit; + background: inherit; + font-size: inherit; +} +.theme-popup .theme:hover { + background-color: var(--theme-hover); +} + +.theme-selected::before { + display: inline-block; + content: "✓"; + margin-inline-start: -14px; + width: 14px; +} + +/* The container for the help popup that covers the whole window. */ +#mdbook-help-container { + /* Position and size for the whole window. */ + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + /* This uses flex layout (which is set in book.js), and centers the popup + in the window.*/ + display: none; + align-items: center; + justify-content: center; + z-index: 1000; + /* Dim out the book while the popup is visible. */ + background: var(--overlay-bg); +} + +/* The popup help box. */ +#mdbook-help-popup { + box-shadow: 0 4px 24px rgba(0,0,0,0.15); + min-width: 300px; + max-width: 500px; + width: 100%; + box-sizing: border-box; + display: flex; + flex-direction: column; + align-items: center; + background-color: var(--bg); + color: var(--fg); + border-width: 1px; + border-color: var(--theme-popup-border); + border-style: solid; + border-radius: 8px; + padding: 10px; +} + +.mdbook-help-title { + text-align: center; + /* mdbook's margin for h2 is way too large. */ + margin: 10px; +} diff --git a/docs/book/css/general.css b/docs/book/css/general.css new file mode 100644 index 0000000..9946cfc --- /dev/null +++ b/docs/book/css/general.css @@ -0,0 +1,279 @@ +/* Base styles and content styles */ + +:root { + /* Browser default font-size is 16px, this way 1 rem = 10px */ + font-size: 62.5%; + color-scheme: var(--color-scheme); +} + +html { + font-family: "Open Sans", sans-serif; + color: var(--fg); + background-color: var(--bg); + text-size-adjust: none; + -webkit-text-size-adjust: none; +} + +body { + margin: 0; + font-size: 1.6rem; + overflow-x: hidden; +} + +code { + font-family: var(--mono-font) !important; + font-size: var(--code-font-size); + direction: ltr !important; +} + +/* make long words/inline code not x overflow */ +main { + overflow-wrap: break-word; +} + +/* make wide tables scroll if they overflow */ +.table-wrapper { + overflow-x: auto; +} + +/* Don't change font size in headers. */ +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + font-size: unset; +} + +.left { float: left; } +.right { float: right; } +.boring { opacity: 0.6; } +.hide-boring .boring { display: none; } +.hidden { display: none !important; } + +h2, h3 { margin-block-start: 2.5em; } +h4, h5 { margin-block-start: 2em; } + +.header + .header h3, +.header + .header h4, +.header + .header h5 { + margin-block-start: 1em; +} + +h1:target::before, +h2:target::before, +h3:target::before, +h4:target::before, +h5:target::before, +h6:target::before { + display: inline-block; + content: "»"; + margin-inline-start: -30px; + width: 30px; +} + +/* This is broken on Safari as of version 14, but is fixed + in Safari Technology Preview 117 which I think will be Safari 14.2. + https://bugs.webkit.org/show_bug.cgi?id=218076 +*/ +:target { + /* Safari does not support logical properties */ + scroll-margin-top: calc(var(--menu-bar-height) + 0.5em); +} + +.page { + outline: 0; + padding: 0 var(--page-padding); + margin-block-start: calc(0px - var(--menu-bar-height)); /* Compensate for the #menu-bar-hover-placeholder */ +} +.page-wrapper { + box-sizing: border-box; + background-color: var(--bg); +} +.no-js .page-wrapper, +.js:not(.sidebar-resizing) .page-wrapper { + transition: margin-left 0.3s ease, transform 0.3s ease; /* Animation: slide away */ +} +[dir=rtl] .js:not(.sidebar-resizing) .page-wrapper { + transition: margin-right 0.3s ease, transform 0.3s ease; /* Animation: slide away */ +} + +.content { + overflow-y: auto; + padding: 0 5px 50px 5px; +} +.content main { + margin-inline-start: auto; + margin-inline-end: auto; + max-width: var(--content-max-width); +} +.content p { line-height: 1.45em; } +.content ol { line-height: 1.45em; } +.content ul { line-height: 1.45em; } +.content a { text-decoration: none; } +.content a:hover { text-decoration: underline; } +.content img, .content video { max-width: 100%; } +.content .header:link, +.content .header:visited { + color: var(--fg); +} +.content .header:link, +.content .header:visited:hover { + text-decoration: none; +} + +table { + margin: 0 auto; + border-collapse: collapse; +} +table td { + padding: 3px 20px; + border: 1px var(--table-border-color) solid; +} +table thead { + background: var(--table-header-bg); +} +table thead td { + font-weight: 700; + border: none; +} +table thead th { + padding: 3px 20px; +} +table thead tr { + border: 1px var(--table-header-bg) solid; +} +/* Alternate background colors for rows */ +table tbody tr:nth-child(2n) { + background: var(--table-alternate-bg); +} + + +blockquote { + margin: 20px 0; + padding: 0 20px; + color: var(--fg); + background-color: var(--quote-bg); + border-block-start: .1em solid var(--quote-border); + border-block-end: .1em solid var(--quote-border); +} + +.warning { + margin: 20px; + padding: 0 20px; + border-inline-start: 2px solid var(--warning-border); +} + +.warning:before { + position: absolute; + width: 3rem; + height: 3rem; + margin-inline-start: calc(-1.5rem - 21px); + content: "ⓘ"; + text-align: center; + background-color: var(--bg); + color: var(--warning-border); + font-weight: bold; + font-size: 2rem; +} + +blockquote .warning:before { + background-color: var(--quote-bg); +} + +kbd { + background-color: var(--table-border-color); + border-radius: 4px; + border: solid 1px var(--theme-popup-border); + box-shadow: inset 0 -1px 0 var(--theme-hover); + display: inline-block; + font-size: var(--code-font-size); + font-family: var(--mono-font); + line-height: 10px; + padding: 4px 5px; + vertical-align: middle; +} + +sup { + /* Set the line-height for superscript and footnote references so that there + isn't an awkward space appearing above lines that contain the footnote. + + See https://github.com/rust-lang/mdBook/pull/2443#discussion_r1813773583 + for an explanation. + */ + line-height: 0; +} + +.footnote-definition { + font-size: 0.9em; +} +/* The default spacing for a list is a little too large. */ +.footnote-definition ul, +.footnote-definition ol { + padding-left: 20px; +} +.footnote-definition > li { + /* Required to position the ::before target */ + position: relative; +} +.footnote-definition > li:target { + scroll-margin-top: 50vh; +} +.footnote-reference:target { + scroll-margin-top: 50vh; +} +/* Draws a border around the footnote (including the marker) when it is selected. + TODO: If there are multiple linkbacks, highlight which one you just came + from so you know which one to click. +*/ +.footnote-definition > li:target::before { + border: 2px solid var(--footnote-highlight); + border-radius: 6px; + position: absolute; + top: -8px; + right: -8px; + bottom: -8px; + left: -32px; + pointer-events: none; + content: ""; +} +/* Pulses the footnote reference so you can quickly see where you left off reading. + This could use some improvement. +*/ +@media not (prefers-reduced-motion) { + .footnote-reference:target { + animation: fn-highlight 0.8s; + border-radius: 2px; + } + + @keyframes fn-highlight { + from { + background-color: var(--footnote-highlight); + } + } +} + +.tooltiptext { + position: absolute; + visibility: hidden; + color: #fff; + background-color: #333; + transform: translateX(-50%); /* Center by moving tooltip 50% of its width left */ + left: -8px; /* Half of the width of the icon */ + top: -35px; + font-size: 0.8em; + text-align: center; + border-radius: 6px; + padding: 5px 8px; + margin: 5px; + z-index: 1000; +} +.tooltipped .tooltiptext { + visibility: visible; +} + +.chapter li.part-title { + color: var(--sidebar-fg); + margin: 5px 0px; + font-weight: bold; +} + +.result-no-output { + font-style: italic; +} diff --git a/docs/book/css/print.css b/docs/book/css/print.css new file mode 100644 index 0000000..80ec3a5 --- /dev/null +++ b/docs/book/css/print.css @@ -0,0 +1,50 @@ + +#sidebar, +#menu-bar, +.nav-chapters, +.mobile-nav-chapters { + display: none; +} + +#page-wrapper.page-wrapper { + transform: none !important; + margin-inline-start: 0px; + overflow-y: initial; +} + +#content { + max-width: none; + margin: 0; + padding: 0; +} + +.page { + overflow-y: initial; +} + +code { + direction: ltr !important; +} + +pre > .buttons { + z-index: 2; +} + +a, a:visited, a:active, a:hover { + color: #4183c4; + text-decoration: none; +} + +h1, h2, h3, h4, h5, h6 { + page-break-inside: avoid; + page-break-after: avoid; +} + +pre, code { + page-break-inside: avoid; + white-space: pre-wrap; +} + +.fa { + display: none !important; +} diff --git a/docs/book/css/variables.css b/docs/book/css/variables.css new file mode 100644 index 0000000..5742d24 --- /dev/null +++ b/docs/book/css/variables.css @@ -0,0 +1,330 @@ + +/* Globals */ + +:root { + --sidebar-target-width: 300px; + --sidebar-width: min(var(--sidebar-target-width), 80vw); + --sidebar-resize-indicator-width: 8px; + --sidebar-resize-indicator-space: 2px; + --page-padding: 15px; + --content-max-width: 750px; + --menu-bar-height: 50px; + --mono-font: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace; + --code-font-size: 0.875em; /* please adjust the ace font size accordingly in editor.js */ +} + +/* Themes */ + +.ayu { + --bg: hsl(210, 25%, 8%); + --fg: #c5c5c5; + + --sidebar-bg: #14191f; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #5c6773; + --sidebar-active: #ffb454; + --sidebar-spacer: #2d334f; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #b7b9cc; + + --links: #0096cf; + + --inline-code-color: #ffb454; + + --theme-popup-bg: #14191f; + --theme-popup-border: #5c6773; + --theme-hover: #191f26; + + --quote-bg: hsl(226, 15%, 17%); + --quote-border: hsl(226, 15%, 22%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(210, 25%, 13%); + --table-header-bg: hsl(210, 25%, 28%); + --table-alternate-bg: hsl(210, 25%, 11%); + + --searchbar-border-color: #848484; + --searchbar-bg: #424242; + --searchbar-fg: #fff; + --searchbar-shadow-color: #d4c89f; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #252932; + --search-mark-bg: #e3b171; + + --color-scheme: dark; + + /* Same as `--icons` */ + --copy-button-filter: invert(45%) sepia(6%) saturate(621%) hue-rotate(198deg) brightness(99%) contrast(85%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(68%) sepia(55%) saturate(531%) hue-rotate(341deg) brightness(104%) contrast(101%); + + --footnote-highlight: #2668a6; + + --overlay-bg: rgba(33, 40, 48, 0.4); +} + +.coal { + --bg: hsl(200, 7%, 8%); + --fg: #98a3ad; + + --sidebar-bg: #292c2f; + --sidebar-fg: #a1adb8; + --sidebar-non-existant: #505254; + --sidebar-active: #3473ad; + --sidebar-spacer: #393939; + + --scrollbar: var(--sidebar-fg); + + --icons: #43484d; + --icons-hover: #b3c0cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #141617; + --theme-popup-border: #43484d; + --theme-hover: #1f2124; + + --quote-bg: hsl(234, 21%, 18%); + --quote-border: hsl(234, 21%, 23%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(200, 7%, 13%); + --table-header-bg: hsl(200, 7%, 28%); + --table-alternate-bg: hsl(200, 7%, 11%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #b7b7b7; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #98a3ad; + --searchresults-li-bg: #2b2b2f; + --search-mark-bg: #355c7d; + + --color-scheme: dark; + + /* Same as `--icons` */ + --copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%); + + --footnote-highlight: #4079ae; + + --overlay-bg: rgba(33, 40, 48, 0.4); +} + +.light, html:not(.js) { + --bg: hsl(0, 0%, 100%); + --fg: hsl(0, 0%, 0%); + + --sidebar-bg: #fafafa; + --sidebar-fg: hsl(0, 0%, 0%); + --sidebar-non-existant: #aaaaaa; + --sidebar-active: #1f1fff; + --sidebar-spacer: #f4f4f4; + + --scrollbar: #8F8F8F; + + --icons: #747474; + --icons-hover: #000000; + + --links: #20609f; + + --inline-code-color: #301900; + + --theme-popup-bg: #fafafa; + --theme-popup-border: #cccccc; + --theme-hover: #e6e6e6; + + --quote-bg: hsl(197, 37%, 96%); + --quote-border: hsl(197, 37%, 91%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(0, 0%, 95%); + --table-header-bg: hsl(0, 0%, 80%); + --table-alternate-bg: hsl(0, 0%, 97%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #fafafa; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #e4f2fe; + --search-mark-bg: #a2cff5; + + --color-scheme: light; + + /* Same as `--icons` */ + --copy-button-filter: invert(45.49%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(14%) sepia(93%) saturate(4250%) hue-rotate(243deg) brightness(99%) contrast(130%); + + --footnote-highlight: #7e7eff; + + --overlay-bg: rgba(200, 200, 205, 0.4); +} + +.navy { + --bg: hsl(226, 23%, 11%); + --fg: #bcbdd0; + + --sidebar-bg: #282d3f; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #505274; + --sidebar-active: #2b79a2; + --sidebar-spacer: #2d334f; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #b7b9cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #161923; + --theme-popup-border: #737480; + --theme-hover: #282e40; + + --quote-bg: hsl(226, 15%, 17%); + --quote-border: hsl(226, 15%, 22%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(226, 23%, 16%); + --table-header-bg: hsl(226, 23%, 31%); + --table-alternate-bg: hsl(226, 23%, 14%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #aeaec6; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #5f5f71; + --searchresults-border-color: #5c5c68; + --searchresults-li-bg: #242430; + --search-mark-bg: #a2cff5; + + --color-scheme: dark; + + /* Same as `--icons` */ + --copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(46%) sepia(20%) saturate(1537%) hue-rotate(156deg) brightness(85%) contrast(90%); + + --footnote-highlight: #4079ae; + + --overlay-bg: rgba(33, 40, 48, 0.4); +} + +.rust { + --bg: hsl(60, 9%, 87%); + --fg: #262625; + + --sidebar-bg: #3b2e2a; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #505254; + --sidebar-active: #e69f67; + --sidebar-spacer: #45373a; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #262625; + + --links: #2b79a2; + + --inline-code-color: #6e6b5e; + + --theme-popup-bg: #e1e1db; + --theme-popup-border: #b38f6b; + --theme-hover: #99908a; + + --quote-bg: hsl(60, 5%, 75%); + --quote-border: hsl(60, 5%, 70%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(60, 9%, 82%); + --table-header-bg: #b3a497; + --table-alternate-bg: hsl(60, 9%, 84%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #fafafa; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #dec2a2; + --search-mark-bg: #e69f67; + + /* Same as `--icons` */ + --copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(77%) sepia(16%) saturate(1798%) hue-rotate(328deg) brightness(98%) contrast(83%); + + --footnote-highlight: #d3a17a; + + --overlay-bg: rgba(150, 150, 150, 0.25); +} + +@media (prefers-color-scheme: dark) { + html:not(.js) { + --bg: hsl(200, 7%, 8%); + --fg: #98a3ad; + + --sidebar-bg: #292c2f; + --sidebar-fg: #a1adb8; + --sidebar-non-existant: #505254; + --sidebar-active: #3473ad; + --sidebar-spacer: #393939; + + --scrollbar: var(--sidebar-fg); + + --icons: #43484d; + --icons-hover: #b3c0cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #141617; + --theme-popup-border: #43484d; + --theme-hover: #1f2124; + + --quote-bg: hsl(234, 21%, 18%); + --quote-border: hsl(234, 21%, 23%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(200, 7%, 13%); + --table-header-bg: hsl(200, 7%, 28%); + --table-alternate-bg: hsl(200, 7%, 11%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #b7b7b7; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #98a3ad; + --searchresults-li-bg: #2b2b2f; + --search-mark-bg: #355c7d; + + --color-scheme: dark; + + /* Same as `--icons` */ + --copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%); + } +} diff --git a/docs/book/diagrams/architecture-overview.svg b/docs/book/diagrams/architecture-overview.svg new file mode 100644 index 0000000..1a7efb6 --- /dev/null +++ b/docs/book/diagrams/architecture-overview.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + Knowledge Base Architecture + + + + kogral-core (Rust Library) + + + + Config Layer + Nickel → JSON → KbConfig + + + + Storage Layer (Hybrid) + + FileSystem + + SurrealDB + + In-Memory + + + + Graph Engine + Nodes: Note, Decision, Guideline, Pattern, Journal, Execution + Edges: relates_to, depends_on, implements, extends, supersedes, explains + Multi-graph: local (project) + shared (central) + + + + Parser + Markdown + Frontmatter + + + Embeddings + rig-core + fastembed + + + Query + Text+Vector + Cross-graph + + + + kogral-mcp (MCP Server) + + Tools: + kogral/search, kogral/add_note, kogral/add_decision + kogral/link, kogral/get_guidelines, kogral/export + + Resources: + kogral://project/notes, kogral://project/decisions + kogral://shared/guidelines, kogral://shared/patterns + + Prompts: + kogral/summarize_project, kogral/find_related + + + + kogral-cli (Command Line) + + Commands: + init, add, search, link, sync + serve, graph, import, export + get-guidelines, list, show, stats + + Features: + Interactive prompts + Template-based document creation + Graph visualization + + + + NuShell Scripts & Plugins + + Scripts: + kogral-sync.nu, kogral-backup.nu, kogral-reindex.nu + + Plugins: + kogral-import-logseq.nu, kogral-stats.nu + + + + + + + + + + + JSON-RPC + Direct API + CLI invocation + + diff --git a/docs/book/diagrams/config-composition.svg b/docs/book/diagrams/config-composition.svg new file mode 100644 index 0000000..d665e80 --- /dev/null +++ b/docs/book/diagrams/config-composition.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + Configuration Composition Flow + Nickel Schema → Validated Config → Rust Struct + + + + Layer 1: Schema Contracts (Type Definitions) + + + schemas/contracts.ncl + KbConfig = { + graph | GraphConfig, + storage | StorageConfig, + + + Defines types: + StorageType = [| 'filesystem, + 'memory, 'surrealdb |] + + + + validates + + + + Layer 2: Default Values + + + schemas/defaults.ncl + base = { + storage = { primary = 'filesystem, secondary = { enabled = false } }, + embeddings = { provider = 'fastembed, model = "BAAI/bge-small-en-v1.5" }, + + + + base for + + + + Layer 3: Mode Overlay (Environment-Specific) + + + + modes/dev.ncl + storage = { + primary = 'filesystem, + secondary.enabled + = false + } + + + + modes/prod.ncl + storage = { + primary = 'filesystem, + secondary.enabled + = true + } + + + + modes/test.ncl + storage = { + primary = 'memory, + secondary.enabled + = false + } + + + + select one + + + + Layer 4: User Customization (Project-Specific) + + + .kogral-config/core/kogral.ncl + { graph = { name = "my-project" }, embeddings = { model = "custom-model" } } + + + + Composition (helpers.ncl) + merge_with_override(defaults, + mode_overlay, user_custom) + + + + + + + nickel export + + + + Exported JSON (.kogral-config/targets/kogral-core.json) + + + {"graph":{"name":"my-project"},"storage":{"primary":"filesystem"},...} + + + + serde deserialize + + + + Rust: KbConfig Struct + let config = KbConfig::from_file(".kogral-config/targets/kogral-core.json")?; + + diff --git a/docs/book/diagrams/core-concepts.svg b/docs/book/diagrams/core-concepts.svg new file mode 100644 index 0000000..4fb8d34 --- /dev/null +++ b/docs/book/diagrams/core-concepts.svg @@ -0,0 +1,148 @@ + + + + + + + + + + + Knowledge Base: Node Types & Relationships + + + + Node Types + + + + Note + General knowledge, observations + Fields: title, content, tags + + + + Decision (ADR) + Architectural decisions + Fields: context, decision, consequences, status + + + + Guideline + Code standards, practices + Fields: language, category, rules, examples + + + + Pattern + Reusable solutions + Fields: problem, solution, context, forces + + + + Journal + Daily notes (auto-dated) + Fields: date, content, highlights + + + + Execution + Agent task records (from Vapora KG) + Fields: task_type, agent, outcome, duration + + + + Relationship Types (Edges) + + + + Error Handling + (Note) + + + Logging Best + Practices (Note) + + + Rust Error + Guidelines (Guideline) + + + + relates_to + + + + Result Pattern + (Pattern) + + + Error Handling + Rules (Guideline) + + + + depends_on + + + + Task: Fix Bug + (Execution) + + + Debugging + Pattern (Pattern) + + + + implements + + + + Project Rules + (Guideline) + + + Base Rust + Guidelines (Guideline) + + + + extends + + + + ADR-002 + (Decision) + + + ADR-001 + (Decision) + + + + supersedes + + + + Edge Types + • relates_to - Conceptual link + • depends_on - Required prerequisite + • implements - Concrete realization + • extends - Inherits + overrides + • supersedes - Replaces older version + + diff --git a/docs/book/diagrams/storage-architecture.svg b/docs/book/diagrams/storage-architecture.svg new file mode 100644 index 0000000..77c9952 --- /dev/null +++ b/docs/book/diagrams/storage-architecture.svg @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + Hybrid Storage Architecture + Filesystem (git-friendly) + SurrealDB (scalable) + In-Memory (cache) + + + + Graph Engine (kogral-core) + Unified API: add_node, get_node, query + HashMap<String, Node> for O(1) access + Multi-graph: local (project) + shared (central) + + + + Storage Trait + trait Storage: save(), load(), delete(), list(), search() + Abstraction for all backends + + + + + + + + + Filesystem Storage + + Purpose: + • Git-friendly + • Human-readable + • Logseq compatible + + Format: + .kogral/notes/2026-01-17-topic.md + --- + id: note-123 + type: note + tags: [rust, architecture] + --- + # Title + Content with [[wikilinks]] + + Watch: + notify crate (file system events) + + + + SurrealDB Storage + + Purpose: + • Scalable queries + • Advanced graph operations + • Shared organizational knowledge + + Schema: + DEFINE TABLE node SCHEMAFULL; + DEFINE FIELD id ON node TYPE string; + DEFINE FIELD type ON node TYPE string; + DEFINE FIELD embedding ON node + TYPE array<number>; + + Features: + • Graph queries (RELATE) + • Vector search (embeddings) + • Full-text search + • Multi-tenancy (namespace/db) + + + + In-Memory Storage + + Purpose: + • Fast development + • Testing (ephemeral) + • Cache layer + + Implementation: + DashMap<String, Node> + Concurrent HashMap + + Features: + • O(1) access + • No persistence + • Thread-safe + • No setup required + + Use Cases: + • cargo test (test mode) + • Session cache + + + + + + + + + Sync Mechanism + Bidirectional sync + • File change → SurrealDB + • SurrealDB update → File + + + + sync + + + + 💡 Configured via .kogral-config/core/kogral.ncl: primary storage + optional secondary (SurrealDB) + sync settings + + diff --git a/docs/book/elasticlunr.min.js b/docs/book/elasticlunr.min.js new file mode 100644 index 0000000..94b20dd --- /dev/null +++ b/docs/book/elasticlunr.min.js @@ -0,0 +1,10 @@ +/** + * elasticlunr - http://weixsong.github.io + * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.5 + * + * Copyright (C) 2017 Oliver Nightingale + * Copyright (C) 2017 Wei Song + * MIT Licensed + * @license + */ +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.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 A;{X5v literal 0 HcmV?d00001 diff --git a/docs/book/favicon.svg b/docs/book/favicon.svg new file mode 100644 index 0000000..90e0ea5 --- /dev/null +++ b/docs/book/favicon.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/docs/book/fonts/OPEN-SANS-LICENSE.txt b/docs/book/fonts/OPEN-SANS-LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/docs/book/fonts/OPEN-SANS-LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/docs/book/fonts/SOURCE-CODE-PRO-LICENSE.txt b/docs/book/fonts/SOURCE-CODE-PRO-LICENSE.txt new file mode 100644 index 0000000..366206f --- /dev/null +++ b/docs/book/fonts/SOURCE-CODE-PRO-LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/docs/book/fonts/fonts.css b/docs/book/fonts/fonts.css new file mode 100644 index 0000000..698e1e1 --- /dev/null +++ b/docs/book/fonts/fonts.css @@ -0,0 +1,100 @@ +/* Open Sans is licensed under the Apache License, Version 2.0. See http://www.apache.org/licenses/LICENSE-2.0 */ +/* Source Code Pro is under the Open Font License. See https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL */ + +/* open-sans-300 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + src: local('Open Sans Light'), local('OpenSans-Light'), + url('../fonts/open-sans-v17-all-charsets-300.woff2') format('woff2'); +} + +/* open-sans-300italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), + url('../fonts/open-sans-v17-all-charsets-300italic.woff2') format('woff2'); +} + +/* open-sans-regular - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), + url('../fonts/open-sans-v17-all-charsets-regular.woff2') format('woff2'); +} + +/* open-sans-italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), + url('../fonts/open-sans-v17-all-charsets-italic.woff2') format('woff2'); +} + +/* open-sans-600 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), + url('../fonts/open-sans-v17-all-charsets-600.woff2') format('woff2'); +} + +/* open-sans-600italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), + url('../fonts/open-sans-v17-all-charsets-600italic.woff2') format('woff2'); +} + +/* open-sans-700 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), + url('../fonts/open-sans-v17-all-charsets-700.woff2') format('woff2'); +} + +/* open-sans-700italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), + url('../fonts/open-sans-v17-all-charsets-700italic.woff2') format('woff2'); +} + +/* open-sans-800 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), + url('../fonts/open-sans-v17-all-charsets-800.woff2') format('woff2'); +} + +/* open-sans-800italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), + url('../fonts/open-sans-v17-all-charsets-800italic.woff2') format('woff2'); +} + +/* source-code-pro-500 - latin_vietnamese_latin-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: url('../fonts/source-code-pro-v11-all-charsets-500.woff2') format('woff2'); +} diff --git a/docs/book/fonts/open-sans-v17-all-charsets-300.woff2 b/docs/book/fonts/open-sans-v17-all-charsets-300.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9f51be370fa913ce6de2922b580c262c4822b337 GIT binary patch literal 44352 zcmV(;K-<4}Pew8T0RR910Ifg(5dZ)H0f7hr0Ib{q0RR9100000000000000000000 z0000QE*lUWfmQ}!0EY+&fhq})G!YOAg!yQMtSAeP3IG8%0we>R0t6rhgFFYi4Ge-h zTM$x_K;*{m=TyO<(oF`$dr#+gT@uRz<@OP72f1way{Ld4djxa`IG0*=K;{4c|Nq>i zF~-^s+Z{rPn$}0zLzV=G*ddk#MfRZCOSo7Svxg)@O1QTM(GtC{-8am>TkfXJ&}5JO zXokZnNWAaG&x#r1r&DFc3k@sfl$|@RDaX?kWW{EN@TZnHp}gCDd}u9PW@H>gZ142z+QEhtr+J1&#|>KAj6Y2`)3tZkBe+ebjmTS6=W*;+$iHPBB3Un)Qo?6q*dE(P3T9y565vHowfyevYxI9K2P(y z$<_L{@8?J5hBF;TxvX%vUMY{MW;AQOFw;MRE?UNs>(i)Pw#F30SO&%}gA&nV#5ynh z%lr4w|41^EwI78NR7X_&MdMPeXq|gj4oJ6}tzd{4Fvwwq1Zjy_sfS1l0YYgJLOuSa zG~qZt#{MG5VL1;uY?c0qywYwhjn*_`$CiZFZCFDFz-?kG;zz}gkK?(Z;(4Ip0|Y@p zL`0q-DhfWlFW)O~_Uv1l(z*7n%=kiif-51?{(S1>dTz;-%RXz{zW_NG4POWVdSfQ{H?gb&VPWmSuI@as@lXQ zCML+EVq_sv+K31qR)E!rHdbOZcI*#x`rpX1-FQZd2?w2J5+HD^d^xN_9WLUu;R1_>$Sl2l1j{i_PqRoxBKXmEfAv5RRCG~gHz zoRPqp)jl)`>4DtY_ee=+oD0vBlrtv1+}R|)Aj>WYFNl--dsEGJL13vB!x?g=A&fDlOONKn#&pyZ<<^Gt#Y5O9+B{||V8CFK!GIY^G7 ziird-fZ=XPfYkAzOvx!^1&5rvR8_9Zlqy%TZCti4x_G(NsHD}UoUD}Q&&1ywU=hnR zK_eK;d!w1V-89?ZEBgl|7bFMOFTBI&;bU#pwZ9KM5d*ckoOlTrnn@#e=0bxf_LKF$ zd-0Mi4MXYT*CGx?Tq%ZXXdY`yIWWVJf|?K(5DNrL%GP_mZs@nw-vBb}Rw0W;wB!)N z5TjzUSNZXIA7943^nXK*r#Dw9|Mtf&ksu-=h_`Yp9V;Dkh;8<4psUZVb-$?#qp%T! ziAdB1b$5t5hjOzR8iD$*)2$e71R6>Zt8%DEY$Sg2KWN&b4Cqr8h>8`6#((@8#L}XktLaTS zryU~vMx03nNxOB%uQY)H>VL7pz)zP2nhY%8WH@)-0RsdY-07d0c5ee-ah{%=QSM%u z*8so2)#K3GU!m!|?O$6+?&yD~(Fj>ZOxK05BApxGi zJr7YET6WG{j1#TYt(MkW%SPIA4dOUU&zsN+<{}nS6r*LQrr)v8tl?2R`* z6w<>(odO>Dg>%+<`=H~%Re+D2bI267Gb@WPo}vT*tKEȮck{9tEK*~BMoW% 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 literal 0 HcmV?d00001 diff --git a/docs/book/fonts/open-sans-v17-all-charsets-300italic.woff2 b/docs/book/fonts/open-sans-v17-all-charsets-300italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2f545448418cba6668a2e7d49e9616e8c69dfd15 GIT binary patch literal 40656 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 bQBM5)6s%p?oy_T)fR3IrepgG2|qH4K6n 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

D& zKmG7e67!kl#@t`?2092GluuaI?(wqHGc$CxbhOu&-QklBs;yusvX`9XbS$sFoH+FwvSs*$VNBEt-3}x$RNG$?<{E4Ybo(b3OQlfghskNz z9}K5Z3VQ3758HkG0jW@{RIXI$g7RShkH;@~Tu&=BS_r#d@9~%{hig#_2T@|P9H)w? z=gh}5S>q^Cq)p*cpk@GaSXq4sH<14^6;np5c+t|$J9x&lS&Se9UXJl& z`)tC!CGF^PM{9Gle70PoNpUr~Y%X6Z!}+OG>@qySno#@WZs|(!*Vl)pnmp&Xm-VKQ zd#My=>7WO!yH+kA!}m@QP$?RL){Bk$Qv*y2cO;BUYachhU4q|dA!Mv|yd}&v+!gE% z{DqB_ousX_y~Gbfu*tQR**BQz*PQqTVG6mV8#<{f+pRkMaZ3L)vy(`szQ9`Qf3L->DdXY}1dMc^^Csk2NTKs7&QcmZsc@0=Q*+*}0+ubaVYp z?_|MQ3hbnc(VG!jcF*kMaE)V8EC4oZFthXNL(^I^9lZlOJ$lJAO5=PrN|Oa{fGt+^ z86n<5N4dk4So5{kLjS&dhC18h8m3KH)**}vqTFD5^iMTKEbcl&5* zW^QC_D;06l5fzsu|eN0BcF>w|9d0O=b_CFVJ+E}_9y>Lu<@sRBZRB_KQXt_6*y+3*^M zE`8Gx-~2b)<#e>sMPht9=HdY`yV6x{- z64g$bGMR7NOT#uSC|2C5PQzyT^d!Zjg}qSQ?g6h$P4ccGk1(o5QhVy0CTs#8Vc)~9 zOq7?zT_f$!BRru4nCKiVUdJbNGaH|)2T8r+vx5vQZAuho$o6xH5)jXZGCov~fcRfT z&bKQLJ3z=#;>0N62R2Ai419Sb^WkaElLsFHLI;>$2KQ0{9@j2ZT<&_5+_Qnn+unjA znR%4OQ<~yW{LJ??8#ND;4y+f5FkhH;oGaMu*V%`Yil((-`_{i*wzrFu0@>r@;Q!@9 ztG-5C$|o66q0!cO8N3oR-ZuJgm%HhR9u|9gr72nkgf z`o9%BG~SIbmXx=T6}XWG!96o?82ddt~la{g9g5aRjJlk4d!jyanU_J7pF% z77h|AA4MVw=oD5BKVh$ZqKjco|ES*^`7lni8w`M~OOWG;!0pS{gxy|=mLhl`j&hO$ zyh#a7>{8aWnp$JtTk9*E)-=y}7@o8Aa4GKMcm(?Dkj`*yw&d^BbmmXdiwG6W=0S!H zhPH0Do+Bm19r|tQO1}!sqQwXgXJt)nTYP{voU&oA`&wBCy5wXMu+q{aM~Pnu^`Xm% z>~wKZWVqL`FH-T@4e}yAN80yR(3BfT^Ox^K6v1kT9mt8Me)EpvvO~*=Dzl0TbRG>Y z021OhH){SbYUb?JJhVvyjO_=O!9SzJSr7p`)%p3ee#i#M@JWL}?M@`DqCi*ZE@Tjp F{|Bsk2y6fV literal 0 HcmV?d00001 diff --git a/docs/book/fonts/open-sans-v17-all-charsets-600italic.woff2 b/docs/book/fonts/open-sans-v17-all-charsets-600italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c99aabe80340fd88a6aeb5729251e76c9a6f35ec GIT binary patch literal 42120 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 E9}-z&tN;K2 literal 0 HcmV?d00001 diff --git a/docs/book/fonts/open-sans-v17-all-charsets-700.woff2 b/docs/book/fonts/open-sans-v17-all-charsets-700.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..421a1ab25fa88105ab776552d7201205f7899841 GIT binary patch literal 44988 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 literal 0 HcmV?d00001 diff --git a/docs/book/fonts/open-sans-v17-all-charsets-700italic.woff2 b/docs/book/fonts/open-sans-v17-all-charsets-700italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..12ce3d20d1ce2288206e8b4f31c20f76452efe37 GIT binary patch literal 40800 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%0DER>;wf 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%0Deo9y(?}8?riQx3p&>dOY zNGwTh_PW&_Qdr$zy%ULyhlWx)VM8XFOazsQ97W%}?ADm8L=UZMtBpKBsbkHkh>!_&Yk^=gzh*3V6@UVyV4OZwt1b7cJ=(dz-fPc zn>e)KFdZs{{c;MnclXvtRwW#K;a#wf z%~mn)yT0@-SaS$Ai0_W-QLK!=kY@}%Ak7P{tEg8`L{9a8N=h-0B9h$n zi29HaZ7JYBus`C<=^y*T1#z-h4; zem>>d4+vO%VLL5V?dx_sYgC)Emnoqq!}_R{fSW^Yw?WEYMx_&=vcp*cLHAc_1A2^o zj3UNN)li3>4)8cyozhg@NE{CU9wem=f3&5i)eP zOn7kbgjv+^d|_3%Mv|E;0TO~Z8b)UIJ%2sl7SC+-!sUCa$9$H8eV36cl+I|EX$Ja?zmlHH36b1xd zhlqbtYldM4Gi6E(?4;jzkVw>@+;cNGW1aRhZnYD=YA1Ts#(K1-ej!ky1OhsnPp^}- zPt|l-9Z*gV;ZHYN$&&6MFlZ(%N6kF4q<2)__fy3$~XlZ1uHK7AiSCr<-x1hHpg zxkvq)Wt`b;@PmR%0#4D@174IDTNYOzp z6(@5N5_n>bVwC=mH)xOLLq$h8IQMp2z|7%;KOe;?`{*CfzI)G_WN)@^eEc0ow=x_= z(X3aCZ@H(cA5PExW5%0sQ1*ngzQDH}`wa;_%4v^FqO%!Q`-Vcb=V%l@(l6s-v0^L1 zjm;ddMLfa4eqb23y|pJ#D=>+>0T^-*SBVbLJb zlLL`|p#SdI9%an8yCf=q$3iGErnD*${SfEgZ2QyT>ozs;G77t2BQD>`tik2Zh%mTf z&kd~ntZWo*rGcj20C4%>J&s@bBGIb9yH z#4FsM&IM5I^PZPHvfO#ydGR-kV_wh8wP6mJ#A^wGYI4FK`gwY$E7JLi)nFOwYmFu5 zDkvu=oL)|f7@CQ;o0}0Jmt)-D2z&%4qpNGaNGgBE+nvOF;Kn7n<7^%s(l0v{L)=t< zz64J*_>_qTE8YY8ORg{XYKsYHl#`_8mMt+MuEH7ViUbv&B>yjHi9J5o16T<1y=tp@SiO->jiqREmqbeJU~9_wlolAH;?y}?h<}VcnWv;7p&jgS6Bpka8EF= zS)gb9aa>T*EYpDKAz6=8v^V7iDC^pU=%xhg7zYkab$m<0yV#6WiO!ylOsMTlsq#J% z;+}Jl+h0?}4dAzPZIHnK;ze1|*}l3SXY#xIGp@Za8uU`I2kXX3GYutJ9ErH^gZA>o2>Yg~1!IYR8UtZPT5 z3>v!UEO7a2ic*2xF3#0$*~y$HPI%^aoRM!i(KQuN38l7>*vEce%8EJkm+(R`gUub( zAo9cgEyo z4S==<6~48SsF@mQTtaUp2pX&+@kGl-*W9+8A1n?*m3AmnG`hgKf@&Ez#9FGNYoRgt zhGDZH2pfHWLu)qV^oxd=^5IvG&-udb(&R!zlR@2JhI z+Ua}9U&t0I9v6WX$4aK;u30D3KUJva+4RFT#gS}v+(1qxm+L~@d5Xr?c$cp9257{I zI~MlEh3>PcsR=A@1-r?)n&Um@)zv}z20tw;7wUx$VeG$l_1N{#=)nSGbt={GI|@#a zN+U8ri?ng;x7^x7V?$ATpF)dB;_Ev2i5fw)XKHa+1V1g!mn}eRALdrMM;aOs><12T?Sg#3cW$X;ipEueIWTb`EEIf~ z%2HR~oS{`7Yz(UiCfMR4))#fsyBRw?l;Hrvx-P`wkF<=1ya^MX*$_3dYVh$SdAmg- zQz+c3mv{eoJi7W-Ume{4;gUHy9GLv4>_x|e;j$vQm?P3*DCGy{L&RrkJoSp)W&-qW zp_}H`9-r=)*njEnAo?Z>FHD#+8>*Q1iXK&~R^z#BNq0_0qu|{TqB<#F1dqFrso6a` zaj}0wbo|-N3VkC*RWzv#%z;S)p`np?7g*}*TQaoDg3H3ng9$dc*ljtDbZ#aN|HyEJ zd*UBd;`lncke{Re_b(FWA}QHv=#$;7m!16gV+FpGLn1s8=0}ge;B+kBY2=yRVvr3| zv*C|U=uS>?3~q2U_pmFGe6X&drZlV%viToo-FdndfN5bC6V;@_RD$=4_c_> znmiu36mX-dcYJcg{8+mL$BnA}#zs^cP4}qzj2Tu3jIB8Pjv3W9vc^>E>HF04plNmM zm777d{Y=bViuOS!(6~tlgq70B&$9Y7UZSJtm-?t4^_A)}T}?$H#yBg_;~*q~h45}M zRVe&8NOHW{GB+ujZzt}h{=nhPTk|iIAXYlkeSSI3 z=fzrN#VzF#3`kBh~`2Xbq7 z+4e#YF$s#YL*du%Qy_C!g^1KoOY{f zxY-a6MS_WP3KN-H`&IF`3B<(40UPovKM&&-r(@UMSCMU1ESj)E=c?3um&~x26|#5g zqL#Zw*WdU&B{VC1v+xWws#$LFK3PT)qV1#OCT!3-k<8c|AyevsrKwRdOPC}9vR*Kv zv{aeq9bNO3LXxy9?6-0G+d$-hK*tuibaNr{RiWn<2^@+cH-ZyzUZBEJD_6l);s&} z$s+pOIQpxY^`7-lFuN%L={YNO4=&oX^m?E6`%=JN2MOfPQQ7I#R4%BaluzE4EiiCA zcrV)tvqiTinPBo2QqqJ_OpMT>rUb$BHCLg&iHMF;O$-63;*{#@eAEGtgJ?5LXqs6c|8aOoy-= z@OhkHz^m+~p_#r;!J_$5w#!jeIh(VwreXJ&$V4tW*jgy`aHth_=Gmn(yG)LRxWA}_j04|ni*7s44!UZgyQ=K24s=7bu#i3tQNT_`294iFl zjaLo5gk3>Wb#UF8(|0Gk)yDP{qZ*Z7OGbA;8OT=fff%7udv{Hy8P@X7wTh8LsT8YRUG`#ra(N*FdBIh3DL#s z<3yMVv<7K8G=IJA}Qj5cUlHN8hIk$fcfC7Rt6`@fgkD_T&U<18oOJ zh<`E`Bd?>cQJ6D_*?+n6t+O8rcdZg{XVX_L%hn8E$*hx&wVKOZ{MxK4e+X}ald{%AD|3f zK|~?JZYsGAR5UO2V!r%s1F-zKcq8eF<^_BR4`F(@5VrT==`OLkQk&pS` zGJ@QFw->dLT9?h1O<`XG!IDm9xDL9$v|D8i&3|a?MA#+xiC^QrHAI8k!u{xycnTT& zg6opvcP7#T{+E4X`8NiQ5i7;)-;J)3HGGvAm9ljS z_RYPTR*hLETn$3Gt5ac$=X!_ds^hNL*7Oi=XK&R>X6bEYwMyfY_h&%6_geut7B0$&Ed(vS>(-yqqhptMA^+9jYp4}opvvKL`)8Zu<6lXHZ$Tu_nGm( zZJ+`F_g13;wU~k2rXlFTpdSYLYjGJ$P5?nX!RU^gEtI zI^qD+QtB^r&6HqOU#PM^XG8bMrUIAkws^)Q2Jg(QlO>3xZ=p28%nm zBNqw}Mzp7EsoODz1U3bFXxV9PJ-=}kHc&aAxP9>Q>GoE$ozKkJVr-hi2H@$Di+VSeULmE*u{$`AOt=4Mwha2Q%+iV}eN)A3(@?5W(;#W8k-Lx}zpV7nMdk!tYESf2 zf3lm@S_9b_5j=3{{JqJ=JVbsft->G5IJ#W?Kp>-<=E|C0}>+M2|Y43 zs(kldK*@HN03dW$?Yh9FqjwUbbue}l^yu`Ea^#2i0aaD6+XtM6p{INPIWr4 z3~b+BG^%39kc9PD2BsiC<4^g2CfUFHaa2BpZ6$^kiL+DXO#hq#Yt1$I?yH3j@9lbZ zGG?!$Wbf9>?T+dnpv(!6a&)-EJa;58_LZ`cAj_jj&>eXOLu@QaW-)0A&Eo6e5xwMs zp53Xb`)hLr{)@8(y*J0``GHJknQa@~$vlW8f%{L)oQEFIBXPy0A<+bE1S3W2o}1u}A>k3{ zFPC>`cUsD&xpHz{pWL;~((qVnG(D7`JOyWfXm=mr=Fcg$1y#3atl(KOG=-ycM0TG) zSA3URf5t?4CeZYN#Omg<)RSTZY&Zf9zN-}PTLUsB`Ui_Xn68XdP03wLj)ht{w4psy z)N&RzDhUuj+PC+Ql#Wwa2tWT9SNv0*I_lp#F`8>K+piY4R_@(t*77PEUNxj&L?CI} z{^?!PrRUV0<%8ReN(Vj98PeI*x*0U*PjEKi40UjBMJPOp+d0@Sx-k@5Kcoy?uWSneEDQa5etg(&gqhk7J*J=^tb3YnyrOIM?~!Lt zfjqA*$TQCz%GffhWco|#T4Ce2q1|hARm4*;dOaw8eC}6S>d~E6L!VMXqY-Lx7P*L3 zU+NTzh&rFTpqb3=eyoF<($3DWQgY-gZ3hZb9}=HzM3pEyENYZj(3S}M132q8U75?X|3C3w-{7^_e$b=$w|9^c>@dg?FnVT2WXq+jdj5GnU3^cjUK&2W zEpU)8_BiK1Li2aV;-&(laBs2O26W>}hj)35;|pGVLaDR2&9i{Y)#CGs4y7p;$&xW) zb(If|_%hD^U1|TwK(MGVIABXIXJustA76yFo`nY`|CfpW*egkJl5ORGtc+E6?B#9p z>BRS>#HZkc_{yq7d@QpW*}$>Afu^#0Qocw`FXw1)pYDVq+x4AK-x*UEzT8dZ-|^a_ zt^})bx-J+PlMA@{v!j*KBqrJ6T!5Y45e4)|BL4GTuR-Thfab|GfhC*Ob!DyTF}_i& zn4^ZB3Sz+Yq-wkytBt47sN+Woe7);}gY>iM=m*`>S4>Gu+NM~2b`(1O%xFqkN90gq zvs?1Ntz=^I{tMus9feY(SL-QIDqd`{d-1K_ zC3NGbE~G@AhNtzC;8;g+iM6}}Lj=7Zzaxeun?r8!>{2-lF1h1HQAvrhNTC>(@Hgmpq&Gx4RhG_Ux;Jf4ONb{c$ zFYb~J+ZR?O_HXkDSt5f%ZH=huSeH5JwvtP5NMj`+4rg(IdP@#a$zc+@8uts+f1DFL z7~R*~{|Yc=|F7xv_Y~``+UVH{VDiff(;P}7hOHP^TwRs0Ymb)^xn*jvVk=4UQGybs z9D;ECM;oFr$vIdhau#k>@!pd6QBjE1HhZwh*#e!X)^`!W{-evg42}7F2G`elx)3x) zq=~#uIO@B^&zkpS3t-MFHslV(zY7Gz7rxVcn1C=irTMk@qh?>olD?e;dvkD$PLr?U z$l{cwQ9`I-nZa~zD#JM zD3HfeZd-J-C);UBb7SUX9*QW|oLaaSHKjY5T-sUOqQ$idV0PPdQMXoKJ8B7-eDFC=6=9-0{EY?|Ev~qtxEW<^H><0*x2cvg+~vTdL$L&vq|VXpdTOxXYyj(O{nfWlW5 z#4iVKe$BX0UyEhZ9xWGgFmRMC;a6N@hSRn{TF>DltgMw@V2bNlQ?o8J!yWq`9qd)J zJ&`(!V-c|y$8Z9>aTFID3t<{H-kioPi$%t{{ldX7p)NS&9*-)PFM~%r$~PKZax0I6 z4A@2ukOv)dBWV34#K}-$v|pjj4y6!Ht>+>1|3UC>a3e$hm zcB=oQ5v?Vh^aIB2!0dv z>V1P54nB;8L7v(D%U0^2Wy)XFeh=)0>pyhem)!9j4BSJ>lms)J4fS~|XY$`q?g96| zt?!B6{|uiO(`dDuhQp*@aPnN8wYaw}+)FazX|~afP71l@$BK;_p0+r+1kIl`*cB>T zaI72-hNz(10!l;RHV+T%TZDey9c zXu6hbl%GD-Fb;ZS}@>&*gBe*#I$13|Eaa{@ychwmEUCHo1*wu z&v0x)$3N3t*tsmj?J61vlPXT{OSF=K5l6k251x;H2!+FF5U={M>o}xXK>K%Wgf5{VQSa-t*1fi<#e}#N4CY^Lr+XJx$p3?g}U` zDHut*Y&$WGFxu&XY&Cm59ufcX{w`6{pALd8$Bl*$wQT{BH8FsVK zKgh;+JEiZTSbli=8l%`xyGGYmbvwxnVk_0+ArhmCYU|y|5A(zPNPZ+gx<1N4q#O?I z8Tt>n{hhR$nS0Z^7d54dOkNRow+OJO@C@*u_*1Jsz&~Epeymar_^{4tj&*y%BYOOzBPp&wr z%UU-p0{-{^Rs^J~zw5S1e}Ux-{Rg5KlR_rL@a%zIKb~#?rY*Hl$6=m!vN0ZN>gz!@rNPpz4ps`arJ-=Qg8+jS5hbtq zqUfIG5SNKOk%L@YFQm~b5oIa@m7&3T(r5*MZBmV}%BqB!o{r+Iv+7DLl`F0ZwAoe; zEpkl+*_^suh`kUfZT#1HV?EvN#2LXgN+VLXgrz;l$uf(kl}-nV+{XW#hrF^z2TG&0 z&{xDF6N*zDMx>cOX)7cnh5|KFn5AiHAn8I{n@?14AvSyNb+`~% z`{f+a@zSS#`lHzR{QX}f}b0V@*lzHO5vr$umW@@(_OqV2Sz(I<+29C%%) zeP4Z><+D6^A*5!c3!SfU>;et98y5(pYJf~Ji;1?ZpJZ!f@P3J-Z@T^cAYtVZTY zwUnE3>D=bW;UUpugQO%P9)##`eNX5Vtq3}`!EH+V1v$^h%z$Tuf{>_{Oq;Z6++~KR zue-f$CVs0iM4hCqoP_rxXfA|8`JwvN>BjviiK)mm#ez1glrUGB2ZKu#O2u;M8Z@Gt z<`>`Ce|X&dWQGfmXO_+s=F=&C?tN7~9Fvn`CD;TbO_%mLdPhQ_2@*!fb)4R6L9j>j z?xlkbI--KgW9_BEj0?aGqXH?EPUw(uOVIWMYg8Qpqxb{fu)ASoa*qcpr)x@Ys`3$y zrlbT2hi!$YGYFMzJahc46(_Y<)qR-Gfo%@uC< znjc$|@9G)I-Nk=i`^m|4Mf3wV<4W%!q#_LRH;=7-UBmM>mP=RaZjbs3Qum`D09ijw z;0t-(2#^WuRM>fcwY-m<*T}A?1(HQx_K}hk&~zi`{n6L|-tpkp1poIT$(=hI-nfnV6Pp=WY)%k;G&e)E8}-aQdJ$Ae$O#A%w3OC~n8A@l@1GH0 z(ob@Hp*C@-m>8Qgi`bl?5-@IyrqQAhbR&VJgG9Q>#CVCc(=;!prYTQmfVU=V5EbQk zTRqg8nrO;2pnd!0!&?ot>eKbe3=5{^pe4F#p)5b$z+^IM+AEu&Qe0YCs79{$P{mFcFT5Qp&)R8Y$B^82hcAMnC8ak}w^7G^n(kt|aG|mo z9!ke`9%_w6Rqo9AY7avClPKD$;FTXOx1FrR;pVdX5l1=C0Ez-NEP>QfpH*b`5W4f)I$xnYb4=>id zwM4UJVlVWqF|4Q4twXt{=Jk?&hg{TX1=mbKQb@DXiCPsMglse;fajl&0{%e>a8~4O zIN&mn8KD{p@f5xM8NPw*KIkTNoPY7__b$#CnMy>sW@{?Hemb{`Svw}h3_|EL9Z)W5 zk&0y63JR0pnoSrTkMsPqer;{ibD=p(gvl8d89bC?`=bIDJkvw%|f6M@a2vuyY?^ajV-R?}323*)}Q zNUZ!Y_PK)3*fUF_1?iwm*c|y0C4H1%6I+S?H3J-&AQU)%@7CCMo_h<|5szJ`E)L=w z97tP!gY9SB+skU4!^j9F;T3;_&{dU11g4MXY%f4RrlD%z767tsgX^?H`frc~djBjd z_ie<9&5F?#xmlB3wj=1OB~^@Hr4G{9ps-h-)sDMu9bkP6kbde{_$2n2%+n4FZI+m1 z8a^rp+xL*De+I^kenxKAvbl>-VPa#oiLpGmpt>s~3ZR6;7x`XHFv5yEDiAi~k%43bUucyR?DzW`^U1ORfCvnP@ddnrj2 zi!VmsvzjJHw=s7v?Qx9vdw4at##rH=y&_6+Bam>M;rWs2RYTx34OU3n&QXfi3hXl= zBX$#fRX!jH=udTpRTV~3qG53}aKo5$Nf)gO8i`75m{}{H&9#i>SOTg`4mvs)iWFoQ zAsusBl-!|UC}pS1FA!qf8#(w9dOB9J1AWhUmu+%tkK57h?(Eo3v1!6zykU4T8&*-0 z?U5vr;o8mcNKk68+8~R7%K3uQTFObaVAk9z5NTPe8o3OLf*c)O5DS&oy~PmZ;39z0R2*U)k0202 z0NXd7<|m}p#c^fJ;DQ|OkP)g1Xix@5k;|JuGo>jdcyJkVCmtK){`v;q!xIvCpm|vO zy*+h-qj%J{1{pw3=X=@;%GD&)atmx<5s)~6sAB|o#3+xqm|r4P@-k<}J+`Z(Cg_uW z0G>r*V0GDf@wNQ)6;d7-!=^VnG+mg(}aRA*Dqb^S?%6v~?}*sG|nNW((sZ zh$GLhe*}ULE@Oq;!;pVOrQ!=OtQ8c3Q>HXP@X4W^_(N(=Ap0q%raXYq>WfS_z?iZG z#1sLT1sXv>J_hF$wk%QEWylvT-O)ze^ef^ejEg7?CP}a%v8O8ll$knfnDQYGO%|2g z*?2V8^@c-KvgKDMgIurLZh|=nB{@R99lB}`t3r9>*F{-cC1v2Sh@8|WiNM3C91(=l zKu|W?=ujco>}xn13Y0YJ#7ta^ zKNvlZ-sbmN3X&84;ds-=1R&-<(^rt*Am)ITH!ruGcE$ z>06%6Ri9t%-xW(_G1%<3>1`btl~~HXk?NzyG)1 zR`VczME`~Iagh^|Dta40f}tWBt6+*y6voRC9Ld6UE+eN6^YDZD^?R?(G3T5!F=Wz$ zR-QQClknoybcb8gq|jtJaU3{)F-EKuoUy9lrEvz3YLGDfPChMuzWBfWKWs{&6dVa| z<{rh{(Yw(vM?LD?>M9gYS7x#6SzVQ%A%f>IK^6&YCujQ`AABBo`IFUpAy5JsL~0px z=bUg(3Qeh+V<^dl_#3%sRi@LA*bb#E3d42KGff)< zCK{@Z$E0R83wN`RHKoHk6sg~oPHP!xH@2n<7 zFba3Xl@JRdcb+|v@fplNiQK|YAw74ERV zZxrQ(F0RF;eW0N4tReT#;18@v>w5t7`DbuQj+4wm-1UhomhOS0uMyFWK?U!zQt_5a zo-n@#b!{$SnrT6#h+ZI#tvGWikFeccFzx@&@G}fFsyO6gR0vqeih%8i5Ka3E>8!884@t z#9sAWYnb&e#_&j$MGjap6!ylfe?4K@c+~dv9bGg_ekv5ChUOU;C)RW}Fb+%)hkwI& z*69}Aycx}-&_i3zk-Ci}7m^Om;LkA(8<&-3xP77<2k5YnCj;COq?XDVR)59Eq z#_wdtns=}0z2{ZtQI~AnE6Krw3koR&jDom z%Gmkx!`M-XwNbHHC~b0Y0I zIcaEmgnzg}*1b^|Q($t#k2sI86fVRiUitZ+~122z@PL?`Jn&xa~Il@G9Nj zMVrqnHZdJlESsU9UL(LSRJ@vBzxQ83_^Mnu)>t!%d+Y48^{Etoc@Xj*wFvSg z^Bz!KFYdT1-&zEoEX~Tzua@rNZZMx6os07Gyy5dj0 zk&rhmt&1&&_%v7bOOj|k?yR!bxk(Bz__-B(N|`Px75SHNN=7RbmqkJ8+h!p?D5sZE zq}mS-dugqdA82)%Wt47Qijv{bM@4t&4ts^1Zi71#@rbBGNP7ZP{T@|;9D~b3kQuvh zF#$+IfS&~D0ALuCZ48ZluqJUCm+&NRSfV-DXSskXKv~fc(E!?*x;|5sQzbT znZTaJIypw8&7R?ag6!dzZHmHeb_PEx#TV8z)7!xmh!>0EIn-_h!*o+IjYPYpT`q~T zbs8!fa>^F#gKnq7?bRWfCr#i*PemEbKBi*wERdmZ6s$|96hLbwyA476N^J2nDUq93 zwS$A&U9ENcJ}&8_F1L3jk@h3%GLBQ!lL~voq*A9*1@lE_ng*U14MS-&86Y9mDiM*vIBTn$yM@&%)C#TyTyIVtNb`n4^ ziUtK6X;#iK1m^>A$N4!5q{48t=ytlDl7oKHQKr4SwUZ)eEhb!&^gcmg$0mXWGlaCW zN1MAH>mYUj>S9^8ktG${Zn9s4fO`y2Fa;O3xWKy_aly9I6%G|$LzY{J0B%nNcxbF+ zC=Y|QWr(f<%M@r&)@A&RVd+zyu~ycs;h`D8Fa;u3Z;6BXOHG(YBfwIy1La(Q(VY4b;l}9eYd1S3FrZSX^CXYm6CB}_SKCW@d8V^Lpx49a^6O)?1`*} zJ?*MB>LuMDoC`NPcyy_9+A78-BExM_X8L+8iIBlPIm?bF9Td_6cT{P)V{tv@9Er4} z14BJ!fNK|d-LYjiX#gx_5~49OQz&k0$4i4YbiIYf21C^banCCziO#H@n=ETt*O`#) z2pj3iSmjs=p6ba*wGny6bQFv?&?k8l+qhzx@nxCm9hXcuF%6~eNa%}{GEY{+)127i zVi)<7cO0lCvWjmFZYY(Y0+adXL`fbAJ4R7Yw}&!j(ds~irnaHwMhbg20`NXY4DK2t zP38kPHyh|-c$j1sCwwL{9n zLMRSG#+?FLRJkh;!DYV4?TVO(lMy)=H)A*2mDhFmizm|^wx^<`2~516#^DY`lM*>B z?`4`hjBDdK7>n&RouM$zN_Xc@1!*}ul$zMeDr$PWkWS=~lo|jXKqLBM2?;Bq&|8Ya zx?pp%D^e7OgISfIWlFGU1AC2&h2z^!ct8_`y+!cu-B19S-4wpV*BTFxdWXQ#ro7R! z9iXG0YxEAJ*Bh|5sauiu)Y51SPFrWd(@xPmBt{^yNwIYgvJj1{Ii;IB0-aGBQFPFU zhq&SrUNog^ zcI1Y@?9fG%Qq%2HB*_HHoQ=1|6AUvWJ6On70u2+7>?3QycM0!Qw^uaYPED{;GZ#7q z&|ma4-}_*ixqA0(5nLQ>rvK`o-IQlGus|MYP- zMjnaeuwd9yx1_id2td|by%K=PC?!NPmV=a{xT8D9>1dIMxk94(70_57D3q<&tIJPl zr-YI}*>4@535<0XD3glakYwtdKyQ! zDQB@S#0i~%95uf0T&M3`N!ONi*K%Vv4tjk3Fxl>H-{SBPMGvp>K87wfql-o{szse; zP#ns(g$Ehj8Qk4rkl+?za1uOtg1cL=;BLX)WpMWZ!F_-sxO;F376OEK?x}kB{`;!B z*Q#o%-BtZ#ZD(FlzkR1l3Ko<71k#ZmM{t}qg=hR;`jgse4VBJXwi05pyFO8ghLYDS zV)S!v0;dZk^3(E(7u4NZXRKL&h@zBE;(gOdH1G02iFZEvem9DB95>wxRPw;|#QF=* z+m|V+6?3VjCwgddRVrgQI60AZl%QFjxACf1H>{yo0D~ESg&crDv=$OLp5MbMafeNr znA6#&80Wd$!_I(%ZXC%0HqI!dG6F8~!FcCzr94FMT2Xg5=M9LP&PZ>RM@);NSLQ$XdXDL`1$$#T|p+$LW?ZH zg7F1yP>vJ~4O7jPXT7x)*6hq$l?>AZ) z!WT7KTGKQq`O-IaFWo}q%et%qVnaWL6C{2;|;(y$BF2wA+~JlHb6K>sXQR2666P`9H8?Ck(ib8 zhH#j@nT|-;suk-?JDXl_raRv!Ogz1swD+Fh>V5nJci!mxC+5LiY<>~%C0GLX6#k79CX zqy)dP-I0kh77jBuE=9jSE3YiPeE2-R9i)zQXR%=V#auob=+L5F(i)#1iND2bM`^Dn z5sSe93$;7p9$Zx<%asUFEpz{l-5k48uWOcN1r_EP4RdN%lK|iBn#+w&KvG@H)<)UybhlNTnq-$ZUeB5uKPziqBRS8S5T26nJ zv#_GB!*Pv{Xa%L)*!z%9nwZapPZ>ZGVunq^5@erhb$&+{VuNM9@{leDWR9cG*4=f4 zQ(cbAieU*)X+%EiEW~|FqyX-m%xg>B$#GaSxd=QzX;EFYxaKPr2_Za{!VX$_mD%KW zz-xYvQ^(?lP&p2jQKj?snr+h69PAEAa-jQeR{F7!+)^NY#M>B{6R+;&M;k7Bw$t_2 zu`?vkJgZ_)cD3zJ!VxB8c&HolNVDIiKI@>8X@7o#FP&7z<#N3K3x~vsxTjh3{N=~! zr7rwK+ep2W(;w&z_g$iE3dK?#5nsRqZ-Pq8D5o7AE8sNgdkd`Vm2K(*auL|$?Z#$KjWWr`CIud1s8Dq_^E=oRa3Vh8*4@R+H zH}NqO*!w*Wu^)2+vJ@>8MWJLG^Mixr(IuZnd>8 zzO}J|M6)DW_kP*n7B=eVcf?7N0~(wEY2eO1|^^@ttKZqm9Jrex6^wcl`rTBQ>NF zKfLK^BVSfb?sgB0vdNCjL-9oMMpH@Tr$@1+&&5C+d-zXriQnS`#dWGLYyEpcO;7|w zGRbdltxUidqq_WA611&%rMgVhGx(*@pWvwLby9Ysf@Jz;8D&I<09lzno0c5a^pwF$ z)%02uek6kFWq!U-nzo#|$rA}rDfA+T{SJEf;uK(>f$0VB_CGJ)c~O?hE=<6fepAtf9RJeN)k(mPL<`@OKkZPk zw@#tx#aI9F37!NtFLBB*YsgU|*Zvh>gc;6FrDkEpNj?w?%33kk+ZB;O4vk>h^U>v4 zTheU+FFL%n@0rNIxGD-uGQ$x`Zys8h0X(UDDroN&k`3wJqn(q+bN*;sj}Zk2U{W|a z37KcIB&nc>>*z_{0;PSh!cNF6UHJvmC9bcCvTs_kPP>!l@P8K$$hO#=Gj(p!?GlaLpZf_*3?Mu?Uu`aV zt2+qTQe$k$F_JMOCc!-G5S2Ea)ZIEkE53l}jVolk*=B=lqp z??1`Our?Wx_YSJkX8G0G;=R4BXl)>u3A8gF8d9(poI<$B7(W2_+<8|BMJ)XMcYAHE;I656j*eiZ7sJvhG@8H?C5jmhz- z7=!CMtq^+~FZ}U$a-fz6u@MmiI|E47Fkjf~cmi|kRE zlJ9phJij7ceSS;ICwL-E+Hq9DF-sT3jPNEih04GsVb>;o*daVY_NT@!Z$bGE`%uWBcTbBMJ?3&N`9=sZ}gdq-V1 zRw13doz{**?!60wVk@_DRH8dSCbU7E{%JLN7ibn$&@JCUKD#JCNWW~|kes+!#|}f? zbtt#CPfJn5%`9O!pcb-yYa}IG0Ss))-T+#oS+rC$EJiZFUg@Gld*LYJtCk3k$VtaS_*$k4pj`A9jW(vPGt6bW^A>t@O3d57U?__nX=EJi5=%ra;8`Rpp7pbK zmdO@8yLBZM4k32zH-!JRA{}cv5pz3xE=H*@g#Tv1}$f!hq^-q6@ zqG`3jSUV0y=VXu)KvXTyb1rZx=Sg{LQjcZR|5t zs@AEtAoBFeZ}d3U=1pc)XFW9pR!yru`mv+LE)3lhvce*x;umea2BXbcqO#bUqm!Zq<3Dc!a-%k=pj zOTi_VyBng#fbP*J-k_P!Y0DiVX3woV+@$s}3sttewe;nL6i23&_svl|V1YmWjvY+< z<_4~mgN*hRO*U0-@HxNWz}*1eBE-KWf9+pUdmXoOI~#Qr{wf=NlsBrZmUh@G&Rr$j zI$mMy`79WW_?PfC{&is0wSd&WnZ4GB&QBEmZ~SY;e(kH)>*!ya<)z#vNb~iI$je#Z zY9qsp*h_CTudq19^wiv3Fazc$Z6{#!(Il2P&`yKu>1J}IQp$Ho9Mbl-ARxKE`HOa% z%a`RSw>r#`s?p@Qd_hZn3ueYK%-ypYh5dR0(~I-njgWF=nXg+3G^5U#eukTAAJg-b z0zGLN^ya^OVTpxmvA8d*)N==3*4rB;m&{p9jnT zk%vb0{mFV0zM0|Eu_uccw#)9Qk|htan(GO$ii|!Aq>!zhu~6R9CPcPz%bHV8z(Aj6 zNV)7Zd9=}wDJLh>6ARTn6SUrWP^)JfzD6hi%I-gz=T&zaJCtuTmEGbGLq$dv3s*0X zVe}cE>79Rl6*RG`{gM^N05Viq@moA5^-A>9}%qUuy#UbRjIRzLSPA`F--{UIX;q4F&!Kst>And9Vs zCPlRo|Ad^kPw)z*29c-6*2r&;p}BMRNB+%&}XDx%wO_{<8Wew>*`5~Jw zBP5Gmgj#jJ+cF}pLiHy*e%wDXUB1*;VA;e~&q{I%>C_;(KNoXsdAbDv%F5yOLNJp# z_fvmlqQ7)Mee_fur956EuLe&x{}o+F8C2Fy)`Bc8xy>BIDA;48kCylhR+MXk-a4h_G?i3W;E$`RGw@`CgdWXU)%6 zSU?#8Pe{i-`u>o?%-?Zd3g^(AyL8&0UJhMf9i0^c1)zsziC_3zFVz>Ts64alGnPBQ zrGRXAo}DvMsgUW+s2yuKGvJf!DjrgbsxS$?s*xjgy>?9XIPkzp2lc5pClhN%SZV zg<9ILX(0o_H3?DSoR<5FnUz2jXrzvY!i~%MR~>mFZGPq%d zPJfcq6&Ih6$xNlGt9|>ALJTyIJx-;o?ODPDHaoZvZhxC2tb3&)(^zA50W(qY>VzC=kQG;j?2V za{u%3fH5UH#m1xof&K30B3?g^oAm6-pOb1Z37HF)?VBx9VQ4b8vYOgiq`S-vzZL)$ z#A0_LRB#o6VrwrK@{JB>fP$fmw1R24_m;VVHfikmAp%qI0{XkC_JPpnkK^_9Pi~sc!-Pjh4P2 z+p-5-{MsFRF;;N+!PX|$Alo%=NraK}QtC1w<7TA{h9FUP&}(7MH_jB)p=OocEu z?xSY0ectJEpV0HdDjJ!zrXJfjVKo`=QEW>0LcKk`kFid4ypOwn*fBVKM1 zjp3h^rXqQpe7uT`QxuCx9}H&JF>(6*`SCXpIeaJzxIK_Y;Y}^>bA33NK@*4&B#jsh z3`Ro%B9S1{X+IQ(U2eYO(#bH^u)@u@hhhkM-qLq7BFiyafV9VLjz}~0G#gx9uCK}n z6d4%lndz7qpoOKy>F@Tu9h)q2AorR$#WL8wEu)^FNn2c0Iul3qbjF+ai*UQ{{+Jof zD6)tOXVv0}tU7k_x=c+>yOG_%%6h}HkmsmcEpovq9E^}pj7q7I2?ZZ4zLRoB*({{`;FM^#|4Cix)b zjr*SGn9pJ&nMezroXnYebf<#e`Er9FS~WC6Mr zw1%?5Yq1=qVa__DmMLJl8mI4m$kpKP;^umD_3IiF4Ff$kDkfS*QCVqnY+{^)m7T3x zIt)EoQ%7rQc7ARVzVJgxniS2_NU<#5^P=wID+u<<%G7c%NH#(EFidMY1RRqhFd5s# z=fKzzY_{$OwwsEYad z9v6I@H_mZKe>}SNY|zXscd}U$d z$J&yVi{I7s?A6#2sinV}o1L$fm(!PE2+Vw{^}X)a1B5xb(t|l?k|d_g4HzA+ydQ9l4I1@c(VcKT62{EgndFDb_pr9K}i`tbn)>IR%c9Cv~&yC zEL*hk^bLhuwCOo|MgBODFXGjs%$H_NV$&wi>$mvtZTau9$Lpf59%J9*IS6EN=??Y7 z$3+-pmCGiF7hn?p?lsVijP}I(g6|prVkiWN1pAY2JzBrFsi&rI=~`dwe=wl6@D|1- z8+idL(xT1NZD(oV(*kke>ytofVOVPV4p7VZBjmU|h)bkWgDX{gMD1C|smJVmuiI16 z{o_6{n!eK#^8pgq@P|ohv^WEa4YW>ACy9_*uM}yxShQ50!HWljnde1BG*BvLdV_5H zMD`pn-FYB>FVxT4#d<$1&x>DiyrgN#oZIH8p8LISVaQhBWPf4)TRZK?*_2=hq|0rP z9drN>fodjl5x(?RawAs29b0^UOlk9c-wo%D$n6`OGj{wZES`4;C4S!Tf@m&Df4?*> zlOlYh-|9~2nLcaoaYv>EUGi-R8@ApwB^WjqKN($~fG)UiYfN|$Effq)Qs}RJOy-!o zSHwbCtqtmTJQYDbvUBt-vOf!-ZH_5DMHOf-*8Q@|_XalucR~5?>6jDV#r z1IK99ppy%(!oZ(cl|wV7?7-;A!#9uPr3=H8L8CL5{S?>O8X5*Jii;K0h+_YzG&ov= zWE9!TQZ@g&%oA&OItHN;PITC)Tp6N5!dVc2A@}_>s0w$q9f3oM97MU-9G(K4w7<>^ zGCbE;S8lr+kQZjWBma+SdE~nGvIFt&Q;Igl zw!VWVVQYrZ!2@rHn5!iASz`aQq_3NN>Z4AVqO929Q2=hXb`LC6?h}iP&z&V8>IdO- z#?f!6S&i-QN1kU%{EGmi-uR1~%S#GeIMTpSdfy#dLI_{^!U|Jp_X;4=^5Pk{f9ZeaWm$^XSP!L~KP|GT%X zA^r~$7*kz&mH%|h)jzqD;yAxzVp31n)?FVV%#4tV-ffGN>5=-g4t#2%7DwmfZ|;Zy z#*Loo(|@};!`SSb(S5%tFl;Y7t=R72*_n7y6&rNxI>9n-_)A|SRZyiVSyKLL0GwC) z@a6sUY2tK$=GOp?C#`MePP$@7ntt%?8ZHf!Sm}2tR`zC^Y!@bPIX>*eXto; zJzY~_@OE69;PcSaipTwV+}Zc%8Z!?;eR3IrepgGvXwH4K6= zTU=0)0OD@DlRs44HejF(>@WYju0pwe6i_=Uj*c#RB|NsC0{A3Zw znqAD?E+_KJQ+?$@nG%7>o)~H(iGmPHg@PjsA~T$e#F9mqP$5Go6K8Xsyya)T4d!lT zX{(_llUu5WOq%E$@tT-v*57%YvtHRdG;|1h#3)CQGUtm)OXsp5p4IW)yl9}rZHoYh;=+XD-$r9;E!Z)Y-WG4nx(hM?#OY(S7U3DGY1 zQb_YL(wiIZrRi56yUPe;9AN^9zL>HM=mVKNFfnp+2Ar6gmN-!yl7BKM*4P3S=gzk& zW;2Os_;jAQug=Tdn$h2Vw)hS2dp5PD zo$kja-3>?Q{<|CD$`!k^3XEM3Q8j9v7rs87)UWCp*~?@v9RNYJL43d*F{MD@C-wj7 zwEmxwWSJFmoH#JHBgGEmShBzY18o#srUTXyHq8~y0#`>B75x>>zN-iZz-@&a$3{1x zOa)njxM7QcGGq!46mS9#+&MO>X{Kpo>8`HKmUoS*)pcF#s_$C+y4k$z>&8(|tL`ev zwz{jVC_dybKc2_mlVzHjkSX!tQY_a;%KqfcBBNl5pZCAE>fb9}0ab}gDsG(anVnf+ zzxT;&>RIgFXX2APbmk!BEOd}MNjw1S>{JZnSUEY2z04DN^2E85eKJp;b57=%%rmBP zn3`ItSb5R26LRYLnSHwy;ja)`^h-YbWqn_WQWx7<1W`&UAs^%r@*#^1iU@jH$U-kf z=-XL?IP0@5vQdQS%0d=OolUkg_8|A}w?jM>5~R%Q#7u4C`$Wj(-4}6ovr2K0yU41;7#b$akg6&bxn-BwHv&RO<^JLAtk z6cAEQyCtOzSZMPk&LO0G zPZ&K4F4hj*=SuoX)%+eXzyNt7W(LRvL5dV5QX*FVrW5i1zvIT^?*0^u`s&iTy|7*< z>2hhi=nlUA*XMe=Z&mfM7Ga}MjuVX$D1+8ti8D!f>&w))rdR?V7`of9bxLm7kDhl2 z{DreKe+x{Kwm>@@whRcIn^NUYbB2UVUj5=)Ch1|}@2#FN=w<;W2BwmB``?_FAe@h2*(|9Q&V63&;fkSqdzK3jx`YANYhl`$3iyb#2-<+LA6tD}X1*u1X7Z4O7-5CJod!R0X7gFVztB^!qrXzLE zxpmXI=vFinRd5LTp02Lye*gb|L<5aQ5IGd6 zK!K8mqBfAAC?>7k|2LolFkBZ!$w6KRIcLr|iNFL3)Yu?MSr~E03`%K34BX9h6y*?4 zbM(Ub3XcTy62P&G|-5ZYFWxf12V)>c1x7CNp{LMgtCjm)nHgSk?8Z3qog-J zH8%Rqa38HQrHVhvo+tK`^}l=Zk}M5F>EhQS4u-f=3{`^arafGXPa&k%Nr%lOnTC~x zp>)4rwKk`iDVHwr1a6;PS zLcDlum*PhWC5VWKNRSYMNN@bkSqNY}reZ`|Uk*DDI^#4sZ0(8d2wW3aBSi`MSWzO9 z&EIB?GVD%0s>T8UqF}$<9vKk??_J7_0Cr-b)!l}Ir4TrM*;7v{E&xQVZo8&80Z!x%mdJzz{SuW0LWG}zU$!LT5D+Ua>T7LP zV*^%u=0DB0n-1L%XZS+wZmgeCPOEtU5f0KxYV}DWUjJ|FWfIOK$b1~-iN$0_zcoPK4^z~HjZru>tiXVu?aTKme>l*voqO6>Pro$oYax2LcEKDwSb% z_5sK)(}cf`WhMJek){FwkSDp_f|N8&$|9~S$h8Px1D3HN`#8;5G07 z_^iJ^xA%74okqP@t&~f}?XAs? zf@51|-q3S=eQkARd1-NBer|ShVtj0LBr~X~0}c=S-Db$a_s$xv9HDmZ&N@U~9I_u;`JSs`)rnpJJmWw@q z8jrr>?y~tvpWnk0o;$Wff|lFD0j1PLB9OF}sIB#^4yG%X?nw*=3~u)i!#WWI!MFPe z_CylUSxQ$oh$||9f}#)l&|4L!nQu zYe#^x0hYecvq-?&aiO?6S+Z(3mn#+8mLF6dVk=bpjWM2jht*Z78qE)B>3wYiJ_C|< zL#0em-+scy(O;|ZDrSM$E^-X~OlCoj*Bb z(W*JzJmy5Sw*kkym>5^bR6;rg*#pvz*h6po^>uqm6)&4_F#SKqizGixi;G|js!g%B z0oC|d+vyF^?_>|m4ai6ZZh$;HH?N_2`e+^(qSXEIUJG-6h%{z)75IAY;Ybe zK-3w4uQ&6n4Vf|^SSq>n?o1}v~3ktvbmNo z-6MfKrjvJ-j)vr;ni<14MF{p$-HZtm!{s&(l$Am_VhYa@!0;l+0EDkVPF}Y18*fuQ zSJ_;6u{%V)ot6O8w*`po5s^rtJArgRM=+h&k z9~i|c*r^}Vm0c(KZg#H)gpXl76(ypxHzj)O!98L_l%$s-5wQc(0o zWI`!9I8QFMircWP1(~?(oxu`OY;EO06z4L20Q{yNfL-q=H&YqLB%JCxlbjSsl?M@=pT!)L+ zR{RWy=9LrYqHEE)U7~%*CPBQ?@xA7Z7CcW4jR3JCuHgV33glrWw2HbkFljV*4Dx`x z_C6;#Y&&MF6j)>@(FjP~T=LDnzEnFj-e zO%$%#rcTW)le17DR+sF46eZnfBmq!Znc6e6MF??V>9*XP24orOmHTt*gxv!A(ZrSt zmSx^}KqQa(Y56dMVLK8bFC8_Z0eOvg!$g8TD#UXs z#APRnQspiZVvaPQPF_#S&O@(dTA#Wketbq$>ZRAHu<%JsxGGQWlhCOVPI{{sEzQDbQ(WTM65yoj%j-Llc!F!73a3`C`$DIp7zVLLOlY zNNOTfSFQ!eC9J}8TJXVwS7w>ep{sO6%c|{4R<5OM(!7fO*h1qW&31S+;Hj+f+#z?t ztyS%}e{uf=2`dxZg~YUITQQnrlD^oOcDmhoRkx%p2+aj=s~|GIN~WcbPDARn>FCm6 z40F>0%e18_`2PB;2}u|dW-AlU6bkB+-S0L7DdGxc$P?-;gDvZM7qcZ!98+ZS=y^fv z)DVUHCQT7E?PYW{DL+$;FRfr|R5!Yj`YsRKyP6SLQQ^JOnE1|1I7j7Vg4ifvk*|qw zo%oLKn4feE@*wO9MpN7f2M4=K1wqxk+b565y@#L^k(b?xuhPICHxlL7o%^!7HsIkl z^*xRp<^CfUSCP_0*BeA0x2YC5?crd*y{9MqNH&_jmmpibObb&q=ES9j2YVD$bC$?5 zA(Im19ZoToNWqSUZLr+&`|d-$v}p+v<&y*f+XgiZ%YxwPKNs_Yax$7+?w`dZFsd^< zynpV*4PNlU3*UVAT~yL-YdmiqiX!s?>(YXI1z+OWpz@8R_4#avdz?+Tso#`8cr9P1 z2a0upFVax#7OdzQVW3=iO$A6*Cs5v951niT4U7VYHF}x>KZdY_6P%NDAx^KOWXDKZ zW3Rx(4_2z(XAJcNfun1nd|1}D>m4u!48DEg3Rhgu$0REyUcm^jrV{4EDpq3#qe0u* zR-4MG({?b4L0HrXh)5p-&+L@akzFw0sZ~bZ-$L4GJ9~$PYXn04m14Ui%r^lnjmJWF z7#Ak(6N$Y=a2Xd18?iws&ib^wK{9nda<8NHr*2}E=h&|IN(yLiV;@_N zjhGPBU)eya8a>vmxg`O7y6D&+6~Rlw-7h!ml6n?RY#@m^G>CW(3^ym^t!Z2LH;kMB7Semi6VAtr*dt8Io)t~EN!6>`CxjXKRChg%U91o*2 z7}bFyVbqw_rD7^rANC;OGrcyd>>c#s3H|l(08dx-MSOJ%yzdl*WoI;_jl8tz^u^x3 zkqIfADR3nCm{<}VQvXF5T%>Np_e_#ANe9+Y7W{{0Gl{sxYnYCg%})GWYB7Mr_R+B0 zGHJCon(v7 z2eqDQoL~k$nIt)H2ExT=n&W;;qG06#MIMf>2pGoV{uA8Cw3ms)FgXL#ExvqWFD@D+ zKwZLNH}6zSPI@2N^8pD+Z6pJes>i=6?>X46H(JuVt%1YR9Vku%bjImQK7qVnw8 z=d{qBl@wn!g?ucmIar5Y&A3JpJ2q$ReFBpKUTX%W&(k{EWXE<4H+ge}fuyk^iu zHtOPWN4*D(H&jK)`$h?9e*X}gvk)b8xe6}m-+r@Cs$=D;tjYCRhs249!BV`{X7liO z<1wXKX;-Ad5^GPSc?!lw48~&m5~W4S1iafGry_T@&H-gIRSz?}>Atx-gXWo+y)?Z| z$K9M%4Af>x_bxH2Z1?B%yj1kIZc{^?FX?~;lT|oM%sVGEwOPwA7~>E=?DK=-3{biY zZWs&^JtVB_S@w>l&QRO?CrpFpK_k!p+Y2OP0A_zwT$miEMOFB+VUV5xOS21JvDlcc z+$mrn83AM6J!?aHo_%@ugABo)4~1GwolW^BEl%$5S0*<-fLKP}0lb7jRV0v%3@5v0 zgLEeVBi^Y4tD?SB%QaeD> z?=ezw8r61eQ7+P`NR9CSuT&6m&p-yTHU6Us-iv}YuNzNypa%5DI1!b5R)*fKQ$mi@ zwXS%XN9B8AKkNhOu$@-Q7ORl|qYTvCtBwC-fn(j@yK{E+VyI`kr1pL}Ne5PAG_4R2 zw$>Z$vCIH_WpgHGjNTO!t^n0-HG4H|vrZp`XFI&@vNN-tUuef6cS^DsR|OvzJD%j) zLL$f1BiLO4O~SBM5d<1BGbbtPN-3Zq26szt_$`3P{7VDT=8!8GsU=)(a*13wz=QcE zWm)9X??d*FXcT}BLic0eNuXC)r-%7J9=lC)fRg~~jvFZ8C;MOft zQBC^mKRN_JHS%J@CXj2ZtPE6%Kd=Q>-!*N@i zk|)K__Sk7r-F%Q58T=?*=|>Z)=czFDOA*z`^Ls^l$<=ah_yUYK0RfUUS*Kb+HL77t z5>XLf32?(jhA(xO^t39SuU$ zpID*6vT1bS7YnYM?zPb*OM5&NkghRSWC=;A;ow1^hh8hJRASBMky{f_qMqq$5Rf1{ zy4%=t|GiEF3?L{19v7~mOMddPUsm-Nm$ZL^fR8 zw$E3X(W$JYVP>?gt3bg2Y}AiK8NPeDyB!;8d%_E8D4BJ09ay864J?_S`%aR>?b!Hc zKT;q)$ut#&v6{90iT?coaP7X+7GUV~piCydOxOhEeEa zW{1%4w8K}VkYR0Rx2I;-@Af1cT;{pQ;17Ik%pg8?*o>~XkilwyLIcZ|0?gQ5Nzd4^ zq*Ix%_xhWD0Qu(lowhw1_=>`+7`9;w>}WNsdc+NT9&ZZ&0&-ysC7tTJ7mfgoRtf=O3;?#QFW~$x_d4e!5+a)z!~~92!(3MyZb$GRju! z2X*8qf=`8bzKDYd5E)8oj65N=r3(k$pX}`x4>QW;9)ro_$+~YB;1mVBCWaZqH>{A2#;N2o0q#P`c7&!Nmt#+o036Zuh&1>gW+$||@?R>>ZCtOM@cuigljTyM4w-RKnZ&ci1N zh5%2t)o+%)QoJVN*00Eg?*02WwtQJm?)k9+YPmxGHy|moYfg%mmHs|^jrM3&RJj=-d&lAQi`?oOEMri(rB1>)d@GU?30D1Egv0|P5C zR{{8{3f@0K|7=p8YJ)OMPsJjbj~h`5Df~@CuGnLpw2O+>xBo;@X{Sn|=cQ52?U42> z>U{LmDj7X)F15dxE5B3l@DHUI?)p2wS86V7b%Wgq+=dv4T3O=*H43DB#}Y{6 zQj&{cDKGc}F(f6QET8BYj&0OwU+t)-{(E4K9A$5f$GL_wN5i@SG@}6|d-DAgS^5m%P@Y|2n z!8}f=uMEa8&+4F613qo{S2R66S4L-qJ0Xlx5CM&`y8@|f$O}%Ec@nt!?67qJfFf-~ zZvdY{)=JGf!tQ$VQy<99mZ&8j3#E^2ahKrd^jeTNZaI-8HgH3aX5iF|8`*&R+lGZ; z&)GA->OGsvT>c@BgiF^hFVDgGmWUQ^3gC~}yBvjh!{f0g)8zh^Ss%9_*$DQ8`B@; z**Uhm&#NMjbsxgO;K|2vw7b>idCQY8i% zhqq6d&Xb_Kb1x@xN3F=GQAnwm!npj}jG|cAgvg^!{b)ke&}JT--jatBC)lE1#1!u_ z*@40WBw6yAVyd$q(Nauz6osg|Rww;SVVD9nm%~tH`C;`iXI>={F}%nG;>IkFoiHdh z>2a)z9^pZ(f5k_U*IEe}UksQ2SYZ!7S zc=xfmTh2zwAc(gI)0>s#VDetdg8+?|cScB-Ajol1l#tues~;luSAMBCYA%8!s`(Kv zOvDcvE>T7xv42l|)R^x5Nyi{zzcP_aUD>X0mSsN^`3&eNh@^Z>d| zR*yd$!T~!4SiJyMKwPKKqxG2^&J@9QA&MeK4t7gdMz!L% z)T9l2%r12=F=DQw$0?^^b>Y`?cN#EIsK}qKlp@$Q{^8#2nokSUPlv9OuJDHi!2k6_ z8c`^OzSfE`qR@!q6_5L4CtVGb*Pp(Q{A_KWy;$26>0IKqAsSJ#7HmX~!2ljCy4$_+ z6TH0iv_serRTkR(<->)ql_mp|H9#1qp-wUY@A07ww zwF4!E^jJRg061GLNK}9e|M~(=L1mNrv6v_E+A8r{S+&tdPvm}lE^P2Rrb4}C0liK` z()B57zv}AZliw0t)e?6E_9cibUvEI55y*5yY*6Fs%Hg8d&SqT9_pH~ff#0(G$E4>I&*P0d z1Jgw*sf<3h3QcqlZgY}4UbrUPa+=If{EoeChoD`L?;AE5)*Hryp&S~`HIqEMiOy3D z?vWW7*5rv^bl1tq@BAxoC0}rpU;$-%93}cLS>IBdqm|d^HszMXhItNFM;8B`?_j1E z)1JdEja_JxAG}4>`NZk{YR?Zfl8;g&c1?_|+;09)8~A|;E(QnEMR_F$l2qkdmQLD~ zex239+{lBzju5+q=Q?-k0MK3U->?v)IBDLEcUyk8{12h;wUwyG1F4$U%(4USJ4t$o zvSer~foL&WI3uqxNsZ6Q`|3bcEs3D4VWvfq*;pbsQJZ$-Sz}e(h6FX&M1{BV=3Wy; zFEuw$NH<4jom~FAaRy{~OO4c{&`e2gNfuX^&dkqcWvkmb-MFbrYt|R%H%6-|Hx?9G zj8V>Sq7Q4!wCfCI22E||^hG8EjJ?CVl304=w+KChijS_{)P{b&>YU8^Zh1 z{Y!ahv{O$<^$eEVL0Ks7b)-vT)1+}2Au)BsMYn$1>p|L$zazCFm5X7b61E6S&dtqX z@OwF})}q(xD+*cW1LruK_g`T=#ci~B@3Oj0T_ekbxUe6O{5M0-vKfSdX6-DMBno41 z{GUfepH4pAHp+eeKW30)jR&b6_u`QisQYM^^FPniGS>bbcl!r5X{1a;dUi@CZo_e-+;P5w_D6s|?Vp?&vDX?E+w}$hfsbwRSXj$mr(ic5 zXXAXr1mCW`bnwBRAVm(ByXvSHnmll%NUJb2FC%un4OhHBU8PiTSX_$~Eg8Jh*0q&C zt21SMv;J$d%%DEbYbN( z`6bYuB+j1iyV<1P3wpAS#gD4%K>$-qR;A6oa1`Uwe=cfKY6=%h}bu}|3*Py z6DHC<29UBFoL&9ip)yHM6EQpcle6djglro|e&GY3(zaZ+rNhT;YPZNOZlOJ?-pMmQ zJp1`e#(V~ER0jFQM>a~giWgW*?1z!@ZGMqvc8OlSzQT!e@Fnek*#^Vrp9HD^J3#vg zEy^Es`Nzu* zSS*7CZ5%Y);y2*aXzDM4BU9s+j)Feo7eLEPz2m#`mn1r8ZuIpp(jLQrC2aTxzTaH+ zT^R7wu(CGVjljyKi0xm+PZ?4@99g;H)$Ok=%~8;9rq)g2VM+9zd>En0Ap)kDCqpJr z?f#gU!jp~s9U1v}sEO&?cn4~L_^(PHB0&6Y3*w8`59rJ;H@f^iI!91q*`v*d>A)#?`kaK%Ysw2`M^$2Eu@hF<^;+|sr_;EevrGLmF zjGg;I;Dh+#{2}e6Y@lCvk6=H56o{4$(K<}=Q1UWr?VF(Eiq@P=`EWvH-P*VEWs1o96gnv9 zrI8PM{ZF)D+21^WF0Pjbd8;hsm`@Z){a^QMz|=o5@6HoYE+pf41oNuR3-JHM6S>oO zGU6Ep#JEI>HeQ7?%my8~n?7dE^%M_3^jXL`Ni|fbo`5Sx6l?-3lUxp3EQBPaD3pr< zja>$1&(SuTiT9^y04dP+AcuB55E2id0HfBr<}Y%M0qPtcrJ3Hb-yv3jd4Y2Ye5QWw_;AO-drwlR(+dcmLD zz9e|1Tn*TR1BmdTtp}WySE7+Kk zu03j@$sBnV`vwTJNwN5TzIEUWHUKGtMqTS?njY+3mZbB0m;{6uDmhK|4bYLy4r3v^ zJv&3CHT4(&{@ap|LHFYaE<5iaXCBA`I3sM!98_J@)>E(X*%EV?;JCEiYKn8cw2ell zbdYb$V3l7K?S3^DoXreRIpj~wUhqWHBXgFnx(_3dJlDY!HRvD7CT&TOH2iM%7VxU6 zi0x<18{R8IuK3a~nXtXYcpU-EirPV|Bi7_nTN(S=#AXy&6gd>GJJ&ckxr8Zg3^n`) z*kR%dJYq>*Ag&1_W-b`k9h+Ml-$uJv(5ljnitT+TXe4nl%+b7YpqSWH!trsTgnzpu z_l2XGs%#4bPx*H`3kCV4S3fRfkefTq54?WloJmTkCEJyJ+hTo%|Eqhbvy(9FsgJ7u zK!|^hIlGRTjXD06{Jzu^g_ug_@qW`2rY9f(gn8=#W|3F}=)!rwf=y+1JZ$pfw(oE354Fl1!dX?p1TLO>Bn6g^dKs!!Bmh3z_&=vL|!-L)q{|HT4Ou#1w0z)?jVh& zfJ_y&ZT=puzLgDC-srLwgniJ;Jq6o7>;tp|Zlw@=Elmv}#pM%fjiG9IC$&7bncfgm zV%nk6431f7MyVx9R3@)X9iY~Ym+0(JMB>yMyU-#L|yg%*3h~r>3`-45)m~? zmXVYs6D1{xBq_+QlY>{OZWl(DP6OUuKV9~?b-8dE@aK(w+Y4zvhFZz<;Dl!;g!42f zL(!OtUt=7`d@Fu8&}LF_UlTooi#G|d8eUf9LfYms+e~_cEV(&%Jo~U^dM4B4g9v+> zt~OwUxnE9LLu)Uf*TO7hmDrLvl#(b@6h!TidVcKD)@F&sIdVQPM=lm=r4O}MH4;gV zBE6eLs>zCow_dvZ*FqcX+F@1N{vh_N2>Qs)!>g_Jt&91pLS60muJH+sH{VWJ=3e|T zhBz~4d2MDAuD&=sXL)59F+EmNLhrq~xP-Q-m~Q*F0$RH56D4$8x6-kap2tKIgq5@` zb8~A&%_igta#IKAXc#%s08SUqy2lQOYX^#Rl7^apv5CTBlQWV7Wls4{Oun#t`$?9! znYT7*q2}K;w!z7aCP{b$#dHm_&=kP&OP_Vn+L9e&n3wGHR=;rI}j2~q?;`}e$*o+J+ zH6xQm5l9je%-Y~%U#W&Xzdn_CTG<{SJ*dC&r{-2Z8Oa#guq38bqZ+K#PhXI)87hdV z#D_?!%G|v12rV8be<$LbR8Uu4P;RlRVL86NJB<6BZ}xPPRtz%c6_AV;#$KUr1UKU3G* zJ62gdGCN*lN|00Zdz$PG(5w;R&d1Cdep)|G`1;Om@bm2cpJjNPduu|rkfLyLeQIyi z@3V`Ud;pCR5NPW!xeisQYZ#AzO|W@iq(o0oWX6zl^Kwh|rN$C{uBKdHXfzixfIuM7 z&8PYez{&5h-uEb)yEJC}y*xb*_JFL+Z>lDmzpqjm}9Da1-}h zy@Fghh@E+LTf!Ii+BXvGp1$RLG$YJR72?t1=XiK|Obe@^TGBLNEg;iHG2}wF_Td62 zI^(wPmmpx$d1VKlRNZ9PfKSIx=w~$vHnBELjeV#^yz#|5(f6-TYSK6V*S7_{m|)2z z&c@WdAf@}O;T;iTz`N#btw~5O;S6lj)5xLJA&0{^RB;X2>G+#dkJ^pxq}qaRvhe+E zXZUgai5wRPT)>+@#K60!MUAYi4(*J?fi+*Jn6I}eKisIPO})0-_i&oc_M&*>wfDx^ z#ey7OMdP~}^YlU8L4IT72|Ye~jQ?|sRGC7lQYKMmr}5;fyxp^f@vS^o%omUt8{T3< zrCH`(SjAr#vj-XOmUO4!!tN9KjAi`Mn{>_t4g$EUl^ z)No`?6zKg>erT^xJB_=u_6!<84)_pW=3BQn*@WF>-vl-nUI+qE>+Yx?kxv$R$P z{PHB@>GlFxK2Sbejw^3IYJNQ^zid44df~NVLG$QrCe(E$wdk}c6Pbm!iqNU-ie@0G#@_p8QK8U;mXq z#OsJK+m}?eJKu_{V_I_u3L%LO7*rjd|1v7ydwWTZ3eR7S4v-PF(OsIJx7NNmw^y0H z@zI)U>YbMz@`pfo*vlF%-Jcg`QJTV`;hreub`0E0=351;K6T3Q!>t{AO~hpR17`OgGwaMV7;24amp1k_A+HT7 zAq{IWzSsVWb(@oVeTnPMU7b!c=#Gp~V{9(tVC=yh#&|QL&vJEH83@AqGZMsPuB(2{ z=yM;c(B^~ftBOKVDawly;>|s``g4^5JeT3RdvyZ;ex{GSV~IgmK*^V?X?|>o%SW5D zF}Dn&w{G}sNDgisO7yE4!i3aq!oK&Z!;A<2HLfB``}n{xRNJ%(<;)c~=Q3~U@#7R= zBIh>08CV6+0wbxu1&1h`Lgs={ij@)$3kCLFyF^(PvB2l}d>tgjvToz$R|nKxsY$VO zd_D=Ac{6GPHb3tSk-|a@pZ!&E4~O8P(t}=ywiuXi^>JRehm%31+EvFJ5JB5FsVRk7 z66nF*B~pqaP*KhOJUkF;BOFst70aXlcEV(u9Q)elRTOWzhPZEhB>mA@_i z?320`yOn>`)t?=D?U;K6<*2*|GjHz)IckT=+_>pF}2`hQYWsFCZGc{s(Th(n;`!F}U5rB#{NAoL~bt%xVU520~u zFB{+H-P5DK;R?C|rEYCm)#=-T3iN3Ss$I3J-WFW93M8p-8RSX>J7Ye@pG8(wbv=I8 z@(k$P(p34W=bJElCs`F8Gb;TFodFukZ;k8PY_R#C-7vG-gHYg8$#s z8{E;ai%|!g=OFm(tU9}K%50M!3yE|T3*=&7La(1L9L>t8jb{X&dV1h^^Rio>PzrM{)RCkw_-f-271lB?re0hO889^s^AQ zMU0mNL2J2J!rOD7Bl0m8YIsW6v#zz|rJ~#FU*x}h*FC#Y+8@G<$e@2ybjbcILj1{p zgx>#j_HEz0Pumkt{CT)YoNeVj4qDiqfUb~?zJN(i5s#TWpEEoKj#x4O@-~Pgv%|{QGvb=}#LH~qp5!d`QULwy z!qbj?gqqjQLVldv;NwzmS`cYF`A zLEg?yglAm?aDE;T4Q6HjAkOex+NcCUS-0j1zB@(Mh z@5(9G84y&&Kw~H&m(EyPAZg&O*d$Hf`V2TlTTd$u?CrlwjGQS&$o;z^BW?Vf{JH)f zagqN@L(sW&c;Ml#qipOpNw6`pO4q17bgAg0g^Nj?z&6W>IA&RJN-UlzuEK!ZX#2l! z>iw`xQ#BMG36Gohrt`7)FSdnMi*jUo`FP8Q4tyYb8}!$98Av>G!!Ns!=?PJPReMI& zk8ay_4?I4IW6#j)0*9Vj;J!f{sZu zYs3GalFR7U&xkD^V5spo2I!-y{IuTGG}&lIN2<(Lg3m?|Qasbm4G09frN05i{vxad z=H?X*AR9rAgMLQ#Dt2EN>qnv=heM7V04bavATA)CmhQP~S9}KI9B&DU*GT*hm6%u8 z;ra+~syMnAb0ij=*h@QFnu@Ej27c0U;9hlW+NMyc;0BNmq9{})?wXVei@yjIj%B>u zK9s-bnXv}nVBucvsXBTMP3)ALv1-X|KE7g&(Crs(D1>>`D?K|l4G5G!2INgdPvjOH z-gn%0P$aYJ-oDH^@A7J_!}8*f5=H3`zru(&mrEs*YGFN@X?)UJYaFJLDx~vUt$J|A zRo`!61jneazK+p7e^=XGmo+jPv64Gd*VsLG*U`MY7x99g%sZ@vD>jj;B;Yx^sr|We z8RLv@CoQk)$>kVlO8G9FTGpt+9>vZ6olFNQmKzf}jLR!-fE6??-|r5)c5x$-BfWcQ87H<2H2QuF&SS_o%!&@^@4M>W2a6+>p7t$JbOnB))w|_bp>`s=2-| zepa~UTDBV5?|_N1jF-FIu=zDM&{}*=Lg7va9Kh&-6k5Xso0bs*Ozj%IG6q$ zRvgobz}EL@UKEC+t0}gm7q}pisoSxtti!_Ll3~Vg=1&r`W62}ZY3ab8f>fO@`Uh5N z3!9Nr{DE2i=lW+|3YH^kN!VY#^D?~Q^5=%LYpw4Y*!)iqM_N*Azl&TnegPoCV}bSZ z{BogCTcouJB&yj4IRH68#=lVi_unzn>FultwiURRuQOVbhAMMZ_`*Fbg(q96Gtr2dz*BQrKO9od4+ zN6fT_&PsQq6zDDVcG~V)Xlv+9*1-<}Ms$pDEWKFW;?h7`fqTEV-=1Y|>9!1VtM~50 zcq`*u&a!&pv8Po(T9y(>)I40g?3 znDLYmBFZxdser*km0*Vz<1Tl+N$iml@!Y&oVxtXdYm+!&Lz0CvNV5%s6xfh(0bEck zut93!Rfy6~@jt;_sNi2Mzp{e_m|yKBVFbT<>-@_QCRX_7T|j4ntsOeop|?zQxT3nf z#M%K}VAr})FaOCK*aW-T1}PWVApcT9H_bx<<<(=t*KJ5!(U8&X$I;&La{dM%fY$^7 zX@evQS_E+dn`nbC{NEASgj>X>aMg{FV)*YHxh{OrtR9bC{@YF%Y)od7MX9%#YqX1W z09#uvyb?jXO!wSw`hrBVUB;+P+AY?AR{LVu|J#b(S%3ep*(Dg{aqX~kZ2>^mbs0-! zTB4Vyj70u!`H~;=4Da?2l-mb|j^|nY5`!ZtPXBxU3%0tk4UM$r6>wb+{C2{Str`}`LOdw+tEHjH1t2Zf)&t$6Ok5~NDpM2{_w zef~5djPi0NoTAt5rh}RYN58@mudRF;j!O{nd*TaUiYLsKseQHuo- z7&KgHfD{YLnby96QR2=m$!Hn}jBY=t*R}%^rR0BrJ86e>M!3)?f8 zSIH~L%|gNK_GI%5`(B-0Ossf_7YKao(4M(jewIlk1?&n68arf^*U*8I{no87fE@m3 zCCHzWp#?g~Z&_4lok&tZfSA ztoiiIiLgdxqx=8Xb&jd&)2vuOn*7;O_aRB)faC7LaY*$4J@IjH-&ztxF5w6POQF=~ zJ?cVSB0i^t<#ly~1M0)hBTB29o7#SQ&3BW&Kqs~l$1lWh)yPNQ`d8sWANO(A>;|71 zq5?KVtso~d>2Zw9is~?isM^|?9ck!fZm3w|&77O9f`{i`>DxbT1(%%xNE<@l5o(7y zgv(W3qq|8FdqYcHu0F63LY|VIzWID5{J_Hhq7vYQuL4EC4WHvLv1n9_Gg8*%n>O#d zGIw>>W!rGCFgxgFAlvk_^k6F6NImh7{GGt@*4b!aU}(qXERlbefqx&W(XPYP$J%6L z_(A+ti<6^1&^P(Euy?kxy=$bZxNqiNEfkl7S1;7TbBK)F72U&i-L3DN!p({FBUz~Q z(z$Z4Tn*-2W~}z?A2FUHE%x2lx!(h8`?Ipm_$Nj2l7}*_VuUmY&xLYM+=pTw=>hPHb*2IU|-+>Fu zX{x2J<9{t1VB6kg#1R+QV;;`1*?Fh91j0&LgX64PRu|qy(ykFzuz4+PB#99;#Z>PN zsR?4aySuyd{nt9Sbn`zyySBTw+=PAkzNFYwjnEp6D)FXQ-w>{yf9dkaKi(+WsCLr> zuC+5Np)gXeA#snko*D5lyyNL2v;XsNFa`jN=yQk0JUvW`JtdQp3l;&SoSUF#2tej^ zcwDgHeb?FT-JH%&W~+46t6V5tR$+M^fBo{^>$yrY(nM-;gn;=l+>0uUy_6@P%(u*) z4;@ip4QX-5dIn4L`o=O^+=gYCy%6;nen`^bZ$^rqre|QIV{mfL8L&#hujb@v z7oh(KiZN4D+lVC0_JnIE=O(66uJNg6B88Ymx^ZfGjEyeFSo-|RF{$+=t*qimIyH^y zmrEB~=L$7gaU`48%*BQKaOiu=&{GT5*D?JS_r|WxLd@Lx^RxTWu)1S`P$e6G)U6%W z42j+TYcean{59V@Pal2Y+D|-3Awu(iF}FkXfoU@~YmPyDC`Z`WuD-^gUBsV)f!%;u z&gvK}vbqDsWyQw8D^5i{?fuzP*LV7LAHUn$G5m*3_}y~E0K-7_aZ3yu(lT77=FCLv zCB}KFFvDPKLp~~dx_t1BBk7fITr_DzdC{OGt{;QE5VR`yEa16tg5MJp3<<<4IPoQ1 z2*;5>h4UNgave(CF2b}BAOMeoeu}abYgPJCJ7SE@F|Eav+?Re!!?KK zcEZA2(?XtquJ&Es7w{<48y$7`m(x{UQ#X97AGOa*5zq7s5h~6MS-d&pMIf5acsu_~ z@H{(&lspC?mxnzFOJ*N4#O!7EdHJuGSB221HhG!sP2MKN=(uP>g%g&tGbyq86+{Yrq7FVCI<*qWLJ-4gBpg>{?%(SAvK$ly1bFU zBRPLZa^)=z!iDo(=03R@O5Xvv_4o5(=&PL0Q0d zrjAxL-g=R*oJsezgd?i&C17>>&DELx*mUlD%r(MpBh?uGgJJ}Gt6SqOuGWUHXMA@6 zfjbJ$IO3K$z!6`XaM4)%nwDmBLtj+#f&&3*y~7KlXdl#i^yB(i?Ef?uDmM+EU=pY# zCe4j6USRp#{3_LL_qdEW)!NxiEhSN@ z0`)jZ{mSA9I=jnJgHAMaN+hNVyye?Mb?)Ltbp9k3nrNdPE!9aFAkTzzi$-MUH=XSF z0#@ye)o#5eBC&f$W!T5B%VYP9>Aoe)lm^3QVROPv-{i}U3Rt@SDqtyxn=J|%D9%Vi zm?OH)jjR1>wTZQ<12qj12($U)1809Xh2`vl%3Q2;L!N_?x(VS|zk!NYW^>E#*I(SM zGu*AA&p-89n$};_xYEjcz-qQ`Ebq?s{P@7d->rf5VKjb#>znii^L@_Y4cYnQBHdq& zriaR?+cK)&msFKpS2xi1G|AT0kBX;ck9uX5hs*Xg*-Jl|$7yt{!$t;Qw_5Y-vtm(Q zLg$lmC;3sUWt4hTz69`^_o;Av??$fpic^0)zGPQ$qq<O$T zl)`&XbD>J}_A+H|hCi{^BPhQ>> z&YFhrE^1??g?$Lll^M#1aTXiA`)`UdRy+(z8;+*=IkdRPhjzt=(pNJ*Er@r|J-O26 zX~-^BRw}afp1Kw-|MVgOUGCK-HdBd2>ew~^M0P0 zylt6~1ajA6plSxi$Mv80tjr~>Q}qQU>Z0|&`0y4?^gXzQo13BYn--}N36H3;rtqnr zD0ti|ej2$x3hBX*O-V?Pjlm#enmBe`?uvGFet|JMzXYwiQlNHH2VP_@iYhv-tCbff zek6qd42|bA5~zIU%n>I6=I1~Dz5E3lFQg|>gv_o(PU0vk@zr%JP7j2UND;ESta(?a zta-HpMnar`Ic3FH>D67Qbf)ce#xOzTFDQZF*n70HwK%NGDr7Uh2PyhjA#Iq{fwHov zc3Eh{adf5Av~4(^>B;g)O4PGe+C1Zc-f5uktUGg6o71{#0C<{5=vm0r~ThaLP5`QG zgVq{}=hfRY>K)Xp{hib7|GzxtwD(8{nMymo9dfM^5xm5w_(1Gq3&50gcsb>z{&y@5 z9kToV#qg^c6xt*CG$8>p(lto#t1fuz);=Jo`u}_QDTsh-D-4%LulJ0wSzSj0NmAy~ z%7bF}eNYeR#pe9d(l4+m9uWS)FX_Q9-Y{T3MUFanUkv5*Ku`c@`kds7;0JyXPV#$@ z=?`mO1v%RxzGchf9ucR9uDSI{U&NK7VlWT$waoe4lgL$?jc#l5{SX=SK^?`-%@kST zr~pIxm7@iMDI4GMP`=6T&!{>k#{VG5b4-eTchpNgpyrs%*D5kaT9@36sAetxx1FW^ zmS&IP(gPH5a7#HT@oDFIn^#p0u4bveTQhKt(;Q9g2?jI_etB>K%_udr z+tZ(>r`K>VQ0+j_+l>^v8&))JPkZFG(M;zp?I@4QJGs`GcaHIkKKh*XG92Do&?l{` z>BXsSX`0=LcbUBGp%0OMj&6BMt6c}{4yDc7uKD~l%50cSl`t&tG_Ye^530<8LmZ13 zMdU&9!Bqdrk?Gf*GdrKbL)vUnBl1{1c;{*ktZeM&+q?uE-^h0HY8t28XphDY1_(zF zEAPP6luCy*t08Hbk|HmE*uS_CJd}^AG8tNWy~^6X6LiTovlag9?=U~^uKVb?pXyP8 zt*N>o?i~}|k%2@n1os>NAD(?#IZ=h;M$DPMoRd@ZA^l!$Z*1@-=4_+JBYV?AT?An2 zul?&%yf^RliIer-{H65nm*#QMk-XCV@QpRQl<)UgNHZ^9aSUzr(UuoU(5>RXC7xkG zS}HCz6_EOKEq^oI^*qoY*r+l5(*J8aNpQk7Fyq7}kMK)l-v~SV8<|c~C%w}=53til zk(wl{Nk{_w6&PvCUmc=u^$03}Q>FPHWLjdUF$-$U@Cf38da}vr?0a=iHy7SC>b7+XKz=nkS%KXyDY7c@mb`PY~{Y z@id>P3X@oyUd)dqZ2H9+-PkKuKdfy}&upwgf55?zM1BSxT2*1ltCC%RfHCIW`G46< zBdYcWh|9rSKLW)ALZJlLE)Qak-){oHkZkofY_j!M6Nj*E5q&8WCpv2?20EMD_z;>i zjxo7Om|U2sDwf27x_3$ziFZzqNDM^^fm!ov=nCNvSNHPZ$ zcU*!*EGs8wK*b#p0w$+=P|I^bZ!3fSnT;i6FyR6ix=k>)+eirF;ZFprbyJ`f^snjp zIUSN?(AIHe29>}!&1-_pjcZ=rwORhV2%8YxdeG?L$lPduxf1#PGksrGM42Jz=0Mz_ zf-ubvIfhe;9xAgn-;it1+5!82Q-)`jdcQ!G@F%|)%!!Nq?{e>WIXXpYTJw4V%=HBx z$84usp6l?wFSRPaw`0549fJX7bt6KCfzsKrXBpl#;B8v2RJ+9SUBW)yW+fCiaAA z=>dP<3^C#KZ{&anxBl?j=OJg%8&bA-XTT;J_%8j*&{2H-NtTD^av%_U<;_ZAXF=O` zVjDH}_Ed%=Bvz*X=Ar*MO)-THqt&U^bqxiXP7yo`bYuHTGbvZmK2MWo)NOkAMzt8q zBCs~I?OsQV$yb=AayNFoK?y()%N98*=%uqJkzqMtVptYS9=<~ow)8?YmFOK~r`n?{PSv*B zn)2Eaq3ya(gbC&1!+=(4H@s5ap2+gMSLfvTz3_=xAc8{q@9&~P+e4zikrOOLr{)n|7N`uHUFMvlYH4edwC?FQ}?v2w! zmP5Nw0Asfl=(m{?9sZ+4a9^fxW#a+cvuJo_X{3GdZeLw>G7<0y8#z5_;=iq#;O54z zjvt_UFm35g^`u2tFwQsW#DLO@P}8?L4?-$QPaoLq3(n<;x5ty-R{ZDNiZ6v3funh6 ztA&g9IU$zr=b45B2I-7z!1YeQ7VG!Nrx$;I$^9Ww0SCXq6UFQ_ibQK2jK8_s6D}Wp za^s|$AR{4VU%Wv2#wT%~GL_9|98zm~aVNm!Hk4~kDuE@ETd=M5;+`FOKQ=F; zc|!l8jyUsPBN2&|yM5?PK7R6f<$w5~?%G+!6Bz$wwq;3wUYZj(>m4e05gpj19j{V%*>9o0YI=Sh2>2b_L#=AOvb?dkLcGE?h8f_aXy?|Mklue$6vYt(xscz7`y#`)(!?K6_&om8Fj?$g`u{YO=V{E(yB) z5}KX!2E_Pb>3rZfT;nU;awBv3)2#dwp`!$VCSKaMPb4W9Cwh74 z3;{#)S6N7py*{CWu}9|%9RRO_*V5fMx+#ut-wsi#bs5dl<~Uwh@{F%)4yfL&xW{1B za8PX*(upF&$gk?z+rVhL?g@ygOl*zv;dpRyWvQ2pdgeL7)oH=iE?kM=;Dc2u^FdrMiI4re@9i&L#bJnRhYL*?v%Dj zR5{fMM9eaf{9D3_n%@v{z~hdg+}WEe&tz#?kfzZkpJ4Wmj)Q%P$0}=b1@Kns z>OM=UP(5L7DXP3CvVp%g*biB33@sKK&x!NAVp6g2mL*f%%q`s#*`Un|eUPB;5uS2nYUKWkkL*6YT(sp5B6{`ti>dcle&^3*d9gAbnJSw^lq(N z34(_L9iXZo1$npIz=bTC z%Nz~qsNeZR9EgopS}Z|hZy>|Xk$ zzF>@R^V%bfng&_&d{&&De2ok-O6(X+QNX@nsnwY0?Cvfh)Vu#L8r@+f{5g%RV*!A# z#48uK+{BpRFjS*?td8#)HC zNB*crA_OWJCNgdaysW}JpQ(E@duHW}lcnf{>f!~T+~46B@qhyVoXs~WuD-Aj1f)=B z=Yqa-XfU&2>=>HdY0QhF+UV(2SYW(wVWld}faXMfyzlEK6uRefgGu3K?EOO&PY|B>5X<$?P>?PtJd>>GR<2iUyVb!=8z~UP!@$$1HHmx3 zUzeU>{EY;YuMk|R~~-Bi>%b? z=`OA?!G%T84h?{(xcsxdw6&30F>p(FJfyWf$}IKFxN3~Rtvyn{xK zE?OvWktMq;_-+g6@>~X;r6h+hm^(I&6BZ&$CwR(rU+0Zh9U*9Q{;rHE*6o#=>+QNXwXS0WKIL1T zg#LJiNfUDUQAq!<9-GZ-VOErUQU4!x;f0az=d%Cr{1h?OM=EDE@^pQ7=9AZp<^F3t ze~2HhX1phQvYy(}KJ1$$0Dk-hJ@y(FR(e>TS*$O^wYa1%H)N)5fb#Bdxudp5jMVat zx897&z;2LO^&+}^&ajuP?+PDivzGJ$(ogI-eAw4~xk1!g{lqHR5TuGJjh@H{`C zB^p}B2`Qt0No}Y?1Pb#Y%g^cXFF4GGjd11sBrD0?y!rvR`swj?L$31duT_Nhq_LOu zbzN|@t93?>YMh{~KcJ&NRg8c-eWaxNxx+hUI%lI+W82U|zm8}-yGZ47&G7f!19soj zWl;>t(-nb*a*}))8Oj>uh=|^L9^h^9NR>5pVH=H=T@GuH)snE%YMr)O=Lw2|@^yNu zZtYOkqdi@Z3(Co8&(z(5atOk+bNx78!pv4Road#eEGY6=8S>e@S;`7oJAJT)c3zD3 zYGTx!Dk!79K@*M8#Go8gYSBbDG*N??lB^4n{r9S8qn|ms#}bopscVrY(bk}=V))O%FS?r0&&JOymBhG%i4QrPgJG2 z)6vk`QR@tG+d_R_SwnNHgCgS$;dM~#wuWYZ3-$H7Glb}pvB+w#^iUu!88)XawI4g7 zjk30vtFBahkz?)}KuA+xR{@BVhzBafjzEgvJ)lVWZp zk^a%eV%HuH5G(V5oV4~B@s#yc54_DM5ERS5;y==?%?>Uj|+%Q%tc){mSz4@^wELCyRwwN{8Xtzs}{fin-*Lq`3;_y#n_tKYJvfa;CX-E!6(+lo18qUO*9 zWYo_#K8M+iD9N;Di(OK%W&m88bjW#BnuY1fm zn}o?5O02A3wEP&1 zl(g{~eQMDN8D~v+TxcwCix;fv=S9g|Sdv`Tj!#h)$Kn`&xN`h(e52P$CCB}PO`p7e z@OC#uU$E4)t{^q0=b15(FQ?L+1*ldRA z?o6n{SoB~eW`$^uw%`s-V*vwpVJS$aCe$+PWPIu!&^Ob<0bL?BlfjwE=LwIJBT%*8 zP{|OrUhO8jQll9>gJidmH~|NKLT|)pgf?m+&<;FTYI+sEdP2I7s5zU_g0+}gMFJBS zwz{oJA9OjG28`eY*;+V`uKS`58ktt)8-Z09?O|4=E6bxL)RS53+8cs$2yHPV-;o-; zM7^@k7qnh_yPEoG49%11Xzhe5o&+0Fj70hc87rR;*SHHCtiG4|+-#^AC^qfq^5k>= z^Y@hdd4LCSmdQD)^2@$ve6XfROsBC^_St7Z;5Rheu0GdtW9U`!`dRwMWPw64{y4tq zi#nJ}IgXgnc{I6Qgv+g@C%y{)XHF0?Xsfp|%ey(+8t;ES^xZn++d|iWivKstdMVEN zPU6h}K9jp1S48a-!FFR9MVbP#yd*UjqtOCgr{qY1+ar4no};HGf0rDuXYpzdv+g^5vECY2G4M`M z!ZuW6uIg!5EKQNCoMH0@vTp~|^0rk6mW12-Mn|+hWz%Dx)-t6jlFHd7CEEQsxM>CA zdaV_3ZZ@wtOWuzT=h*`M_x($Cq>b$us9NZ!#0H*Eu zL)nijtI+FxF3rsQiC`@*NZBPCFct-ANvM#s}jt9~d2sJk0m z{2?-1(s)7kx-M8Sf-^yB^TaC-y9qQTmmN#$kc*r0v4_~T8ZXG+gfJKg(P(xFo(HQ} zpWaXelpf**nT=SD?v+-z7LoX^|Vj`4aCh8=XY>pJAq*}O0q<*-A>>#47PPwgkG2W+b!U=5u$Y_Bjp z@a{z)7K5=cRUZ!e@b|y}@DEqaHae41v(l`VvoWh})%UB_U0xJC7Qn@i>M7YgV0lQB7q}X?Z@=m*dbNL~p)bbo;;mtaQTN2MJ|BQ#PGJzS5&iR~_(4udipmE5}?-6#|{N0 z!cZ}eT<0Z6=Q6VZt8n=uGT}4-OFCy{`_Vsm?53=S^w&+hal^oALBV{N0$l?0v2@DfAg1kzp^s?hB7+( zpO{n(3cz_f0^o?e^A?01yMI6d6?jrFkCthi(uO=B?)2crD}63mO;+vWrx!S-u3N2Q zD969TjWCZ%z*@5;0`c#NK}KBMY!3$zuvkW6+tNXSbg0(+H<?pMey!D*70HH3^G? ztw{M>d0x=j0ue z24{r6illR9B_j&1tCYfku{S>kLLVvLeG!JA;0Om{PpRNd`Qh;6b`$cP$fa`@YklXt zy*~tMUK0X=zW;$wpkD#p$q9XrB)2ZuE~@2j9L^H65`7jiLLeBiWf2~eaGNI_eH(Vg zQbKB%2$RT5v@ccTlg{!xNlg?fwaWyhq0ppk;|l=sp$~ymh9j)!1!j{;GR<Yx|oOnZm2@l;<%u6JKpwz&Rl#--OVtq5F{0^iz7h@j`Lcf3`b=n`G z2&xUea4sburS(sE-k0DW zd(6jy=q#`0p4-uXZ zjIL{As*;l@pt3I^zJyY7o%23kWN+7D>&QLgV(OK|1+Vn7Uiw!yEfT&_5+xEa+hinvah0eh zHj7H<`v#ND@raoB%+UaNAH?CJ#0OfhCkAZ9PXv)C*9SvLxqGrD^|IpduP1P7cRW^w zPK)t}!<@x_@t?T$8_r>&_Q?7E6TCtuLi$l^3Azqd!ppoRV;DlR!-k(7Q>bf-K=tMk zQ9(Th21a(9MKE;3+MVw^bJ+CQ>8k=Td1JCifNyi(I%5z?Gq7-&vn+)?NwCu+@_?LK zT?Gg6@Vg=Bk;%L_m`*E;+MWHX8A#)I0|s3`S6q>Pjq<(m?|=W{L#*Tr%38oKv#AO5 zb|59XWF;4}csnkQmhiv<-%;UYDj;EO%t^g^5t%bSiI%0+?aIbyzqXkF#fR;~TI;?) zPVevh_$F5FES<9l zSz^t?s`{F!F``E?1b`LLp@`X;0?KXxo~U&zUy;OhYNfz{J6N}iY~v7iBU4X^M0eIWY4**d?MMaDn6mi`CxyKsVb7jOKs4@62}{rw73(25k3tANV!zPzP19<` z3>f<&s26m=Z~?0^Gx88i3%Aja``&SAZJCE?gZAMBB^5LBTt*6xZ$VWxwQxD_lEwH@ zgX)2A`Yi;2UN@-we(uIoj(uLe0B^3{^TRphe!j8|PD2b6ES9VtlE(I1XE9}YMhVD# z-J&wk0@rRbaifP$MtVZcn?A}xoM=Dv;00s?6^Ox#Z`~%(m>rC3l^dh1@g5)DXdwhwO05GW)C*Zh`lWhY;NNf9LW_-DD_N(A7ElT`oDP$8XhI!t*gTWI z#aIM>(=}DyZIcz)vusEWWy-2WZrABgk)n)eNJ0p=oUK#1e8aknA zgzY-2l*5RU+wFn{*sg=zDaFnX*lN{DdZd{ZbUf_MfXZ>hX?rn4fS5T(>5YIKh?1U@ zuGQWJlCDb^GdQLNbMuly+ihCwd?mtS;p^7(3CBXxqi(l>Z(*O&~~0 z87ix?GEX2}`5+;7jcR%-`MOg>Hpxvx%2%mM&zVlGN&uWp@ElnQt2yd_P# z2cRj&PGM(=%DI-q?seR|{||m(5oDQ)h32@?djqkzA*z0U}YU z5hEh$c91MlSg#C}w^$XyS+gf65cA+U6_Ujqg^1z2i>?QvR)ikmzI11q^f-3D?AQmhNV79Qu-LjQ%Iwy zXz9eOej+5a8mAe|?N*-qntqYr_xvFkF_s!(Blf#}`~dFfaSHpkl2zD2i06Z9W_hx| z(lFj*C=zf2Lz>_$aqDZl>v*kh9K6#MHd=(`0AYAc-F=5?AJy+dlupv-5jMwk%-(*# zTmpPZo<1v*XU*Gpu$+0#Ve-!Sq`zICcm>xP)z1h9BAS=xJG0-DP*d3^;#S^CmozE+ zWdyo%##y>~&~M%jwOu#O4UcvC(c8Md3GkOc*%k8q_8DWxhy%ovIc{cS^8$DKjW_O% z6H9>EQ$Y3OCo2{v6KaW_t%HL<9fw!$SvU&5k|xUwdEr|()%oM_r%F=uR$_E2jC~g_ zhI)^O$atKDJI;Xd>LS``eftTYwdPH>@VTW9ysnH0S(uch!wB~ks#En_d1;@)v;1jv zqlRW+49quBhIPj!^cNz>)Us-AGPS(F#??< ze7vuCm8&WE@_0=4wi>FiWQQ}8t4W;K$=4vFI%Ue3O=w2QSqJHzt^kI|Ea>>qetMwf z|9j(HyHDgZ9<~pZ-nSZb6CW%7!Eu5|$LDAg(q<2o){{3Qf-tf#A4=zJ7GkeRkS&Uo z8W~WP1nG|HG}OwnkY(k}QH+0zXl&aa*J8*pS0eJ8fClZSfQ944Vge{zARz|IJQb+c zKqd2+ShbyG#>9_?z{#T2Sa6|Tj?CkvSk7uFt0K2c6USTlV4QqJruE57K9(#Y=dI^q zcs?-sk{AF8<^3wC25$aOB z;Ql^^_U1Efpw6fC@`4GVo&w&VFR*z7)sa=;)N;l^_G5`*cAdIHH}Y0~B=6-b`O-+( zaEt0+!-Y~73uKylHxwz3hX@$$k8Qb3g0lOpK&&~?8yYlHk34!QS&PBYRaM~jzWOF^ znD*x#={tP_;aEm4e`jz`rzrhF3I9qg^&zTGe^ah4FLKjAt`i3$bx9ZGvLWP9PWiAs3Inbm4(V(JmUlTy6y3b;vW7YHk_l-?QuWG&9 z6LL!~;)V=UP0DnlfSW(#;z7mSckFdY%Eii zju`bpKtwF$U{5@20rjcd=YG*F!U$)b3g*nN~S5?)la8!gdbh4`hI_P z_3lUek2+udVL*TKJ)H0E-k+8~IP1;<2KZy!g~#GQ@CeFQY+(?&s!4j+xt@vS$++5e zT+huUJ8`ac*ApcHF8hb}QB?&qpp-sn4+0p%BV-Yd3&0E5KI#EDrk9|anzgP-d@fC) zQR*x;_ez-qb)K&&reyNK^SZ=;WRzO(6EO0G8vN7TIY{To=!B=twgUw>BO@;gF84s5 zRA&1oIH`_KYtp5pF0P(h=X|39`fs=bV)9`nQQnioq}4htwG54QKI02SJ_L9_NC!lv z)0Y;ng>b%x{8Hp6-aGeCx$1*Df1T%nesIMr|Wa70s|3+wpEdI4RH zJRFUEDkCg#M<57~k7ugI08oh*(e=1rYMRjcXr`3bR)&{>Dy==2v@z3R8rx3Nn{b1w z-i|Wq_I-&(!~kc3^;*TGPx6IaZn+}N%U0?Ufi^4HD?CPdXH;8<0%lrt$*XvR7IQo@ z6d$f)pKb)`tB{CojEn$h8(OS!g|U%K>~zx=_{kH52Qx*+yD*uj&v@mXZWhCd(y0ubXoQAD687lK9NeM;I|?~C9v$B_BC<(*D`9b+^VEj;$qH$r7E+t$R? z9frb7179qm;zdJbxlm-Xey;m?n#rLtVX{O*buQZFrORKuqKS=_O6{} z%TT#j^b2=hmbT+p=X9QDPnkoiuG+{bg^`KYsw6GgP{6?XEEZsnh5SAQmpmbBfE{lRWjr48e}5_owxI{WGu@TbAT7@^#aw_B9JVfSu&&PjMZ^WIf|gh zxxaBtqC1^Cq4~OoaY*C?rysK8z6=!&n4fbZ6a!uLeFbpYwwIS%R7aJcsCAp34lHTw zRSRlFJrlM>79g=rR;Fov-$j@u8rG)Wv}|Bqka>~CA<+}bx2uHDWW~@-lVl$B{fHWx ze1Zt)j^vANvI~xficm00BRdZE!p(s04`f+ps%MjnPR`(0am|fiJTA&|KCQth#tXt@ za*NH93D-{M5QJ3HMBLsE(w_ge-*Hq!2JSdq!)!7WfE*n?sw)XVQx>kOe3$W zWr6#meN*AAG9O~U{7OHnCJO0ORTV%B+WOn-*W$4~!ie?MP$}t{?!nn~fFEYs#y_jW; zkDQZ`E!ZQ4la*rKS6b?megFsWBNSzp7(Fq-v3*jO@W_R5#vL~>mjH*6E|U;rt$qXt z)K^@7=-N0=IKM&b7bSV>jU9CM#)Ocjr?S!TK?fdm@up0P#v< zFzI8fMXik1Mr$mDlx9k3h>XWVV`m0p%$D1jJVvZ%La~GMe83lG!8bHitM2ZBvv4jwgA2K-1s>;scON!_yZ~Z!qMlf&|Y|lPbR}OTqn5LMAivaePeJYz!qgVv2EM7t%+^hPA0Y|w(W^+ z+qP|e@#ekS+E@FxyDu8mb*uZ_b2Bq&iAs`YUobx~@5`zi=NzFjq50uWxq`)W|S&q+D2o)EJSo0y`~dZ2lM9y(Kx1OZ$e%AY!v`Kr{?N;VqH@GH(r?)cfYd*NZE1{5rZ2^ z#!Ql8DIQA|y3;OC>`pk_;xI~4kkawIGGghp9S>#3;OY=nxsIyQ6b#d;W+l0qcpYNy z^OfmOQIanv(x0uY~3Ce6VToKNpvt88^ z!vqUs;xoPsZjw}d$Yx`+VvqF>105pJR9Qx(02R;3bSEOzOQ#LlVO#846}8*WC&l|m zjh3l|A{EJHcWkMwj*=yB!iMP(l48UueM^GD$gsy>V*eb%NvWeBc01Q&Ft&>_7<;(s z9R-B_J2XKk&{kl!pE3g{IyoYfox?Ayn^g7)|5zpnr}t8_0dmOq>=H@H;t&}eL%iWI zm7~?C#qc`y3jGZ{)FYqib)zD|QIxJ+P#1_%_y!j(7%0xPRByvMm`DX2tv#oKrkW1t zOWYSQcm=Tj(4@F7@T_y#qJHWp=A8x|aMA1aRHcL4Hfb6MTSbnK{%gxGDU zeevtHrWx&`r+wv!2q>i()$+lJ6UvWkbN$7OhYi)M8-w)}07@Igvm=+ra$9Ld8sT8y zB3%S@+n=nm3ajFLkJo#sU6yL{sW%td2PKi1DafQ-EtTiMa<`!S%n;ys zsG{i*Z2jt(2q>L0hv>8Myid1i$bm1v;DdzWT8jBVnd_hj!_fF4Pf|j-`4*_&EtL{@i%*OmtI!vcd<9>mMQ-XIk#?UvbXZF-|E=8PP$#qjeMx)kba6{BpiK;j+`D$dpMLxiIS_x^*%H zRE`}y8lF!mMurI=>`qI4Mr2Ps#zE<}cPB;Y>K0>oGG8+7OD-S5e`ceFnB851eCz}^ zIeRjKqzna7iP4~9V;vqh^Pr#MhlpWrg+eP5>}iew$hBhjx)oP}b+7Vv#tB#3Y!|UTZu&16va{8@As zN!GCh0m1@h*Uj}Z8L-9zNxfgg?cq~NcG-<^U{#7iEQO5C*|yHv*_qf!wTbWnsE&|r z^1M8t_KG;=0e5eUqnpwas&LPLm(Uo8GW!O58Ge%q_ktr0Gw`XjO29jfOd`BSBPY*|cdBuWCL)9c#t~ zX8R-5nvWO4ZaT6-=#l_*u0S?YG1AbpaN^H9Uwcof%NcN+quXCg%h6;o_F)bNBTaU} z4TcEvm9O>=x)KYmfRYkh2HQt9n_sujFcIZUtPD9dd)^lF**_)f3@Y-{(@dZCiqA2o zF`{aO-Q{o1Ha>tqS}u0NY+DW&R_(O4A3U=T4O#tqPd_P7oB`E^mmm74;@U#SupK}# ziv+*33KG@>4mLB&o8FJ=g@OEfG#0a?v80b_FV~#2P10{H_&vW_%)kHa%z7;Bi!Oe* z-Q?;UQ`ll>s9&6ND5GepXW?(#mCKAI5T$%Xp_~i7__VLxE}CWb4w!<8Ij79wdUzvm zh^nhrwpK3I7pnxE2=Hp3IM?~cEX-&d#&Kbs&10AJvRA7XSHjfYwW}kie}aC$NifS2 zC^-5(o{Yr>II3in1W0ObtdF6-wx-QS>xDFtxjas$QG|MoN?Kry#kTc(BPqipuZ<0E zG(Yi-jBj<1Df80#o{?H7l1Dc-JQH3fBx!|{TmXC&pB?^OUh|_fnqDx5i>hJj=|W;Z z?FDc7^zT~@!!MKQgJHf6Qz0mE8^!-cUNSWkGIFqml}w_P(WHTVkS<>Zt-Gof`t<

33OR1_N*!%ylDDa|3D1;gP8brBkv%FrMeyX$5% z?wU8WG)fd*F)Op`gT>(p?#OCYCID&>;1E-|?d~KsUA6Kyx;m2XpEZVMYbkmaA|kn* zShUcMXEeFe2Nq=;{iQMVeQXz4sO&$Eaa`7C+bh z&%{WeIR(3mO}b&=8q=#Pc zk%D2<-Jp3kB-pWy5Ssjw93!~MGwS2hEXDl<-_M0DYht)x8GaCxj(+nJJ^v6bl#}*gB2!l_G0pf4xy*5~Y$_&gIpP5MBD7Beq+~~|^Gx^Vg%2dOkNt$Zm z*%#*MXvlAi5}QfR8WM;LnF5`$^&0)0CMj{-X&8J0iZ6@3g#Fz)>9|uY{Sskz+=WQp zm(vr)l(Sbv6|JQ{9l_@2Mef9{MZevY3OD~ypX00Pe*UTJ-=qq%zm|MW?GJ!dw&Zzs zf4}{@_x}FTPR^AB8!nZ{1I)27-j47m<$n+R5NS~W5oJ!vuB@6Z{rr49S=i9iGd4_| z`s!|GOsK_F`mTWuV=(mxDRpl2jUW*>;x0h&b&In*GjrqH(IbcIqajOsrf$zO`BA$w zRkbGg+aXXM%#Tj*F9ZY0^!AoFa}-v*nAuWr_;LRnq|f)ShXSNDM{`oT_2o62v}MIc zN!goRwN*Q@9kwZ}C1?9@F~q}J_id9 z<%w&&3z4mJ4%=X6(j)zC*No8~_2!Vctr__on+hO-X~(OjIKCvK>mQ#Mg+x?XiQVTd9-zuN_o) z)a&A<<$Sw)M@=03NdAo3`qk27pBsO4+{W#29e|#u^wE56;m`7*>ApkTitf(nh)?iD z%NJd_(}i0tRv|cB)hWQL=4@%n%cs&lNUz7o-IEIXH1aw+O=EPUSR=>MY5A4dou2TY zWHWtDL_<pmJ{OFDbR_}3WQOh;SN7aKQ=OiPIzsJ|Yq$&G09PFr#4}Uc$`7>@gYI%bB+CUYH z+;-t5Mpq1!VLRJ#)+qnoGUmi_>D39|Dg~!@S~B4S;qd8Q7K1gJFJ}XMTv&w?AZB|4o==NFQ3ATB{v=j-CcJ6O}Mo z&XzofH&0mPnn3Kgm(|ppPGN(k_8p)cC`^hE%nD+hjgf(gfI7igtoEb_Y2iH`OCWTYMEf^;c$tiEysHBvn<_t z)G2*CrKT3k9bdWiMVI@af(?n+k(C*`4NbHAo7x!kG?h|ndrT8Y6~}Rn)mB214RNU$ z$8@_^W(-+1PIR+^@o3``*Tpl*)1h<$;z+MXJdR~@K{UZ9 zc!_3)y~PTXSXNAo&<9&Gsx_26N^01ZjolN@T2YL*@1wI_^=~&TyoUk}*zU&Ek!|u5 z+ZFdu>rR?$Gfolp_TP9Jb=FIUrw%2hW=BT$6|Oto9v&ka9i{OXSMx4v91YCP*LEi% z3YvMKcJDKB9+;io%W4nck8-0T&Bg=bZCtseMwF$Yt zkzXEPdtnF|Np4dUF+EK^SL&7Yk(UqOnH)EA?*bOvo%k;do)2cs-+%;f1rwbE5k9$E zE;$vWU;~y^xKAE3>4W`?1LJ9#mvRLnvq{Varmms2z0rB4S$4SrN(D`N01Wq$5ISy- zjqTR)-QHgH(^6Z%RbR~H)Z56a%gHe`(?*S?*S3=o)+K#w5L80B_1_$LgdgHidVKiC zFoj>ns#Lon_frXtx;UsfbfXMT;@q(Uf&(|kuf)IKi@I+d%b@u^{EEIqUz*cONR`wU4SU)re#&!D&Hqv`b#9V{HQJ636sXF7ISDQMu- z+S-IQ{HJNd&ZeucPvDyMHTU%yq*TY*=jlew&cUSa;!O@lXI*2W9%;wDu`DDx>MBB{ zsV1s%GDXy6Ca&}w#wX{D5L!wj5k##TZ6OO68#_B2u5_Tw*4F7Jk5{86Ni8Z-U*jLG z?oMyr+#I2DVB}GSP)Ov~9VUix3QWDv1`hPMPkDuWw7N9yq|}0}qTj8W$s~iqE%@I2ReEJR@%ae`v%KkvQDMw!NyLR+jpX<$C|}evRaj>{kF*TJ7cSI99^gzXla8@ zl?u)yN8Lh;=AvPoRnlqvOFkF^fa|sb!o!=0$sC0z3JEAOaz1kMRRih3JPk^foFMss z+7ADyzf*1CjYzG;wE+=9!sU={ZT0aMAJLNRWlF<)olE1eu?uMqpu6 z?{GTqcmmOq)63GGj&7EU7C2d;5ZxK7di+ai}^K*_766O zzk}L3)^^fED+ag0HI;2#Js*x=d8ha5V&}_xhT+SDD1^h@rsipt2 zErJMH8HXJ5AE>M6pSJd#>C!2=L1(w)ojQuoWz#;nu9eF3@^R$?$V4|@-R}y7I+*Uu zI2Pq{^rDRgXvWCiRsL!PINLx`KVRPzx^+s`Q3_}y$!;cu$#z|@UyWfBp*g28*Bq(?GVK(OilJX&$Cjuu!Ek#7!y+s+fEgkWL1KxLLd^GHF^jn zYv`RoLx4uLtPop}>^qYf1{BP7tl6U(_0+lhk0asWUqHI?tak_>TqbRw)l=Qmj1mJ}s?V9&Bs!Qt-QR!o`D$cSn-H~c8SXY0=KG_GwsY-k$$8~ljn%@^ zC|zXCt2?)18|i{Fjt!17#;JR}yH;>F@q{soFgI4&!t3;F%0#7&7K(q=CTx$0<}qe5 z`QpNf?y)3%X_8dTQJ#led_YW$CD+A!G3U37e?>hK*Wc!iIGa=;iCb=y7OM>0`obF$LOGX6#s#VQ>;k7jfEct z91#z&c<1H>$juyu_!dZuSmLz-PSQmjWBSozCIo0Wr|27tR(V*(iW@7$H8Zc z#ylpo-30c(Riykh;tviBJAwJFgAtF01>tBrHcfKrGVtieNU1RYH?i3FE?3U!2DGiA zWyG|AKH_P)0D$6p0)fy)%vvG?nbL_xkbHyI4Sg5^RP`APxwV|C$hw4-$KDDu$)eeey;#YF=uIgxe28NYN3L!pDozW*a9yh-oPJ%{^l$;T zd87Fgt#nE&GZZqJ!k-Y!r5Cq1_ziHqB#l$!>4#%MO>t4%6K=78NcXZL*O_x|_TG6{M-(c7|#7 zRZBC(Mn_Gkt6%BD5TI2&R@!7A;-YH2(!Zpf3z0<6lWg+ zU}Uk!o&&fS9$u&^F|OKkfBicpMd$em!nyE=+RJU)eFNwDP)%q9a!q625a@)3f~z|O zB#|z0*P7iyA!Y@KrM%Vo*cTA66DTSaK}Ia-OFL@Gjt(pv@tAK4Ja~AGV8ZNaPY+^` zd8F(%-fZZ&*)u5Asp9Dg1@gUup6ckq5V!L}Kzmn-G}SISatM&?NPe9eqdM0h{u-9L*a{1z z_B#7G%E_gM$6$LZ$J9I>w{wUVsE%Ik{8p}FTYUpf51_m-zMD3Be~v9I6>3T$Auz*k zwtPpcO`V!B7u}NU?h%3ii&zR)Rem7+qBDp9u${Zf>glp5jc}MN^X6_Y2D9azB#ps* zzO_EUG)}K+on*2>nRzub@Pf%q0F5@ntxgfuaj}j`#@x%JyMGa#;bgA(;Cnxri}K1Q&Bj;lHOc&tH~{Kt&EQV z2Vj?=(aX?6$;iU^@E-s&HLNCkCfSK|ghJf@SH3~}oVgu{@go^+eHn-BLHzVCGOKQ+ z&trsz(ky3KyIyU`z`pZUPKWu-d#7%*d_dRT(hSpqyQ_v$Btb}|lF#3c5KCy?E`e!! z|F!Bzha^SZ)%2J;F1|W7H=Fbzo~S~qyZiCqaZXbPR@od=Hp_E%8i*|zI!D^VyfY8S zSR>5d{KQ|RVUmLHqHWl;(@pgB_LCdkzgKkIdEn(xlJ^U&g*dYUYK;H^Q$l}4-NY$* zunOR9Lp~LUEGRc2p19+;|m;=6j0I2s!U8a%Z}cvgf3aK4UHNV^8;bV zO)cuB_)dhRn&85u+Pz!UU*+qnS-0*==7UcAQg6<;Gjl+??xEr1R3j{irWL zU3~W%GS=nw6IlXG%nh1IZwr#*rJ6vCeMMV3MUOa;{=0|L!hbK2NN>4wN6d4_3&D52 zVi{h;qM8UMB6qltS_VG+Y+nLmWX_7yb6y@O3qdViZU=;d(hi}RUW0a@9nyl}nw$O& z+5GkU;}NgiyQi;7puw!DZRa%SHvv;`QPwLxXLv!(!4&*^^J(J8$b@WAW>?KAf{pF! zyFmO-Eu1$7Mi&kC_SDRI2HYFX{&BHbxVngMgbng=-XV88@?yE1B+#j7Kn(R2$S`VDu-K7Ql#y!_co-3n2zPQQ9)VtX&AH}GF zQ$2HDf@8$Cb10VOYEsX|^KQP1l7%U>FI%#6nk$;8Xn2Z`v6SDlU6>#{GcC5)F1rGV ze2qmaQbtvV^G*cs>G?0(2B&km_2nF~R}*U2r03ky!2Nj^r!&o;H4MalEqux?H_}C65gS0oJMlJYL^PV}1Y29v3?~g!mx0NMcvoep52YJX5}B&>N6>ws zlv~46k(sCgvw`A>3%UT9qB6!3pU^!@iglidIhw_82_kVe<`h1X?TM#=&Rj{U;M7|T zp1{uD^8sK%-S*r!&f1R8huV7@GRzN|shJh2K;ADO&pwm1B@ilQZ_s#su?kwpl*l?muU|(q|NI zNMJf?vW%UpC!FyveTO8E(tldmzk`R$!HY++-Ei*jo*{$`rjn!xZ>>mr4(Dc5OVhLgV>$$)_9^3 zsY@!;CrPMl087kFjR+he)dYf%|o1p5d?&7;$-Y{LjrUO!CVDi z_zSrTs&FQ%H!>bl_VlR8i}w*@w8`JLkN-r>z*3`lOvInq)wb4#Z(C%`^Gm!^rFVn> zqIp<@;1U9g_usPRUX@rGYM%M0RZD1jLdy$*WR$jQr-6CiPHz!K;R!APy2>^I9oe|^ zmm9~KaA6zfjmRyCoO+HilDJH-9zG%nLQotK(8R=UX}~M^uq>fbEc^|c4eWBk1z`)H zzSnSx#5;d&QMU9KKj<@}xx4-Qwx*lYKG#_$^3rFs$5<*`fIcdJ=})?f^Mug_o`!@9 z53X6jR=?ybmS{YhCfj-|>7U$6P93AL@Jezq(Lvub_jOHJ!zb_a3^OV&vK@WF zDX`y9LhDLEzdS&(@-&!^sZ7)-N}1AF>1FwBwrS zKJJ-Uc3A>j;#qc6>!$L`zHO?8GDtP2<|5Jy(cZf3Gd> z3WWamMqmVxyxb7M?QVHX*$o|su-x+NQ!rxwwYL53C8>eWGus(dEL}pvQ^stDTn@ah zpAS6by?`LNoOSgl=7SJ~2v20@-}yEefQSpqJg2KmK(1ybnBhiN)`M?9$5JQ+Uc>ib zALcDv^ppW(GfObwpYDl?c>f|%9_&GRlP9w>MuZ35#s=nLPzMm89pTPvTn&4dW&enG zfF^@kms<#hWh*2tr7j=t>d*ki{faAh%~PiSk>YIqFdQyX$j$trTWVWOO&h*k2UMRaGx)n|(v!BlwdA$udtZzD!LSU(2>)O`RH0 zs`WC>Qs@_R3wAjn0;j*$R}0=W2inj8gqrO-Zire}WvVa7t}rcK{&;dDTmzl2ks%~F5EKCMS`OVu@&iHt z{T%r#)gu$&ZZBE%bFsh0x#-MWet?e_7_y?cBdtj3pGaN1iVmJfBVLhBhBdZp=*ps8 z7!ZPatstG7=E9&-^iaf-*uf*iEkrDJx751 z1&vHvFbHn<@hf2=s5WM(w{?+LQDELkWF*p)kIRpq+nt(e`oH!b1YF^8pSH5Qqy)Vk z8gU5VZ-Vpv)!(u7`oed?Sv?^!E^zGlVDx@%;OhT@mmR0*1YhAl+nqdc)%_Gt%dr3z zK$u*%LCi)ZLUd#`o6L6cWG=4)iV+Pbdq|;Uxg*bg+z8Ew&XDueWtVkOYmTQsDdP~7 zh3KOfT4N-iBUiXLkRNmFJL8Sh0)?Tz{_K^WkCn)3QE|L-Q!PHsb|p!HeB0O3G97Ew zo|0Rfa7?%*&)<$qyfs4tz8=K~w{L;j7Rxdjdk-ygjSFjA_ujy(XilsZUpE=mT@sww zk|MRJzq8W&mD4W*V0cS9xza009@Jb(S>NRfFf<;R_UkMYWV=`cu8Z~!D02+V6C{N2 zPr*P_K+Kz2yT}6^jiUf>##$t8{tmw#x=I3XhKHGIi5hJ4>=*>o|hnAQR^s07O1Nb7Xle!K8y$)2VKZ)*+06L+n6zq26U^`VFw)N z!ER<39~m7uSgo`-Z{Q!?&}!E&h%S$z996CaSAKFOg(wvYme`{l#g(|6D!6HWTz8D7_N@jp8Ab-Yd9bl3`@;vG?M^G z4=|mF>VXOc;>02Z4Ty!`=)q+61p$LXA{Ryl*Z;VM5CsYVLz0Ee4@QE=gj6672m6H! zCaI7YL5vNn;jl~8diG5;C>$z`tFkXe7*CoYMTCa^L&k5|7Ydrn>QOWx;r|zw8Hq?d zFp1V=R59<6RK2``Z9QwV^N(&HzWq?d3dM+FAgacYm1@>q(3p!?Xd=zr=*zdvVjE`< z?TUp}K}5E1+5p*zy#OxPR+_%W@dx?Vc&TZszOP|xa!RIL3Y4B|^3w8pM*CZCP$sr| z6RTgLtcrDqg@E6SNy92;i78LhN0SrZwo>F9qPze!=I_5$D%ja`iK*|qlJFu}xi zMS{VyH3}7r*ww%788a%%TFR84^6_?c`Tz+c zVuFP9AxWZQvydC`9RNS~K%T;qM@{YB13>a6Y2(KaBcYS2o5U*@aH8$V8-~uW_s)*4 z4lYjOgpL1k^8PUXDVMQw2aOs1e-8X#fuHeK4LtvGsa(mrk-JMEK!+YNp{gvyE-mG% zRgaVk+vrZzN!lud{Yn+ZKwRg%r)Nd2ath_&bekxkPqK8o+N|`_>i<>iQ+Q6rdU_go)MW~RgQwkL? zTex}!&6za+Y?MUCk(lOx%=!u4(}D7sJ=0d%;Bq?cPlnKNT=ODE1UeGYRFvTS9E6$^ z2t!l~%O5aK7zt%4N(!*3uwdYyoLYD2+|5r#R`;;Q z_$Y5@Aq6@h)ld3y5unvFNM0|u(>T+OpIY;&b-pb_BqhFfQ)wlhW={#g+AMG_ZS2f} z)*qs=0m~Ix^S?4Kh{ynV*{JIjBKGyF+90r#wkw6=h(>m~C=LSh{keFdirB?pLuE)C zQ+Qf~kvD4&Jq*2DVe>?&OF^Lud!^(KtoL`$!?s0?o7`P_C_3g}@4sm=@&e1BT^uy* zNs>(fj3m8}s_=#-=OGA8r?#pt!MS)LnORb4r%vDbR;JQWxDYO2~X?<`6#s#MN zky-i|(w%dcLZ$azKIOo3#F4sPo5X#bHg+p0~N&8>j z|MZ$K=rm)k@=n>UmKL<~NlVvGcU`lpLqVKWYutw@X8OVg~mrL(#JQLd5Ju%*ZWCFyOeXODY#Fsf(0e+~bogA3J;RGGT z{lQU89l)>|3NHB|{*07xqQUhbVvq;BU^=&$#?eqj!HB|;Ytd;;!|-9ShQgWwPWbUa zNaRV5inmJARK-ac5E_coe8Ry{raCIW=9w_XQEm+sUc39I54SkPrT3`Z@gT6 zb%5uDaxUNk{JS4ULwsV#o!gG@Q7;b(>lGz*6#FsBybLqoH!7c%z-rK*pkrW2vYTjA z5{arFC7^%UfymkR)*MhHAM1?jI_-Gz$|GcL)G*sDrD3xzsSz#D{4kSmVt84>BWc4H z_Cg293DmH}m%FxoAiFVBNb37$q{Lu9-SoEFSlAyP5_CU(@8P*KB*o;gvWF>=^!*XB z*DcrqL-;gEdMI#(aqa^pldD-?sivri3Xv-P+ezR z2N?Y$NAU9$P>K~Xa_}I)d)4!Bsox#5_i%I5L6vgg!PmOkcMOaF(e&{8;kJ@BI^_9^ z9H?pPwpCOW3W+k_`Zs5O`1m&j*nd`&h_5(iiVcWZmJ(%Nd3{wUkug6S=8VeLrUrqq zKbV=msI;-J4PEfR-pE@TJKKt;DGY}^Cb6%<|F2Qk|Np7=`tKh7N2{)#Dp2_U(*}vy z#1_&CVKC(*C7MAZt>?lp5PwzD)+nzKX{VsBisvj?E(Fq9!n zv#tb-wxieeeF>e~FICyF)ja_^)lv{cXB0mAV4CkuGu zvqw9(0k@`iQ*ZgtY4jTx@gIolL2s4j8+V}a-V zrhrhosQ&_Gb6z0(^DC%3vzz)fDipus`hY8zTk;eI{rB^>>D^%vHp+2oAU!Fh)_;aieTn!kvHk6K;X`?|9^?!S4f6zDKf?fYEMe?1v(LGy{290ry R7pBogwbb+jh=72A{tv!Pew8T0RR910H16C5dZ)H0bbw$0G|l}0RR9100000000000000000000 z0000QE*lUWfmQ}!0EY+&fi?+`U=a`sgtQ=o;T8*y3IG8%0we>R0t6rhgdPXF4Ge-n zTOKWO1>Lq?tddA~!c=vqY|mRPm~Jkf$3alKaSOQXz(O&VE1f*VsgrOuq_d z>7|rXFs2MDsgf;tWK`v$8XMSJQ`@!-j9msLqK!39ygWoX{d!d`+Zo0Wd>RJ2A)Wvj zcN3}a)A=?tyOIGztUP}yb{JP$(I-%VZB~F4Kn3WyyQ=`}09RKuSM=BtRCykNcE+$J zPbgm`DwT-((W|0QNFws&d-CRcLyR%=Z1yu|k9{`wd^Y=Szdf&Q_P%#}?`F?C?e*fN z=3|!my?=InK6ZJDNRVO%L9ki-SP<%MC`KRM66lz5gR1pzdETG@sVn6WdQSe?(zJ&Zf^{L-J%ODvLj>xTzCW=U>UGOcbM+&UA9Uy81k~e z^>QC9VHwP;IO}whMP@FLy+Lx_+Ny1_t-#}V+dH7UyC~4vk7lq^Nir|n4x?WAZ&(%s z1E(8N*8)m3;WXqpkM{2EodO6zK{g2;?+A|+Om6E4aZC*L38wjT`(bY0w;i}hO2q(+ zMPDlb0Vw9iO4-2h+&{P?h-gxb216H2*`gnF*6;4k3Bx>siUP(9DHr80n-A~fqSg6% zNxEw_LL(4LAuIxUP94*MnhxU;{!l_gyT9Y14A#c?5orS(-=lpw05?6yRwHU)V}sRJ zYeX2>AU9fv@PGejzHG{%;tD7+Gk4)vCgF4YT{OeE(~<$D5Kra8A0|+gkL5EwYM!*W#Q@6`+u_ zVh6Stnv;!_HUxNhu(QB{|2WAW;7Y8vd#9qmYpSZiKjm@iG^o04>C66>IGF@o`Y>$y z`%<;8zX`O|R9KUy?c!u|BDGPPIb1AyQ#{;KIOgv6|L@-sY%~B0XoxZdN)`wzG(cH~ zNNSA+WDP*c9+IA&pxIz+lO|^nq-+ujLs7KlkR)xKkh8+X(}oalTYK8;HK*Gi4wt=L z(>b0NdTa0WZxZPle6uKP_$^h4F)uD+W0c40pcQq#dTnCu5qJ}bl<(&Rd5&X{MYqkfW~HY1aPrSRYtkw zRnOz)MA;s*!hta!vjQ6I;4sY@N9)ByQ)Er$3IUs8O!&g`Pq9T>wptX-g=^zbF3|hU zPUSOcx`mj5-UU4}8KdH7VtHLg79@!>DU~HT5&yxWUsn|OZNSK6Ml7__Pb3)A>f8RP zZqfWMOVwyFzBEspX1^Z8D8$53lXXBNFIWGn^^69KxkSY3%(@boAVqR)2r5p*Q0$IR zQBx*8kL1}rpAXZ(uYt|u`&+8hDuae>wasPM-O8%JxP7Pob=TAJrn}q~YdLsX^r&BF zp&0qfPnTgqMug77#=*%&A(hlK!WiQ=bK`0pch7#aC?X*#LzF3ZG)W&Xh=g@jTM46y zNo;h{)xZWhQetDAh>fu;KE?lY&TzOh+?~06&0JUG>awYEd%4zV#HSx?Jw6i9(8h9B zEa=2Ru&YZzfBLjh=b)MRwtQS8S{j_WvU56aQ+wO_=j=7d*bPq5$TaGg1yg^j(HyNu z8PzjsDgP~2N9{69UfGQ5yLwmERd%^mm7>UG6qV9G^?e&_gF4*$tydqkZdcqDFltZj zfbA)a+L7rW)7tiD{!07HhuVKf);ta^?0wuvjK11y?~Z%y?Y=MvxpLvio*hdT3~BNe zAF{<=#pv^)$HVyFz8-$T14n3>1}>n-Q$5c4I{4@I?&fXwyhn`63dv_|@tHp0bL|le z&a=Ze<-F+dxo|jRW0+w%%=1#_MJe~PRCrY?y)IQ}K3oBQh*K3uqdS&IPpl|)g^JGT zi~bmhl^L5YF%~aNQy~|9Nlp$smJ8A|WvS@H9EJ6m29*x)T{4c(+r>cSF{-aU(Y$U} zDO|~ZVtdbYef#?5^QVs=GTanF{QmCt=HmS9^yK*H zaLus}-dQoM|LS3KB?5R@gXz>NYt~%%AAKZryD82~YA!vrn$XJ)?(YYSYeHT%l2Pwz z2~M=v@{745D@o~!xS~s8$L8N3rZ2d6+-m6k+c?6nzQGVTrd%$lR1iA{PAf!i_fZoZ zU%YdZm`O|SEbV}mBBnDvbteu)neRj_UrQzlD(g$97$ov~r!83Zj>>^K;hp=BCS|B_A*0X! zDpJJ)vVI^59JA`cElVzac&CX{ z88}t_(v9`t^3*AZ$Jy*Vr?e-)hy{-K^Ts|0?%Ey{eUof<7`V#`gDK-vPK9!entC8@ z7rf5uf>bTj9UA*BOCTYk5^XDmN6+djA!^-Kh(~QV(yGXH5XUnII&3iKyLr=Y&54mI~v6>$w(eVZYR(`LN?q~b8SMHi1dmqr3pdXJ=HKy~(5I^f39 z4&hI!Lk_WDB^y$$eRPp)?RdD=nzdiMA2n^nH5$d?XJ}Y3u?9uaiHKUbl{&6G9t_rg z5A_OGFN76*2U9s08Pe<4y~^5B`}1RJ2XJ^{CnjA_FNbt!xNX8I7o(e2b1Bcr@VNa7 zYr2SMNWNbq&VVZ-xTbe3n6X~J-HXdu;N>DTzf4vt2nVb>wo48bQiaM7c+p*Z?V)Q; z#b$icUPvB}#P80yuKk_CR=T0+Nb1`hD>uy9=qA+kB1mN?%K4QddQd`?($KGh+QmZ* zot4ZHQB;1^t4S{v=Fsi+t|=OfbozsWp~k|AgSb?#4pGaCIbDxASSNT z=ycLMgnq3}ZVp*qV#kf3>yye|ah8nEXfQ9|t9YZw+H%s|PpT~Bb z?^&Z>vd*TEESV}qF?pXYK>7ec_ub+`OD-SKI1OCZYRY(>43EW)rm>q#-lC;}MJWcg zD^9QkIWOfiNcUu6lKyV~&W!|CEG2J8!_nlycshu$MIp2Y6Ly`Dq|aUK@rXmD`9vMT z4*smuAfP${b;*R2U&V|suH(9UcGtfk49!Uj7=AK}5$g=e!I7T_gcHa8Nnea#>72hC0O7Jv`IlM-(ZzAyumhln>Wk z_g}A5Q9{Jv^yD*2j7d2LY=r7lR&fe#|98p7|AJY2vXj^g{XNQ`H^O+yOiIg0)aqP8 z+VO)h7_#!&S6JXWVcl1S+0GQEpLfmb$AU#KIrzyz$~z;GLecm*Q#&vwEw>Yc|IBHl0vqMfcxLI7VK0V8^KvJ8aFuxuK6;A^t+|<7AoSd*e>B*6|ZpEeo}iJ=aq$jK&{MvwNPW?m?PmGXoz5Wz?Ur zcEcFr6O+~@=V?M*YJ`~3K2cUQ%X-Ph@_jF%>=oSsL@z?AviaW|e}Gmr2(sbZK&s-V zBoK%ux*&0BBHFB?$!%jE`daY=Azl76#ypBj27>?^ib#$4gw|g3U<}L%@2f62D_lFz zXS#O zTbRLYDss*fkw&Ac!=n=y`)0+(Vezb+Lw7$!oOns8n8Wqra9OzJ49jl6xeSteBm}m? zB)oLi@!+H3vsqrwW$qD_I?7istqqof9XpxT^?YHI-7i`b5$P9&^GZM4?H>ZxM_MUL z&8hHkM!+y~0Euq19#AO_;$$RuT~wr~B5yx3g%wd_hANPPsyaLUkU|I6mPXv0E=EAt zepg3mHz#1t$4{Hm6-eII=bCk@5U7MRc&kCrbQ{O zbXwUsJC6qwqy*>YxqtCKwy{_n(hJABntR;f&DUKB;cQ%{HRU5dF=u>crg1#XDTHw< zL*{Iz!I)_phNcmoNY5eqOfI5c8U_SP<9^UyAl0mT6cUW)gjovV!SZ$bfQ$UCU1qfdM z&Cjn0T$3^;(mpCsM3Rqbo&*~Q)1SjP7EJSyLyk0k5^I5BM%4j|$JlABk+aZ(jZxy9 zfyUAhdB`({yjpcU4n_@E-Mb)!H65y$vttLWQNmp<#b{;Yb|5N5Jd7!QAdU`+q*te0 zmLF#w4Ro)G;4S(MnK(%|P4G_00uUhv+21X*Mwan}d?a_$XBkwKL$Z9pR&R5%OI}Qp zRE~3oeDe5Nrnk#hF7V3lBADJEsLX7vsn5Z|eH?ZIE32CWhr`mdk8e8X6q|q@b+Q=M z_xGhQZF#{8DI@uWvEE6L^x4=Wi$qC3cvX>_!C3-p@G_F$U7)U^prJaJa3&`4Jgy=} zjLmk2LXl768cFrO<1KbJ1eLA)wKhSzV%-RoHU`glBIwpamd)Buo4LtG4H^-;IK4YZ zwsQE;Y@wAN_X|p_K?W%>rkJ5792!7;DV1gZfHME->PC1(4nG#^=yb7)MyE+x%|hnj zo5C_o*HB-7=^#Ts5eyTM#18M79{`CglV<^k-FKbvUanNPb}+HbAtx)L-I#dlF_rOvr93U4%ukC#SsZBr&@*H^*)GeA4QsF*zk3G_aXyH}YwGrH%T|k5oJn$tU07VMyR1K1Nhc1$h9X;SgB~qUjOb#)WqF%Bw_Gm^# znfX&()YWtv%FW)|0|{w(hNJ9(6^V!t8*nik$gYG2Go8PgIs4Ic6cOr?2dfuaQFZA|D zIX&wZsw|URQpZdy`wRQCaCxqjon=^X==ESKB+gQ2SphZOLak^q8iAzI_6HVuNxhvEn zbn?-0#!2OO1-K!M(r-@;qXiWvfdlq%$oy7SFg0;6 z1K8>6vE&;85#bS__t=L7cITv(vgbP%t3;PzA;YIWM~Ft)Q<&E}YH{LUEk+^O{iB+t zX)1KA=J_ju9y-;ThlHUALKv7@#}-K}lf*@}5DLZ~F4Ko{b+cqCkEyYA`d{S*oM zFlYuQuX!Fi;{2fzCTw)zrbFrhr1f zIuJZ2B`dU4;su#x6a-g)Rwye8JOVqxJJNq@aHWq(VXlA}e!?086F6zctWj_g`Lc8w z+Y)l5b!@G=Lyfv^DBff(l)_Ud9->kCqzJrmSLHbbXDs{`0H9>WxJ~h-7hW8OMZ<6&Swtbnxa3zl^E-Ia$=H4P&w^uk7S z;kIJE>jWDxsuhTS&ziC15)#8OF0qs73HsTQOd8AGvXu(sz4?sG1e4ZxnY-{(Rl03i zrHJw3xY1Gz!y}|}`A+^5Zy&5?d>9Y6MI-*g5w*BuXuH%WEzbk%yxI{eT5$$p8S*@` zbfgy}6W?i`G$FY&jIVdts(g>BPm3wkG$h+z`c zd@yS;#fe}TQe~bP`qeQ}um|yGNnxpI?VpR6x^32g!5;lJVMaTqqhWh1(%IP|RUy@0 zuMe~nsK&QB#fk(OyR{1|F>4nAfS_Jh6`;AMyc`xZ;SzPYEa}-w+42z(b~xt^{DGl z&*t~m!axD!!!VbOdjSlZ<{DZ<&ZL3G=h`(?q!|#LpFG&dnIRE`%iV?=Ofw*u zJ~ee`XhQqp`l+VFcnnJq5UkEe=QB2&CW8h|2smh^K0Cb__svUrLr2#TZ4*s`$aSO0 z;$2h)+WNacx}Kj&QFpjX@~e-#1O1;!98w2k~C>2 z@=p9ku9Fa#!v4ina@e$`SQce=5Y`u|Qr#akBoqEQoTnG1Pjrl@$!5MBOtjnu6sR5L zQtY}iYA*v|P)6)iO_o&U7a>9*W_thfolrI+Imw~WDm&!NWdt&3(ak;jFq@TEAwz_) zaw_CxS#Ll54=%I0X3( zMh{689z`-5h?On(MtxaC^g7dR7ddNrNLg}#{f|FgGN^0a8!u>>K*M|j30#8Fyh$sz zS`v^jxM-7Ry(yhG#WS{UgR*%eUoXcwm+dIC;K97ZW~X2t5U~>}*_K`i445cg>~Vqm z0vmg@GF-W0G|esUvI`hLyj(hHZq(RkOAaX9+Lgtz>xyZxd}MVC=O30`TdWAWIyzhR z~4)E-E;yM<7AG+k_ki4?oTjn>r!7F2de^ZHuFw5{5 za!Cy)!%Ex&0B#k7VTKb4V>(*etidx?fyG}4yYMzv&!2}BIH@+r7TjqOgEcL6XsrU z-jT3F9Vw`-ZcGeOs70F`6l77mGD&TS-qB-?kRXOcd6}HY%6Qig`W$W{gCA7KFN(RA zl$L-dUrskt19!vgBKx*zNn$qtNHskIgoItFUg&ITsY+u!-gr64z|^#M_R=-#v%%!^ z%EMlDz-NTQX&_&PWdQmO{0)TOpf{d!>tRY-l2u+=oD7c^qb2X=RuK*C_?qX%$-<93 zaWoN^D@vSJueHdDK`ddp@7#uLZ3=c@$W>6YLXbiV*vZY=f6nNDl6X?OyV5G?$*g zv_Lm29hfWFI9R$Bo}Nk9L4y`Emvn*PFi*VQ`iocT8pTS4s343~mt+8h0lmRlBcnDn zb!uOQ+>?tU(LFwH{VINK&+h~)54 zoc!#0kI_VUSjeYXZ%%w{A_BVBqT@}$M3cev%y7%nCI(qBAS*ycl=Elg<^I$RRqmGk zyXJVgyVsu&G%da)yFURw>Mj=hd;u2_3t-i-8@jht9}X(VBR_c$hv*590R!RNP_AH+7oo;)`nzkz6Iw8+X zGHlz6ME~xH_!$&DFfHx01ZTjUNAnnW8qruRQeSOWiSVeRFI244y#?}sSUWB~td;t3 z3E?X%&{h)^k-o$3t#dxnc}J>x7Q5JN(1kl>t-3U!RViB35l-3~t2{DGS4eVWu6CJZ zdBNTHFI2}B(7*s)ajWQq?V~fH0Oo&BF4g7}Xuw1A`PHyioKOtsxABVwc2QN-mAr9E zF2w`i|%xk zQIUqO%Z5mW?B{g5Cc(G3SGF*?`Zt6`+b0ntfgG>l0T&9$b)2Kj%ICu7k5_Lt&fmxIq4hbh>6S1lL|(xXNeLj;^T3;}ra8q&SQ+u)qy!J-hYZAFWMlz*_;OZu zHaGn$eJG}O4A^v8tJ1N}+dKy%?U~5ci{G3K_YU-sO}EY2cp-MrkP7Q9r|o%{ zQ6q@hDCs36+$F}UUq>Wj@jIgI9)`BwOKTe z2~lI0;!eIzh`q?~*K z3sRO?5XtHx+D4fF#SsP=l)B$}>5cV4n$NFH)FOGe zT(};d&~cLbYbMEffk5dJtWJbX{NN}f15J=-V{YlfO08M2Y6?*O0mi*BY7{k5s{3<{ zOXY{N5MTn@g%25lxx}W!X9LD$-7%h047ck%fwr)dSZsvFB>Oqp?YFQiT~_UCa7Mc- z8FuV0SW!a8;RyX}r@W{Omuv+xK?SGFq@d&w4-4Q}MEzQy35>{~>#Yxe=peuY>jT!6 zS2~_R0SIc*KBqQlfUGHBv;;cmyqWP5=Y_(s00O%BHiJt-2KpScYkV|%;1(|cq#IZp zz#W*s;y9u)VN;|GIiG>oWFw$LBUDo~0~@K`VHyD0b4YKht5Q)=I9;M7J-C@*={H z?~RB31uoPk!d?SV-=ozSK796zjj;H0bg6+7^FK$gby2_}*t;F$GvU0(%311WYGG6y z68=te4hAD!mL9^n*q+1wWV-y4dih9L+z4G~egR|5m=NjsxP7%kwg3&;Sc!*Htyfsx zfgQpdly8XOv~uuSyF7~=U`%KXLzxB@zgmd9Qq2S)V%y~wCPWO#!w{U}P9$Hav?(vO zn_+lcjRI(fZB0g-rSX~2NV1T$s^d-_=vvZ0fc&cMUIRlr%|0ZEn2tY<5;^z>#9JQRTYf zH71G`;l}JJqq3UHS2iUN3uxg6^J2|YmP_w6N4jC(=jzyLn0i_Dme7lQYu(bBh?GJk zNthi-N>&8M^9dmu%xfvrG4Gl-W(AUPdb#4&P*|j?+M^cQQ$i z2h9Dg)~$Vp9ht>4`W7vGh0H@!1E&^bPTq&t5O1bfKvNaJu&RFV1e{ zXZ8Wd5LN&ugUvBYju#W9ke&WH!=Ury@4WzqtsDUcVHh?$+8%K^{)YHTCkjR6y&>O! zP)s5g@>f{C_|3TK`BUL0j&&WdwTwux?VgF5Fvt#lH}?e}hA=%nnC}1Aygv?hgIBTh zFh!jb8kxx-KQz>4rFu!*{lUE z5`nCEdpZ7Rzk=U;=C@fFwr#;ltqa=j)4m7#pM6X78J6E{y{KE3Zn@g#hqRynp4}n` zzdcFu_B`n&onHWW9@@fx>;b4&O0Nx^rKa!9#&Wqiq@}F>nb>Z!`FWsg^A`5Djlfls z4y$z`?K}w`OO=Vr0y_AOJLS@!Pigc|2?*?`D7zm@gx+tmq*5dg8igtX!$%9j7gons zRW_D)_}HB5Pt9*`3GMk+fR^8SqyRj7wuYBFwj~W4I(LT@WWLK8r++_sK5^Ss5LdM^ zfNVGj3tQ_LS&!d10?x@hW_D=2%=F|p@SHEil*kk?LrHw0n?S=rPFV3b%g#^J>&QBG zqQn=kKakA%!IB?Ai!J#kPXEgI1KcEXlP9lSk&Zo0w)9SoR(@yww>ac~_-m+WfUBam zV?wIK)wZWC{ck?UNeW>0K2&Tk%~cuhJNosO72TZ9*Fvk`H9NO4)FAg10uWhU@j!FubmX#MYg(ZnC1;MkF^mzq)}U z#ckZy%R-;eTtE8#8ng9*(7$I4laZN}r1N@Q1_Gg#45%mRf6=Bjo)(*Q{nmsNt~qX*<|GYUa`F`q_Up09>sL#UgP_F5 z7edj3FrQgcr2TYgT0%6n1ng3&zV%L+&$}IX0O`$~oON$&4zk2Py88|Kip@?|37XW zPA!R1YdER^kr*2iS9d6{4Emz=*~*(f0-V;8ky9p2WkiL~zDY}%G5+FM5R)SF%3ok? zTgvfesHat|0qDoA<0O>!ZceMnr~S5kb$P#5>NfUsyu(Z1GQ*#ZEi!d5I942Y)P|BnZ{*4 z^nHFrhk3*w{1CmxaP`bhb|inuz3r-UH@7GEEuHfZt1oE%q9ila1FTk2}Cvkx-Z zO%~(Mc3fY3*xsG$P}9(J&E2Xe1;oX4_3{_ZqKBM4HdBKjvDlOd)6SAs;lJc@9345JwRA#S+n z)MvRJjZzcH)8!p1>H=LHLn!1h;QpnT7P;a8P7CMf{N9fa)#zCMeO=8j9&~?mUMF+g zCPv*#-^pQkI%n_!Z*ouo0xl9LMZQrH46 zkBVj4o_NIb&yxHZLWpmof^tWwl1NzrE_KI}!gUGRGo|{b?RVI|kCWc5*ljTtTmhX% zoL0%3j0L(KF>6u<6V=@z7LcW?tIIVTwuqK@4 z`%{mZoZ9eRW4Xn>IqLSG$O#kssbcd7W8Hv3@>J79M-^2hpe6*j?6MW1cV}{H4O|JEmlMoN8v8dX0akzwN84A^-2g z0Oq&5@603}WB-Fr*R|XpOA3M%r=!j!24TW*p;dp@bbm!q&8q-(StB=c{ie&EzFgd+ zqsf-_5@Hm9(m}&42P>*M><9p%h71{i=m{@8cam!XzsAK*#5JRrJG~hJ^CyYOhz04vbfzgjOAm1Y=)$ENB^)|j&e|M7G{2$7@1gry*vWwFE!K2-Dog) z?(Lhsy+(7y&f}9OZP_cbx3CPGz7dm^z8aEUf&U2~ z`aPjZqzo&r#X@7F;L#%}kQjITa(laJKU|!$oK`kR+>UrnoBK7;>TFn+EfV4@#tGB4Y51m$iBq8G zuV951OEBNfqPNvH1yE5zC^?|mLI#Xt+I@v3@+rKwxFi;u&U4G<*EeL_%DCQ#;I#}? z306<{v84P!tfSNb(i+AyD_e`bovP|$U03UY-?S~tADLy@x#|>=Agv@%dmQXv+tn%Z z?{Z%O(sk)61+$px*XsaG8A|FgSJVkapBEo`^S?ZAYH5-y zMIhHhSA*9CwloD>$HEgug1A0-PboU`4-yr02*4~_8DCObm*boY;AW4d6)fv%Zg8^C ztx4B61mBinW8EcjE8Pb2-OxnD5AQ?p0L?NrRDun1A&YeYT4G;hUOAe+=qq1Y2 zW_Ooh4nI8I@!VL1ERNJU>}#=~^0EhMI9h%#c)N> z<=k4j`-^F!1qCjSm*EI8MYQAT{ZJ!~@WLQgf{vx=M{ye;Vz-P{#?kbob3?+w_v3PLf_NA^zi1lM=i>9HE|tA zF5sg)kfhAO>;O%F-uUN(^XUELXlljpAY3Pj94dgl4M99Ez|s&roiEbByVzHP?+JA* zQ1q+CfDDycFXK2>C8cNWwPP1GGpvLz_X_u{QEy54Q z{pH-#PVVyB9HMQ6#))eHRvyWo^6%E`(E_cb2s~{pvIAK}0vNBDYmYoDeuUC$jizRX z0`R-NO1Ix{r@0Ska2y4sFA9HlZa)?>qV;kYUKgIeqjnj$SsHLKVD_rYg3mb045e+s z5n(X^l-`;5d4wMnUSb< zAGIUamZuVA1-MmKMS$aJ-%;Dnm9T_2Q)(FRU^#hfSSbz}Se{D)ltOOcw28m6M|Osj z1}$-mc645z6dUo3KW|92_2t^wpNDV!7e;Vc0|WFU$$^yRW43oO-hHg=b1u3tAU$Sny@MsBp?I~M)+clZNN0Eu(T z!ad@J;@@n4DMUplMB2z9Nk{x0jyN?w8|DR@DF4ywqAVPV1;&P_moLA2N6%xGUCsbOVh{}^1lgG{0HW00N{Z4egS_!& z)75a7Tk3pVKpQTI=>zjP!1ZbWT6i{9+N~ykM`Z9V$yKW%v6xI9q&w2igw#(=%5IuUU_1-5}>$#u#_+`5#}@s=#?FpU-h4+b1HoAUGn zmH^Y@l9RV>cTG*%o|-(aNlDqd9hIEAeUvly&WRi*rBdYhWNK(QjUF0ib!O5DlpIDu zn#9+uc#QQGYsXu{Y1}OMdTyjpjv#Z8sYrF{F$H&bKtpSDSW*bPtg~ug5yy@k^+TPn zEq4W|9mMgx`YUVNyu08xpS()p^kIx z?{b%Tm>xG;EMAxYh&xV}3-8SS{B3j#-&NWbZ_jD0DT+*qkd!tR7DXq7Te!Wg9BD1a zg}Pq4<7n$7Ac~i}NLnw2?m=02+?@Jju{WP3&xNFWWQhaIWTpFUJV(|G=esi{J%v$p zhO`ru*P4Fm6t-nKp$LET)#LNsm6f#8r^ErXB^S+Q`65~S?VA`1Nxt4({)z2Lr1}`NY`WgxlwM21Bbcb?y%;WPC@&A zX(~ZSUA(3&r6!~6{)1CTY(G4hj@Qg?-4Li-p40i1==>4H8}q#ryN1&ti9?%EE+c2Z zCJhZEoyV?fKX4!7rUUHLrwq{RzbzN$enq+YMElzs%;cQJyyV=#NC^)Qqu?P<^1=lY z)Kh+7A6k92IlU`5eM3H3NB4y-J`6{UDW;xG=_XxQQ94a741T^?pn@^yf(XTX z4T_1<_geYret1ZXGH6p4r2=#Q&D-tPNUN8<#c{eZy>`n&GHvSQW0vHj)Nqw=pEwky z^pmHYukJ&x%_Qk!n=3ZWa~5({s3bylJZh0~B8fr`Y`z9k6u3U0P})(KSJ0H8+jgba z((A~X6pVjX1>f+jDtXcBt2O4Bql-2*YLsaCGsfj%oj&WcavLv@9AuSUTBn`kQYHAM zkC3)<`_(MDDNRK`D_pQf)H`t~D;RT!=UXj$e*c;r z*^i8yfeUoKvozYP!``aqUEYZD19St9M$Tc}~6IAOS2aQ7xkNwE^@ll)>`Mi1hT6Ks??n6| zG4L&fA-TiT9ZcYQ?%C12sAj6`KpyFH9%9XE{^NITTHinLeeBLgdFaZIVfHVW72m<7 z-<K?fb=t-}&wLMT0 zdWkAMO(|Z{5nk5ciTVr`rX6o(gA&Zz#kj*2ig4*RKta^IP=|{IbT|^lL3dQL!wKkhxkVT^5cnJKZxQp63Gq}>JH z(KdJZrE=^X!-SLjJ|AE0v5&~LfuKErqXmW*Kex6P?Kn2c9#VLSZ39g|Jt+2e4T*Gf zsN3QB!KJ2&#sc2PyJ{+qM48A9w*-IBxb_T{C=y&-aE%KA@TfPY&Y`#uFZY&?ns6r1 zor{3%g!%>eEX`F7)~Dn@^LWSJq(q4 z%wzl77A7moUD&>*BP=EMxM1ZwQy76)vf3+DXHSR-d1B-K>`R~Gj!Qzk(?xm=LnTlb zzXI5_WF6jJ5Os97p^!Dm?Q!{srYB|))JJJMt%JQG=wNlbEaixY)i=|!NS4dK4GJ=; z6_E6=R}PbKccQQ3?`xADub&E1h#vpm-0l5*r%`3e^6cEb8$6uWwEEW<7EG*iwnKZZ z$5W^F5lv1-L(dq8v)0+9m|F+Yx4QDIt!H|vg-pnj8=7uDvzw4g=LVhU1fe?&z-J|K zAk&h;|47fZWBEJ%eM}k)1n=gtUm^M@YaRu$QR-2*GJb+JYHty0?{oUazt3We0@ExB zj|&NpU(lQWY`E_l9UEnq^}X4wdo9ccv1>bB=GSK9uC?L^3KgB7P0X*KFa$~RepcuF z1xY-8p9vfzE!Vxmta-(#RN)w@wlR6e)m0?i$<6B=n(L+>wB~l?%7T;!1r4-8AxB=^ z!{_Vscnz--&c_Ync0Y#5oj?6^i+(vmAI$HO7uN@`ai1(U82HWXpG7P^O&k3q;d~}Z z1n^EEN01{l-=US1_qX|39B8#i1iUV%IoLyF{Z>R(xpLNQyV@Sk_M1OO^fl2>l}|aG z$A^Xb5aY}IPb3NPLY(X^#OxQ{2J-*Z*t_xmy4k&2iYnXHhtr-@{Qa{fmR;yzf#mi_ zK)q!tIf}UGIH@($11?F*j|yP;@WiQ(`GoId7*^-!|6LE0*_@eblG{L^45<1ofRa!N z88zXnjGLU@W>&{WZW<#!`XY5rB9}1;j-st2_>)&*Fzj%Rq9{4zTFpc^xpmjUySH02 zQ)g6GoKWpZ8IPR&Q|*&KULYVzQIsc_+R^2HzJ8g+7Or#)T{txw|> z!ediOwcPe${{+=|M#kDReJGe{E(GIK%`ZC&FI0Rfgwi6<3AZ&RL~k7x&Hp6g77B@Q z+Qr6L-oAPMVg8igiwWqjf$ejL-|p^YSfgR$Lh!88YhL4KO9QgE(NDSBb;TLb7tqy# zN5*p^+v(ug!PoIwvm?xohn-b&cU!k87s}!&mWqOY=xd(|ZJwH0WSvo`LHZfxOz0pi z7TK*V4-75!xng@7WA3iQL>$u%qZgZMt8qE>CZKMr35R;UTq?%L@84$?*7UCjI3Dz& zb=qhnH7eXgNp6$s8-|?4HdO1xT>`OhJ4@6Be3k5i8+1 zNBUd&PT%rP<3=-ciE$ddo_lV6RzkWpBu2U65;g8i|^OjTuGf)f% zB0rWHJn#MMYn9W)t4O8R#U{p$rzWq7muIXDK;Dzk1gP=8a9mw!0NytduniOCT?Iww zqIk@Vn2?=LBD;{C>sUbDyU#v9yJFc`k;Du_ERM+^%&+KvG+`L1AVeoTJ`Q)SNn&xN zDOiB}OUC-F_zX^qtYY;Bcg)p8W-tx{sc4&LbpYRav^dRUo!*?^*cwwU7VrUISKiSt z&}b&(S%*A@IDqcDzXDu07+HLJy1)H*45NHF;S~PCr;C?PKYqJ+u~$L1=RR@L{Zi7t zgW5h4FRANN^|aEqu10X&6Oz{0ou9@wWE1nKa0*#sB|2ER1xw_Ckfo@`uC!d{?Jj3H zrc+)e8!1o=?rS{k1Jhw{6%(ElgdB0{5le7O3L2NhQ_I(_HJLTHPP$#1bo&j>*TZY| z>>`@0ru?EJfmcxZi)=+K2}>qsgy*^VbLQ(y+BdnMc5 zA%p5`gwYg-|Lk=uUuL(g_@LKW*Y+M)1Q0PlVLk~?3LxBV3NMWREP&qkXW!+f%w9Xy zL{G0$i%W)Qkb4-rVn<)OFn|s*q>Z#l*5BpPZhDlbH6A4%4e|p1JBQ0 zwC>4|cQgx_DTq>ka>#;GBiyretknEOjblusvS+p6)9{NqY`oeSv1)$o+uqomt=RJA#H?L|$kO^ka0uhfUH zsR6?~`!|a=)n(+2;4uvO4`f<@cJZGr(=_%|(1Tyi<9#yz!ggck^0YIb2amZGxR6sE z#fnHjOoVN-U3Z@22G`I%#D6yZtW7<)aI+~`950Vpo6AD6!%D@;9b^4X;+En}m-ggW z>%a^Ni%F~UOlrt(1A9(6c-VbUnfr>N)~AXaL3Pno!|2h4rav~qSB;n)>u)VWH-hgW zgsBqNq86V^guOF;c=DZ$xr-SHwYuw1poKj@)@?h6-I3mv4pvTWcL2#Q>BV-@%L1&` zcj?)DiPq=pv>(n4u5s~YYmSSqxtS9X zW1CW`7+-wYX5s(WsqID+&)vdNGJJD2IfxQaUG4v~JrR-a9-tB<)OcVsGQ#H`A@|h% z#-iYefkT-60Sae4)Nv~#@E|eP%T?`r!Kd-`PH#ib^zeaFkgeF`ng?B#-z~$2maN5% z>=u~2asA=Njln?p_4SF?y~$ot0I=J>qLm%+T$~i0^-WReb99eF)L1% zb*x{36^sW&B}x#w^H-lexW5Itvov96zwA}-&sSthD}fKjIaB|pBj1@Maid5*N-kY_ zb<^&!Uzf1ITkaQ{}x*gT*|VMRtc<2%Pd!%&9{?P@T|QB z9vh3wj;S!9G5{-kW9HF7DdPZP%;lXFJQz#pcG$!A%ym{J2jz21KaR@EHNbq$u&hkR zF@zgF(Lw|2{hjvi6h_fDm02k~6Gi;kF87sXIlc+0po4(Gygp5NX?^x>pRrO4I#)C` zpd7R{8B6n9v6t$thp~LB zC&H7LCtPv9?RN7`UAd*RPMW}ALXW!*iHz*y5lF5l-9Lm*BdtP15Az_ZZ5O(-wm`S- zFE7+o!l4Ci6?(!DbK^g%q!S4*X#`+k(CkK7EvUKH5J=L#TT}$O%lmBbrwfldp$g{S z+_-u1=J2pg$8+yFO@ph8mx|LRtBgWLAxYn1Ci^SNQEtDJe~-tKgWVyCe3)_b7C+_m z%E8r|=cx-f4z_+CN#3Tww#yInee4VTyF9ltlvOsSZ$|8@b4Kcn2-g;A8VG6B~ zrEjv8sy(knL*bxwk�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 literal 0 HcmV?d00001 diff --git a/docs/book/fonts/open-sans-v17-all-charsets-italic.woff2 b/docs/book/fonts/open-sans-v17-all-charsets-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..398b68a0853fbf6368758deb1da49d347e3e7d89 GIT binary patch literal 41076 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

  • ~`;p}3;==ZtNy# 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 literal 0 HcmV?d00001 diff --git a/docs/book/fonts/open-sans-v17-all-charsets-regular.woff2 b/docs/book/fonts/open-sans-v17-all-charsets-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..8383e94c65478622baf43553262e0e31b8725e2b GIT binary patch literal 43236 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⪚aqC6F-jh=?`}zBG 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 + + + + + Best Practices - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + diff --git a/docs/book/guides/daily-workflows.html b/docs/book/guides/daily-workflows.html new file mode 100644 index 0000000..1dbd4ec --- /dev/null +++ b/docs/book/guides/daily-workflows.html @@ -0,0 +1,227 @@ + + + + + + Daily Workflows - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Daily Workflows

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/guides/installation.html b/docs/book/guides/installation.html new file mode 100644 index 0000000..052f444 --- /dev/null +++ b/docs/book/guides/installation.html @@ -0,0 +1,510 @@ + + + + + + Installation - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Installation

    +

    This guide covers installing and setting up the KOGRAL.

    +

    Prerequisites

    +

    Required

    +
      +
    • +

      Rust 1.70 or later

      +
      curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
      +
      +
    • +
    • +

      Nickel CLI for configuration management

      +
      cargo install nickel-lang-cli
      +
      +
    • +
    +

    Optional

    +
      +
    • +

      NuShell for maintenance scripts

      +
      cargo install nu
      +
      +
    • +
    • +

      SurrealDB for scalable storage backend

      +
      # macOS
      +brew install surrealdb/tap/surreal
      +
      +# Linux/Windows
      +curl -sSf https://install.surrealdb.com | sh
      +
      +
    • +
    +

    Installation Methods

    + +
    # Clone the repository
    +git clone <repository-url> knowledge-base
    +cd knowledge-base
    +
    +# Build the workspace
    +cargo build --release
    +
    +# Install CLI tool
    +cargo install --path crates/kb-cli
    +
    +# Verify installation
    +kb --version
    +
    +

    Method 2: Build Specific Crates

    +
    # Build only kb-core library
    +cargo build --package kb-core --release
    +
    +# Build only kb-cli
    +cargo build --package kb-cli --release
    +
    +# Build only kogral-mcp server
    +cargo build --package kb-mcp --release
    +
    +

    Method 3: Build with Features

    +
    # Build with all features (filesystem + SurrealDB + fastembed)
    +cargo build --workspace --all-features --release
    +
    +# Build with specific features
    +cargo build --package kb-core --features "surrealdb,fastembed" --release
    +
    +

    Feature Flags

    +

    kb-core supports optional features:

    +
    + + + + +
    FeatureDescriptionDefault
    filesystemFilesystem storage backend✅ Yes
    surrealdbSurrealDB storage backend❌ No
    fastembedLocal embedding generation❌ No
    fullAll features enabled❌ No
    +
    +

    Example usage:

    +
    # Enable SurrealDB backend
    +cargo build --features surrealdb
    +
    +# Enable all features
    +cargo build --features full
    +
    +

    Environment Setup

    +

    1. Initialize a Knowledge Base

    +
    # Navigate to your project
    +cd /path/to/your/project
    +
    +# Initialize .kb directory
    +kb init
    +
    +# Or initialize with custom name
    +kb init --name "My Project" --description "Project knowledge base"
    +
    +

    This creates:

    +
    your-project/
    +└── .kogral/
    +    ├── config.toml
    +    ├── notes/
    +    ├── decisions/
    +    ├── guidelines/
    +    ├── patterns/
    +    └── journal/
    +
    +

    2. Configure Nickel Schemas (Optional)

    +

    If you want advanced configuration:

    +
    # Copy default config
    +cp /path/to/knowledge-base/config/defaults.ncl .kogral/config.ncl
    +
    +# Edit configuration
    +$EDITOR .kogral/config.ncl
    +
    +# Export to TOML (for kb-cli compatibility)
    +nickel export --format json .kogral/config.ncl | kb config import
    +
    +

    3. Set Up Shared Knowledge Base (Optional)

    +

    For shared guidelines and patterns across projects:

    +
    # Create shared KB location
    +mkdir -p ~/Tools/.kogral-shared
    +cd ~/Tools/.kogral-shared
    +
    +# Initialize shared KB
    +kb init --name "Shared Knowledge" --description "Cross-project guidelines"
    +
    +# Configure inheritance in project
    +kb config set inheritance.base ~/Tools/.kogral-shared
    +
    +

    Verify Installation

    +

    Test CLI

    +
    # Check version
    +kb --version
    +
    +# Show help
    +kb --help
    +
    +# Test initialization (dry-run)
    +kb init --dry-run
    +
    +

    Test MCP Server

    +
    # Start MCP server in test mode
    +kb serve --transport stdio
    +
    +# In another terminal, test with echo
    +echo '{"jsonrpc":"2.0","id":1,"method":"kogral/search","params":{"query":"test"}}' | kb serve
    +
    +

    Run Tests

    +
    # Run all tests
    +cargo test --workspace
    +
    +# Run integration tests
    +cargo test --package kb-core --test '*'
    +
    +# Run with all features
    +cargo test --workspace --all-features
    +
    +

    SurrealDB Setup (Optional)

    +

    If using SurrealDB backend:

    +

    Start SurrealDB Server

    +
    # Start server
    +surreal start --log trace --user root --pass root file://data.db
    +
    +# Or use memory backend for testing
    +surreal start --log trace --user root --pass root memory
    +
    +

    Configure kb-core

    +

    Edit .kogral/config.ncl:

    +
    {
    +  storage = {
    +    primary = 'filesystem,
    +    secondary = {
    +      enabled = true,
    +      type = 'surrealdb,
    +      url = "ws://localhost:8000",
    +      namespace = "kb",
    +      database = "default",
    +      username = "root",
    +      password = "root",
    +    },
    +  },
    +}
    +
    +

    Initialize Schema

    +
    # Run migration script
    +nu scripts/kb-migrate.nu --target latest
    +
    +# Or manually import schema
    +surreal import --conn ws://localhost:8000 --user root --pass root --ns kb --db default schema.surql
    +
    +

    Embedding Provider Setup (Optional)

    +

    Local fastembed

    +
    # Build with fastembed feature
    +cargo build --package kb-core --features fastembed
    +
    +# Models will be downloaded on first use
    +
    +

    API Providers (OpenAI, Claude, Ollama)

    +

    Set environment variables:

    +
    # OpenAI
    +export OPENAI_API_KEY="sk-..."
    +
    +# Claude (Anthropic)
    +export ANTHROPIC_API_KEY="sk-ant-..."
    +
    +# Ollama (local)
    +export OLLAMA_API_BASE="http://localhost:11434"
    +
    +

    Configure provider in .kogral/config.ncl:

    +
    {
    +  embeddings = {
    +    enabled = true,
    +    provider = 'openai,  # or 'claude, 'ollama, 'fastembed
    +    model = "text-embedding-3-small",
    +    api_key_env = "OPENAI_API_KEY",
    +  },
    +}
    +
    +

    Claude Code Integration

    +

    To use kb-mcp with Claude Code:

    +

    1. Build MCP Server

    +
    cargo build --package kb-mcp --release
    +
    +

    2. Configure Claude Code

    +

    Add to ~/.config/claude/config.json:

    +
    {
    +  "mcpServers": {
    +    "kogral-mcp": {
    +      "command": "/path/to/knowledge-base/target/release/kb-mcp",
    +      "args": ["serve"],
    +      "env": {}
    +    }
    +  }
    +}
    +
    +

    3. Test Connection

    +

    Start Claude Code and verify:

    +
    > kb/search "test"
    +
    +

    Troubleshooting

    +

    Nickel Not Found

    +
    # Verify nickel is installed
    +nickel --version
    +
    +# If not, install
    +cargo install nickel-lang-cli
    +
    +# Add cargo bin to PATH
    +export PATH="$HOME/.cargo/bin:$PATH"
    +
    +

    Compilation Errors

    +
    # Update Rust
    +rustup update stable
    +
    +# Clean and rebuild
    +cargo clean
    +cargo build --workspace
    +
    +

    SurrealDB Connection Failed

    +
    # Check SurrealDB is running
    +curl http://localhost:8000/health
    +
    +# Start SurrealDB with correct settings
    +surreal start --bind 0.0.0.0:8000 --user root --pass root memory
    +
    +

    MCP Server Not Responding

    +
    # Test stdio communication
    +echo '{"jsonrpc":"2.0","id":1,"method":"ping"}' | kb serve
    +
    +# Check logs
    +kb serve --log-level debug
    +
    +

    Next Steps

    + +

    Uninstallation

    +
    # Remove installed binary
    +cargo uninstall kb-cli
    +
    +# Remove project knowledge base
    +rm -rf /path/to/project/.kogral
    +
    +# Remove shared knowledge base
    +rm -rf ~/Tools/.kogral-shared
    +
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/guides/quickstart.html b/docs/book/guides/quickstart.html new file mode 100644 index 0000000..9e0622b --- /dev/null +++ b/docs/book/guides/quickstart.html @@ -0,0 +1,495 @@ + + + + + + Quick Start - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Quick Start Guide

    +

    Get up and running with the KOGRAL in 5 minutes.

    +

    Prerequisites

    +
      +
    • Rust 1.70+ installed
    • +
    • Nickel CLI installed (cargo install nickel-lang-cli)
    • +
    • kb-cli installed (see Installation)
    • +
    +

    Step 1: Initialize Your Knowledge Base

    +

    Navigate to your project directory and initialize:

    +
    cd /path/to/your/project
    +kb init
    +
    +

    This creates a .kogral/ directory with the following structure:

    +
    .kogral/
    +├── config.toml       # Configuration
    +├── notes/            # General notes
    +├── decisions/        # Architectural decisions
    +├── guidelines/       # Project guidelines
    +├── patterns/         # Reusable patterns
    +└── journal/          # Daily journal entries
    +
    +

    Step 2: Create Your First Note

    +

    Add a note to your knowledge base:

    +
    kb add note "Getting Started with Rust" \
    +  --tags rust,programming,learning \
    +  --content "Key concepts for learning Rust effectively."
    +
    +

    Or create interactively:

    +
    kb add note
    +# Follow the prompts to enter title, tags, and content
    +
    +

    Step 3: Create a Decision Record

    +

    Document an architectural decision:

    +
    kb add decision "Use SurrealDB for Storage" \
    +  --context "Need scalable storage for knowledge graph" \
    +  --decision "Adopt SurrealDB for its graph capabilities" \
    +  --consequence "Better query performance" \
    +  --consequence "Additional infrastructure dependency"
    +
    + +

    Create relationships between nodes:

    +
    # Find node IDs
    +kb list
    +
    +# Create a relationship
    +kb link <note-id> <decision-id> relates_to
    +
    +

    Available relationship types:

    +
      +
    • relates_to - General conceptual link
    • +
    • depends_on - Dependency relationship
    • +
    • implements - Implementation of a concept
    • +
    • extends - Inheritance/extension
    • +
    • supersedes - Replaces older version
    • +
    • explains - Documentation/clarification
    • +
    +

    Step 5: Search Your Knowledge Base

    +

    Search by text:

    +
    # Simple search
    +kb search "rust"
    +
    +# Filter by type
    +kb search "architecture" --type decision
    +
    +# Limit results
    +kb search "error handling" --limit 5
    +
    +

    Search semantically (requires embeddings):

    +
    # Semantic search finds conceptually related content
    +kb search "memory safety" --semantic --threshold 0.7
    +
    +

    Step 6: View Node Details

    +
    # Show node by ID
    +kb show <node-id>
    +
    +# Show node with relationships
    +kb show <node-id> --with-relationships
    +
    +

    Step 7: Edit Documents Directly

    +

    All knowledge base documents are markdown files you can edit:

    +
    # Open in your editor
    +$EDITOR .kogral/notes/getting-started-with-rust.md
    +
    +# Or use your favorite markdown editor
    +code .kogral/notes/
    +
    +

    Document format:

    +
    ---
    +id: unique-id
    +type: note
    +title: Getting Started with Rust
    +created: 2026-01-17T10:30:00Z
    +modified: 2026-01-17T10:30:00Z
    +tags: [rust, programming, learning]
    +status: active
    +---
    +
    +# Getting Started with Rust
    +
    +Content goes here with [[wikilinks]] to other nodes.
    +
    +## Key Concepts
    +
    +- Ownership
    +- Borrowing
    +- Lifetimes
    +
    +

    Step 8: Create a Daily Journal Entry

    +

    Start journaling your development progress:

    +
    kb add journal "Today's Progress" \
    +  --content "Learned about trait objects and dynamic dispatch in Rust."
    +
    +

    Or open today's journal directly:

    +
    $EDITOR .kogral/journal/$(date +%Y-%m-%d).md
    +
    +

    Step 9: Export to Logseq (Optional)

    +

    If you use Logseq, export your knowledge base:

    +
    nu scripts/kb-export-logseq.nu /path/to/logseq-graph
    +
    +

    This creates a Logseq-compatible graph you can open in Logseq for visual editing.

    +

    Step 10: Start MCP Server for Claude Code

    +

    Integrate with Claude Code for AI-assisted knowledge management:

    +
    # Start MCP server
    +kb serve
    +
    +# Configure in ~/.config/claude/config.json
    +# Then use in Claude Code:
    +# > kb/search "rust ownership"
    +
    +

    Common Workflows

    +

    Capture Quick Notes

    +
    # Quick note
    +kb add note "Remember to check error handling in parser module" --tags todo,parser
    +
    +

    Document Architectural Decisions

    +
    # Create ADR
    +kb add decision "Adopt Async Rust for I/O Operations" \
    +  --status accepted \
    +  --tags architecture,async
    +
    +

    Build a Pattern Library

    +
    # Add a pattern
    +kb add pattern "Error Handling with thiserror" \
    +  --tags rust,error-handling \
    +  --content "Standard pattern for error types in this project."
    +
    +

    Track Daily Progress

    +
    # Add journal entry
    +kb add journal --content "Implemented search functionality. Need to add semantic search next."
    +
    +

    Next Steps

    +

    Customize Configuration

    +

    Edit .kogral/config.ncl for advanced configuration:

    +
    {
    +  graph = {
    +    name = "My Project",
    +    version = "1.0.0",
    +  },
    +
    +  embeddings = {
    +    enabled = true,
    +    provider = 'fastembed,
    +  },
    +
    +  templates = {
    +    templates_dir = "templates",
    +  },
    +}
    +
    +

    See Configuration Reference for all options.

    +

    Set Up Shared Guidelines

    +

    Create a shared knowledge base for organization-wide standards:

    +
    # Create shared KB
    +mkdir -p ~/Tools/.kogral-shared
    +cd ~/Tools/.kogral-shared
    +kb init --name "Shared Guidelines"
    +
    +# Add guidelines
    +kb add guideline "Rust Error Handling" \
    +  --language rust \
    +  --category error-handling
    +
    +# Configure inheritance in projects
    +kb config set inheritance.base ~/Tools/.kogral-shared
    +
    +

    Automate with NuShell Scripts

    +
    # Backup regularly
    +nu scripts/kb-backup.nu --compress
    +
    +# Sync with SurrealDB
    +nu scripts/kb-sync.nu --direction bidirectional
    +
    +# Generate statistics
    +nu scripts/kb-stats.nu --show-tags
    +
    +

    Integrate with Git

    +
    # Add to version control
    +git add .kogral/
    +git commit -m "docs: Add knowledge base"
    +
    +# Add to .gitignore (optional: exclude certain types)
    +echo ".kogral/journal/" >> .gitignore
    +
    +

    Tips and Tricks

    + +

    Link to other nodes naturally in markdown:

    +
    See [[getting-started-with-rust]] for basics.
    +Related decision: [[use-surrealdb-for-storage]].
    +
    +

    Reference Code

    +

    Link to specific code locations:

    +
    Error handling implementation: @src/parser.rs:42
    +
    +

    Tag Consistently

    +

    Use consistent tagging for better searchability:

    +
    # Good tagging
    +--tags rust,error-handling,pattern
    +
    +# Avoid
    +--tags Rust,ErrorHandling,patterns
    +
    +

    Leverage Templates

    +

    Customize templates for your workflow:

    +
    # Copy template
    +cp templates/note.md.tera templates/meeting-notes.md.tera
    +
    +# Edit for meeting notes format
    +$EDITOR templates/meeting-notes.md.tera
    +
    +

    Troubleshooting

    +

    "KB directory not found"

    +
    # Make sure you initialized
    +kb init
    +
    +# Or specify KB directory
    +kb --kb-dir /path/to/.kb search "query"
    +
    +

    "Node not found"

    +
    # List all nodes to find ID
    +kb list
    +
    +# Search for node
    +kb search "partial title"
    +
    +

    "Failed to parse frontmatter"

    +

    Check your markdown file has valid YAML frontmatter:

    +
    ---
    +id: my-note
    +type: note
    +title: My Note
    +---
    +
    +

    Further Reading

    + +

    Getting Help

    +
      +
    • Check kb --help for command usage
    • +
    • Read inline help: kb add --help
    • +
    • Report issues on GitHub
    • +
    • Join community discussions
    • +
    +
    +

    Congratulations! You've created your first knowledge base. Start capturing knowledge and building connections.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/guides/use-cases.html b/docs/book/guides/use-cases.html new file mode 100644 index 0000000..48c0eeb --- /dev/null +++ b/docs/book/guides/use-cases.html @@ -0,0 +1,674 @@ + + + + + + Use Cases - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Use Cases

    +

    Real-world scenarios showing how KOGRAL solves common development challenges.

    +

    Use Case 1: Onboarding New Team Members

    +

    Problem

    +

    New developer joins the team. Needs to understand:

    +
      +
    • Why we chose SurrealDB over PostgreSQL
    • +
    • How error handling works in this project
    • +
    • What coding patterns we follow
    • +
    • Recent architectural decisions
    • +
    +

    Solution with KOGRAL

    +

    Team lead:

    +
    # Export project knowledge to Logseq for visual exploration
    +kb export logseq ~/onboarding-docs
    +
    +

    New developer (with Claude Code):

    +
    Summarize our architectural decisions from the last 6 months
    +
    +

    Claude (via MCP):

    +
    Found 8 decisions:
    +
    +1. **Use SurrealDB for Storage** (accepted, 3 months ago)
    +   - Context: Need graph database for knowledge relationships
    +   - Consequences: Better queries, additional infrastructure
    +
    +2. **Adopt Rust for Core Logic** (accepted, 5 months ago)
    +   - Context: Type safety and performance critical
    +   - Consequences: Steeper learning curve, excellent reliability
    +
    +... [6 more decisions]
    +
    +

    New developer:

    +
    What are our error handling guidelines?
    +
    +

    Claude (via kb/get_guidelines):

    +
    ## Rust Error Handling Guidelines
    +
    +### Project Guidelines (priority: 150)
    +- Use thiserror for custom error types
    +- Never unwrap() in production
    +- Propagate with ? operator
    +
    +### Shared Guidelines (priority: 50)
    +- Always use Result<T> for fallible operations
    +- Add context with .context()
    +
    +[Links to full guideline documents]
    +
    +

    Result: New developer productive in days, not weeks.

    +
    +

    Use Case 2: Architectural Decision Records (ADR)

    +

    Problem

    +

    Team discussing whether to add Redis caching. Multiple opinions, need to document the decision for future reference.

    +

    Solution with KOGRAL

    +

    During meeting:

    +
    Document decision: Add Redis caching for API responses
    +
    +Context:
    +- Current database queries average 200ms
    +- 80% of queries are repeated within 5 minutes
    +- Need sub-50ms response times for user experience
    +
    +Decision:
    +- Add Redis with 5-minute TTL for GET endpoints
    +- Cache invalidation on POST/PUT/DELETE
    +
    +Consequences:
    +- ✅ Expected 80% reduction in database load
    +- ✅ Sub-50ms response times achieved
    +- ❌ Additional infrastructure (Redis server)
    +- ❌ Cache consistency challenges
    +- ❌ Debugging complexity increases
    +
    +Status: proposed (pending infrastructure setup)
    +
    +

    Claude (creates ADR):

    +
    Created: decision-add-redis-caching
    +Type: decision
    +Status: proposed
    +
    +Added relationships:
    +  - Relates to: note-performance-requirements
    +  - Depends on: decision-use-docker-compose (infrastructure)
    +
    +Decision documented and linked to related knowledge.
    +
    +

    Two months later, someone asks "Why Redis?":

    +
    kb show decision-add-redis-caching
    +
    +

    Full context available instantly.

    +
    +

    Use Case 3: Pattern Library

    +

    Problem

    +

    Team solves the same problems repeatedly:

    +
      +
    • How to structure error types
    • +
    • Database connection patterns
    • +
    • Testing strategies
    • +
    +

    Each developer rediscovers solutions.

    +

    Solution with KOGRAL

    +

    First time solving error handling:

    +
    kb add pattern "Error Handling with thiserror" \
    +  --tags rust,error-handling,pattern \
    +  --content "$(cat docs/error-pattern.md)"
    +
    +

    Next time someone needs error handling:

    +
    I'm implementing a new module with errors. What's our standard pattern?
    +
    +

    Claude (via kogral/search):

    +
    Found pattern: Error Handling with thiserror
    +
    +## Pattern: Error Handling with thiserror
    +
    +### Problem
    +Need structured, type-safe error handling with good error messages.
    +
    +### Solution
    +```rust
    +use thiserror::Error;
    +
    +#[derive(Error, Debug)]
    +pub enum ModuleError {
    +    #[error("Database connection failed: {0}")]
    +    Database(#[from] sqlx::Error),
    +
    +    #[error("Validation failed: {0}")]
    +    Validation(String),
    +}
    +
    +

    Usage

    +
    #![allow(unused)]
    +fn main() {
    +fn do_work() -> Result<(), ModuleError> {
    +    let conn = connect_db()?; // Auto-converts via #[from]
    +    validate_input()?;
    +    Ok(())
    +}
    +}
    +

    [Full pattern with examples]

    +

    Would you like me to create a new error module following this pattern?

    +
    
    +**Result**: Consistent error handling across codebase, zero time wasted rediscovering patterns.
    +
    +---
    +
    +## Use Case 4: Daily Development Journal
    +
    +### Problem
    +
    +Developer wants to track:
    +- What they worked on each day
    +- Blockers encountered
    +- Solutions discovered
    +- Ideas for future work
    +
    +### Solution with KOGRAL
    +
    +**End of each day**:
    +
    +```bash
    +kb add journal "2026-01-17" --content "
    +## Progress
    +- Implemented user authentication
    +- Fixed race condition in cache layer
    +- Started work on API rate limiting
    +
    +## Blockers
    +- SurrealDB migration tool not working with nested objects
    +- Need to discuss API versioning strategy with team
    +
    +## Learnings
    +- tokio::select! is perfect for timeout patterns
    +- serde_json::Value useful for dynamic JSON handling
    +
    +## Tomorrow
    +- Finish rate limiting implementation
    +- Review PR #234
    +- Team meeting: discuss API versioning
    +"
    +
    +

    With Claude Code (even easier):

    +
    End of day journal:
    +
    +Implemented authentication, fixed cache race condition, started rate limiting.
    +Blocked on SurrealDB migrations and need API versioning discussion.
    +Learned about tokio::select! for timeouts.
    +Tomorrow: finish rate limiting, review PR #234, versioning meeting.
    +
    +

    Claude (creates journal entry):

    +
    Created journal entry: 2026-01-17
    +
    +Tags auto-detected: authentication, cache, rate-limiting, surrealdb
    +
    +Linked to:
    +  - pattern-timeout-handling (implements)
    +  - decision-use-surrealdb (relates_to)
    +
    +Journal entry saved.
    +
    +

    Two weeks later (forgot how you solved that race condition):

    +
    How did I fix the cache race condition?
    +
    +

    Claude (semantic search):

    +
    From your journal entry on 2026-01-17:
    +
    +"Fixed race condition in cache layer by using DashMap instead of
    +RwLock<HashMap>. DashMap provides lock-free concurrent access."
    +
    +[Link to full journal entry]
    +
    +

    Result: Development history preserved, solutions easy to recall.

    +
    +

    Use Case 5: Code Review Preparation

    +

    Problem

    +

    Preparing for code review. Need to:

    +
      +
    • Document why certain decisions were made
    • +
    • Link implementation to requirements
    • +
    • Explain trade-offs to reviewers
    • +
    +

    Solution with KOGRAL

    +

    Before creating PR:

    +
    I just implemented the caching layer.
    +Add a note documenting the implementation and link it to our caching decision.
    +
    +

    Claude (via kb/add_note + kb/link):

    +
    Created note: note-caching-layer-implementation
    +
    +Content:
    +# Caching Layer Implementation
    +
    +## Approach
    +- Redis with 5-minute TTL
    +- Cache-aside pattern
    +- Invalidation on mutations
    +
    +## Trade-offs
    +- Chose simplicity over advanced features (no LRU eviction)
    +- 5-minute TTL balances freshness vs cache hit rate
    +- Cache-aside pattern chosen over write-through (simpler)
    +
    +## Testing
    +- Unit tests for cache logic
    +- Integration tests with real Redis
    +- Load test: 1000 req/s sustained
    +
    +Links:
    +  - Implements: decision-add-redis-caching
    +  - Follows: pattern-cache-aside
    +  - Tests: guideline-integration-testing
    +
    +Note added and linked to decision-add-redis-caching.
    +
    +

    In PR description:

    +
    ## Implementation
    +
    +Implements caching layer per decision-add-redis-caching.
    +
    +See note-caching-layer-implementation for detailed rationale.
    +
    +## Trade-offs
    +
    +[Copy from note]
    +
    +

    Reviewers:

    +
    kb show decision-add-redis-caching
    +kb show note-caching-layer-implementation
    +
    +

    Full context available, review focuses on code quality not "why this approach?"

    +
    +

    Use Case 6: Cross-Project Guidelines

    +

    Problem

    +

    Organization has 10 projects. Each should follow:

    +
      +
    • Same Rust error handling patterns
    • +
    • Same security guidelines
    • +
    • Same testing standards
    • +
    +

    Currently: duplicated wikis, inconsistent practices.

    +

    Solution with KOGRAL

    +

    Setup shared KOGRAL:

    +
    # Create organization-wide shared KB
    +mkdir -p ~/org/.kogral-shared
    +cd ~/org/.kogral-shared
    +kb init --name "Organization Guidelines"
    +
    +# Add shared guidelines
    +kb add guideline "Rust Error Handling" \
    +  --language rust \
    +  --category error-handling \
    +  --content "$(cat org-rust-errors.md)"
    +
    +kb add guideline "Security Best Practices" \
    +  --category security \
    +  --content "$(cat org-security.md)"
    +
    +

    In each project:

    +
    # project/.kogral/config.ncl
    +{
    +  inheritance = {
    +    base = "~/org/.kogral-shared",
    +    priority = 100,  # Project overrides shared
    +  },
    +}
    +
    +

    Developer in Project A:

    +
    What are our error handling guidelines?
    +
    +

    Claude (via kb/get_guidelines with inheritance):

    +
    ## Rust Error Handling Guidelines
    +
    +### Shared Guidelines (priority: 50)
    +From ~/org/.kogral-shared:
    +- Use thiserror for custom errors
    +- Never unwrap() in production
    +- Always propagate with ?
    +
    +### Project Guidelines (priority: 100)
    +From project .kogral/:
    +- Additionally: log all errors with tracing
    +- Use anyhow for application-level errors
    +
    +[Combined effective guidelines]
    +
    +

    Result:

    +
      +
    • Consistent practices across organization
    • +
    • Projects can specialize where needed
    • +
    • Single source of truth for shared knowledge
    • +
    +
    +

    Use Case 7: Bug Investigation

    +

    Problem

    +

    Bug in production. Developer needs to:

    +
      +
    • Understand relevant decisions
    • +
    • Find related code patterns
    • +
    • Check if similar issues were solved before
    • +
    +

    Solution with KOGRAL

    +

    Developer:

    +
    We have a race condition in the cache layer.
    +What past decisions or patterns might be relevant?
    +
    +

    Claude (semantic search):

    +
    Found 4 relevant items:
    +
    +1. **Decision: Use DashMap for Concurrent Access** (accepted, 1 month ago)
    +   "Chose DashMap over RwLock<HashMap> to avoid race conditions in cache"
    +
    +2. **Pattern: Safe Concurrent Cache Access**
    +   "Always use lock-free data structures for high-contention caches"
    +
    +3. **Note: Cache Race Condition Fix** (from 2026-01-17 journal)
    +   "Fixed race in cache by switching to DashMap"
    +
    +4. **Guideline: Concurrency Safety**
    +   "Use atomic operations and lock-free structures where possible"
    +
    +It looks like we've seen this before! Check the journal entry from 2026-01-17.
    +
    +

    Developer reads journal:

    +
    kb show journal-2026-01-17
    +
    +

    Finds:

    +
      +
    • Exact same issue
    • +
    • Solution: switch to DashMap
    • +
    • Code example included
    • +
    • Performance benchmarks
    • +
    +

    Applies fix in 10 minutes instead of 2 hours of debugging.

    +
    +

    Use Case 8: API Design Collaboration

    +

    Problem

    +

    Team discussing new API design. Multiple approaches:

    +
      +
    • REST vs GraphQL
    • +
    • Versioning strategy
    • +
    • Authentication method
    • +
    +

    Need to capture discussion and decision.

    +

    Solution with KOGRAL

    +

    During design meeting (using Claude Code):

    +
    We're designing the new API. Let me capture this discussion:
    +
    +Approaches discussed:
    +1. REST with versioned endpoints (/v1/, /v2/)
    +2. GraphQL with schema versioning
    +3. gRPC for internal services
    +
    +Team consensus:
    +- REST for public API (easier for partners)
    +- GraphQL for internal admin tools (flexibility)
    +- gRPC for service-to-service (performance)
    +
    +Create a decision record for each, linking them together.
    +
    +

    Claude (creates 3 linked ADRs):

    +
    Created 3 decisions:
    +
    +1. decision-rest-public-api
    +   Status: accepted
    +   Context: Public API needs broad compatibility
    +   Decision: REST with /v1/, /v2/ versioning
    +
    +2. decision-graphql-admin
    +   Status: accepted
    +   Context: Admin tools need flexible queries
    +   Decision: GraphQL with schema evolution
    +
    +3. decision-grpc-internal
    +   Status: accepted
    +   Context: Service-to-service needs performance
    +   Decision: gRPC with protobuf
    +
    +Linked:
    +  decision-rest-public-api --[relates_to]--> decision-graphql-admin
    +  decision-rest-public-api --[relates_to]--> decision-grpc-internal
    +  decision-graphql-admin --[relates_to]--> decision-grpc-internal
    +
    +All decisions documented and interconnected.
    +
    +

    Two months later, someone asks "Why REST not GraphQL for public API?":

    +
    kb show decision-rest-public-api
    +
    +

    Full context preserved, including relationship to GraphQL decision.

    +
    +

    Summary

    +

    Knowledge Base excels at:

    +

    Onboarding: Historical context instantly available +✅ Decision Making: ADRs preserve rationale +✅ Pattern Reuse: Solutions documented once, used forever +✅ Daily Tracking: Development journal with semantic search +✅ Code Review: Implementation rationale linked to decisions +✅ Cross-Project: Shared guidelines with project overrides +✅ Bug Investigation: Past solutions easily discovered +✅ Collaboration: Discussions captured and interconnected

    +

    Common Theme: Knowledge captured during work, queryable when needed, connected to related concepts.

    +
    +

    Next Steps

    + + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/highlight.css b/docs/book/highlight.css new file mode 100644 index 0000000..352c79b --- /dev/null +++ b/docs/book/highlight.css @@ -0,0 +1,83 @@ +/* + * An increased contrast highlighting scheme loosely based on the + * "Base16 Atelier Dune Light" theme by Bram de Haan + * (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) + * Original Base16 color scheme by Chris Kempson + * (https://github.com/chriskempson/base16) + */ + +/* Comment */ +.hljs-comment, +.hljs-quote { + color: #575757; +} + +/* Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-attr, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #d70025; +} + +/* Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #b21e00; +} + +/* Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #008200; +} + +/* Blue */ +.hljs-title, +.hljs-section { + color: #0030f2; +} + +/* Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #9d00ec; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f6f7f6; + color: #000; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-addition { + color: #22863a; + background-color: #f0fff4; +} + +.hljs-deletion { + color: #b31d28; + background-color: #ffeef0; +} diff --git a/docs/book/highlight.js b/docs/book/highlight.js new file mode 100644 index 0000000..18d2434 --- /dev/null +++ b/docs/book/highlight.js @@ -0,0 +1,54 @@ +/* + Highlight.js 10.1.1 (93fd0d73) + License: BSD-3-Clause + Copyright (c) 2006-2020, Ivan Sagalaev +*/ +var hljs=function(){"use strict";function e(n){Object.freeze(n);var t="function"==typeof n;return Object.getOwnPropertyNames(n).forEach((function(r){!Object.hasOwnProperty.call(n,r)||null===n[r]||"object"!=typeof n[r]&&"function"!=typeof n[r]||t&&("caller"===r||"callee"===r||"arguments"===r)||Object.isFrozen(n[r])||e(n[r])})),n}class n{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data}ignoreMatch(){this.ignore=!0}}function t(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function r(e,...n){var t={};for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}function a(e){return e.nodeName.toLowerCase()}var i=Object.freeze({__proto__:null,escapeHTML:t,inherit:r,nodeStream:function(e){var n=[];return function e(t,r){for(var i=t.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:r,node:i}),r=e(i,r),a(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:r,node:i}));return r}(e,0),n},mergeStreams:function(e,n,r){var i=0,s="",o=[];function l(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function u(e){s+=""}function d(e){("start"===e.event?c:u)(e.node)}for(;e.length||n.length;){var g=l();if(s+=t(r.substring(i,g[0].offset)),i=g[0].offset,g===e){o.reverse().forEach(u);do{d(g.splice(0,1)[0]),g=l()}while(g===e&&g.length&&g[0].offset===i);o.reverse().forEach(c)}else"start"===g[0].event?o.push(g[0].node):o.pop(),d(g.splice(0,1)[0])}return s+t(r.substr(i))}});const s="",o=e=>!!e.kind;class l{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=t(e)}openNode(e){if(!o(e))return;let n=e.kind;e.sublanguage||(n=`${this.classPrefix}${n}`),this.span(n)}closeNode(e){o(e)&&(this.buffer+=s)}value(){return this.buffer}span(e){this.buffer+=``}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach(n=>this._walk(e,n)),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every(e=>"string"==typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{c._collapse(e)}))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,n){const t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function d(e){return e?"string"==typeof e?e:e.source:null}const g="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",h={begin:"\\\\[\\s\\S]",relevance:0},f={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[h]},p={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[h]},b={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},m=function(e,n,t={}){var a=r({className:"comment",begin:e,end:n,contains:[]},t);return a.contains.push(b),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),a},v=m("//","$"),x=m("/\\*","\\*/"),E=m("#","$");var _=Object.freeze({__proto__:null,IDENT_RE:"[a-zA-Z]\\w*",UNDERSCORE_IDENT_RE:"[a-zA-Z_]\\w*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:g,BINARY_NUMBER_RE:"\\b(0b[01]+)",RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map(e=>d(e)).join("")}(n,/.*\b/,e.binary,/\b.*/)),r({className:"meta",begin:n,end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},BACKSLASH_ESCAPE:h,APOS_STRING_MODE:f,QUOTE_STRING_MODE:p,PHRASAL_WORDS_MODE:b,COMMENT:m,C_LINE_COMMENT_MODE:v,C_BLOCK_COMMENT_MODE:x,HASH_COMMENT_MODE:E,NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?",relevance:0},C_NUMBER_MODE:{className:"number",begin:g,relevance:0},BINARY_NUMBER_MODE:{className:"number",begin:"\\b(0b[01]+)",relevance:0},CSS_NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[h,{begin:/\[/,end:/\]/,relevance:0,contains:[h]}]}]},TITLE_MODE:{className:"title",begin:"[a-zA-Z]\\w*",relevance:0},UNDERSCORE_TITLE_MODE:{className:"title",begin:"[a-zA-Z_]\\w*",relevance:0},METHOD_GUARD:{begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})}}),N="of and for in not or if then".split(" ");function w(e,n){return n?+n:function(e){return N.includes(e.toLowerCase())}(e)?0:1}const R=t,y=r,{nodeStream:k,mergeStreams:O}=i,M=Symbol("nomatch");return function(t){var a=[],i={},s={},o=[],l=!0,c=/(^(<[^>]+>|\t|)+|\n)/gm,g="Could not find the language '{}', did you forget to load/include a language module?";const h={disableAutodetect:!0,name:"Plain text",contains:[]};var f={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:u};function p(e){return f.noHighlightRe.test(e)}function b(e,n,t,r){var a={code:n,language:e};S("before:highlight",a);var i=a.result?a.result:m(a.language,a.code,t,r);return i.code=a.code,S("after:highlight",i),i}function m(e,t,a,s){var o=t;function c(e,n){var t=E.case_insensitive?n[0].toLowerCase():n[0];return Object.prototype.hasOwnProperty.call(e.keywords,t)&&e.keywords[t]}function u(){null!=y.subLanguage?function(){if(""!==A){var e=null;if("string"==typeof y.subLanguage){if(!i[y.subLanguage])return void O.addText(A);e=m(y.subLanguage,A,!0,k[y.subLanguage]),k[y.subLanguage]=e.top}else e=v(A,y.subLanguage.length?y.subLanguage:null);y.relevance>0&&(I+=e.relevance),O.addSublanguage(e.emitter,e.language)}}():function(){if(!y.keywords)return void O.addText(A);let e=0;y.keywordPatternRe.lastIndex=0;let n=y.keywordPatternRe.exec(A),t="";for(;n;){t+=A.substring(e,n.index);const r=c(y,n);if(r){const[e,a]=r;O.addText(t),t="",I+=a,O.addKeyword(n[0],e)}else t+=n[0];e=y.keywordPatternRe.lastIndex,n=y.keywordPatternRe.exec(A)}t+=A.substr(e),O.addText(t)}(),A=""}function h(e){return e.className&&O.openNode(e.className),y=Object.create(e,{parent:{value:y}})}function p(e){return 0===y.matcher.regexIndex?(A+=e[0],1):(L=!0,0)}var b={};function x(t,r){var i=r&&r[0];if(A+=t,null==i)return u(),0;if("begin"===b.type&&"end"===r.type&&b.index===r.index&&""===i){if(A+=o.slice(r.index,r.index+1),!l){const n=Error("0 width match regex");throw n.languageName=e,n.badRule=b.rule,n}return 1}if(b=r,"begin"===r.type)return function(e){var t=e[0],r=e.rule;const a=new n(r),i=[r.__beforeBegin,r["on:begin"]];for(const n of i)if(n&&(n(e,a),a.ignore))return p(t);return r&&r.endSameAsBegin&&(r.endRe=RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),r.skip?A+=t:(r.excludeBegin&&(A+=t),u(),r.returnBegin||r.excludeBegin||(A=t)),h(r),r.returnBegin?0:t.length}(r);if("illegal"===r.type&&!a){const e=Error('Illegal lexeme "'+i+'" for mode "'+(y.className||"")+'"');throw e.mode=y,e}if("end"===r.type){var s=function(e){var t=e[0],r=o.substr(e.index),a=function e(t,r,a){let i=function(e,n){var t=e&&e.exec(n);return t&&0===t.index}(t.endRe,a);if(i){if(t["on:end"]){const e=new n(t);t["on:end"](r,e),e.ignore&&(i=!1)}if(i){for(;t.endsParent&&t.parent;)t=t.parent;return t}}if(t.endsWithParent)return e(t.parent,r,a)}(y,e,r);if(!a)return M;var i=y;i.skip?A+=t:(i.returnEnd||i.excludeEnd||(A+=t),u(),i.excludeEnd&&(A=t));do{y.className&&O.closeNode(),y.skip||y.subLanguage||(I+=y.relevance),y=y.parent}while(y!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),h(a.starts)),i.returnEnd?0:t.length}(r);if(s!==M)return s}if("illegal"===r.type&&""===i)return 1;if(B>1e5&&B>3*r.index)throw Error("potential infinite loop, way more iterations than matches");return A+=i,i.length}var E=T(e);if(!E)throw console.error(g.replace("{}",e)),Error('Unknown language: "'+e+'"');var _=function(e){function n(n,t){return RegExp(d(n),"m"+(e.case_insensitive?"i":"")+(t?"g":""))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=function(e){return RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map(e=>e[1]);this.matcherRe=n(function(e,n="|"){for(var t=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,r=0,a="",i=0;i0&&(a+=n),a+="(";o.length>0;){var l=t.exec(o);if(null==l){a+=o;break}a+=o.substring(0,l.index),o=o.substring(l.index+l[0].length),"\\"===l[0][0]&&l[1]?a+="\\"+(+l[1]+s):(a+=l[0],"("===l[0]&&r++)}a+=")"}return a}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex((e,n)=>n>0&&void 0!==e),r=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,r)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t;return this.rules.slice(e).forEach(([e,t])=>n.addRule(e,t)),n.compile(),this.multiRegexes[e]=n,n}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;const t=n.exec(e);return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&(this.regexIndex=0)),t}}function i(e,n){const t=e.input[e.index-1],r=e.input[e.index+e[0].length];"."!==t&&"."!==r||n.ignoreMatch()}if(e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return function t(s,o){const l=s;if(s.compiled)return l;s.compiled=!0,s.__beforeBegin=null,s.keywords=s.keywords||s.beginKeywords;let c=null;if("object"==typeof s.keywords&&(c=s.keywords.$pattern,delete s.keywords.$pattern),s.keywords&&(s.keywords=function(e,n){var t={};return"string"==typeof e?r("keyword",e):Object.keys(e).forEach((function(n){r(n,e[n])})),t;function r(e,r){n&&(r=r.toLowerCase()),r.split(" ").forEach((function(n){var r=n.split("|");t[r[0]]=[e,w(r[0],r[1])]}))}}(s.keywords,e.case_insensitive)),s.lexemes&&c)throw Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l.keywordPatternRe=n(s.lexemes||c||/\w+/,!0),o&&(s.beginKeywords&&(s.begin="\\b("+s.beginKeywords.split(" ").join("|")+")(?=\\b|\\s)",s.__beforeBegin=i),s.begin||(s.begin=/\B|\b/),l.beginRe=n(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),s.end&&(l.endRe=n(s.end)),l.terminator_end=d(s.end)||"",s.endsWithParent&&o.terminator_end&&(l.terminator_end+=(s.end?"|":"")+o.terminator_end)),s.illegal&&(l.illegalRe=n(s.illegal)),void 0===s.relevance&&(s.relevance=1),s.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((function(e){return function(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(n){return r(e,{variants:null},n)}))),e.cached_variants?e.cached_variants:function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(e)?r(e,{starts:e.starts?r(e.starts):null}):Object.isFrozen(e)?r(e):e}("self"===e?s:e)}))),s.contains.forEach((function(e){t(e,l)})),s.starts&&t(s.starts,o),l.matcher=function(e){const n=new a;return e.contains.forEach(e=>n.addRule(e.begin,{rule:e,type:"begin"})),e.terminator_end&&n.addRule(e.terminator_end,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(l),l}(e)}(E),N="",y=s||_,k={},O=new f.__emitter(f);!function(){for(var e=[],n=y;n!==E;n=n.parent)n.className&&e.unshift(n.className);e.forEach(e=>O.openNode(e))}();var A="",I=0,S=0,B=0,L=!1;try{for(y.matcher.considerAll();;){B++,L?L=!1:(y.matcher.lastIndex=S,y.matcher.considerAll());const e=y.matcher.exec(o);if(!e)break;const n=x(o.substring(S,e.index),e);S=e.index+n}return x(o.substr(S)),O.closeAllNodes(),O.finalize(),N=O.toHTML(),{relevance:I,value:N,language:e,illegal:!1,emitter:O,top:y}}catch(n){if(n.message&&n.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:n.message,context:o.slice(S-100,S+100),mode:n.mode},sofar:N,relevance:0,value:R(o),emitter:O};if(l)return{illegal:!1,relevance:0,value:R(o),emitter:O,language:e,top:y,errorRaised:n};throw n}}function v(e,n){n=n||f.languages||Object.keys(i);var t=function(e){const n={relevance:0,emitter:new f.__emitter(f),value:R(e),illegal:!1,top:h};return n.emitter.addText(e),n}(e),r=t;return n.filter(T).filter(I).forEach((function(n){var a=m(n,e,!1);a.language=n,a.relevance>r.relevance&&(r=a),a.relevance>t.relevance&&(r=t,t=a)})),r.language&&(t.second_best=r),t}function x(e){return f.tabReplace||f.useBR?e.replace(c,e=>"\n"===e?f.useBR?"
    ":e:f.tabReplace?e.replace(/\t/g,f.tabReplace):e):e}function E(e){let n=null;const t=function(e){var n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";const t=f.languageDetectRe.exec(n);if(t){var r=T(t[1]);return r||(console.warn(g.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),r?t[1]:"no-highlight"}return n.split(/\s+/).find(e=>p(e)||T(e))}(e);if(p(t))return;S("before:highlightBlock",{block:e,language:t}),f.useBR?(n=document.createElement("div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n"):n=e;const r=n.textContent,a=t?b(t,r,!0):v(r),i=k(n);if(i.length){const e=document.createElement("div");e.innerHTML=a.value,a.value=O(i,k(e),r)}a.value=x(a.value),S("after:highlightBlock",{block:e,result:a}),e.innerHTML=a.value,e.className=function(e,n,t){var r=n?s[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),e.includes(r)||a.push(r),a.join(" ").trim()}(e.className,t,a.language),e.result={language:a.language,re:a.relevance,relavance:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance,relavance:a.second_best.relevance})}const N=()=>{if(!N.called){N.called=!0;var e=document.querySelectorAll("pre code");a.forEach.call(e,E)}};function T(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}function A(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach(e=>{s[e]=n})}function I(e){var n=T(e);return n&&!n.disableAutodetect}function S(e,n){var t=e;o.forEach((function(e){e[t]&&e[t](n)}))}Object.assign(t,{highlight:b,highlightAuto:v,fixMarkup:x,highlightBlock:E,configure:function(e){f=y(f,e)},initHighlighting:N,initHighlightingOnLoad:function(){window.addEventListener("DOMContentLoaded",N,!1)},registerLanguage:function(e,n){var r=null;try{r=n(t)}catch(n){if(console.error("Language definition for '{}' could not be registered.".replace("{}",e)),!l)throw n;console.error(n),r=h}r.name||(r.name=e),i[e]=r,r.rawDefinition=n.bind(null,t),r.aliases&&A(r.aliases,{languageName:e})},listLanguages:function(){return Object.keys(i)},getLanguage:T,registerAliases:A,requireLanguage:function(e){var n=T(e);if(n)return n;throw Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:I,inherit:y,addPlugin:function(e){o.push(e)}}),t.debugMode=function(){l=!1},t.safeMode=function(){l=!0},t.versionString="10.1.1";for(const n in _)"object"==typeof _[n]&&e(_[n]);return Object.assign(t,_),t}({})}();"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs); +hljs.registerLanguage("apache",function(){"use strict";return function(e){var n={className:"number",begin:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?"};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:"",contains:[n,{className:"number",begin:":\\d{1,5}"},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{className:"meta",begin:"\\s\\[",end:"\\]$"},{className:"variable",begin:"[\\$%]\\{",end:"\\}",contains:["self",{className:"number",begin:"[\\$%]\\d+"}]},n,{className:"number",begin:"\\d+"},e.QUOTE_STRING_MODE]}}],illegal:/\S/}}}()); +hljs.registerLanguage("bash",function(){"use strict";return function(e){const s={};Object.assign(s,{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{/,end:/\}/,contains:[{begin:/:-/,contains:[s]}]}]});const t={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,t]};t.contains.push(n);const a={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,s]},i=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b-?[a-z\._]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[i,e.SHEBANG(),c,a,e.HASH_COMMENT_MODE,n,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},s]}}}()); +hljs.registerLanguage("c-like",function(){"use strict";return function(e){function t(e){return"(?:"+e+")?"}var n="(decltype\\(auto\\)|"+t("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+t("<.*?>")+")",r={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},a={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},i={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(a,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o={className:"title",begin:t("[a-zA-Z_]\\w*::")+e.IDENT_RE,relevance:0},c=t("[a-zA-Z_]\\w*::")+e.IDENT_RE+"\\s*\\(",l={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},d=[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,a],_={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:l,contains:d.concat([{begin:/\(/,end:/\)/,keywords:l,contains:d.concat(["self"]),relevance:0}]),relevance:0},u={className:"function",begin:"("+n+"[\\*&\\s]+)+"+c,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:l,illegal:/[^\w\s\*&:<>]/,contains:[{begin:"decltype\\(auto\\)",keywords:l,relevance:0},{begin:c,returnBegin:!0,contains:[o],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r,{begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r]}]},r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:l,disableAutodetect:!0,illegal:"",keywords:l,contains:["self",r]},{begin:e.IDENT_RE+"::",keywords:l},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin://,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:s,strings:a,keywords:l}}}}()); +hljs.registerLanguage("c",function(){"use strict";return function(e){var n=e.getLanguage("c-like").rawDefinition();return n.name="C",n.aliases=["c","h"],n}}()); +hljs.registerLanguage("coffeescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={keyword:e.concat(["then","unless","until","loop","by","when","and","or","is","isnt","not"]).filter((e=>n=>!e.includes(n))(["var","const","let","function","static"])).join(" "),literal:n.concat(["yes","no","on","off"]).join(" "),built_in:a.concat(["npm","print"]).join(" ")},i="[A-Za-z$_][0-9A-Za-z$_]*",s={className:"subst",begin:/#\{/,end:/}/,keywords:t},o=[r.BINARY_NUMBER_MODE,r.inherit(r.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[r.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[r.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[r.BACKSLASH_ESCAPE,s]},{begin:/"/,end:/"/,contains:[r.BACKSLASH_ESCAPE,s]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[s,r.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)",relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@"+i},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{begin:"```",end:"```"},{begin:"`",end:"`"}]}];s.contains=o;var c=r.inherit(r.TITLE_MODE,{begin:i}),l={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(o)}]};return{name:"CoffeeScript",aliases:["coffee","cson","iced"],keywords:t,illegal:/\/\*/,contains:o.concat([r.COMMENT("###","###"),r.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*"+i+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[c,l]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[l]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[c]},c]},{begin:i+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}}()); +hljs.registerLanguage("cpp",function(){"use strict";return function(e){var t=e.getLanguage("c-like").rawDefinition();return t.disableAutodetect=!1,t.name="C++",t.aliases=["cc","c++","h++","hpp","hh","hxx","cxx"],t}}()); +hljs.registerLanguage("csharp",function(){"use strict";return function(e){var n={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},i=e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},t=e.inherit(s,{illegal:/\n/}),l={className:"subst",begin:"{",end:"}",keywords:n},r=e.inherit(l,{illegal:/\n/}),c={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},e.BACKSLASH_ESCAPE,r]},o={className:"string",begin:/\$@"/,end:'"',contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},l]},g=e.inherit(o,{illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},r]});l.contains=[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],r.contains=[g,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];var d={variants:[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},E={begin:"<",end:">",contains:[{beginKeywords:"in out"},i]},_=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",b={begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:""}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},d,a,{beginKeywords:"class interface",end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},i,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",end:/[{;=]/,illegal:/[^\s:]/,contains:[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+_+"\\s+)+"+e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{begin:e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE,E],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,contains:[d,a,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},b]}}}()); +hljs.registerLanguage("css",function(){"use strict";return function(e){var n={begin:/(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[{className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{endsWithParent:!0,excludeEnd:!0,contains:[{begin:/[\w-]+\(/,returnBegin:!0,contains:[{className:"built_in",begin:/[\w-]+/},{begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"#[0-9A-Fa-f]+"},{className:"meta",begin:"!important"}]}}]};return{name:"CSS",case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/},{className:"selector-class",begin:/\.[A-Za-z0-9_-]+/},{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",illegal:/:/,returnBegin:!0,contains:[{className:"keyword",begin:/@\-?\w[\w]*(\-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:"and or not only",contains:[{begin:/[a-z-]+:/,className:"attribute"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{begin:"{",end:"}",illegal:/\S/,contains:[e.C_BLOCK_COMMENT_MODE,n]}]}}}()); +hljs.registerLanguage("diff",function(){"use strict";return function(e){return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^\-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"addition",begin:"^\\!",end:"$"}]}}}()); +hljs.registerLanguage("go",function(){"use strict";return function(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{name:"Go",aliases:["golang"],keywords:n,illegal:"e(n)).join("")}return function(a){var s={className:"number",relevance:0,variants:[{begin:/([\+\-]+)?[\d]+_[\d_]+/},{begin:a.NUMBER_RE}]},i=a.COMMENT();i.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];var t={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)}/}]},r={className:"literal",begin:/\bon|off|true|false|yes|no\b/},l={className:"string",contains:[a.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]},c={begin:/\[/,end:/\]/,contains:[i,r,t,l,s,"self"],relevance:0},g="("+[/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/].map(n=>e(n)).join("|")+")";return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[i,{className:"section",begin:/\[+/,end:/\]+/},{begin:n(g,"(\\s*\\.\\s*",g,")*",n("(?=",/\s*=\s*[^#\s]/,")")),className:"attr",starts:{end:/$/,contains:[i,c,r,t,l,s]}}]}}}()); +hljs.registerLanguage("java",function(){"use strict";function e(e){return e?"string"==typeof e?e:e.source:null}function n(e){return a("(",e,")?")}function a(...n){return n.map(n=>e(n)).join("")}function s(...n){return"("+n.map(n=>e(n)).join("|")+")"}return function(e){var t="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",i={className:"meta",begin:"@[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},r=e=>a("[",e,"]+([",e,"_]*[",e,"]+)?"),c={className:"number",variants:[{begin:`\\b(0[bB]${r("01")})[lL]?`},{begin:`\\b(0${r("0-7")})[dDfFlL]?`},{begin:a(/\b0[xX]/,s(a(r("a-fA-F0-9"),/\./,r("a-fA-F0-9")),a(r("a-fA-F0-9"),/\.?/),a(/\./,r("a-fA-F0-9"))),/([pP][+-]?(\d+))?/,/[fFdDlL]?/)},{begin:a(/\b/,s(a(/\d*\./,r("\\d")),r("\\d")),/[eE][+-]?[\d]+[dDfF]?/)},{begin:a(/\b/,r(/\d/),n(/\.?/),n(r(/\d/)),/[dDfFlL]?/)}],relevance:0};return{name:"Java",aliases:["jsp"],keywords:t,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:t,relevance:0,contains:[i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},c,i]}}}()); +hljs.registerLanguage("javascript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function s(e){return r("(?=",e,")")}function r(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(t){var i="[A-Za-z$_][0-9A-Za-z$_]*",c={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/},o={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.join(" "),literal:n.join(" "),built_in:a.join(" ")},l={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:t.C_NUMBER_RE+"n?"}],relevance:0},E={className:"subst",begin:"\\$\\{",end:"\\}",keywords:o,contains:[]},d={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"xml"}},g={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"css"}},u={className:"string",begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,E]};E.contains=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,l,t.REGEXP_MODE];var b=E.contains.concat([{begin:/\(/,end:/\)/,contains:["self"].concat(E.contains,[t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE])},t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]),_={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:b};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:o,contains:[t.SHEBANG({binary:"node",relevance:5}),{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,t.C_LINE_COMMENT_MODE,t.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:i+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,l,{begin:r(/[{,\n]\s*/,s(r(/(((\/\/.*)|(\/\*(.|\n)*\*\/))\s*)*/,i+"\\s*:"))),relevance:0,contains:[{className:"attr",begin:i+s("\\s*:"),relevance:0}]},{begin:"("+t.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,t.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+t.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:o,contains:b}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:"<>",end:""},{begin:c.begin,end:c.end}],subLanguage:"xml",contains:[{begin:c.begin,end:c.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[t.inherit(t.TITLE_MODE,{begin:i}),_],illegal:/\[|%/},{begin:/\$[(.]/},t.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},t.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor",end:/\{/,excludeEnd:!0},{begin:"(get|set)\\s+(?="+i+"\\()",end:/{/,keywords:"get set",contains:[t.inherit(t.TITLE_MODE,{begin:i}),{begin:/\(\)/},_]}],illegal:/#(?!!)/}}}()); +hljs.registerLanguage("json",function(){"use strict";return function(n){var e={literal:"true false null"},i=[n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],t=[n.QUOTE_STRING_MODE,n.C_NUMBER_MODE],a={end:",",endsWithParent:!0,excludeEnd:!0,contains:t,keywords:e},l={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[n.BACKSLASH_ESCAPE],illegal:"\\n"},n.inherit(a,{begin:/:/})].concat(i),illegal:"\\S"},s={begin:"\\[",end:"\\]",contains:[n.inherit(a)],illegal:"\\S"};return t.push(l,s),i.forEach((function(n){t.push(n)})),{name:"JSON",contains:t,keywords:e,illegal:"\\S"}}}()); +hljs.registerLanguage("kotlin",function(){"use strict";return function(e){var n={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},a={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},i={className:"subst",begin:"\\${",end:"}",contains:[e.C_NUMBER_MODE]},s={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},t={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[s,i]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,s,i]}]};i.contains.push(t);var r={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},l={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(t,{className:"meta-string"})]}]},c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),o={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},d=o;return d.variants[1].contains=[o],o.variants[1].contains=[d],{name:"Kotlin",aliases:["kt"],keywords:n,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},a,r,l,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:n,illegal:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[o,e.C_LINE_COMMENT_MODE,c],relevance:0},e.C_LINE_COMMENT_MODE,c,r,l,t,e.C_NUMBER_MODE]},c]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},r,l]},t,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},{className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0}]}}}()); +hljs.registerLanguage("less",function(){"use strict";return function(e){var n="([\\w-]+|@{[\\w-]+})",a=[],s=[],t=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},r=function(e,n,a){return{className:e,begin:n,relevance:a}},i={begin:"\\(",end:"\\)",contains:s,relevance:0};s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t("'"),t('"'),e.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},r("number","#[0-9A-Fa-f]+\\b"),i,r("variable","@@?[\\w-]+",10),r("variable","@{[\\w-]+}"),r("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},{className:"meta",begin:"!important"});var c=s.concat({begin:"{",end:"}",contains:a}),l={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(s)},o={begin:n+"\\s*:",returnBegin:!0,end:"[;}]",relevance:0,contains:[{className:"attribute",begin:n,end:":",excludeEnd:!0,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}]},g={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",returnEnd:!0,contains:s,relevance:0}},d={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:c}},b={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:n,end:"{"}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,l,r("keyword","all\\b"),r("variable","@{[\\w-]+}"),r("selector-tag",n+"%?",0),r("selector-id","#"+n),r("selector-class","\\."+n,0),r("selector-tag","&",0),{className:"selector-attr",begin:"\\[",end:"\\]"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"\\(",end:"\\)",contains:c},{begin:"!important"}]};return a.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,g,d,o,b),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:a}}}()); +hljs.registerLanguage("lua",function(){"use strict";return function(e){var t={begin:"\\[=*\\[",end:"\\]=*\\]",contains:["self"]},a=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[","\\]=*\\]",{contains:[t],relevance:10})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:a.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:a}].concat(a)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\[=*\\[",end:"\\]=*\\]",contains:[t],relevance:5}])}}}()); +hljs.registerLanguage("makefile",function(){"use strict";return function(e){var i={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"",relevance:10,contains:[a,i,t,s,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"",contains:[a,s,i,t]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},n,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:")",end:">",keywords:{name:"style"},contains:[c],starts:{end:"",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:")",end:">",keywords:{name:"script"},contains:[c],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:"",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},c]}]}}}()); +hljs.registerLanguage("markdown",function(){"use strict";return function(n){const e={begin:"<",end:">",subLanguage:"xml",relevance:0},a={begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},i={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},s={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};i.contains.push(s),s.contains.push(i);var c=[e,a];return i.contains=i.contains.concat(c),s.contains=s.contains.concat(c),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:c=c.concat(i,s)},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:c}]}]},e,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},i,s,{className:"quote",begin:"^>\\s+",contains:c,end:"$"},{className:"code",variants:[{begin:"(`{3,})(.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})(.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},a,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}}()); +hljs.registerLanguage("nginx",function(){"use strict";return function(e){var n={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/}/},{begin:"[\\$\\@]"+e.UNDERSCORE_IDENT_RE}]},a={endsWithParent:!0,keywords:{$pattern:"[a-z/_]+",literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[n]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:"\\s\\^",end:"\\s|{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},n]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{begin:e.UNDERSCORE_IDENT_RE+"\\s+{",returnBegin:!0,end:"{",contains:[{className:"section",begin:e.UNDERSCORE_IDENT_RE}],relevance:0},{begin:e.UNDERSCORE_IDENT_RE+"\\s",end:";|{",returnBegin:!0,contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:a}],relevance:0}],illegal:"[^\\s\\}]"}}}()); +hljs.registerLanguage("objectivec",function(){"use strict";return function(e){var n=/[a-zA-Z@][a-zA-Z0-9_]*/,_={$pattern:n,keyword:"@interface @class @protocol @implementation"};return{name:"Objective-C",aliases:["mm","objc","obj-c"],keywords:{$pattern:n,keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},illegal:"/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+_.keyword.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:_,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}}()); +hljs.registerLanguage("perl",function(){"use strict";return function(e){var n={$pattern:/[\w.]+/,keyword:"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qq fileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmget sub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedir ioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when"},t={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:n},s={begin:"->{",end:"}"},r={variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},i=[e.BACKSLASH_ESCAPE,t,r],a=[r,e.HASH_COMMENT_MODE,e.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),s,{className:"string",contains:i,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return t.contains=a,s.contains=a,{name:"Perl",aliases:["pl","pm"],keywords:n,contains:a}}}()); +hljs.registerLanguage("php",function(){"use strict";return function(e){var r={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},t={className:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?[=]?/},{begin:/\?>/}]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},n={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]},i={keyword:"__CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__ die echo exit include include_once print require require_once array abstract and as binary bool boolean break callable case catch class clone const continue declare default do double else elseif empty enddeclare endfor endforeach endif endswitch endwhile eval extends final finally float for foreach from global goto if implements instanceof insteadof int integer interface isset iterable list new object or private protected public real return string switch throw trait try unset use var void while xor yield",literal:"false null true",built_in:"Error|0 AppendIterator ArgumentCountError ArithmeticError ArrayIterator ArrayObject AssertionError BadFunctionCallException BadMethodCallException CachingIterator CallbackFilterIterator CompileError Countable DirectoryIterator DivisionByZeroError DomainException EmptyIterator ErrorException Exception FilesystemIterator FilterIterator GlobIterator InfiniteIterator InvalidArgumentException IteratorIterator LengthException LimitIterator LogicException MultipleIterator NoRewindIterator OutOfBoundsException OutOfRangeException OuterIterator OverflowException ParentIterator ParseError RangeException RecursiveArrayIterator RecursiveCachingIterator RecursiveCallbackFilterIterator RecursiveDirectoryIterator RecursiveFilterIterator RecursiveIterator RecursiveIteratorIterator RecursiveRegexIterator RecursiveTreeIterator RegexIterator RuntimeException SeekableIterator SplDoublyLinkedList SplFileInfo SplFileObject SplFixedArray SplHeap SplMaxHeap SplMinHeap SplObjectStorage SplObserver SplObserver SplPriorityQueue SplQueue SplStack SplSubject SplSubject SplTempFileObject TypeError UnderflowException UnexpectedValueException ArrayAccess Closure Generator Iterator IteratorAggregate Serializable Throwable Traversable WeakReference Directory __PHP_Incomplete_Class parent php_user_filter self static stdClass"};return{aliases:["php","php3","php4","php5","php6","php7"],case_insensitive:!0,keywords:i,contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[t]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler"}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[e.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},t,{className:"keyword",begin:/\$this\b/},r,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:i,contains:["self",r,e.C_BLOCK_COMMENT_MODE,a,n]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},a,n]}}}()); +hljs.registerLanguage("php-template",function(){"use strict";return function(n){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},n.inherit(n.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),n.inherit(n.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}}()); +hljs.registerLanguage("plaintext",function(){"use strict";return function(t){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}}()); +hljs.registerLanguage("properties",function(){"use strict";return function(e){var n="[ \\t\\f]*",t="("+n+"[:=]"+n+"|[ \\t\\f]+)",a="([^\\\\:= \\t\\f\\n]|\\\\.)+",s={end:t,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\n"}]}};return{name:".properties",case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+"+t,returnBegin:!0,contains:[{className:"attr",begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",endsParent:!0,relevance:0}],starts:s},{begin:a+t,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:a,endsParent:!0,relevance:0}],starts:s},{className:"attr",relevance:0,begin:a+n+"$"}]}}}()); +hljs.registerLanguage("python",function(){"use strict";return function(e){var n={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},a={className:"meta",begin:/^(>>>|\.\.\.) /},i={className:"subst",begin:/\{/,end:/\}/,keywords:n,illegal:/#/},s={begin:/\{\{/,relevance:0},r={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,s,i]},{begin:/(fr|rf|f)"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,i]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},l={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},t={className:"params",variants:[{begin:/\(\s*\)/,skip:!0,className:null},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:["self",a,l,r,e.HASH_COMMENT_MODE]}]};return i.contains=[r,l,a],{name:"Python",aliases:["py","gyp","ipython"],keywords:n,illegal:/(<\/|->|\?)|=>/,contains:[a,l,{beginKeywords:"if",relevance:0},r,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,t,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}}()); +hljs.registerLanguage("python-repl",function(){"use strict";return function(n){return{aliases:["pycon"],contains:[{className:"meta",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}}()); +hljs.registerLanguage("ruby",function(){"use strict";return function(e){var n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",a={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},s={className:"doctag",begin:"@[A-Za-z]+"},i={begin:"#<",end:">"},r=[e.COMMENT("#","$",{contains:[s]}),e.COMMENT("^\\=begin","^\\=end",{contains:[s],relevance:10}),e.COMMENT("^__END__","\\n$")],c={className:"subst",begin:"#\\{",end:"}",keywords:a},t={className:"string",contains:[e.BACKSLASH_ESCAPE,c],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{begin:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[e.BACKSLASH_ESCAPE,c]})]}]},b={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:a},d=[t,i,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]}].concat(r)},{className:"function",beginKeywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:n}),b].concat(r)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[t,{begin:n}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{className:"params",begin:/\|/,end:/\|/,keywords:a},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[i,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(r),relevance:0}].concat(r);c.contains=d,b.contains=d;var g=[{begin:/^\s*=>/,starts:{end:"$",contains:d}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{end:"$",contains:d}}];return{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:a,illegal:/\/\*/,contains:r.concat(g).concat(d)}}}()); +hljs.registerLanguage("rust",function(){"use strict";return function(e){var n="([ui](8|16|32|64|128|size)|f(32|64))?",t="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:t},illegal:""}]}}}()); +hljs.registerLanguage("scss",function(){"use strict";return function(e){var t={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},i={className:"number",begin:"#[0-9A-Fa-f]+"};return e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:"\\#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"selector-attr",begin:"\\[",end:"\\]",illegal:"$"},{className:"selector-tag",begin:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{className:"selector-pseudo",begin:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{className:"selector-pseudo",begin:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},t,{className:"attribute",begin:"\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",illegal:"[^\\s]"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:":",end:";",contains:[t,i,e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"meta",begin:"!important"}]},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",returnBegin:!0,keywords:"and or not only",contains:[{begin:"@[a-z-]+",className:"keyword"},t,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i,e.CSS_NUMBER_MODE]}]}}}()); +hljs.registerLanguage("shell",function(){"use strict";return function(s){return{name:"Shell Session",aliases:["console"],contains:[{className:"meta",begin:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{end:"$",subLanguage:"bash"}}]}}}()); +hljs.registerLanguage("sql",function(){"use strict";return function(e){var t=e.COMMENT("--","$");return{name:"SQL",case_insensitive:!0,illegal:/[<>{}*]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",end:/;/,endsWithParent:!0,keywords:{$pattern:/[\w\.]+/,keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:"`",end:"`"},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]}}}()); +hljs.registerLanguage("swift",function(){"use strict";return function(e){var i={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c compactMap contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},n=e.COMMENT("/\\*","\\*/",{contains:["self"]}),t={className:"subst",begin:/\\\(/,end:"\\)",keywords:i,contains:[]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"""/,end:/"""/},{begin:/"/,end:/"/}]},r={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return t.contains=[r],{name:"Swift",keywords:i,contains:[a,e.C_LINE_COMMENT_MODE,n,{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},r,{className:"function",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{begin://},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:i,contains:["self",r,a,e.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:i,end:"\\{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{className:"meta",begin:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)\\b"},{beginKeywords:"import",end:/$/,contains:[e.C_LINE_COMMENT_MODE,n]}]}}}()); +hljs.registerLanguage("typescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.concat(["type","namespace","typedef","interface","public","private","protected","implements","declare","abstract","readonly"]).join(" "),literal:n.join(" "),built_in:a.concat(["any","void","number","boolean","string","object","never","enum"]).join(" ")},s={className:"meta",begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},i={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:r.C_NUMBER_RE+"n?"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:t,contains:[]},c={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},l={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"css"}},E={className:"string",begin:"`",end:"`",contains:[r.BACKSLASH_ESCAPE,o]};o.contains=[r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,i,r.REGEXP_MODE];var d={begin:"\\(",end:/\)/,keywords:t,contains:["self",r.QUOTE_STRING_MODE,r.APOS_STRING_MODE,r.NUMBER_MODE]},u={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,s,d]};return{name:"TypeScript",aliases:["ts"],keywords:t,contains:[r.SHEBANG(),{className:"meta",begin:/^\s*['"]use strict['"]/},r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,i,{begin:"("+r.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,r.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+r.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:r.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:d.contains}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[\{;]/,excludeEnd:!0,keywords:t,contains:["self",r.inherit(r.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),u],illegal:/%/,relevance:0},{beginKeywords:"constructor",end:/[\{;]/,excludeEnd:!0,contains:["self",u]},{begin:/module\./,keywords:{built_in:"module"},relevance:0},{beginKeywords:"module",end:/\{/,excludeEnd:!0},{beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:"interface extends"},{begin:/\$[(.]/},{begin:"\\."+r.IDENT_RE,relevance:0},s,d]}}}()); +hljs.registerLanguage("yaml",function(){"use strict";return function(e){var n="true false yes no null",a="[\\w#;/?:@&=+$,.~*\\'()[\\]]+",s={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]},i=e.inherit(s,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={end:",",endsWithParent:!0,excludeEnd:!0,contains:[],keywords:n,relevance:0},t={begin:"{",end:"}",contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]",contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type",begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"\\-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},{className:"number",begin:e.C_NUMBER_RE+"\\b"},t,g,s],c=[...b];return c.pop(),c.push(i),l.contains=c,{name:"YAML",case_insensitive:!0,aliases:["yml","YAML"],contains:b}}}()); +hljs.registerLanguage("armasm",function(){"use strict";return function(s){const e={variants:[s.COMMENT("^[ \\t]*(?=#)","$",{relevance:0,excludeBegin:!0}),s.COMMENT("[;@]","$",{relevance:0}),s.C_LINE_COMMENT_MODE,s.C_BLOCK_COMMENT_MODE]};return{name:"ARM Assembly",case_insensitive:!0,aliases:["arm"],keywords:{$pattern:"\\.?"+s.IDENT_RE,meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},contains:[{className:"keyword",begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?(?=\\s)"},e,s.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"[=#]\\w+"}],relevance:0}]}}}()); +hljs.registerLanguage("d",function(){"use strict";return function(e){var a={$pattern:e.UNDERSCORE_IDENT_RE,keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},d="((0|[1-9][\\d_]*)|0[bB][01_]+|0[xX]([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))",n="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",t={className:"number",begin:"\\b"+d+"(L|u|U|Lu|LU|uL|UL)?",relevance:0},_={className:"number",begin:"\\b(((0[xX](([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)\\.([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)|\\.?([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))[pP][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))|((0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(\\.\\d*|([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)))|\\d+\\.(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)|\\.(0|[1-9][\\d_]*)([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))?))([fF]|L|i|[fF]i|Li)?|"+d+"(i|[fF]i|Li))",relevance:0},r={className:"string",begin:"'("+n+"|.)",end:"'",illegal:"."},i={className:"string",begin:'"',contains:[{begin:n,relevance:0}],end:'"[cwd]?'},s=e.COMMENT("\\/\\+","\\+\\/",{contains:["self"],relevance:10});return{name:"D",keywords:a,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,{className:"string",begin:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',relevance:10},i,{className:"string",begin:'[rq]"',end:'"[cwd]?',relevance:5},{className:"string",begin:"`",end:"`[cwd]?"},{className:"string",begin:'q"\\{',end:'\\}"'},_,t,r,{className:"meta",begin:"^#!",end:"$",relevance:5},{className:"meta",begin:"#(line)",end:"$",relevance:5},{className:"keyword",begin:"@[a-zA-Z_][a-zA-Z_\\d]*"}]}}}()); +hljs.registerLanguage("handlebars",function(){"use strict";function e(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(n){const a={"builtin-name":"action bindattr collection component concat debugger each each-in get hash if in input link-to loc log lookup mut outlet partial query-params render template textarea unbound unless view with yield"},t=/\[.*?\]/,s=/[^\s!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]+/,i=e("(",/'.*?'/,"|",/".*?"/,"|",t,"|",s,"|",/\.|\//,")+"),r=e("(",t,"|",s,")(?==)"),l={begin:i,lexemes:/[\w.\/]+/},c=n.inherit(l,{keywords:{literal:"true false undefined null"}}),o={begin:/\(/,end:/\)/},m={className:"attr",begin:r,relevance:0,starts:{begin:/=/,end:/=/,starts:{contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,c,o]}}},d={contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,{begin:/as\s+\|/,keywords:{keyword:"as"},end:/\|/,contains:[{begin:/\w+/}]},m,c,o],returnEnd:!0},g=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/\)/})});o.contains=[g];const u=n.inherit(l,{keywords:a,className:"name",starts:n.inherit(d,{end:/}}/})}),b=n.inherit(l,{keywords:a,className:"name"}),h=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/}}/})});return{name:"Handlebars",aliases:["hbs","html.hbs","html.handlebars","htmlbars"],case_insensitive:!0,subLanguage:"xml",contains:[{begin:/\\\{\{/,skip:!0},{begin:/\\\\(?=\{\{)/,skip:!0},n.COMMENT(/\{\{!--/,/--\}\}/),n.COMMENT(/\{\{!/,/\}\}/),{className:"template-tag",begin:/\{\{\{\{(?!\/)/,end:/\}\}\}\}/,contains:[u],starts:{end:/\{\{\{\{\//,returnEnd:!0,subLanguage:"xml"}},{className:"template-tag",begin:/\{\{\{\{\//,end:/\}\}\}\}/,contains:[b]},{className:"template-tag",begin:/\{\{#/,end:/\}\}/,contains:[u]},{className:"template-tag",begin:/\{\{(?=else\}\})/,end:/\}\}/,keywords:"else"},{className:"template-tag",begin:/\{\{\//,end:/\}\}/,contains:[b]},{className:"template-variable",begin:/\{\{\{/,end:/\}\}\}/,contains:[h]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,contains:[h]}]}}}()); +hljs.registerLanguage("haskell",function(){"use strict";return function(e){var n={variants:[e.COMMENT("--","$"),e.COMMENT("{-","-}",{contains:["self"]})]},i={className:"meta",begin:"{-#",end:"#-}"},a={className:"meta",begin:"^#",end:"$"},s={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},l={begin:"\\(",end:"\\)",illegal:'"',contains:[i,a,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TITLE_MODE,{begin:"[_a-z][\\w']*"}),n]};return{name:"Haskell",aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",contains:[{beginKeywords:"module",end:"where",keywords:"module where",contains:[l,n],illegal:"\\W\\.|;"},{begin:"\\bimport\\b",end:"$",keywords:"import qualified as hiding",contains:[l,n],illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[s,l,n]},{className:"class",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[i,s,l,{begin:"{",end:"}",contains:l.contains},n]},{beginKeywords:"default",end:"$",contains:[s,l,n]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,n]},{begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[s,e.QUOTE_STRING_MODE,n]},{className:"meta",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},i,a,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,s,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),n,{begin:"->|<-"}]}}}()); +hljs.registerLanguage("julia",function(){"use strict";return function(e){var r="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",t={$pattern:r,keyword:"in isa where baremodule begin break catch ccall const continue do else elseif end export false finally for function global if import importall let local macro module quote return true try using while type immutable abstract bitstype typealias ",literal:"true false ARGS C_NULL DevNull ENDIAN_BOM ENV I Inf Inf16 Inf32 Inf64 InsertionSort JULIA_HOME LOAD_PATH MergeSort NaN NaN16 NaN32 NaN64 PROGRAM_FILE QuickSort RoundDown RoundFromZero RoundNearest RoundNearestTiesAway RoundNearestTiesUp RoundToZero RoundUp STDERR STDIN STDOUT VERSION catalan e|0 eu|0 eulergamma golden im nothing pi γ π φ ",built_in:"ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix AbstractRNG AbstractSerializer AbstractSet AbstractSparseArray AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange AbstractVecOrMat AbstractVector Any ArgumentError Array AssertionError Associative Base64DecodePipe Base64EncodePipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool CapturedException CartesianIndex CartesianRange Cchar Cdouble Cfloat Channel Char Cint Cintmax_t Clong Clonglong ClusterManager Cmd CodeInfo Colon Complex Complex128 Complex32 Complex64 CompositeException Condition ConjArray ConjMatrix ConjVector Cptrdiff_t Cshort Csize_t Cssize_t Cstring Cuchar Cuint Cuintmax_t Culong Culonglong Cushort Cwchar_t Cwstring DataType Date DateFormat DateTime DenseArray DenseMatrix DenseVecOrMat DenseVector Diagonal Dict DimensionMismatch Dims DirectIndexString Display DivideError DomainError EOFError EachLine Enum Enumerate ErrorException Exception ExponentialBackOff Expr Factorization FileMonitor Float16 Float32 Float64 Function Future GlobalRef GotoNode HTML Hermitian IO IOBuffer IOContext IOStream IPAddr IPv4 IPv6 IndexCartesian IndexLinear IndexStyle InexactError InitError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException InvalidStateException Irrational KeyError LabelNode LinSpace LineNumberNode LoadError LowerTriangular MIME Matrix MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode NullException Nullable Number ObjectIdDict OrdinalRange OutOfMemoryError OverflowError Pair ParseError PartialQuickSort PermutedDimsArray Pipe PollingFileWatcher ProcessExitedException Ptr QuoteNode RandomDevice Range RangeIndex Rational RawFD ReadOnlyMemoryError Real ReentrantLock Ref Regex RegexMatch RemoteChannel RemoteException RevString RoundingMode RowVector SSAValue SegmentationFault SerializationState Set SharedArray SharedMatrix SharedVector Signed SimpleVector Slot SlotNumber SparseMatrixCSC SparseVector StackFrame StackOverflowError StackTrace StepRange StepRangeLen StridedArray StridedMatrix StridedVecOrMat StridedVector String SubArray SubString SymTridiagonal Symbol Symmetric SystemError TCPSocket Task Text TextDisplay Timer Tridiagonal Tuple Type TypeError TypeMapEntry TypeMapLevel TypeName TypeVar TypedSlot UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UndefRefError UndefVarError UnicodeError UniformScaling Union UnionAll UnitRange Unsigned UpperTriangular Val Vararg VecElement VecOrMat Vector VersionNumber Void WeakKeyDict WeakRef WorkerConfig WorkerPool "},a={keywords:t,illegal:/<\//},n={className:"subst",begin:/\$\(/,end:/\)/,keywords:t},o={className:"variable",begin:"\\$"+r},i={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],variants:[{begin:/\w*"""/,end:/"""\w*/,relevance:10},{begin:/\w*"/,end:/"\w*/}]},l={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],begin:"`",end:"`"},s={className:"meta",begin:"@"+r};return a.name="Julia",a.contains=[{className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},i,l,s,{className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]},e.HASH_COMMENT_MODE,{className:"keyword",begin:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{begin:/<:/}],n.contains=a.contains,a}}()); +hljs.registerLanguage("nim",function(){"use strict";return function(e){return{name:"Nim",aliases:["nim"],keywords:{keyword:"addr and as asm bind block break case cast const continue converter discard distinct div do elif else end enum except export finally for from func generic if import in include interface is isnot iterator let macro method mixin mod nil not notin object of or out proc ptr raise ref return shl shr static template try tuple type using var when while with without xor yield",literal:"shared guarded stdin stdout stderr result true false",built_in:"int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float float32 float64 bool char string cstring pointer expr stmt void auto any range array openarray varargs seq set clong culong cchar cschar cshort cint csize clonglong cfloat cdouble clongdouble cuchar cushort cuint culonglong cstringarray semistatic"},contains:[{className:"meta",begin:/{\./,end:/\.}/,relevance:10},{className:"string",begin:/[a-zA-Z]\w*"/,end:/"/,contains:[{begin:/""/}]},{className:"string",begin:/([a-zA-Z]\w*)?"""/,end:/"""/},e.QUOTE_STRING_MODE,{className:"type",begin:/\b[A-Z]\w+\b/,relevance:0},{className:"number",relevance:0,variants:[{begin:/\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/},{begin:/\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/}]},e.HASH_COMMENT_MODE]}}}()); +hljs.registerLanguage("nix",function(){"use strict";return function(e){var n={keyword:"rec with let in inherit assert if else then",literal:"true false or and null",built_in:"import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation"},i={className:"subst",begin:/\$\{/,end:/}/,keywords:n},t={className:"string",contains:[i],variants:[{begin:"''",end:"''"},{begin:'"',end:'"'}]},s=[e.NUMBER_MODE,e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t,{begin:/[a-zA-Z0-9-_]+(\s*=)/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/\S+/}]}];return i.contains=s,{name:"Nix",aliases:["nixos"],keywords:n,contains:s}}}()); +hljs.registerLanguage("r",function(){"use strict";return function(e){var n="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{name:"R",contains:[e.HASH_COMMENT_MODE,{begin:n,keywords:{$pattern:n,keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},relevance:0},{className:"number",begin:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{className:"number",begin:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",relevance:0},{className:"number",begin:"\\d+\\.(?!\\d)(?:i\\b)?",relevance:0},{className:"number",begin:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{className:"number",begin:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{begin:"`",end:"`",relevance:0},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]}]}}}()); +hljs.registerLanguage("scala",function(){"use strict";return function(e){var n={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:"\\${",end:"}"}]},a={className:"string",variants:[{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'"""',end:'"""',relevance:10},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,n]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[n],relevance:10}]},s={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},t={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},i={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},t]},l={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[t]};return{name:"Scala",keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},s,l,i,e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}}()); +hljs.registerLanguage("x86asm",function(){"use strict";return function(s){return{name:"Intel x86 Assembly",case_insensitive:!0,keywords:{$pattern:"[.%]?"+s.IDENT_RE,keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",built_in:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr",meta:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},contains:[s.COMMENT(";","$",{relevance:0}),{className:"number",variants:[{begin:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",relevance:0},{begin:"\\$[0-9][0-9A-Fa-f]*",relevance:0},{begin:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{begin:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},s.QUOTE_STRING_MODE,{className:"string",variants:[{begin:"'",end:"[^\\\\]'"},{begin:"`",end:"[^\\\\]`"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{begin:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],relevance:0},{className:"subst",begin:"%[0-9]+",relevance:0},{className:"subst",begin:"%!S+",relevance:0},{className:"meta",begin:/^\s*\.[\w_-]+/}]}}}()); \ No newline at end of file diff --git a/docs/book/index.html b/docs/book/index.html new file mode 100644 index 0000000..6413128 --- /dev/null +++ b/docs/book/index.html @@ -0,0 +1,504 @@ + + + + + + Introduction - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    KOGRAL Documentation

    +

    Welcome to the KOGRAL documentation! This directory contains comprehensive documentation for KOGRAL (KOwledge GRAphs, Local-first), built with mdBook.

    +

    📚 Reading the Documentation

    +

    You have several options for reading the documentation:

    + +

    The best reading experience with navigation, search, and live reload:

    +
    # Serve documentation at http://localhost:3000
    +just docs::serve
    +
    +

    This will:

    +
      +
    • Build the mdBook
    • +
    • Start a local web server on port 3000
    • +
    • Open your browser automatically
    • +
    • Watch for changes and auto-reload
    • +
    +

    Option 2: Build Static HTML

    +

    Generate static HTML files you can browse offline:

    +
    # Build mdBook to docs/book/
    +just docs::build
    +
    +

    Then open docs/book/index.html in your browser.

    +

    Option 3: Read Markdown Files Directly

    +

    All documentation is written in Markdown and can be read directly:

    +
      +
    • Browse via GitHub/GitLab web interface
    • +
    • Use your editor's Markdown preview
    • +
    • Read from terminal with bat, glow, or similar tools
    • +
    +

    Navigation: See SUMMARY.md for the complete table of contents.

    +

    🛠️ Documentation Commands

    +

    We use just recipes for documentation tasks. All commands assume you're in the project root directory.

    +

    Build and Serve

    +
    # Serve documentation locally (recommended)
    +just docs::serve
    +
    +# Build static HTML
    +just docs::build
    +
    +# Watch and rebuild on file changes
    +just docs::watch
    +
    +

    Validation

    +
    # Test code examples in documentation
    +just docs::test
    +
    +# Check for broken links
    +just docs::check-links
    +
    +

    Cleanup

    +
    # Remove build artifacts
    +just docs::clean
    +
    +

    View All Documentation Commands

    +
    just docs::help
    +
    +

    📦 Installing mdBook

    +

    mdBook is required to build and serve the documentation.

    +

    Install via Cargo

    +
    cargo install mdbook
    +
    +

    Install Optional Tools

    +

    For enhanced functionality:

    +
    # Link checker (validates internal/external links)
    +cargo install mdbook-linkcheck
    +
    +# Mermaid diagram support
    +cargo install mdbook-mermaid
    +
    +# PlantUML diagram support
    +cargo install mdbook-plantuml
    +
    +

    Verify Installation

    +
    mdbook --version
    +# Should output: mdbook v0.4.x or later
    +
    +

    📖 Documentation Structure

    +

    The documentation is organized into the following sections:

    +

    1. KOGRAL Definition (kogral/)

    +
      +
    • What is KOGRAL and why it exists
    • +
    • Core concepts (nodes, edges, graphs)
    • +
    • Design philosophy
    • +
    +

    2. Guides (guides/)

    +
      +
    • Quick start (5 minutes)
    • +
    • Installation guide
    • +
    • Use cases with examples
    • +
    +

    3. Architecture (architecture/)

    +
      +
    • System overview with diagrams
    • +
    • Config-driven architecture
    • +
    • Graph model details
    • +
    • ADRs (Architectural Decision Records)
    • +
    +

    4. Setup (setup/)

    +
      +
    • Initial setup
    • +
    • Development environment
    • +
    • Production deployment
    • +
    • Testing environment
    • +
    • CI/CD integration
    • +
    +

    5. Configuration (config/)

    +
      +
    • Configuration overview
    • +
    • Nickel schema reference
    • +
    • Runtime configuration
    • +
    • Environment modes (dev/prod/test)
    • +
    +

    6. Storage (storage/)

    +
      +
    • Storage architecture (hybrid strategy)
    • +
    • Filesystem backend
    • +
    • SurrealDB backend
    • +
    • In-memory backend
    • +
    • Sync mechanism
    • +
    +

    7. AI & Embeddings (ai/)

    +
      +
    • Semantic search
    • +
    • Embedding providers
    • +
    • Provider comparison
    • +
    • Configuration examples
    • +
    +

    8. Templates (templates/)

    +
      +
    • Template system (Tera)
    • +
    • Document templates
    • +
    • Export templates
    • +
    • Custom templates
    • +
    +

    9. CLI Reference (cli/)

    +
      +
    • All kb-cli commands
    • +
    • Common workflows
    • +
    • Advanced usage
    • +
    • Troubleshooting
    • +
    +

    10. Apps & Integrations (apps/)

    +
      +
    • MCP quick guide (Claude Code)
    • +
    • Logseq integration
    • +
    • Vapora integration
    • +
    +

    11. API Reference (api/)

    +
      +
    • MCP tools specification
    • +
    • Storage trait
    • +
    • Embedding trait
    • +
    • REST API (future)
    • +
    +

    12. Contributing (contributing/)

    +
      +
    • Development setup
    • +
    • Code guidelines
    • +
    • Testing standards
    • +
    • Documentation guidelines
    • +
    +

    🎨 Visual Diagrams

    +

    The documentation includes SVG diagrams for visual understanding:

    + +

    These diagrams are embedded in relevant documentation pages and can be viewed standalone in a browser.

    +

    🔍 Searching the Documentation

    +

    When using just docs::serve, you get a built-in search feature:

    +
      +
    1. Click the search icon (🔍) in the top-left corner
    2. +
    3. Type your query
    4. +
    5. Press Enter to navigate results
    6. +
    +

    The search indexes all documentation content including:

    +
      +
    • Page titles
    • +
    • Headers
    • +
    • Body text
    • +
    • Code examples (optionally)
    • +
    +

    ✏️ Editing Documentation

    +

    File Format

    +

    All documentation is written in GitHub Flavored Markdown with mdBook extensions.

    +

    See contributing/documentation.md for detailed editing guidelines.

    +

    Adding a New Page

    +
      +
    1. Create the markdown file in the appropriate directory
    2. +
    3. Add it to SUMMARY.md for navigation
    4. +
    5. Build to verify: just docs::build
    6. +
    +

    Adding a New Section

    +
      +
    1. Create the directory
    2. +
    3. Add a README.md for the section landing page
    4. +
    5. Add section to SUMMARY.md
    6. +
    +

    🧪 Testing Documentation

    +

    Test Code Examples

    +
    just docs::test
    +
    +

    This runs all Rust code examples in the documentation to ensure they compile.

    + +
    just docs::check-links
    +
    +

    This validates all internal and external links.

    +

    📝 Documentation Standards

    +

    When contributing to documentation:

    +
      +
    1. Use clear, concise language - Write for developers and AI agents
    2. +
    3. Include code examples - Show, don't just tell
    4. +
    5. Add diagrams where helpful - Visual aids improve understanding
    6. +
    7. Link related concepts - Help readers discover related content
    8. +
    9. Test code examples - Ensure code compiles and works
    10. +
    11. Use consistent formatting - Follow existing page structure
    12. +
    13. Update SUMMARY.md - New pages must be in navigation
    14. +
    15. Run checks before committing:
    16. +
    +
    just docs::build
    +just docs::test
    +just docs::check-links
    +
    +

    💡 Tips

    +

    Live Reload While Writing

    +
    just docs::watch
    +
    +

    This watches for changes and rebuilds automatically. Open http://localhost:3000 in your browser to see updates in real-time.

    +

    Markdown Preview in Editor

    +

    Most editors have Markdown preview:

    +
      +
    • VS Code: Ctrl+Shift+V (Cmd+Shift+V on Mac)
    • +
    • IntelliJ/CLion: Preview pane (right side)
    • +
    • Vim/Neovim: Use plugins like markdown-preview.nvim
    • +
    +

    Quick Reference

    +
      +
    • SUMMARY.md - Table of contents (edit to add/remove pages)
    • +
    • book.toml - mdBook configuration
    • +
    • theme/ - Custom CSS/JS (if needed)
    • +
    • diagrams/ - SVG diagrams
    • +
    +

    🐛 Troubleshooting

    +

    mdbook command not found

    +
    # Install mdBook
    +cargo install mdbook
    +
    +# Verify installation
    +mdbook --version
    +
    +

    Port 3000 already in use

    +
    # Serve on different port
    +cd docs
    +mdbook serve --port 3001
    +
    + +
    # Check all links
    +just docs::check-links
    +
    +# Update internal links in affected files
    +# Then rebuild
    +just docs::build
    +
    +

    📚 Resources

    + +

    🤝 Contributing to Documentation

    +

    Documentation improvements are always welcome! To contribute:

    +
      +
    1. Fork the repository
    2. +
    3. Create a feature branch
    4. +
    5. Make your changes
    6. +
    7. Test with just docs::build and just docs::test
    8. +
    9. Submit a pull request
    10. +
    +

    See contributing/documentation.md for detailed guidelines.

    +
    +

    Happy documenting! 📖

    +

    If you have questions or need help, please open an issue or reach out to the maintainers.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/kogral/core-concepts.html b/docs/book/kogral/core-concepts.html new file mode 100644 index 0000000..d598c9f --- /dev/null +++ b/docs/book/kogral/core-concepts.html @@ -0,0 +1,709 @@ + + + + + + Core Concepts - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Core Concepts

    +

    Understanding the fundamental concepts behind KOGRAL.

    +

    The Knowledge Graph

    +

    At its core, KOGRAL is a directed graph where:

    +
      +
    • Nodes = pieces of knowledge (notes, decisions, guidelines, patterns)
    • +
    • Edges = typed relationships between concepts
    • +
    +

    Node Types and Relationships

    +

    This graph structure enables:

    +
      +
    • Discovery: Find related concepts through traversal
    • +
    • Context: Understand how ideas connect
    • +
    • Evolution: Track how knowledge changes over time
    • +
    +

    Node Types

    +

    1. Note

    +

    Purpose: Capture general observations, learnings, and discoveries.

    +

    When to use:

    +
      +
    • Documenting a concept you learned
    • +
    • Recording implementation details
    • +
    • Capturing meeting notes
    • +
    • Quick knowledge capture
    • +
    +

    Example:

    +
    ---
    +type: note
    +title: Async Trait Patterns in Rust
    +tags: [rust, async, patterns]
    +---
    +
    +# Async Trait Patterns in Rust
    +
    +Using async traits with the async-trait crate...
    +
    +

    2. Decision (ADR)

    +

    Purpose: Record architectural decisions with full context.

    +

    When to use:

    +
      +
    • Choosing between alternatives (REST vs GraphQL)
    • +
    • Major technical decisions (database selection)
    • +
    • Trade-off analysis
    • +
    • Explaining "why" for future reference
    • +
    +

    Structure:

    +
      +
    • Context: Background and problem
    • +
    • Decision: What was chosen
    • +
    • Consequences: Positive and negative outcomes
    • +
    • Alternatives: What was considered but rejected
    • +
    +

    Example:

    +
    ---
    +type: decision
    +title: Use SurrealDB for Storage
    +status: accepted
    +---
    +
    +## Context
    +Need a graph database that supports our relationship model...
    +
    +## Decision
    +Adopt SurrealDB as the primary storage backend.
    +
    +## Consequences
    ++ Better graph query performance
    ++ Native relationship support
    +- Additional infrastructure dependency
    +- Team learning curve
    +
    +

    3. Guideline

    +

    Purpose: Define coding standards, best practices, and conventions.

    +

    When to use:

    +
      +
    • Code style rules
    • +
    • Architecture patterns to follow
    • +
    • Security requirements
    • +
    • Testing standards
    • +
    +

    Can be:

    +
      +
    • Shared: Organization-wide (in shared KOGRAL)
    • +
    • Project-specific: Overrides shared guidelines
    • +
    +

    Example:

    +
    ---
    +type: guideline
    +language: rust
    +category: error-handling
    +---
    +
    +# Rust Error Handling Guidelines
    +
    +1. Use `thiserror` for custom error types
    +2. Never use `unwrap()` in production code
    +3. Always propagate errors with `?`
    +
    +

    4. Pattern

    +

    Purpose: Document reusable solutions to common problems.

    +

    When to use:

    +
      +
    • Recurring implementation patterns
    • +
    • Tested solutions
    • +
    • Best practice implementations
    • +
    • Code templates
    • +
    +

    Structure:

    +
      +
    • Problem: What challenge does this solve?
    • +
    • Solution: The pattern/approach
    • +
    • Context: When to use/not use
    • +
    • Example: Working code
    • +
    +

    Example:

    +
    ---
    +type: pattern
    +title: Repository Pattern for Database Access
    +tags: [architecture, database, pattern]
    +---
    +
    +## Problem
    +Need consistent database access across modules.
    +
    +## Solution
    +Repository pattern with trait abstraction...
    +
    +## Example
    +\`\`\`rust
    +trait UserRepository {
    +    async fn find_by_id(&self, id: Uuid) -> Result<User>;
    +}
    +\`\`\`
    +
    +

    5. Journal

    +

    Purpose: Daily development log for tracking progress and reflections.

    +

    When to use:

    +
      +
    • End of day summaries
    • +
    • Daily standup notes
    • +
    • Progress tracking
    • +
    • Blocker documentation
    • +
    +

    Auto-linked: KOGRAL can auto-link journal entries to mentioned concepts.

    +

    Example:

    +
    ---
    +type: journal
    +date: 2026-01-17
    +---
    +
    +## Progress
    +- Implemented authentication module
    +- Fixed cache race condition
    +
    +## Blockers
    +- Need API versioning discussion
    +
    +## Learnings
    +- tokio::select! perfect for timeouts
    +
    +

    6. Execution

    +

    Purpose: Record AI agent execution results (from Vapora integration).

    +

    When to use:

    +
      +
    • Agent task completion
    • +
    • Execution metrics
    • +
    • Agent decision history
    • +
    • Audit trail
    • +
    +

    Example:

    +
    ---
    +type: execution
    +task_type: code_generation
    +agent: rust-expert
    +outcome: success
    +duration: 45s
    +---
    +
    +Generated authentication module following project guidelines.
    +
    +

    Relationship Types

    +

    1. relates_to

    +

    Meaning: General conceptual relationship.

    +

    Use: Connect related ideas without specific dependency.

    +

    Example:

    +
    [Note: Async Patterns] --relates_to--> [Note: Tokio Runtime]
    +
    +

    2. depends_on

    +

    Meaning: Prerequisite relationship. Source requires target to exist/be understood first.

    +

    Use: Learning paths, implementation order.

    +

    Example:

    +
    [Pattern: Advanced Error Handling] --depends_on--> [Guideline: Basic Errors]
    +
    +

    3. implements

    +

    Meaning: Concrete implementation of an abstract concept.

    +

    Use: Connect code to patterns/guidelines.

    +

    Example:

    +
    [Note: Auth Module Implementation] --implements--> [Pattern: Repository Pattern]
    +
    +

    4. extends

    +

    Meaning: Inheritance/extension relationship.

    +

    Use: Guideline overrides, pattern variations.

    +

    Example:

    +
    [Guideline: Project Error Handling] --extends--> [Guideline: Shared Error Handling]
    +
    +

    5. supersedes

    +

    Meaning: Replacement relationship. Source replaces target.

    +

    Use: Track evolution of decisions/patterns.

    +

    Example:

    +
    [Decision: Use GraphQL v2] --supersedes--> [Decision: Use REST]
    +
    +

    6. explains

    +

    Meaning: Documentation/clarification relationship.

    +

    Use: Connect notes to implementations, executions to rationale.

    +

    Example:

    +
    [Note: Why We Chose Rust] --explains--> [Decision: Adopt Rust]
    +
    +

    Multi-Graph Architecture

    +

    KB supports multiple knowledge graphs:

    +

    Local Graph (Project-Specific)

    +

    Location: .kogral/ in project directory

    +

    Purpose: Project-specific knowledge

    +
      +
    • Project decisions
    • +
    • Implementation notes
    • +
    • Local patterns
    • +
    • Daily journals
    • +
    +

    Storage: Filesystem (git-tracked)

    +

    Scope: Single project

    +

    Shared Graph (Organization-Wide)

    +

    Location: Configurable (e.g., ~/org/.kogral-shared)

    +

    Purpose: Shared organizational knowledge

    +
      +
    • Coding guidelines
    • +
    • Standard patterns
    • +
    • Architecture principles
    • +
    • Security policies
    • +
    +

    Storage: SurrealDB (centralized) or filesystem (synced)

    +

    Scope: All projects

    +

    Inheritance Model

    +
    Shared Guidelines (priority: 50)
    +        ↓ [inherited by]
    +Project Guidelines (priority: 100)
    +        ↓ [effective]
    +Combined Guidelines (higher priority wins)
    +
    +

    Example:

    +

    Shared guideline: "Use Result for errors" +Project override: "Use Result + log all errors with tracing" +Effective: Both rules apply, project adds requirement

    +

    Config-Driven Behavior

    +

    Everything is configurable via Nickel schemas:

    +
    {
    +  graph = { name = "my-project" },          # Graph metadata
    +  storage = { primary = 'filesystem },       # Where to store
    +  embeddings = { provider = 'fastembed },    # AI provider
    +  templates = { /* ... */ },                 # Document templates
    +  query = { similarity_threshold = 0.6 },    # Search behavior
    +}
    +
    +

    No hardcoding: Change behavior without code changes.

    + +

    Beyond keyword matching, KOGRAL uses embeddings to find concepts:

    +

    Keyword search: "Find 'error handling'"

    +
      +
    • Matches exact phrase "error handling"
    • +
    +

    Semantic search: "How to handle failures gracefully?"

    +
      +
    • Finds: error handling, exception patterns, Result types, panic recovery
    • +
    • Understands: "failures" = errors, "gracefully" = best practices
    • +
    +

    How it works:

    +
      +
    1. Text → Embedding (384 or 1536 dimensional vector)
    2. +
    3. Similarity search (cosine distance)
    4. +
    5. Return nodes above threshold (e.g., 0.6)
    6. +
    +

    Providers:

    +
      +
    • fastembed: Local, free, offline (384d)
    • +
    • OpenAI: Cloud, best quality (1536d)
    • +
    • Claude: Cloud, excellent (1024d)
    • +
    • Ollama: Self-hosted (768d)
    • +
    +

    Templates

    +

    Tera templates generate consistent documents:

    +
    ---
    +id: {{ id }}
    +type: {{ type }}
    +title: {{ title }}
    +tags: [{% for tag in tags %}"{{ tag }}"{% endfor %}]
    +---
    +
    +# {{ title }}
    +
    +{{ content }}
    +
    +

    Customizable: Override templates per project.

    +

    Export formats: Logseq, JSON, Markdown.

    +

    MCP Integration

    +

    Model Context Protocol connects KOGRAL to Claude Code:

    +
    Claude Code
    +    ↓ [JSON-RPC 2.0]
    +kb-mcp Server
    +    ↓ [Rust API]
    +kb-core Library
    +    ↓ [Storage]
    +Knowledge Graph
    +
    +

    Tools: kogral/search, kogral/add_note, kogral/get_guidelines, etc.

    +

    Resources: kogral://project/notes, kogral://shared/guidelines

    +

    Prompts: kogral/summarize_project, kogral/find_related

    +

    Git-Friendly Storage

    +

    Markdown + YAML frontmatter = git-tracked knowledge:

    +
    ---
    +id: note-123
    +type: note
    +title: My Note
    +---
    +
    +# Content here
    +
    +

    Benefits:

    +
      +
    • ✅ Diffs in PRs (reviewable changes)
    • +
    • ✅ Branches (experiment with knowledge)
    • +
    • ✅ Merges (combine knowledge from feature branches)
    • +
    • ✅ History (track evolution over time)
    • +
    • ✅ Blame (who added this knowledge?)
    • +
    +

    Logseq Content Blocks

    +

    KOGRAL provides full support for Logseq-style outliner blocks with rich metadata and structure.

    +

    What are Blocks?

    +

    Blocks are the fundamental unit of content in Logseq's outliner format:

    +
      +
    • Each bullet point is a block
    • +
    • Blocks can have children (nested blocks)
    • +
    • Blocks support tasks, tags, and custom properties
    • +
    • Blocks can reference other blocks or pages
    • +
    +

    Block Features

    +

    Task Status:

    +
    - TODO Implement authentication #high-priority
    +- DOING Write tests
    +- DONE Deploy to staging
    +- LATER Consider GraphQL API
    +- NOW Fix critical bug
    +- WAITING Code review from @alice
    +- CANCELLED Old approach
    +
    +

    Inline Tags:

    +
    - Learning Rust ownership #rust #learning #card
    +  - Prevents data races at compile time
    +  - Borrowing rules enforce safety
    +
    +

    Custom Properties:

    +
    - Research paper summary
    +  priority:: high
    +  reviewed:: 2026-01-17
    +  source:: https://example.com/paper.pdf
    +  - Key findings...
    +
    +

    Block and Page References:

    +
    - Meeting notes from [[2026-01-17]]
    +  - Discussed architecture ((block-ref-123))
    +  - Action items: [[Project Roadmap]]
    +
    +

    Hierarchical Structure:

    +
    - Parent block #top-level
    +  - Child block 1
    +    - Nested child
    +  - Child block 2
    +
    +

    Configuration

    +

    Blocks support is opt-in via configuration:

    +
    {
    +  blocks = {
    +    enabled = true,              # Enable blocks parsing
    +    parse_on_import = true,      # Auto-parse from Logseq imports
    +    serialize_on_export = true,  # Serialize to outliner format
    +    enable_mcp_tools = true,     # Enable block-related MCP tools
    +  },
    +}
    +
    +

    Use Cases

    +

    1. Task Management:

    +
    - TODO Weekly sprint planning #meeting
    +  - DONE Review last sprint
    +  - DOING Plan current sprint
    +  - TODO Assign tasks
    +
    +

    2. Flashcards (Spaced Repetition):

    +
    - What is Rust's ownership model? #card #rust
    +  - Ownership prevents data races at compile time
    +  - Each value has a single owner
    +  - When owner goes out of scope, value is dropped
    +
    +

    3. Knowledge Capture with Metadata:

    +
    - Tokio async runtime patterns #rust #async
    +  category:: architecture
    +  difficulty:: intermediate
    +  - Use tokio::select! for concurrent operations
    +  - spawn_blocking() for CPU-intensive work
    +
    +

    4. Linked Notes:

    +
    - Discussed [[ADR-001]] in architecture meeting
    +  - Decided on SurrealDB
    +  - See ((meeting-notes-block-id)) for details
    +
    +

    Block Queries (MCP Tools)

    +

    Query blocks across your knowledge base:

    +

    Find blocks by tag:

    +
    {
    +  "tool": "kogral/find_blocks",
    +  "arguments": { "tag": "card" }
    +}
    +
    +

    Find all TODOs:

    +
    {
    +  "tool": "kogral/find_todos",
    +  "arguments": { "limit": 20 }
    +}
    +
    +

    Find flashcards:

    +
    {
    +  "tool": "kogral/find_cards",
    +  "arguments": { "limit": 10 }
    +}
    +
    +

    Find blocks by property:

    +
    {
    +  "tool": "kogral/find_blocks",
    +  "arguments": {
    +    "property_key": "priority",
    +    "property_value": "high"
    +  }
    +}
    +
    +

    Architecture

    +

    Hybrid Model:

    +
      +
    • Content stored as markdown string (source of truth)
    • +
    • Blocks lazily parsed on first access
    • +
    • Cached block structure for fast queries
    • +
    • Bidirectional: markdown ↔ blocks
    • +
    +

    BlockParser:

    +
      +
    • Parse outliner markdown → Block structures
    • +
    • Serialize Block structures → outliner markdown
    • +
    • Preserve all metadata (tags, status, properties, references)
    • +
    • Round-trip fidelity for Logseq compatibility
    • +
    +

    Storage:

    +
      +
    • Filesystem: markdown with blocks inline
    • +
    • SurrealDB: dedicated block table with indexes
    • +
    • Indexes: tags, status, parent_id, full-text search
    • +
    +

    See Also:

    + +

    Key Principles

    +
      +
    1. Capture During Work: Don't wait, document as you go
    2. +
    3. Link as You Learn: Connect related concepts immediately
    4. +
    5. Query When Needed: AI-assisted discovery of relevant knowledge
    6. +
    7. Evolve Over Time: Update decisions, supersede patterns
    8. +
    9. Share Wisely: Shared guidelines, local specifics
    10. +
    +

    Next Steps

    + + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/kogral/design-philosophy.html b/docs/book/kogral/design-philosophy.html new file mode 100644 index 0000000..96a9cd3 --- /dev/null +++ b/docs/book/kogral/design-philosophy.html @@ -0,0 +1,622 @@ + + + + + + Design Philosophy - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Design Philosophy

    +

    The principles and values guiding Knowledge Base design and implementation.

    +

    Core Tenets

    +

    1. Config-Driven, Not Hardcoded

    +

    Principle: All behavior should be configurable via schemas, not baked into code.

    +

    Why: Flexibility without code changes. Users adapt KB to their workflows, not vice versa.

    +

    Example:

    +
    #![allow(unused)]
    +fn main() {
    +// ❌ Bad: Hardcoded
    +impl EmbeddingProvider {
    +    fn new() -> Self {
    +        FastEmbedProvider::new("BAAI/bge-small-en-v1.5") // Can't change
    +    }
    +}
    +
    +// ✅ Good: Config-driven
    +impl EmbeddingProvider {
    +    fn from_config(config: &EmbeddingConfig) -> Result<Box<dyn EmbeddingProvider>> {
    +        match config.provider {
    +            'fastembed => Ok(Box::new(FastEmbedProvider::new(&config.model)?)),
    +            'openai => Ok(Box::new(OpenAIProvider::new(&config.model)?)),
    +        }
    +    }
    +}
    +}
    +

    Benefits:

    +
      +
    • Switch embedding providers without recompilation
    • +
    • Different configs for dev/prod
    • +
    • User choice, not developer mandate
    • +
    +

    2. Type-Safe Configuration

    +

    Principle: Validate configuration before runtime, not during.

    +

    Why: Catch errors early, reduce runtime failures.

    +

    Implementation: Nickel contracts + serde validation = double validation

    +
    # Schema defines valid values
    +EmbeddingProvider = [| 'openai, 'claude, 'fastembed |]
    +
    +# Typo caught at export time, not runtime
    +{ provider = 'opena1 }  # Error: Invalid variant
    +
    +

    Benefits:

    +
      +
    • Errors found during nickel export, not during execution
    • +
    • Self-documenting: schema is the spec
    • +
    • Refactoring safe: change schema, find all usages
    • +
    +

    3. Local-First, Cloud-Optional

    +

    Principle: Core functionality works offline, cloud is enhancement.

    +

    Why: Privacy, cost control, offline development.

    +

    Examples:

    +
    + + + +
    FeatureLocalCloud
    StorageFilesystemSurrealDB
    EmbeddingsfastembedOpenAI/Claude
    SearchText-basedSemantic
    +
    +

    Benefits:

    +
      +
    • Works on planes, trains, areas with poor internet
    • +
    • No API costs for small projects
    • +
    • Privacy-sensitive projects keep data local
    • +
    • Production can use cloud for scale
    • +
    +

    4. Git-Friendly by Default

    +

    Principle: Knowledge should version alongside code.

    +

    Why: Knowledge describes code, should evolve with it.

    +

    Implementation:

    +
      +
    • Markdown + YAML frontmatter (text-based, diffable)
    • +
    • One file per node (granular commits)
    • +
    • Wikilinks preserved (works in Logseq, Obsidian)
    • +
    +

    Benefits:

    +
    # Review knowledge changes in PRs
    +git diff .kogral/decisions/
    +
    +# Knowledge follows branches
    +git checkout feature-x
    +# .kogral/ reflects feature-x decisions
    +
    +# Knowledge merges
    +git merge feature-x
    +# Merge conflicts = knowledge conflicts (resolve intentionally)
    +
    +

    5. AI-Native, Human-Readable

    +

    Principle: Optimized for AI consumption, readable by humans.

    +

    Why: Best of both worlds - AI-assisted discovery, human verification.

    +

    Implementation:

    +
      +
    • Structured: YAML frontmatter for AI parsing
    • +
    • Semantic: Embeddings for AI queries
    • +
    • Readable: Markdown for human consumption
    • +
    • Linked: Typed relationships for AI traversal
    • +
    +

    Example:

    +
    ---
    +id: note-auth
    +type: note
    +title: Authentication Implementation
    +tags: [security, auth]
    +relates_to: [guideline-security, pattern-jwt]
    +---
    +
    +# Authentication Implementation
    +
    +Humans read this markdown normally.
    +
    +AI can:
    +- Parse frontmatter for metadata
    +- Extract tags for filtering
    +- Follow relates_to links
    +- Generate embeddings for semantic search
    +
    +

    6. Composition Over Inheritance

    +

    Principle: Build systems by composing small, focused components.

    +

    Why: Flexibility, testability, maintainability.

    +

    Implementation:

    +
    #![allow(unused)]
    +fn main() {
    +// Small, focused traits
    +trait Storage { ... }
    +trait EmbeddingProvider { ... }
    +trait TemplateEngine { ... }
    +
    +// Compose into systems
    +struct KnowledgeBase {
    +    storage: Box<dyn Storage>,
    +    embeddings: Option<Box<dyn EmbeddingProvider>>,
    +    templates: TemplateEngine,
    +}
    +}
    +

    Benefits:

    +
      +
    • Swap storage without affecting embeddings
    • +
    • Disable embeddings without breaking storage
    • +
    • Test components in isolation
    • +
    • Add new providers by implementing trait
    • +
    +

    7. Fail Fast, Fail Clearly

    +

    Principle: Detect errors early, provide clear messages.

    +

    Why: Developer experience - fast feedback, actionable errors.

    +

    Implementation:

    +
    #![allow(unused)]
    +fn main() {
    +// ❌ Bad: Silent failure
    +fn load_config(path: &Path) -> Option<Config> {
    +    std::fs::read_to_string(path)
    +        .ok()
    +        .and_then(|s| serde_json::from_str(&s).ok())
    +}
    +
    +// ✅ Good: Explicit errors
    +fn load_config(path: &Path) -> Result<Config, ConfigError> {
    +    let content = std::fs::read_to_string(path)
    +        .map_err(|e| ConfigError::ReadFailed(path.to_path_buf(), e))?;
    +
    +    serde_json::from_str(&content)
    +        .map_err(|e| ConfigError::ParseFailed(path.to_path_buf(), e))
    +}
    +}
    +

    Error messages:

    +
    ❌ "Failed to load config"
    +✅ "Failed to read config file '/path/to/config.ncl': Permission denied"
    +
    +

    8. Convention Over Configuration (With Escape Hatches)

    +

    Principle: Sane defaults, but everything customizable.

    +

    Why: Easy to start, flexible as you grow.

    +

    Examples:

    +
    # Minimal config (uses conventions)
    +{ graph = { name = "my-project" } }
    +# Defaults: filesystem storage, no embeddings, standard templates
    +
    +# Full config (explicit everything)
    +{
    +  graph = { name = "my-project" },
    +  storage = { primary = 'surrealdb, /* ... */ },
    +  embeddings = { provider = 'openai, /* ... */ },
    +  templates = { templates_dir = "custom" },
    +}
    +
    +

    Conventions:

    +
      +
    • .kogral/ directory in project root
    • +
    • Filesystem storage by default
    • +
    • YAML frontmatter + markdown body
    • +
    • Standard template names (note.md.tera, decision.md.tera)
    • +
    +

    Escape hatches:

    +
      +
    • --kb-dir to use different location
    • +
    • Configure alternative storage backends
    • +
    • Custom frontmatter schemas
    • +
    • Override any template
    • +
    +

    9. Documentation as Code

    +

    Principle: Documentation lives with code, versioned together.

    +

    Why: Outdated docs are worse than no docs.

    +

    Implementation:

    +
      +
    • ADRs in .kogral/decisions/ (alongside code)
    • +
    • Guidelines in .kogral/guidelines/ (versioned with code)
    • +
    • Patterns in .kogral/patterns/ (evolve with implementations)
    • +
    +

    Benefits:

    +
    # Code and docs branch together
    +git checkout old-version
    +# .kogral/ reflects that version's decisions
    +
    +# Code and docs merge together
    +git merge feature
    +# Merge includes new patterns, updated guidelines
    +
    +# Code and docs reviewed together
    +# PR shows code + decision + guideline updates
    +
    +

    10. Optimize for Discoverability

    +

    Principle: Knowledge is useless if you can't find it.

    +

    Why: The point is to use knowledge, not just store it.

    +

    Features:

    +
      +
    • Text search: Find exact keywords
    • +
    • Semantic search: Find related concepts
    • +
    • Graph traversal: Follow relationships
    • +
    • Tag filtering: Narrow by category
    • +
    • MCP integration: AI-assisted discovery
    • +
    +

    Example:

    +

    User doesn't remember exact term, but knows the concept:

    +
    "Find anything about handling errors gracefully"
    +
    +

    KB finds (semantically):

    +
      +
    • "Error Handling with thiserror" (pattern)
    • +
    • "Result Type Best Practices" (guideline)
    • +
    • "Panic Recovery" (note)
    • +
    • "Graceful Degradation" (pattern)
    • +
    +

    No exact keyword match needed, concept match sufficient.

    +

    11. Build for Humans, Enable AI

    +

    Principle: Humans are the primary users, AI is the assistant.

    +

    Why: AI should enhance human workflows, not replace them.

    +

    Implementation:

    +
      +
    • Human-readable formats: Markdown, YAML
    • +
    • Human-editable: Any text editor works
    • +
    • Human-discoverable: ls .kogral/notes/ shows files
    • +
    • AI-enhanced: MCP for AI-assisted queries
    • +
    +

    Example:

    +
    # Human workflow
    +vim .kogral/notes/my-note.md    # Edit directly
    +git add .kogral/notes/my-note.md
    +git commit -m "Add note about X"
    +
    +# AI-enhanced workflow
    +# (in Claude Code)
    +"Add a note about X with tags Y, Z"
    +# AI creates file, human reviews
    +
    +

    12. Embrace the Graph

    +

    Principle: Knowledge is interconnected, embrace the relationships.

    +

    Why: Context comes from connections, not isolation.

    +

    Implementation:

    +
      +
    • Typed relationships (not just "related")
    • +
    • Bidirectional traversal
    • +
    • Relationship strength (0.0-1.0)
    • +
    • Multi-hop queries
    • +
    +

    Example:

    +
    Find all patterns that:
    +  - Are implemented by current project
    +  - Depend on shared guidelines
    +  - Were added in the last 6 months
    +
    +# Graph query, not sequential file search
    +
    +

    Anti-Patterns to Avoid

    +

    1. ❌ Hardcoding Behavior

    +
    #![allow(unused)]
    +fn main() {
    +// Don't
    +const EMBEDDING_MODEL: &str = "BAAI/bge-small-en-v1.5";
    +
    +// Do
    +let model = config.embeddings.model.as_str();
    +}
    +

    2. ❌ Runtime Schema Validation

    +
    // Don't validate at runtime
    +let provider = config.provider; // Might be invalid
    +
    +// Do validate at export time (Nickel contracts)
    +provider | [| 'openai, 'claude, 'fastembed |]
    +
    +

    3. ❌ Opaque Errors

    +
    #![allow(unused)]
    +fn main() {
    +// Don't
    +Err("Failed".into())
    +
    +// Do
    +Err(KbError::NodeNotFound(id.to_string()))
    +}
    +

    4. ❌ Coupling Components

    +
    #![allow(unused)]
    +fn main() {
    +// Don't
    +impl KnowledgeBase {
    +    fn search(&self) -> Vec<Node> {
    +        let embeddings = FastEmbedProvider::new(); // Hardcoded!
    +        // ...
    +    }
    +}
    +
    +// Do
    +impl KnowledgeBase {
    +    fn search(&self) -> Vec<Node> {
    +        if let Some(provider) = &self.embeddings {
    +            // Use configured provider
    +        }
    +    }
    +}
    +}
    +

    5. ❌ Proprietary Formats

    +
    // Don't
    +Binary blob: [0x4B, 0x42, 0x01, ...]
    +
    +// Do
    +Markdown + YAML:
    +---
    +id: note-1
    +---
    +# Content
    +
    +

    Influences

    +

    KB draws inspiration from:

    +
      +
    • Logseq: Outliner, graph view, wikilinks
    • +
    • Obsidian: Markdown-first, local storage, plugins
    • +
    • Zettelkasten: Atomic notes, links, emergence
    • +
    • ADR: Decision records, context preservation
    • +
    • Git: Version control, branching, merging
    • +
    • Nickel: Type-safe configuration, contracts
    • +
    • MCP: AI integration protocol
    • +
    • SurrealDB: Graph database, relationships
    • +
    +

    Implementation Principles

    +

    Rust

    +
      +
    • Zero unsafe code (#![forbid(unsafe_code)])
    • +
    • No unwrap() in production code
    • +
    • Always use Result<T> for fallibility
    • +
    • Comprehensive error types with thiserror
    • +
    • Full test coverage (100+ tests)
    • +
    +

    Nickel

    +
      +
    • Contracts for validation
    • +
    • Defaults in schemas
    • +
    • Documentation in contracts
    • +
    • Composition via imports
    • +
    +

    NuShell

    +
      +
    • Structured data pipelines
    • +
    • Error handling in scripts
    • +
    • Colored output for UX
    • +
    • Dry-run modes
    • +
    +

    Evolution Strategy

    +

    KB follows these guidelines for evolution:

    +
      +
    1. Backward Compatibility: Don't break existing configs
    2. +
    3. Deprecation Period: Warn before removal (1 major version)
    4. +
    5. Migration Tools: Provide automated migrations
    6. +
    7. Semantic Versioning: MAJOR.MINOR.PATCH strictly
    8. +
    +

    Conclusion

    +

    These principles guide every decision:

    +

    Config-driven: Behavior in schemas, not code +✅ Type-safe: Validate before runtime +✅ Local-first: Works offline, cloud optional +✅ Git-friendly: Knowledge versions with code +✅ AI-native: Optimized for AI, readable by humans +✅ Composable: Small pieces, loosely coupled +✅ Fast feedback: Fail early, clear errors +✅ Discoverable: Easy to find what you need

    +

    The goal: Knowledge management that developers actually use.

    +

    Next Steps

    + + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/kogral/what-is-kogral.html b/docs/book/kogral/what-is-kogral.html new file mode 100644 index 0000000..5854fd8 --- /dev/null +++ b/docs/book/kogral/what-is-kogral.html @@ -0,0 +1,423 @@ + + + + + + What is KOGRAL? - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    What is KOGRAL?

    +

    KOGRAL (KOwledge GRAphs, Local-first) is a git-native knowledge graph system designed for developer teams to capture, connect, and query structured knowledge.

    +

    Purpose

    +

    KOGRAL solves the problem of knowledge fragmentation in software development:

    +
      +
    • 📝 Notes scattered across tools
    • +
    • 🤔 Decisions lost in chat histories
    • +
    • 📚 Guidelines buried in wikis
    • +
    • 🔄 Patterns rediscovered repeatedly
    • +
    • 🤖 AI agents lacking project context
    • +
    +

    Solution

    +

    KOGRAL provides a unified, queryable knowledge graph that:

    +
      +
    1. Captures knowledge in structured, git-friendly markdown
    2. +
    3. Connects concepts through typed relationships
    4. +
    5. Queries via text and semantic similarity
    6. +
    7. Integrates with AI tools (Claude Code via MCP)
    8. +
    9. Syncs across local (filesystem) and shared (SurrealDB) storage
    10. +
    +

    Core Philosophy

    +

    Config-Driven

    +

    Behavior defined in Nickel schemas, not hardcoded:

    +
    {
    +  graph = { name = "my-project" },
    +  storage = { primary = 'filesystem },
    +  embeddings = { provider = 'fastembed },
    +  templates = { templates_dir = "templates" },
    +}
    +
    +

    Every aspect configurable: storage, embeddings, templates, query behavior.

    +

    Git-Friendly

    +

    Knowledge stored as markdown files with YAML frontmatter:

    +
    ---
    +id: note-123
    +type: note
    +title: Error Handling Patterns
    +tags: [rust, error-handling]
    +---
    +
    +# Error Handling Patterns
    +
    +Use `thiserror` for custom error types...
    +
    +

    Changes tracked via git, reviewable in PRs, mergeable across branches.

    +

    AI-Native

    +

    Built for agent collaboration:

    +
      +
    • MCP Protocol: Native integration with Claude Code
    • +
    • Semantic Search: Find concepts, not just keywords
    • +
    • Auto-Linking: Suggest relationships based on content
    • +
    • Context Injection: Agents query relevant guidelines before coding
    • +
    +

    Key Concepts

    +

    Nodes

    +

    6 types of knowledge nodes:

    +
    + + + + + + +
    TypePurposeExample
    NoteGeneral observations"Rust ownership patterns"
    DecisionADRs (Architectural Decision Records)"Use SurrealDB for storage"
    GuidelineCode standards"Error handling with thiserror"
    PatternReusable solutions"Repository pattern for DB access"
    JournalDaily reflections"2026-01-17 progress notes"
    ExecutionAgent task records"Implemented auth module"
    +
    +

    Relationships

    +

    6 typed edges connecting nodes:

    +
    + + + + + + +
    RelationMeaningExample
    relates_toConceptual linkNote ↔ Note
    depends_onPrerequisitePattern → Guideline
    implementsConcrete realizationCode → Pattern
    extendsInheritanceProjectGuideline → BaseGuideline
    supersedesReplacementDecisionV2 → DecisionV1
    explainsDocumentationNote → Execution
    +
    +

    Multi-Graph Architecture

    +

    Local Graph (per project):

    +
      +
    • Stored in .kogral/ directory
    • +
    • Git-tracked for version control
    • +
    • Project-specific knowledge
    • +
    +

    Shared Graph (organization-wide):

    +
      +
    • Centralized guidelines and patterns
    • +
    • SurrealDB for scalability
    • +
    • Inherited by projects
    • +
    +

    Inheritance Resolution:

    +
    Shared Guidelines (priority: 50)
    +    ↓
    +Project Guidelines (priority: 100)
    +    ↓
    +Effective Guidelines (higher priority wins)
    +
    +

    Use Cases

    +

    For Developers

    +
      +
    • Capture decisions as you make them (ADRs)
    • +
    • Document patterns for future reference
    • +
    • Track daily progress in journal entries
    • +
    • Query past decisions before new implementations
    • +
    +

    For Teams

    +
      +
    • Share guidelines across projects
    • +
    • Standardize patterns organization-wide
    • +
    • Onboard new members with searchable knowledge
    • +
    • Review decisions in context with git history
    • +
    +

    For AI Agents

    +
      +
    • Query guidelines before generating code
    • +
    • Check past decisions for context
    • +
    • Document executions for audit trails
    • +
    • Suggest related patterns during implementation
    • +
    +

    Comparison with Other Tools

    +

    vs. Logseq

    +
    + + + + + + +
    FeatureKOGRALLogseq
    StorageGit-friendly markdown + DBLocal markdown
    AI IntegrationNative MCP protocolPlugin-based
    ConfigType-safe Nickel schemasJSON files
    Multi-BackendFilesystem + SurrealDBFilesystem only
    Semantic SearchMultiple AI providersLocal only
    Graph QueriesSurrealDB graph queriesBlock references
    +
    +

    Compatibility: KOGRAL can import/export Logseq graphs for visual editing.

    +

    vs. Obsidian

    +
    + + + + + +
    FeatureKOGRALObsidian
    Target AudienceDevelopers + AI agentsKnowledge workers
    FocusStructured knowledge graphFlexible note-taking
    ConfigurationConfig-driven (Nickel)Settings UI
    CLIFull CLI + MCP serverLimited CLI
    Version ControlGit-nativeGit plugin
    +
    +

    Use Case: KOGRAL for developer knowledge, Obsidian for personal notes.

    +

    vs. Notion/Confluence

    +
    + + + + + +
    FeatureKOGRALNotion/Confluence
    StorageLocal-firstCloud-only
    FormatPlain markdownProprietary
    AI AccessProgrammatic APIWeb scraping
    OfflineFull functionalityLimited
    PrivacySelf-hostedThird-party servers
    +
    +

    Advantage: KOGRAL keeps sensitive knowledge on-premises.

    +

    Architecture Overview

    +
    ┌─────────────────────────────────────────────────────┐
    +│                    kb-core                          │
    +│  (Rust library: graph, storage, config, query)     │
    +└──────────────┬─────────────┬────────────────────────┘
    +               │             │
    +     ┌─────────┴──────┐  ┌──┴─────────┐
    +     │                │  │            │
    +┌────▼─────┐  ┌──────▼──▼───┐  ┌─────▼─────┐
    +│  kb-cli  │  │   kb-mcp     │  │  NuShell  │
    +│ (13 cmds)│  │ (MCP server) │  │ (scripts) │
    +└──────────┘  └──────────────┘  └───────────┘
    +
    +

    Layers:

    +
      +
    1. kb-core: Core library (models, storage, query)
    2. +
    3. kb-cli: Command-line interface
    4. +
    5. kb-mcp: MCP server for AI integration
    6. +
    7. Scripts: NuShell automation (sync, backup, etc.)
    8. +
    +

    When to Use KOGRAL

    +

    Good fit:

    +
      +
    • Developer teams building software
    • +
    • Projects with architectural decisions
    • +
    • Organizations standardizing patterns
    • +
    • AI-assisted development workflows
    • +
    • Knowledge requiring version control
    • +
    +

    Not ideal for:

    +
      +
    • Personal journaling (use Obsidian)
    • +
    • Team wikis (use Notion)
    • +
    • Customer documentation (use mdBook)
    • +
    • Simple note-taking (use Logseq)
    • +
    +

    Next Steps

    + +
    +
    +

    "Knowledge is only valuable when it's accessible, connected, and queryable."

    +
    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/kogral/why-kogral.html b/docs/book/kogral/why-kogral.html new file mode 100644 index 0000000..7c1d5e2 --- /dev/null +++ b/docs/book/kogral/why-kogral.html @@ -0,0 +1,461 @@ + + + + + + Why KOGRAL? - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Why KB?

    +

    Understanding the motivation behind the Knowledge Base system.

    +

    The Problem: Knowledge Fragmentation

    +

    Modern software development generates enormous amounts of knowledge:

    +

    📝 Notes: Implementation details, learnings, discoveries +🤔 Decisions: Why we chose X over Y +📚 Guidelines: How we write code, architecture patterns +🔄 Patterns: Reusable solutions we've discovered +💭 Discussions: Slack threads, meeting notes, PR comments +🐛 Bug Fixes: How we solved issues

    +

    But where does this knowledge live?

    +
      +
    • Meeting notes in Google Docs
    • +
    • Decisions buried in Slack threads
    • +
    • Guidelines in a wiki nobody updates
    • +
    • Patterns in someone's head
    • +
    • PR discussions lost in GitHub history
    • +
    • Bug solutions in closed Jira tickets
    • +
    +

    The result?

    +

    Rediscovering solutions to problems we've already solved +❌ Inconsistent practices because guidelines aren't accessible +❌ Slow onboarding as new developers lack context +❌ Lost context when team members leave +❌ Repeated mistakes because past lessons aren't preserved

    +

    The Solution: Unified, Queryable Knowledge Graph

    +

    Knowledge Base provides a single source of truth for project knowledge:

    +

    Capture once: Notes, decisions, guidelines, patterns +✅ Connect concepts: Typed relationships between ideas +✅ Query naturally: Text and semantic search +✅ AI-assisted: Claude Code integration via MCP +✅ Git-tracked: Version control for knowledge +✅ Shared wisdom: Organization-wide guidelines + project-specific

    +

    What Makes KB Different?

    +

    1. Git-Native

    +

    Other tools: Notion, Confluence, wikis in web apps

    +

    KB: Markdown files in .kogral/ directory

    +

    Benefits:

    +
    # Review knowledge changes in PRs
    +git diff .kogral/decisions/
    +
    +# Branch knowledge with code
    +git checkout feature-branch
    +# .kogral/ follows the branch
    +
    +# Merge knowledge from feature work
    +git merge feature-branch
    +# Knowledge merges like code
    +
    +

    Result: Knowledge versioned alongside code it describes.

    +

    2. AI-Native

    +

    Other tools: Manual search, browse folders

    +

    KB: AI queries via Claude Code

    +

    Example:

    +
    You: "Find anything about error handling"
    +
    +Claude: [Searches semantically, not just keywords]
    +Found 5 concepts:
    +- Pattern: Error Handling with thiserror
    +- Guideline: Result Type Best Practices
    +- Decision: Use anyhow for Application Errors
    +- Note: Custom Error Types
    +- Journal: Fixed error propagation bug
    +
    +[All related, even without exact keyword match]
    +
    +

    Result: Find concepts, not just documents with keywords.

    +

    3. Config-Driven

    +

    Other tools: Hardcoded behavior, limited customization

    +

    KB: Nickel schemas define everything

    +

    Example:

    +
    # Development: local embeddings, no costs
    +{ embeddings = { provider = 'fastembed } }
    +
    +# Production: cloud embeddings, best quality
    +{ embeddings = { provider = 'openai, model = "text-embedding-3-large" } }
    +
    +

    Result: Adapt behavior without code changes.

    +

    4. Multi-Graph

    +

    Other tools: One knowledge base per project

    +

    KB: Shared organizational knowledge + project-specific

    +

    Structure:

    +
    Organization Shared KB
    +  ├── Rust Guidelines (applies to all projects)
    +  ├── Security Patterns (applies to all projects)
    +  └── Testing Standards (applies to all projects)
    +
    +Project A KB
    +  ├── Inherits shared guidelines
    +  ├── Project-specific decisions
    +  └── Can override shared guidelines
    +
    +Project B KB
    +  ├── Inherits same shared guidelines
    +  ├── Different project decisions
    +  └── Different overrides
    +
    +

    Result: Consistency across organization, flexibility per project.

    +

    5. Structured Relationships

    +

    Other tools: Backlinks, tags, folders

    +

    KB: Typed relationships with meaning

    +

    Example:

    +
    Pattern: Repository Pattern
    +    ↑ [implements]
    +Note: User Service Implementation
    +    ↑ [relates_to]
    +Decision: Use PostgreSQL
    +    ↑ [depends_on]
    +Guideline: Database Access Patterns
    +
    +

    Result: Understand how knowledge connects, not just that it connects.

    +

    Real-World Impact

    +

    Before KB

    +

    New developer joins:

    +
      +
    1. Read outdated wiki (2 hours)
    2. +
    3. Ask teammates for context (1 hour per question × 10 questions)
    4. +
    5. Discover guidelines by reading code (days)
    6. +
    7. Miss important decisions (leads to mistakes)
    8. +
    +

    Time to productivity: 2-4 weeks

    +

    With KB

    +

    New developer joins:

    +
      +
    1. kb search "architectural decisions" → finds all ADRs
    2. +
    3. Ask Claude: "What are our coding guidelines?" → gets current guidelines with inheritance
    4. +
    5. Browse related notes via graph traversal
    6. +
    7. Full context available, no tribal knowledge
    8. +
    +

    Time to productivity: 3-5 days

    +

    Before KB

    +

    Team makes decision:

    +
      +
    1. Discussion in Slack (lost after a week)
    2. +
    3. Someone documents in wiki (maybe)
    4. +
    5. 6 months later: "Why did we choose X?" → nobody remembers
    6. +
    7. Re-debate the same decision
    8. +
    +

    With KB

    +

    Team makes decision:

    +
      +
    1. Discussion captured as ADR during meeting
    2. +
    3. Context, decision, consequences documented
    4. +
    5. Linked to related patterns and guidelines
    6. +
    7. 6 months later: kb show decision-use-x → full context instantly
    8. +
    +

    Before KB

    +

    Solving a bug:

    +
      +
    1. Encounter race condition in cache
    2. +
    3. Debug for 2 hours
    4. +
    5. Fix it
    6. +
    7. Solution lost in PR comments
    8. +
    +

    Two months later: Different developer, same bug, 2 more hours

    +

    With KB

    +

    Solving a bug:

    +
      +
    1. Encounter race condition
    2. +
    3. Ask Claude: "Have we seen cache race conditions before?"
    4. +
    5. Claude finds journal entry from 2 months ago with solution
    6. +
    7. Apply fix in 10 minutes
    8. +
    +

    Two months later: Same query, same instant solution

    +

    Who Benefits?

    +

    Individual Developers

    +

    Personal knowledge base: Capture learnings, build expertise +✅ Quick recall: "How did I solve this before?" +✅ Context switching: Return to old projects with full context +✅ Career growth: Document what you learn, portfolio of knowledge

    +

    Teams

    +

    Shared context: Everyone has access to team knowledge +✅ Onboarding: New members ramp up faster +✅ Consistency: Follow shared guidelines and patterns +✅ Collaboration: Build on each other's knowledge

    +

    Organizations

    +

    Institutional memory: Knowledge persists beyond individual tenure +✅ Best practices: Standardize across teams +✅ Compliance: Document security and architecture decisions +✅ Efficiency: Stop solving the same problems repeatedly

    +

    AI Agents

    +

    Context injection: Agents query guidelines before generating code +✅ Decision awareness: Agents check past decisions +✅ Pattern following: Agents use documented patterns +✅ Execution tracking: Agent actions documented automatically

    +

    When NOT to Use KB

    +

    KB is not ideal for:

    +

    Personal journaling: Use Obsidian or Logseq +❌ Team wikis: Use Notion or Confluence +❌ Customer docs: Use mdBook or Docusaurus +❌ Project management: Use Jira or Linear +❌ Code comments: Use inline documentation

    +

    KB is perfect for:

    +

    ✅ Developer knowledge graphs +✅ Architectural decision records +✅ Pattern libraries +✅ Coding guidelines +✅ Technical context +✅ AI-assisted development

    +

    The Vision

    +

    Today's development:

    +
    Developer → writes code → commits
    +
    +

    With KB:

    +
    Developer → writes code → documents decisions → links to patterns → commits code + knowledge
    +                    ↓
    +            AI Agent queries knowledge → generates better code
    +                    ↓
    +            Team discovers patterns → reuses solutions → faster development
    +
    +

    Knowledge becomes an active participant in development, not an afterthought.

    +

    Design Philosophy

    +

    Three core principles drive KB:

    +

    1. Knowledge should be captured during work, not after

    +

    ❌ "I'll document this later" → never happens +✅ "Claude, document this decision" → done in 30 seconds

    +

    2. Knowledge should be connected, not isolated

    +

    ❌ Standalone documents in folders +✅ Graph of interconnected concepts

    +

    3. Knowledge should be queryable, not browsable

    +

    ❌ "Let me look through 50 docs to find..." +✅ "Find anything related to error handling" → instant semantic results

    +

    Get Started

    +

    Ready to stop losing knowledge?

    + +
    +
    +

    "The best time to document was during implementation. The second best time is now."

    +
    +

    But with KB + AI, "now" is instant.

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/mark.min.js b/docs/book/mark.min.js new file mode 100644 index 0000000..1636231 --- /dev/null +++ b/docs/book/mark.min.js @@ -0,0 +1,7 @@ +/*!*************************************************** +* mark.js v8.11.1 +* https://markjs.io/ +* Copyright (c) 2014–2018, Julian Kühnel +* Released under the MIT license https://git.io/vwTVl +*****************************************************/ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Mark=t()}(this,function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=i,this.iframesTimeout=o}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach(function(t){var n=e.filter(function(e){return e.contains(t)}).length>0;-1!==e.indexOf(t)||n||e.push(t)}),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var i=e.contentWindow;if(r=i.document,!i||!r)throw new Error("iframe inaccessible")}catch(e){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,i=!1,o=null,a=function a(){if(!i){i=!0,clearTimeout(o);try{r.isIframeBlank(e)||(e.removeEventListener("load",a),r.getIframeContents(e,t,n))}catch(e){n()}}};e.addEventListener("load",a),o=setTimeout(a,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(e){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,function(){return!0},function(e){r++,n.waitForIframes(e.querySelector("html"),function(){--r||t()})},function(e){e||t()})}},{key:"forEachIframe",value:function(t,n,r){var i=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=t.querySelectorAll("iframe"),s=a.length,c=0;a=Array.prototype.slice.call(a);var u=function(){--s<=0&&o(c)};s||u(),a.forEach(function(t){e.matches(t,i.exclude)?u():i.onIframeReady(t,function(e){n(t)&&(c++,r(e)),u()},u)})}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:null===t?e.nextNode():e.nextNode()&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var i=!1,o=!1;return r.forEach(function(e,t){e.val===n&&(i=t,o=e.handled)}),this.compareNodeIframe(e,t,n)?(!1!==i||o?!1===i||o||(r[i].handled=!0):r.push({val:n,handled:!0}),!0):(!1===i&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var i=this;e.forEach(function(e){e.handled||i.getIframeContents(e.val,function(e){i.createInstanceOnIframe(e).forEachNode(t,n,r)})})}},{key:"iterateThroughNodes",value:function(e,t,n,r,i){for(var o,a=this,s=this.createIterator(t,e,r),c=[],u=[],l=void 0,h=void 0;void 0,o=a.getIteratorNode(s),h=o.prevNode,l=o.node;)this.iframes&&this.forEachIframe(t,function(e){return a.checkIframeFilter(l,h,e,c)},function(t){a.createInstanceOnIframe(t).forEachNode(e,function(e){return u.push(e)},r)}),u.push(l);u.forEach(function(e){n(e)}),this.iframes&&this.handleOpenIframes(c,e,n,r),i()}},{key:"forEachNode",value:function(e,t,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},o=this.getContexts(),a=o.length;a||i(),o.forEach(function(o){var s=function(){r.iterateThroughNodes(e,o,t,n,function(){--a<=0&&i()})};r.iframes?r.waitForIframes(o,s):s()})}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var i=!1;return n.every(function(t){return!r.call(e,t)||(i=!0,!1)}),i}return!1}}]),e}(),o=function(){function e(n){t(this,e),this.opt=r({},{diacritics:!0,synonyms:{},accuracy:"partially",caseSensitive:!1,ignoreJoiners:!1,ignorePunctuation:[],wildcards:"disabled"},n)}return n(e,[{key:"create",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),new RegExp(e,"gm"+(this.opt.caseSensitive?"":"i"))}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var i in t)if(t.hasOwnProperty(i)){var o=t[i],a="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(i):this.escapeStr(i),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o);""!==a&&""!==s&&(e=e.replace(new RegExp("("+this.escapeStr(a)+"|"+this.escapeStr(s)+")","gm"+n),r+"("+this.processSynonyms(a)+"|"+this.processSynonyms(s)+")"+r))}return e}},{key:"processSynonyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,function(e){return"\\"===e.charAt(0)?"?":""})).replace(/(?:\\)*\*/g,function(e){return"\\"===e.charAt(0)?"*":""})}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"})}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"],r=[];return e.split("").forEach(function(i){n.every(function(n){if(-1!==n.indexOf(i)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0})}),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n=this.opt.accuracy,r="string"==typeof n?n:n.value,i="";switch(("string"==typeof n?[]:n.limiters).forEach(function(e){i+="|"+t.escapeStr(e)}),r){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿")))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach(function(e){t.opt.separateWordSearch?e.split(" ").forEach(function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)}):e.trim()&&-1===n.indexOf(e)&&n.push(e)}),{keywords:n.sort(function(e,t){return t.length-e.length}),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort(function(e,t){return e.start-t.start}).forEach(function(e){var i=t.callNoMatchOnInvalidRanges(e,r),o=i.start,a=i.end;i.valid&&(e.start=o,e.length=a-o,n.push(e),r=a)}),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,i=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?i=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:i}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,i=!0,o=n.length,a=t-o,s=parseInt(e.start,10)-a;return(r=(s=s>o?o:s)+parseInt(e.length,10))>o&&(r=o,this.log("End range automatically set to the max value of "+o)),s<0||r-s<0||s>o||r>o?(i=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(i=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:i}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})},function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},function(){e({value:n,nodes:r})})}},{key:"matchesExclude",value:function(e){return i.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",i=e.splitText(t),o=i.splitText(n-t),a=document.createElement(r);return a.setAttribute("data-markjs","true"),this.opt.className&&a.setAttribute("class",this.opt.className),a.textContent=i.textContent,i.parentNode.replaceChild(a,i),o}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,i){var o=this;e.nodes.every(function(a,s){var c=e.nodes[s+1];if(void 0===c||c.start>t){if(!r(a.node))return!1;var u=t-a.start,l=(n>a.end?a.end:n)-a.start,h=e.value.substr(0,a.start),f=e.value.substr(l+a.start);if(a.node=o.wrapRangeInTextNode(a.node,u,l),e.value=h+f,e.nodes.forEach(function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=l),e.nodes[n].end-=l)}),n-=l,i(a.node.previousSibling,a.start),!(n>a.end))return!1;t=a.end}return!0})}},{key:"wrapGroups",value:function(e,t,n,r){return r((e=this.wrapRangeInTextNode(e,t,t+n)).previousSibling),e}},{key:"separateGroups",value:function(e,t,n,r,i){for(var o=t.length,a=1;a-1&&r(t[a],e)&&(e=this.wrapGroups(e,s,t[a].length,i))}return e}},{key:"wrapMatches",value:function(e,t,n,r,i){var o=this,a=0===t?0:t+1;this.getTextNodes(function(t){t.nodes.forEach(function(t){t=t.node;for(var i=void 0;null!==(i=e.exec(t.textContent))&&""!==i[a];){if(o.opt.separateGroups)t=o.separateGroups(t,i,a,n,r);else{if(!n(i[a],t))continue;var s=i.index;if(0!==a)for(var c=1;c + + + + + KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    KOGRAL Documentation

    +

    Welcome to the KOGRAL documentation! This directory contains comprehensive documentation for KOGRAL (KOwledge GRAphs, Local-first), built with mdBook.

    +

    📚 Reading the Documentation

    +

    You have several options for reading the documentation:

    + +

    The best reading experience with navigation, search, and live reload:

    +
    # Serve documentation at http://localhost:3000
    +just docs::serve
    +
    +

    This will:

    +
      +
    • Build the mdBook
    • +
    • Start a local web server on port 3000
    • +
    • Open your browser automatically
    • +
    • Watch for changes and auto-reload
    • +
    +

    Option 2: Build Static HTML

    +

    Generate static HTML files you can browse offline:

    +
    # Build mdBook to docs/book/
    +just docs::build
    +
    +

    Then open docs/book/index.html in your browser.

    +

    Option 3: Read Markdown Files Directly

    +

    All documentation is written in Markdown and can be read directly:

    +
      +
    • Browse via GitHub/GitLab web interface
    • +
    • Use your editor's Markdown preview
    • +
    • Read from terminal with bat, glow, or similar tools
    • +
    +

    Navigation: See SUMMARY.md for the complete table of contents.

    +

    🛠️ Documentation Commands

    +

    We use just recipes for documentation tasks. All commands assume you're in the project root directory.

    +

    Build and Serve

    +
    # Serve documentation locally (recommended)
    +just docs::serve
    +
    +# Build static HTML
    +just docs::build
    +
    +# Watch and rebuild on file changes
    +just docs::watch
    +
    +

    Validation

    +
    # Test code examples in documentation
    +just docs::test
    +
    +# Check for broken links
    +just docs::check-links
    +
    +

    Cleanup

    +
    # Remove build artifacts
    +just docs::clean
    +
    +

    View All Documentation Commands

    +
    just docs::help
    +
    +

    📦 Installing mdBook

    +

    mdBook is required to build and serve the documentation.

    +

    Install via Cargo

    +
    cargo install mdbook
    +
    +

    Install Optional Tools

    +

    For enhanced functionality:

    +
    # Link checker (validates internal/external links)
    +cargo install mdbook-linkcheck
    +
    +# Mermaid diagram support
    +cargo install mdbook-mermaid
    +
    +# PlantUML diagram support
    +cargo install mdbook-plantuml
    +
    +

    Verify Installation

    +
    mdbook --version
    +# Should output: mdbook v0.4.x or later
    +
    +

    📖 Documentation Structure

    +

    The documentation is organized into the following sections:

    +

    1. KOGRAL Definition (kogral/)

    +
      +
    • What is KOGRAL and why it exists
    • +
    • Core concepts (nodes, edges, graphs)
    • +
    • Design philosophy
    • +
    +

    2. Guides (guides/)

    +
      +
    • Quick start (5 minutes)
    • +
    • Installation guide
    • +
    • Use cases with examples
    • +
    +

    3. Architecture (architecture/)

    +
      +
    • System overview with diagrams
    • +
    • Config-driven architecture
    • +
    • Graph model details
    • +
    • ADRs (Architectural Decision Records)
    • +
    +

    4. Setup (setup/)

    +
      +
    • Initial setup
    • +
    • Development environment
    • +
    • Production deployment
    • +
    • Testing environment
    • +
    • CI/CD integration
    • +
    +

    5. Configuration (config/)

    +
      +
    • Configuration overview
    • +
    • Nickel schema reference
    • +
    • Runtime configuration
    • +
    • Environment modes (dev/prod/test)
    • +
    +

    6. Storage (storage/)

    +
      +
    • Storage architecture (hybrid strategy)
    • +
    • Filesystem backend
    • +
    • SurrealDB backend
    • +
    • In-memory backend
    • +
    • Sync mechanism
    • +
    +

    7. AI & Embeddings (ai/)

    +
      +
    • Semantic search
    • +
    • Embedding providers
    • +
    • Provider comparison
    • +
    • Configuration examples
    • +
    +

    8. Templates (templates/)

    +
      +
    • Template system (Tera)
    • +
    • Document templates
    • +
    • Export templates
    • +
    • Custom templates
    • +
    +

    9. CLI Reference (cli/)

    +
      +
    • All kb-cli commands
    • +
    • Common workflows
    • +
    • Advanced usage
    • +
    • Troubleshooting
    • +
    +

    10. Apps & Integrations (apps/)

    +
      +
    • MCP quick guide (Claude Code)
    • +
    • Logseq integration
    • +
    • Vapora integration
    • +
    +

    11. API Reference (api/)

    +
      +
    • MCP tools specification
    • +
    • Storage trait
    • +
    • Embedding trait
    • +
    • REST API (future)
    • +
    +

    12. Contributing (contributing/)

    +
      +
    • Development setup
    • +
    • Code guidelines
    • +
    • Testing standards
    • +
    • Documentation guidelines
    • +
    +

    🎨 Visual Diagrams

    +

    The documentation includes SVG diagrams for visual understanding:

    + +

    These diagrams are embedded in relevant documentation pages and can be viewed standalone in a browser.

    +

    🔍 Searching the Documentation

    +

    When using just docs::serve, you get a built-in search feature:

    +
      +
    1. Click the search icon (🔍) in the top-left corner
    2. +
    3. Type your query
    4. +
    5. Press Enter to navigate results
    6. +
    +

    The search indexes all documentation content including:

    +
      +
    • Page titles
    • +
    • Headers
    • +
    • Body text
    • +
    • Code examples (optionally)
    • +
    +

    ✏️ Editing Documentation

    +

    File Format

    +

    All documentation is written in GitHub Flavored Markdown with mdBook extensions.

    +

    See contributing/documentation.md for detailed editing guidelines.

    +

    Adding a New Page

    +
      +
    1. Create the markdown file in the appropriate directory
    2. +
    3. Add it to SUMMARY.md for navigation
    4. +
    5. Build to verify: just docs::build
    6. +
    +

    Adding a New Section

    +
      +
    1. Create the directory
    2. +
    3. Add a README.md for the section landing page
    4. +
    5. Add section to SUMMARY.md
    6. +
    +

    🧪 Testing Documentation

    +

    Test Code Examples

    +
    just docs::test
    +
    +

    This runs all Rust code examples in the documentation to ensure they compile.

    + +
    just docs::check-links
    +
    +

    This validates all internal and external links.

    +

    📝 Documentation Standards

    +

    When contributing to documentation:

    +
      +
    1. Use clear, concise language - Write for developers and AI agents
    2. +
    3. Include code examples - Show, don't just tell
    4. +
    5. Add diagrams where helpful - Visual aids improve understanding
    6. +
    7. Link related concepts - Help readers discover related content
    8. +
    9. Test code examples - Ensure code compiles and works
    10. +
    11. Use consistent formatting - Follow existing page structure
    12. +
    13. Update SUMMARY.md - New pages must be in navigation
    14. +
    15. Run checks before committing:
    16. +
    +
    just docs::build
    +just docs::test
    +just docs::check-links
    +
    +

    💡 Tips

    +

    Live Reload While Writing

    +
    just docs::watch
    +
    +

    This watches for changes and rebuilds automatically. Open http://localhost:3000 in your browser to see updates in real-time.

    +

    Markdown Preview in Editor

    +

    Most editors have Markdown preview:

    +
      +
    • VS Code: Ctrl+Shift+V (Cmd+Shift+V on Mac)
    • +
    • IntelliJ/CLion: Preview pane (right side)
    • +
    • Vim/Neovim: Use plugins like markdown-preview.nvim
    • +
    +

    Quick Reference

    +
      +
    • SUMMARY.md - Table of contents (edit to add/remove pages)
    • +
    • book.toml - mdBook configuration
    • +
    • theme/ - Custom CSS/JS (if needed)
    • +
    • diagrams/ - SVG diagrams
    • +
    +

    🐛 Troubleshooting

    +

    mdbook command not found

    +
    # Install mdBook
    +cargo install mdbook
    +
    +# Verify installation
    +mdbook --version
    +
    +

    Port 3000 already in use

    +
    # Serve on different port
    +cd docs
    +mdbook serve --port 3001
    +
    + +
    # Check all links
    +just docs::check-links
    +
    +# Update internal links in affected files
    +# Then rebuild
    +just docs::build
    +
    +

    📚 Resources

    + +

    🤝 Contributing to Documentation

    +

    Documentation improvements are always welcome! To contribute:

    +
      +
    1. Fork the repository
    2. +
    3. Create a feature branch
    4. +
    5. Make your changes
    6. +
    7. Test with just docs::build and just docs::test
    8. +
    9. Submit a pull request
    10. +
    +

    See contributing/documentation.md for detailed guidelines.

    +
    +

    Happy documenting! 📖

    +

    If you have questions or need help, please open an issue or reach out to the maintainers.

    +

    What is KOGRAL?

    +

    KOGRAL (KOwledge GRAphs, Local-first) is a git-native knowledge graph system designed for developer teams to capture, connect, and query structured knowledge.

    +

    Purpose

    +

    KOGRAL solves the problem of knowledge fragmentation in software development:

    +
      +
    • 📝 Notes scattered across tools
    • +
    • 🤔 Decisions lost in chat histories
    • +
    • 📚 Guidelines buried in wikis
    • +
    • 🔄 Patterns rediscovered repeatedly
    • +
    • 🤖 AI agents lacking project context
    • +
    +

    Solution

    +

    KOGRAL provides a unified, queryable knowledge graph that:

    +
      +
    1. Captures knowledge in structured, git-friendly markdown
    2. +
    3. Connects concepts through typed relationships
    4. +
    5. Queries via text and semantic similarity
    6. +
    7. Integrates with AI tools (Claude Code via MCP)
    8. +
    9. Syncs across local (filesystem) and shared (SurrealDB) storage
    10. +
    +

    Core Philosophy

    +

    Config-Driven

    +

    Behavior defined in Nickel schemas, not hardcoded:

    +
    {
    +  graph = { name = "my-project" },
    +  storage = { primary = 'filesystem },
    +  embeddings = { provider = 'fastembed },
    +  templates = { templates_dir = "templates" },
    +}
    +
    +

    Every aspect configurable: storage, embeddings, templates, query behavior.

    +

    Git-Friendly

    +

    Knowledge stored as markdown files with YAML frontmatter:

    +
    ---
    +id: note-123
    +type: note
    +title: Error Handling Patterns
    +tags: [rust, error-handling]
    +---
    +
    +# Error Handling Patterns
    +
    +Use `thiserror` for custom error types...
    +
    +

    Changes tracked via git, reviewable in PRs, mergeable across branches.

    +

    AI-Native

    +

    Built for agent collaboration:

    +
      +
    • MCP Protocol: Native integration with Claude Code
    • +
    • Semantic Search: Find concepts, not just keywords
    • +
    • Auto-Linking: Suggest relationships based on content
    • +
    • Context Injection: Agents query relevant guidelines before coding
    • +
    +

    Key Concepts

    +

    Nodes

    +

    6 types of knowledge nodes:

    +
    + + + + + + +
    TypePurposeExample
    NoteGeneral observations"Rust ownership patterns"
    DecisionADRs (Architectural Decision Records)"Use SurrealDB for storage"
    GuidelineCode standards"Error handling with thiserror"
    PatternReusable solutions"Repository pattern for DB access"
    JournalDaily reflections"2026-01-17 progress notes"
    ExecutionAgent task records"Implemented auth module"
    +
    +

    Relationships

    +

    6 typed edges connecting nodes:

    +
    + + + + + + +
    RelationMeaningExample
    relates_toConceptual linkNote ↔ Note
    depends_onPrerequisitePattern → Guideline
    implementsConcrete realizationCode → Pattern
    extendsInheritanceProjectGuideline → BaseGuideline
    supersedesReplacementDecisionV2 → DecisionV1
    explainsDocumentationNote → Execution
    +
    +

    Multi-Graph Architecture

    +

    Local Graph (per project):

    +
      +
    • Stored in .kogral/ directory
    • +
    • Git-tracked for version control
    • +
    • Project-specific knowledge
    • +
    +

    Shared Graph (organization-wide):

    +
      +
    • Centralized guidelines and patterns
    • +
    • SurrealDB for scalability
    • +
    • Inherited by projects
    • +
    +

    Inheritance Resolution:

    +
    Shared Guidelines (priority: 50)
    +    ↓
    +Project Guidelines (priority: 100)
    +    ↓
    +Effective Guidelines (higher priority wins)
    +
    +

    Use Cases

    +

    For Developers

    +
      +
    • Capture decisions as you make them (ADRs)
    • +
    • Document patterns for future reference
    • +
    • Track daily progress in journal entries
    • +
    • Query past decisions before new implementations
    • +
    +

    For Teams

    +
      +
    • Share guidelines across projects
    • +
    • Standardize patterns organization-wide
    • +
    • Onboard new members with searchable knowledge
    • +
    • Review decisions in context with git history
    • +
    +

    For AI Agents

    +
      +
    • Query guidelines before generating code
    • +
    • Check past decisions for context
    • +
    • Document executions for audit trails
    • +
    • Suggest related patterns during implementation
    • +
    +

    Comparison with Other Tools

    +

    vs. Logseq

    +
    + + + + + + +
    FeatureKOGRALLogseq
    StorageGit-friendly markdown + DBLocal markdown
    AI IntegrationNative MCP protocolPlugin-based
    ConfigType-safe Nickel schemasJSON files
    Multi-BackendFilesystem + SurrealDBFilesystem only
    Semantic SearchMultiple AI providersLocal only
    Graph QueriesSurrealDB graph queriesBlock references
    +
    +

    Compatibility: KOGRAL can import/export Logseq graphs for visual editing.

    +

    vs. Obsidian

    +
    + + + + + +
    FeatureKOGRALObsidian
    Target AudienceDevelopers + AI agentsKnowledge workers
    FocusStructured knowledge graphFlexible note-taking
    ConfigurationConfig-driven (Nickel)Settings UI
    CLIFull CLI + MCP serverLimited CLI
    Version ControlGit-nativeGit plugin
    +
    +

    Use Case: KOGRAL for developer knowledge, Obsidian for personal notes.

    +

    vs. Notion/Confluence

    +
    + + + + + +
    FeatureKOGRALNotion/Confluence
    StorageLocal-firstCloud-only
    FormatPlain markdownProprietary
    AI AccessProgrammatic APIWeb scraping
    OfflineFull functionalityLimited
    PrivacySelf-hostedThird-party servers
    +
    +

    Advantage: KOGRAL keeps sensitive knowledge on-premises.

    +

    Architecture Overview

    +
    ┌─────────────────────────────────────────────────────┐
    +│                    kb-core                          │
    +│  (Rust library: graph, storage, config, query)     │
    +└──────────────┬─────────────┬────────────────────────┘
    +               │             │
    +     ┌─────────┴──────┐  ┌──┴─────────┐
    +     │                │  │            │
    +┌────▼─────┐  ┌──────▼──▼───┐  ┌─────▼─────┐
    +│  kb-cli  │  │   kb-mcp     │  │  NuShell  │
    +│ (13 cmds)│  │ (MCP server) │  │ (scripts) │
    +└──────────┘  └──────────────┘  └───────────┘
    +
    +

    Layers:

    +
      +
    1. kb-core: Core library (models, storage, query)
    2. +
    3. kb-cli: Command-line interface
    4. +
    5. kb-mcp: MCP server for AI integration
    6. +
    7. Scripts: NuShell automation (sync, backup, etc.)
    8. +
    +

    When to Use KOGRAL

    +

    Good fit:

    +
      +
    • Developer teams building software
    • +
    • Projects with architectural decisions
    • +
    • Organizations standardizing patterns
    • +
    • AI-assisted development workflows
    • +
    • Knowledge requiring version control
    • +
    +

    Not ideal for:

    +
      +
    • Personal journaling (use Obsidian)
    • +
    • Team wikis (use Notion)
    • +
    • Customer documentation (use mdBook)
    • +
    • Simple note-taking (use Logseq)
    • +
    +

    Next Steps

    + +
    +
    +

    "Knowledge is only valuable when it's accessible, connected, and queryable."

    +
    +

    Core Concepts

    +

    Understanding the fundamental concepts behind KOGRAL.

    +

    The Knowledge Graph

    +

    At its core, KOGRAL is a directed graph where:

    +
      +
    • Nodes = pieces of knowledge (notes, decisions, guidelines, patterns)
    • +
    • Edges = typed relationships between concepts
    • +
    +

    Node Types and Relationships

    +

    This graph structure enables:

    +
      +
    • Discovery: Find related concepts through traversal
    • +
    • Context: Understand how ideas connect
    • +
    • Evolution: Track how knowledge changes over time
    • +
    +

    Node Types

    +

    1. Note

    +

    Purpose: Capture general observations, learnings, and discoveries.

    +

    When to use:

    +
      +
    • Documenting a concept you learned
    • +
    • Recording implementation details
    • +
    • Capturing meeting notes
    • +
    • Quick knowledge capture
    • +
    +

    Example:

    +
    ---
    +type: note
    +title: Async Trait Patterns in Rust
    +tags: [rust, async, patterns]
    +---
    +
    +# Async Trait Patterns in Rust
    +
    +Using async traits with the async-trait crate...
    +
    +

    2. Decision (ADR)

    +

    Purpose: Record architectural decisions with full context.

    +

    When to use:

    +
      +
    • Choosing between alternatives (REST vs GraphQL)
    • +
    • Major technical decisions (database selection)
    • +
    • Trade-off analysis
    • +
    • Explaining "why" for future reference
    • +
    +

    Structure:

    +
      +
    • Context: Background and problem
    • +
    • Decision: What was chosen
    • +
    • Consequences: Positive and negative outcomes
    • +
    • Alternatives: What was considered but rejected
    • +
    +

    Example:

    +
    ---
    +type: decision
    +title: Use SurrealDB for Storage
    +status: accepted
    +---
    +
    +## Context
    +Need a graph database that supports our relationship model...
    +
    +## Decision
    +Adopt SurrealDB as the primary storage backend.
    +
    +## Consequences
    ++ Better graph query performance
    ++ Native relationship support
    +- Additional infrastructure dependency
    +- Team learning curve
    +
    +

    3. Guideline

    +

    Purpose: Define coding standards, best practices, and conventions.

    +

    When to use:

    +
      +
    • Code style rules
    • +
    • Architecture patterns to follow
    • +
    • Security requirements
    • +
    • Testing standards
    • +
    +

    Can be:

    +
      +
    • Shared: Organization-wide (in shared KOGRAL)
    • +
    • Project-specific: Overrides shared guidelines
    • +
    +

    Example:

    +
    ---
    +type: guideline
    +language: rust
    +category: error-handling
    +---
    +
    +# Rust Error Handling Guidelines
    +
    +1. Use `thiserror` for custom error types
    +2. Never use `unwrap()` in production code
    +3. Always propagate errors with `?`
    +
    +

    4. Pattern

    +

    Purpose: Document reusable solutions to common problems.

    +

    When to use:

    +
      +
    • Recurring implementation patterns
    • +
    • Tested solutions
    • +
    • Best practice implementations
    • +
    • Code templates
    • +
    +

    Structure:

    +
      +
    • Problem: What challenge does this solve?
    • +
    • Solution: The pattern/approach
    • +
    • Context: When to use/not use
    • +
    • Example: Working code
    • +
    +

    Example:

    +
    ---
    +type: pattern
    +title: Repository Pattern for Database Access
    +tags: [architecture, database, pattern]
    +---
    +
    +## Problem
    +Need consistent database access across modules.
    +
    +## Solution
    +Repository pattern with trait abstraction...
    +
    +## Example
    +\`\`\`rust
    +trait UserRepository {
    +    async fn find_by_id(&self, id: Uuid) -> Result<User>;
    +}
    +\`\`\`
    +
    +

    5. Journal

    +

    Purpose: Daily development log for tracking progress and reflections.

    +

    When to use:

    +
      +
    • End of day summaries
    • +
    • Daily standup notes
    • +
    • Progress tracking
    • +
    • Blocker documentation
    • +
    +

    Auto-linked: KOGRAL can auto-link journal entries to mentioned concepts.

    +

    Example:

    +
    ---
    +type: journal
    +date: 2026-01-17
    +---
    +
    +## Progress
    +- Implemented authentication module
    +- Fixed cache race condition
    +
    +## Blockers
    +- Need API versioning discussion
    +
    +## Learnings
    +- tokio::select! perfect for timeouts
    +
    +

    6. Execution

    +

    Purpose: Record AI agent execution results (from Vapora integration).

    +

    When to use:

    +
      +
    • Agent task completion
    • +
    • Execution metrics
    • +
    • Agent decision history
    • +
    • Audit trail
    • +
    +

    Example:

    +
    ---
    +type: execution
    +task_type: code_generation
    +agent: rust-expert
    +outcome: success
    +duration: 45s
    +---
    +
    +Generated authentication module following project guidelines.
    +
    +

    Relationship Types

    +

    1. relates_to

    +

    Meaning: General conceptual relationship.

    +

    Use: Connect related ideas without specific dependency.

    +

    Example:

    +
    [Note: Async Patterns] --relates_to--> [Note: Tokio Runtime]
    +
    +

    2. depends_on

    +

    Meaning: Prerequisite relationship. Source requires target to exist/be understood first.

    +

    Use: Learning paths, implementation order.

    +

    Example:

    +
    [Pattern: Advanced Error Handling] --depends_on--> [Guideline: Basic Errors]
    +
    +

    3. implements

    +

    Meaning: Concrete implementation of an abstract concept.

    +

    Use: Connect code to patterns/guidelines.

    +

    Example:

    +
    [Note: Auth Module Implementation] --implements--> [Pattern: Repository Pattern]
    +
    +

    4. extends

    +

    Meaning: Inheritance/extension relationship.

    +

    Use: Guideline overrides, pattern variations.

    +

    Example:

    +
    [Guideline: Project Error Handling] --extends--> [Guideline: Shared Error Handling]
    +
    +

    5. supersedes

    +

    Meaning: Replacement relationship. Source replaces target.

    +

    Use: Track evolution of decisions/patterns.

    +

    Example:

    +
    [Decision: Use GraphQL v2] --supersedes--> [Decision: Use REST]
    +
    +

    6. explains

    +

    Meaning: Documentation/clarification relationship.

    +

    Use: Connect notes to implementations, executions to rationale.

    +

    Example:

    +
    [Note: Why We Chose Rust] --explains--> [Decision: Adopt Rust]
    +
    +

    Multi-Graph Architecture

    +

    KB supports multiple knowledge graphs:

    +

    Local Graph (Project-Specific)

    +

    Location: .kogral/ in project directory

    +

    Purpose: Project-specific knowledge

    +
      +
    • Project decisions
    • +
    • Implementation notes
    • +
    • Local patterns
    • +
    • Daily journals
    • +
    +

    Storage: Filesystem (git-tracked)

    +

    Scope: Single project

    +

    Shared Graph (Organization-Wide)

    +

    Location: Configurable (e.g., ~/org/.kogral-shared)

    +

    Purpose: Shared organizational knowledge

    +
      +
    • Coding guidelines
    • +
    • Standard patterns
    • +
    • Architecture principles
    • +
    • Security policies
    • +
    +

    Storage: SurrealDB (centralized) or filesystem (synced)

    +

    Scope: All projects

    +

    Inheritance Model

    +
    Shared Guidelines (priority: 50)
    +        ↓ [inherited by]
    +Project Guidelines (priority: 100)
    +        ↓ [effective]
    +Combined Guidelines (higher priority wins)
    +
    +

    Example:

    +

    Shared guideline: "Use Result for errors" +Project override: "Use Result + log all errors with tracing" +Effective: Both rules apply, project adds requirement

    +

    Config-Driven Behavior

    +

    Everything is configurable via Nickel schemas:

    +
    {
    +  graph = { name = "my-project" },          # Graph metadata
    +  storage = { primary = 'filesystem },       # Where to store
    +  embeddings = { provider = 'fastembed },    # AI provider
    +  templates = { /* ... */ },                 # Document templates
    +  query = { similarity_threshold = 0.6 },    # Search behavior
    +}
    +
    +

    No hardcoding: Change behavior without code changes.

    + +

    Beyond keyword matching, KOGRAL uses embeddings to find concepts:

    +

    Keyword search: "Find 'error handling'"

    +
      +
    • Matches exact phrase "error handling"
    • +
    +

    Semantic search: "How to handle failures gracefully?"

    +
      +
    • Finds: error handling, exception patterns, Result types, panic recovery
    • +
    • Understands: "failures" = errors, "gracefully" = best practices
    • +
    +

    How it works:

    +
      +
    1. Text → Embedding (384 or 1536 dimensional vector)
    2. +
    3. Similarity search (cosine distance)
    4. +
    5. Return nodes above threshold (e.g., 0.6)
    6. +
    +

    Providers:

    +
      +
    • fastembed: Local, free, offline (384d)
    • +
    • OpenAI: Cloud, best quality (1536d)
    • +
    • Claude: Cloud, excellent (1024d)
    • +
    • Ollama: Self-hosted (768d)
    • +
    +

    Templates

    +

    Tera templates generate consistent documents:

    +
    ---
    +id: {{ id }}
    +type: {{ type }}
    +title: {{ title }}
    +tags: [{% for tag in tags %}"{{ tag }}"{% endfor %}]
    +---
    +
    +# {{ title }}
    +
    +{{ content }}
    +
    +

    Customizable: Override templates per project.

    +

    Export formats: Logseq, JSON, Markdown.

    +

    MCP Integration

    +

    Model Context Protocol connects KOGRAL to Claude Code:

    +
    Claude Code
    +    ↓ [JSON-RPC 2.0]
    +kb-mcp Server
    +    ↓ [Rust API]
    +kb-core Library
    +    ↓ [Storage]
    +Knowledge Graph
    +
    +

    Tools: kogral/search, kogral/add_note, kogral/get_guidelines, etc.

    +

    Resources: kogral://project/notes, kogral://shared/guidelines

    +

    Prompts: kogral/summarize_project, kogral/find_related

    +

    Git-Friendly Storage

    +

    Markdown + YAML frontmatter = git-tracked knowledge:

    +
    ---
    +id: note-123
    +type: note
    +title: My Note
    +---
    +
    +# Content here
    +
    +

    Benefits:

    +
      +
    • ✅ Diffs in PRs (reviewable changes)
    • +
    • ✅ Branches (experiment with knowledge)
    • +
    • ✅ Merges (combine knowledge from feature branches)
    • +
    • ✅ History (track evolution over time)
    • +
    • ✅ Blame (who added this knowledge?)
    • +
    +

    Logseq Content Blocks

    +

    KOGRAL provides full support for Logseq-style outliner blocks with rich metadata and structure.

    +

    What are Blocks?

    +

    Blocks are the fundamental unit of content in Logseq's outliner format:

    +
      +
    • Each bullet point is a block
    • +
    • Blocks can have children (nested blocks)
    • +
    • Blocks support tasks, tags, and custom properties
    • +
    • Blocks can reference other blocks or pages
    • +
    +

    Block Features

    +

    Task Status:

    +
    - TODO Implement authentication #high-priority
    +- DOING Write tests
    +- DONE Deploy to staging
    +- LATER Consider GraphQL API
    +- NOW Fix critical bug
    +- WAITING Code review from @alice
    +- CANCELLED Old approach
    +
    +

    Inline Tags:

    +
    - Learning Rust ownership #rust #learning #card
    +  - Prevents data races at compile time
    +  - Borrowing rules enforce safety
    +
    +

    Custom Properties:

    +
    - Research paper summary
    +  priority:: high
    +  reviewed:: 2026-01-17
    +  source:: https://example.com/paper.pdf
    +  - Key findings...
    +
    +

    Block and Page References:

    +
    - Meeting notes from [[2026-01-17]]
    +  - Discussed architecture ((block-ref-123))
    +  - Action items: [[Project Roadmap]]
    +
    +

    Hierarchical Structure:

    +
    - Parent block #top-level
    +  - Child block 1
    +    - Nested child
    +  - Child block 2
    +
    +

    Configuration

    +

    Blocks support is opt-in via configuration:

    +
    {
    +  blocks = {
    +    enabled = true,              # Enable blocks parsing
    +    parse_on_import = true,      # Auto-parse from Logseq imports
    +    serialize_on_export = true,  # Serialize to outliner format
    +    enable_mcp_tools = true,     # Enable block-related MCP tools
    +  },
    +}
    +
    +

    Use Cases

    +

    1. Task Management:

    +
    - TODO Weekly sprint planning #meeting
    +  - DONE Review last sprint
    +  - DOING Plan current sprint
    +  - TODO Assign tasks
    +
    +

    2. Flashcards (Spaced Repetition):

    +
    - What is Rust's ownership model? #card #rust
    +  - Ownership prevents data races at compile time
    +  - Each value has a single owner
    +  - When owner goes out of scope, value is dropped
    +
    +

    3. Knowledge Capture with Metadata:

    +
    - Tokio async runtime patterns #rust #async
    +  category:: architecture
    +  difficulty:: intermediate
    +  - Use tokio::select! for concurrent operations
    +  - spawn_blocking() for CPU-intensive work
    +
    +

    4. Linked Notes:

    +
    - Discussed [[ADR-001]] in architecture meeting
    +  - Decided on SurrealDB
    +  - See ((meeting-notes-block-id)) for details
    +
    +

    Block Queries (MCP Tools)

    +

    Query blocks across your knowledge base:

    +

    Find blocks by tag:

    +
    {
    +  "tool": "kogral/find_blocks",
    +  "arguments": { "tag": "card" }
    +}
    +
    +

    Find all TODOs:

    +
    {
    +  "tool": "kogral/find_todos",
    +  "arguments": { "limit": 20 }
    +}
    +
    +

    Find flashcards:

    +
    {
    +  "tool": "kogral/find_cards",
    +  "arguments": { "limit": 10 }
    +}
    +
    +

    Find blocks by property:

    +
    {
    +  "tool": "kogral/find_blocks",
    +  "arguments": {
    +    "property_key": "priority",
    +    "property_value": "high"
    +  }
    +}
    +
    +

    Architecture

    +

    Hybrid Model:

    +
      +
    • Content stored as markdown string (source of truth)
    • +
    • Blocks lazily parsed on first access
    • +
    • Cached block structure for fast queries
    • +
    • Bidirectional: markdown ↔ blocks
    • +
    +

    BlockParser:

    +
      +
    • Parse outliner markdown → Block structures
    • +
    • Serialize Block structures → outliner markdown
    • +
    • Preserve all metadata (tags, status, properties, references)
    • +
    • Round-trip fidelity for Logseq compatibility
    • +
    +

    Storage:

    +
      +
    • Filesystem: markdown with blocks inline
    • +
    • SurrealDB: dedicated block table with indexes
    • +
    • Indexes: tags, status, parent_id, full-text search
    • +
    +

    See Also:

    + +

    Key Principles

    +
      +
    1. Capture During Work: Don't wait, document as you go
    2. +
    3. Link as You Learn: Connect related concepts immediately
    4. +
    5. Query When Needed: AI-assisted discovery of relevant knowledge
    6. +
    7. Evolve Over Time: Update decisions, supersede patterns
    8. +
    9. Share Wisely: Shared guidelines, local specifics
    10. +
    +

    Next Steps

    + +

    Why KB?

    +

    Understanding the motivation behind the Knowledge Base system.

    +

    The Problem: Knowledge Fragmentation

    +

    Modern software development generates enormous amounts of knowledge:

    +

    📝 Notes: Implementation details, learnings, discoveries +🤔 Decisions: Why we chose X over Y +📚 Guidelines: How we write code, architecture patterns +🔄 Patterns: Reusable solutions we've discovered +💭 Discussions: Slack threads, meeting notes, PR comments +🐛 Bug Fixes: How we solved issues

    +

    But where does this knowledge live?

    +
      +
    • Meeting notes in Google Docs
    • +
    • Decisions buried in Slack threads
    • +
    • Guidelines in a wiki nobody updates
    • +
    • Patterns in someone's head
    • +
    • PR discussions lost in GitHub history
    • +
    • Bug solutions in closed Jira tickets
    • +
    +

    The result?

    +

    Rediscovering solutions to problems we've already solved +❌ Inconsistent practices because guidelines aren't accessible +❌ Slow onboarding as new developers lack context +❌ Lost context when team members leave +❌ Repeated mistakes because past lessons aren't preserved

    +

    The Solution: Unified, Queryable Knowledge Graph

    +

    Knowledge Base provides a single source of truth for project knowledge:

    +

    Capture once: Notes, decisions, guidelines, patterns +✅ Connect concepts: Typed relationships between ideas +✅ Query naturally: Text and semantic search +✅ AI-assisted: Claude Code integration via MCP +✅ Git-tracked: Version control for knowledge +✅ Shared wisdom: Organization-wide guidelines + project-specific

    +

    What Makes KB Different?

    +

    1. Git-Native

    +

    Other tools: Notion, Confluence, wikis in web apps

    +

    KB: Markdown files in .kogral/ directory

    +

    Benefits:

    +
    # Review knowledge changes in PRs
    +git diff .kogral/decisions/
    +
    +# Branch knowledge with code
    +git checkout feature-branch
    +# .kogral/ follows the branch
    +
    +# Merge knowledge from feature work
    +git merge feature-branch
    +# Knowledge merges like code
    +
    +

    Result: Knowledge versioned alongside code it describes.

    +

    2. AI-Native

    +

    Other tools: Manual search, browse folders

    +

    KB: AI queries via Claude Code

    +

    Example:

    +
    You: "Find anything about error handling"
    +
    +Claude: [Searches semantically, not just keywords]
    +Found 5 concepts:
    +- Pattern: Error Handling with thiserror
    +- Guideline: Result Type Best Practices
    +- Decision: Use anyhow for Application Errors
    +- Note: Custom Error Types
    +- Journal: Fixed error propagation bug
    +
    +[All related, even without exact keyword match]
    +
    +

    Result: Find concepts, not just documents with keywords.

    +

    3. Config-Driven

    +

    Other tools: Hardcoded behavior, limited customization

    +

    KB: Nickel schemas define everything

    +

    Example:

    +
    # Development: local embeddings, no costs
    +{ embeddings = { provider = 'fastembed } }
    +
    +# Production: cloud embeddings, best quality
    +{ embeddings = { provider = 'openai, model = "text-embedding-3-large" } }
    +
    +

    Result: Adapt behavior without code changes.

    +

    4. Multi-Graph

    +

    Other tools: One knowledge base per project

    +

    KB: Shared organizational knowledge + project-specific

    +

    Structure:

    +
    Organization Shared KB
    +  ├── Rust Guidelines (applies to all projects)
    +  ├── Security Patterns (applies to all projects)
    +  └── Testing Standards (applies to all projects)
    +
    +Project A KB
    +  ├── Inherits shared guidelines
    +  ├── Project-specific decisions
    +  └── Can override shared guidelines
    +
    +Project B KB
    +  ├── Inherits same shared guidelines
    +  ├── Different project decisions
    +  └── Different overrides
    +
    +

    Result: Consistency across organization, flexibility per project.

    +

    5. Structured Relationships

    +

    Other tools: Backlinks, tags, folders

    +

    KB: Typed relationships with meaning

    +

    Example:

    +
    Pattern: Repository Pattern
    +    ↑ [implements]
    +Note: User Service Implementation
    +    ↑ [relates_to]
    +Decision: Use PostgreSQL
    +    ↑ [depends_on]
    +Guideline: Database Access Patterns
    +
    +

    Result: Understand how knowledge connects, not just that it connects.

    +

    Real-World Impact

    +

    Before KB

    +

    New developer joins:

    +
      +
    1. Read outdated wiki (2 hours)
    2. +
    3. Ask teammates for context (1 hour per question × 10 questions)
    4. +
    5. Discover guidelines by reading code (days)
    6. +
    7. Miss important decisions (leads to mistakes)
    8. +
    +

    Time to productivity: 2-4 weeks

    +

    With KB

    +

    New developer joins:

    +
      +
    1. kb search "architectural decisions" → finds all ADRs
    2. +
    3. Ask Claude: "What are our coding guidelines?" → gets current guidelines with inheritance
    4. +
    5. Browse related notes via graph traversal
    6. +
    7. Full context available, no tribal knowledge
    8. +
    +

    Time to productivity: 3-5 days

    +

    Before KB

    +

    Team makes decision:

    +
      +
    1. Discussion in Slack (lost after a week)
    2. +
    3. Someone documents in wiki (maybe)
    4. +
    5. 6 months later: "Why did we choose X?" → nobody remembers
    6. +
    7. Re-debate the same decision
    8. +
    +

    With KB

    +

    Team makes decision:

    +
      +
    1. Discussion captured as ADR during meeting
    2. +
    3. Context, decision, consequences documented
    4. +
    5. Linked to related patterns and guidelines
    6. +
    7. 6 months later: kb show decision-use-x → full context instantly
    8. +
    +

    Before KB

    +

    Solving a bug:

    +
      +
    1. Encounter race condition in cache
    2. +
    3. Debug for 2 hours
    4. +
    5. Fix it
    6. +
    7. Solution lost in PR comments
    8. +
    +

    Two months later: Different developer, same bug, 2 more hours

    +

    With KB

    +

    Solving a bug:

    +
      +
    1. Encounter race condition
    2. +
    3. Ask Claude: "Have we seen cache race conditions before?"
    4. +
    5. Claude finds journal entry from 2 months ago with solution
    6. +
    7. Apply fix in 10 minutes
    8. +
    +

    Two months later: Same query, same instant solution

    +

    Who Benefits?

    +

    Individual Developers

    +

    Personal knowledge base: Capture learnings, build expertise +✅ Quick recall: "How did I solve this before?" +✅ Context switching: Return to old projects with full context +✅ Career growth: Document what you learn, portfolio of knowledge

    +

    Teams

    +

    Shared context: Everyone has access to team knowledge +✅ Onboarding: New members ramp up faster +✅ Consistency: Follow shared guidelines and patterns +✅ Collaboration: Build on each other's knowledge

    +

    Organizations

    +

    Institutional memory: Knowledge persists beyond individual tenure +✅ Best practices: Standardize across teams +✅ Compliance: Document security and architecture decisions +✅ Efficiency: Stop solving the same problems repeatedly

    +

    AI Agents

    +

    Context injection: Agents query guidelines before generating code +✅ Decision awareness: Agents check past decisions +✅ Pattern following: Agents use documented patterns +✅ Execution tracking: Agent actions documented automatically

    +

    When NOT to Use KB

    +

    KB is not ideal for:

    +

    Personal journaling: Use Obsidian or Logseq +❌ Team wikis: Use Notion or Confluence +❌ Customer docs: Use mdBook or Docusaurus +❌ Project management: Use Jira or Linear +❌ Code comments: Use inline documentation

    +

    KB is perfect for:

    +

    ✅ Developer knowledge graphs +✅ Architectural decision records +✅ Pattern libraries +✅ Coding guidelines +✅ Technical context +✅ AI-assisted development

    +

    The Vision

    +

    Today's development:

    +
    Developer → writes code → commits
    +
    +

    With KB:

    +
    Developer → writes code → documents decisions → links to patterns → commits code + knowledge
    +                    ↓
    +            AI Agent queries knowledge → generates better code
    +                    ↓
    +            Team discovers patterns → reuses solutions → faster development
    +
    +

    Knowledge becomes an active participant in development, not an afterthought.

    +

    Design Philosophy

    +

    Three core principles drive KB:

    +

    1. Knowledge should be captured during work, not after

    +

    ❌ "I'll document this later" → never happens +✅ "Claude, document this decision" → done in 30 seconds

    +

    2. Knowledge should be connected, not isolated

    +

    ❌ Standalone documents in folders +✅ Graph of interconnected concepts

    +

    3. Knowledge should be queryable, not browsable

    +

    ❌ "Let me look through 50 docs to find..." +✅ "Find anything related to error handling" → instant semantic results

    +

    Get Started

    +

    Ready to stop losing knowledge?

    + +
    +
    +

    "The best time to document was during implementation. The second best time is now."

    +
    +

    But with KB + AI, "now" is instant.

    +

    Design Philosophy

    +

    The principles and values guiding Knowledge Base design and implementation.

    +

    Core Tenets

    +

    1. Config-Driven, Not Hardcoded

    +

    Principle: All behavior should be configurable via schemas, not baked into code.

    +

    Why: Flexibility without code changes. Users adapt KB to their workflows, not vice versa.

    +

    Example:

    +
    #![allow(unused)]
    +fn main() {
    +// ❌ Bad: Hardcoded
    +impl EmbeddingProvider {
    +    fn new() -> Self {
    +        FastEmbedProvider::new("BAAI/bge-small-en-v1.5") // Can't change
    +    }
    +}
    +
    +// ✅ Good: Config-driven
    +impl EmbeddingProvider {
    +    fn from_config(config: &EmbeddingConfig) -> Result<Box<dyn EmbeddingProvider>> {
    +        match config.provider {
    +            'fastembed => Ok(Box::new(FastEmbedProvider::new(&config.model)?)),
    +            'openai => Ok(Box::new(OpenAIProvider::new(&config.model)?)),
    +        }
    +    }
    +}
    +}
    +

    Benefits:

    +
      +
    • Switch embedding providers without recompilation
    • +
    • Different configs for dev/prod
    • +
    • User choice, not developer mandate
    • +
    +

    2. Type-Safe Configuration

    +

    Principle: Validate configuration before runtime, not during.

    +

    Why: Catch errors early, reduce runtime failures.

    +

    Implementation: Nickel contracts + serde validation = double validation

    +
    # Schema defines valid values
    +EmbeddingProvider = [| 'openai, 'claude, 'fastembed |]
    +
    +# Typo caught at export time, not runtime
    +{ provider = 'opena1 }  # Error: Invalid variant
    +
    +

    Benefits:

    +
      +
    • Errors found during nickel export, not during execution
    • +
    • Self-documenting: schema is the spec
    • +
    • Refactoring safe: change schema, find all usages
    • +
    +

    3. Local-First, Cloud-Optional

    +

    Principle: Core functionality works offline, cloud is enhancement.

    +

    Why: Privacy, cost control, offline development.

    +

    Examples:

    +
    + + + +
    FeatureLocalCloud
    StorageFilesystemSurrealDB
    EmbeddingsfastembedOpenAI/Claude
    SearchText-basedSemantic
    +
    +

    Benefits:

    +
      +
    • Works on planes, trains, areas with poor internet
    • +
    • No API costs for small projects
    • +
    • Privacy-sensitive projects keep data local
    • +
    • Production can use cloud for scale
    • +
    +

    4. Git-Friendly by Default

    +

    Principle: Knowledge should version alongside code.

    +

    Why: Knowledge describes code, should evolve with it.

    +

    Implementation:

    +
      +
    • Markdown + YAML frontmatter (text-based, diffable)
    • +
    • One file per node (granular commits)
    • +
    • Wikilinks preserved (works in Logseq, Obsidian)
    • +
    +

    Benefits:

    +
    # Review knowledge changes in PRs
    +git diff .kogral/decisions/
    +
    +# Knowledge follows branches
    +git checkout feature-x
    +# .kogral/ reflects feature-x decisions
    +
    +# Knowledge merges
    +git merge feature-x
    +# Merge conflicts = knowledge conflicts (resolve intentionally)
    +
    +

    5. AI-Native, Human-Readable

    +

    Principle: Optimized for AI consumption, readable by humans.

    +

    Why: Best of both worlds - AI-assisted discovery, human verification.

    +

    Implementation:

    +
      +
    • Structured: YAML frontmatter for AI parsing
    • +
    • Semantic: Embeddings for AI queries
    • +
    • Readable: Markdown for human consumption
    • +
    • Linked: Typed relationships for AI traversal
    • +
    +

    Example:

    +
    ---
    +id: note-auth
    +type: note
    +title: Authentication Implementation
    +tags: [security, auth]
    +relates_to: [guideline-security, pattern-jwt]
    +---
    +
    +# Authentication Implementation
    +
    +Humans read this markdown normally.
    +
    +AI can:
    +- Parse frontmatter for metadata
    +- Extract tags for filtering
    +- Follow relates_to links
    +- Generate embeddings for semantic search
    +
    +

    6. Composition Over Inheritance

    +

    Principle: Build systems by composing small, focused components.

    +

    Why: Flexibility, testability, maintainability.

    +

    Implementation:

    +
    #![allow(unused)]
    +fn main() {
    +// Small, focused traits
    +trait Storage { ... }
    +trait EmbeddingProvider { ... }
    +trait TemplateEngine { ... }
    +
    +// Compose into systems
    +struct KnowledgeBase {
    +    storage: Box<dyn Storage>,
    +    embeddings: Option<Box<dyn EmbeddingProvider>>,
    +    templates: TemplateEngine,
    +}
    +}
    +

    Benefits:

    +
      +
    • Swap storage without affecting embeddings
    • +
    • Disable embeddings without breaking storage
    • +
    • Test components in isolation
    • +
    • Add new providers by implementing trait
    • +
    +

    7. Fail Fast, Fail Clearly

    +

    Principle: Detect errors early, provide clear messages.

    +

    Why: Developer experience - fast feedback, actionable errors.

    +

    Implementation:

    +
    #![allow(unused)]
    +fn main() {
    +// ❌ Bad: Silent failure
    +fn load_config(path: &Path) -> Option<Config> {
    +    std::fs::read_to_string(path)
    +        .ok()
    +        .and_then(|s| serde_json::from_str(&s).ok())
    +}
    +
    +// ✅ Good: Explicit errors
    +fn load_config(path: &Path) -> Result<Config, ConfigError> {
    +    let content = std::fs::read_to_string(path)
    +        .map_err(|e| ConfigError::ReadFailed(path.to_path_buf(), e))?;
    +
    +    serde_json::from_str(&content)
    +        .map_err(|e| ConfigError::ParseFailed(path.to_path_buf(), e))
    +}
    +}
    +

    Error messages:

    +
    ❌ "Failed to load config"
    +✅ "Failed to read config file '/path/to/config.ncl': Permission denied"
    +
    +

    8. Convention Over Configuration (With Escape Hatches)

    +

    Principle: Sane defaults, but everything customizable.

    +

    Why: Easy to start, flexible as you grow.

    +

    Examples:

    +
    # Minimal config (uses conventions)
    +{ graph = { name = "my-project" } }
    +# Defaults: filesystem storage, no embeddings, standard templates
    +
    +# Full config (explicit everything)
    +{
    +  graph = { name = "my-project" },
    +  storage = { primary = 'surrealdb, /* ... */ },
    +  embeddings = { provider = 'openai, /* ... */ },
    +  templates = { templates_dir = "custom" },
    +}
    +
    +

    Conventions:

    +
      +
    • .kogral/ directory in project root
    • +
    • Filesystem storage by default
    • +
    • YAML frontmatter + markdown body
    • +
    • Standard template names (note.md.tera, decision.md.tera)
    • +
    +

    Escape hatches:

    +
      +
    • --kb-dir to use different location
    • +
    • Configure alternative storage backends
    • +
    • Custom frontmatter schemas
    • +
    • Override any template
    • +
    +

    9. Documentation as Code

    +

    Principle: Documentation lives with code, versioned together.

    +

    Why: Outdated docs are worse than no docs.

    +

    Implementation:

    +
      +
    • ADRs in .kogral/decisions/ (alongside code)
    • +
    • Guidelines in .kogral/guidelines/ (versioned with code)
    • +
    • Patterns in .kogral/patterns/ (evolve with implementations)
    • +
    +

    Benefits:

    +
    # Code and docs branch together
    +git checkout old-version
    +# .kogral/ reflects that version's decisions
    +
    +# Code and docs merge together
    +git merge feature
    +# Merge includes new patterns, updated guidelines
    +
    +# Code and docs reviewed together
    +# PR shows code + decision + guideline updates
    +
    +

    10. Optimize for Discoverability

    +

    Principle: Knowledge is useless if you can't find it.

    +

    Why: The point is to use knowledge, not just store it.

    +

    Features:

    +
      +
    • Text search: Find exact keywords
    • +
    • Semantic search: Find related concepts
    • +
    • Graph traversal: Follow relationships
    • +
    • Tag filtering: Narrow by category
    • +
    • MCP integration: AI-assisted discovery
    • +
    +

    Example:

    +

    User doesn't remember exact term, but knows the concept:

    +
    "Find anything about handling errors gracefully"
    +
    +

    KB finds (semantically):

    +
      +
    • "Error Handling with thiserror" (pattern)
    • +
    • "Result Type Best Practices" (guideline)
    • +
    • "Panic Recovery" (note)
    • +
    • "Graceful Degradation" (pattern)
    • +
    +

    No exact keyword match needed, concept match sufficient.

    +

    11. Build for Humans, Enable AI

    +

    Principle: Humans are the primary users, AI is the assistant.

    +

    Why: AI should enhance human workflows, not replace them.

    +

    Implementation:

    +
      +
    • Human-readable formats: Markdown, YAML
    • +
    • Human-editable: Any text editor works
    • +
    • Human-discoverable: ls .kogral/notes/ shows files
    • +
    • AI-enhanced: MCP for AI-assisted queries
    • +
    +

    Example:

    +
    # Human workflow
    +vim .kogral/notes/my-note.md    # Edit directly
    +git add .kogral/notes/my-note.md
    +git commit -m "Add note about X"
    +
    +# AI-enhanced workflow
    +# (in Claude Code)
    +"Add a note about X with tags Y, Z"
    +# AI creates file, human reviews
    +
    +

    12. Embrace the Graph

    +

    Principle: Knowledge is interconnected, embrace the relationships.

    +

    Why: Context comes from connections, not isolation.

    +

    Implementation:

    +
      +
    • Typed relationships (not just "related")
    • +
    • Bidirectional traversal
    • +
    • Relationship strength (0.0-1.0)
    • +
    • Multi-hop queries
    • +
    +

    Example:

    +
    Find all patterns that:
    +  - Are implemented by current project
    +  - Depend on shared guidelines
    +  - Were added in the last 6 months
    +
    +# Graph query, not sequential file search
    +
    +

    Anti-Patterns to Avoid

    +

    1. ❌ Hardcoding Behavior

    +
    #![allow(unused)]
    +fn main() {
    +// Don't
    +const EMBEDDING_MODEL: &str = "BAAI/bge-small-en-v1.5";
    +
    +// Do
    +let model = config.embeddings.model.as_str();
    +}
    +

    2. ❌ Runtime Schema Validation

    +
    // Don't validate at runtime
    +let provider = config.provider; // Might be invalid
    +
    +// Do validate at export time (Nickel contracts)
    +provider | [| 'openai, 'claude, 'fastembed |]
    +
    +

    3. ❌ Opaque Errors

    +
    #![allow(unused)]
    +fn main() {
    +// Don't
    +Err("Failed".into())
    +
    +// Do
    +Err(KbError::NodeNotFound(id.to_string()))
    +}
    +

    4. ❌ Coupling Components

    +
    #![allow(unused)]
    +fn main() {
    +// Don't
    +impl KnowledgeBase {
    +    fn search(&self) -> Vec<Node> {
    +        let embeddings = FastEmbedProvider::new(); // Hardcoded!
    +        // ...
    +    }
    +}
    +
    +// Do
    +impl KnowledgeBase {
    +    fn search(&self) -> Vec<Node> {
    +        if let Some(provider) = &self.embeddings {
    +            // Use configured provider
    +        }
    +    }
    +}
    +}
    +

    5. ❌ Proprietary Formats

    +
    // Don't
    +Binary blob: [0x4B, 0x42, 0x01, ...]
    +
    +// Do
    +Markdown + YAML:
    +---
    +id: note-1
    +---
    +# Content
    +
    +

    Influences

    +

    KB draws inspiration from:

    +
      +
    • Logseq: Outliner, graph view, wikilinks
    • +
    • Obsidian: Markdown-first, local storage, plugins
    • +
    • Zettelkasten: Atomic notes, links, emergence
    • +
    • ADR: Decision records, context preservation
    • +
    • Git: Version control, branching, merging
    • +
    • Nickel: Type-safe configuration, contracts
    • +
    • MCP: AI integration protocol
    • +
    • SurrealDB: Graph database, relationships
    • +
    +

    Implementation Principles

    +

    Rust

    +
      +
    • Zero unsafe code (#![forbid(unsafe_code)])
    • +
    • No unwrap() in production code
    • +
    • Always use Result<T> for fallibility
    • +
    • Comprehensive error types with thiserror
    • +
    • Full test coverage (100+ tests)
    • +
    +

    Nickel

    +
      +
    • Contracts for validation
    • +
    • Defaults in schemas
    • +
    • Documentation in contracts
    • +
    • Composition via imports
    • +
    +

    NuShell

    +
      +
    • Structured data pipelines
    • +
    • Error handling in scripts
    • +
    • Colored output for UX
    • +
    • Dry-run modes
    • +
    +

    Evolution Strategy

    +

    KB follows these guidelines for evolution:

    +
      +
    1. Backward Compatibility: Don't break existing configs
    2. +
    3. Deprecation Period: Warn before removal (1 major version)
    4. +
    5. Migration Tools: Provide automated migrations
    6. +
    7. Semantic Versioning: MAJOR.MINOR.PATCH strictly
    8. +
    +

    Conclusion

    +

    These principles guide every decision:

    +

    Config-driven: Behavior in schemas, not code +✅ Type-safe: Validate before runtime +✅ Local-first: Works offline, cloud optional +✅ Git-friendly: Knowledge versions with code +✅ AI-native: Optimized for AI, readable by humans +✅ Composable: Small pieces, loosely coupled +✅ Fast feedback: Fail early, clear errors +✅ Discoverable: Easy to find what you need

    +

    The goal: Knowledge management that developers actually use.

    +

    Next Steps

    + +

    Installation

    +

    This guide covers installing and setting up the KOGRAL.

    +

    Prerequisites

    +

    Required

    +
      +
    • +

      Rust 1.70 or later

      +
      curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
      +
      +
    • +
    • +

      Nickel CLI for configuration management

      +
      cargo install nickel-lang-cli
      +
      +
    • +
    +

    Optional

    +
      +
    • +

      NuShell for maintenance scripts

      +
      cargo install nu
      +
      +
    • +
    • +

      SurrealDB for scalable storage backend

      +
      # macOS
      +brew install surrealdb/tap/surreal
      +
      +# Linux/Windows
      +curl -sSf https://install.surrealdb.com | sh
      +
      +
    • +
    +

    Installation Methods

    + +
    # Clone the repository
    +git clone <repository-url> knowledge-base
    +cd knowledge-base
    +
    +# Build the workspace
    +cargo build --release
    +
    +# Install CLI tool
    +cargo install --path crates/kb-cli
    +
    +# Verify installation
    +kb --version
    +
    +

    Method 2: Build Specific Crates

    +
    # Build only kb-core library
    +cargo build --package kb-core --release
    +
    +# Build only kb-cli
    +cargo build --package kb-cli --release
    +
    +# Build only kogral-mcp server
    +cargo build --package kb-mcp --release
    +
    +

    Method 3: Build with Features

    +
    # Build with all features (filesystem + SurrealDB + fastembed)
    +cargo build --workspace --all-features --release
    +
    +# Build with specific features
    +cargo build --package kb-core --features "surrealdb,fastembed" --release
    +
    +

    Feature Flags

    +

    kb-core supports optional features:

    +
    + + + + +
    FeatureDescriptionDefault
    filesystemFilesystem storage backend✅ Yes
    surrealdbSurrealDB storage backend❌ No
    fastembedLocal embedding generation❌ No
    fullAll features enabled❌ No
    +
    +

    Example usage:

    +
    # Enable SurrealDB backend
    +cargo build --features surrealdb
    +
    +# Enable all features
    +cargo build --features full
    +
    +

    Environment Setup

    +

    1. Initialize a Knowledge Base

    +
    # Navigate to your project
    +cd /path/to/your/project
    +
    +# Initialize .kb directory
    +kb init
    +
    +# Or initialize with custom name
    +kb init --name "My Project" --description "Project knowledge base"
    +
    +

    This creates:

    +
    your-project/
    +└── .kogral/
    +    ├── config.toml
    +    ├── notes/
    +    ├── decisions/
    +    ├── guidelines/
    +    ├── patterns/
    +    └── journal/
    +
    +

    2. Configure Nickel Schemas (Optional)

    +

    If you want advanced configuration:

    +
    # Copy default config
    +cp /path/to/knowledge-base/config/defaults.ncl .kogral/config.ncl
    +
    +# Edit configuration
    +$EDITOR .kogral/config.ncl
    +
    +# Export to TOML (for kb-cli compatibility)
    +nickel export --format json .kogral/config.ncl | kb config import
    +
    +

    3. Set Up Shared Knowledge Base (Optional)

    +

    For shared guidelines and patterns across projects:

    +
    # Create shared KB location
    +mkdir -p ~/Tools/.kogral-shared
    +cd ~/Tools/.kogral-shared
    +
    +# Initialize shared KB
    +kb init --name "Shared Knowledge" --description "Cross-project guidelines"
    +
    +# Configure inheritance in project
    +kb config set inheritance.base ~/Tools/.kogral-shared
    +
    +

    Verify Installation

    +

    Test CLI

    +
    # Check version
    +kb --version
    +
    +# Show help
    +kb --help
    +
    +# Test initialization (dry-run)
    +kb init --dry-run
    +
    +

    Test MCP Server

    +
    # Start MCP server in test mode
    +kb serve --transport stdio
    +
    +# In another terminal, test with echo
    +echo '{"jsonrpc":"2.0","id":1,"method":"kogral/search","params":{"query":"test"}}' | kb serve
    +
    +

    Run Tests

    +
    # Run all tests
    +cargo test --workspace
    +
    +# Run integration tests
    +cargo test --package kb-core --test '*'
    +
    +# Run with all features
    +cargo test --workspace --all-features
    +
    +

    SurrealDB Setup (Optional)

    +

    If using SurrealDB backend:

    +

    Start SurrealDB Server

    +
    # Start server
    +surreal start --log trace --user root --pass root file://data.db
    +
    +# Or use memory backend for testing
    +surreal start --log trace --user root --pass root memory
    +
    +

    Configure kb-core

    +

    Edit .kogral/config.ncl:

    +
    {
    +  storage = {
    +    primary = 'filesystem,
    +    secondary = {
    +      enabled = true,
    +      type = 'surrealdb,
    +      url = "ws://localhost:8000",
    +      namespace = "kb",
    +      database = "default",
    +      username = "root",
    +      password = "root",
    +    },
    +  },
    +}
    +
    +

    Initialize Schema

    +
    # Run migration script
    +nu scripts/kb-migrate.nu --target latest
    +
    +# Or manually import schema
    +surreal import --conn ws://localhost:8000 --user root --pass root --ns kb --db default schema.surql
    +
    +

    Embedding Provider Setup (Optional)

    +

    Local fastembed

    +
    # Build with fastembed feature
    +cargo build --package kb-core --features fastembed
    +
    +# Models will be downloaded on first use
    +
    +

    API Providers (OpenAI, Claude, Ollama)

    +

    Set environment variables:

    +
    # OpenAI
    +export OPENAI_API_KEY="sk-..."
    +
    +# Claude (Anthropic)
    +export ANTHROPIC_API_KEY="sk-ant-..."
    +
    +# Ollama (local)
    +export OLLAMA_API_BASE="http://localhost:11434"
    +
    +

    Configure provider in .kogral/config.ncl:

    +
    {
    +  embeddings = {
    +    enabled = true,
    +    provider = 'openai,  # or 'claude, 'ollama, 'fastembed
    +    model = "text-embedding-3-small",
    +    api_key_env = "OPENAI_API_KEY",
    +  },
    +}
    +
    +

    Claude Code Integration

    +

    To use kb-mcp with Claude Code:

    +

    1. Build MCP Server

    +
    cargo build --package kb-mcp --release
    +
    +

    2. Configure Claude Code

    +

    Add to ~/.config/claude/config.json:

    +
    {
    +  "mcpServers": {
    +    "kogral-mcp": {
    +      "command": "/path/to/knowledge-base/target/release/kb-mcp",
    +      "args": ["serve"],
    +      "env": {}
    +    }
    +  }
    +}
    +
    +

    3. Test Connection

    +

    Start Claude Code and verify:

    +
    > kb/search "test"
    +
    +

    Troubleshooting

    +

    Nickel Not Found

    +
    # Verify nickel is installed
    +nickel --version
    +
    +# If not, install
    +cargo install nickel-lang-cli
    +
    +# Add cargo bin to PATH
    +export PATH="$HOME/.cargo/bin:$PATH"
    +
    +

    Compilation Errors

    +
    # Update Rust
    +rustup update stable
    +
    +# Clean and rebuild
    +cargo clean
    +cargo build --workspace
    +
    +

    SurrealDB Connection Failed

    +
    # Check SurrealDB is running
    +curl http://localhost:8000/health
    +
    +# Start SurrealDB with correct settings
    +surreal start --bind 0.0.0.0:8000 --user root --pass root memory
    +
    +

    MCP Server Not Responding

    +
    # Test stdio communication
    +echo '{"jsonrpc":"2.0","id":1,"method":"ping"}' | kb serve
    +
    +# Check logs
    +kb serve --log-level debug
    +
    +

    Next Steps

    + +

    Uninstallation

    +
    # Remove installed binary
    +cargo uninstall kb-cli
    +
    +# Remove project knowledge base
    +rm -rf /path/to/project/.kogral
    +
    +# Remove shared knowledge base
    +rm -rf ~/Tools/.kogral-shared
    +
    +

    Quick Start Guide

    +

    Get up and running with the KOGRAL in 5 minutes.

    +

    Prerequisites

    +
      +
    • Rust 1.70+ installed
    • +
    • Nickel CLI installed (cargo install nickel-lang-cli)
    • +
    • kb-cli installed (see Installation)
    • +
    +

    Step 1: Initialize Your Knowledge Base

    +

    Navigate to your project directory and initialize:

    +
    cd /path/to/your/project
    +kb init
    +
    +

    This creates a .kogral/ directory with the following structure:

    +
    .kogral/
    +├── config.toml       # Configuration
    +├── notes/            # General notes
    +├── decisions/        # Architectural decisions
    +├── guidelines/       # Project guidelines
    +├── patterns/         # Reusable patterns
    +└── journal/          # Daily journal entries
    +
    +

    Step 2: Create Your First Note

    +

    Add a note to your knowledge base:

    +
    kb add note "Getting Started with Rust" \
    +  --tags rust,programming,learning \
    +  --content "Key concepts for learning Rust effectively."
    +
    +

    Or create interactively:

    +
    kb add note
    +# Follow the prompts to enter title, tags, and content
    +
    +

    Step 3: Create a Decision Record

    +

    Document an architectural decision:

    +
    kb add decision "Use SurrealDB for Storage" \
    +  --context "Need scalable storage for knowledge graph" \
    +  --decision "Adopt SurrealDB for its graph capabilities" \
    +  --consequence "Better query performance" \
    +  --consequence "Additional infrastructure dependency"
    +
    + +

    Create relationships between nodes:

    +
    # Find node IDs
    +kb list
    +
    +# Create a relationship
    +kb link <note-id> <decision-id> relates_to
    +
    +

    Available relationship types:

    +
      +
    • relates_to - General conceptual link
    • +
    • depends_on - Dependency relationship
    • +
    • implements - Implementation of a concept
    • +
    • extends - Inheritance/extension
    • +
    • supersedes - Replaces older version
    • +
    • explains - Documentation/clarification
    • +
    +

    Step 5: Search Your Knowledge Base

    +

    Search by text:

    +
    # Simple search
    +kb search "rust"
    +
    +# Filter by type
    +kb search "architecture" --type decision
    +
    +# Limit results
    +kb search "error handling" --limit 5
    +
    +

    Search semantically (requires embeddings):

    +
    # Semantic search finds conceptually related content
    +kb search "memory safety" --semantic --threshold 0.7
    +
    +

    Step 6: View Node Details

    +
    # Show node by ID
    +kb show <node-id>
    +
    +# Show node with relationships
    +kb show <node-id> --with-relationships
    +
    +

    Step 7: Edit Documents Directly

    +

    All knowledge base documents are markdown files you can edit:

    +
    # Open in your editor
    +$EDITOR .kogral/notes/getting-started-with-rust.md
    +
    +# Or use your favorite markdown editor
    +code .kogral/notes/
    +
    +

    Document format:

    +
    ---
    +id: unique-id
    +type: note
    +title: Getting Started with Rust
    +created: 2026-01-17T10:30:00Z
    +modified: 2026-01-17T10:30:00Z
    +tags: [rust, programming, learning]
    +status: active
    +---
    +
    +# Getting Started with Rust
    +
    +Content goes here with [[wikilinks]] to other nodes.
    +
    +## Key Concepts
    +
    +- Ownership
    +- Borrowing
    +- Lifetimes
    +
    +

    Step 8: Create a Daily Journal Entry

    +

    Start journaling your development progress:

    +
    kb add journal "Today's Progress" \
    +  --content "Learned about trait objects and dynamic dispatch in Rust."
    +
    +

    Or open today's journal directly:

    +
    $EDITOR .kogral/journal/$(date +%Y-%m-%d).md
    +
    +

    Step 9: Export to Logseq (Optional)

    +

    If you use Logseq, export your knowledge base:

    +
    nu scripts/kb-export-logseq.nu /path/to/logseq-graph
    +
    +

    This creates a Logseq-compatible graph you can open in Logseq for visual editing.

    +

    Step 10: Start MCP Server for Claude Code

    +

    Integrate with Claude Code for AI-assisted knowledge management:

    +
    # Start MCP server
    +kb serve
    +
    +# Configure in ~/.config/claude/config.json
    +# Then use in Claude Code:
    +# > kb/search "rust ownership"
    +
    +

    Common Workflows

    +

    Capture Quick Notes

    +
    # Quick note
    +kb add note "Remember to check error handling in parser module" --tags todo,parser
    +
    +

    Document Architectural Decisions

    +
    # Create ADR
    +kb add decision "Adopt Async Rust for I/O Operations" \
    +  --status accepted \
    +  --tags architecture,async
    +
    +

    Build a Pattern Library

    +
    # Add a pattern
    +kb add pattern "Error Handling with thiserror" \
    +  --tags rust,error-handling \
    +  --content "Standard pattern for error types in this project."
    +
    +

    Track Daily Progress

    +
    # Add journal entry
    +kb add journal --content "Implemented search functionality. Need to add semantic search next."
    +
    +

    Next Steps

    +

    Customize Configuration

    +

    Edit .kogral/config.ncl for advanced configuration:

    +
    {
    +  graph = {
    +    name = "My Project",
    +    version = "1.0.0",
    +  },
    +
    +  embeddings = {
    +    enabled = true,
    +    provider = 'fastembed,
    +  },
    +
    +  templates = {
    +    templates_dir = "templates",
    +  },
    +}
    +
    +

    See Configuration Reference for all options.

    +

    Set Up Shared Guidelines

    +

    Create a shared knowledge base for organization-wide standards:

    +
    # Create shared KB
    +mkdir -p ~/Tools/.kogral-shared
    +cd ~/Tools/.kogral-shared
    +kb init --name "Shared Guidelines"
    +
    +# Add guidelines
    +kb add guideline "Rust Error Handling" \
    +  --language rust \
    +  --category error-handling
    +
    +# Configure inheritance in projects
    +kb config set inheritance.base ~/Tools/.kogral-shared
    +
    +

    Automate with NuShell Scripts

    +
    # Backup regularly
    +nu scripts/kb-backup.nu --compress
    +
    +# Sync with SurrealDB
    +nu scripts/kb-sync.nu --direction bidirectional
    +
    +# Generate statistics
    +nu scripts/kb-stats.nu --show-tags
    +
    +

    Integrate with Git

    +
    # Add to version control
    +git add .kogral/
    +git commit -m "docs: Add knowledge base"
    +
    +# Add to .gitignore (optional: exclude certain types)
    +echo ".kogral/journal/" >> .gitignore
    +
    +

    Tips and Tricks

    + +

    Link to other nodes naturally in markdown:

    +
    See [[getting-started-with-rust]] for basics.
    +Related decision: [[use-surrealdb-for-storage]].
    +
    +

    Reference Code

    +

    Link to specific code locations:

    +
    Error handling implementation: @src/parser.rs:42
    +
    +

    Tag Consistently

    +

    Use consistent tagging for better searchability:

    +
    # Good tagging
    +--tags rust,error-handling,pattern
    +
    +# Avoid
    +--tags Rust,ErrorHandling,patterns
    +
    +

    Leverage Templates

    +

    Customize templates for your workflow:

    +
    # Copy template
    +cp templates/note.md.tera templates/meeting-notes.md.tera
    +
    +# Edit for meeting notes format
    +$EDITOR templates/meeting-notes.md.tera
    +
    +

    Troubleshooting

    +

    "KB directory not found"

    +
    # Make sure you initialized
    +kb init
    +
    +# Or specify KB directory
    +kb --kb-dir /path/to/.kb search "query"
    +
    +

    "Node not found"

    +
    # List all nodes to find ID
    +kb list
    +
    +# Search for node
    +kb search "partial title"
    +
    +

    "Failed to parse frontmatter"

    +

    Check your markdown file has valid YAML frontmatter:

    +
    ---
    +id: my-note
    +type: note
    +title: My Note
    +---
    +
    +

    Further Reading

    + +

    Getting Help

    +
      +
    • Check kb --help for command usage
    • +
    • Read inline help: kb add --help
    • +
    • Report issues on GitHub
    • +
    • Join community discussions
    • +
    +
    +

    Congratulations! You've created your first knowledge base. Start capturing knowledge and building connections.

    +

    Daily Workflows

    +

    Use Cases

    +

    Real-world scenarios showing how KOGRAL solves common development challenges.

    +

    Use Case 1: Onboarding New Team Members

    +

    Problem

    +

    New developer joins the team. Needs to understand:

    +
      +
    • Why we chose SurrealDB over PostgreSQL
    • +
    • How error handling works in this project
    • +
    • What coding patterns we follow
    • +
    • Recent architectural decisions
    • +
    +

    Solution with KOGRAL

    +

    Team lead:

    +
    # Export project knowledge to Logseq for visual exploration
    +kb export logseq ~/onboarding-docs
    +
    +

    New developer (with Claude Code):

    +
    Summarize our architectural decisions from the last 6 months
    +
    +

    Claude (via MCP):

    +
    Found 8 decisions:
    +
    +1. **Use SurrealDB for Storage** (accepted, 3 months ago)
    +   - Context: Need graph database for knowledge relationships
    +   - Consequences: Better queries, additional infrastructure
    +
    +2. **Adopt Rust for Core Logic** (accepted, 5 months ago)
    +   - Context: Type safety and performance critical
    +   - Consequences: Steeper learning curve, excellent reliability
    +
    +... [6 more decisions]
    +
    +

    New developer:

    +
    What are our error handling guidelines?
    +
    +

    Claude (via kb/get_guidelines):

    +
    ## Rust Error Handling Guidelines
    +
    +### Project Guidelines (priority: 150)
    +- Use thiserror for custom error types
    +- Never unwrap() in production
    +- Propagate with ? operator
    +
    +### Shared Guidelines (priority: 50)
    +- Always use Result<T> for fallible operations
    +- Add context with .context()
    +
    +[Links to full guideline documents]
    +
    +

    Result: New developer productive in days, not weeks.

    +
    +

    Use Case 2: Architectural Decision Records (ADR)

    +

    Problem

    +

    Team discussing whether to add Redis caching. Multiple opinions, need to document the decision for future reference.

    +

    Solution with KOGRAL

    +

    During meeting:

    +
    Document decision: Add Redis caching for API responses
    +
    +Context:
    +- Current database queries average 200ms
    +- 80% of queries are repeated within 5 minutes
    +- Need sub-50ms response times for user experience
    +
    +Decision:
    +- Add Redis with 5-minute TTL for GET endpoints
    +- Cache invalidation on POST/PUT/DELETE
    +
    +Consequences:
    +- ✅ Expected 80% reduction in database load
    +- ✅ Sub-50ms response times achieved
    +- ❌ Additional infrastructure (Redis server)
    +- ❌ Cache consistency challenges
    +- ❌ Debugging complexity increases
    +
    +Status: proposed (pending infrastructure setup)
    +
    +

    Claude (creates ADR):

    +
    Created: decision-add-redis-caching
    +Type: decision
    +Status: proposed
    +
    +Added relationships:
    +  - Relates to: note-performance-requirements
    +  - Depends on: decision-use-docker-compose (infrastructure)
    +
    +Decision documented and linked to related knowledge.
    +
    +

    Two months later, someone asks "Why Redis?":

    +
    kb show decision-add-redis-caching
    +
    +

    Full context available instantly.

    +
    +

    Use Case 3: Pattern Library

    +

    Problem

    +

    Team solves the same problems repeatedly:

    +
      +
    • How to structure error types
    • +
    • Database connection patterns
    • +
    • Testing strategies
    • +
    +

    Each developer rediscovers solutions.

    +

    Solution with KOGRAL

    +

    First time solving error handling:

    +
    kb add pattern "Error Handling with thiserror" \
    +  --tags rust,error-handling,pattern \
    +  --content "$(cat docs/error-pattern.md)"
    +
    +

    Next time someone needs error handling:

    +
    I'm implementing a new module with errors. What's our standard pattern?
    +
    +

    Claude (via kogral/search):

    +
    Found pattern: Error Handling with thiserror
    +
    +## Pattern: Error Handling with thiserror
    +
    +### Problem
    +Need structured, type-safe error handling with good error messages.
    +
    +### Solution
    +```rust
    +use thiserror::Error;
    +
    +#[derive(Error, Debug)]
    +pub enum ModuleError {
    +    #[error("Database connection failed: {0}")]
    +    Database(#[from] sqlx::Error),
    +
    +    #[error("Validation failed: {0}")]
    +    Validation(String),
    +}
    +
    +

    Usage

    +
    #![allow(unused)]
    +fn main() {
    +fn do_work() -> Result<(), ModuleError> {
    +    let conn = connect_db()?; // Auto-converts via #[from]
    +    validate_input()?;
    +    Ok(())
    +}
    +}
    +

    [Full pattern with examples]

    +

    Would you like me to create a new error module following this pattern?

    +
    
    +**Result**: Consistent error handling across codebase, zero time wasted rediscovering patterns.
    +
    +---
    +
    +## Use Case 4: Daily Development Journal
    +
    +### Problem
    +
    +Developer wants to track:
    +- What they worked on each day
    +- Blockers encountered
    +- Solutions discovered
    +- Ideas for future work
    +
    +### Solution with KOGRAL
    +
    +**End of each day**:
    +
    +```bash
    +kb add journal "2026-01-17" --content "
    +## Progress
    +- Implemented user authentication
    +- Fixed race condition in cache layer
    +- Started work on API rate limiting
    +
    +## Blockers
    +- SurrealDB migration tool not working with nested objects
    +- Need to discuss API versioning strategy with team
    +
    +## Learnings
    +- tokio::select! is perfect for timeout patterns
    +- serde_json::Value useful for dynamic JSON handling
    +
    +## Tomorrow
    +- Finish rate limiting implementation
    +- Review PR #234
    +- Team meeting: discuss API versioning
    +"
    +
    +

    With Claude Code (even easier):

    +
    End of day journal:
    +
    +Implemented authentication, fixed cache race condition, started rate limiting.
    +Blocked on SurrealDB migrations and need API versioning discussion.
    +Learned about tokio::select! for timeouts.
    +Tomorrow: finish rate limiting, review PR #234, versioning meeting.
    +
    +

    Claude (creates journal entry):

    +
    Created journal entry: 2026-01-17
    +
    +Tags auto-detected: authentication, cache, rate-limiting, surrealdb
    +
    +Linked to:
    +  - pattern-timeout-handling (implements)
    +  - decision-use-surrealdb (relates_to)
    +
    +Journal entry saved.
    +
    +

    Two weeks later (forgot how you solved that race condition):

    +
    How did I fix the cache race condition?
    +
    +

    Claude (semantic search):

    +
    From your journal entry on 2026-01-17:
    +
    +"Fixed race condition in cache layer by using DashMap instead of
    +RwLock<HashMap>. DashMap provides lock-free concurrent access."
    +
    +[Link to full journal entry]
    +
    +

    Result: Development history preserved, solutions easy to recall.

    +
    +

    Use Case 5: Code Review Preparation

    +

    Problem

    +

    Preparing for code review. Need to:

    +
      +
    • Document why certain decisions were made
    • +
    • Link implementation to requirements
    • +
    • Explain trade-offs to reviewers
    • +
    +

    Solution with KOGRAL

    +

    Before creating PR:

    +
    I just implemented the caching layer.
    +Add a note documenting the implementation and link it to our caching decision.
    +
    +

    Claude (via kb/add_note + kb/link):

    +
    Created note: note-caching-layer-implementation
    +
    +Content:
    +# Caching Layer Implementation
    +
    +## Approach
    +- Redis with 5-minute TTL
    +- Cache-aside pattern
    +- Invalidation on mutations
    +
    +## Trade-offs
    +- Chose simplicity over advanced features (no LRU eviction)
    +- 5-minute TTL balances freshness vs cache hit rate
    +- Cache-aside pattern chosen over write-through (simpler)
    +
    +## Testing
    +- Unit tests for cache logic
    +- Integration tests with real Redis
    +- Load test: 1000 req/s sustained
    +
    +Links:
    +  - Implements: decision-add-redis-caching
    +  - Follows: pattern-cache-aside
    +  - Tests: guideline-integration-testing
    +
    +Note added and linked to decision-add-redis-caching.
    +
    +

    In PR description:

    +
    ## Implementation
    +
    +Implements caching layer per decision-add-redis-caching.
    +
    +See note-caching-layer-implementation for detailed rationale.
    +
    +## Trade-offs
    +
    +[Copy from note]
    +
    +

    Reviewers:

    +
    kb show decision-add-redis-caching
    +kb show note-caching-layer-implementation
    +
    +

    Full context available, review focuses on code quality not "why this approach?"

    +
    +

    Use Case 6: Cross-Project Guidelines

    +

    Problem

    +

    Organization has 10 projects. Each should follow:

    +
      +
    • Same Rust error handling patterns
    • +
    • Same security guidelines
    • +
    • Same testing standards
    • +
    +

    Currently: duplicated wikis, inconsistent practices.

    +

    Solution with KOGRAL

    +

    Setup shared KOGRAL:

    +
    # Create organization-wide shared KB
    +mkdir -p ~/org/.kogral-shared
    +cd ~/org/.kogral-shared
    +kb init --name "Organization Guidelines"
    +
    +# Add shared guidelines
    +kb add guideline "Rust Error Handling" \
    +  --language rust \
    +  --category error-handling \
    +  --content "$(cat org-rust-errors.md)"
    +
    +kb add guideline "Security Best Practices" \
    +  --category security \
    +  --content "$(cat org-security.md)"
    +
    +

    In each project:

    +
    # project/.kogral/config.ncl
    +{
    +  inheritance = {
    +    base = "~/org/.kogral-shared",
    +    priority = 100,  # Project overrides shared
    +  },
    +}
    +
    +

    Developer in Project A:

    +
    What are our error handling guidelines?
    +
    +

    Claude (via kb/get_guidelines with inheritance):

    +
    ## Rust Error Handling Guidelines
    +
    +### Shared Guidelines (priority: 50)
    +From ~/org/.kogral-shared:
    +- Use thiserror for custom errors
    +- Never unwrap() in production
    +- Always propagate with ?
    +
    +### Project Guidelines (priority: 100)
    +From project .kogral/:
    +- Additionally: log all errors with tracing
    +- Use anyhow for application-level errors
    +
    +[Combined effective guidelines]
    +
    +

    Result:

    +
      +
    • Consistent practices across organization
    • +
    • Projects can specialize where needed
    • +
    • Single source of truth for shared knowledge
    • +
    +
    +

    Use Case 7: Bug Investigation

    +

    Problem

    +

    Bug in production. Developer needs to:

    +
      +
    • Understand relevant decisions
    • +
    • Find related code patterns
    • +
    • Check if similar issues were solved before
    • +
    +

    Solution with KOGRAL

    +

    Developer:

    +
    We have a race condition in the cache layer.
    +What past decisions or patterns might be relevant?
    +
    +

    Claude (semantic search):

    +
    Found 4 relevant items:
    +
    +1. **Decision: Use DashMap for Concurrent Access** (accepted, 1 month ago)
    +   "Chose DashMap over RwLock<HashMap> to avoid race conditions in cache"
    +
    +2. **Pattern: Safe Concurrent Cache Access**
    +   "Always use lock-free data structures for high-contention caches"
    +
    +3. **Note: Cache Race Condition Fix** (from 2026-01-17 journal)
    +   "Fixed race in cache by switching to DashMap"
    +
    +4. **Guideline: Concurrency Safety**
    +   "Use atomic operations and lock-free structures where possible"
    +
    +It looks like we've seen this before! Check the journal entry from 2026-01-17.
    +
    +

    Developer reads journal:

    +
    kb show journal-2026-01-17
    +
    +

    Finds:

    +
      +
    • Exact same issue
    • +
    • Solution: switch to DashMap
    • +
    • Code example included
    • +
    • Performance benchmarks
    • +
    +

    Applies fix in 10 minutes instead of 2 hours of debugging.

    +
    +

    Use Case 8: API Design Collaboration

    +

    Problem

    +

    Team discussing new API design. Multiple approaches:

    +
      +
    • REST vs GraphQL
    • +
    • Versioning strategy
    • +
    • Authentication method
    • +
    +

    Need to capture discussion and decision.

    +

    Solution with KOGRAL

    +

    During design meeting (using Claude Code):

    +
    We're designing the new API. Let me capture this discussion:
    +
    +Approaches discussed:
    +1. REST with versioned endpoints (/v1/, /v2/)
    +2. GraphQL with schema versioning
    +3. gRPC for internal services
    +
    +Team consensus:
    +- REST for public API (easier for partners)
    +- GraphQL for internal admin tools (flexibility)
    +- gRPC for service-to-service (performance)
    +
    +Create a decision record for each, linking them together.
    +
    +

    Claude (creates 3 linked ADRs):

    +
    Created 3 decisions:
    +
    +1. decision-rest-public-api
    +   Status: accepted
    +   Context: Public API needs broad compatibility
    +   Decision: REST with /v1/, /v2/ versioning
    +
    +2. decision-graphql-admin
    +   Status: accepted
    +   Context: Admin tools need flexible queries
    +   Decision: GraphQL with schema evolution
    +
    +3. decision-grpc-internal
    +   Status: accepted
    +   Context: Service-to-service needs performance
    +   Decision: gRPC with protobuf
    +
    +Linked:
    +  decision-rest-public-api --[relates_to]--> decision-graphql-admin
    +  decision-rest-public-api --[relates_to]--> decision-grpc-internal
    +  decision-graphql-admin --[relates_to]--> decision-grpc-internal
    +
    +All decisions documented and interconnected.
    +
    +

    Two months later, someone asks "Why REST not GraphQL for public API?":

    +
    kb show decision-rest-public-api
    +
    +

    Full context preserved, including relationship to GraphQL decision.

    +
    +

    Summary

    +

    Knowledge Base excels at:

    +

    Onboarding: Historical context instantly available +✅ Decision Making: ADRs preserve rationale +✅ Pattern Reuse: Solutions documented once, used forever +✅ Daily Tracking: Development journal with semantic search +✅ Code Review: Implementation rationale linked to decisions +✅ Cross-Project: Shared guidelines with project overrides +✅ Bug Investigation: Past solutions easily discovered +✅ Collaboration: Discussions captured and interconnected

    +

    Common Theme: Knowledge captured during work, queryable when needed, connected to related concepts.

    +
    +

    Next Steps

    + +

    Best Practices

    +

    System Architecture

    +

    Comprehensive overview of the KOGRAL architecture.

    +

    High-Level Architecture

    +

    Architecture Overview

    +

    The KOGRAL consists of three main layers:

    +
      +
    1. User Interfaces: kb-cli (terminal), kb-mcp (AI integration), NuShell scripts (automation)
    2. +
    3. Core Library (kb-core): Rust library with graph engine, storage abstraction, embeddings, query engine
    4. +
    5. Storage Backends: Filesystem (git-friendly), SurrealDB (scalable), In-Memory (cache/testing)
    6. +
    +

    Component Details

    +

    kb-cli (Command-Line Interface)

    +

    Purpose: Primary user interface for local knowledge management.

    +

    Commands (13 total):

    +
      +
    • init: Initialize .kogral/ directory
    • +
    • add: Create nodes (note, decision, guideline, pattern, journal)
    • +
    • search: Text and semantic search
    • +
    • link: Create relationships between nodes
    • +
    • list: List all nodes
    • +
    • show: Display node details
    • +
    • delete: Remove nodes
    • +
    • graph: Visualize knowledge graph
    • +
    • sync: Sync filesystem ↔ SurrealDB
    • +
    • serve: Start MCP server
    • +
    • import: Import from Logseq
    • +
    • export: Export to Logseq/JSON
    • +
    • config: Manage configuration
    • +
    +

    Technology: Rust + clap (derive API)

    +

    Features:

    +
      +
    • Colored terminal output
    • +
    • Interactive prompts
    • +
    • Dry-run modes
    • +
    • Validation before operations
    • +
    +

    kb-mcp (MCP Server)

    +

    Purpose: AI integration via Model Context Protocol.

    +

    Protocol: JSON-RPC 2.0 over stdio

    +

    Components:

    +
      +
    1. +

      Tools (7):

      +
        +
      • kogral/search: Query knowledge base
      • +
      • kb/add_note: Create notes
      • +
      • kb/add_decision: Create ADRs
      • +
      • kb/link: Create relationships
      • +
      • kb/get_guidelines: Retrieve guidelines with inheritance
      • +
      • kb/list_graphs: List available graphs
      • +
      • kb/export: Export to formats
      • +
      +
    2. +
    3. +

      Resources (6 URIs):

      +
        +
      • kogral://project/notes
      • +
      • kogral://project/decisions
      • +
      • kogral://project/guidelines
      • +
      • kogral://project/patterns
      • +
      • kogral://shared/guidelines
      • +
      • kogral://shared/patterns
      • +
      +
    4. +
    5. +

      Prompts (2):

      +
        +
      • kb/summarize_project: Generate project summary
      • +
      • kb/find_related: Find related nodes
      • +
      +
    6. +
    +

    Integration: Claude Code via ~/.config/claude/config.json

    +

    NuShell Scripts

    +

    Purpose: Automation and maintenance tasks.

    +

    Scripts (6):

    +
      +
    • kb-sync.nu: Filesystem ↔ SurrealDB sync
    • +
    • kb-backup.nu: Archive knowledge base
    • +
    • kb-reindex.nu: Rebuild embeddings
    • +
    • kb-import-logseq.nu: Import from Logseq
    • +
    • kb-export-logseq.nu: Export to Logseq
    • +
    • kb-stats.nu: Graph statistics
    • +
    +

    Features:

    +
      +
    • Colored output
    • +
    • Dry-run modes
    • +
    • Progress indicators
    • +
    • Error handling
    • +
    +

    Core Library (kb-core)

    +

    Models

    +

    Graph:

    +
    #![allow(unused)]
    +fn main() {
    +pub struct Graph {
    +    pub name: String,
    +    pub version: String,
    +    pub nodes: HashMap<String, Node>,  // ID → Node
    +    pub edges: Vec<Edge>,
    +    pub metadata: HashMap<String, Value>,
    +}
    +}
    +

    Node:

    +
    #![allow(unused)]
    +fn main() {
    +pub struct Node {
    +    pub id: String,
    +    pub node_type: NodeType,
    +    pub title: String,
    +    pub content: String,
    +    pub tags: Vec<String>,
    +    pub status: NodeStatus,
    +    pub created: DateTime<Utc>,
    +    pub modified: DateTime<Utc>,
    +    // ... relationships, metadata
    +}
    +}
    +

    Edge:

    +
    #![allow(unused)]
    +fn main() {
    +pub struct Edge {
    +    pub from: String,
    +    pub to: String,
    +    pub relation: EdgeType,
    +    pub strength: f32,
    +    pub created: DateTime<Utc>,
    +}
    +}
    +

    Storage Trait

    +
    #![allow(unused)]
    +fn main() {
    +#[async_trait]
    +pub trait Storage: Send + Sync {
    +    async fn save_graph(&self, graph: &Graph) -> Result<()>;
    +    async fn load_graph(&self, name: &str) -> Result<Graph>;
    +    async fn delete_graph(&self, name: &str) -> Result<()>;
    +    async fn list_graphs(&self) -> Result<Vec<String>>;
    +}
    +}
    +

    Implementations:

    +
      +
    1. FilesystemStorage: Git-friendly markdown files
    2. +
    3. MemoryStorage: In-memory with DashMap
    4. +
    5. SurrealDbStorage: Scalable graph database
    6. +
    +

    Embedding Provider Trait

    +
    #![allow(unused)]
    +fn main() {
    +#[async_trait]
    +pub trait EmbeddingProvider: Send + Sync {
    +    async fn embed(&self, texts: Vec<String>) -> Result<Vec<Vec<f32>>>;
    +    fn dimensions(&self) -> usize;
    +    fn model_name(&self) -> &str;
    +}
    +}
    +

    Implementations:

    +
      +
    1. FastEmbedProvider: Local fastembed
    2. +
    3. RigEmbeddingProvider: OpenAI, Claude, Ollama (via rig-core)
    4. +
    +

    Parser

    +

    Input: Markdown file with YAML frontmatter

    +

    Output: Node struct

    +

    Features:

    +
      +
    • YAML frontmatter extraction
    • +
    • Markdown body parsing
    • +
    • Wikilink detection ([[linked-note]])
    • +
    • Code reference parsing (@file.rs:42)
    • +
    +

    Example:

    +
    ---
    +id: note-123
    +type: note
    +title: My Note
    +tags: [rust, async]
    +---
    +
    +# My Note
    +
    +Content with [[other-note]] and @src/main.rs:10
    +
    +

    +
    #![allow(unused)]
    +fn main() {
    +Node {
    +    id: "note-123",
    +    node_type: NodeType::Note,
    +    title: "My Note",
    +    content: "Content with [[other-note]] and @src/main.rs:10",
    +    tags: vec!["rust", "async"],
    +    // ... parsed wikilinks, code refs
    +}
    +}
    +

    Configuration System

    +

    Nickel Schema

    +
    # schemas/kb-config.ncl
    +{
    +  KbConfig = {
    +    graph | GraphConfig,
    +    storage | StorageConfig,
    +    embeddings | EmbeddingConfig,
    +    templates | TemplateConfig,
    +    query | QueryConfig,
    +    mcp | McpConfig,
    +    sync | SyncConfig,
    +  },
    +}
    +
    +

    Loading Process

    +
    User writes: .kogral/config.ncl
    +    ↓ [nickel export --format json]
    +JSON intermediate
    +    ↓ [serde_json::from_str]
    +KbConfig struct (Rust)
    +    ↓
    +Runtime behavior
    +
    +

    Double Validation:

    +
      +
    1. Nickel contracts: Type-safe, enum validation
    2. +
    3. Serde deserialization: Rust type checking
    4. +
    +

    Benefits:

    +
      +
    • Errors caught at export time
    • +
    • Runtime guaranteed valid config
    • +
    • Self-documenting schemas
    • +
    +

    Storage Architecture

    +

    Hybrid Strategy

    +

    Local Graph (per project):

    +
      +
    • Storage: Filesystem (.kogral/ directory)
    • +
    • Format: Markdown + YAML frontmatter
    • +
    • Version control: Git
    • +
    • Scope: Project-specific knowledge
    • +
    +

    Shared Graph (organization):

    +
      +
    • Storage: SurrealDB (or synced filesystem)
    • +
    • Format: Same markdown (for compatibility)
    • +
    • Version control: Optional
    • +
    • Scope: Organization-wide guidelines
    • +
    +

    Sync:

    +
    Filesystem (.kogral/)
    +    ↕ [bidirectional sync]
    +SurrealDB (central)
    +
    +

    File Layout

    +
    .kogral/
    +├── config.toml              # Graph metadata
    +├── notes/
    +│   ├── async-patterns.md    # Individual note
    +│   └── error-handling.md
    +├── decisions/
    +│   ├── 0001-use-rust.md     # ADR format
    +│   └── 0002-surrealdb.md
    +├── guidelines/
    +│   ├── rust-errors.md       # Project guideline
    +│   └── testing.md
    +├── patterns/
    +│   └── repository.md
    +└── journal/
    +    ├── 2026-01-17.md        # Daily journal
    +    └── 2026-01-18.md
    +
    +

    Query Engine

    + +
    #![allow(unused)]
    +fn main() {
    +let results = graph.nodes.values()
    +    .filter(|node| {
    +        node.title.contains(&query) ||
    +        node.content.contains(&query) ||
    +        node.tags.iter().any(|tag| tag.contains(&query))
    +    })
    +    .collect();
    +}
    +

    Semantic Search

    +
    #![allow(unused)]
    +fn main() {
    +let query_embedding = embeddings.embed(vec![query]).await?;
    +let mut scored: Vec<_> = graph.nodes.values()
    +    .filter_map(|node| {
    +        let node_embedding = node.embedding.as_ref()?;
    +        let similarity = cosine_similarity(&query_embedding[0], node_embedding);
    +        (similarity >= threshold).then_some((node, similarity))
    +    })
    +    .collect();
    +scored.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap());
    +}
    +

    Cross-Graph Query

    +
    #![allow(unused)]
    +fn main() {
    +// Query both project and shared graphs
    +let project_results = project_graph.search(&query).await?;
    +let shared_results = shared_graph.search(&query).await?;
    +
    +// Merge with deduplication
    +let combined = merge_results(project_results, shared_results);
    +}
    +

    MCP Protocol Flow

    +
    Claude Code                kb-mcp                    kb-core
    +    │                         │                         │
    +    ├─ JSON-RPC request ───→ │                         │
    +    │  kb/search              │                         │
    +    │  {"query": "rust"}      │                         │
    +    │                         ├─ search() ──────────→  │
    +    │                         │                         │
    +    │                         │                    Query engine
    +    │                         │                    Text + semantic
    +    │                         │                         │
    +    │                         │ ←──── results ─────────┤
    +    │                         │                         │
    +    │ ←─ JSON-RPC response ──┤                         │
    +    │  {"results": [...]}     │                         │
    +
    +

    Template System

    +

    Engine: Tera (Jinja2-like)

    +

    Templates:

    +
      +
    1. +

      Document Templates (6):

      +
        +
      • note.md.tera
      • +
      • decision.md.tera
      • +
      • guideline.md.tera
      • +
      • pattern.md.tera
      • +
      • journal.md.tera
      • +
      • execution.md.tera
      • +
      +
    2. +
    3. +

      Export Templates (4):

      +
        +
      • logseq-page.md.tera
      • +
      • logseq-journal.md.tera
      • +
      • summary.md.tera
      • +
      • graph.json.tera
      • +
      +
    4. +
    +

    Usage:

    +
    #![allow(unused)]
    +fn main() {
    +let mut tera = Tera::new("templates/**/*.tera")?;
    +let rendered = tera.render("note.md.tera", &context)?;
    +}
    +

    Error Handling

    +

    Strategy: thiserror for structured errors

    +
    #![allow(unused)]
    +fn main() {
    +#[derive(Error, Debug)]
    +pub enum KbError {
    +    #[error("Storage error: {0}")]
    +    Storage(String),
    +
    +    #[error("Node not found: {0}")]
    +    NodeNotFound(String),
    +
    +    #[error("Configuration error: {0}")]
    +    Config(String),
    +
    +    #[error("Parse error: {0}")]
    +    Parse(String),
    +
    +    #[error("Embedding error: {0}")]
    +    Embedding(String),
    +}
    +}
    +

    Propagation: ? operator throughout

    +

    Testing Strategy

    +

    Unit Tests: Per module (models, parser, storage)

    +

    Integration Tests: Full workflow (add → save → load → query)

    +

    Test Coverage:

    +
      +
    • kb-core: 48 tests
    • +
    • kb-mcp: 5 tests
    • +
    • Total: 56 tests
    • +
    +

    Test Data: Fixtures in tests/fixtures/

    +

    Performance Considerations

    +

    Node Lookup: O(1) via HashMap

    +

    Semantic Search: O(n) with early termination (threshold filter)

    +

    Storage:

    +
      +
    • Filesystem: Lazy loading (load on demand)
    • +
    • Memory: Full graph in RAM
    • +
    • SurrealDB: Query optimization (indexes)
    • +
    +

    Embeddings:

    +
      +
    • Cache embeddings in node metadata
    • +
    • Batch processing (configurable batch size)
    • +
    • Async generation (non-blocking)
    • +
    +

    Security

    +

    No unsafe code: #![forbid(unsafe_code)]

    +

    Input validation:

    +
      +
    • Nickel contracts validate config
    • +
    • serde validates JSON
    • +
    • Custom validation for user input
    • +
    +

    File operations:

    +
      +
    • Path sanitization (no ../ traversal)
    • +
    • Permissions checking
    • +
    • Atomic writes (temp file + rename)
    • +
    +

    Scalability

    +

    Small Projects (< 1000 nodes):

    +
      +
    • Filesystem storage
    • +
    • In-memory search
    • +
    • Local embeddings (fastembed)
    • +
    +

    Medium Projects (1000-10,000 nodes):

    +
      +
    • Filesystem + SurrealDB sync
    • +
    • Semantic search with caching
    • +
    • Cloud embeddings (OpenAI/Claude)
    • +
    +

    Large Organizations (> 10,000 nodes):

    +
      +
    • SurrealDB primary
    • +
    • Distributed embeddings
    • +
    • Multi-graph federation
    • +
    +

    Next Steps

    + +

    Graph Model

    +

    Config-Driven Architecture

    +

    The KOGRAL follows a config-driven architecture where all behavior is defined through Nickel configuration files rather than hardcoded in Rust.

    +

    Philosophy

    +

    "Configuration, not code, defines behavior"

    +

    Instead of hardcoding storage backends, embedding providers, or query parameters, KB uses a layered configuration system that composes settings from multiple sources:

    +
      +
    1. Schema contracts (type definitions)
    2. +
    3. Defaults (base values)
    4. +
    5. Mode overlays (dev/prod/test optimizations)
    6. +
    7. User customizations (project-specific overrides)
    8. +
    +

    This approach provides:

    +
      +
    • Type safety - Nickel contracts validate configuration before runtime
    • +
    • Composability - Mix and match configurations for different environments
    • +
    • Discoverability - Self-documenting schemas with inline documentation
    • +
    • Hot-reload - Change behavior without recompiling Rust code
    • +
    • Double validation - Nickel contracts + serde ensure correctness
    • +
    +

    Configuration Composition Flow

    +

    Configuration Composition

    +

    The configuration system uses a four-layer composition pattern:

    +

    Layer 1: Schema Contracts

    +

    Location: schemas/kb/contracts.ncl

    +

    Purpose: Define types and validation rules using Nickel contracts.

    +

    Example:

    +
    {
    +  StorageType = [| 'filesystem, 'memory, 'surrealdb |],
    +
    +  StorageConfig = {
    +    primary | StorageType
    +      | doc "Primary storage backend"
    +      | default = 'filesystem,
    +
    +    secondary | SecondaryStorageConfig
    +      | doc "Optional secondary storage"
    +      | default = { enabled = false },
    +  },
    +}
    +
    +

    Benefits:

    +
      +
    • Enum validation (only valid storage types accepted)
    • +
    • Required vs optional fields
    • +
    • Default values for optional fields
    • +
    • Documentation attached to types
    • +
    +

    Layer 2: Defaults

    +

    Location: schemas/kb/defaults.ncl

    +

    Purpose: Provide sensible base values for all configuration options.

    +

    Example:

    +
    {
    +  base = {
    +    storage = {
    +      primary = 'filesystem,
    +      secondary = {
    +        enabled = false,
    +        type = 'surrealdb,
    +        url = "ws://localhost:8000",
    +      },
    +    },
    +    embeddings = {
    +      enabled = true,
    +      provider = 'fastembed,
    +      model = "BAAI/bge-small-en-v1.5",
    +      dimensions = 384,
    +    },
    +  } | contracts.KbConfig,
    +}
    +
    +

    Validated by: contracts.KbConfig contract ensures defaults are valid.

    +

    Layer 3: Mode Overlays

    +

    Location: schemas/kb/modes/{dev,prod,test}.ncl

    +

    Purpose: Environment-specific optimizations and tuning.

    +

    Development Mode (dev.ncl)

    +

    Optimized for: Fast iteration, local development, debugging

    +
    {
    +  storage = {
    +    primary = 'filesystem,
    +    secondary = { enabled = false },  # No database overhead
    +  },
    +  embeddings = {
    +    provider = 'fastembed,  # Local, no API costs
    +  },
    +  sync = {
    +    auto_index = false,  # Manual control
    +  },
    +}
    +
    +

    Production Mode (prod.ncl)

    +

    Optimized for: Performance, reliability, scalability

    +
    {
    +  storage = {
    +    secondary = { enabled = true },  # SurrealDB for scale
    +  },
    +  embeddings = {
    +    provider = 'openai,  # High-quality cloud embeddings
    +    model = "text-embedding-3-small",
    +    dimensions = 1536,
    +  },
    +  sync = {
    +    auto_index = true,
    +    debounce_ms = 300,  # Fast response
    +  },
    +}
    +
    +

    Test Mode (test.ncl)

    +

    Optimized for: Fast tests, isolation, determinism

    +
    {
    +  storage = {
    +    primary = 'memory,  # Ephemeral, no disk I/O
    +  },
    +  embeddings = {
    +    enabled = false,  # Disable for speed
    +  },
    +  sync = {
    +    auto_index = false,
    +    debounce_ms = 0,  # No delays in tests
    +  },
    +}
    +
    +

    Layer 4: User Customizations

    +

    Location: .kb-config/core/kb.ncl or .kb-config/platform/{dev,prod,test}.ncl

    +

    Purpose: Project-specific or deployment-specific overrides.

    +

    Example (user project config):

    +
    let mode = import "../../schemas/kb/modes/dev.ncl" in
    +
    +let user_custom = {
    +  graph = {
    +    name = "my-project",
    +  },
    +  embeddings = {
    +    provider = 'claude,  # Override to use Claude
    +    model = "claude-3-haiku-20240307",
    +  },
    +  query = {
    +    similarity_threshold = 0.7,  # Stricter threshold
    +  },
    +} in
    +
    +helpers.compose_config defaults.base mode user_custom
    +  | contracts.KbConfig
    +
    +

    Composition Mechanism

    +

    The helpers.ncl module provides the composition function:

    +
    {
    +  # Recursively merge with override precedence
    +  merge_with_override = fun base override => /* ... */,
    +
    +  # Compose three layers
    +  compose_config = fun defaults mode_config user_custom =>
    +    let with_mode = merge_with_override defaults mode_config in
    +    merge_with_override with_mode user_custom,
    +}
    +
    +

    Merge behavior:

    +
      +
    • Records are merged recursively
    • +
    • Override values take precedence over base values
    • +
    • Arrays are not merged, override replaces base
    • +
    • Null in override keeps base value
    • +
    +

    Example merge:

    +
    base = { storage = { primary = 'filesystem }, embeddings = { enabled = true } }
    +override = { storage = { primary = 'memory } }
    +# Result: { storage = { primary = 'memory }, embeddings = { enabled = true } }
    +
    +

    Export to JSON

    +

    Once composed, the Nickel configuration is exported to JSON for Rust consumption:

    +
    nickel export --format json .kb-config/core/kb.ncl > .kb-config/targets/kb-core.json
    +
    +

    Output (.kb-config/targets/kb-core.json):

    +
    {
    +  "graph": {
    +    "name": "my-project",
    +    "version": "1.0.0"
    +  },
    +  "storage": {
    +    "primary": "memory",
    +    "secondary": {
    +      "enabled": false
    +    }
    +  },
    +  "embeddings": {
    +    "enabled": true,
    +    "provider": "claude",
    +    "model": "claude-3-haiku-20240307",
    +    "dimensions": 768
    +  }
    +}
    +
    +

    Rust Integration

    +

    The Rust code deserializes the JSON into typed structs using serde:

    +
    #![allow(unused)]
    +fn main() {
    +use serde::{Deserialize, Serialize};
    +
    +#[derive(Debug, Deserialize, Serialize)]
    +pub struct KbConfig {
    +    pub graph: GraphConfig,
    +    pub storage: StorageConfig,
    +    pub embeddings: EmbeddingConfig,
    +    pub templates: TemplateConfig,
    +    pub query: QueryConfig,
    +    pub mcp: McpConfig,
    +    pub sync: SyncConfig,
    +}
    +
    +impl KbConfig {
    +    pub fn from_file(path: &Path) -> Result<Self> {
    +        let json = std::fs::read_to_string(path)?;
    +        let config: KbConfig = serde_json::from_str(&json)?;
    +        Ok(config)
    +    }
    +}
    +}
    +

    Usage in kb-core:

    +
    #![allow(unused)]
    +fn main() {
    +let config = KbConfig::from_file(".kb-config/targets/kb-core.json")?;
    +
    +// Config drives behavior
    +let storage: Box<dyn Storage> = match config.storage.primary {
    +    StorageType::Filesystem => Box::new(FilesystemStorage::new(&config)?),
    +    StorageType::Memory => Box::new(MemoryStorage::new()),
    +    StorageType::SurrealDb => Box::new(SurrealDbStorage::new(&config).await?),
    +};
    +
    +let embeddings: Box<dyn EmbeddingProvider> = match config.embeddings.provider {
    +    EmbeddingProviderType::FastEmbed => Box::new(FastEmbedProvider::new()?),
    +    EmbeddingProviderType::OpenAI => Box::new(RigEmbeddingProvider::openai(&config)?),
    +    EmbeddingProviderType::Claude => Box::new(RigEmbeddingProvider::claude(&config)?),
    +    EmbeddingProviderType::Ollama => Box::new(RigEmbeddingProvider::ollama(&config)?),
    +};
    +}
    +

    Double Validation

    +

    Configuration is validated twice:

    +

    1. Nickel Contract Validation

    +

    At export time, Nickel validates:

    +
      +
    • ✅ Types match contracts (e.g., primary | StorageType)
    • +
    • ✅ Required fields are present
    • +
    • ✅ Enums have valid values
    • +
    • ✅ Nested structure is correct
    • +
    +

    Error example:

    +
    error: contract broken by a value
    +  ┌─ .kb-config/core/kb.ncl:15:5
    +  │
    +15│     primary = 'invalid,
    +  │     ^^^^^^^^^^^^^^^^^^^ applied to this expression
    +  │
    +  = This value is not in the enum ['filesystem, 'memory, 'surrealdb]
    +
    +

    2. Serde Deserialization Validation

    +

    At runtime, serde validates:

    +
      +
    • ✅ JSON structure matches Rust types
    • +
    • ✅ Field names match (with rename support)
    • +
    • ✅ Values can be converted to Rust types
    • +
    • ✅ Required fields are not null
    • +
    +

    Error example:

    +
    #![allow(unused)]
    +fn main() {
    +Error: missing field `graph` at line 1 column 123
    +}
    +

    Benefits of Config-Driven Architecture

    +

    1. Zero Hardcoding

    +

    Bad (hardcoded):

    +
    #![allow(unused)]
    +fn main() {
    +// Hardcoded - requires recompilation to change
    +let storage = FilesystemStorage::new("/fixed/path");
    +let threshold = 0.6;
    +}
    +

    Good (config-driven):

    +
    #![allow(unused)]
    +fn main() {
    +// Config-driven - change via .ncl file
    +let storage = create_storage(&config)?;
    +let threshold = config.query.similarity_threshold;
    +}
    +

    2. Environment Flexibility

    +

    Same codebase, different behavior:

    +
    # Development
    +nickel export .kb-config/platform/dev.ncl > targets/kb-core.json
    +# → Filesystem storage, fastembed, no auto-sync
    +
    +# Production
    +nickel export .kb-config/platform/prod.ncl > targets/kb-core.json
    +# → SurrealDB enabled, OpenAI embeddings, auto-sync
    +
    +# Testing
    +nickel export .kb-config/platform/test.ncl > targets/kb-core.json
    +# → In-memory storage, no embeddings, isolated
    +
    +

    3. Self-Documenting

    +

    Nickel contracts include inline documentation:

    +
    StorageType = [| 'filesystem, 'memory, 'surrealdb |]
    +  | doc "Storage backend type: filesystem (git-tracked), memory (ephemeral), surrealdb (scalable)",
    +
    +

    IDEs can show this documentation when editing .ncl files.

    +

    4. Type-Safe Evolution

    +

    When adding new features:

    +
      +
    1. Update contract in contracts.ncl
    2. +
    3. Add default in defaults.ncl
    4. +
    5. Export validates existing configs
    6. +
    7. Rust compilation validates deserialization
    8. +
    +

    Breaking changes are caught before runtime.

    +

    5. Testability

    +

    Different test scenarios without code changes:

    +
    # test-semantic-search.ncl
    +let test_config = defaults.base & {
    +  embeddings = { enabled = true, provider = 'fastembed },
    +  query = { similarity_threshold = 0.3 },
    +} in test_config
    +
    +
    #![allow(unused)]
    +fn main() {
    +#[test]
    +fn test_semantic_search() {
    +    let config = KbConfig::from_file("test-semantic-search.json")?;
    +    // Config drives test behavior
    +}
    +}
    +

    Configuration Discovery

    +

    KB tools automatically discover configuration:

    +
      +
    1. Check .kb-config/targets/kb-core.json (pre-exported)
    2. +
    3. Check .kb-config/core/kb.ncl (export on-demand)
    4. +
    5. Check environment variable KB_CONFIG
    6. +
    7. Fall back to embedded defaults
    8. +
    +
    #![allow(unused)]
    +fn main() {
    +impl KbConfig {
    +    pub fn discover() -> Result<Self> {
    +        if let Ok(config) = Self::from_file(".kb-config/targets/kb-core.json") {
    +            return Ok(config);
    +        }
    +
    +        if Path::new(".kb-config/core/kb.ncl").exists() {
    +            // Export and load
    +            let output = Command::new("nickel")
    +                .args(["export", "--format", "json", ".kb-config/core/kb.ncl"])
    +                .output()?;
    +            return serde_json::from_slice(&output.stdout)?;
    +        }
    +
    +        if let Ok(path) = std::env::var("KB_CONFIG") {
    +            return Self::from_file(&path);
    +        }
    +
    +        Ok(Self::default())  // Embedded defaults
    +    }
    +}
    +}
    +

    Integration with justfile

    +

    The justfile integrates configuration validation:

    +
    # Validate all Nickel configs
    +nickel-validate-all:
    +    @echo "Validating Nickel schemas..."
    +    nickel typecheck schemas/kb/contracts.ncl
    +    nickel typecheck schemas/kb/defaults.ncl
    +    nickel typecheck schemas/kb/helpers.ncl
    +    nickel typecheck schemas/kb/modes/dev.ncl
    +    nickel typecheck schemas/kb/modes/prod.ncl
    +    nickel typecheck schemas/kb/modes/test.ncl
    +    nickel typecheck .kb-config/core/kb.ncl
    +
    +# Export all platform configs
    +nickel-export-all:
    +    @echo "Exporting platform configs to JSON..."
    +    @mkdir -p .kb-config/targets
    +    nickel export --format json .kb-config/platform/dev.ncl > .kb-config/targets/kb-dev.json
    +    nickel export --format json .kb-config/platform/prod.ncl > .kb-config/targets/kb-prod.json
    +    nickel export --format json .kb-config/platform/test.ncl > .kb-config/targets/kb-test.json
    +    @echo "Exported 3 configurations to .kb-config/targets/"
    +
    +

    Usage:

    +
    just nickel::validate-all  # Check configs are valid
    +just nickel::export-all    # Generate JSON for all environments
    +
    +

    Best Practices

    +

    1. Never Hardcode

    +

    If it's behavior, it's config:

    +
      +
    • Storage paths
    • +
    • API endpoints
    • +
    • Thresholds
    • +
    • Timeouts
    • +
    • Feature flags
    • +
    • Provider selection
    • +
    +

    2. Use Modes for Environment Differences

    +

    Don't put environment-specific values in user config:

    +

    Bad:

    +
    # user config with env-specific values
    +{
    +  storage = {
    +    url = if env == "prod" then "prod-url" else "dev-url"  # Don't do this
    +  }
    +}
    +
    +

    Good:

    +
    # modes/prod.ncl
    +{ storage = { url = "prod-url" } }
    +
    +# modes/dev.ncl
    +{ storage = { url = "dev-url" } }
    +
    +# user config is environment-agnostic
    +{ graph = { name = "my-project" } }
    +
    +

    3. Document Complex Fields

    +

    Use Nickel's doc metadata:

    +
    similarity_threshold | Number
    +  | doc "Minimum cosine similarity (0-1) for semantic search matches. Higher = stricter."
    +  | default = 0.6,
    +
    +

    4. Validate Early

    +

    Run nickel typecheck in CI/CD before building Rust code.

    +

    5. Version Configs

    +

    Track .ncl files in git, ignore .kb-config/targets/*.json (generated).

    +

    See Also

    + +

    Storage Architecture

    +

    Logseq Blocks Support - Architecture Design

    +

    Problem Statement

    +

    Logseq uses content blocks as the fundamental unit of information, not full documents. Each block can have:

    +
      +
    • Properties: #card, TODO, DONE, custom properties
    • +
    • Tags: Inline tags like #flashcard, #important
    • +
    • References: Block references ((block-id)), page references [[page]]
    • +
    • Nesting: Outliner-style hierarchy (parent-child blocks)
    • +
    • Metadata: Block-level properties (unlike page-level frontmatter)
    • +
    +

    Current KB limitation: Nodes only have content: String (flat markdown). Importing from Logseq loses block structure and properties.

    +

    Requirement: Support round-trip import/export with full block fidelity:

    +
    Logseq Graph → KOGRAL Import → KOGRAL Storage → KOGRAL Export → Logseq Graph
    +     (blocks preserved)                    (blocks preserved)
    +
    +

    Use Cases

    +

    1. Flashcards (#card)

    +

    Logseq:

    +
    - What is Rust's ownership model? #card
    +  - Rust uses ownership, borrowing, and lifetimes
    +  - Three rules: one owner, many borrows XOR one mutable
    +
    +

    KB needs to preserve:

    +
      +
    • Block with #card property
    • +
    • Nested answer blocks
    • +
    • Ability to query all cards
    • +
    +

    2. Task Tracking (TODO/DONE)

    +

    Logseq:

    +
    - TODO Implement block parser #rust
    +  - DONE Research block structure
    +  - TODO Write parser tests
    +
    +

    KB needs to preserve:

    +
      +
    • Task status per block
    • +
    • Hierarchical task breakdown
    • +
    • Tags on tasks
    • +
    +

    3. Block References

    +

    Logseq:

    +
    - Core concept: ((block-uuid-123))
    +  - See also: [[Related Page]]
    +
    +

    KB needs to preserve:

    +
      +
    • Block-to-block links (not just page-to-page)
    • +
    • UUID references
    • +
    +

    4. Block Properties

    +

    Logseq:

    +
    - This is a block with properties
    +  property1:: value1
    +  property2:: value2
    +
    +

    KB needs to preserve:

    +
      +
    • Custom key-value properties per block
    • +
    • Property inheritance/override
    • +
    +

    Design Options

    +

    Option A: Blocks as First-Class Data Structure

    +

    Add blocks field to Node:

    +
    #![allow(unused)]
    +fn main() {
    +pub struct Node {
    +    // ... existing fields ...
    +    pub content: String,              // Backward compat: flat markdown
    +    pub blocks: Option<Vec<Block>>,   // NEW: Structured blocks
    +}
    +
    +pub struct Block {
    +    pub id: String,                   // UUID or auto-generated
    +    pub content: String,              // Block text
    +    pub properties: BlockProperties,  // Tags, status, custom props
    +    pub children: Vec<Block>,         // Nested blocks
    +    pub created: DateTime<Utc>,
    +    pub modified: DateTime<Utc>,
    +}
    +
    +pub struct BlockProperties {
    +    pub tags: Vec<String>,            // #card, #important
    +    pub status: Option<TaskStatus>,   // TODO, DONE, WAITING
    +    pub custom: HashMap<String, String>, // property:: value
    +}
    +
    +pub enum TaskStatus {
    +    Todo,
    +    Doing,
    +    Done,
    +    Waiting,
    +    Cancelled,
    +}
    +}
    +

    Pros:

    +
      +
    • ✅ Type-safe, explicit structure
    • +
    • ✅ Queryable (find all #card blocks)
    • +
    • ✅ Preserves hierarchy
    • +
    • ✅ Supports block-level operations
    • +
    +

    Cons:

    +
      +
    • ❌ Adds complexity to Node
    • +
    • ❌ Dual representation (content + blocks)
    • +
    • ❌ Requires migration of existing data
    • +
    +

    Option B: Parser-Only Approach

    +

    Keep content: String, parse blocks on-demand:

    +
    #![allow(unused)]
    +fn main() {
    +pub struct BlockParser;
    +
    +impl BlockParser {
    +    // Parse markdown content into block structure
    +    fn parse(content: &str) -> Vec<Block>;
    +
    +    // Serialize blocks back to markdown
    +    fn serialize(blocks: &[Block]) -> String;
    +}
    +
    +// Usage
    +let blocks = BlockParser::parse(&node.content);
    +let filtered = blocks.iter().filter(|b| b.properties.tags.contains("card"));
    +}
    +

    Pros:

    +
      +
    • ✅ No schema changes
    • +
    • ✅ Backward compatible
    • +
    • ✅ Simple storage (still just String)
    • +
    +

    Cons:

    +
      +
    • ❌ Parse overhead on every access
    • +
    • ❌ Can't query blocks in database (SurrealDB)
    • +
    • ❌ Harder to index/search blocks
    • +
    + +

    Combine both: structured storage + lazy parsing:

    +
    #![allow(unused)]
    +fn main() {
    +pub struct Node {
    +    // ... existing fields ...
    +    pub content: String,              // Source of truth (markdown)
    +
    +    #[serde(skip_serializing_if = "Option::is_none")]
    +    pub blocks: Option<Vec<Block>>,   // Cached structure (parsed)
    +}
    +
    +impl Node {
    +    // Parse blocks from content if not already cached
    +    pub fn get_blocks(&mut self) -> &Vec<Block> {
    +        if self.blocks.is_none() {
    +            self.blocks = Some(BlockParser::parse(&self.content));
    +        }
    +        self.blocks.as_ref().unwrap()
    +    }
    +
    +    // Update content from blocks (when blocks modified)
    +    pub fn sync_blocks_to_content(&mut self) {
    +        if let Some(ref blocks) = self.blocks {
    +            self.content = BlockParser::serialize(blocks);
    +        }
    +    }
    +}
    +}
    +

    Storage Strategy:

    +
      +
    1. +

      Filesystem - Store as markdown (Logseq compatible):

      +
      - Block 1 #card
      +  - Nested block
      +- Block 2 TODO
      +
      +
    2. +
    3. +

      SurrealDB - Store both:

      +
      DEFINE TABLE block SCHEMAFULL;
      +DEFINE FIELD node_id ON block TYPE record(node);
      +DEFINE FIELD block_id ON block TYPE string;
      +DEFINE FIELD content ON block TYPE string;
      +DEFINE FIELD properties ON block TYPE object;
      +DEFINE FIELD parent_id ON block TYPE option<string>;
      +
      +-- Index for queries
      +DEFINE INDEX block_tags ON block COLUMNS properties.tags;
      +DEFINE INDEX block_status ON block COLUMNS properties.status;
      +
      +
    4. +
    +

    Pros:

    +
      +
    • ✅ Best of both worlds
    • +
    • ✅ Filesystem stays Logseq-compatible
    • +
    • ✅ SurrealDB can query blocks
    • +
    • ✅ Lazy parsing (only when needed)
    • +
    • ✅ Backward compatible
    • +
    +

    Cons:

    +
      +
    • ⚠️ Need to keep content/blocks in sync
    • +
    • ⚠️ More complex implementation
    • +
    + +

    Phase 1: Data Model

    +
    #![allow(unused)]
    +fn main() {
    +// crates/kb-core/src/models/block.rs
    +
    +use chrono::{DateTime, Utc};
    +use serde::{Deserialize, Serialize};
    +use std::collections::HashMap;
    +
    +/// A content block (Logseq-style)
    +#[derive(Debug, Clone, Serialize, Deserialize)]
    +pub struct Block {
    +    /// Unique block identifier (UUID)
    +    pub id: String,
    +
    +    /// Block content (markdown text, excluding nested blocks)
    +    pub content: String,
    +
    +    /// Block properties (tags, status, custom)
    +    pub properties: BlockProperties,
    +
    +    /// Child blocks (nested hierarchy)
    +    #[serde(default)]
    +    pub children: Vec<Block>,
    +
    +    /// Creation timestamp
    +    pub created: DateTime<Utc>,
    +
    +    /// Last modification timestamp
    +    pub modified: DateTime<Utc>,
    +
    +    /// Parent block ID (if nested)
    +    #[serde(skip_serializing_if = "Option::is_none")]
    +    pub parent_id: Option<String>,
    +}
    +
    +/// Block-level properties
    +#[derive(Debug, Clone, Default, Serialize, Deserialize)]
    +pub struct BlockProperties {
    +    /// Tags (e.g., #card, #important)
    +    #[serde(default)]
    +    pub tags: Vec<String>,
    +
    +    /// Task status (TODO, DONE, etc.)
    +    #[serde(skip_serializing_if = "Option::is_none")]
    +    pub status: Option<TaskStatus>,
    +
    +    /// Custom properties (property:: value)
    +    #[serde(default)]
    +    pub custom: HashMap<String, String>,
    +
    +    /// Block references ((uuid))
    +    #[serde(default)]
    +    pub block_refs: Vec<String>,
    +
    +    /// Page references ([[page]])
    +    #[serde(default)]
    +    pub page_refs: Vec<String>,
    +}
    +
    +/// Task status for TODO blocks
    +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
    +#[serde(rename_all = "UPPERCASE")]
    +pub enum TaskStatus {
    +    Todo,
    +    Doing,
    +    Done,
    +    Later,
    +    Now,
    +    Waiting,
    +    Cancelled,
    +}
    +
    +impl Block {
    +    /// Create a new block with content
    +    pub fn new(content: String) -> Self {
    +        use uuid::Uuid;
    +        Self {
    +            id: Uuid::new_v4().to_string(),
    +            content,
    +            properties: BlockProperties::default(),
    +            children: Vec::new(),
    +            created: Utc::now(),
    +            modified: Utc::now(),
    +            parent_id: None,
    +        }
    +    }
    +
    +    /// Add a child block
    +    pub fn add_child(&mut self, mut child: Block) {
    +        child.parent_id = Some(self.id.clone());
    +        self.children.push(child);
    +        self.modified = Utc::now();
    +    }
    +
    +    /// Add a tag to this block
    +    pub fn add_tag(&mut self, tag: String) {
    +        if !self.properties.tags.contains(&tag) {
    +            self.properties.tags.push(tag);
    +            self.modified = Utc::now();
    +        }
    +    }
    +
    +    /// Set task status
    +    pub fn set_status(&mut self, status: TaskStatus) {
    +        self.properties.status = Some(status);
    +        self.modified = Utc::now();
    +    }
    +
    +    /// Get all blocks (self + descendants) as flat list
    +    pub fn flatten(&self) -> Vec<&Block> {
    +        let mut result = vec![self];
    +        for child in &self.children {
    +            result.extend(child.flatten());
    +        }
    +        result
    +    }
    +
    +    /// Find block by ID in tree
    +    pub fn find(&self, id: &str) -> Option<&Block> {
    +        if self.id == id {
    +            return Some(self);
    +        }
    +        for child in &self.children {
    +            if let Some(found) = child.find(id) {
    +                return Some(found);
    +            }
    +        }
    +        None
    +    }
    +}
    +}
    +

    Phase 2: Update Node Model

    +
    #![allow(unused)]
    +fn main() {
    +// crates/kb-core/src/models.rs (modifications)
    +
    +use crate::models::block::Block;
    +
    +pub struct Node {
    +    // ... existing fields ...
    +    pub content: String,
    +
    +    /// Structured blocks (optional, parsed from content)
    +    #[serde(skip_serializing_if = "Option::is_none")]
    +    pub blocks: Option<Vec<Block>>,
    +}
    +
    +impl Node {
    +    /// Get blocks, parsing from content if needed
    +    pub fn get_blocks(&mut self) -> Result<&Vec<Block>> {
    +        if self.blocks.is_none() {
    +            self.blocks = Some(crate::parser::BlockParser::parse(&self.content)?);
    +        }
    +        Ok(self.blocks.as_ref().unwrap())
    +    }
    +
    +    /// Update content from blocks
    +    pub fn sync_blocks_to_content(&mut self) {
    +        if let Some(ref blocks) = self.blocks {
    +            self.content = crate::parser::BlockParser::serialize(blocks);
    +        }
    +    }
    +
    +    /// Find all blocks with a specific tag
    +    pub fn find_blocks_by_tag(&mut self, tag: &str) -> Result<Vec<&Block>> {
    +        let blocks = self.get_blocks()?;
    +        let mut result = Vec::new();
    +        for block in blocks {
    +            for b in block.flatten() {
    +                if b.properties.tags.iter().any(|t| t == tag) {
    +                    result.push(b);
    +                }
    +            }
    +        }
    +        Ok(result)
    +    }
    +
    +    /// Find all TODO blocks
    +    pub fn find_todos(&mut self) -> Result<Vec<&Block>> {
    +        let blocks = self.get_blocks()?;
    +        let mut result = Vec::new();
    +        for block in blocks {
    +            for b in block.flatten() {
    +                if matches!(b.properties.status, Some(TaskStatus::Todo)) {
    +                    result.push(b);
    +                }
    +            }
    +        }
    +        Ok(result)
    +    }
    +}
    +}
    +

    Phase 3: Block Parser

    +
    #![allow(unused)]
    +fn main() {
    +// crates/kb-core/src/parser/block_parser.rs
    +
    +use crate::models::block::{Block, BlockProperties, TaskStatus};
    +use regex::Regex;
    +
    +pub struct BlockParser;
    +
    +impl BlockParser {
    +    /// Parse markdown content into block structure
    +    ///
    +    /// Handles:
    +    /// - Outliner format (- prefix with indentation)
    +    /// - Tags (#card, #important)
    +    /// - Task status (TODO, DONE)
    +    /// - Properties (property:: value)
    +    /// - Block references (((uuid)))
    +    /// - Page references ([[page]])
    +    pub fn parse(content: &str) -> Result<Vec<Block>> {
    +        let mut blocks = Vec::new();
    +        let mut stack: Vec<(usize, Block)> = Vec::new(); // (indent_level, block)
    +
    +        for line in content.lines() {
    +            // Detect indentation level
    +            let indent = count_indent(line);
    +            let trimmed = line.trim_start();
    +
    +            // Skip empty lines
    +            if trimmed.is_empty() {
    +                continue;
    +            }
    +
    +            // Parse block line
    +            if let Some(block_content) = trimmed.strip_prefix("- ") {
    +                let mut block = Self::parse_block_line(block_content)?;
    +
    +                // Pop stack until we find parent level
    +                while let Some((level, _)) = stack.last() {
    +                    if *level < indent {
    +                        break;
    +                    }
    +                    stack.pop();
    +                }
    +
    +                // Add as child to parent or as root
    +                if let Some((_, parent)) = stack.last_mut() {
    +                    parent.add_child(block.clone());
    +                } else {
    +                    blocks.push(block.clone());
    +                }
    +
    +                stack.push((indent, block));
    +            }
    +        }
    +
    +        Ok(blocks)
    +    }
    +
    +    /// Parse a single block line (after "- " prefix)
    +    fn parse_block_line(line: &str) -> Result<Block> {
    +        let mut block = Block::new(String::new());
    +        let mut properties = BlockProperties::default();
    +
    +        // Extract task status (TODO, DONE, etc.)
    +        let (status, remaining) = Self::extract_task_status(line);
    +        properties.status = status;
    +
    +        // Extract tags (#card, #important)
    +        let (tags, remaining) = Self::extract_tags(remaining);
    +        properties.tags = tags;
    +
    +        // Extract properties (property:: value)
    +        let (custom_props, remaining) = Self::extract_properties(remaining);
    +        properties.custom = custom_props;
    +
    +        // Extract block references (((uuid)))
    +        let (block_refs, remaining) = Self::extract_block_refs(remaining);
    +        properties.block_refs = block_refs;
    +
    +        // Extract page references ([[page]])
    +        let (page_refs, content) = Self::extract_page_refs(remaining);
    +        properties.page_refs = page_refs;
    +
    +        block.content = content.trim().to_string();
    +        block.properties = properties;
    +
    +        Ok(block)
    +    }
    +
    +    /// Serialize blocks back to markdown
    +    pub fn serialize(blocks: &[Block]) -> String {
    +        let mut result = String::new();
    +        for block in blocks {
    +            Self::serialize_block(&mut result, block, 0);
    +        }
    +        result
    +    }
    +
    +    fn serialize_block(output: &mut String, block: &Block, indent: usize) {
    +        // Write indent
    +        for _ in 0..indent {
    +            output.push_str("  ");
    +        }
    +
    +        // Write prefix
    +        output.push_str("- ");
    +
    +        // Write task status
    +        if let Some(status) = block.properties.status {
    +            output.push_str(&format!("{:?} ", status).to_uppercase());
    +        }
    +
    +        // Write content
    +        output.push_str(&block.content);
    +
    +        // Write tags
    +        for tag in &block.properties.tags {
    +            output.push_str(&format!(" #{}", tag));
    +        }
    +
    +        // Write properties
    +        if !block.properties.custom.is_empty() {
    +            output.push('\n');
    +            for (key, value) in &block.properties.custom {
    +                for _ in 0..=indent {
    +                    output.push_str("  ");
    +                }
    +                output.push_str(&format!("{}:: {}\n", key, value));
    +            }
    +        }
    +
    +        output.push('\n');
    +
    +        // Write children recursively
    +        for child in &block.children {
    +            Self::serialize_block(output, child, indent + 1);
    +        }
    +    }
    +
    +    // Helper methods for extraction
    +    fn extract_task_status(line: &str) -> (Option<TaskStatus>, &str) {
    +        let line = line.trim_start();
    +        if let Some(rest) = line.strip_prefix("TODO ") {
    +            (Some(TaskStatus::Todo), rest)
    +        } else if let Some(rest) = line.strip_prefix("DONE ") {
    +            (Some(TaskStatus::Done), rest)
    +        } else if let Some(rest) = line.strip_prefix("DOING ") {
    +            (Some(TaskStatus::Doing), rest)
    +        } else if let Some(rest) = line.strip_prefix("LATER ") {
    +            (Some(TaskStatus::Later), rest)
    +        } else if let Some(rest) = line.strip_prefix("NOW ") {
    +            (Some(TaskStatus::Now), rest)
    +        } else if let Some(rest) = line.strip_prefix("WAITING ") {
    +            (Some(TaskStatus::Waiting), rest)
    +        } else if let Some(rest) = line.strip_prefix("CANCELLED ") {
    +            (Some(TaskStatus::Cancelled), rest)
    +        } else {
    +            (None, line)
    +        }
    +    }
    +
    +    fn extract_tags(line: &str) -> (Vec<String>, String) {
    +        let tag_regex = Regex::new(r"#(\w+)").unwrap();
    +        let mut tags = Vec::new();
    +        let mut result = line.to_string();
    +
    +        for cap in tag_regex.captures_iter(line) {
    +            if let Some(tag) = cap.get(1) {
    +                tags.push(tag.as_str().to_string());
    +                result = result.replace(&format!("#{}", tag.as_str()), "");
    +            }
    +        }
    +
    +        (tags, result.trim().to_string())
    +    }
    +
    +    fn extract_properties(line: &str) -> (HashMap<String, String>, String) {
    +        let prop_regex = Regex::new(r"(\w+)::\s*([^\n]+)").unwrap();
    +        let mut props = HashMap::new();
    +        let mut result = line.to_string();
    +
    +        for cap in prop_regex.captures_iter(line) {
    +            if let (Some(key), Some(value)) = (cap.get(1), cap.get(2)) {
    +                props.insert(key.as_str().to_string(), value.as_str().trim().to_string());
    +                result = result.replace(&cap[0], "");
    +            }
    +        }
    +
    +        (props, result.trim().to_string())
    +    }
    +
    +    fn extract_block_refs(line: &str) -> (Vec<String>, String) {
    +        let ref_regex = Regex::new(r"\(\(([^)]+)\)\)").unwrap();
    +        let mut refs = Vec::new();
    +        let mut result = line.to_string();
    +
    +        for cap in ref_regex.captures_iter(line) {
    +            if let Some(uuid) = cap.get(1) {
    +                refs.push(uuid.as_str().to_string());
    +                result = result.replace(&cap[0], "");
    +            }
    +        }
    +
    +        (refs, result.trim().to_string())
    +    }
    +
    +    fn extract_page_refs(line: &str) -> (Vec<String>, String) {
    +        let page_regex = Regex::new(r"\[\[([^\]]+)\]\]").unwrap();
    +        let mut pages = Vec::new();
    +        let result = line.to_string();
    +
    +        for cap in page_regex.captures_iter(line) {
    +            if let Some(page) = cap.get(1) {
    +                pages.push(page.as_str().to_string());
    +                // Keep [[page]] in content for now (backward compat)
    +            }
    +        }
    +
    +        (pages, result)
    +    }
    +}
    +
    +fn count_indent(line: &str) -> usize {
    +    line.chars().take_while(|c| c.is_whitespace()).count() / 2
    +}
    +}
    +

    Phase 4: Logseq Import/Export

    +
    #![allow(unused)]
    +fn main() {
    +// crates/kb-core/src/logseq.rs
    +
    +use crate::models::{Node, NodeType};
    +use crate::models::block::Block;
    +use crate::parser::BlockParser;
    +
    +pub struct LogseqImporter;
    +
    +impl LogseqImporter {
    +    /// Import a Logseq page (markdown file) as a Node
    +    pub fn import_page(path: &Path) -> Result<Node> {
    +        let content = std::fs::read_to_string(path)?;
    +
    +        // Extract frontmatter if present
    +        let (frontmatter, body) = Self::split_frontmatter(&content);
    +
    +        // Parse blocks from body
    +        let blocks = BlockParser::parse(&body)?;
    +
    +        // Create node with blocks
    +        let mut node = Node::new(NodeType::Note, Self::extract_title(path));
    +        node.content = body;
    +        node.blocks = Some(blocks);
    +
    +        // Apply frontmatter properties
    +        if let Some(fm) = frontmatter {
    +            Self::apply_frontmatter(&mut node, &fm)?;
    +        }
    +
    +        Ok(node)
    +    }
    +
    +    fn split_frontmatter(content: &str) -> (Option<String>, String) {
    +        if content.starts_with("---\n") {
    +            if let Some(end) = content[4..].find("\n---\n") {
    +                let frontmatter = content[4..4 + end].to_string();
    +                let body = content[4 + end + 5..].to_string();
    +                return (Some(frontmatter), body);
    +            }
    +        }
    +        (None, content.to_string())
    +    }
    +
    +    fn extract_title(path: &Path) -> String {
    +        path.file_stem()
    +            .and_then(|s| s.to_str())
    +            .unwrap_or("Untitled")
    +            .to_string()
    +    }
    +
    +    fn apply_frontmatter(node: &mut Node, frontmatter: &str) -> Result<()> {
    +        // Parse YAML frontmatter and apply to node
    +        // ... implementation ...
    +        Ok(())
    +    }
    +}
    +
    +pub struct LogseqExporter;
    +
    +impl LogseqExporter {
    +    /// Export a Node to Logseq page format
    +    pub fn export_page(node: &Node, path: &Path) -> Result<()> {
    +        let mut output = String::new();
    +
    +        // Generate frontmatter
    +        output.push_str("---\n");
    +        output.push_str(&Self::generate_frontmatter(node)?);
    +        output.push_str("---\n\n");
    +
    +        // Serialize blocks or use content
    +        if let Some(ref blocks) = node.blocks {
    +            output.push_str(&BlockParser::serialize(blocks));
    +        } else {
    +            output.push_str(&node.content);
    +        }
    +
    +        std::fs::write(path, output)?;
    +        Ok(())
    +    }
    +
    +    fn generate_frontmatter(node: &Node) -> Result<String> {
    +        let mut fm = String::new();
    +        fm.push_str(&format!("title: {}\n", node.title));
    +        fm.push_str(&format!("tags: {}\n", node.tags.join(", ")));
    +        // ... more frontmatter fields ...
    +        Ok(fm)
    +    }
    +}
    +}
    +

    Query API Extensions

    +
    #![allow(unused)]
    +fn main() {
    +// New methods in Graph or Query module
    +
    +impl Graph {
    +    /// Find all blocks with a specific tag across all nodes
    +    pub fn find_blocks_by_tag(&mut self, tag: &str) -> Vec<(&Node, &Block)> {
    +        let mut results = Vec::new();
    +        for node in self.nodes.values_mut() {
    +            if let Ok(blocks) = node.find_blocks_by_tag(tag) {
    +                for block in blocks {
    +                    results.push((node as &Node, block));
    +                }
    +            }
    +        }
    +        results
    +    }
    +
    +    /// Find all flashcards (#card blocks)
    +    pub fn find_flashcards(&mut self) -> Vec<(&Node, &Block)> {
    +        self.find_blocks_by_tag("card")
    +    }
    +
    +    /// Find all TODO items across knowledge base
    +    pub fn find_all_todos(&mut self) -> Vec<(&Node, &Block)> {
    +        let mut results = Vec::new();
    +        for node in self.nodes.values_mut() {
    +            if let Ok(todos) = node.find_todos() {
    +                for block in todos {
    +                    results.push((node as &Node, block));
    +                }
    +            }
    +        }
    +        results
    +    }
    +}
    +}
    +

    MCP Tool Extensions

    +
    {
    +  "name": "kogral/find_blocks",
    +  "description": "Find blocks by tag, status, or properties",
    +  "inputSchema": {
    +    "type": "object",
    +    "properties": {
    +      "tag": { "type": "string", "description": "Filter by tag (e.g., 'card')" },
    +      "status": { "type": "string", "enum": ["TODO", "DONE", "DOING"] },
    +      "property": { "type": "string", "description": "Custom property key" },
    +      "value": { "type": "string", "description": "Property value to match" }
    +    }
    +  }
    +}
    +
    +

    Configuration

    +
    # schemas/kb/contracts.ncl (additions)
    +
    +BlockConfig = {
    +  enabled | Bool
    +    | doc "Enable block-level parsing and storage"
    +    | default = true,
    +
    +  preserve_hierarchy | Bool
    +    | doc "Preserve block nesting on import/export"
    +    | default = true,
    +
    +  parse_on_load | Bool
    +    | doc "Automatically parse blocks when loading nodes"
    +    | default = false,  # Lazy parsing by default
    +
    +  supported_statuses | Array String
    +    | doc "Supported task statuses"
    +    | default = ["TODO", "DONE", "DOING", "LATER", "NOW", "WAITING", "CANCELLED"],
    +}
    +
    +KbConfig = {
    +  # ... existing fields ...
    +
    +  blocks | BlockConfig
    +    | doc "Block-level features configuration"
    +    | default = {},
    +}
    +
    +

    Migration Path

    +

    Phase 1: Add Block models (no behavior change) +Phase 2: Add BlockParser (opt-in via config) +Phase 3: Update Logseq import/export +Phase 4: Add block queries to CLI/MCP +Phase 5: SurrealDB block indexing

    +

    Backward Compatibility:

    +
      +
    • Existing nodes without blocks field work as before
    • +
    • content remains source of truth
    • +
    • blocks is optional cache/structure
    • +
    • Config flag blocks.enabled to opt-in
    • +
    +

    Testing Strategy

    +
    #![allow(unused)]
    +fn main() {
    +#[cfg(test)]
    +mod tests {
    +    use super::*;
    +
    +    #[test]
    +    fn test_parse_simple_block() {
    +        let content = "- This is a block #card";
    +        let blocks = BlockParser::parse(content).unwrap();
    +
    +        assert_eq!(blocks.len(), 1);
    +        assert_eq!(blocks[0].content, "This is a block");
    +        assert_eq!(blocks[0].properties.tags, vec!["card"]);
    +    }
    +
    +    #[test]
    +    fn test_parse_nested_blocks() {
    +        let content = r#"
    +- Parent block
    +  - Child block 1
    +  - Child block 2
    +    - Grandchild
    +"#;
    +        let blocks = BlockParser::parse(content).unwrap();
    +
    +        assert_eq!(blocks.len(), 1);
    +        assert_eq!(blocks[0].children.len(), 2);
    +        assert_eq!(blocks[0].children[1].children.len(), 1);
    +    }
    +
    +    #[test]
    +    fn test_parse_todo() {
    +        let content = "- TODO Implement feature #rust";
    +        let blocks = BlockParser::parse(content).unwrap();
    +
    +        assert_eq!(blocks[0].properties.status, Some(TaskStatus::Todo));
    +        assert_eq!(blocks[0].content, "Implement feature");
    +        assert_eq!(blocks[0].properties.tags, vec!["rust"]);
    +    }
    +
    +    #[test]
    +    fn test_roundtrip() {
    +        let original = r#"- Block 1 #card
    +  - Nested
    +- TODO Block 2
    +  priority:: high
    +"#;
    +        let blocks = BlockParser::parse(original).unwrap();
    +        let serialized = BlockParser::serialize(&blocks);
    +        let reparsed = BlockParser::parse(&serialized).unwrap();
    +
    +        assert_eq!(blocks.len(), reparsed.len());
    +        assert_eq!(blocks[0].properties, reparsed[0].properties);
    +    }
    +}
    +}
    +

    Summary

    +

    Recommended Approach: Hybrid (Option C)

    +
      +
    • Add Block struct with properties, hierarchy
    • +
    • Extend Node with optional blocks: Option<Vec<Block>>
    • +
    • Implement bidirectional parser (markdown ↔ blocks)
    • +
    • Preserve content as source of truth (backward compat)
    • +
    • Enable block queries in CLI/MCP
    • +
    • Support round-trip Logseq import/export
    • +
    +

    Benefits:

    +
      +
    • ✅ Full Logseq compatibility
    • +
    • ✅ Queryable blocks (find #card, TODO, etc.)
    • +
    • ✅ Backward compatible
    • +
    • ✅ Extensible (custom properties)
    • +
    • ✅ Type-safe structure
    • +
    +

    Trade-offs:

    +
      +
    • ⚠️ Added complexity
    • +
    • ⚠️ Need to sync content ↔ blocks
    • +
    • ⚠️ More storage for SurrealDB backend
    • +
    +

    Next Steps:

    +
      +
    1. Review and approve design
    2. +
    3. Implement Phase 1 (Block models)
    4. +
    5. Implement Phase 2 (BlockParser)
    6. +
    7. Update Logseq import/export
    8. +
    9. Add block queries to MCP/CLI
    10. +
    +

    ADR-001: Nickel vs TOML for Configuration

    +

    Status: Accepted

    +

    Date: 2026-01-17

    +

    Deciders: Architecture Team

    +

    Context: Configuration Strategy for Knowledge Base System

    +
    +

    Context

    +

    The KOGRAL requires a flexible, type-safe configuration format that supports:

    +
      +
    1. Complex nested structures (graph settings, storage configs, embedding providers)
    2. +
    3. Type validation (prevent runtime errors from config mistakes)
    4. +
    5. Composition and inheritance (shared configs, environment-specific overrides)
    6. +
    7. Documentation (self-documenting schemas)
    8. +
    9. Validation before runtime (catch errors early)
    10. +
    +

    We evaluated two primary options:

    +

    Option 1: TOML (Traditional Config Format)

    +

    Pros:

    +
      +
    • Widely adopted in Rust ecosystem (Cargo.toml)
    • +
    • Simple, human-readable syntax
    • +
    • Native serde support
    • +
    • IDE support (syntax highlighting, completion)
    • +
    +

    Cons:

    +
      +
    • No type system (validation only at runtime)
    • +
    • Limited composition (no imports, no functions)
    • +
    • No schema validation (errors discovered during execution)
    • +
    • Verbose for complex nested structures
    • +
    • No documentation in config files
    • +
    +

    Example TOML:

    +
    [graph]
    +name = "my-project"
    +version = "1.0.0"
    +
    +[storage]
    +primary = "filesystem"  # String, not validated as enum
    +
    +[storage.secondary]
    +enabled = true
    +type = "surrealdb"  # Typo would fail at runtime
    +url = "ws://localhost:8000"
    +
    +[embeddings]
    +enabled = true
    +provider = "openai"  # No validation of valid providers
    +model = "text-embedding-3-small"
    +
    +

    Problems:

    +
      +
    • Typos in enum values ("surrealdb" vs "surealdb") fail at runtime
    • +
    • No validation that provider = "openai" requires api_key_env
    • +
    • No documentation of valid options
    • +
    • No way to compose configs (e.g., base config + environment override)
    • +
    +

    Option 2: Nickel (Functional Configuration Language)

    +

    Pros:

    +
      +
    • Type system with contracts (validate before runtime)
    • +
    • Composition via imports and merging
    • +
    • Documentation in schemas (self-documenting)
    • +
    • Validation at export time (catch errors early)
    • +
    • Functions for conditional logic
    • +
    • Default values in schema definitions
    • +
    +

    Cons:

    +
      +
    • Less familiar to Rust developers
    • +
    • Requires separate nickel CLI tool
    • +
    • Smaller ecosystem
    • +
    • Steeper learning curve
    • +
    +

    Example Nickel:

    +
    # schemas/kb-config.ncl
    +{
    +  KbConfig = {
    +    graph | GraphConfig,
    +    storage | StorageConfig,
    +    embeddings | EmbeddingConfig,
    +  },
    +
    +  StorageConfig = {
    +    primary | [| 'filesystem, 'memory |],  # Enum validated at export
    +
    +    secondary | {
    +      enabled | Bool,
    +      type | [| 'surrealdb, 'sqlite |],  # Typos caught immediately
    +      url | String,
    +    } | optional,
    +  },
    +
    +  EmbeddingConfig = {
    +    enabled | Bool,
    +    provider | [| 'openai, 'claude, 'fastembed |],  # Valid providers enforced
    +    model | String,
    +    api_key_env | String | doc "Environment variable for API key",
    +  },
    +}
    +
    +

    Benefits:

    +
      +
    • Typos in enum values caught at nickel export time
    • +
    • Schema enforces required fields based on provider
    • +
    • Documentation embedded in schema
    • +
    • Config can be composed: import "base.ncl" & { /* overrides */ }
    • +
    +
    +

    Decision

    +

    We will use Nickel for configuration.

    +

    Implementation:

    +
      +
    1. Define schemas in schemas/*.ncl with type contracts
    2. +
    3. Users write configs in .kogral/config.ncl
    4. +
    5. Export to JSON via CLI: nickel export --format json config.ncl
    6. +
    7. Load JSON in Rust via serde_json into typed structs
    8. +
    +

    Pattern (double validation):

    +
    Nickel Config (.ncl)
    +    ↓ [nickel export]
    +JSON (validated by Nickel contracts)
    +    ↓ [serde_json::from_str]
    +Rust Struct (validated by serde)
    +    ↓
    +Runtime (guaranteed valid config)
    +
    +

    Bridge Code (kb-core/src/config/nickel.rs):

    +
    #![allow(unused)]
    +fn main() {
    +pub fn load_config<P: AsRef<Path>>(path: P) -> Result<KbConfig> {
    +    // Export Nickel to JSON
    +    let json = export_nickel_to_json(path)?;
    +
    +    // Deserialize to Rust struct
    +    let config: KbConfig = serde_json::from_str(&json)?;
    +
    +    Ok(config)
    +}
    +
    +fn export_nickel_to_json<P: AsRef<Path>>(path: P) -> Result<String> {
    +    let output = Command::new("nickel")
    +        .arg("export")
    +        .arg("--format").arg("json")
    +        .arg(path.as_ref())
    +        .output()?;
    +
    +    Ok(String::from_utf8(output.stdout)?)
    +}
    +}
    +
    +

    Consequences

    +

    Positive

    +

    Type Safety: Config errors caught before runtime

    +
      +
    • Invalid enum values fail at export: 'filesystm → error
    • +
    • Missing required fields detected: no graph.name → error
    • +
    • Type mismatches prevented: enabled = "yes" → error (expects Bool)
    • +
    +

    Self-Documenting: Schemas serve as documentation

    +
      +
    • | doc "Environment variable for API key" describes fields
    • +
    • Enum options visible in schema: [| 'openai, 'claude, 'fastembed |]
    • +
    • Default values explicit: | default = 'filesystem
    • +
    +

    Composition: Config reuse and overrides

    +
    # base.ncl
    +{ graph = { version = "1.0.0" } }
    +
    +# project.ncl
    +import "base.ncl" & { graph = { name = "my-project" } }
    +
    +

    Validation Before Deployment: Catch errors in CI

    +
    # CI pipeline
    +nickel typecheck config.ncl
    +nickel export --format json config.ncl > /dev/null
    +
    +

    Conditional Logic: Environment-specific configs

    +
    let is_prod = std.string.is_match "prod" (std.env.get "ENV") in
    +{
    +  embeddings = {
    +    provider = if is_prod then 'openai else 'fastembed,
    +  },
    +}
    +
    +

    Negative

    +

    Learning Curve: Team must learn Nickel syntax

    +
      +
    • Mitigation: Provide comprehensive examples in config/ directory
    • +
    • Mitigation: Document common patterns in docs/config/
    • +
    +

    Tool Dependency: Requires nickel CLI installed

    +
      +
    • Mitigation: Document installation in setup guide
    • +
    • Mitigation: Check nickel availability in kb init command
    • +
    +

    IDE Support: Limited compared to TOML

    +
      +
    • Mitigation: Use LSP (nickel-lang-lsp) for VSCode/Neovim
    • +
    • Mitigation: Syntax highlighting available for major editors
    • +
    +

    Ecosystem Size: Smaller than TOML

    +
      +
    • Mitigation: Nickel actively developed by Tweag
    • +
    • Mitigation: Stable language specification (v1.0+)
    • +
    +

    Neutral

    +

    Two-Stage Loading: Nickel → JSON → Rust

    +
      +
    • Not a performance concern (config loaded once at startup)
    • +
    • Adds resilience (double validation)
    • +
    • Allows runtime config inspection (read JSON directly)
    • +
    +
    +

    Alternatives Considered

    +

    JSON Schema

    +

    Rejected: Not ergonomic for humans to write

    +
      +
    • No comments
    • +
    • Verbose syntax ({"key": "value"} vs key = value)
    • +
    • JSON Schema separate from config (duplication)
    • +
    +

    YAML

    +

    Rejected: No type system, ambiguous parsing

    +
      +
    • Boolean confusion: yes/no/on/off/true/false
    • +
    • Indentation-sensitive (error-prone)
    • +
    • No validation without external tools
    • +
    +

    Dhall

    +

    Rejected: More complex than needed

    +
      +
    • Turing-incomplete by design (limits use cases)
    • +
    • Smaller ecosystem than Nickel
    • +
    • Steeper learning curve
    • +
    +

    KCL (KusionStack Configuration Language)

    +

    Rejected: Kubernetes-focused, less general-purpose

    +
      +
    • Designed for K8s manifests
    • +
    • Less mature than Nickel for general config
    • +
    +
    +

    Implementation Timeline

    +
      +
    1. ✅ Define base schemas (schemas/kb-config.ncl)
    2. +
    3. ✅ Implement Nickel loader (kb-core/src/config/nickel.rs)
    4. +
    5. ✅ Create example configs (config/defaults.ncl, config/production.ncl)
    6. +
    7. ✅ Document Nickel usage (docs/config/nickel-schemas.md)
    8. +
    9. ⏳ Add LSP recommendations to setup guide
    10. +
    11. ⏳ Create Nickel → TOML migration tool (for existing users)
    12. +
    +
    +

    Monitoring

    +

    Success Criteria:

    +
      +
    • Config errors caught at export time (not runtime)
    • +
    • Users can compose configs for different environments
    • +
    • Team comfortable with Nickel syntax within 2 weeks
    • +
    +

    Metrics:

    +
      +
    • Number of config validation errors caught before runtime
    • +
    • Time to diagnose config issues (should decrease)
    • +
    • User feedback on config complexity
    • +
    +
    +

    References

    + +
    +

    Revision History

    +
    + +
    DateAuthorChange
    2026-01-17Architecture TeamInitial decision
    +
    +
    +

    Next ADR: ADR-002: FastEmbed via AI Providers

    +

    ADR-002: FastEmbed via AI Providers for Embeddings

    +

    Status: Accepted

    +

    Date: 2026-01-17

    +

    Deciders: Architecture Team

    +

    Context: Embedding Strategy for Semantic Search

    +
    +

    Context

    +

    The KOGRAL requires embedding generation for semantic search capabilities. Embeddings convert text into numerical vectors that capture semantic meaning, enabling "find concepts" rather than just "find keywords".

    +

    Requirements:

    +
      +
    1. Local-First Option: Must work offline without external API dependencies
    2. +
    3. Production Scalability: Support cloud AI providers for large-scale deployments
    4. +
    5. Multiple Providers: Flexibility to choose based on cost, quality, privacy
    6. +
    7. Cost-Effective Development: Free local embeddings for development and testing
    8. +
    9. Quality: Good enough embeddings for finding related concepts
    10. +
    +

    Options Evaluated:

    +

    Option 1: Only Local Embeddings (fastembed)

    +

    Pros:

    +
      +
    • No API costs
    • +
    • Works offline
    • +
    • Privacy-preserving (no data leaves machine)
    • +
    • Fast (local GPU acceleration possible)
    • +
    +

    Cons:

    +
      +
    • Limited model quality compared to cloud providers
    • +
    • Resource-intensive (requires download ~100MB models)
    • +
    • Single provider lock-in (fastembed library)
    • +
    +

    Example:

    +
    #![allow(unused)]
    +fn main() {
    +use fastembed::{TextEmbedding, InitOptions};
    +
    +let model = TextEmbedding::try_new(InitOptions {
    +    model_name: "BAAI/bge-small-en-v1.5",
    +    ..Default::default()
    +})?;
    +
    +let embeddings = model.embed(vec!["Hello world"], None)?;
    +// Output: Vec<Vec<f32>> with 384 dimensions
    +}
    +

    Option 2: Only Cloud AI Providers (OpenAI, Claude, etc.)

    +

    Pros:

    +
      +
    • State-of-the-art embedding quality
    • +
    • No local resource usage
    • +
    • Latest models available
    • +
    • Scalable to millions of documents
    • +
    +

    Cons:

    +
      +
    • Requires API keys (cost per embedding)
    • +
    • Network dependency (no offline mode)
    • +
    • Privacy concerns (data sent to third parties)
    • +
    • Vendor lock-in risk
    • +
    +

    Example:

    +
    #![allow(unused)]
    +fn main() {
    +use rig::providers::openai;
    +
    +let client = openai::Client::new("sk-...");
    +let embeddings = client.embeddings("text-embedding-3-small")
    +    .embed_documents(vec!["Hello world"]).await?;
    +// Output: Vec<Vec<f32>> with 1536 dimensions
    +}
    +

    Option 3: Hybrid Strategy (fastembed + AI providers via rig-core)

    +

    Pros:

    +
      +
    • ✅ Best of both worlds: local dev, cloud production
    • +
    • ✅ User choice: privacy-first or quality-first
    • +
    • ✅ Cost flexibility: free for small projects, paid for scale
    • +
    • ✅ Unified interface via rig-core library
    • +
    • ✅ Easy provider switching (config-driven)
    • +
    +

    Cons:

    +
      +
    • ❌ More complex implementation (multiple providers)
    • +
    • ❌ Dimension mismatch between providers (384 vs 1536)
    • +
    • ❌ Additional dependencies (rig-core, fastembed)
    • +
    +
    +

    Decision

    +

    We will use a hybrid strategy: fastembed (local) + AI providers (via rig-core).

    +

    Implementation:

    +
      +
    1. Default: fastembed with BAAI/bge-small-en-v1.5 (384 dimensions)
    2. +
    3. Optional: OpenAI, Claude, Ollama via rig-core (configurable)
    4. +
    5. Interface: EmbeddingProvider trait abstracts provider details
    6. +
    7. Config-Driven: Provider selection via Nickel configuration
    8. +
    +

    Architecture:

    +
    #![allow(unused)]
    +fn main() {
    +#[async_trait]
    +pub trait EmbeddingProvider: Send + Sync {
    +    async fn embed(&self, texts: Vec<String>) -> Result<Vec<Vec<f32>>>;
    +    fn dimensions(&self) -> usize;
    +    fn model_name(&self) -> &str;
    +}
    +
    +// Local implementation
    +pub struct FastEmbedProvider {
    +    model: TextEmbedding,
    +}
    +
    +impl FastEmbedProvider {
    +    pub fn new(model_name: &str) -> Result<Self> {
    +        let model = TextEmbedding::try_new(InitOptions {
    +            model_name: model_name.into(),
    +            ..Default::default()
    +        })?;
    +        Ok(Self { model })
    +    }
    +}
    +
    +#[async_trait]
    +impl EmbeddingProvider for FastEmbedProvider {
    +    async fn embed(&self, texts: Vec<String>) -> Result<Vec<Vec<f32>>> {
    +        Ok(self.model.embed(texts, None)?)
    +    }
    +
    +    fn dimensions(&self) -> usize { 384 }
    +    fn model_name(&self) -> &str { "BAAI/bge-small-en-v1.5" }
    +}
    +
    +// Cloud provider implementation (via rig-core)
    +pub struct RigEmbeddingProvider {
    +    client: rig::Client,
    +    model: String,
    +    dimensions: usize,
    +}
    +
    +#[async_trait]
    +impl EmbeddingProvider for RigEmbeddingProvider {
    +    async fn embed(&self, texts: Vec<String>) -> Result<Vec<Vec<f32>>> {
    +        let embeddings = self.client
    +            .embeddings(&self.model)
    +            .embed_documents(texts)
    +            .await?;
    +        Ok(embeddings)
    +    }
    +
    +    fn dimensions(&self) -> usize { self.dimensions }
    +    fn model_name(&self) -> &str { &self.model }
    +}
    +}
    +

    Configuration (Nickel):

    +
    # Local development (default)
    +{
    +  embeddings = {
    +    enabled = true,
    +    provider = 'fastembed,
    +    model = "BAAI/bge-small-en-v1.5",
    +    dimensions = 384,
    +  },
    +}
    +
    +# Production with OpenAI
    +{
    +  embeddings = {
    +    enabled = true,
    +    provider = 'openai,
    +    model = "text-embedding-3-small",
    +    dimensions = 1536,
    +    api_key_env = "OPENAI_API_KEY",
    +  },
    +}
    +
    +# Self-hosted with Ollama
    +{
    +  embeddings = {
    +    enabled = true,
    +    provider = 'ollama,
    +    model = "nomic-embed-text",
    +    dimensions = 768,
    +  },
    +}
    +
    +

    Provider Selection (kb-core/src/embeddings/mod.rs):

    +
    #![allow(unused)]
    +fn main() {
    +pub fn create_provider(config: &EmbeddingConfig) -> Result<Box<dyn EmbeddingProvider>> {
    +    match config.provider {
    +        EmbeddingProviderType::FastEmbed => {
    +            Ok(Box::new(FastEmbedProvider::new(&config.model)?))
    +        }
    +        EmbeddingProviderType::OpenAI => {
    +            let api_key = std::env::var(&config.api_key_env)?;
    +            Ok(Box::new(RigEmbeddingProvider::new_openai(api_key, &config.model)?))
    +        }
    +        EmbeddingProviderType::Claude => {
    +            let api_key = std::env::var(&config.api_key_env)?;
    +            Ok(Box::new(RigEmbeddingProvider::new_claude(api_key, &config.model)?))
    +        }
    +        EmbeddingProviderType::Ollama => {
    +            Ok(Box::new(RigEmbeddingProvider::new_ollama(&config.model)?))
    +        }
    +    }
    +}
    +}
    +
    +

    Consequences

    +

    Positive

    +

    Development Flexibility:

    +
      +
    • Developers can use fastembed without API keys
    • +
    • Fast feedback loop (local embeddings, no network calls)
    • +
    • Works offline (train trips, flights)
    • +
    +

    Production Quality:

    +
      +
    • Production deployments can use OpenAI/Claude for better quality
    • +
    • Latest embedding models available
    • +
    • Scalable to millions of documents
    • +
    +

    Privacy Control:

    +
      +
    • Privacy-sensitive projects use local embeddings
    • +
    • Public projects can use cloud providers
    • +
    • User choice via configuration
    • +
    +

    Cost Optimization:

    +
      +
    • Small projects: free (fastembed)
    • +
    • Large projects: pay for quality (cloud providers)
    • +
    • Hybrid: important docs via cloud, bulk via local
    • +
    +

    Unified Interface:

    +
      +
    • EmbeddingProvider trait abstracts provider details
    • +
    • Query code doesn't know/care about provider
    • +
    • Easy to add new providers
    • +
    +

    Negative

    +

    Dimension Mismatch:

    +
      +
    • fastembed: 384 dimensions
    • +
    • OpenAI: 1536 dimensions
    • +
    • Cannot mix in same index
    • +
    +

    Mitigation:

    +
      +
    • Store provider + dimensions in node metadata
    • +
    • Rebuild index when changing providers
    • +
    • Document dimension constraints
    • +
    +

    Model Download:

    +
      +
    • First use of fastembed downloads ~100MB model
    • +
    • Slow initial startup
    • +
    +

    Mitigation:

    +
      +
    • Pre-download in Docker images
    • +
    • Document model download in setup guide
    • +
    • Cache models in ~/.cache/fastembed
    • +
    +

    Complex Configuration:

    +
      +
    • Multiple provider options may confuse users
    • +
    +

    Mitigation:

    +
      +
    • Sane default (fastembed)
    • +
    • Clear examples for each provider
    • +
    • Validation errors explain misconfigurations
    • +
    +

    Neutral

    +

    Dependency Trade-off:

    +
      +
    • fastembed adds ~5MB to binary
    • +
    • rig-core adds ~2MB
    • +
    • Total: ~7MB overhead
    • +
    +

    Not a concern for CLI/MCP server use case.

    +
    +

    Provider Comparison

    +
    + + + + +
    ProviderDimensionsQualityCostPrivacyOffline
    fastembed384GoodFree✅ Local✅ Yes
    OpenAI1536Excellent$0.0001/1K❌ Cloud❌ No
    Claude1024Excellent$0.00025/1K❌ Cloud❌ No
    Ollama768Very GoodFree✅ Local✅ Yes
    +
    +

    Recommendation by Use Case:

    +
      +
    • Development: fastembed (fast, free, offline)
    • +
    • Small Teams: fastembed or Ollama (privacy, no costs)
    • +
    • Enterprise: OpenAI or Claude (best quality, scalable)
    • +
    • Self-Hosted: Ollama (good quality, local control)
    • +
    +
    +

    Implementation Timeline

    +
      +
    1. ✅ Define EmbeddingProvider trait
    2. +
    3. ✅ Implement FastEmbedProvider (stub, feature-gated)
    4. +
    5. ✅ Implement RigEmbeddingProvider (stub, feature-gated)
    6. +
    7. ⏳ Complete FastEmbed integration with model download
    8. +
    9. ⏳ Complete rig-core integration (OpenAI, Claude, Ollama)
    10. +
    11. ⏳ Add query engine with similarity search
    12. +
    13. ⏳ Document provider selection and trade-offs
    14. +
    +
    +

    Monitoring

    +

    Success Criteria:

    +
      +
    • Users can switch providers via config change
    • +
    • Local embeddings work without API keys
    • +
    • Production deployments use cloud providers successfully
    • +
    • Query quality acceptable for both local and cloud embeddings
    • +
    +

    Metrics:

    +
      +
    • Embedding generation latency (local vs cloud)
    • +
    • Query accuracy (precision@10 for semantic search)
    • +
    • API costs (cloud providers)
    • +
    • User satisfaction (feedback on search quality)
    • +
    +
    +

    References

    + +
    +

    Revision History

    +
    + +
    DateAuthorChange
    2026-01-17Architecture TeamInitial decision
    +
    +
    +

    Previous ADR: ADR-001: Nickel vs TOML +Next ADR: ADR-003: Hybrid Storage Strategy

    +

    ADR-003: Hybrid Storage Strategy

    +

    Status: Accepted

    +

    Date: 2026-01-17

    +

    Deciders: Architecture Team

    +

    Context: Storage Backend Strategy for Knowledge Base

    +
    +

    Context

    +

    The KOGRAL needs to store knowledge graphs with these requirements:

    +
      +
    1. Git-Friendly: Knowledge should version alongside code
    2. +
    3. Scalable: Support small projects (10s of nodes) to large organizations (10,000+ nodes)
    4. +
    5. Queryable: Efficient graph queries and relationship traversal
    6. +
    7. Offline-Capable: Work without network access
    8. +
    9. Collaborative: Support shared organizational knowledge
    10. +
    11. Cost-Effective: Free for small projects, reasonable cost at scale
    12. +
    +

    Constraints:

    +
      +
    • Developers want to edit knowledge in text editors
    • +
    • Organizations want centralized guideline management
    • +
    • Git workflows essential for code-adjacent knowledge
    • +
    • Large graphs need database performance
    • +
    +

    Option 1: Filesystem Only

    +

    Approach: Store everything as markdown files

    +

    Pros:

    +
      +
    • ✅ Git-native (perfect for versioning)
    • +
    • ✅ Text editor friendly
    • +
    • ✅ No dependencies
    • +
    • ✅ Works offline
    • +
    • ✅ Free
    • +
    +

    Cons:

    +
      +
    • ❌ Poor performance for large graphs (100 0+ nodes)
    • +
    • ❌ No efficient graph queries
    • +
    • ❌ Difficult to share across projects
    • +
    • ❌ Manual sync for collaboration
    • +
    +

    Scalability: Good for < 100 nodes, poor beyond

    +

    Option 2: Database Only (SurrealDB)

    +

    Approach: Store all knowledge in SurrealDB graph database

    +

    Pros:

    +
      +
    • ✅ Excellent query performance
    • +
    • ✅ Native graph relationships
    • +
    • ✅ Scalable to millions of nodes
    • +
    • ✅ Centralized for collaboration
    • +
    +

    Cons:

    +
      +
    • ❌ Not git-trackable
    • +
    • ❌ Requires running database server
    • +
    • ❌ Can't edit with text editor
    • +
    • ❌ Network dependency
    • +
    • ❌ Infrastructure cost
    • +
    +

    Scalability: Excellent, but loses developer workflow benefits

    +

    Option 3: Hybrid (Filesystem + SurrealDB)

    +

    Approach: Filesystem for local project knowledge, SurrealDB for shared organizational knowledge

    +

    Pros:

    +
      +
    • ✅ Git-friendly for project knowledge
    • +
    • ✅ Text editor friendly
    • +
    • ✅ Scalable for shared knowledge
    • +
    • ✅ Works offline (local graph)
    • +
    • ✅ Collaborative (shared graph)
    • +
    • ✅ Cost-effective (DB only for shared)
    • +
    +

    Cons:

    +
      +
    • ❌ More complex implementation
    • +
    • ❌ Sync mechanism needed
    • +
    • ❌ Two storage systems to manage
    • +
    +

    Scalability: Excellent - best of both worlds

    +
    +

    Decision

    +

    We will use a hybrid storage strategy: Filesystem (local) + SurrealDB (shared).

    +

    Architecture:

    +
    ┌─────────────────────────────────────────────────────────────┐
    +│                    Project A (.kogral/)                          │
    +│  Storage: Filesystem (git-tracked)                          │
    +│  Scope: Project-specific notes, decisions, patterns         │
    +│  Access: Local only                                         │
    +└──────────────────┬──────────────────────────────────────────┘
    +                   │
    +                   │ [inherits]
    +                   ↓
    +┌─────────────────────────────────────────────────────────────┐
    +│           Shared KB (SurrealDB or synced filesystem)         │
    +│  Storage: SurrealDB (scalable) or filesystem (synced)       │
    +│  Scope: Organization-wide guidelines, patterns              │
    +│  Access: All projects                                       │
    +└─────────────────────────────────────────────────────────────┘
    +
    +

    Implementation:

    +
    # Project config
    +{
    +  storage = {
    +    primary = 'filesystem,  # Local project knowledge
    +    secondary = {
    +      enabled = true,
    +      type = 'surrealdb,   # Shared knowledge
    +      url = "ws://kb-central.company.com:8000",
    +      namespace = "organization",
    +      database = "shared-kb",
    +    },
    +  },
    +
    +  inheritance = {
    +    base = "surrealdb://organization/shared-kb",  # Inherit from shared
    +    priority = 100,  # Project overrides shared
    +  },
    +}
    +
    +

    Sync Strategy:

    +
    .kogral/ (Filesystem)
    +    ↓ [on save]
    +Watch for changes
    +    ↓ [debounced]
    +Sync to SurrealDB
    +    ↓
    +Shared graph updated
    +    ↓ [on query]
    +Merge local + shared results
    +
    +
    +

    Consequences

    +

    Positive

    +

    Developer Workflow Preserved:

    +
    # Local knowledge workflow (unchanged)
    +vim .kogral/notes/my-note.md
    +git add .kogral/notes/my-note.md
    +git commit -m "Add implementation note"
    +git push
    +
    +

    Git Integration:

    +
      +
    • Project knowledge versioned with code
    • +
    • Branches include relevant knowledge
    • +
    • Merges resolve knowledge conflicts
    • +
    • PR reviews include knowledge changes
    • +
    +

    Offline Development:

    +
      +
    • Full functionality without network
    • +
    • Shared guidelines cached locally
    • +
    • Sync when reconnected
    • +
    +

    Scalability:

    +
      +
    • Projects: filesystem (100s of nodes, fine performance)
    • +
    • Organization: SurrealDB (10,000+ nodes, excellent performance)
    • +
    +

    Collaboration:

    +
      +
    • Shared guidelines accessible to all projects
    • +
    • Updates to shared knowledge propagate automatically
    • +
    • Consistent practices across organization
    • +
    +

    Cost-Effective:

    +
      +
    • Small projects: free (filesystem only)
    • +
    • Organizations: SurrealDB for shared only (not all project knowledge)
    • +
    +

    Gradual Adoption:

    +
      +
    • Start with filesystem only
    • +
    • Add SurrealDB when needed
    • +
    • Feature-gated (--features surrealdb)
    • +
    +

    Negative

    +

    Complexity:

    +
      +
    • Two storage implementations
    • +
    • Sync mechanism required
    • +
    • Conflict resolution needed
    • +
    +

    Mitigation:

    +
      +
    • Storage trait abstracts differences
    • +
    • Sync is optional (can disable)
    • +
    • Conflicts rare (guidelines change infrequently)
    • +
    +

    Sync Latency:

    +
      +
    • Changes to shared KB not instant in all projects
    • +
    +

    Mitigation:

    +
      +
    • Acceptable latency (guidelines don't change rapidly)
    • +
    • Manual sync command available (kb sync)
    • +
    • Auto-sync on query (fetch latest)
    • +
    +

    Infrastructure Requirement:

    +
      +
    • SurrealDB server needed for shared KB
    • +
    +

    Mitigation:

    +
      +
    • Optional (can use synced filesystem instead)
    • +
    • Docker Compose for easy setup
    • +
    • Managed SurrealDB Cloud option
    • +
    +

    Neutral

    +

    Storage Trait Implementation:

    +
    #![allow(unused)]
    +fn main() {
    +#[async_trait]
    +pub trait Storage {
    +    async fn save_graph(&self, graph: &Graph) -> Result<()>;
    +    async fn load_graph(&self, name: &str) -> Result<Graph>;
    +    async fn list_graphs(&self) -> Result<Vec<String>>;
    +}
    +
    +// Three implementations
    +impl Storage for FilesystemStorage { /* ... */ }
    +impl Storage for SurrealDbStorage { /* ... */ }
    +impl Storage for MemoryStorage { /* ... */ }
    +}
    +

    Abstraction makes multi-backend manageable.

    +
    +

    Use Cases

    +

    Small Project (Solo Developer)

    +

    Config:

    +
    { storage = { primary = 'filesystem } }
    +
    +

    Behavior:

    +
      +
    • All knowledge in .kogral/ directory
    • +
    • Git-tracked with code
    • +
    • No database required
    • +
    • Works offline
    • +
    +

    Medium Project (Team)

    +

    Config:

    +
    {
    +  storage = {
    +    primary = 'filesystem,
    +    secondary = {
    +      enabled = true,
    +      type = 'surrealdb,
    +      url = "ws://team-kb.local:8000",
    +    },
    +  },
    +}
    +
    +

    Behavior:

    +
      +
    • Project knowledge in .kogral/ (git-tracked)
    • +
    • Shared team patterns in SurrealDB
    • +
    • Automatic sync
    • +
    • Offline fallback to cached
    • +
    +

    Large Organization

    +

    Config:

    +
    {
    +  storage = {
    +    primary = 'filesystem,
    +    secondary = {
    +      enabled = true,
    +      type = 'surrealdb,
    +      url = "ws://kb.company.com:8000",
    +      namespace = "engineering",
    +      database = "shared-kb",
    +    },
    +  },
    +
    +  inheritance = {
    +    base = "surrealdb://engineering/shared-kb",
    +    guidelines = [
    +      "surrealdb://engineering/rust-guidelines",
    +      "surrealdb://engineering/security-policies",
    +    ],
    +  },
    +}
    +
    +

    Behavior:

    +
      +
    • Project-specific in .kogral/
    • +
    • Organization guidelines in SurrealDB
    • +
    • Security policies enforced
    • +
    • Automatic guideline updates
    • +
    +
    +

    Sync Mechanism

    +

    Filesystem → SurrealDB

    +

    Trigger: File changes detected (via notify crate)

    +

    Process:

    +
      +
    1. Parse changed markdown file
    2. +
    3. Convert to Node struct
    4. +
    5. Upsert to SurrealDB
    6. +
    7. Update relationships
    8. +
    +

    Debouncing: 500ms (configurable)

    +

    SurrealDB → Filesystem

    +

    Trigger: Query for shared knowledge

    +

    Process:

    +
      +
    1. Query SurrealDB for shared nodes
    2. +
    3. Cache locally (in-memory or filesystem)
    4. +
    5. Merge with local results
    6. +
    7. Return combined
    8. +
    +

    Caching: TTL-based (5 minutes default)

    +

    Conflict Resolution

    +

    Strategy: Last-write-wins with version tracking

    +

    Example:

    +
    Project A: Updates shared guideline (v1 → v2)
    +Project B: Has cached v1
    +
    +On Project B query:
    +  - Detects v2 available
    +  - Fetches v2
    +  - Updates cache
    +  - Uses v2 going forward
    +
    +
    +

    Alternatives Considered

    +

    Git Submodules for Shared Knowledge

    +

    Rejected: Cumbersome workflow

    +
      +
    • Requires manual submodule update
    • +
    • Merge conflicts in shared submodule
    • +
    • Not discoverable (need to know submodule exists)
    • +
    +

    Syncthing for Filesystem Sync

    +

    Rejected: Not designed for this use case

    +
      +
    • No query optimization
    • +
    • No relationship indexes
    • +
    • Sync conflicts difficult to resolve
    • +
    +

    PostgreSQL with JSON

    +

    Rejected: Not a graph database

    +
      +
    • Poor graph query performance
    • +
    • Relationship traversal requires complex SQL joins
    • +
    • No native graph features
    • +
    +
    +

    Migration Path

    +

    Phase 1: Filesystem Only (Current)

    +
      +
    • All storage via filesystem
    • +
    • Git-tracked
    • +
    • No database required
    • +
    +

    Phase 2: Optional SurrealDB

    +
      +
    • Add SurrealDB support (feature-gated)
    • +
    • Manual sync command
    • +
    • Shared KB opt-in
    • +
    +

    Phase 3: Automatic Sync

    +
      +
    • File watching
    • +
    • Auto-sync on changes
    • +
    • Background sync
    • +
    +

    Phase 4: Multi-Tenant SurrealDB

    +
      +
    • Organization namespaces
    • +
    • Access control
    • +
    • Audit logs
    • +
    +
    +

    Monitoring

    +

    Success Criteria:

    +
      +
    • Developers don't notice hybrid complexity
    • +
    • Sync completes < 1 second for typical changes
    • +
    • Shared guidelines accessible in < 100ms
    • +
    • Zero data loss in sync
    • +
    +

    Metrics:

    +
      +
    • Sync latency (P50, P95, P99)
    • +
    • Cache hit rate (shared knowledge)
    • +
    • Conflict rate (expect < 0.1%)
    • +
    • User satisfaction
    • +
    +
    +

    References

    + +
    +

    Revision History

    +
    + +
    DateAuthorChange
    2026-01-17Architecture TeamInitial decision
    +
    +
    +

    Previous ADR: ADR-002: FastEmbed via AI Providers +Next ADR: ADR-004: Logseq Compatibility

    +

    ADR-004: Logseq Blocks Support

    +

    Status

    +

    Proposed (Design phase)

    +

    Context

    +

    Logseq uses content blocks as the fundamental unit of information, not full documents. KB currently treats Node.content as flat markdown string, which loses block-level features on import/export:

    +

    Lost features:

    +
      +
    • Block properties (#card, TODO, custom properties)
    • +
    • Block hierarchy (outliner nesting)
    • +
    • Block references (((block-uuid)))
    • +
    • Block-level queries (find all flashcards, TODOs)
    • +
    +

    User requirement: Round-trip Logseq import/export with full fidelity:

    +
    Logseq → KOGRAL Import → KOGRAL Storage → KOGRAL Export → Logseq
    +  (blocks preserved at every step)
    +
    +

    Decision

    +

    Implement Hybrid Block Support (structured + markdown):

    +

    1. Add Block Data Structure

    +
    #![allow(unused)]
    +fn main() {
    +pub struct Block {
    +    pub id: String,                   // UUID
    +    pub content: String,              // Block text
    +    pub properties: BlockProperties,  // Tags, status, custom
    +    pub children: Vec<Block>,         // Nested blocks
    +    // ... timestamps ...
    +}
    +
    +pub struct BlockProperties {
    +    pub tags: Vec<String>,            // #card, #important
    +    pub status: Option<TaskStatus>,   // TODO, DONE, etc.
    +    pub custom: HashMap<String, String>, // property:: value
    +    pub block_refs: Vec<String>,      // ((uuid))
    +    pub page_refs: Vec<String>,       // [[page]]
    +}
    +}
    +

    2. Extend Node Model

    +
    #![allow(unused)]
    +fn main() {
    +pub struct Node {
    +    // ... existing fields ...
    +    pub content: String,              // Source of truth (markdown)
    +    pub blocks: Option<Vec<Block>>,   // Cached structure (optional)
    +}
    +}
    +

    3. Bidirectional Parser

    +
      +
    • Parse: Markdown → Vec<Block> (lazy, on-demand)
    • +
    • Serialize: Vec<Block> → Markdown (for export)
    • +
    +

    4. Storage Strategy

    +

    Filesystem (git-friendly, Logseq-compatible):

    +
    - Block 1 #card
    +  - Nested answer
    +- TODO Block 2
    +  priority:: high
    +
    +

    SurrealDB (queryable):

    +
    DEFINE TABLE block;
    +DEFINE FIELD node_id ON block TYPE record(node);
    +DEFINE FIELD block_id ON block TYPE string;
    +DEFINE FIELD properties ON block TYPE object;
    +DEFINE INDEX block_tags ON block COLUMNS properties.tags;
    +
    +

    5. Query Extensions

    +
    #![allow(unused)]
    +fn main() {
    +// Find all flashcards
    +graph.find_blocks_by_tag("card")
    +
    +// Find all TODOs
    +graph.find_all_todos()
    +
    +// Find blocks with custom property
    +node.find_blocks_by_property("priority", "high")
    +}
    +

    Consequences

    +

    Positive

    +

    Full Logseq Compatibility - Import/export preserves all block features +✅ Queryable Blocks - Find #card, TODO, custom properties across KOGRAL +✅ Backward Compatible - Existing nodes without blocks still work +✅ Type-Safe - Structured data instead of regex parsing everywhere +✅ Extensible - Custom block properties supported +✅ Hierarchy Preserved - Nested blocks maintain parent-child relationships

    +

    Negative

    +

    ⚠️ Added Complexity - New data structures, parser, sync logic +⚠️ Dual Representation - Must keep content and blocks in sync +⚠️ Storage Overhead - SurrealDB stores both markdown and structure +⚠️ Migration Required - Existing data needs parsing to populate blocks

    +

    Neutral

    +

    ⚙️ Lazy Parsing - Blocks parsed on-demand (not stored by default) +⚙️ Opt-In - Config flag blocks.enabled to activate features +⚙️ Gradual Adoption - Can implement in phases

    +

    Implementation Phases

    +

    Phase 1: Foundation (No behavior change)

    +
      +
    • Add Block struct to models/block.rs
    • +
    • Add optional blocks field to Node
    • +
    • Add config: blocks.enabled = false (default off)
    • +
    +

    Phase 2: Parser

    +
      +
    • Implement BlockParser::parse() (markdown → blocks)
    • +
    • Implement BlockParser::serialize() (blocks → markdown)
    • +
    • Add Node::get_blocks() method (lazy parsing)
    • +
    +

    Phase 3: Logseq Integration

    +
      +
    • Update LogseqImporter to parse blocks
    • +
    • Update LogseqExporter to serialize blocks
    • +
    • Test round-trip (Logseq → KB → Logseq)
    • +
    +

    Phase 4: Query API

    +
      +
    • Add Graph::find_blocks_by_tag()
    • +
    • Add Graph::find_all_todos()
    • +
    • Add Node::find_blocks_by_property()
    • +
    +

    Phase 5: MCP/CLI Integration

    +
      +
    • Add kb/find_blocks MCP tool
    • +
    • Add kb find-cards CLI command
    • +
    • Add kb find-todos CLI command
    • +
    +

    Phase 6: SurrealDB Backend

    +
      +
    • Create block table schema
    • +
    • Index on tags, status, properties
    • +
    • Store blocks alongside nodes
    • +
    +

    Alternatives Considered

    +

    Alternative 1: Blocks as First-Class Nodes

    +

    Convert each Logseq block to a separate KOGRAL Node.

    +

    Rejected: Too granular, explosion of nodes, loses document context.

    +

    Alternative 2: Parser-Only (No Storage)

    +

    Keep content: String, parse blocks on every access.

    +

    Rejected: Can't query blocks in database, parse overhead, can't index.

    +

    Alternative 3: Metadata Field

    +

    Store blocks in metadata: HashMap<String, Value>.

    +

    Rejected: Not type-safe, harder to query, no schema validation.

    +

    References

    + +

    Notes

    +

    Backward Compatibility Strategy:

    +
      +
    • content remains source of truth
    • +
    • blocks is optional enhancement
    • +
    • Old code works unchanged
    • +
    • New features opt-in via config
    • +
    +

    Migration Path:

    +
      +
    • Existing users: blocks disabled by default
    • +
    • New users: blocks enabled, parsed on import
    • +
    • Manual: kb reindex --parse-blocks to populate
    • +
    +
    +

    Decision Date: 2026-01-17 +Approvers: TBD +Review Date: After Phase 2 implementation

    +

    ADR-005: MCP Protocol for AI Integration

    +

    Prerequisites

    +

    Installation Methods

    +

    Project Initialization

    +

    Environment Configuration

    +

    Verification

    +

    Configuration Overview

    +

    Nickel Schemas

    +

    Graph Settings

    +

    Inheritance

    +

    Examples

    +

    Storage Backends

    +

    Filesystem Storage

    +

    SurrealDB Storage

    +

    In-Memory Storage

    +

    Sync Strategies

    +

    Embeddings Overview

    +

    Provider Configuration

    +

    FastEmbed Local

    +

    OpenAI Integration

    +

    Claude Integration

    +

    Ollama Integration

    +

    Semantic Search

    +

    Template System

    +

    Document Templates

    +

    Export Templates

    +

    Customization

    +

    CLI Overview

    +

    Commands Reference

    +

    Workflows

    +

    NuShell Scripts

    +

    MCP Quick Guide

    +

    Fast-track guide to integrating KOGRAL with Claude Code via the Model Context Protocol (MCP).

    +

    What is MCP?

    +

    MCP (Model Context Protocol) is a protocol that allows Claude Code to interact with external tools and data sources. The kogral-mcp server exposes your KOGRAL knowledge base to Claude Code for AI-assisted knowledge management.

    +

    Quick Setup (5 Minutes)

    +

    Step 1: Build MCP Server

    +
    # Build kogral-mcp server
    +cargo build --package kb-mcp --release
    +
    +# Verify binary
    +ls -lh target/release/kb-mcp
    +
    +

    Step 2: Configure Claude Code

    +

    Add to ~/.config/claude/config.json:

    +
    {
    +  "mcpServers": {
    +    "kogral-mcp": {
    +      "command": "/path/to/knowledge-base/target/release/kb-mcp",
    +      "args": ["serve"],
    +      "env": {
    +        "KOGRAL_DIR": "/path/to/your/project/.kogral"
    +      }
    +    }
    +  }
    +}
    +
    +

    Replace /path/to/knowledge-base and /path/to/your/project/.kogral with your actual paths.

    +

    Step 3: Initialize KOGRAL

    +
    # Navigate to your project
    +cd /path/to/your/project
    +
    +# Initialize .kb directory
    +kb init
    +
    +

    Step 4: Start Claude Code

    +
    # Start Claude Code (will auto-connect to kb-mcp)
    +claude-code
    +
    +

    Step 5: Test Connection

    +

    In Claude Code, try:

    +
    Search for "error handling"
    +
    +

    Claude will use the kogral/search tool to query your knowledge base.

    +
    +

    Essential Commands

    +

    Search Knowledge Base

    +

    Natural language:

    +
    Find notes about Rust error handling
    +
    +

    Claude translates to:

    +
    {
    +  "tool": "kogral/search",
    +  "params": {
    +    "query": "error handling",
    +    "type": "note",
    +    "semantic": true
    +  }
    +}
    +
    +

    Add Note

    +

    Natural language:

    +
    Add a note about async Rust patterns with tags rust, async, patterns
    +
    +

    Claude translates to:

    +
    {
    +  "tool": "kogral/add_note",
    +  "params": {
    +    "title": "Async Rust Patterns",
    +    "content": "...",
    +    "tags": ["rust", "async", "patterns"]
    +  }
    +}
    +
    +

    Add Decision

    +

    Natural language:

    +
    Document decision to use SurrealDB for storage
    +
    +

    Claude translates to:

    +
    {
    +  "tool": "kogral/add_decision",
    +  "params": {
    +    "title": "Use SurrealDB for Storage",
    +    "context": "Need scalable graph database",
    +    "decision": "Adopt SurrealDB as primary storage backend",
    +    "consequences": ["Better query performance", "Additional infrastructure"]
    +  }
    +}
    +
    +

    Get Guidelines

    +

    Natural language:

    +
    What are our Rust error handling guidelines?
    +
    +

    Claude translates to:

    +
    {
    +  "tool": "kogral/get_guidelines",
    +  "params": {
    +    "language": "rust",
    +    "category": "error-handling"
    +  }
    +}
    +
    + +

    Natural language:

    +
    Link note-async-patterns to decision-use-tokio as implements
    +
    +

    Claude translates to:

    +
    {
    +  "tool": "kogral/link",
    +  "params": {
    +    "from": "note-async-patterns",
    +    "to": "decision-use-tokio",
    +    "relation": "implements"
    +  }
    +}
    +
    +
    +

    Common Workflows

    +

    Capture Meeting Notes

    +

    You:

    +
    We just decided in our meeting to migrate from REST to GraphQL.
    +Context: current REST API is too chatty, requires multiple round trips.
    +Consequences: better client performance, but team needs to learn GraphQL.
    +Create a decision record.
    +
    +

    Claude (uses kb/add_decision):

    +
    Created decision: decision-migrate-to-graphql
    +
    +Status: proposed
    +Context: Current REST API requires multiple round trips (chatty)
    +Decision: Migrate from REST to GraphQL API
    +Consequences:
    +  - ✅ Better client performance
    +  - ❌ Team learning curve for GraphQL
    +
    + +

    You:

    +
    I'm working on error handling. What related notes and patterns do we have?
    +
    +

    Claude (uses kogral/search with semantic=true):

    +
    Found 5 related items:
    +
    +1. **Error Handling with thiserror** (pattern)
    +   Tags: rust, error-handling
    +   Created: 2026-01-15
    +
    +2. **Result Type Best Practices** (guideline)
    +   Tags: rust, error-handling, best-practices
    +   Created: 2026-01-10
    +
    +3. **Decision: Use anyhow for Application Errors** (decision)
    +   Status: accepted
    +   Created: 2026-01-08
    +
    +4. **Custom Error Types** (note)
    +   Tags: rust, error-handling
    +   Created: 2026-01-05
    +
    +5. **Error Propagation Patterns** (pattern)
    +   Tags: rust, error-handling
    +   Created: 2026-01-03
    +
    +Would you like me to link your current work to any of these?
    +
    +

    Document Implementation

    +

    You:

    +
    I just implemented the user authentication module following our security guidelines.
    +Add a note and link it to our security guideline.
    +
    +

    Claude (uses kb/add_note + kb/link):

    +
    Created note: note-user-auth-implementation
    +Tags: security, authentication, implementation
    +
    +Linked:
    +  note-user-auth-implementation --[implements]--> guideline-security-practices
    +
    +Done! Your implementation is now documented and connected to our guidelines.
    +
    +

    Review Project Knowledge

    +

    You:

    +
    Summarize our project knowledge: what decisions have we made, what patterns are we using?
    +
    +

    Claude (uses kb/summarize_project prompt):

    +
    # Project Knowledge Summary
    +
    +**Total Nodes**: 42
    +
    +## Recent Decisions (5)
    +- Use SurrealDB for Storage (accepted, 2 days ago)
    +- Adopt MCP for AI Integration (accepted, 5 days ago)
    +- Nickel for Configuration (accepted, 1 week ago)
    +
    +## Active Patterns (8)
    +- Error Handling with thiserror
    +- Repository Pattern for DB
    +- Builder Pattern for Complex Objects
    +- ...
    +
    +## Top Tags
    +1. rust (23 nodes)
    +2. architecture (12 nodes)
    +3. error-handling (8 nodes)
    +4. patterns (7 nodes)
    +
    +## Guideline Coverage
    +- Rust: 5 guidelines
    +- Testing: 3 guidelines
    +- Security: 2 guidelines
    +
    +
    +

    Advanced Usage

    +

    Conditional Queries

    +

    You:

    +
    Find all decisions made in the last week that are still proposed (not accepted)
    +
    +

    Claude (combines kogral/search with filtering):

    +
    Found 2 proposed decisions from last week:
    +
    +1. **Migrate to GraphQL** (proposed)
    +   Created: 3 days ago
    +   Context: REST API is too chatty...
    +
    +2. **Add Redis Caching** (proposed)
    +   Created: 5 days ago
    +   Context: Database queries are slow...
    +
    +Would you like to review these and update their status?
    +
    +

    Cross-Reference Check

    +

    You:

    +
    Before I implement X, check if we have any decisions or guidelines about it
    +
    +

    Claude (uses kogral/search + kogral/get_guidelines):

    +
    Checking existing knowledge about X...
    +
    +**Decisions**: None found
    +**Guidelines**: 1 relevant guideline found
    +  - guideline-module-structure: "Keep modules focused and small"
    +
    +**Related Notes**: 2 notes mention similar topics
    +  - note-module-design-patterns
    +  - note-separation-of-concerns
    +
    +Recommendation: Your implementation of X looks aligned with our guidelines.
    +Consider linking it to guideline-module-structure when done.
    +
    +

    Export for Sharing

    +

    You:

    +
    Export our architectural decisions to Logseq so I can review them visually
    +
    +

    Claude (uses kb/export):

    +
    Exporting to Logseq format...
    +
    +✓ Exported 12 decisions to /Users/akasha/logseq-export/
    +  - 12 decision records
    +  - Preserved wikilinks
    +  - Added Logseq properties
    +
    +You can now open /Users/akasha/logseq-export/ in Logseq to visualize the decision graph.
    +
    +
    +

    Tips and Tricks

    +

    1. Use Natural Language

    +

    Don't worry about exact tool syntax. Claude understands:

    +

    Don't say: "Use kb/search with query='rust' and type='pattern'" +✅ Do say: "Find Rust patterns in KOGRAL"

    +

    2. Be Specific with Tags

    +

    When adding notes, use consistent tags:

    +

    Good: tags: rust, error-handling, pattern +❌ Bad: tags: Rust, ErrorHandling, patterns

    + +

    After creating notes, ask Claude to link them:

    +
    Link this note to our error handling guideline as 'implements'
    +
    +

    4. Review Regularly

    +

    Ask Claude for summaries:

    +
    What have we documented this week?
    +
    + +

    For conceptual queries:

    +
    Find anything related to "making code maintainable"
    +
    +

    Not just keyword "maintainable", but concepts like refactoring, clean code, patterns, etc.

    +
    +

    Troubleshooting

    +

    "MCP server not responding"

    +
    # Check kb-mcp is built
    +ls target/release/kb-mcp
    +
    +# Test manually
    +echo '{"jsonrpc":"2.0","id":1,"method":"kogral/search","params":{"query":"test"}}' \
    +  | target/release/kb-mcp serve
    +
    +

    "KB directory not found"

    +
    # Verify .kb exists
    +ls -la /path/to/project/.kogral
    +
    +# Initialize if missing
    +cd /path/to/project
    +kb init
    +
    +

    "Permission denied"

    +
    # Make binary executable
    +chmod +x target/release/kb-mcp
    +
    +# Check environment variable
    +echo $KOGRAL_DIR
    +
    +

    "Empty search results"

    +
    # Add some test content
    +kb add note "Test Note" --content "Test content"
    +
    +# Try search again in Claude Code
    +
    +
    +

    Next Steps

    + +
    +

    Quick Reference Card

    +
    + + + + + + + +
    TaskSay to Claude
    Search"Find notes about X"
    Add note"Add a note about X with tags Y, Z"
    Add decision"Document decision to use X for Y"
    Get guidelines"What are our X guidelines?"
    Link nodes"Link A to B as implements"
    Summarize"Summarize project knowledge"
    Export"Export to Logseq format"
    +
    +
    +

    Remember: Claude Code with MCP turns KOGRAL into an active participant in your development workflow. Ask questions, capture decisions, and let AI help you maintain your project's knowledge graph.

    +

    Claude Code Integration

    +

    Logseq Integration

    +

    Obsidian Compatibility

    +

    Git Workflows

    +

    MCP Protocol

    +

    MCP Tools API Reference

    +

    Complete reference for the Model Context Protocol (MCP) server tools and resources.

    +

    Overview

    +

    The kogral-mcp server implements the MCP protocol (JSON-RPC 2.0) for Claude Code integration. It provides:

    +
      +
    • 10 Tools: Operations for querying and modifying knowledge base (7 core + 3 block tools)
    • +
    • 6 Resources: Access to knowledge graph content via URIs
    • +
    • 2 Prompts: Guided workflows for common tasks
    • +
    +

    Server Configuration

    +

    Start MCP Server

    +
    # Stdio transport (local use)
    +kb serve
    +
    +# Or run directly
    +kb-mcp serve
    +
    +

    Claude Code Configuration

    +

    Add to ~/.config/claude/config.json:

    +
    {
    +  "mcpServers": {
    +    "kogral-mcp": {
    +      "command": "/path/to/kb-mcp",
    +      "args": ["serve"],
    +      "env": {
    +        "KOGRAL_DIR": "/path/to/project/.kogral"
    +      }
    +    }
    +  }
    +}
    +
    +

    Tools

    +

    kb/search

    +

    Search the knowledge base using text and/or semantic similarity.

    +

    Input Schema:

    +
    {
    +  "type": "object",
    +  "properties": {
    +    "query": {
    +      "type": "string",
    +      "description": "Search query"
    +    },
    +    "type": {
    +      "type": "string",
    +      "enum": ["note", "decision", "guideline", "pattern", "journal", "execution", "all"],
    +      "description": "Filter by node type",
    +      "default": "all"
    +    },
    +    "project": {
    +      "type": "string",
    +      "description": "Limit search to specific project graph"
    +    },
    +    "semantic": {
    +      "type": "boolean",
    +      "description": "Enable semantic similarity search",
    +      "default": true
    +    },
    +    "threshold": {
    +      "type": "number",
    +      "description": "Minimum similarity threshold (0-1)",
    +      "default": 0.4
    +    },
    +    "limit": {
    +      "type": "integer",
    +      "description": "Maximum number of results",
    +      "default": 10
    +    }
    +  },
    +  "required": ["query"]
    +}
    +
    +

    Example Request:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 1,
    +  "method": "kogral/search",
    +  "params": {
    +    "query": "error handling patterns in Rust",
    +    "type": "pattern",
    +    "semantic": true,
    +    "threshold": 0.6,
    +    "limit": 5
    +  }
    +}
    +
    +

    Example Response:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 1,
    +  "result": {
    +    "type": "text",
    +    "text": "Found 3 result(s):\n\n1. Error Handling with thiserror (pattern, score: 0.85)\n   Tags: rust, error-handling\n   Created: 2026-01-15\n   \n2. Result Type Best Practices (guideline, score: 0.72)\n   Tags: rust, error-handling, best-practices\n   Created: 2026-01-10\n\n3. Custom Error Types (note, score: 0.65)\n   Tags: rust, error-handling\n   Created: 2026-01-08"
    +  }
    +}
    +
    +

    kb/add_note

    +

    Add a new note to the knowledge base.

    +

    Input Schema:

    +
    {
    +  "type": "object",
    +  "properties": {
    +    "title": {
    +      "type": "string",
    +      "description": "Note title"
    +    },
    +    "content": {
    +      "type": "string",
    +      "description": "Note content (markdown)"
    +    },
    +    "tags": {
    +      "type": "array",
    +      "items": { "type": "string" },
    +      "description": "Tags for categorization",
    +      "default": []
    +    },
    +    "relates_to": {
    +      "type": "array",
    +      "items": { "type": "string" },
    +      "description": "Related node IDs",
    +      "default": []
    +    },
    +    "project": {
    +      "type": "string",
    +      "description": "Project graph name",
    +      "default": "default"
    +    }
    +  },
    +  "required": ["title", "content"]
    +}
    +
    +

    Example Request:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 2,
    +  "method": "kogral/add_note",
    +  "params": {
    +    "title": "Async Trait Patterns",
    +    "content": "Common patterns for using async traits in Rust:\n\n1. Use `async-trait` crate\n2. Box return types for flexibility\n3. Consider Send + Sync bounds",
    +    "tags": ["rust", "async", "patterns"],
    +    "relates_to": ["pattern-error-handling"]
    +  }
    +}
    +
    +

    Example Response:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 2,
    +  "result": {
    +    "type": "text",
    +    "text": "Note added successfully: note-async-trait-patterns (ID: note-abc123)"
    +  }
    +}
    +
    +

    kb/add_decision

    +

    Create an Architectural Decision Record (ADR).

    +

    Input Schema:

    +
    {
    +  "type": "object",
    +  "properties": {
    +    "title": {
    +      "type": "string",
    +      "description": "Decision title"
    +    },
    +    "context": {
    +      "type": "string",
    +      "description": "Decision context and background"
    +    },
    +    "decision": {
    +      "type": "string",
    +      "description": "The decision made"
    +    },
    +    "consequences": {
    +      "type": "array",
    +      "items": { "type": "string" },
    +      "description": "List of consequences",
    +      "default": []
    +    },
    +    "status": {
    +      "type": "string",
    +      "enum": ["proposed", "accepted", "rejected", "deprecated", "superseded"],
    +      "default": "proposed"
    +    },
    +    "tags": {
    +      "type": "array",
    +      "items": { "type": "string" },
    +      "default": []
    +    }
    +  },
    +  "required": ["title", "context", "decision"]
    +}
    +
    +

    Example Request:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 3,
    +  "method": "kogral/add_decision",
    +  "params": {
    +    "title": "Use SurrealDB for Knowledge Graph Storage",
    +    "context": "Need a scalable storage solution that supports graph queries and can handle growing knowledge base",
    +    "decision": "Adopt SurrealDB as the primary storage backend for production deployments",
    +    "consequences": [
    +      "Better query performance for graph traversal",
    +      "Native support for relationships",
    +      "Additional infrastructure dependency",
    +      "Team needs to learn SurrealDB query language"
    +    ],
    +    "status": "accepted",
    +    "tags": ["architecture", "storage", "surrealdb"]
    +  }
    +}
    +
    +

    Example Response:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 3,
    +  "result": {
    +    "type": "text",
    +    "text": "Decision added: decision-use-surrealdb (ID: decision-xyz789)\nStatus: accepted"
    +  }
    +}
    +
    + +

    Create a relationship between two nodes.

    +

    Input Schema:

    +
    {
    +  "type": "object",
    +  "properties": {
    +    "from": {
    +      "type": "string",
    +      "description": "Source node ID"
    +    },
    +    "to": {
    +      "type": "string",
    +      "description": "Target node ID"
    +    },
    +    "relation": {
    +      "type": "string",
    +      "enum": ["relates_to", "depends_on", "implements", "extends", "supersedes", "explains"],
    +      "description": "Relationship type"
    +    },
    +    "strength": {
    +      "type": "number",
    +      "description": "Relationship strength (0-1)",
    +      "minimum": 0,
    +      "maximum": 1,
    +      "default": 1.0
    +    }
    +  },
    +  "required": ["from", "to", "relation"]
    +}
    +
    +

    Example Request:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 4,
    +  "method": "kogral/link",
    +  "params": {
    +    "from": "note-async-trait-patterns",
    +    "to": "pattern-error-handling",
    +    "relation": "relates_to",
    +    "strength": 0.8
    +  }
    +}
    +
    +

    Example Response:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 4,
    +  "result": {
    +    "type": "text",
    +    "text": "Link created: note-async-trait-patterns --[relates_to]--> pattern-error-handling (strength: 0.8)"
    +  }
    +}
    +
    +

    Relationship Types:

    +
      +
    • relates_to: General conceptual relationship
    • +
    • depends_on: Dependency (from depends on to)
    • +
    • implements: Implementation of concept/pattern
    • +
    • extends: Inherits or extends another node
    • +
    • supersedes: Replaces an older version
    • +
    • explains: Provides documentation/clarification
    • +
    +

    kb/get_guidelines

    +

    Retrieve guidelines for current project with inheritance resolution.

    +

    Input Schema:

    +
    {
    +  "type": "object",
    +  "properties": {
    +    "language": {
    +      "type": "string",
    +      "description": "Programming language (e.g., rust, nushell)"
    +    },
    +    "category": {
    +      "type": "string",
    +      "description": "Guideline category (e.g., error-handling, testing)"
    +    },
    +    "include_base": {
    +      "type": "boolean",
    +      "description": "Include shared/base guidelines",
    +      "default": true
    +    }
    +  }
    +}
    +
    +

    Example Request:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 5,
    +  "method": "kogral/get_guidelines",
    +  "params": {
    +    "language": "rust",
    +    "category": "error-handling",
    +    "include_base": true
    +  }
    +}
    +
    +

    Example Response:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 5,
    +  "result": {
    +    "type": "text",
    +    "text": "Guidelines for rust/error-handling:\n\n## Project Guidelines (priority: 150)\n\n1. Custom Error Types (guideline-custom-errors)\n   - Use thiserror for error definitions\n   - Implement From traits for conversions\n   - Source: .kogral/guidelines/rust-errors.md\n\n## Shared Guidelines (priority: 50)\n\n1. Result Type Best Practices (guideline-result-best-practices)\n   - Always use Result<T> for fallible operations\n   - Never use unwrap() in production\n   - Source: ~/Tools/.kogral-shared/guidelines/rust-errors.md\n\n2. Error Propagation (guideline-error-propagation)\n   - Use ? operator for error propagation\n   - Add context with .context()\n   - Source: ~/Tools/.kogral-shared/guidelines/rust-errors.md"
    +  }
    +}
    +
    +

    kb/list_graphs

    +

    List available knowledge graphs.

    +

    Input Schema:

    +
    {
    +  "type": "object",
    +  "properties": {}
    +}
    +
    +

    Example Request:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 6,
    +  "method": "kb/list_graphs"
    +}
    +
    +

    Example Response:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 6,
    +  "result": {
    +    "type": "text",
    +    "text": "Available graphs:\n\n- default (Current project)\n  Path: /path/to/project/.kogral\n  Nodes: 42\n  Last modified: 2026-01-17T10:30:00Z\n\n- shared (Shared guidelines)\n  Path: ~/Tools/.kogral-shared\n  Nodes: 156\n  Last modified: 2026-01-15T14:20:00Z"
    +  }
    +}
    +
    +

    kb/export

    +

    Export knowledge base to various formats.

    +

    Input Schema:

    +
    {
    +  "type": "object",
    +  "properties": {
    +    "format": {
    +      "type": "string",
    +      "enum": ["logseq", "json", "markdown"],
    +      "description": "Export format"
    +    },
    +    "output_path": {
    +      "type": "string",
    +      "description": "Output file or directory path"
    +    },
    +    "include_types": {
    +      "type": "array",
    +      "items": {
    +        "type": "string",
    +        "enum": ["note", "decision", "guideline", "pattern", "journal", "execution"]
    +      },
    +      "description": "Node types to include",
    +      "default": ["note", "decision", "guideline", "pattern"]
    +    },
    +    "skip_journals": {
    +      "type": "boolean",
    +      "default": true
    +    }
    +  },
    +  "required": ["format", "output_path"]
    +}
    +
    +

    Example Request:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 7,
    +  "method": "kogral/export",
    +  "params": {
    +    "format": "logseq",
    +    "output_path": "/Users/akasha/logseq-graph",
    +    "include_types": ["note", "decision", "guideline"],
    +    "skip_journals": true
    +  }
    +}
    +
    +

    Example Response:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 7,
    +  "result": {
    +    "type": "text",
    +    "text": "Export completed:\n\nFormat: Logseq\nOutput: /Users/akasha/logseq-graph\nExported: 42 nodes\n  - 23 notes\n  - 12 decisions\n  - 7 guidelines\n\nLogseq graph ready to open."
    +  }
    +}
    +
    +

    Block Tools

    +

    Tools for querying Logseq content blocks. Requires blocks.enable_mcp_tools = true in configuration.

    +

    kb/find_blocks

    +

    Find blocks by tag, task status, or custom property across the knowledge base.

    +

    Input Schema:

    +
    {
    +  "type": "object",
    +  "properties": {
    +    "tag": {
    +      "type": "string",
    +      "description": "Find blocks with this tag (e.g., 'card', 'important')"
    +    },
    +    "status": {
    +      "type": "string",
    +      "enum": ["TODO", "DOING", "DONE", "LATER", "NOW", "WAITING", "CANCELLED"],
    +      "description": "Find blocks with this task status"
    +    },
    +    "property_key": {
    +      "type": "string",
    +      "description": "Custom property key to search for"
    +    },
    +    "property_value": {
    +      "type": "string",
    +      "description": "Custom property value to match"
    +    },
    +    "limit": {
    +      "type": "integer",
    +      "description": "Maximum number of results",
    +      "default": 20
    +    }
    +  }
    +}
    +
    +

    Note: Provide one of: tag, status, or both property_key and property_value.

    +

    Example Request (find blocks by tag):

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 8,
    +  "method": "kogral/find_blocks",
    +  "params": {
    +    "tag": "high-priority",
    +    "limit": 10
    +  }
    +}
    +
    +

    Example Response:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 8,
    +  "result": {
    +    "type": "text",
    +    "text": "Found 3 blocks with tag '#high-priority':\n\n**Project Tasks** (project-tasks-123)\n  - TODO Implement authentication #high-priority\n  - TODO Fix security vulnerability #high-priority\n\n**Sprint Planning** (sprint-planning-456)\n  - DOING Refactor database layer #high-priority"
    +  }
    +}
    +
    +

    Example Request (find blocks by property):

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 9,
    +  "method": "kogral/find_blocks",
    +  "params": {
    +    "property_key": "priority",
    +    "property_value": "high",
    +    "limit": 15
    +  }
    +}
    +
    +

    kb/find_todos

    +

    Find all TODO blocks across the knowledge base.

    +

    Input Schema:

    +
    {
    +  "type": "object",
    +  "properties": {
    +    "limit": {
    +      "type": "integer",
    +      "description": "Maximum number of results",
    +      "default": 20
    +    }
    +  }
    +}
    +
    +

    Example Request:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 10,
    +  "method": "kogral/find_todos",
    +  "params": {
    +    "limit": 25
    +  }
    +}
    +
    +

    Example Response:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 10,
    +  "result": {
    +    "type": "text",
    +    "text": "Found 8 TODO blocks:\n\n**Project Tasks** (project-tasks-123)\n  - TODO Implement authentication\n  - TODO Write integration tests\n  - TODO Update documentation\n\n**Bug Fixes** (bug-fixes-456)\n  - TODO Fix race condition in cache\n  - TODO Address memory leak\n\n**Research** (research-789)\n  - TODO Evaluate GraphQL alternatives\n  - TODO Benchmark new approach\n  - TODO Document findings"
    +  }
    +}
    +
    +

    kb/find_cards

    +

    Find all flashcard blocks (blocks tagged with #card) for spaced repetition learning.

    +

    Input Schema:

    +
    {
    +  "type": "object",
    +  "properties": {
    +    "limit": {
    +      "type": "integer",
    +      "description": "Maximum number of flashcards",
    +      "default": 10
    +    }
    +  }
    +}
    +
    +

    Example Request:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 11,
    +  "method": "kogral/find_cards",
    +  "params": {
    +    "limit": 5
    +  }
    +}
    +
    +

    Example Response:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 11,
    +  "result": {
    +    "type": "text",
    +    "text": "Found 3 flashcards:\n\n**Rust Learning** (rust-learning-123)\n  - What is Rust's ownership model? #card #rust\n    - Ownership prevents data races at compile time\n    - Each value has a single owner\n\n**System Design** (system-design-456)\n  - What is the CAP theorem? #card #distributed-systems\n    - Consistency, Availability, Partition tolerance\n    - Can only guarantee 2 of 3\n\n**Algorithms** (algorithms-789)\n  - What is the time complexity of quicksort? #card #algorithms\n    - Average: O(n log n)\n    - Worst case: O(n²)"
    +  }
    +}
    +
    +

    Use Cases:

    +
      +
    • kb/find_blocks: General block search by metadata
    • +
    • kb/find_todos: Task management and tracking
    • +
    • kb/find_cards: Spaced repetition learning system
    • +
    +

    See Also:

    + +

    Resources

    +

    Resources provide read-only access to knowledge graph content via URIs.

    +

    kogral://project/notes

    +

    Access project notes.

    +

    URI: kogral://project/notes or kogral://project/notes/{note-id}

    +

    Example: Read all project notes

    +
    kogral://project/notes
    +
    +

    Example: Read specific note

    +
    kogral://project/notes/async-trait-patterns
    +
    +

    kogral://project/decisions

    +

    Access project decisions (ADRs).

    +

    URI: kogral://project/decisions or kogral://project/decisions/{decision-id}

    +

    kogral://project/guidelines

    +

    Access project-specific guidelines.

    +

    URI: kogral://project/guidelines or kogral://project/guidelines/{guideline-id}

    +

    kogral://project/patterns

    +

    Access project patterns.

    +

    URI: kogral://project/patterns or kogral://project/patterns/{pattern-id}

    +

    kogral://shared/guidelines

    +

    Access shared guidelines (inherited).

    +

    URI: kogral://shared/guidelines or kogral://shared/guidelines/{guideline-id}

    +

    kogral://shared/patterns

    +

    Access shared patterns (inherited).

    +

    URI: kogral://shared/patterns or kogral://shared/patterns/{pattern-id}

    +

    Prompts

    +

    Prompts provide guided workflows for common tasks.

    +

    kb/summarize_project

    +

    Generate a comprehensive project knowledge summary.

    +

    Arguments:

    +
    {
    +  "project": {
    +    "type": "string",
    +    "description": "Project graph name",
    +    "default": "default"
    +  }
    +}
    +
    +

    Example Request:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 8,
    +  "method": "kogral/summarize_project",
    +  "params": {
    +    "project": "default"
    +  }
    +}
    +
    +

    Returns: Prompt messages with project summary including:

    +
      +
    • Total node counts by type
    • +
    • Recent additions
    • +
    • Top tags
    • +
    • Key decisions
    • +
    • Active patterns
    • +
    + +

    Find nodes related to a specific topic or node.

    +

    Arguments:

    +
    {
    +  "node_id": {
    +    "type": "string",
    +    "description": "Node ID to find relations for"
    +  },
    +  "depth": {
    +    "type": "integer",
    +    "description": "Maximum traversal depth",
    +    "default": 2
    +  }
    +}
    +
    +

    Example Request:

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 9,
    +  "method": "kb/find_related",
    +  "params": {
    +    "node_id": "pattern-error-handling",
    +    "depth": 2
    +  }
    +}
    +
    +

    Returns: Prompt messages with:

    +
      +
    • Direct relationships
    • +
    • Indirect relationships (depth 2+)
    • +
    • Common tags
    • +
    • Related guidelines
    • +
    +

    Error Handling

    +

    Error Codes

    +

    Standard JSON-RPC 2.0 error codes:

    +
    + + + + + +
    CodeMeaningDescription
    -32700Parse errorInvalid JSON
    -32600Invalid RequestMissing required fields
    -32601Method not foundUnknown tool/resource
    -32602Invalid paramsParameter validation failed
    -32603Internal errorServer-side error
    +
    +

    Example Error Response

    +
    {
    +  "jsonrpc": "2.0",
    +  "id": 1,
    +  "error": {
    +    "code": -32602,
    +    "message": "Invalid params",
    +    "data": {
    +      "details": "Field 'query' is required but missing",
    +      "field": "query"
    +    }
    +  }
    +}
    +
    +

    Best Practices

    +

    1. Use Semantic Search for Discovery

    +
    {
    +  "method": "kogral/search",
    +  "params": {
    +    "query": "how to handle database connection errors",
    +    "semantic": true,
    +    "threshold": 0.5
    +  }
    +}
    +
    + +
    {
    +  "method": "kogral/link",
    +  "params": {
    +    "from": "note-new-discovery",
    +    "to": "pattern-related-pattern",
    +    "relation": "implements"
    +  }
    +}
    +
    +

    3. Query Guidelines Before Implementation

    +
    {
    +  "method": "kogral/get_guidelines",
    +  "params": {
    +    "language": "rust",
    +    "category": "testing"
    +  }
    +}
    +
    +

    4. Document Decisions with ADRs

    +
    {
    +  "method": "kogral/add_decision",
    +  "params": {
    +    "title": "Use X for Y",
    +    "context": "Background...",
    +    "decision": "We will...",
    +    "consequences": ["Pro 1", "Con 1"]
    +  }
    +}
    +
    +

    See Also

    + +

    Resources

    +

    Rust API

    +

    Development Setup

    +

    Code Standards

    +

    Testing

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/searcher.js b/docs/book/searcher.js new file mode 100644 index 0000000..fc65604 --- /dev/null +++ b/docs/book/searcher.js @@ -0,0 +1,529 @@ +'use strict'; + +/* global Mark, elasticlunr, path_to_root */ + +window.search = window.search || {}; +(function search() { + // Search functionality + // + // You can use !hasFocus() to prevent keyhandling in your key + // event handlers while the user is typing their search. + + if (!Mark || !elasticlunr) { + return; + } + + // eslint-disable-next-line max-len + // IE 11 Compatibility from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith + if (!String.prototype.startsWith) { + String.prototype.startsWith = function(search, pos) { + return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; + }; + } + + const search_wrap = document.getElementById('search-wrapper'), + searchbar = document.getElementById('searchbar'), + searchresults = document.getElementById('searchresults'), + searchresults_outer = document.getElementById('searchresults-outer'), + searchresults_header = document.getElementById('searchresults-header'), + searchicon = document.getElementById('search-toggle'), + content = document.getElementById('content'), + + // SVG text elements don't render if inside a tag. + mark_exclude = ['text'], + marker = new Mark(content), + URL_SEARCH_PARAM = 'search', + URL_MARK_PARAM = 'highlight'; + + let current_searchterm = '', + doc_urls = [], + search_options = { + bool: 'AND', + expand: true, + fields: { + title: {boost: 1}, + body: {boost: 1}, + breadcrumbs: {boost: 0}, + }, + }, + searchindex = null, + results_options = { + teaser_word_count: 30, + limit_results: 30, + }, + teaser_count = 0; + + function hasFocus() { + return searchbar === document.activeElement; + } + + function removeChildren(elem) { + while (elem.firstChild) { + elem.removeChild(elem.firstChild); + } + } + + // Helper to parse a url into its building blocks. + function parseURL(url) { + const a = document.createElement('a'); + a.href = url; + return { + source: url, + protocol: a.protocol.replace(':', ''), + host: a.hostname, + port: a.port, + params: (function() { + const ret = {}; + const seg = a.search.replace(/^\?/, '').split('&'); + for (const part of seg) { + if (!part) { + continue; + } + const s = part.split('='); + ret[s[0]] = s[1]; + } + return ret; + })(), + file: (a.pathname.match(/\/([^/?#]+)$/i) || ['', ''])[1], + hash: a.hash.replace('#', ''), + path: a.pathname.replace(/^([^/])/, '/$1'), + }; + } + + // Helper to recreate a url string from its building blocks. + function renderURL(urlobject) { + let url = urlobject.protocol + '://' + urlobject.host; + if (urlobject.port !== '') { + url += ':' + urlobject.port; + } + url += urlobject.path; + let joiner = '?'; + for (const prop in urlobject.params) { + if (Object.prototype.hasOwnProperty.call(urlobject.params, prop)) { + url += joiner + prop + '=' + urlobject.params[prop]; + joiner = '&'; + } + } + if (urlobject.hash !== '') { + url += '#' + urlobject.hash; + } + return url; + } + + // Helper to escape html special chars for displaying the teasers + const escapeHTML = (function() { + const MAP = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + '\'': ''', + }; + const repl = function(c) { + return MAP[c]; + }; + return function(s) { + return s.replace(/[&<>'"]/g, repl); + }; + })(); + + function formatSearchMetric(count, searchterm) { + if (count === 1) { + return count + ' search result for \'' + searchterm + '\':'; + } else if (count === 0) { + return 'No search results for \'' + searchterm + '\'.'; + } else { + return count + ' search results for \'' + searchterm + '\':'; + } + } + + function formatSearchResult(result, searchterms) { + const teaser = makeTeaser(escapeHTML(result.doc.body), searchterms); + teaser_count++; + + // The ?URL_MARK_PARAM= parameter belongs inbetween the page and the #heading-anchor + const url = doc_urls[result.ref].split('#'); + if (url.length === 1) { // no anchor found + url.push(''); + } + + // encodeURIComponent escapes all chars that could allow an XSS except + // for '. Due to that we also manually replace ' with its url-encoded + // representation (%27). + const encoded_search = encodeURIComponent(searchterms.join(' ')).replace(/'/g, '%27'); + + return '' + + result.doc.breadcrumbs + '' + '' + teaser + ''; + } + + function makeTeaser(body, searchterms) { + // The strategy is as follows: + // First, assign a value to each word in the document: + // Words that correspond to search terms (stemmer aware): 40 + // Normal words: 2 + // First word in a sentence: 8 + // Then use a sliding window with a constant number of words and count the + // sum of the values of the words within the window. Then use the window that got the + // maximum sum. If there are multiple maximas, then get the last one. + // Enclose the terms in . + const stemmed_searchterms = searchterms.map(function(w) { + return elasticlunr.stemmer(w.toLowerCase()); + }); + const searchterm_weight = 40; + const weighted = []; // contains elements of ["word", weight, index_in_document] + // split in sentences, then words + const sentences = body.toLowerCase().split('. '); + let index = 0; + let value = 0; + let searchterm_found = false; + for (const sentenceindex in sentences) { + const words = sentences[sentenceindex].split(' '); + value = 8; + for (const wordindex in words) { + const word = words[wordindex]; + if (word.length > 0) { + for (const searchtermindex in stemmed_searchterms) { + if (elasticlunr.stemmer(word).startsWith( + stemmed_searchterms[searchtermindex]) + ) { + value = searchterm_weight; + searchterm_found = true; + } + } + weighted.push([word, value, index]); + value = 2; + } + index += word.length; + index += 1; // ' ' or '.' if last word in sentence + } + index += 1; // because we split at a two-char boundary '. ' + } + + if (weighted.length === 0) { + return body; + } + + const window_weight = []; + const window_size = Math.min(weighted.length, results_options.teaser_word_count); + + let cur_sum = 0; + for (let wordindex = 0; wordindex < window_size; wordindex++) { + cur_sum += weighted[wordindex][1]; + } + window_weight.push(cur_sum); + for (let wordindex = 0; wordindex < weighted.length - window_size; wordindex++) { + cur_sum -= weighted[wordindex][1]; + cur_sum += weighted[wordindex + window_size][1]; + window_weight.push(cur_sum); + } + + let max_sum_window_index = 0; + if (searchterm_found) { + let max_sum = 0; + // backwards + for (let i = window_weight.length - 1; i >= 0; i--) { + if (window_weight[i] > max_sum) { + max_sum = window_weight[i]; + max_sum_window_index = i; + } + } + } else { + max_sum_window_index = 0; + } + + // add around searchterms + const teaser_split = []; + index = weighted[max_sum_window_index][2]; + for (let i = max_sum_window_index; i < max_sum_window_index + window_size; i++) { + const word = weighted[i]; + if (index < word[2]) { + // missing text from index to start of `word` + teaser_split.push(body.substring(index, word[2])); + index = word[2]; + } + if (word[1] === searchterm_weight) { + teaser_split.push(''); + } + index = word[2] + word[0].length; + teaser_split.push(body.substring(word[2], index)); + if (word[1] === searchterm_weight) { + teaser_split.push(''); + } + } + + return teaser_split.join(''); + } + + function init(config) { + results_options = config.results_options; + search_options = config.search_options; + doc_urls = config.doc_urls; + searchindex = elasticlunr.Index.load(config.index); + + // Set up events + searchicon.addEventListener('click', () => { + searchIconClickHandler(); + }, false); + searchbar.addEventListener('keyup', () => { + searchbarKeyUpHandler(); + }, false); + document.addEventListener('keydown', e => { + globalKeyHandler(e); + }, false); + // If the user uses the browser buttons, do the same as if a reload happened + window.onpopstate = () => { + doSearchOrMarkFromUrl(); + }; + // Suppress "submit" events so the page doesn't reload when the user presses Enter + document.addEventListener('submit', e => { + e.preventDefault(); + }, false); + + // If reloaded, do the search or mark again, depending on the current url parameters + doSearchOrMarkFromUrl(); + + // Exported functions + config.hasFocus = hasFocus; + } + + function unfocusSearchbar() { + // hacky, but just focusing a div only works once + const tmp = document.createElement('input'); + tmp.setAttribute('style', 'position: absolute; opacity: 0;'); + searchicon.appendChild(tmp); + tmp.focus(); + tmp.remove(); + } + + // On reload or browser history backwards/forwards events, parse the url and do search or mark + function doSearchOrMarkFromUrl() { + // Check current URL for search request + const url = parseURL(window.location.href); + if (Object.prototype.hasOwnProperty.call(url.params, URL_SEARCH_PARAM) + && url.params[URL_SEARCH_PARAM] !== '') { + showSearch(true); + searchbar.value = decodeURIComponent( + (url.params[URL_SEARCH_PARAM] + '').replace(/\+/g, '%20')); + searchbarKeyUpHandler(); // -> doSearch() + } else { + showSearch(false); + } + + if (Object.prototype.hasOwnProperty.call(url.params, URL_MARK_PARAM)) { + const words = decodeURIComponent(url.params[URL_MARK_PARAM]).split(' '); + marker.mark(words, { + exclude: mark_exclude, + }); + + const markers = document.querySelectorAll('mark'); + const hide = () => { + for (let i = 0; i < markers.length; i++) { + markers[i].classList.add('fade-out'); + window.setTimeout(() => { + marker.unmark(); + }, 300); + } + }; + + for (let i = 0; i < markers.length; i++) { + markers[i].addEventListener('click', hide); + } + } + } + + // Eventhandler for keyevents on `document` + function globalKeyHandler(e) { + if (e.altKey || + e.ctrlKey || + e.metaKey || + e.shiftKey || + e.target.type === 'textarea' || + e.target.type === 'text' || + !hasFocus() && /^(?:input|select|textarea)$/i.test(e.target.nodeName) + ) { + return; + } + + if (e.key === 'Escape') { + e.preventDefault(); + searchbar.classList.remove('active'); + setSearchUrlParameters('', + searchbar.value.trim() !== '' ? 'push' : 'replace'); + if (hasFocus()) { + unfocusSearchbar(); + } + showSearch(false); + marker.unmark(); + } else if (!hasFocus() && (e.key === 's' || e.key === '/')) { + e.preventDefault(); + showSearch(true); + window.scrollTo(0, 0); + searchbar.select(); + } else if (hasFocus() && (e.key === 'ArrowDown' + || e.key === 'Enter')) { + e.preventDefault(); + const first = searchresults.firstElementChild; + if (first !== null) { + unfocusSearchbar(); + first.classList.add('focus'); + if (e.key === 'Enter') { + window.location.assign(first.querySelector('a')); + } + } + } else if (!hasFocus() && (e.key === 'ArrowDown' + || e.key === 'ArrowUp' + || e.key === 'Enter')) { + // not `:focus` because browser does annoying scrolling + const focused = searchresults.querySelector('li.focus'); + if (!focused) { + return; + } + e.preventDefault(); + if (e.key === 'ArrowDown') { + const next = focused.nextElementSibling; + if (next) { + focused.classList.remove('focus'); + next.classList.add('focus'); + } + } else if (e.key === 'ArrowUp') { + focused.classList.remove('focus'); + const prev = focused.previousElementSibling; + if (prev) { + prev.classList.add('focus'); + } else { + searchbar.select(); + } + } else { // Enter + window.location.assign(focused.querySelector('a')); + } + } + } + + function showSearch(yes) { + if (yes) { + search_wrap.classList.remove('hidden'); + searchicon.setAttribute('aria-expanded', 'true'); + } else { + search_wrap.classList.add('hidden'); + searchicon.setAttribute('aria-expanded', 'false'); + const results = searchresults.children; + for (let i = 0; i < results.length; i++) { + results[i].classList.remove('focus'); + } + } + } + + function showResults(yes) { + if (yes) { + searchresults_outer.classList.remove('hidden'); + } else { + searchresults_outer.classList.add('hidden'); + } + } + + // Eventhandler for search icon + function searchIconClickHandler() { + if (search_wrap.classList.contains('hidden')) { + showSearch(true); + window.scrollTo(0, 0); + searchbar.select(); + } else { + showSearch(false); + } + } + + // Eventhandler for keyevents while the searchbar is focused + function searchbarKeyUpHandler() { + const searchterm = searchbar.value.trim(); + if (searchterm !== '') { + searchbar.classList.add('active'); + doSearch(searchterm); + } else { + searchbar.classList.remove('active'); + showResults(false); + removeChildren(searchresults); + } + + setSearchUrlParameters(searchterm, 'push_if_new_search_else_replace'); + + // Remove marks + marker.unmark(); + } + + // Update current url with ?URL_SEARCH_PARAM= parameter, remove ?URL_MARK_PARAM and + // `#heading-anchor`. `action` can be one of "push", "replace", + // "push_if_new_search_else_replace" and replaces or pushes a new browser history item. + // "push_if_new_search_else_replace" pushes if there is no `?URL_SEARCH_PARAM=abc` yet. + function setSearchUrlParameters(searchterm, action) { + const url = parseURL(window.location.href); + const first_search = !Object.prototype.hasOwnProperty.call(url.params, URL_SEARCH_PARAM); + + if (searchterm !== '' || action === 'push_if_new_search_else_replace') { + url.params[URL_SEARCH_PARAM] = searchterm; + delete url.params[URL_MARK_PARAM]; + url.hash = ''; + } else { + delete url.params[URL_MARK_PARAM]; + delete url.params[URL_SEARCH_PARAM]; + } + // A new search will also add a new history item, so the user can go back + // to the page prior to searching. A updated search term will only replace + // the url. + if (action === 'push' || action === 'push_if_new_search_else_replace' && first_search ) { + history.pushState({}, document.title, renderURL(url)); + } else if (action === 'replace' || + action === 'push_if_new_search_else_replace' && + !first_search + ) { + history.replaceState({}, document.title, renderURL(url)); + } + } + + function doSearch(searchterm) { + // Don't search the same twice + if (current_searchterm === searchterm) { + return; + } else { + current_searchterm = searchterm; + } + + if (searchindex === null) { + return; + } + + // Do the actual search + const results = searchindex.search(searchterm, search_options); + const resultcount = Math.min(results.length, results_options.limit_results); + + // Display search metrics + searchresults_header.innerText = formatSearchMetric(resultcount, searchterm); + + // Clear and insert results + const searchterms = searchterm.split(' '); + removeChildren(searchresults); + for (let i = 0; i < resultcount ; i++) { + const resultElem = document.createElement('li'); + resultElem.innerHTML = formatSearchResult(results[i], searchterms); + searchresults.appendChild(resultElem); + } + + // Display results + showResults(true); + } + + function loadScript(url, id) { + const script = document.createElement('script'); + script.src = url; + script.id = id; + script.onload = () => init(window.search); + script.onerror = error => { + console.error(`Failed to load \`${url}\`: ${error}`); + }; + document.head.append(script); + } + + loadScript(path_to_root + 'searchindex.js', 'search-index'); + +})(window.search); diff --git a/docs/book/searchindex.js b/docs/book/searchindex.js new file mode 100644 index 0000000..8f09e5b --- /dev/null +++ b/docs/book/searchindex.js @@ -0,0 +1 @@ +window.search = JSON.parse('{"doc_urls":["index.html#kogral-documentation","index.html#-reading-the-documentation","index.html#option-1-serve-locally-with-mdbook-recommended","index.html#option-2-build-static-html","index.html#option-3-read-markdown-files-directly","index.html#-documentation-commands","index.html#build-and-serve","index.html#validation","index.html#cleanup","index.html#view-all-documentation-commands","index.html#-installing-mdbook","index.html#install-via-cargo","index.html#install-optional-tools","index.html#verify-installation","index.html#-documentation-structure","index.html#1--kogral-definition--kogral","index.html#2--guides--guides","index.html#3--architecture--architecture","index.html#4--setup--setup","index.html#5--configuration--config","index.html#6--storage--storage","index.html#7--ai--embeddings--ai","index.html#8--templates--templates","index.html#9--cli-reference--cli","index.html#10--apps--integrations--apps","index.html#11--api-reference--api","index.html#12--contributing--contributing","index.html#-visual-diagrams","index.html#-searching-the-documentation","index.html#-editing-documentation","index.html#file-format","index.html#adding-a-new-page","index.html#adding-a-new-section","index.html#-testing-documentation","index.html#test-code-examples","index.html#check-links","index.html#-documentation-standards","index.html#-tips","index.html#live-reload-while-writing","index.html#markdown-preview-in-editor","index.html#quick-reference","index.html#-troubleshooting","index.html#mdbook-command-not-found","index.html#port-3000-already-in-use","index.html#links-broken-after-moving-files","index.html#-resources","index.html#-contributing-to-documentation","kogral/what-is-kogral.html#what-is-kogral","kogral/what-is-kogral.html#purpose","kogral/what-is-kogral.html#solution","kogral/what-is-kogral.html#core-philosophy","kogral/what-is-kogral.html#config-driven","kogral/what-is-kogral.html#git-friendly","kogral/what-is-kogral.html#ai-native","kogral/what-is-kogral.html#key-concepts","kogral/what-is-kogral.html#nodes","kogral/what-is-kogral.html#relationships","kogral/what-is-kogral.html#multi-graph-architecture","kogral/what-is-kogral.html#use-cases","kogral/what-is-kogral.html#for-developers","kogral/what-is-kogral.html#for-teams","kogral/what-is-kogral.html#for-ai-agents","kogral/what-is-kogral.html#comparison-with-other-tools","kogral/what-is-kogral.html#vs-logseq","kogral/what-is-kogral.html#vs-obsidian","kogral/what-is-kogral.html#vs-notionconfluence","kogral/what-is-kogral.html#architecture-overview","kogral/what-is-kogral.html#when-to-use-kogral","kogral/what-is-kogral.html#next-steps","kogral/core-concepts.html#core-concepts","kogral/core-concepts.html#the-knowledge-graph","kogral/core-concepts.html#node-types","kogral/core-concepts.html#1-note","kogral/core-concepts.html#2-decision-adr","kogral/core-concepts.html#3-guideline","kogral/core-concepts.html#4-pattern","kogral/core-concepts.html#5-journal","kogral/core-concepts.html#6-execution","kogral/core-concepts.html#relationship-types","kogral/core-concepts.html#1-relates_to","kogral/core-concepts.html#2-depends_on","kogral/core-concepts.html#3-implements","kogral/core-concepts.html#4-extends","kogral/core-concepts.html#5-supersedes","kogral/core-concepts.html#6-explains","kogral/core-concepts.html#multi-graph-architecture","kogral/core-concepts.html#local-graph-project-specific","kogral/core-concepts.html#shared-graph-organization-wide","kogral/core-concepts.html#inheritance-model","kogral/core-concepts.html#config-driven-behavior","kogral/core-concepts.html#semantic-search","kogral/core-concepts.html#templates","kogral/core-concepts.html#mcp-integration","kogral/core-concepts.html#git-friendly-storage","kogral/core-concepts.html#logseq-content-blocks","kogral/core-concepts.html#what-are-blocks","kogral/core-concepts.html#block-features","kogral/core-concepts.html#configuration","kogral/core-concepts.html#use-cases","kogral/core-concepts.html#block-queries-mcp-tools","kogral/core-concepts.html#architecture","kogral/core-concepts.html#key-principles","kogral/core-concepts.html#next-steps","kogral/why-kogral.html#why-kb","kogral/why-kogral.html#the-problem-knowledge-fragmentation","kogral/why-kogral.html#the-solution-unified-queryable-knowledge-graph","kogral/why-kogral.html#what-makes-kb-different","kogral/why-kogral.html#1-git-native","kogral/why-kogral.html#2-ai-native","kogral/why-kogral.html#3-config-driven","kogral/why-kogral.html#4-multi-graph","kogral/why-kogral.html#5-structured-relationships","kogral/why-kogral.html#real-world-impact","kogral/why-kogral.html#before-kb","kogral/why-kogral.html#with-kb","kogral/why-kogral.html#before-kb-1","kogral/why-kogral.html#with-kb-1","kogral/why-kogral.html#before-kb-2","kogral/why-kogral.html#with-kb-2","kogral/why-kogral.html#who-benefits","kogral/why-kogral.html#individual-developers","kogral/why-kogral.html#teams","kogral/why-kogral.html#organizations","kogral/why-kogral.html#ai-agents","kogral/why-kogral.html#when-not-to-use-kb","kogral/why-kogral.html#the-vision","kogral/why-kogral.html#design-philosophy","kogral/why-kogral.html#1--knowledge-should-be-captured-during-work-not-after","kogral/why-kogral.html#2--knowledge-should-be-connected-not-isolated","kogral/why-kogral.html#3--knowledge-should-be-queryable-not-browsable","kogral/why-kogral.html#get-started","kogral/design-philosophy.html#design-philosophy","kogral/design-philosophy.html#core-tenets","kogral/design-philosophy.html#1-config-driven-not-hardcoded","kogral/design-philosophy.html#2-type-safe-configuration","kogral/design-philosophy.html#3-local-first-cloud-optional","kogral/design-philosophy.html#4-git-friendly-by-default","kogral/design-philosophy.html#5-ai-native-human-readable","kogral/design-philosophy.html#6-composition-over-inheritance","kogral/design-philosophy.html#7-fail-fast-fail-clearly","kogral/design-philosophy.html#8-convention-over-configuration-with-escape-hatches","kogral/design-philosophy.html#9-documentation-as-code","kogral/design-philosophy.html#10-optimize-for-discoverability","kogral/design-philosophy.html#11-build-for-humans-enable-ai","kogral/design-philosophy.html#12-embrace-the-graph","kogral/design-philosophy.html#anti-patterns-to-avoid","kogral/design-philosophy.html#1--hardcoding-behavior","kogral/design-philosophy.html#2--runtime-schema-validation","kogral/design-philosophy.html#3--opaque-errors","kogral/design-philosophy.html#4--coupling-components","kogral/design-philosophy.html#5--proprietary-formats","kogral/design-philosophy.html#influences","kogral/design-philosophy.html#implementation-principles","kogral/design-philosophy.html#rust","kogral/design-philosophy.html#nickel","kogral/design-philosophy.html#nushell","kogral/design-philosophy.html#evolution-strategy","kogral/design-philosophy.html#conclusion","kogral/design-philosophy.html#next-steps","guides/installation.html#installation","guides/installation.html#prerequisites","guides/installation.html#required","guides/installation.html#optional","guides/installation.html#installation-methods","guides/installation.html#method-1-install-from-source-recommended","guides/installation.html#method-2-build-specific-crates","guides/installation.html#method-3-build-with-features","guides/installation.html#feature-flags","guides/installation.html#environment-setup","guides/installation.html#1-initialize-a-knowledge-base","guides/installation.html#2-configure-nickel-schemas-optional","guides/installation.html#3-set-up-shared-knowledge-base-optional","guides/installation.html#verify-installation","guides/installation.html#test-cli","guides/installation.html#test-mcp-server","guides/installation.html#run-tests","guides/installation.html#surrealdb-setup-optional","guides/installation.html#start-surrealdb-server","guides/installation.html#configure-kb-core","guides/installation.html#initialize-schema","guides/installation.html#embedding-provider-setup-optional","guides/installation.html#local-fastembed","guides/installation.html#api-providers-openai-claude-ollama","guides/installation.html#claude-code-integration","guides/installation.html#1-build-mcp-server","guides/installation.html#2-configure-claude-code","guides/installation.html#3-test-connection","guides/installation.html#troubleshooting","guides/installation.html#nickel-not-found","guides/installation.html#compilation-errors","guides/installation.html#surrealdb-connection-failed","guides/installation.html#mcp-server-not-responding","guides/installation.html#next-steps","guides/installation.html#uninstallation","guides/quickstart.html#quick-start-guide","guides/quickstart.html#prerequisites","guides/quickstart.html#step-1-initialize-your-knowledge-base","guides/quickstart.html#step-2-create-your-first-note","guides/quickstart.html#step-3-create-a-decision-record","guides/quickstart.html#step-4-link-nodes-together","guides/quickstart.html#step-5-search-your-knowledge-base","guides/quickstart.html#step-6-view-node-details","guides/quickstart.html#step-7-edit-documents-directly","guides/quickstart.html#step-8-create-a-daily-journal-entry","guides/quickstart.html#step-9-export-to-logseq-optional","guides/quickstart.html#step-10-start-mcp-server-for-claude-code","guides/quickstart.html#common-workflows","guides/quickstart.html#capture-quick-notes","guides/quickstart.html#document-architectural-decisions","guides/quickstart.html#build-a-pattern-library","guides/quickstart.html#track-daily-progress","guides/quickstart.html#next-steps","guides/quickstart.html#customize-configuration","guides/quickstart.html#set-up-shared-guidelines","guides/quickstart.html#automate-with-nushell-scripts","guides/quickstart.html#integrate-with-git","guides/quickstart.html#tips-and-tricks","guides/quickstart.html#use-wikilinks","guides/quickstart.html#reference-code","guides/quickstart.html#tag-consistently","guides/quickstart.html#leverage-templates","guides/quickstart.html#troubleshooting","guides/quickstart.html#kb-directory-not-found","guides/quickstart.html#node-not-found","guides/quickstart.html#failed-to-parse-frontmatter","guides/quickstart.html#further-reading","guides/quickstart.html#getting-help","guides/daily-workflows.html#daily-workflows","guides/use-cases.html#use-cases","guides/use-cases.html#use-case-1-onboarding-new-team-members","guides/use-cases.html#problem","guides/use-cases.html#solution-with-kogral","guides/use-cases.html#use-case-2-architectural-decision-records-adr","guides/use-cases.html#problem-1","guides/use-cases.html#solution-with-kogral-1","guides/use-cases.html#use-case-3-pattern-library","guides/use-cases.html#problem-2","guides/use-cases.html#solution-with-kogral-2","guides/use-cases.html#usage","guides/use-cases.html#use-case-5-code-review-preparation","guides/use-cases.html#problem-3","guides/use-cases.html#solution-with-kogral-3","guides/use-cases.html#use-case-6-cross-project-guidelines","guides/use-cases.html#problem-4","guides/use-cases.html#solution-with-kogral-4","guides/use-cases.html#use-case-7-bug-investigation","guides/use-cases.html#problem-5","guides/use-cases.html#solution-with-kogral-5","guides/use-cases.html#use-case-8-api-design-collaboration","guides/use-cases.html#problem-6","guides/use-cases.html#solution-with-kogral-6","guides/use-cases.html#summary","guides/use-cases.html#next-steps","guides/best-practices.html#best-practices","architecture/overview.html#system-architecture","architecture/overview.html#high-level-architecture","architecture/overview.html#component-details","architecture/overview.html#kb-cli-command-line-interface","architecture/overview.html#kb-mcp-mcp-server","architecture/overview.html#nushell-scripts","architecture/overview.html#core-library-kb-core","architecture/overview.html#models","architecture/overview.html#storage-trait","architecture/overview.html#embedding-provider-trait","architecture/overview.html#parser","architecture/overview.html#configuration-system","architecture/overview.html#nickel-schema","architecture/overview.html#loading-process","architecture/overview.html#storage-architecture","architecture/overview.html#hybrid-strategy","architecture/overview.html#file-layout","architecture/overview.html#query-engine","architecture/overview.html#text-search","architecture/overview.html#semantic-search","architecture/overview.html#cross-graph-query","architecture/overview.html#mcp-protocol-flow","architecture/overview.html#template-system","architecture/overview.html#error-handling","architecture/overview.html#testing-strategy","architecture/overview.html#performance-considerations","architecture/overview.html#security","architecture/overview.html#scalability","architecture/overview.html#next-steps","architecture/graph-model.html#graph-model","architecture/config-driven.html#config-driven-architecture","architecture/config-driven.html#philosophy","architecture/config-driven.html#configuration-composition-flow","architecture/config-driven.html#layer-1-schema-contracts","architecture/config-driven.html#layer-2-defaults","architecture/config-driven.html#layer-3-mode-overlays","architecture/config-driven.html#layer-4-user-customizations","architecture/config-driven.html#composition-mechanism","architecture/config-driven.html#export-to-json","architecture/config-driven.html#rust-integration","architecture/config-driven.html#double-validation","architecture/config-driven.html#1-nickel-contract-validation","architecture/config-driven.html#2-serde-deserialization-validation","architecture/config-driven.html#benefits-of-config-driven-architecture","architecture/config-driven.html#1-zero-hardcoding","architecture/config-driven.html#2-environment-flexibility","architecture/config-driven.html#3-self-documenting","architecture/config-driven.html#4-type-safe-evolution","architecture/config-driven.html#5-testability","architecture/config-driven.html#configuration-discovery","architecture/config-driven.html#integration-with-justfile","architecture/config-driven.html#best-practices","architecture/config-driven.html#1-never-hardcode","architecture/config-driven.html#2-use-modes-for-environment-differences","architecture/config-driven.html#3-document-complex-fields","architecture/config-driven.html#4-validate-early","architecture/config-driven.html#5-version-configs","architecture/config-driven.html#see-also","architecture/storage-architecture.html#storage-architecture","architecture/logseq-blocks-design.html#logseq-blocks-support---architecture-design","architecture/logseq-blocks-design.html#problem-statement","architecture/logseq-blocks-design.html#use-cases","architecture/logseq-blocks-design.html#1-flashcards-card","architecture/logseq-blocks-design.html#2-task-tracking-tododone","architecture/logseq-blocks-design.html#3-block-references","architecture/logseq-blocks-design.html#4-block-properties","architecture/logseq-blocks-design.html#design-options","architecture/logseq-blocks-design.html#option-a-blocks-as-first-class-data-structure","architecture/logseq-blocks-design.html#option-b-parser-only-approach","architecture/logseq-blocks-design.html#option-c-hybrid-approach-recommended","architecture/logseq-blocks-design.html#recommended-implementation","architecture/logseq-blocks-design.html#query-api-extensions","architecture/logseq-blocks-design.html#mcp-tool-extensions","architecture/logseq-blocks-design.html#configuration","architecture/logseq-blocks-design.html#migration-path","architecture/logseq-blocks-design.html#testing-strategy","architecture/logseq-blocks-design.html#summary","architecture/adrs/001-nickel-vs-toml.html#adr-001-nickel-vs-toml-for-configuration","architecture/adrs/001-nickel-vs-toml.html#context","architecture/adrs/001-nickel-vs-toml.html#option-1-toml-traditional-config-format","architecture/adrs/001-nickel-vs-toml.html#option-2-nickel-functional-configuration-language","architecture/adrs/001-nickel-vs-toml.html#decision","architecture/adrs/001-nickel-vs-toml.html#consequences","architecture/adrs/001-nickel-vs-toml.html#positive","architecture/adrs/001-nickel-vs-toml.html#negative","architecture/adrs/001-nickel-vs-toml.html#neutral","architecture/adrs/001-nickel-vs-toml.html#alternatives-considered","architecture/adrs/001-nickel-vs-toml.html#json-schema","architecture/adrs/001-nickel-vs-toml.html#yaml","architecture/adrs/001-nickel-vs-toml.html#dhall","architecture/adrs/001-nickel-vs-toml.html#kcl-kusionstack-configuration-language","architecture/adrs/001-nickel-vs-toml.html#implementation-timeline","architecture/adrs/001-nickel-vs-toml.html#monitoring","architecture/adrs/001-nickel-vs-toml.html#references","architecture/adrs/001-nickel-vs-toml.html#revision-history","architecture/adrs/002-fastembed-ai-providers.html#adr-002-fastembed-via-ai-providers-for-embeddings","architecture/adrs/002-fastembed-ai-providers.html#context","architecture/adrs/002-fastembed-ai-providers.html#option-1-only-local-embeddings-fastembed","architecture/adrs/002-fastembed-ai-providers.html#option-2-only-cloud-ai-providers-openai-claude-etc","architecture/adrs/002-fastembed-ai-providers.html#option-3-hybrid-strategy-fastembed--ai-providers-via-rig-core","architecture/adrs/002-fastembed-ai-providers.html#decision","architecture/adrs/002-fastembed-ai-providers.html#consequences","architecture/adrs/002-fastembed-ai-providers.html#positive","architecture/adrs/002-fastembed-ai-providers.html#negative","architecture/adrs/002-fastembed-ai-providers.html#neutral","architecture/adrs/002-fastembed-ai-providers.html#provider-comparison","architecture/adrs/002-fastembed-ai-providers.html#implementation-timeline","architecture/adrs/002-fastembed-ai-providers.html#monitoring","architecture/adrs/002-fastembed-ai-providers.html#references","architecture/adrs/002-fastembed-ai-providers.html#revision-history","architecture/adrs/003-hybrid-storage.html#adr-003-hybrid-storage-strategy","architecture/adrs/003-hybrid-storage.html#context","architecture/adrs/003-hybrid-storage.html#option-1-filesystem-only","architecture/adrs/003-hybrid-storage.html#option-2-database-only-surrealdb","architecture/adrs/003-hybrid-storage.html#option-3-hybrid-filesystem--surrealdb","architecture/adrs/003-hybrid-storage.html#decision","architecture/adrs/003-hybrid-storage.html#consequences","architecture/adrs/003-hybrid-storage.html#positive","architecture/adrs/003-hybrid-storage.html#negative","architecture/adrs/003-hybrid-storage.html#neutral","architecture/adrs/003-hybrid-storage.html#use-cases","architecture/adrs/003-hybrid-storage.html#small-project-solo-developer","architecture/adrs/003-hybrid-storage.html#medium-project-team","architecture/adrs/003-hybrid-storage.html#large-organization","architecture/adrs/003-hybrid-storage.html#sync-mechanism","architecture/adrs/003-hybrid-storage.html#filesystem--surrealdb","architecture/adrs/003-hybrid-storage.html#surrealdb--filesystem","architecture/adrs/003-hybrid-storage.html#conflict-resolution","architecture/adrs/003-hybrid-storage.html#alternatives-considered","architecture/adrs/003-hybrid-storage.html#git-submodules-for-shared-knowledge","architecture/adrs/003-hybrid-storage.html#syncthing-for-filesystem-sync","architecture/adrs/003-hybrid-storage.html#postgresql-with-json","architecture/adrs/003-hybrid-storage.html#migration-path","architecture/adrs/003-hybrid-storage.html#phase-1-filesystem-only-current","architecture/adrs/003-hybrid-storage.html#phase-2-optional-surrealdb","architecture/adrs/003-hybrid-storage.html#phase-3-automatic-sync","architecture/adrs/003-hybrid-storage.html#phase-4-multi-tenant-surrealdb","architecture/adrs/003-hybrid-storage.html#monitoring","architecture/adrs/003-hybrid-storage.html#references","architecture/adrs/003-hybrid-storage.html#revision-history","architecture/adrs/004-logseq-blocks-support.html#adr-004-logseq-blocks-support","architecture/adrs/004-logseq-blocks-support.html#status","architecture/adrs/004-logseq-blocks-support.html#context","architecture/adrs/004-logseq-blocks-support.html#decision","architecture/adrs/004-logseq-blocks-support.html#1-add-block-data-structure","architecture/adrs/004-logseq-blocks-support.html#2-extend-node-model","architecture/adrs/004-logseq-blocks-support.html#3-bidirectional-parser","architecture/adrs/004-logseq-blocks-support.html#4-storage-strategy","architecture/adrs/004-logseq-blocks-support.html#5-query-extensions","architecture/adrs/004-logseq-blocks-support.html#consequences","architecture/adrs/004-logseq-blocks-support.html#positive","architecture/adrs/004-logseq-blocks-support.html#negative","architecture/adrs/004-logseq-blocks-support.html#neutral","architecture/adrs/004-logseq-blocks-support.html#implementation-phases","architecture/adrs/004-logseq-blocks-support.html#alternatives-considered","architecture/adrs/004-logseq-blocks-support.html#alternative-1-blocks-as-first-class-nodes","architecture/adrs/004-logseq-blocks-support.html#alternative-2-parser-only-no-storage","architecture/adrs/004-logseq-blocks-support.html#alternative-3-metadata-field","architecture/adrs/004-logseq-blocks-support.html#references","architecture/adrs/004-logseq-blocks-support.html#notes","architecture/adrs/005-mcp-protocol.html#adr-005-mcp-protocol-for-ai-integration","setup/prerequisites.html#prerequisites","setup/installation.html#installation-methods","setup/project-init.html#project-initialization","setup/environment.html#environment-configuration","setup/verification.html#verification","config/overview.html#configuration-overview","config/nickel-schemas.html#nickel-schemas","config/graph-settings.html#graph-settings","config/inheritance.html#inheritance","config/examples.html#examples","storage/backends.html#storage-backends","storage/filesystem.html#filesystem-storage","storage/surrealdb.html#surrealdb-storage","storage/memory.html#in-memory-storage","storage/sync.html#sync-strategies","ai/embeddings-overview.html#embeddings-overview","ai/providers.html#provider-configuration","ai/fastembed.html#fastembed-local","ai/openai.html#openai-integration","ai/claude.html#claude-integration","ai/ollama.html#ollama-integration","ai/semantic-search.html#semantic-search","templates/overview.html#template-system","templates/documents.html#document-templates","templates/export.html#export-templates","templates/customization.html#customization","cli/overview.html#cli-overview","cli/commands.html#commands-reference","cli/workflows.html#workflows","cli/nushell-scripts.html#nushell-scripts","apps/mcp-quickguide.html#mcp-quick-guide","apps/mcp-quickguide.html#what-is-mcp","apps/mcp-quickguide.html#quick-setup-5-minutes","apps/mcp-quickguide.html#step-1-build-mcp-server","apps/mcp-quickguide.html#step-2-configure-claude-code","apps/mcp-quickguide.html#step-3-initialize-kogral","apps/mcp-quickguide.html#step-4-start-claude-code","apps/mcp-quickguide.html#step-5-test-connection","apps/mcp-quickguide.html#essential-commands","apps/mcp-quickguide.html#search-knowledge-base","apps/mcp-quickguide.html#add-note","apps/mcp-quickguide.html#add-decision","apps/mcp-quickguide.html#get-guidelines","apps/mcp-quickguide.html#link-concepts","apps/mcp-quickguide.html#common-workflows","apps/mcp-quickguide.html#capture-meeting-notes","apps/mcp-quickguide.html#find-related-knowledge","apps/mcp-quickguide.html#document-implementation","apps/mcp-quickguide.html#review-project-knowledge","apps/mcp-quickguide.html#advanced-usage","apps/mcp-quickguide.html#conditional-queries","apps/mcp-quickguide.html#cross-reference-check","apps/mcp-quickguide.html#export-for-sharing","apps/mcp-quickguide.html#tips-and-tricks","apps/mcp-quickguide.html#1-use-natural-language","apps/mcp-quickguide.html#2-be-specific-with-tags","apps/mcp-quickguide.html#3-link-as-you-go","apps/mcp-quickguide.html#4-review-regularly","apps/mcp-quickguide.html#5-use-semantic-search","apps/mcp-quickguide.html#troubleshooting","apps/mcp-quickguide.html#mcp-server-not-responding","apps/mcp-quickguide.html#kb-directory-not-found","apps/mcp-quickguide.html#permission-denied","apps/mcp-quickguide.html#empty-search-results","apps/mcp-quickguide.html#next-steps","apps/mcp-quickguide.html#quick-reference-card","apps/claude-code.html#claude-code-integration","apps/logseq.html#logseq-integration","apps/obsidian.html#obsidian-compatibility","apps/git.html#git-workflows","api/mcp-protocol.html#mcp-protocol","api/mcp-tools.html#mcp-tools-api-reference","api/mcp-tools.html#overview","api/mcp-tools.html#server-configuration","api/mcp-tools.html#start-mcp-server","api/mcp-tools.html#claude-code-configuration","api/mcp-tools.html#tools","api/mcp-tools.html#kbsearch","api/mcp-tools.html#kbadd_note","api/mcp-tools.html#kbadd_decision","api/mcp-tools.html#kblink","api/mcp-tools.html#kbget_guidelines","api/mcp-tools.html#kblist_graphs","api/mcp-tools.html#kbexport","api/mcp-tools.html#block-tools","api/mcp-tools.html#kbfind_blocks","api/mcp-tools.html#kbfind_todos","api/mcp-tools.html#kbfind_cards","api/mcp-tools.html#resources","api/mcp-tools.html#kogralprojectnotes","api/mcp-tools.html#kogralprojectdecisions","api/mcp-tools.html#kogralprojectguidelines","api/mcp-tools.html#kogralprojectpatterns","api/mcp-tools.html#kogralsharedguidelines","api/mcp-tools.html#kogralsharedpatterns","api/mcp-tools.html#prompts","api/mcp-tools.html#kbsummarize_project","api/mcp-tools.html#kbfind_related","api/mcp-tools.html#error-handling","api/mcp-tools.html#error-codes","api/mcp-tools.html#example-error-response","api/mcp-tools.html#best-practices","api/mcp-tools.html#1-use-semantic-search-for-discovery","api/mcp-tools.html#2-link-related-concepts","api/mcp-tools.html#3-query-guidelines-before-implementation","api/mcp-tools.html#4-document-decisions-with-adrs","api/mcp-tools.html#see-also","api/mcp-resources.html#resources","api/rust-api.html#rust-api","contributing/development.html#development-setup","contributing/standards.html#code-standards","contributing/testing.html#testing"],"index":{"documentStore":{"docInfo":{"0":{"body":17,"breadcrumbs":3,"title":2},"1":{"body":4,"breadcrumbs":3,"title":2},"10":{"body":5,"breadcrumbs":3,"title":2},"100":{"body":72,"breadcrumbs":3,"title":1},"101":{"body":33,"breadcrumbs":4,"title":2},"102":{"body":15,"breadcrumbs":4,"title":2},"103":{"body":6,"breadcrumbs":2,"title":1},"104":{"body":94,"breadcrumbs":4,"title":3},"105":{"body":44,"breadcrumbs":6,"title":5},"106":{"body":0,"breadcrumbs":4,"title":3},"107":{"body":46,"breadcrumbs":4,"title":3},"108":{"body":57,"breadcrumbs":4,"title":3},"109":{"body":37,"breadcrumbs":4,"title":3},"11":{"body":3,"breadcrumbs":4,"title":3},"110":{"body":57,"breadcrumbs":4,"title":3},"111":{"body":31,"breadcrumbs":4,"title":3},"112":{"body":0,"breadcrumbs":4,"title":3},"113":{"body":32,"breadcrumbs":3,"title":2},"114":{"body":33,"breadcrumbs":2,"title":1},"115":{"body":22,"breadcrumbs":3,"title":2},"116":{"body":27,"breadcrumbs":2,"title":1},"117":{"body":24,"breadcrumbs":3,"title":2},"118":{"body":32,"breadcrumbs":2,"title":1},"119":{"body":0,"breadcrumbs":2,"title":1},"12":{"body":25,"breadcrumbs":4,"title":3},"120":{"body":24,"breadcrumbs":3,"title":2},"121":{"body":22,"breadcrumbs":2,"title":1},"122":{"body":22,"breadcrumbs":2,"title":1},"123":{"body":26,"breadcrumbs":3,"title":2},"124":{"body":44,"breadcrumbs":3,"title":2},"125":{"body":37,"breadcrumbs":2,"title":1},"126":{"body":5,"breadcrumbs":3,"title":2},"127":{"body":11,"breadcrumbs":6,"title":5},"128":{"body":6,"breadcrumbs":5,"title":4},"129":{"body":13,"breadcrumbs":5,"title":4},"13":{"body":6,"breadcrumbs":3,"title":2},"130":{"body":34,"breadcrumbs":2,"title":1},"131":{"body":7,"breadcrumbs":4,"title":2},"132":{"body":0,"breadcrumbs":4,"title":2},"133":{"body":60,"breadcrumbs":6,"title":4},"134":{"body":55,"breadcrumbs":6,"title":4},"135":{"body":47,"breadcrumbs":7,"title":5},"136":{"body":59,"breadcrumbs":6,"title":4},"137":{"body":70,"breadcrumbs":7,"title":5},"138":{"body":51,"breadcrumbs":6,"title":4},"139":{"body":54,"breadcrumbs":7,"title":5},"14":{"body":4,"breadcrumbs":3,"title":2},"140":{"body":72,"breadcrumbs":8,"title":6},"141":{"body":59,"breadcrumbs":5,"title":3},"142":{"body":71,"breadcrumbs":5,"title":3},"143":{"body":68,"breadcrumbs":7,"title":5},"144":{"body":40,"breadcrumbs":5,"title":3},"145":{"body":0,"breadcrumbs":5,"title":3},"146":{"body":10,"breadcrumbs":5,"title":3},"147":{"body":15,"breadcrumbs":6,"title":4},"148":{"body":3,"breadcrumbs":5,"title":3},"149":{"body":19,"breadcrumbs":5,"title":3},"15":{"body":9,"breadcrumbs":5,"title":4},"150":{"body":12,"breadcrumbs":5,"title":3},"151":{"body":42,"breadcrumbs":3,"title":1},"152":{"body":0,"breadcrumbs":4,"title":2},"153":{"body":20,"breadcrumbs":3,"title":1},"154":{"body":9,"breadcrumbs":3,"title":1},"155":{"body":12,"breadcrumbs":3,"title":1},"156":{"body":27,"breadcrumbs":4,"title":2},"157":{"body":51,"breadcrumbs":3,"title":1},"158":{"body":12,"breadcrumbs":4,"title":2},"159":{"body":6,"breadcrumbs":2,"title":1},"16":{"body":9,"breadcrumbs":4,"title":3},"160":{"body":0,"breadcrumbs":2,"title":1},"161":{"body":19,"breadcrumbs":2,"title":1},"162":{"body":19,"breadcrumbs":2,"title":1},"163":{"body":0,"breadcrumbs":3,"title":2},"164":{"body":28,"breadcrumbs":6,"title":5},"165":{"body":29,"breadcrumbs":6,"title":5},"166":{"body":21,"breadcrumbs":5,"title":4},"167":{"body":39,"breadcrumbs":3,"title":2},"168":{"body":0,"breadcrumbs":3,"title":2},"169":{"body":29,"breadcrumbs":5,"title":4},"17":{"body":13,"breadcrumbs":4,"title":3},"170":{"body":27,"breadcrumbs":6,"title":5},"171":{"body":36,"breadcrumbs":8,"title":7},"172":{"body":0,"breadcrumbs":3,"title":2},"173":{"body":16,"breadcrumbs":3,"title":2},"174":{"body":17,"breadcrumbs":4,"title":3},"175":{"body":20,"breadcrumbs":3,"title":2},"176":{"body":3,"breadcrumbs":4,"title":3},"177":{"body":24,"breadcrumbs":4,"title":3},"178":{"body":20,"breadcrumbs":4,"title":3},"179":{"body":24,"breadcrumbs":3,"title":2},"18":{"body":10,"breadcrumbs":4,"title":3},"180":{"body":0,"breadcrumbs":5,"title":4},"181":{"body":14,"breadcrumbs":3,"title":2},"182":{"body":33,"breadcrumbs":6,"title":5},"183":{"body":5,"breadcrumbs":4,"title":3},"184":{"body":6,"breadcrumbs":5,"title":4},"185":{"body":12,"breadcrumbs":5,"title":4},"186":{"body":6,"breadcrumbs":4,"title":3},"187":{"body":0,"breadcrumbs":2,"title":1},"188":{"body":17,"breadcrumbs":3,"title":2},"189":{"body":12,"breadcrumbs":3,"title":2},"19":{"body":10,"breadcrumbs":4,"title":3},"190":{"body":18,"breadcrumbs":4,"title":3},"191":{"body":14,"breadcrumbs":4,"title":3},"192":{"body":16,"breadcrumbs":3,"title":2},"193":{"body":22,"breadcrumbs":2,"title":1},"194":{"body":5,"breadcrumbs":5,"title":3},"195":{"body":16,"breadcrumbs":3,"title":1},"196":{"body":32,"breadcrumbs":7,"title":5},"197":{"body":29,"breadcrumbs":7,"title":5},"198":{"body":28,"breadcrumbs":7,"title":5},"199":{"body":39,"breadcrumbs":7,"title":5},"2":{"body":26,"breadcrumbs":7,"title":6},"20":{"body":12,"breadcrumbs":4,"title":3},"200":{"body":39,"breadcrumbs":7,"title":5},"201":{"body":15,"breadcrumbs":7,"title":5},"202":{"body":56,"breadcrumbs":7,"title":5},"203":{"body":25,"breadcrumbs":8,"title":6},"204":{"body":19,"breadcrumbs":7,"title":5},"205":{"body":20,"breadcrumbs":9,"title":7},"206":{"body":0,"breadcrumbs":4,"title":2},"207":{"body":13,"breadcrumbs":5,"title":3},"208":{"body":14,"breadcrumbs":5,"title":3},"209":{"body":17,"breadcrumbs":5,"title":3},"21":{"body":8,"breadcrumbs":5,"title":4},"210":{"body":15,"breadcrumbs":5,"title":3},"211":{"body":0,"breadcrumbs":4,"title":2},"212":{"body":21,"breadcrumbs":4,"title":2},"213":{"body":44,"breadcrumbs":6,"title":4},"214":{"body":20,"breadcrumbs":5,"title":3},"215":{"body":22,"breadcrumbs":4,"title":2},"216":{"body":0,"breadcrumbs":4,"title":2},"217":{"body":14,"breadcrumbs":4,"title":2},"218":{"body":8,"breadcrumbs":4,"title":2},"219":{"body":13,"breadcrumbs":4,"title":2},"22":{"body":9,"breadcrumbs":4,"title":3},"220":{"body":16,"breadcrumbs":4,"title":2},"221":{"body":0,"breadcrumbs":3,"title":1},"222":{"body":14,"breadcrumbs":5,"title":3},"223":{"body":12,"breadcrumbs":4,"title":2},"224":{"body":12,"breadcrumbs":5,"title":3},"225":{"body":19,"breadcrumbs":4,"title":2},"226":{"body":28,"breadcrumbs":4,"title":2},"227":{"body":0,"breadcrumbs":4,"title":2},"228":{"body":9,"breadcrumbs":4,"title":2},"229":{"body":0,"breadcrumbs":9,"title":7},"23":{"body":8,"breadcrumbs":5,"title":4},"230":{"body":20,"breadcrumbs":3,"title":1},"231":{"body":119,"breadcrumbs":4,"title":2},"232":{"body":0,"breadcrumbs":9,"title":7},"233":{"body":13,"breadcrumbs":3,"title":1},"234":{"body":109,"breadcrumbs":4,"title":2},"235":{"body":0,"breadcrumbs":7,"title":5},"236":{"body":17,"breadcrumbs":3,"title":1},"237":{"body":73,"breadcrumbs":4,"title":2},"238":{"body":222,"breadcrumbs":3,"title":1},"239":{"body":0,"breadcrumbs":8,"title":6},"24":{"body":9,"breadcrumbs":5,"title":4},"240":{"body":15,"breadcrumbs":3,"title":1},"241":{"body":141,"breadcrumbs":4,"title":2},"242":{"body":0,"breadcrumbs":8,"title":6},"243":{"body":21,"breadcrumbs":3,"title":1},"244":{"body":121,"breadcrumbs":4,"title":2},"245":{"body":0,"breadcrumbs":7,"title":5},"246":{"body":16,"breadcrumbs":3,"title":1},"247":{"body":114,"breadcrumbs":4,"title":2},"248":{"body":0,"breadcrumbs":8,"title":6},"249":{"body":18,"breadcrumbs":3,"title":1},"25":{"body":10,"breadcrumbs":5,"title":4},"250":{"body":155,"breadcrumbs":4,"title":2},"251":{"body":59,"breadcrumbs":3,"title":1},"252":{"body":14,"breadcrumbs":4,"title":2},"253":{"body":0,"breadcrumbs":4,"title":2},"254":{"body":4,"breadcrumbs":4,"title":2},"255":{"body":41,"breadcrumbs":5,"title":3},"256":{"body":0,"breadcrumbs":4,"title":2},"257":{"body":79,"breadcrumbs":7,"title":5},"258":{"body":64,"breadcrumbs":6,"title":4},"259":{"body":44,"breadcrumbs":4,"title":2},"26":{"body":8,"breadcrumbs":4,"title":3},"260":{"body":0,"breadcrumbs":6,"title":4},"261":{"body":70,"breadcrumbs":3,"title":1},"262":{"body":41,"breadcrumbs":4,"title":2},"263":{"body":29,"breadcrumbs":5,"title":3},"264":{"body":57,"breadcrumbs":3,"title":1},"265":{"body":0,"breadcrumbs":4,"title":2},"266":{"body":17,"breadcrumbs":4,"title":2},"267":{"body":40,"breadcrumbs":4,"title":2},"268":{"body":0,"breadcrumbs":4,"title":2},"269":{"body":44,"breadcrumbs":4,"title":2},"27":{"body":36,"breadcrumbs":3,"title":2},"270":{"body":36,"breadcrumbs":4,"title":2},"271":{"body":0,"breadcrumbs":4,"title":2},"272":{"body":8,"breadcrumbs":4,"title":2},"273":{"body":19,"breadcrumbs":4,"title":2},"274":{"body":14,"breadcrumbs":5,"title":3},"275":{"body":22,"breadcrumbs":5,"title":3},"276":{"body":29,"breadcrumbs":4,"title":2},"277":{"body":32,"breadcrumbs":4,"title":2},"278":{"body":32,"breadcrumbs":4,"title":2},"279":{"body":40,"breadcrumbs":4,"title":2},"28":{"body":30,"breadcrumbs":3,"title":2},"280":{"body":28,"breadcrumbs":3,"title":1},"281":{"body":36,"breadcrumbs":3,"title":1},"282":{"body":16,"breadcrumbs":4,"title":2},"283":{"body":0,"breadcrumbs":4,"title":2},"284":{"body":13,"breadcrumbs":6,"title":3},"285":{"body":74,"breadcrumbs":4,"title":1},"286":{"body":9,"breadcrumbs":6,"title":3},"287":{"body":51,"breadcrumbs":7,"title":4},"288":{"body":40,"breadcrumbs":6,"title":3},"289":{"body":95,"breadcrumbs":7,"title":4},"29":{"body":0,"breadcrumbs":3,"title":2},"290":{"body":43,"breadcrumbs":7,"title":4},"291":{"body":70,"breadcrumbs":5,"title":2},"292":{"body":44,"breadcrumbs":5,"title":2},"293":{"body":85,"breadcrumbs":5,"title":2},"294":{"body":3,"breadcrumbs":5,"title":2},"295":{"body":37,"breadcrumbs":7,"title":4},"296":{"body":30,"breadcrumbs":7,"title":4},"297":{"body":0,"breadcrumbs":7,"title":4},"298":{"body":23,"breadcrumbs":6,"title":3},"299":{"body":40,"breadcrumbs":6,"title":3},"3":{"body":13,"breadcrumbs":6,"title":5},"30":{"body":12,"breadcrumbs":3,"title":2},"300":{"body":26,"breadcrumbs":6,"title":3},"301":{"body":22,"breadcrumbs":7,"title":4},"302":{"body":31,"breadcrumbs":5,"title":2},"303":{"body":57,"breadcrumbs":5,"title":2},"304":{"body":91,"breadcrumbs":5,"title":2},"305":{"body":0,"breadcrumbs":5,"title":2},"306":{"body":14,"breadcrumbs":6,"title":3},"307":{"body":40,"breadcrumbs":8,"title":5},"308":{"body":19,"breadcrumbs":7,"title":4},"309":{"body":8,"breadcrumbs":6,"title":3},"31":{"body":11,"breadcrumbs":4,"title":3},"310":{"body":8,"breadcrumbs":6,"title":3},"311":{"body":17,"breadcrumbs":4,"title":1},"312":{"body":0,"breadcrumbs":4,"title":2},"313":{"body":0,"breadcrumbs":8,"title":5},"314":{"body":81,"breadcrumbs":5,"title":2},"315":{"body":0,"breadcrumbs":5,"title":2},"316":{"body":31,"breadcrumbs":6,"title":3},"317":{"body":26,"breadcrumbs":7,"title":4},"318":{"body":19,"breadcrumbs":6,"title":3},"319":{"body":18,"breadcrumbs":6,"title":3},"32":{"body":10,"breadcrumbs":4,"title":3},"320":{"body":0,"breadcrumbs":5,"title":2},"321":{"body":109,"breadcrumbs":9,"title":6},"322":{"body":55,"breadcrumbs":7,"title":4},"323":{"body":145,"breadcrumbs":8,"title":5},"324":{"body":912,"breadcrumbs":5,"title":2},"325":{"body":68,"breadcrumbs":6,"title":3},"326":{"body":41,"breadcrumbs":6,"title":3},"327":{"body":61,"breadcrumbs":4,"title":1},"328":{"body":50,"breadcrumbs":5,"title":2},"329":{"body":82,"breadcrumbs":5,"title":2},"33":{"body":0,"breadcrumbs":3,"title":2},"330":{"body":86,"breadcrumbs":4,"title":1},"331":{"body":15,"breadcrumbs":12,"title":6},"332":{"body":45,"breadcrumbs":7,"title":1},"333":{"body":101,"breadcrumbs":12,"title":6},"334":{"body":114,"breadcrumbs":12,"title":6},"335":{"body":85,"breadcrumbs":7,"title":1},"336":{"body":0,"breadcrumbs":7,"title":1},"337":{"body":98,"breadcrumbs":7,"title":1},"338":{"body":67,"breadcrumbs":7,"title":1},"339":{"body":23,"breadcrumbs":7,"title":1},"34":{"body":8,"breadcrumbs":4,"title":3},"340":{"body":0,"breadcrumbs":8,"title":2},"341":{"body":17,"breadcrumbs":8,"title":2},"342":{"body":16,"breadcrumbs":7,"title":1},"343":{"body":16,"breadcrumbs":7,"title":1},"344":{"body":14,"breadcrumbs":10,"title":4},"345":{"body":32,"breadcrumbs":8,"title":2},"346":{"body":37,"breadcrumbs":7,"title":1},"347":{"body":12,"breadcrumbs":7,"title":1},"348":{"body":18,"breadcrumbs":8,"title":2},"349":{"body":14,"breadcrumbs":13,"title":7},"35":{"body":6,"breadcrumbs":3,"title":2},"350":{"body":64,"breadcrumbs":7,"title":1},"351":{"body":53,"breadcrumbs":11,"title":5},"352":{"body":50,"breadcrumbs":14,"title":8},"353":{"body":50,"breadcrumbs":16,"title":10},"354":{"body":215,"breadcrumbs":7,"title":1},"355":{"body":0,"breadcrumbs":7,"title":1},"356":{"body":88,"breadcrumbs":7,"title":1},"357":{"body":67,"breadcrumbs":7,"title":1},"358":{"body":18,"breadcrumbs":7,"title":1},"359":{"body":56,"breadcrumbs":8,"title":2},"36":{"body":58,"breadcrumbs":3,"title":2},"360":{"body":35,"breadcrumbs":8,"title":2},"361":{"body":48,"breadcrumbs":7,"title":1},"362":{"body":12,"breadcrumbs":7,"title":1},"363":{"body":24,"breadcrumbs":8,"title":2},"364":{"body":15,"breadcrumbs":10,"title":5},"365":{"body":70,"breadcrumbs":6,"title":1},"366":{"body":40,"breadcrumbs":8,"title":3},"367":{"body":39,"breadcrumbs":9,"title":4},"368":{"body":47,"breadcrumbs":10,"title":5},"369":{"body":94,"breadcrumbs":6,"title":1},"37":{"body":0,"breadcrumbs":2,"title":1},"370":{"body":0,"breadcrumbs":6,"title":1},"371":{"body":101,"breadcrumbs":6,"title":1},"372":{"body":69,"breadcrumbs":6,"title":1},"373":{"body":39,"breadcrumbs":6,"title":1},"374":{"body":0,"breadcrumbs":7,"title":2},"375":{"body":15,"breadcrumbs":9,"title":4},"376":{"body":27,"breadcrumbs":8,"title":3},"377":{"body":38,"breadcrumbs":7,"title":2},"378":{"body":0,"breadcrumbs":7,"title":2},"379":{"body":22,"breadcrumbs":7,"title":2},"38":{"body":12,"breadcrumbs":4,"title":3},"380":{"body":24,"breadcrumbs":7,"title":2},"381":{"body":31,"breadcrumbs":7,"title":2},"382":{"body":0,"breadcrumbs":7,"title":2},"383":{"body":16,"breadcrumbs":9,"title":4},"384":{"body":12,"breadcrumbs":8,"title":3},"385":{"body":16,"breadcrumbs":7,"title":2},"386":{"body":0,"breadcrumbs":7,"title":2},"387":{"body":7,"breadcrumbs":9,"title":4},"388":{"body":11,"breadcrumbs":9,"title":4},"389":{"body":7,"breadcrumbs":9,"title":4},"39":{"body":18,"breadcrumbs":4,"title":3},"390":{"body":6,"breadcrumbs":10,"title":5},"391":{"body":38,"breadcrumbs":6,"title":1},"392":{"body":9,"breadcrumbs":6,"title":1},"393":{"body":24,"breadcrumbs":7,"title":2},"394":{"body":0,"breadcrumbs":10,"title":5},"395":{"body":3,"breadcrumbs":6,"title":1},"396":{"body":62,"breadcrumbs":6,"title":1},"397":{"body":6,"breadcrumbs":6,"title":1},"398":{"body":52,"breadcrumbs":10,"title":5},"399":{"body":17,"breadcrumbs":9,"title":4},"4":{"body":26,"breadcrumbs":7,"title":6},"40":{"body":16,"breadcrumbs":3,"title":2},"400":{"body":9,"breadcrumbs":8,"title":3},"401":{"body":44,"breadcrumbs":8,"title":3},"402":{"body":12,"breadcrumbs":8,"title":3},"403":{"body":0,"breadcrumbs":6,"title":1},"404":{"body":44,"breadcrumbs":6,"title":1},"405":{"body":29,"breadcrumbs":6,"title":1},"406":{"body":17,"breadcrumbs":6,"title":1},"407":{"body":99,"breadcrumbs":7,"title":2},"408":{"body":0,"breadcrumbs":7,"title":2},"409":{"body":14,"breadcrumbs":11,"title":6},"41":{"body":0,"breadcrumbs":2,"title":1},"410":{"body":15,"breadcrumbs":9,"title":4},"411":{"body":12,"breadcrumbs":9,"title":4},"412":{"body":8,"breadcrumbs":6,"title":1},"413":{"body":50,"breadcrumbs":6,"title":1},"414":{"body":0,"breadcrumbs":12,"title":6},"415":{"body":0,"breadcrumbs":2,"title":1},"416":{"body":0,"breadcrumbs":4,"title":2},"417":{"body":0,"breadcrumbs":4,"title":2},"418":{"body":0,"breadcrumbs":4,"title":2},"419":{"body":0,"breadcrumbs":2,"title":1},"42":{"body":9,"breadcrumbs":4,"title":3},"420":{"body":0,"breadcrumbs":4,"title":2},"421":{"body":0,"breadcrumbs":4,"title":2},"422":{"body":0,"breadcrumbs":4,"title":2},"423":{"body":0,"breadcrumbs":2,"title":1},"424":{"body":0,"breadcrumbs":2,"title":1},"425":{"body":0,"breadcrumbs":4,"title":2},"426":{"body":0,"breadcrumbs":4,"title":2},"427":{"body":0,"breadcrumbs":4,"title":2},"428":{"body":0,"breadcrumbs":4,"title":2},"429":{"body":0,"breadcrumbs":4,"title":2},"43":{"body":9,"breadcrumbs":5,"title":4},"430":{"body":0,"breadcrumbs":4,"title":2},"431":{"body":0,"breadcrumbs":4,"title":2},"432":{"body":0,"breadcrumbs":4,"title":2},"433":{"body":0,"breadcrumbs":4,"title":2},"434":{"body":0,"breadcrumbs":4,"title":2},"435":{"body":0,"breadcrumbs":4,"title":2},"436":{"body":0,"breadcrumbs":4,"title":2},"437":{"body":0,"breadcrumbs":4,"title":2},"438":{"body":0,"breadcrumbs":4,"title":2},"439":{"body":0,"breadcrumbs":4,"title":2},"44":{"body":11,"breadcrumbs":5,"title":4},"440":{"body":0,"breadcrumbs":2,"title":1},"441":{"body":0,"breadcrumbs":4,"title":2},"442":{"body":0,"breadcrumbs":4,"title":2},"443":{"body":0,"breadcrumbs":2,"title":1},"444":{"body":0,"breadcrumbs":4,"title":2},"445":{"body":12,"breadcrumbs":6,"title":3},"446":{"body":26,"breadcrumbs":4,"title":1},"447":{"body":0,"breadcrumbs":7,"title":4},"448":{"body":16,"breadcrumbs":8,"title":5},"449":{"body":20,"breadcrumbs":8,"title":5},"45":{"body":9,"breadcrumbs":2,"title":1},"450":{"body":9,"breadcrumbs":7,"title":4},"451":{"body":9,"breadcrumbs":8,"title":5},"452":{"body":13,"breadcrumbs":7,"title":4},"453":{"body":0,"breadcrumbs":5,"title":2},"454":{"body":19,"breadcrumbs":6,"title":3},"455":{"body":25,"breadcrumbs":5,"title":2},"456":{"body":33,"breadcrumbs":5,"title":2},"457":{"body":16,"breadcrumbs":4,"title":1},"458":{"body":23,"breadcrumbs":5,"title":2},"459":{"body":0,"breadcrumbs":5,"title":2},"46":{"body":33,"breadcrumbs":3,"title":2},"460":{"body":57,"breadcrumbs":6,"title":3},"461":{"body":86,"breadcrumbs":6,"title":3},"462":{"body":41,"breadcrumbs":5,"title":2},"463":{"body":84,"breadcrumbs":6,"title":3},"464":{"body":0,"breadcrumbs":5,"title":2},"465":{"body":46,"breadcrumbs":5,"title":2},"466":{"body":55,"breadcrumbs":6,"title":3},"467":{"body":33,"breadcrumbs":5,"title":2},"468":{"body":0,"breadcrumbs":5,"title":2},"469":{"body":16,"breadcrumbs":7,"title":4},"47":{"body":21,"breadcrumbs":2,"title":1},"470":{"body":16,"breadcrumbs":6,"title":3},"471":{"body":11,"breadcrumbs":6,"title":3},"472":{"body":5,"breadcrumbs":6,"title":3},"473":{"body":16,"breadcrumbs":7,"title":4},"474":{"body":0,"breadcrumbs":4,"title":1},"475":{"body":14,"breadcrumbs":6,"title":3},"476":{"body":12,"breadcrumbs":6,"title":3},"477":{"body":12,"breadcrumbs":5,"title":2},"478":{"body":16,"breadcrumbs":6,"title":3},"479":{"body":23,"breadcrumbs":5,"title":2},"48":{"body":25,"breadcrumbs":2,"title":1},"480":{"body":57,"breadcrumbs":6,"title":3},"481":{"body":0,"breadcrumbs":6,"title":3},"482":{"body":0,"breadcrumbs":4,"title":2},"483":{"body":0,"breadcrumbs":4,"title":2},"484":{"body":0,"breadcrumbs":4,"title":2},"485":{"body":0,"breadcrumbs":4,"title":2},"486":{"body":9,"breadcrumbs":6,"title":4},"487":{"body":39,"breadcrumbs":3,"title":1},"488":{"body":0,"breadcrumbs":4,"title":2},"489":{"body":11,"breadcrumbs":5,"title":3},"49":{"body":35,"breadcrumbs":2,"title":1},"490":{"body":13,"breadcrumbs":5,"title":3},"491":{"body":0,"breadcrumbs":3,"title":1},"492":{"body":156,"breadcrumbs":3,"title":1},"493":{"body":116,"breadcrumbs":3,"title":1},"494":{"body":139,"breadcrumbs":3,"title":1},"495":{"body":117,"breadcrumbs":3,"title":1},"496":{"body":129,"breadcrumbs":3,"title":1},"497":{"body":54,"breadcrumbs":3,"title":1},"498":{"body":104,"breadcrumbs":3,"title":1},"499":{"body":9,"breadcrumbs":4,"title":2},"5":{"body":10,"breadcrumbs":3,"title":2},"50":{"body":0,"breadcrumbs":3,"title":2},"500":{"body":149,"breadcrumbs":3,"title":1},"501":{"body":84,"breadcrumbs":3,"title":1},"502":{"body":121,"breadcrumbs":3,"title":1},"503":{"body":9,"breadcrumbs":3,"title":1},"504":{"body":19,"breadcrumbs":3,"title":1},"505":{"body":8,"breadcrumbs":3,"title":1},"506":{"body":8,"breadcrumbs":3,"title":1},"507":{"body":7,"breadcrumbs":3,"title":1},"508":{"body":8,"breadcrumbs":3,"title":1},"509":{"body":8,"breadcrumbs":3,"title":1},"51":{"body":24,"breadcrumbs":3,"title":2},"510":{"body":6,"breadcrumbs":3,"title":1},"511":{"body":44,"breadcrumbs":3,"title":1},"512":{"body":52,"breadcrumbs":3,"title":1},"513":{"body":0,"breadcrumbs":4,"title":2},"514":{"body":37,"breadcrumbs":4,"title":2},"515":{"body":18,"breadcrumbs":5,"title":3},"516":{"body":0,"breadcrumbs":4,"title":2},"517":{"body":12,"breadcrumbs":7,"title":5},"518":{"body":11,"breadcrumbs":6,"title":4},"519":{"body":7,"breadcrumbs":7,"title":5},"52":{"body":35,"breadcrumbs":3,"title":2},"520":{"body":15,"breadcrumbs":6,"title":4},"521":{"body":11,"breadcrumbs":3,"title":1},"522":{"body":0,"breadcrumbs":2,"title":1},"523":{"body":0,"breadcrumbs":4,"title":2},"524":{"body":0,"breadcrumbs":4,"title":2},"525":{"body":0,"breadcrumbs":4,"title":2},"526":{"body":0,"breadcrumbs":2,"title":1},"53":{"body":28,"breadcrumbs":3,"title":2},"54":{"body":0,"breadcrumbs":3,"title":2},"55":{"body":49,"breadcrumbs":2,"title":1},"56":{"body":34,"breadcrumbs":2,"title":1},"57":{"body":40,"breadcrumbs":4,"title":3},"58":{"body":0,"breadcrumbs":3,"title":2},"59":{"body":19,"breadcrumbs":2,"title":1},"6":{"body":14,"breadcrumbs":3,"title":2},"60":{"body":17,"breadcrumbs":2,"title":1},"61":{"body":18,"breadcrumbs":3,"title":2},"62":{"body":0,"breadcrumbs":3,"title":2},"63":{"body":49,"breadcrumbs":3,"title":2},"64":{"body":44,"breadcrumbs":3,"title":2},"65":{"body":33,"breadcrumbs":3,"title":2},"66":{"body":43,"breadcrumbs":3,"title":2},"67":{"body":38,"breadcrumbs":3,"title":2},"68":{"body":22,"breadcrumbs":3,"title":2},"69":{"body":5,"breadcrumbs":4,"title":2},"7":{"body":10,"breadcrumbs":2,"title":1},"70":{"body":38,"breadcrumbs":4,"title":2},"71":{"body":0,"breadcrumbs":4,"title":2},"72":{"body":41,"breadcrumbs":4,"title":2},"73":{"body":72,"breadcrumbs":5,"title":3},"74":{"body":56,"breadcrumbs":4,"title":2},"75":{"body":62,"breadcrumbs":4,"title":2},"76":{"body":51,"breadcrumbs":4,"title":2},"77":{"body":37,"breadcrumbs":4,"title":2},"78":{"body":0,"breadcrumbs":4,"title":2},"79":{"body":19,"breadcrumbs":4,"title":2},"8":{"body":4,"breadcrumbs":2,"title":1},"80":{"body":23,"breadcrumbs":4,"title":2},"81":{"body":18,"breadcrumbs":4,"title":2},"82":{"body":18,"breadcrumbs":4,"title":2},"83":{"body":19,"breadcrumbs":4,"title":2},"84":{"body":17,"breadcrumbs":4,"title":2},"85":{"body":5,"breadcrumbs":5,"title":3},"86":{"body":23,"breadcrumbs":6,"title":4},"87":{"body":24,"breadcrumbs":6,"title":4},"88":{"body":35,"breadcrumbs":4,"title":2},"89":{"body":33,"breadcrumbs":5,"title":3},"9":{"body":1,"breadcrumbs":4,"title":3},"90":{"body":74,"breadcrumbs":4,"title":2},"91":{"body":28,"breadcrumbs":3,"title":1},"92":{"body":34,"breadcrumbs":4,"title":2},"93":{"body":36,"breadcrumbs":5,"title":3},"94":{"body":11,"breadcrumbs":5,"title":3},"95":{"body":25,"breadcrumbs":3,"title":1},"96":{"body":91,"breadcrumbs":4,"title":2},"97":{"body":29,"breadcrumbs":3,"title":1},"98":{"body":82,"breadcrumbs":4,"title":2},"99":{"body":36,"breadcrumbs":6,"title":4}},"docs":{"0":{"body":"Welcome to the KOGRAL documentation! This directory contains comprehensive documentation for KOGRAL ( KO wledge GRA phs, L ocal-first), built with mdBook .","breadcrumbs":"Introduction » KOGRAL Documentation","id":"0","title":"KOGRAL Documentation"},"1":{"body":"You have several options for reading the documentation:","breadcrumbs":"Introduction » 📚 Reading the Documentation","id":"1","title":"📚 Reading the Documentation"},"10":{"body":"mdBook is required to build and serve the documentation.","breadcrumbs":"Introduction » 📦 Installing mdBook","id":"10","title":"📦 Installing mdBook"},"100":{"body":"Hybrid Model : Content stored as markdown string (source of truth) Blocks lazily parsed on first access Cached block structure for fast queries Bidirectional: markdown ↔ blocks BlockParser : Parse outliner markdown → Block structures Serialize Block structures → outliner markdown Preserve all metadata (tags, status, properties, references) Round-trip fidelity for Logseq compatibility Storage : Filesystem: markdown with blocks inline SurrealDB: dedicated block table with indexes Indexes: tags, status, parent_id, full-text search See Also : ADR-004: Logseq Blocks Support Logseq Blocks Design MCP Block Tools","breadcrumbs":"Core Concepts » Architecture","id":"100","title":"Architecture"},"101":{"body":"Capture During Work : Don\'t wait, document as you go Link as You Learn : Connect related concepts immediately Query When Needed : AI-assisted discovery of relevant knowledge Evolve Over Time : Update decisions, supersede patterns Share Wisely : Shared guidelines, local specifics","breadcrumbs":"Core Concepts » Key Principles","id":"101","title":"Key Principles"},"102":{"body":"Understand motivation : Why KOGRAL? Learn philosophy : Design Philosophy See architecture : System Overview Start using : Quick Start","breadcrumbs":"Core Concepts » Next Steps","id":"102","title":"Next Steps"},"103":{"body":"Understanding the motivation behind the Knowledge Base system.","breadcrumbs":"Why KOGRAL? » Why KB?","id":"103","title":"Why KB?"},"104":{"body":"Modern software development generates enormous amounts of knowledge: 📝 Notes : Implementation details, learnings, discoveries 🤔 Decisions : Why we chose X over Y 📚 Guidelines : How we write code, architecture patterns 🔄 Patterns : Reusable solutions we\'ve discovered 💭 Discussions : Slack threads, meeting notes, PR comments 🐛 Bug Fixes : How we solved issues But where does this knowledge live? Meeting notes in Google Docs Decisions buried in Slack threads Guidelines in a wiki nobody updates Patterns in someone\'s head PR discussions lost in GitHub history Bug solutions in closed Jira tickets The result? ❌ Rediscovering solutions to problems we\'ve already solved ❌ Inconsistent practices because guidelines aren\'t accessible ❌ Slow onboarding as new developers lack context ❌ Lost context when team members leave ❌ Repeated mistakes because past lessons aren\'t preserved","breadcrumbs":"Why KOGRAL? » The Problem: Knowledge Fragmentation","id":"104","title":"The Problem: Knowledge Fragmentation"},"105":{"body":"Knowledge Base provides a single source of truth for project knowledge: ✅ Capture once : Notes, decisions, guidelines, patterns ✅ Connect concepts : Typed relationships between ideas ✅ Query naturally : Text and semantic search ✅ AI-assisted : Claude Code integration via MCP ✅ Git-tracked : Version control for knowledge ✅ Shared wisdom : Organization-wide guidelines + project-specific","breadcrumbs":"Why KOGRAL? » The Solution: Unified, Queryable Knowledge Graph","id":"105","title":"The Solution: Unified, Queryable Knowledge Graph"},"106":{"body":"","breadcrumbs":"Why KOGRAL? » What Makes KB Different?","id":"106","title":"What Makes KB Different?"},"107":{"body":"Other tools : Notion, Confluence, wikis in web apps KB : Markdown files in .kogral/ directory Benefits : # Review knowledge changes in PRs\\ngit diff .kogral/decisions/ # Branch knowledge with code\\ngit checkout feature-branch\\n# .kogral/ follows the branch # Merge knowledge from feature work\\ngit merge feature-branch\\n# Knowledge merges like code Result : Knowledge versioned alongside code it describes.","breadcrumbs":"Why KOGRAL? » 1. Git-Native","id":"107","title":"1. Git-Native"},"108":{"body":"Other tools : Manual search, browse folders KB : AI queries via Claude Code Example : You: \\"Find anything about error handling\\" Claude: [Searches semantically, not just keywords]\\nFound 5 concepts:\\n- Pattern: Error Handling with thiserror\\n- Guideline: Result Type Best Practices\\n- Decision: Use anyhow for Application Errors\\n- Note: Custom Error Types\\n- Journal: Fixed error propagation bug [All related, even without exact keyword match] Result : Find concepts, not just documents with keywords.","breadcrumbs":"Why KOGRAL? » 2. AI-Native","id":"108","title":"2. AI-Native"},"109":{"body":"Other tools : Hardcoded behavior, limited customization KB : Nickel schemas define everything Example : # Development: local embeddings, no costs\\n{ embeddings = { provider = \'fastembed } } # Production: cloud embeddings, best quality\\n{ embeddings = { provider = \'openai, model = \\"text-embedding-3-large\\" } } Result : Adapt behavior without code changes.","breadcrumbs":"Why KOGRAL? » 3. Config-Driven","id":"109","title":"3. Config-Driven"},"11":{"body":"cargo install mdbook","breadcrumbs":"Introduction » Install via Cargo","id":"11","title":"Install via Cargo"},"110":{"body":"Other tools : One knowledge base per project KB : Shared organizational knowledge + project-specific Structure : Organization Shared KB ├── Rust Guidelines (applies to all projects) ├── Security Patterns (applies to all projects) └── Testing Standards (applies to all projects) Project A KB ├── Inherits shared guidelines ├── Project-specific decisions └── Can override shared guidelines Project B KB ├── Inherits same shared guidelines ├── Different project decisions └── Different overrides Result : Consistency across organization, flexibility per project.","breadcrumbs":"Why KOGRAL? » 4. Multi-Graph","id":"110","title":"4. Multi-Graph"},"111":{"body":"Other tools : Backlinks, tags, folders KB : Typed relationships with meaning Example : Pattern: Repository Pattern ↑ [implements]\\nNote: User Service Implementation ↑ [relates_to]\\nDecision: Use PostgreSQL ↑ [depends_on]\\nGuideline: Database Access Patterns Result : Understand how knowledge connects, not just that it connects.","breadcrumbs":"Why KOGRAL? » 5. Structured Relationships","id":"111","title":"5. Structured Relationships"},"112":{"body":"","breadcrumbs":"Why KOGRAL? » Real-World Impact","id":"112","title":"Real-World Impact"},"113":{"body":"New developer joins : Read outdated wiki (2 hours) Ask teammates for context (1 hour per question × 10 questions) Discover guidelines by reading code (days) Miss important decisions (leads to mistakes) Time to productivity : 2-4 weeks","breadcrumbs":"Why KOGRAL? » Before KB","id":"113","title":"Before KB"},"114":{"body":"New developer joins : kb search \\"architectural decisions\\" → finds all ADRs Ask Claude: \\"What are our coding guidelines?\\" → gets current guidelines with inheritance Browse related notes via graph traversal Full context available, no tribal knowledge Time to productivity : 3-5 days","breadcrumbs":"Why KOGRAL? » With KB","id":"114","title":"With KB"},"115":{"body":"Team makes decision : Discussion in Slack (lost after a week) Someone documents in wiki (maybe) 6 months later: \\"Why did we choose X?\\" → nobody remembers Re-debate the same decision","breadcrumbs":"Why KOGRAL? » Before KB","id":"115","title":"Before KB"},"116":{"body":"Team makes decision : Discussion captured as ADR during meeting Context, decision, consequences documented Linked to related patterns and guidelines 6 months later: kb show decision-use-x → full context instantly","breadcrumbs":"Why KOGRAL? » With KB","id":"116","title":"With KB"},"117":{"body":"Solving a bug : Encounter race condition in cache Debug for 2 hours Fix it Solution lost in PR comments Two months later : Different developer, same bug, 2 more hours","breadcrumbs":"Why KOGRAL? » Before KB","id":"117","title":"Before KB"},"118":{"body":"Solving a bug : Encounter race condition Ask Claude: \\"Have we seen cache race conditions before?\\" Claude finds journal entry from 2 months ago with solution Apply fix in 10 minutes Two months later : Same query, same instant solution","breadcrumbs":"Why KOGRAL? » With KB","id":"118","title":"With KB"},"119":{"body":"","breadcrumbs":"Why KOGRAL? » Who Benefits?","id":"119","title":"Who Benefits?"},"12":{"body":"For enhanced functionality: # Link checker (validates internal/external links)\\ncargo install mdbook-linkcheck # Mermaid diagram support\\ncargo install mdbook-mermaid # PlantUML diagram support\\ncargo install mdbook-plantuml","breadcrumbs":"Introduction » Install Optional Tools","id":"12","title":"Install Optional Tools"},"120":{"body":"✅ Personal knowledge base : Capture learnings, build expertise ✅ Quick recall : \\"How did I solve this before?\\" ✅ Context switching : Return to old projects with full context ✅ Career growth : Document what you learn, portfolio of knowledge","breadcrumbs":"Why KOGRAL? » Individual Developers","id":"120","title":"Individual Developers"},"121":{"body":"✅ Shared context : Everyone has access to team knowledge ✅ Onboarding : New members ramp up faster ✅ Consistency : Follow shared guidelines and patterns ✅ Collaboration : Build on each other\'s knowledge","breadcrumbs":"Why KOGRAL? » Teams","id":"121","title":"Teams"},"122":{"body":"✅ Institutional memory : Knowledge persists beyond individual tenure ✅ Best practices : Standardize across teams ✅ Compliance : Document security and architecture decisions ✅ Efficiency : Stop solving the same problems repeatedly","breadcrumbs":"Why KOGRAL? » Organizations","id":"122","title":"Organizations"},"123":{"body":"✅ Context injection : Agents query guidelines before generating code ✅ Decision awareness : Agents check past decisions ✅ Pattern following : Agents use documented patterns ✅ Execution tracking : Agent actions documented automatically","breadcrumbs":"Why KOGRAL? » AI Agents","id":"123","title":"AI Agents"},"124":{"body":"KB is not ideal for: ❌ Personal journaling : Use Obsidian or Logseq ❌ Team wikis : Use Notion or Confluence ❌ Customer docs : Use mdBook or Docusaurus ❌ Project management : Use Jira or Linear ❌ Code comments : Use inline documentation KB is perfect for: ✅ Developer knowledge graphs ✅ Architectural decision records ✅ Pattern libraries ✅ Coding guidelines ✅ Technical context ✅ AI-assisted development","breadcrumbs":"Why KOGRAL? » When NOT to Use KB","id":"124","title":"When NOT to Use KB"},"125":{"body":"Today\'s development : Developer → writes code → commits With KB : Developer → writes code → documents decisions → links to patterns → commits code + knowledge ↓ AI Agent queries knowledge → generates better code ↓ Team discovers patterns → reuses solutions → faster development Knowledge becomes an active participant in development , not an afterthought.","breadcrumbs":"Why KOGRAL? » The Vision","id":"125","title":"The Vision"},"126":{"body":"Three core principles drive KB:","breadcrumbs":"Why KOGRAL? » Design Philosophy","id":"126","title":"Design Philosophy"},"127":{"body":"❌ \\"I\'ll document this later\\" → never happens ✅ \\"Claude, document this decision\\" → done in 30 seconds","breadcrumbs":"Why KOGRAL? » 1. Knowledge should be captured during work, not after","id":"127","title":"1. Knowledge should be captured during work, not after"},"128":{"body":"❌ Standalone documents in folders ✅ Graph of interconnected concepts","breadcrumbs":"Why KOGRAL? » 2. Knowledge should be connected, not isolated","id":"128","title":"2. Knowledge should be connected, not isolated"},"129":{"body":"❌ \\"Let me look through 50 docs to find...\\" ✅ \\"Find anything related to error handling\\" → instant semantic results","breadcrumbs":"Why KOGRAL? » 3. Knowledge should be queryable, not browsable","id":"129","title":"3. Knowledge should be queryable, not browsable"},"13":{"body":"mdbook --version\\n# Should output: mdbook v0.4.x or later","breadcrumbs":"Introduction » Verify Installation","id":"13","title":"Verify Installation"},"130":{"body":"Ready to stop losing knowledge? Understand concepts : Core Concepts Learn philosophy : Design Philosophy Quick start : Quick Start Guide See examples : Use Cases \\"The best time to document was during implementation. The second best time is now.\\" But with KB + AI, \\"now\\" is instant.","breadcrumbs":"Why KOGRAL? » Get Started","id":"130","title":"Get Started"},"131":{"body":"The principles and values guiding Knowledge Base design and implementation.","breadcrumbs":"Design Philosophy » Design Philosophy","id":"131","title":"Design Philosophy"},"132":{"body":"","breadcrumbs":"Design Philosophy » Core Tenets","id":"132","title":"Core Tenets"},"133":{"body":"Principle : All behavior should be configurable via schemas, not baked into code. Why : Flexibility without code changes. Users adapt KB to their workflows, not vice versa. Example : // ❌ Bad: Hardcoded\\nimpl EmbeddingProvider { fn new() -> Self { FastEmbedProvider::new(\\"BAAI/bge-small-en-v1.5\\") // Can\'t change }\\n} // ✅ Good: Config-driven\\nimpl EmbeddingProvider { fn from_config(config: &EmbeddingConfig) -> Result> { match config.provider { \'fastembed => Ok(Box::new(FastEmbedProvider::new(&config.model)?)), \'openai => Ok(Box::new(OpenAIProvider::new(&config.model)?)), } }\\n} Benefits : Switch embedding providers without recompilation Different configs for dev/prod User choice, not developer mandate","breadcrumbs":"Design Philosophy » 1. Config-Driven, Not Hardcoded","id":"133","title":"1. Config-Driven, Not Hardcoded"},"134":{"body":"Principle : Validate configuration before runtime, not during. Why : Catch errors early, reduce runtime failures. Implementation : Nickel contracts + serde validation = double validation # Schema defines valid values\\nEmbeddingProvider = [| \'openai, \'claude, \'fastembed |] # Typo caught at export time, not runtime\\n{ provider = \'opena1 } # Error: Invalid variant Benefits : Errors found during nickel export, not during execution Self-documenting: schema is the spec Refactoring safe: change schema, find all usages","breadcrumbs":"Design Philosophy » 2. Type-Safe Configuration","id":"134","title":"2. Type-Safe Configuration"},"135":{"body":"Principle : Core functionality works offline, cloud is enhancement. Why : Privacy, cost control, offline development. Examples : Feature Local Cloud Storage Filesystem SurrealDB Embeddings fastembed OpenAI/Claude Search Text-based Semantic Benefits : Works on planes, trains, areas with poor internet No API costs for small projects Privacy-sensitive projects keep data local Production can use cloud for scale","breadcrumbs":"Design Philosophy » 3. Local-First, Cloud-Optional","id":"135","title":"3. Local-First, Cloud-Optional"},"136":{"body":"Principle : Knowledge should version alongside code. Why : Knowledge describes code, should evolve with it. Implementation : Markdown + YAML frontmatter (text-based, diffable) One file per node (granular commits) Wikilinks preserved (works in Logseq, Obsidian) Benefits : # Review knowledge changes in PRs\\ngit diff .kogral/decisions/ # Knowledge follows branches\\ngit checkout feature-x\\n# .kogral/ reflects feature-x decisions # Knowledge merges\\ngit merge feature-x\\n# Merge conflicts = knowledge conflicts (resolve intentionally)","breadcrumbs":"Design Philosophy » 4. Git-Friendly by Default","id":"136","title":"4. Git-Friendly by Default"},"137":{"body":"Principle : Optimized for AI consumption, readable by humans. Why : Best of both worlds - AI-assisted discovery, human verification. Implementation : Structured : YAML frontmatter for AI parsing Semantic : Embeddings for AI queries Readable : Markdown for human consumption Linked : Typed relationships for AI traversal Example : ---\\nid: note-auth\\ntype: note\\ntitle: Authentication Implementation\\ntags: [security, auth]\\nrelates_to: [guideline-security, pattern-jwt]\\n--- # Authentication Implementation Humans read this markdown normally. AI can:\\n- Parse frontmatter for metadata\\n- Extract tags for filtering\\n- Follow relates_to links\\n- Generate embeddings for semantic search","breadcrumbs":"Design Philosophy » 5. AI-Native, Human-Readable","id":"137","title":"5. AI-Native, Human-Readable"},"138":{"body":"Principle : Build systems by composing small, focused components. Why : Flexibility, testability, maintainability. Implementation : // Small, focused traits\\ntrait Storage { ... }\\ntrait EmbeddingProvider { ... }\\ntrait TemplateEngine { ... } // Compose into systems\\nstruct KnowledgeBase { storage: Box, embeddings: Option>, templates: TemplateEngine,\\n} Benefits : Swap storage without affecting embeddings Disable embeddings without breaking storage Test components in isolation Add new providers by implementing trait","breadcrumbs":"Design Philosophy » 6. Composition Over Inheritance","id":"138","title":"6. Composition Over Inheritance"},"139":{"body":"Principle : Detect errors early, provide clear messages. Why : Developer experience - fast feedback, actionable errors. Implementation : // ❌ Bad: Silent failure\\nfn load_config(path: &Path) -> Option { std::fs::read_to_string(path) .ok() .and_then(|s| serde_json::from_str(&s).ok())\\n} // ✅ Good: Explicit errors\\nfn load_config(path: &Path) -> Result { let content = std::fs::read_to_string(path) .map_err(|e| ConfigError::ReadFailed(path.to_path_buf(), e))?; serde_json::from_str(&content) .map_err(|e| ConfigError::ParseFailed(path.to_path_buf(), e))\\n} Error messages : ❌ \\"Failed to load config\\"\\n✅ \\"Failed to read config file \'/path/to/config.ncl\': Permission denied\\"","breadcrumbs":"Design Philosophy » 7. Fail Fast, Fail Clearly","id":"139","title":"7. Fail Fast, Fail Clearly"},"14":{"body":"The documentation is organized into the following sections:","breadcrumbs":"Introduction » 📖 Documentation Structure","id":"14","title":"📖 Documentation Structure"},"140":{"body":"Principle : Sane defaults, but everything customizable. Why : Easy to start, flexible as you grow. Examples : # Minimal config (uses conventions)\\n{ graph = { name = \\"my-project\\" } }\\n# Defaults: filesystem storage, no embeddings, standard templates # Full config (explicit everything)\\n{ graph = { name = \\"my-project\\" }, storage = { primary = \'surrealdb, /* ... */ }, embeddings = { provider = \'openai, /* ... */ }, templates = { templates_dir = \\"custom\\" },\\n} Conventions : .kogral/ directory in project root Filesystem storage by default YAML frontmatter + markdown body Standard template names (note.md.tera, decision.md.tera) Escape hatches : --kb-dir to use different location Configure alternative storage backends Custom frontmatter schemas Override any template","breadcrumbs":"Design Philosophy » 8. Convention Over Configuration (With Escape Hatches)","id":"140","title":"8. Convention Over Configuration (With Escape Hatches)"},"141":{"body":"Principle : Documentation lives with code, versioned together. Why : Outdated docs are worse than no docs. Implementation : ADRs in .kogral/decisions/ (alongside code) Guidelines in .kogral/guidelines/ (versioned with code) Patterns in .kogral/patterns/ (evolve with implementations) Benefits : # Code and docs branch together\\ngit checkout old-version\\n# .kogral/ reflects that version\'s decisions # Code and docs merge together\\ngit merge feature\\n# Merge includes new patterns, updated guidelines # Code and docs reviewed together\\n# PR shows code + decision + guideline updates","breadcrumbs":"Design Philosophy » 9. Documentation as Code","id":"141","title":"9. Documentation as Code"},"142":{"body":"Principle : Knowledge is useless if you can\'t find it. Why : The point is to use knowledge, not just store it. Features : Text search : Find exact keywords Semantic search : Find related concepts Graph traversal : Follow relationships Tag filtering : Narrow by category MCP integration : AI-assisted discovery Example : User doesn\'t remember exact term, but knows the concept: \\"Find anything about handling errors gracefully\\" KB finds (semantically): \\"Error Handling with thiserror\\" (pattern) \\"Result Type Best Practices\\" (guideline) \\"Panic Recovery\\" (note) \\"Graceful Degradation\\" (pattern) No exact keyword match needed, concept match sufficient.","breadcrumbs":"Design Philosophy » 10. Optimize for Discoverability","id":"142","title":"10. Optimize for Discoverability"},"143":{"body":"Principle : Humans are the primary users, AI is the assistant. Why : AI should enhance human workflows, not replace them. Implementation : Human-readable formats : Markdown, YAML Human-editable : Any text editor works Human-discoverable : ls .kogral/notes/ shows files AI-enhanced : MCP for AI-assisted queries Example : # Human workflow\\nvim .kogral/notes/my-note.md # Edit directly\\ngit add .kogral/notes/my-note.md\\ngit commit -m \\"Add note about X\\" # AI-enhanced workflow\\n# (in Claude Code)\\n\\"Add a note about X with tags Y, Z\\"\\n# AI creates file, human reviews","breadcrumbs":"Design Philosophy » 11. Build for Humans, Enable AI","id":"143","title":"11. Build for Humans, Enable AI"},"144":{"body":"Principle : Knowledge is interconnected, embrace the relationships. Why : Context comes from connections, not isolation. Implementation : Typed relationships (not just \\"related\\") Bidirectional traversal Relationship strength (0.0-1.0) Multi-hop queries Example : Find all patterns that: - Are implemented by current project - Depend on shared guidelines - Were added in the last 6 months # Graph query, not sequential file search","breadcrumbs":"Design Philosophy » 12. Embrace the Graph","id":"144","title":"12. Embrace the Graph"},"145":{"body":"","breadcrumbs":"Design Philosophy » Anti-Patterns to Avoid","id":"145","title":"Anti-Patterns to Avoid"},"146":{"body":"// Don\'t\\nconst EMBEDDING_MODEL: &str = \\"BAAI/bge-small-en-v1.5\\"; // Do\\nlet model = config.embeddings.model.as_str();","breadcrumbs":"Design Philosophy » 1. ❌ Hardcoding Behavior","id":"146","title":"1. ❌ Hardcoding Behavior"},"147":{"body":"// Don\'t validate at runtime\\nlet provider = config.provider; // Might be invalid // Do validate at export time (Nickel contracts)\\nprovider | [| \'openai, \'claude, \'fastembed |]","breadcrumbs":"Design Philosophy » 2. ❌ Runtime Schema Validation","id":"147","title":"2. ❌ Runtime Schema Validation"},"148":{"body":"// Don\'t\\nErr(\\"Failed\\".into()) // Do\\nErr(KbError::NodeNotFound(id.to_string()))","breadcrumbs":"Design Philosophy » 3. ❌ Opaque Errors","id":"148","title":"3. ❌ Opaque Errors"},"149":{"body":"// Don\'t\\nimpl KnowledgeBase { fn search(&self) -> Vec { let embeddings = FastEmbedProvider::new(); // Hardcoded! // ... }\\n} // Do\\nimpl KnowledgeBase { fn search(&self) -> Vec { if let Some(provider) = &self.embeddings { // Use configured provider } }\\n}","breadcrumbs":"Design Philosophy » 4. ❌ Coupling Components","id":"149","title":"4. ❌ Coupling Components"},"15":{"body":"What is KOGRAL and why it exists Core concepts (nodes, edges, graphs) Design philosophy","breadcrumbs":"Introduction » 1. KOGRAL Definition (kogral/)","id":"15","title":"1. KOGRAL Definition (kogral/)"},"150":{"body":"// Don\'t\\nBinary blob: [0x4B, 0x42, 0x01, ...] // Do\\nMarkdown + YAML:\\n---\\nid: note-1\\n---\\n# Content","breadcrumbs":"Design Philosophy » 5. ❌ Proprietary Formats","id":"150","title":"5. ❌ Proprietary Formats"},"151":{"body":"KB draws inspiration from: Logseq : Outliner, graph view, wikilinks Obsidian : Markdown-first, local storage, plugins Zettelkasten : Atomic notes, links, emergence ADR : Decision records, context preservation Git : Version control, branching, merging Nickel : Type-safe configuration, contracts MCP : AI integration protocol SurrealDB : Graph database, relationships","breadcrumbs":"Design Philosophy » Influences","id":"151","title":"Influences"},"152":{"body":"","breadcrumbs":"Design Philosophy » Implementation Principles","id":"152","title":"Implementation Principles"},"153":{"body":"Zero unsafe code (#![forbid(unsafe_code)]) No unwrap() in production code Always use Result for fallibility Comprehensive error types with thiserror Full test coverage (100+ tests)","breadcrumbs":"Design Philosophy » Rust","id":"153","title":"Rust"},"154":{"body":"Contracts for validation Defaults in schemas Documentation in contracts Composition via imports","breadcrumbs":"Design Philosophy » Nickel","id":"154","title":"Nickel"},"155":{"body":"Structured data pipelines Error handling in scripts Colored output for UX Dry-run modes","breadcrumbs":"Design Philosophy » NuShell","id":"155","title":"NuShell"},"156":{"body":"KB follows these guidelines for evolution: Backward Compatibility : Don\'t break existing configs Deprecation Period : Warn before removal (1 major version) Migration Tools : Provide automated migrations Semantic Versioning : MAJOR.MINOR.PATCH strictly","breadcrumbs":"Design Philosophy » Evolution Strategy","id":"156","title":"Evolution Strategy"},"157":{"body":"These principles guide every decision: ✅ Config-driven : Behavior in schemas, not code ✅ Type-safe : Validate before runtime ✅ Local-first : Works offline, cloud optional ✅ Git-friendly : Knowledge versions with code ✅ AI-native : Optimized for AI, readable by humans ✅ Composable : Small pieces, loosely coupled ✅ Fast feedback : Fail early, clear errors ✅ Discoverable : Easy to find what you need The goal: Knowledge management that developers actually use.","breadcrumbs":"Design Philosophy » Conclusion","id":"157","title":"Conclusion"},"158":{"body":"See it in action : Use Cases Understand architecture : System Overview Start using : Quick Start","breadcrumbs":"Design Philosophy » Next Steps","id":"158","title":"Next Steps"},"159":{"body":"This guide covers installing and setting up the KOGRAL.","breadcrumbs":"Installation » Installation","id":"159","title":"Installation"},"16":{"body":"Quick start (5 minutes) Installation guide Use cases with examples","breadcrumbs":"Introduction » 2. Guides (guides/)","id":"16","title":"2. Guides (guides/)"},"160":{"body":"","breadcrumbs":"Installation » Prerequisites","id":"160","title":"Prerequisites"},"161":{"body":"Rust 1.70 or later curl --proto \'=https\' --tlsv1.2 -sSf https://sh.rustup.rs | sh Nickel CLI for configuration management cargo install nickel-lang-cli","breadcrumbs":"Installation » Required","id":"161","title":"Required"},"162":{"body":"NuShell for maintenance scripts cargo install nu SurrealDB for scalable storage backend # macOS\\nbrew install surrealdb/tap/surreal # Linux/Windows\\ncurl -sSf https://install.surrealdb.com | sh","breadcrumbs":"Installation » Optional","id":"162","title":"Optional"},"163":{"body":"","breadcrumbs":"Installation » Installation Methods","id":"163","title":"Installation Methods"},"164":{"body":"# Clone the repository\\ngit clone knowledge-base\\ncd knowledge-base # Build the workspace\\ncargo build --release # Install CLI tool\\ncargo install --path crates/kb-cli # Verify installation\\nkb --version","breadcrumbs":"Installation » Method 1: Install from Source (Recommended)","id":"164","title":"Method 1: Install from Source (Recommended)"},"165":{"body":"# Build only kb-core library\\ncargo build --package kb-core --release # Build only kb-cli\\ncargo build --package kb-cli --release # Build only kogral-mcp server\\ncargo build --package kb-mcp --release","breadcrumbs":"Installation » Method 2: Build Specific Crates","id":"165","title":"Method 2: Build Specific Crates"},"166":{"body":"# Build with all features (filesystem + SurrealDB + fastembed)\\ncargo build --workspace --all-features --release # Build with specific features\\ncargo build --package kb-core --features \\"surrealdb,fastembed\\" --release","breadcrumbs":"Installation » Method 3: Build with Features","id":"166","title":"Method 3: Build with Features"},"167":{"body":"kb-core supports optional features: Feature Description Default filesystem Filesystem storage backend ✅ Yes surrealdb SurrealDB storage backend ❌ No fastembed Local embedding generation ❌ No full All features enabled ❌ No Example usage: # Enable SurrealDB backend\\ncargo build --features surrealdb # Enable all features\\ncargo build --features full","breadcrumbs":"Installation » Feature Flags","id":"167","title":"Feature Flags"},"168":{"body":"","breadcrumbs":"Installation » Environment Setup","id":"168","title":"Environment Setup"},"169":{"body":"# Navigate to your project\\ncd /path/to/your/project # Initialize .kb directory\\nkb init # Or initialize with custom name\\nkb init --name \\"My Project\\" --description \\"Project knowledge base\\" This creates: your-project/\\n└── .kogral/ ├── config.toml ├── notes/ ├── decisions/ ├── guidelines/ ├── patterns/ └── journal/","breadcrumbs":"Installation » 1. Initialize a Knowledge Base","id":"169","title":"1. Initialize a Knowledge Base"},"17":{"body":"System overview with diagrams Config-driven architecture Graph model details ADRs (Architectural Decision Records)","breadcrumbs":"Introduction » 3. Architecture (architecture/)","id":"17","title":"3. Architecture (architecture/)"},"170":{"body":"If you want advanced configuration: # Copy default config\\ncp /path/to/knowledge-base/config/defaults.ncl .kogral/config.ncl # Edit configuration\\n$EDITOR .kogral/config.ncl # Export to TOML (for kb-cli compatibility)\\nnickel export --format json .kogral/config.ncl | kb config import","breadcrumbs":"Installation » 2. Configure Nickel Schemas (Optional)","id":"170","title":"2. Configure Nickel Schemas (Optional)"},"171":{"body":"For shared guidelines and patterns across projects: # Create shared KB location\\nmkdir -p ~/Tools/.kogral-shared\\ncd ~/Tools/.kogral-shared # Initialize shared KB\\nkb init --name \\"Shared Knowledge\\" --description \\"Cross-project guidelines\\" # Configure inheritance in project\\nkb config set inheritance.base ~/Tools/.kogral-shared","breadcrumbs":"Installation » 3. Set Up Shared Knowledge Base (Optional)","id":"171","title":"3. Set Up Shared Knowledge Base (Optional)"},"172":{"body":"","breadcrumbs":"Installation » Verify Installation","id":"172","title":"Verify Installation"},"173":{"body":"# Check version\\nkb --version # Show help\\nkb --help # Test initialization (dry-run)\\nkb init --dry-run","breadcrumbs":"Installation » Test CLI","id":"173","title":"Test CLI"},"174":{"body":"# Start MCP server in test mode\\nkb serve --transport stdio # In another terminal, test with echo\\necho \'{\\"jsonrpc\\":\\"2.0\\",\\"id\\":1,\\"method\\":\\"kogral/search\\",\\"params\\":{\\"query\\":\\"test\\"}}\' | kb serve","breadcrumbs":"Installation » Test MCP Server","id":"174","title":"Test MCP Server"},"175":{"body":"# Run all tests\\ncargo test --workspace # Run integration tests\\ncargo test --package kb-core --test \'*\' # Run with all features\\ncargo test --workspace --all-features","breadcrumbs":"Installation » Run Tests","id":"175","title":"Run Tests"},"176":{"body":"If using SurrealDB backend:","breadcrumbs":"Installation » SurrealDB Setup (Optional)","id":"176","title":"SurrealDB Setup (Optional)"},"177":{"body":"# Start server\\nsurreal start --log trace --user root --pass root file://data.db # Or use memory backend for testing\\nsurreal start --log trace --user root --pass root memory","breadcrumbs":"Installation » Start SurrealDB Server","id":"177","title":"Start SurrealDB Server"},"178":{"body":"Edit .kogral/config.ncl: { storage = { primary = \'filesystem, secondary = { enabled = true, type = \'surrealdb, url = \\"ws://localhost:8000\\", namespace = \\"kb\\", database = \\"default\\", username = \\"root\\", password = \\"root\\", }, },\\n}","breadcrumbs":"Installation » Configure kb-core","id":"178","title":"Configure kb-core"},"179":{"body":"# Run migration script\\nnu scripts/kb-migrate.nu --target latest # Or manually import schema\\nsurreal import --conn ws://localhost:8000 --user root --pass root --ns kb --db default schema.surql","breadcrumbs":"Installation » Initialize Schema","id":"179","title":"Initialize Schema"},"18":{"body":"Initial setup Development environment Production deployment Testing environment CI/CD integration","breadcrumbs":"Introduction » 4. Setup (setup/)","id":"18","title":"4. Setup (setup/)"},"180":{"body":"","breadcrumbs":"Installation » Embedding Provider Setup (Optional)","id":"180","title":"Embedding Provider Setup (Optional)"},"181":{"body":"# Build with fastembed feature\\ncargo build --package kb-core --features fastembed # Models will be downloaded on first use","breadcrumbs":"Installation » Local fastembed","id":"181","title":"Local fastembed"},"182":{"body":"Set environment variables: # OpenAI\\nexport OPENAI_API_KEY=\\"sk-...\\" # Claude (Anthropic)\\nexport ANTHROPIC_API_KEY=\\"sk-ant-...\\" # Ollama (local)\\nexport OLLAMA_API_BASE=\\"http://localhost:11434\\" Configure provider in .kogral/config.ncl: { embeddings = { enabled = true, provider = \'openai, # or \'claude, \'ollama, \'fastembed model = \\"text-embedding-3-small\\", api_key_env = \\"OPENAI_API_KEY\\", },\\n}","breadcrumbs":"Installation » API Providers (OpenAI, Claude, Ollama)","id":"182","title":"API Providers (OpenAI, Claude, Ollama)"},"183":{"body":"To use kb-mcp with Claude Code:","breadcrumbs":"Installation » Claude Code Integration","id":"183","title":"Claude Code Integration"},"184":{"body":"cargo build --package kb-mcp --release","breadcrumbs":"Installation » 1. Build MCP Server","id":"184","title":"1. Build MCP Server"},"185":{"body":"Add to ~/.config/claude/config.json: { \\"mcpServers\\": { \\"kogral-mcp\\": { \\"command\\": \\"/path/to/knowledge-base/target/release/kb-mcp\\", \\"args\\": [\\"serve\\"], \\"env\\": {} } }\\n}","breadcrumbs":"Installation » 2. Configure Claude Code","id":"185","title":"2. Configure Claude Code"},"186":{"body":"Start Claude Code and verify: > kb/search \\"test\\"","breadcrumbs":"Installation » 3. Test Connection","id":"186","title":"3. Test Connection"},"187":{"body":"","breadcrumbs":"Installation » Troubleshooting","id":"187","title":"Troubleshooting"},"188":{"body":"# Verify nickel is installed\\nnickel --version # If not, install\\ncargo install nickel-lang-cli # Add cargo bin to PATH\\nexport PATH=\\"$HOME/.cargo/bin:$PATH\\"","breadcrumbs":"Installation » Nickel Not Found","id":"188","title":"Nickel Not Found"},"189":{"body":"# Update Rust\\nrustup update stable # Clean and rebuild\\ncargo clean\\ncargo build --workspace","breadcrumbs":"Installation » Compilation Errors","id":"189","title":"Compilation Errors"},"19":{"body":"Configuration overview Nickel schema reference Runtime configuration Environment modes (dev/prod/test)","breadcrumbs":"Introduction » 5. Configuration (config/)","id":"19","title":"5. Configuration (config/)"},"190":{"body":"# Check SurrealDB is running\\ncurl http://localhost:8000/health # Start SurrealDB with correct settings\\nsurreal start --bind 0.0.0.0:8000 --user root --pass root memory","breadcrumbs":"Installation » SurrealDB Connection Failed","id":"190","title":"SurrealDB Connection Failed"},"191":{"body":"# Test stdio communication\\necho \'{\\"jsonrpc\\":\\"2.0\\",\\"id\\":1,\\"method\\":\\"ping\\"}\' | kb serve # Check logs\\nkb serve --log-level debug","breadcrumbs":"Installation » MCP Server Not Responding","id":"191","title":"MCP Server Not Responding"},"192":{"body":"Quick Start Guide - Create your first knowledge base Configuration Reference - Customize behavior MCP Tools - Integrate with Claude Code","breadcrumbs":"Installation » Next Steps","id":"192","title":"Next Steps"},"193":{"body":"# Remove installed binary\\ncargo uninstall kb-cli # Remove project knowledge base\\nrm -rf /path/to/project/.kogral # Remove shared knowledge base\\nrm -rf ~/Tools/.kogral-shared","breadcrumbs":"Installation » Uninstallation","id":"193","title":"Uninstallation"},"194":{"body":"Get up and running with the KOGRAL in 5 minutes.","breadcrumbs":"Quick Start » Quick Start Guide","id":"194","title":"Quick Start Guide"},"195":{"body":"Rust 1.70+ installed Nickel CLI installed (cargo install nickel-lang-cli) kb-cli installed (see Installation )","breadcrumbs":"Quick Start » Prerequisites","id":"195","title":"Prerequisites"},"196":{"body":"Navigate to your project directory and initialize: cd /path/to/your/project\\nkb init This creates a .kogral/ directory with the following structure: .kogral/\\n├── config.toml # Configuration\\n├── notes/ # General notes\\n├── decisions/ # Architectural decisions\\n├── guidelines/ # Project guidelines\\n├── patterns/ # Reusable patterns\\n└── journal/ # Daily journal entries","breadcrumbs":"Quick Start » Step 1: Initialize Your Knowledge Base","id":"196","title":"Step 1: Initialize Your Knowledge Base"},"197":{"body":"Add a note to your knowledge base: kb add note \\"Getting Started with Rust\\" \\\\ --tags rust,programming,learning \\\\ --content \\"Key concepts for learning Rust effectively.\\" Or create interactively: kb add note\\n# Follow the prompts to enter title, tags, and content","breadcrumbs":"Quick Start » Step 2: Create Your First Note","id":"197","title":"Step 2: Create Your First Note"},"198":{"body":"Document an architectural decision: kb add decision \\"Use SurrealDB for Storage\\" \\\\ --context \\"Need scalable storage for knowledge graph\\" \\\\ --decision \\"Adopt SurrealDB for its graph capabilities\\" \\\\ --consequence \\"Better query performance\\" \\\\ --consequence \\"Additional infrastructure dependency\\"","breadcrumbs":"Quick Start » Step 3: Create a Decision Record","id":"198","title":"Step 3: Create a Decision Record"},"199":{"body":"Create relationships between nodes: # Find node IDs\\nkb list # Create a relationship\\nkb link relates_to Available relationship types: relates_to - General conceptual link depends_on - Dependency relationship implements - Implementation of a concept extends - Inheritance/extension supersedes - Replaces older version explains - Documentation/clarification","breadcrumbs":"Quick Start » Step 4: Link Nodes Together","id":"199","title":"Step 4: Link Nodes Together"},"2":{"body":"The best reading experience with navigation, search, and live reload: # Serve documentation at http://localhost:3000\\njust docs::serve This will: Build the mdBook Start a local web server on port 3000 Open your browser automatically Watch for changes and auto-reload","breadcrumbs":"Introduction » Option 1: Serve Locally with mdBook (Recommended)","id":"2","title":"Option 1: Serve Locally with mdBook (Recommended)"},"20":{"body":"Storage architecture (hybrid strategy) Filesystem backend SurrealDB backend In-memory backend Sync mechanism","breadcrumbs":"Introduction » 6. Storage (storage/)","id":"20","title":"6. Storage (storage/)"},"200":{"body":"Search by text: # Simple search\\nkb search \\"rust\\" # Filter by type\\nkb search \\"architecture\\" --type decision # Limit results\\nkb search \\"error handling\\" --limit 5 Search semantically (requires embeddings): # Semantic search finds conceptually related content\\nkb search \\"memory safety\\" --semantic --threshold 0.7","breadcrumbs":"Quick Start » Step 5: Search Your Knowledge Base","id":"200","title":"Step 5: Search Your Knowledge Base"},"201":{"body":"# Show node by ID\\nkb show # Show node with relationships\\nkb show --with-relationships","breadcrumbs":"Quick Start » Step 6: View Node Details","id":"201","title":"Step 6: View Node Details"},"202":{"body":"All knowledge base documents are markdown files you can edit: # Open in your editor\\n$EDITOR .kogral/notes/getting-started-with-rust.md # Or use your favorite markdown editor\\ncode .kogral/notes/ Document format: ---\\nid: unique-id\\ntype: note\\ntitle: Getting Started with Rust\\ncreated: 2026-01-17T10:30:00Z\\nmodified: 2026-01-17T10:30:00Z\\ntags: [rust, programming, learning]\\nstatus: active\\n--- # Getting Started with Rust Content goes here with [[wikilinks]] to other nodes. ## Key Concepts - Ownership\\n- Borrowing\\n- Lifetimes","breadcrumbs":"Quick Start » Step 7: Edit Documents Directly","id":"202","title":"Step 7: Edit Documents Directly"},"203":{"body":"Start journaling your development progress: kb add journal \\"Today\'s Progress\\" \\\\ --content \\"Learned about trait objects and dynamic dispatch in Rust.\\" Or open today\'s journal directly: $EDITOR .kogral/journal/$(date +%Y-%m-%d).md","breadcrumbs":"Quick Start » Step 8: Create a Daily Journal Entry","id":"203","title":"Step 8: Create a Daily Journal Entry"},"204":{"body":"If you use Logseq, export your knowledge base: nu scripts/kb-export-logseq.nu /path/to/logseq-graph This creates a Logseq-compatible graph you can open in Logseq for visual editing.","breadcrumbs":"Quick Start » Step 9: Export to Logseq (Optional)","id":"204","title":"Step 9: Export to Logseq (Optional)"},"205":{"body":"Integrate with Claude Code for AI-assisted knowledge management: # Start MCP server\\nkb serve # Configure in ~/.config/claude/config.json\\n# Then use in Claude Code:\\n# > kb/search \\"rust ownership\\"","breadcrumbs":"Quick Start » Step 10: Start MCP Server for Claude Code","id":"205","title":"Step 10: Start MCP Server for Claude Code"},"206":{"body":"","breadcrumbs":"Quick Start » Common Workflows","id":"206","title":"Common Workflows"},"207":{"body":"# Quick note\\nkb add note \\"Remember to check error handling in parser module\\" --tags todo,parser","breadcrumbs":"Quick Start » Capture Quick Notes","id":"207","title":"Capture Quick Notes"},"208":{"body":"# Create ADR\\nkb add decision \\"Adopt Async Rust for I/O Operations\\" \\\\ --status accepted \\\\ --tags architecture,async","breadcrumbs":"Quick Start » Document Architectural Decisions","id":"208","title":"Document Architectural Decisions"},"209":{"body":"# Add a pattern\\nkb add pattern \\"Error Handling with thiserror\\" \\\\ --tags rust,error-handling \\\\ --content \\"Standard pattern for error types in this project.\\"","breadcrumbs":"Quick Start » Build a Pattern Library","id":"209","title":"Build a Pattern Library"},"21":{"body":"Semantic search Embedding providers Provider comparison Configuration examples","breadcrumbs":"Introduction » 7. AI & Embeddings (ai/)","id":"21","title":"7. AI & Embeddings (ai/)"},"210":{"body":"# Add journal entry\\nkb add journal --content \\"Implemented search functionality. Need to add semantic search next.\\"","breadcrumbs":"Quick Start » Track Daily Progress","id":"210","title":"Track Daily Progress"},"211":{"body":"","breadcrumbs":"Quick Start » Next Steps","id":"211","title":"Next Steps"},"212":{"body":"Edit .kogral/config.ncl for advanced configuration: { graph = { name = \\"My Project\\", version = \\"1.0.0\\", }, embeddings = { enabled = true, provider = \'fastembed, }, templates = { templates_dir = \\"templates\\", },\\n} See Configuration Reference for all options.","breadcrumbs":"Quick Start » Customize Configuration","id":"212","title":"Customize Configuration"},"213":{"body":"Create a shared knowledge base for organization-wide standards: # Create shared KB\\nmkdir -p ~/Tools/.kogral-shared\\ncd ~/Tools/.kogral-shared\\nkb init --name \\"Shared Guidelines\\" # Add guidelines\\nkb add guideline \\"Rust Error Handling\\" \\\\ --language rust \\\\ --category error-handling # Configure inheritance in projects\\nkb config set inheritance.base ~/Tools/.kogral-shared","breadcrumbs":"Quick Start » Set Up Shared Guidelines","id":"213","title":"Set Up Shared Guidelines"},"214":{"body":"# Backup regularly\\nnu scripts/kb-backup.nu --compress # Sync with SurrealDB\\nnu scripts/kb-sync.nu --direction bidirectional # Generate statistics\\nnu scripts/kb-stats.nu --show-tags","breadcrumbs":"Quick Start » Automate with NuShell Scripts","id":"214","title":"Automate with NuShell Scripts"},"215":{"body":"# Add to version control\\ngit add .kogral/\\ngit commit -m \\"docs: Add knowledge base\\" # Add to .gitignore (optional: exclude certain types)\\necho \\".kogral/journal/\\" >> .gitignore","breadcrumbs":"Quick Start » Integrate with Git","id":"215","title":"Integrate with Git"},"216":{"body":"","breadcrumbs":"Quick Start » Tips and Tricks","id":"216","title":"Tips and Tricks"},"217":{"body":"Link to other nodes naturally in markdown: See [[getting-started-with-rust]] for basics.\\nRelated decision: [[use-surrealdb-for-storage]].","breadcrumbs":"Quick Start » Use Wikilinks","id":"217","title":"Use Wikilinks"},"218":{"body":"Link to specific code locations: Error handling implementation: @src/parser.rs:42","breadcrumbs":"Quick Start » Reference Code","id":"218","title":"Reference Code"},"219":{"body":"Use consistent tagging for better searchability: # Good tagging\\n--tags rust,error-handling,pattern # Avoid\\n--tags Rust,ErrorHandling,patterns","breadcrumbs":"Quick Start » Tag Consistently","id":"219","title":"Tag Consistently"},"22":{"body":"Template system (Tera) Document templates Export templates Custom templates","breadcrumbs":"Introduction » 8. Templates (templates/)","id":"22","title":"8. Templates (templates/)"},"220":{"body":"Customize templates for your workflow: # Copy template\\ncp templates/note.md.tera templates/meeting-notes.md.tera # Edit for meeting notes format\\n$EDITOR templates/meeting-notes.md.tera","breadcrumbs":"Quick Start » Leverage Templates","id":"220","title":"Leverage Templates"},"221":{"body":"","breadcrumbs":"Quick Start » Troubleshooting","id":"221","title":"Troubleshooting"},"222":{"body":"# Make sure you initialized\\nkb init # Or specify KB directory\\nkb --kb-dir /path/to/.kb search \\"query\\"","breadcrumbs":"Quick Start » \\"KB directory not found\\"","id":"222","title":"\\"KB directory not found\\""},"223":{"body":"# List all nodes to find ID\\nkb list # Search for node\\nkb search \\"partial title\\"","breadcrumbs":"Quick Start » \\"Node not found\\"","id":"223","title":"\\"Node not found\\""},"224":{"body":"Check your markdown file has valid YAML frontmatter: ---\\nid: my-note\\ntype: note\\ntitle: My Note\\n---","breadcrumbs":"Quick Start » \\"Failed to parse frontmatter\\"","id":"224","title":"\\"Failed to parse frontmatter\\""},"225":{"body":"Configuration Reference - Full configuration options CLI Commands - All available commands Document Format - Markdown and frontmatter details MCP Tools - Claude Code integration","breadcrumbs":"Quick Start » Further Reading","id":"225","title":"Further Reading"},"226":{"body":"Check kb --help for command usage Read inline help: kb add --help Report issues on GitHub Join community discussions Congratulations! You\'ve created your first knowledge base. Start capturing knowledge and building connections.","breadcrumbs":"Quick Start » Getting Help","id":"226","title":"Getting Help"},"227":{"body":"","breadcrumbs":"Daily Workflows » Daily Workflows","id":"227","title":"Daily Workflows"},"228":{"body":"Real-world scenarios showing how KOGRAL solves common development challenges.","breadcrumbs":"Use Cases » Use Cases","id":"228","title":"Use Cases"},"229":{"body":"","breadcrumbs":"Use Cases » Use Case 1: Onboarding New Team Members","id":"229","title":"Use Case 1: Onboarding New Team Members"},"23":{"body":"All kb-cli commands Common workflows Advanced usage Troubleshooting","breadcrumbs":"Introduction » 9. CLI Reference (cli/)","id":"23","title":"9. CLI Reference (cli/)"},"230":{"body":"New developer joins the team. Needs to understand: Why we chose SurrealDB over PostgreSQL How error handling works in this project What coding patterns we follow Recent architectural decisions","breadcrumbs":"Use Cases » Problem","id":"230","title":"Problem"},"231":{"body":"Team lead : # Export project knowledge to Logseq for visual exploration\\nkb export logseq ~/onboarding-docs New developer (with Claude Code): Summarize our architectural decisions from the last 6 months Claude (via MCP): Found 8 decisions: 1. **Use SurrealDB for Storage** (accepted, 3 months ago) - Context: Need graph database for knowledge relationships - Consequences: Better queries, additional infrastructure 2. **Adopt Rust for Core Logic** (accepted, 5 months ago) - Context: Type safety and performance critical - Consequences: Steeper learning curve, excellent reliability ... [6 more decisions] New developer : What are our error handling guidelines? Claude (via kb/get_guidelines): ## Rust Error Handling Guidelines ### Project Guidelines (priority: 150)\\n- Use thiserror for custom error types\\n- Never unwrap() in production\\n- Propagate with ? operator ### Shared Guidelines (priority: 50)\\n- Always use Result for fallible operations\\n- Add context with .context() [Links to full guideline documents] Result : New developer productive in days, not weeks.","breadcrumbs":"Use Cases » Solution with KOGRAL","id":"231","title":"Solution with KOGRAL"},"232":{"body":"","breadcrumbs":"Use Cases » Use Case 2: Architectural Decision Records (ADR)","id":"232","title":"Use Case 2: Architectural Decision Records (ADR)"},"233":{"body":"Team discussing whether to add Redis caching. Multiple opinions, need to document the decision for future reference.","breadcrumbs":"Use Cases » Problem","id":"233","title":"Problem"},"234":{"body":"During meeting : Document decision: Add Redis caching for API responses Context:\\n- Current database queries average 200ms\\n- 80% of queries are repeated within 5 minutes\\n- Need sub-50ms response times for user experience Decision:\\n- Add Redis with 5-minute TTL for GET endpoints\\n- Cache invalidation on POST/PUT/DELETE Consequences:\\n- ✅ Expected 80% reduction in database load\\n- ✅ Sub-50ms response times achieved\\n- ❌ Additional infrastructure (Redis server)\\n- ❌ Cache consistency challenges\\n- ❌ Debugging complexity increases Status: proposed (pending infrastructure setup) Claude (creates ADR): Created: decision-add-redis-caching\\nType: decision\\nStatus: proposed Added relationships: - Relates to: note-performance-requirements - Depends on: decision-use-docker-compose (infrastructure) Decision documented and linked to related knowledge. Two months later , someone asks \\"Why Redis?\\": kb show decision-add-redis-caching Full context available instantly.","breadcrumbs":"Use Cases » Solution with KOGRAL","id":"234","title":"Solution with KOGRAL"},"235":{"body":"","breadcrumbs":"Use Cases » Use Case 3: Pattern Library","id":"235","title":"Use Case 3: Pattern Library"},"236":{"body":"Team solves the same problems repeatedly: How to structure error types Database connection patterns Testing strategies Each developer rediscovers solutions.","breadcrumbs":"Use Cases » Problem","id":"236","title":"Problem"},"237":{"body":"First time solving error handling: kb add pattern \\"Error Handling with thiserror\\" \\\\ --tags rust,error-handling,pattern \\\\ --content \\"$(cat docs/error-pattern.md)\\" Next time someone needs error handling: I\'m implementing a new module with errors. What\'s our standard pattern? Claude (via kogral/search): Found pattern: Error Handling with thiserror ## Pattern: Error Handling with thiserror ### Problem\\nNeed structured, type-safe error handling with good error messages. ### Solution\\n```rust\\nuse thiserror::Error; #[derive(Error, Debug)]\\npub enum ModuleError { #[error(\\"Database connection failed: {0}\\")] Database(#[from] sqlx::Error), #[error(\\"Validation failed: {0}\\")] Validation(String),\\n}","breadcrumbs":"Use Cases » Solution with KOGRAL","id":"237","title":"Solution with KOGRAL"},"238":{"body":"fn do_work() -> Result<(), ModuleError> { let conn = connect_db()?; // Auto-converts via #[from] validate_input()?; Ok(())\\n} [Full pattern with examples] Would you like me to create a new error module following this pattern? **Result**: Consistent error handling across codebase, zero time wasted rediscovering patterns. --- ## Use Case 4: Daily Development Journal ### Problem Developer wants to track:\\n- What they worked on each day\\n- Blockers encountered\\n- Solutions discovered\\n- Ideas for future work ### Solution with KOGRAL **End of each day**: ```bash\\nkb add journal \\"2026-01-17\\" --content \\"\\n## Progress\\n- Implemented user authentication\\n- Fixed race condition in cache layer\\n- Started work on API rate limiting ## Blockers\\n- SurrealDB migration tool not working with nested objects\\n- Need to discuss API versioning strategy with team ## Learnings\\n- tokio::select! is perfect for timeout patterns\\n- serde_json::Value useful for dynamic JSON handling ## Tomorrow\\n- Finish rate limiting implementation\\n- Review PR #234\\n- Team meeting: discuss API versioning\\n\\" With Claude Code (even easier): End of day journal: Implemented authentication, fixed cache race condition, started rate limiting.\\nBlocked on SurrealDB migrations and need API versioning discussion.\\nLearned about tokio::select! for timeouts.\\nTomorrow: finish rate limiting, review PR #234, versioning meeting. Claude (creates journal entry): Created journal entry: 2026-01-17 Tags auto-detected: authentication, cache, rate-limiting, surrealdb Linked to: - pattern-timeout-handling (implements) - decision-use-surrealdb (relates_to) Journal entry saved. Two weeks later (forgot how you solved that race condition): How did I fix the cache race condition? Claude (semantic search): From your journal entry on 2026-01-17: \\"Fixed race condition in cache layer by using DashMap instead of\\nRwLock. DashMap provides lock-free concurrent access.\\" [Link to full journal entry] Result : Development history preserved, solutions easy to recall.","breadcrumbs":"Use Cases » Usage","id":"238","title":"Usage"},"239":{"body":"","breadcrumbs":"Use Cases » Use Case 5: Code Review Preparation","id":"239","title":"Use Case 5: Code Review Preparation"},"24":{"body":"MCP quick guide (Claude Code) Logseq integration Vapora integration","breadcrumbs":"Introduction » 10. Apps & Integrations (apps/)","id":"24","title":"10. Apps & Integrations (apps/)"},"240":{"body":"Preparing for code review. Need to: Document why certain decisions were made Link implementation to requirements Explain trade-offs to reviewers","breadcrumbs":"Use Cases » Problem","id":"240","title":"Problem"},"241":{"body":"Before creating PR : I just implemented the caching layer.\\nAdd a note documenting the implementation and link it to our caching decision. Claude (via kb/add_note + kb/link): Created note: note-caching-layer-implementation Content:\\n# Caching Layer Implementation ## Approach\\n- Redis with 5-minute TTL\\n- Cache-aside pattern\\n- Invalidation on mutations ## Trade-offs\\n- Chose simplicity over advanced features (no LRU eviction)\\n- 5-minute TTL balances freshness vs cache hit rate\\n- Cache-aside pattern chosen over write-through (simpler) ## Testing\\n- Unit tests for cache logic\\n- Integration tests with real Redis\\n- Load test: 1000 req/s sustained Links: - Implements: decision-add-redis-caching - Follows: pattern-cache-aside - Tests: guideline-integration-testing Note added and linked to decision-add-redis-caching. In PR description : ## Implementation Implements caching layer per decision-add-redis-caching. See note-caching-layer-implementation for detailed rationale. ## Trade-offs [Copy from note] Reviewers : kb show decision-add-redis-caching\\nkb show note-caching-layer-implementation Full context available, review focuses on code quality not \\"why this approach?\\"","breadcrumbs":"Use Cases » Solution with KOGRAL","id":"241","title":"Solution with KOGRAL"},"242":{"body":"","breadcrumbs":"Use Cases » Use Case 6: Cross-Project Guidelines","id":"242","title":"Use Case 6: Cross-Project Guidelines"},"243":{"body":"Organization has 10 projects. Each should follow: Same Rust error handling patterns Same security guidelines Same testing standards Currently: duplicated wikis, inconsistent practices.","breadcrumbs":"Use Cases » Problem","id":"243","title":"Problem"},"244":{"body":"Setup shared KOGRAL : # Create organization-wide shared KB\\nmkdir -p ~/org/.kogral-shared\\ncd ~/org/.kogral-shared\\nkb init --name \\"Organization Guidelines\\" # Add shared guidelines\\nkb add guideline \\"Rust Error Handling\\" \\\\ --language rust \\\\ --category error-handling \\\\ --content \\"$(cat org-rust-errors.md)\\" kb add guideline \\"Security Best Practices\\" \\\\ --category security \\\\ --content \\"$(cat org-security.md)\\" In each project : # project/.kogral/config.ncl\\n{ inheritance = { base = \\"~/org/.kogral-shared\\", priority = 100, # Project overrides shared },\\n} Developer in Project A : What are our error handling guidelines? Claude (via kb/get_guidelines with inheritance): ## Rust Error Handling Guidelines ### Shared Guidelines (priority: 50)\\nFrom ~/org/.kogral-shared:\\n- Use thiserror for custom errors\\n- Never unwrap() in production\\n- Always propagate with ? ### Project Guidelines (priority: 100)\\nFrom project .kogral/:\\n- Additionally: log all errors with tracing\\n- Use anyhow for application-level errors [Combined effective guidelines] Result : Consistent practices across organization Projects can specialize where needed Single source of truth for shared knowledge","breadcrumbs":"Use Cases » Solution with KOGRAL","id":"244","title":"Solution with KOGRAL"},"245":{"body":"","breadcrumbs":"Use Cases » Use Case 7: Bug Investigation","id":"245","title":"Use Case 7: Bug Investigation"},"246":{"body":"Bug in production. Developer needs to: Understand relevant decisions Find related code patterns Check if similar issues were solved before","breadcrumbs":"Use Cases » Problem","id":"246","title":"Problem"},"247":{"body":"Developer : We have a race condition in the cache layer.\\nWhat past decisions or patterns might be relevant? Claude (semantic search): Found 4 relevant items: 1. **Decision: Use DashMap for Concurrent Access** (accepted, 1 month ago) \\"Chose DashMap over RwLock to avoid race conditions in cache\\" 2. **Pattern: Safe Concurrent Cache Access** \\"Always use lock-free data structures for high-contention caches\\" 3. **Note: Cache Race Condition Fix** (from 2026-01-17 journal) \\"Fixed race in cache by switching to DashMap\\" 4. **Guideline: Concurrency Safety** \\"Use atomic operations and lock-free structures where possible\\" It looks like we\'ve seen this before! Check the journal entry from 2026-01-17. Developer reads journal : kb show journal-2026-01-17 Finds : Exact same issue Solution: switch to DashMap Code example included Performance benchmarks Applies fix in 10 minutes instead of 2 hours of debugging.","breadcrumbs":"Use Cases » Solution with KOGRAL","id":"247","title":"Solution with KOGRAL"},"248":{"body":"","breadcrumbs":"Use Cases » Use Case 8: API Design Collaboration","id":"248","title":"Use Case 8: API Design Collaboration"},"249":{"body":"Team discussing new API design. Multiple approaches: REST vs GraphQL Versioning strategy Authentication method Need to capture discussion and decision.","breadcrumbs":"Use Cases » Problem","id":"249","title":"Problem"},"25":{"body":"MCP tools specification Storage trait Embedding trait REST API (future)","breadcrumbs":"Introduction » 11. API Reference (api/)","id":"25","title":"11. API Reference (api/)"},"250":{"body":"During design meeting (using Claude Code): We\'re designing the new API. Let me capture this discussion: Approaches discussed:\\n1. REST with versioned endpoints (/v1/, /v2/)\\n2. GraphQL with schema versioning\\n3. gRPC for internal services Team consensus:\\n- REST for public API (easier for partners)\\n- GraphQL for internal admin tools (flexibility)\\n- gRPC for service-to-service (performance) Create a decision record for each, linking them together. Claude (creates 3 linked ADRs): Created 3 decisions: 1. decision-rest-public-api Status: accepted Context: Public API needs broad compatibility Decision: REST with /v1/, /v2/ versioning 2. decision-graphql-admin Status: accepted Context: Admin tools need flexible queries Decision: GraphQL with schema evolution 3. decision-grpc-internal Status: accepted Context: Service-to-service needs performance Decision: gRPC with protobuf Linked: decision-rest-public-api --[relates_to]--> decision-graphql-admin decision-rest-public-api --[relates_to]--> decision-grpc-internal decision-graphql-admin --[relates_to]--> decision-grpc-internal All decisions documented and interconnected. Two months later , someone asks \\"Why REST not GraphQL for public API?\\": kb show decision-rest-public-api Full context preserved, including relationship to GraphQL decision.","breadcrumbs":"Use Cases » Solution with KOGRAL","id":"250","title":"Solution with KOGRAL"},"251":{"body":"Knowledge Base excels at: ✅ Onboarding : Historical context instantly available ✅ Decision Making : ADRs preserve rationale ✅ Pattern Reuse : Solutions documented once, used forever ✅ Daily Tracking : Development journal with semantic search ✅ Code Review : Implementation rationale linked to decisions ✅ Cross-Project : Shared guidelines with project overrides ✅ Bug Investigation : Past solutions easily discovered ✅ Collaboration : Discussions captured and interconnected Common Theme : Knowledge captured during work, queryable when needed, connected to related concepts.","breadcrumbs":"Use Cases » Summary","id":"251","title":"Summary"},"252":{"body":"Start simple : Quick Start Guide Integrate AI : MCP Quick Guide Advanced features : Configuration Reference","breadcrumbs":"Use Cases » Next Steps","id":"252","title":"Next Steps"},"253":{"body":"","breadcrumbs":"Best Practices » Best Practices","id":"253","title":"Best Practices"},"254":{"body":"Comprehensive overview of the KOGRAL architecture.","breadcrumbs":"System Overview » System Architecture","id":"254","title":"System Architecture"},"255":{"body":"Architecture Overview The KOGRAL consists of three main layers: User Interfaces : kb-cli (terminal), kb-mcp (AI integration), NuShell scripts (automation) Core Library (kb-core) : Rust library with graph engine, storage abstraction, embeddings, query engine Storage Backends : Filesystem (git-friendly), SurrealDB (scalable), In-Memory (cache/testing)","breadcrumbs":"System Overview » High-Level Architecture","id":"255","title":"High-Level Architecture"},"256":{"body":"","breadcrumbs":"System Overview » Component Details","id":"256","title":"Component Details"},"257":{"body":"Purpose : Primary user interface for local knowledge management. Commands (13 total): init: Initialize .kogral/ directory add: Create nodes (note, decision, guideline, pattern, journal) search: Text and semantic search link: Create relationships between nodes list: List all nodes show: Display node details delete: Remove nodes graph: Visualize knowledge graph sync: Sync filesystem ↔ SurrealDB serve: Start MCP server import: Import from Logseq export: Export to Logseq/JSON config: Manage configuration Technology : Rust + clap (derive API) Features : Colored terminal output Interactive prompts Dry-run modes Validation before operations","breadcrumbs":"System Overview » kb-cli (Command-Line Interface)","id":"257","title":"kb-cli (Command-Line Interface)"},"258":{"body":"Purpose : AI integration via Model Context Protocol. Protocol : JSON-RPC 2.0 over stdio Components : Tools (7): kogral/search: Query knowledge base kb/add_note: Create notes kb/add_decision: Create ADRs kb/link: Create relationships kb/get_guidelines: Retrieve guidelines with inheritance kb/list_graphs: List available graphs kb/export: Export to formats Resources (6 URIs): kogral://project/notes kogral://project/decisions kogral://project/guidelines kogral://project/patterns kogral://shared/guidelines kogral://shared/patterns Prompts (2): kb/summarize_project: Generate project summary kb/find_related: Find related nodes Integration : Claude Code via ~/.config/claude/config.json","breadcrumbs":"System Overview » kb-mcp (MCP Server)","id":"258","title":"kb-mcp (MCP Server)"},"259":{"body":"Purpose : Automation and maintenance tasks. Scripts (6): kb-sync.nu: Filesystem ↔ SurrealDB sync kb-backup.nu: Archive knowledge base kb-reindex.nu: Rebuild embeddings kb-import-logseq.nu: Import from Logseq kb-export-logseq.nu: Export to Logseq kb-stats.nu: Graph statistics Features : Colored output Dry-run modes Progress indicators Error handling","breadcrumbs":"System Overview » NuShell Scripts","id":"259","title":"NuShell Scripts"},"26":{"body":"Development setup Code guidelines Testing standards Documentation guidelines","breadcrumbs":"Introduction » 12. Contributing (contributing/)","id":"26","title":"12. Contributing (contributing/)"},"260":{"body":"","breadcrumbs":"System Overview » Core Library (kb-core)","id":"260","title":"Core Library (kb-core)"},"261":{"body":"Graph : pub struct Graph { pub name: String, pub version: String, pub nodes: HashMap, // ID → Node pub edges: Vec, pub metadata: HashMap,\\n} Node : pub struct Node { pub id: String, pub node_type: NodeType, pub title: String, pub content: String, pub tags: Vec, pub status: NodeStatus, pub created: DateTime, pub modified: DateTime, // ... relationships, metadata\\n} Edge : pub struct Edge { pub from: String, pub to: String, pub relation: EdgeType, pub strength: f32, pub created: DateTime,\\n}","breadcrumbs":"System Overview » Models","id":"261","title":"Models"},"262":{"body":"#[async_trait]\\npub trait Storage: Send + Sync { async fn save_graph(&self, graph: &Graph) -> Result<()>; async fn load_graph(&self, name: &str) -> Result; async fn delete_graph(&self, name: &str) -> Result<()>; async fn list_graphs(&self) -> Result>;\\n} Implementations : FilesystemStorage: Git-friendly markdown files MemoryStorage: In-memory with DashMap SurrealDbStorage: Scalable graph database","breadcrumbs":"System Overview » Storage Trait","id":"262","title":"Storage Trait"},"263":{"body":"#[async_trait]\\npub trait EmbeddingProvider: Send + Sync { async fn embed(&self, texts: Vec) -> Result>>; fn dimensions(&self) -> usize; fn model_name(&self) -> &str;\\n} Implementations : FastEmbedProvider: Local fastembed RigEmbeddingProvider: OpenAI, Claude, Ollama (via rig-core)","breadcrumbs":"System Overview » Embedding Provider Trait","id":"263","title":"Embedding Provider Trait"},"264":{"body":"Input : Markdown file with YAML frontmatter Output : Node struct Features : YAML frontmatter extraction Markdown body parsing Wikilink detection ([[linked-note]]) Code reference parsing (@file.rs:42) Example : ---\\nid: note-123\\ntype: note\\ntitle: My Note\\ntags: [rust, async]\\n--- # My Note Content with [[other-note]] and @src/main.rs:10 → Node { id: \\"note-123\\", node_type: NodeType::Note, title: \\"My Note\\", content: \\"Content with [[other-note]] and @src/main.rs:10\\", tags: vec![\\"rust\\", \\"async\\"], // ... parsed wikilinks, code refs\\n}","breadcrumbs":"System Overview » Parser","id":"264","title":"Parser"},"265":{"body":"","breadcrumbs":"System Overview » Configuration System","id":"265","title":"Configuration System"},"266":{"body":"# schemas/kb-config.ncl\\n{ KbConfig = { graph | GraphConfig, storage | StorageConfig, embeddings | EmbeddingConfig, templates | TemplateConfig, query | QueryConfig, mcp | McpConfig, sync | SyncConfig, },\\n}","breadcrumbs":"System Overview » Nickel Schema","id":"266","title":"Nickel Schema"},"267":{"body":"User writes: .kogral/config.ncl ↓ [nickel export --format json]\\nJSON intermediate ↓ [serde_json::from_str]\\nKbConfig struct (Rust) ↓\\nRuntime behavior Double Validation : Nickel contracts: Type-safe, enum validation Serde deserialization: Rust type checking Benefits : Errors caught at export time Runtime guaranteed valid config Self-documenting schemas","breadcrumbs":"System Overview » Loading Process","id":"267","title":"Loading Process"},"268":{"body":"","breadcrumbs":"System Overview » Storage Architecture","id":"268","title":"Storage Architecture"},"269":{"body":"Local Graph (per project): Storage: Filesystem (.kogral/ directory) Format: Markdown + YAML frontmatter Version control: Git Scope: Project-specific knowledge Shared Graph (organization): Storage: SurrealDB (or synced filesystem) Format: Same markdown (for compatibility) Version control: Optional Scope: Organization-wide guidelines Sync : Filesystem (.kogral/) ↕ [bidirectional sync]\\nSurrealDB (central)","breadcrumbs":"System Overview » Hybrid Strategy","id":"269","title":"Hybrid Strategy"},"27":{"body":"The documentation includes SVG diagrams for visual understanding: architecture-overview.svg - Complete system architecture core-concepts.svg - Node types and relationships config-composition.svg - Configuration flow (Nickel → JSON → Rust) storage-architecture.svg - Hybrid storage strategy These diagrams are embedded in relevant documentation pages and can be viewed standalone in a browser.","breadcrumbs":"Introduction » 🎨 Visual Diagrams","id":"27","title":"🎨 Visual Diagrams"},"270":{"body":".kogral/\\n├── config.toml # Graph metadata\\n├── notes/\\n│ ├── async-patterns.md # Individual note\\n│ └── error-handling.md\\n├── decisions/\\n│ ├── 0001-use-rust.md # ADR format\\n│ └── 0002-surrealdb.md\\n├── guidelines/\\n│ ├── rust-errors.md # Project guideline\\n│ └── testing.md\\n├── patterns/\\n│ └── repository.md\\n└── journal/ ├── 2026-01-17.md # Daily journal └── 2026-01-18.md","breadcrumbs":"System Overview » File Layout","id":"270","title":"File Layout"},"271":{"body":"","breadcrumbs":"System Overview » Query Engine","id":"271","title":"Query Engine"},"272":{"body":"let results = graph.nodes.values() .filter(|node| { node.title.contains(&query) || node.content.contains(&query) || node.tags.iter().any(|tag| tag.contains(&query)) }) .collect();","breadcrumbs":"System Overview » Text Search","id":"272","title":"Text Search"},"273":{"body":"let query_embedding = embeddings.embed(vec![query]).await?;\\nlet mut scored: Vec<_> = graph.nodes.values() .filter_map(|node| { let node_embedding = node.embedding.as_ref()?; let similarity = cosine_similarity(&query_embedding[0], node_embedding); (similarity >= threshold).then_some((node, similarity)) }) .collect();\\nscored.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap());","breadcrumbs":"System Overview » Semantic Search","id":"273","title":"Semantic Search"},"274":{"body":"// Query both project and shared graphs\\nlet project_results = project_graph.search(&query).await?;\\nlet shared_results = shared_graph.search(&query).await?; // Merge with deduplication\\nlet combined = merge_results(project_results, shared_results);","breadcrumbs":"System Overview » Cross-Graph Query","id":"274","title":"Cross-Graph Query"},"275":{"body":"Claude Code kb-mcp kb-core │ │ │ ├─ JSON-RPC request ───→ │ │ │ kb/search │ │ │ {\\"query\\": \\"rust\\"} │ │ │ ├─ search() ──────────→ │ │ │ │ │ │ Query engine │ │ Text + semantic │ │ │ │ │ ←──── results ─────────┤ │ │ │ │ ←─ JSON-RPC response ──┤ │ │ {\\"results\\": [...]} │ │","breadcrumbs":"System Overview » MCP Protocol Flow","id":"275","title":"MCP Protocol Flow"},"276":{"body":"Engine : Tera (Jinja2-like) Templates : Document Templates (6): note.md.tera decision.md.tera guideline.md.tera pattern.md.tera journal.md.tera execution.md.tera Export Templates (4): logseq-page.md.tera logseq-journal.md.tera summary.md.tera graph.json.tera Usage : let mut tera = Tera::new(\\"templates/**/*.tera\\")?;\\nlet rendered = tera.render(\\"note.md.tera\\", &context)?;","breadcrumbs":"System Overview » Template System","id":"276","title":"Template System"},"277":{"body":"Strategy : thiserror for structured errors #[derive(Error, Debug)]\\npub enum KbError { #[error(\\"Storage error: {0}\\")] Storage(String), #[error(\\"Node not found: {0}\\")] NodeNotFound(String), #[error(\\"Configuration error: {0}\\")] Config(String), #[error(\\"Parse error: {0}\\")] Parse(String), #[error(\\"Embedding error: {0}\\")] Embedding(String),\\n} Propagation : ? operator throughout","breadcrumbs":"System Overview » Error Handling","id":"277","title":"Error Handling"},"278":{"body":"Unit Tests : Per module (models, parser, storage) Integration Tests : Full workflow (add → save → load → query) Test Coverage : kb-core: 48 tests kb-mcp: 5 tests Total: 56 tests Test Data : Fixtures in tests/fixtures/","breadcrumbs":"System Overview » Testing Strategy","id":"278","title":"Testing Strategy"},"279":{"body":"Node Lookup : O(1) via HashMap Semantic Search : O(n) with early termination (threshold filter) Storage : Filesystem: Lazy loading (load on demand) Memory: Full graph in RAM SurrealDB: Query optimization (indexes) Embeddings : Cache embeddings in node metadata Batch processing (configurable batch size) Async generation (non-blocking)","breadcrumbs":"System Overview » Performance Considerations","id":"279","title":"Performance Considerations"},"28":{"body":"When using just docs::serve, you get a built-in search feature: Click the search icon (🔍) in the top-left corner Type your query Press Enter to navigate results The search indexes all documentation content including: Page titles Headers Body text Code examples (optionally)","breadcrumbs":"Introduction » 🔍 Searching the Documentation","id":"28","title":"🔍 Searching the Documentation"},"280":{"body":"No unsafe code : #![forbid(unsafe_code)] Input validation : Nickel contracts validate config serde validates JSON Custom validation for user input File operations : Path sanitization (no ../ traversal) Permissions checking Atomic writes (temp file + rename)","breadcrumbs":"System Overview » Security","id":"280","title":"Security"},"281":{"body":"Small Projects (< 1000 nodes): Filesystem storage In-memory search Local embeddings (fastembed) Medium Projects (1000-10,000 nodes): Filesystem + SurrealDB sync Semantic search with caching Cloud embeddings (OpenAI/Claude) Large Organizations (> 10,000 nodes): SurrealDB primary Distributed embeddings Multi-graph federation","breadcrumbs":"System Overview » Scalability","id":"281","title":"Scalability"},"282":{"body":"Graph Model Details : Graph Model Storage Deep Dive : Storage Architecture ADRs : Architectural Decisions Implementation : Development Guide","breadcrumbs":"System Overview » Next Steps","id":"282","title":"Next Steps"},"283":{"body":"","breadcrumbs":"Graph Model » Graph Model","id":"283","title":"Graph Model"},"284":{"body":"The KOGRAL follows a config-driven architecture where all behavior is defined through Nickel configuration files rather than hardcoded in Rust.","breadcrumbs":"Config-Driven Design » Config-Driven Architecture","id":"284","title":"Config-Driven Architecture"},"285":{"body":"\\"Configuration, not code, defines behavior\\" Instead of hardcoding storage backends, embedding providers, or query parameters, KB uses a layered configuration system that composes settings from multiple sources: Schema contracts (type definitions) Defaults (base values) Mode overlays (dev/prod/test optimizations) User customizations (project-specific overrides) This approach provides: ✅ Type safety - Nickel contracts validate configuration before runtime ✅ Composability - Mix and match configurations for different environments ✅ Discoverability - Self-documenting schemas with inline documentation ✅ Hot-reload - Change behavior without recompiling Rust code ✅ Double validation - Nickel contracts + serde ensure correctness","breadcrumbs":"Config-Driven Design » Philosophy","id":"285","title":"Philosophy"},"286":{"body":"Configuration Composition The configuration system uses a four-layer composition pattern :","breadcrumbs":"Config-Driven Design » Configuration Composition Flow","id":"286","title":"Configuration Composition Flow"},"287":{"body":"Location : schemas/kb/contracts.ncl Purpose : Define types and validation rules using Nickel contracts. Example : { StorageType = [| \'filesystem, \'memory, \'surrealdb |], StorageConfig = { primary | StorageType | doc \\"Primary storage backend\\" | default = \'filesystem, secondary | SecondaryStorageConfig | doc \\"Optional secondary storage\\" | default = { enabled = false }, },\\n} Benefits : Enum validation (only valid storage types accepted) Required vs optional fields Default values for optional fields Documentation attached to types","breadcrumbs":"Config-Driven Design » Layer 1: Schema Contracts","id":"287","title":"Layer 1: Schema Contracts"},"288":{"body":"Location : schemas/kb/defaults.ncl Purpose : Provide sensible base values for all configuration options. Example : { base = { storage = { primary = \'filesystem, secondary = { enabled = false, type = \'surrealdb, url = \\"ws://localhost:8000\\", }, }, embeddings = { enabled = true, provider = \'fastembed, model = \\"BAAI/bge-small-en-v1.5\\", dimensions = 384, }, } | contracts.KbConfig,\\n} Validated by : contracts.KbConfig contract ensures defaults are valid.","breadcrumbs":"Config-Driven Design » Layer 2: Defaults","id":"288","title":"Layer 2: Defaults"},"289":{"body":"Location : schemas/kb/modes/{dev,prod,test}.ncl Purpose : Environment-specific optimizations and tuning. Development Mode (dev.ncl) Optimized for: Fast iteration, local development, debugging { storage = { primary = \'filesystem, secondary = { enabled = false }, # No database overhead }, embeddings = { provider = \'fastembed, # Local, no API costs }, sync = { auto_index = false, # Manual control },\\n} Production Mode (prod.ncl) Optimized for: Performance, reliability, scalability { storage = { secondary = { enabled = true }, # SurrealDB for scale }, embeddings = { provider = \'openai, # High-quality cloud embeddings model = \\"text-embedding-3-small\\", dimensions = 1536, }, sync = { auto_index = true, debounce_ms = 300, # Fast response },\\n} Test Mode (test.ncl) Optimized for: Fast tests, isolation, determinism { storage = { primary = \'memory, # Ephemeral, no disk I/O }, embeddings = { enabled = false, # Disable for speed }, sync = { auto_index = false, debounce_ms = 0, # No delays in tests },\\n}","breadcrumbs":"Config-Driven Design » Layer 3: Mode Overlays","id":"289","title":"Layer 3: Mode Overlays"},"29":{"body":"","breadcrumbs":"Introduction » ✏️ Editing Documentation","id":"29","title":"✏️ Editing Documentation"},"290":{"body":"Location : .kb-config/core/kb.ncl or .kb-config/platform/{dev,prod,test}.ncl Purpose : Project-specific or deployment-specific overrides. Example (user project config): let mode = import \\"../../schemas/kb/modes/dev.ncl\\" in let user_custom = { graph = { name = \\"my-project\\", }, embeddings = { provider = \'claude, # Override to use Claude model = \\"claude-3-haiku-20240307\\", }, query = { similarity_threshold = 0.7, # Stricter threshold },\\n} in helpers.compose_config defaults.base mode user_custom | contracts.KbConfig","breadcrumbs":"Config-Driven Design » Layer 4: User Customizations","id":"290","title":"Layer 4: User Customizations"},"291":{"body":"The helpers.ncl module provides the composition function: { # Recursively merge with override precedence merge_with_override = fun base override => /* ... */, # Compose three layers compose_config = fun defaults mode_config user_custom => let with_mode = merge_with_override defaults mode_config in merge_with_override with_mode user_custom,\\n} Merge behavior : Records are merged recursively Override values take precedence over base values Arrays are not merged, override replaces base Null in override keeps base value Example merge : base = { storage = { primary = \'filesystem }, embeddings = { enabled = true } }\\noverride = { storage = { primary = \'memory } }\\n# Result: { storage = { primary = \'memory }, embeddings = { enabled = true } }","breadcrumbs":"Config-Driven Design » Composition Mechanism","id":"291","title":"Composition Mechanism"},"292":{"body":"Once composed, the Nickel configuration is exported to JSON for Rust consumption: nickel export --format json .kb-config/core/kb.ncl > .kb-config/targets/kb-core.json Output (.kb-config/targets/kb-core.json): { \\"graph\\": { \\"name\\": \\"my-project\\", \\"version\\": \\"1.0.0\\" }, \\"storage\\": { \\"primary\\": \\"memory\\", \\"secondary\\": { \\"enabled\\": false } }, \\"embeddings\\": { \\"enabled\\": true, \\"provider\\": \\"claude\\", \\"model\\": \\"claude-3-haiku-20240307\\", \\"dimensions\\": 768 }\\n}","breadcrumbs":"Config-Driven Design » Export to JSON","id":"292","title":"Export to JSON"},"293":{"body":"The Rust code deserializes the JSON into typed structs using serde: use serde::{Deserialize, Serialize}; #[derive(Debug, Deserialize, Serialize)]\\npub struct KbConfig { pub graph: GraphConfig, pub storage: StorageConfig, pub embeddings: EmbeddingConfig, pub templates: TemplateConfig, pub query: QueryConfig, pub mcp: McpConfig, pub sync: SyncConfig,\\n} impl KbConfig { pub fn from_file(path: &Path) -> Result { let json = std::fs::read_to_string(path)?; let config: KbConfig = serde_json::from_str(&json)?; Ok(config) }\\n} Usage in kb-core : let config = KbConfig::from_file(\\".kb-config/targets/kb-core.json\\")?; // Config drives behavior\\nlet storage: Box = match config.storage.primary { StorageType::Filesystem => Box::new(FilesystemStorage::new(&config)?), StorageType::Memory => Box::new(MemoryStorage::new()), StorageType::SurrealDb => Box::new(SurrealDbStorage::new(&config).await?),\\n}; let embeddings: Box = match config.embeddings.provider { EmbeddingProviderType::FastEmbed => Box::new(FastEmbedProvider::new()?), EmbeddingProviderType::OpenAI => Box::new(RigEmbeddingProvider::openai(&config)?), EmbeddingProviderType::Claude => Box::new(RigEmbeddingProvider::claude(&config)?), EmbeddingProviderType::Ollama => Box::new(RigEmbeddingProvider::ollama(&config)?),\\n};","breadcrumbs":"Config-Driven Design » Rust Integration","id":"293","title":"Rust Integration"},"294":{"body":"Configuration is validated twice :","breadcrumbs":"Config-Driven Design » Double Validation","id":"294","title":"Double Validation"},"295":{"body":"At export time, Nickel validates: ✅ Types match contracts (e.g., primary | StorageType) ✅ Required fields are present ✅ Enums have valid values ✅ Nested structure is correct Error example : error: contract broken by a value ┌─ .kb-config/core/kb.ncl:15:5 │\\n15│ primary = \'invalid, │ ^^^^^^^^^^^^^^^^^^^ applied to this expression │ = This value is not in the enum [\'filesystem, \'memory, \'surrealdb]","breadcrumbs":"Config-Driven Design » 1. Nickel Contract Validation","id":"295","title":"1. Nickel Contract Validation"},"296":{"body":"At runtime, serde validates: ✅ JSON structure matches Rust types ✅ Field names match (with rename support) ✅ Values can be converted to Rust types ✅ Required fields are not null Error example : Error: missing field `graph` at line 1 column 123","breadcrumbs":"Config-Driven Design » 2. Serde Deserialization Validation","id":"296","title":"2. Serde Deserialization Validation"},"297":{"body":"","breadcrumbs":"Config-Driven Design » Benefits of Config-Driven Architecture","id":"297","title":"Benefits of Config-Driven Architecture"},"298":{"body":"Bad (hardcoded): // Hardcoded - requires recompilation to change\\nlet storage = FilesystemStorage::new(\\"/fixed/path\\");\\nlet threshold = 0.6; Good (config-driven): // Config-driven - change via .ncl file\\nlet storage = create_storage(&config)?;\\nlet threshold = config.query.similarity_threshold;","breadcrumbs":"Config-Driven Design » 1. Zero Hardcoding","id":"298","title":"1. Zero Hardcoding"},"299":{"body":"Same codebase, different behavior: # Development\\nnickel export .kb-config/platform/dev.ncl > targets/kb-core.json\\n# → Filesystem storage, fastembed, no auto-sync # Production\\nnickel export .kb-config/platform/prod.ncl > targets/kb-core.json\\n# → SurrealDB enabled, OpenAI embeddings, auto-sync # Testing\\nnickel export .kb-config/platform/test.ncl > targets/kb-core.json\\n# → In-memory storage, no embeddings, isolated","breadcrumbs":"Config-Driven Design » 2. Environment Flexibility","id":"299","title":"2. Environment Flexibility"},"3":{"body":"Generate static HTML files you can browse offline: # Build mdBook to docs/book/\\njust docs::build Then open docs/book/index.html in your browser.","breadcrumbs":"Introduction » Option 2: Build Static HTML","id":"3","title":"Option 2: Build Static HTML"},"30":{"body":"All documentation is written in GitHub Flavored Markdown with mdBook extensions. See contributing/documentation.md for detailed editing guidelines.","breadcrumbs":"Introduction » File Format","id":"30","title":"File Format"},"300":{"body":"Nickel contracts include inline documentation: StorageType = [| \'filesystem, \'memory, \'surrealdb |] | doc \\"Storage backend type: filesystem (git-tracked), memory (ephemeral), surrealdb (scalable)\\", IDEs can show this documentation when editing .ncl files.","breadcrumbs":"Config-Driven Design » 3. Self-Documenting","id":"300","title":"3. Self-Documenting"},"301":{"body":"When adding new features: Update contract in contracts.ncl Add default in defaults.ncl Export validates existing configs Rust compilation validates deserialization Breaking changes are caught before runtime .","breadcrumbs":"Config-Driven Design » 4. Type-Safe Evolution","id":"301","title":"4. Type-Safe Evolution"},"302":{"body":"Different test scenarios without code changes: # test-semantic-search.ncl\\nlet test_config = defaults.base & { embeddings = { enabled = true, provider = \'fastembed }, query = { similarity_threshold = 0.3 },\\n} in test_config #[test]\\nfn test_semantic_search() { let config = KbConfig::from_file(\\"test-semantic-search.json\\")?; // Config drives test behavior\\n}","breadcrumbs":"Config-Driven Design » 5. Testability","id":"302","title":"5. Testability"},"303":{"body":"KB tools automatically discover configuration: Check .kb-config/targets/kb-core.json (pre-exported) Check .kb-config/core/kb.ncl (export on-demand) Check environment variable KB_CONFIG Fall back to embedded defaults impl KbConfig { pub fn discover() -> Result { if let Ok(config) = Self::from_file(\\".kb-config/targets/kb-core.json\\") { return Ok(config); } if Path::new(\\".kb-config/core/kb.ncl\\").exists() { // Export and load let output = Command::new(\\"nickel\\") .args([\\"export\\", \\"--format\\", \\"json\\", \\".kb-config/core/kb.ncl\\"]) .output()?; return serde_json::from_slice(&output.stdout)?; } if let Ok(path) = std::env::var(\\"KB_CONFIG\\") { return Self::from_file(&path); } Ok(Self::default()) // Embedded defaults }\\n}","breadcrumbs":"Config-Driven Design » Configuration Discovery","id":"303","title":"Configuration Discovery"},"304":{"body":"The justfile integrates configuration validation: # Validate all Nickel configs\\nnickel-validate-all: @echo \\"Validating Nickel schemas...\\" nickel typecheck schemas/kb/contracts.ncl nickel typecheck schemas/kb/defaults.ncl nickel typecheck schemas/kb/helpers.ncl nickel typecheck schemas/kb/modes/dev.ncl nickel typecheck schemas/kb/modes/prod.ncl nickel typecheck schemas/kb/modes/test.ncl nickel typecheck .kb-config/core/kb.ncl # Export all platform configs\\nnickel-export-all: @echo \\"Exporting platform configs to JSON...\\" @mkdir -p .kb-config/targets nickel export --format json .kb-config/platform/dev.ncl > .kb-config/targets/kb-dev.json nickel export --format json .kb-config/platform/prod.ncl > .kb-config/targets/kb-prod.json nickel export --format json .kb-config/platform/test.ncl > .kb-config/targets/kb-test.json @echo \\"Exported 3 configurations to .kb-config/targets/\\" Usage: just nickel::validate-all # Check configs are valid\\njust nickel::export-all # Generate JSON for all environments","breadcrumbs":"Config-Driven Design » Integration with justfile","id":"304","title":"Integration with justfile"},"305":{"body":"","breadcrumbs":"Config-Driven Design » Best Practices","id":"305","title":"Best Practices"},"306":{"body":"If it\'s behavior, it\'s config: Storage paths API endpoints Thresholds Timeouts Feature flags Provider selection","breadcrumbs":"Config-Driven Design » 1. Never Hardcode","id":"306","title":"1. Never Hardcode"},"307":{"body":"Don\'t put environment-specific values in user config: Bad : # user config with env-specific values\\n{ storage = { url = if env == \\"prod\\" then \\"prod-url\\" else \\"dev-url\\" # Don\'t do this }\\n} Good : # modes/prod.ncl\\n{ storage = { url = \\"prod-url\\" } } # modes/dev.ncl\\n{ storage = { url = \\"dev-url\\" } } # user config is environment-agnostic\\n{ graph = { name = \\"my-project\\" } }","breadcrumbs":"Config-Driven Design » 2. Use Modes for Environment Differences","id":"307","title":"2. Use Modes for Environment Differences"},"308":{"body":"Use Nickel\'s doc metadata: similarity_threshold | Number | doc \\"Minimum cosine similarity (0-1) for semantic search matches. Higher = stricter.\\" | default = 0.6,","breadcrumbs":"Config-Driven Design » 3. Document Complex Fields","id":"308","title":"3. Document Complex Fields"},"309":{"body":"Run nickel typecheck in CI/CD before building Rust code.","breadcrumbs":"Config-Driven Design » 4. Validate Early","id":"309","title":"4. Validate Early"},"31":{"body":"Create the markdown file in the appropriate directory Add it to SUMMARY.md for navigation Build to verify: just docs::build","breadcrumbs":"Introduction » Adding a New Page","id":"31","title":"Adding a New Page"},"310":{"body":"Track .ncl files in git, ignore .kb-config/targets/*.json (generated).","breadcrumbs":"Config-Driven Design » 5. Version Configs","id":"310","title":"5. Version Configs"},"311":{"body":"Schema Reference : Configuration Schema User Guide : Configuration Guide ADR : Why Nickel vs TOML Examples : .kb-config/core/kb.ncl, .kb-config/platform/*.ncl","breadcrumbs":"Config-Driven Design » See Also","id":"311","title":"See Also"},"312":{"body":"","breadcrumbs":"Storage Architecture » Storage Architecture","id":"312","title":"Storage Architecture"},"313":{"body":"","breadcrumbs":"Logseq Blocks Design » Logseq Blocks Support - Architecture Design","id":"313","title":"Logseq Blocks Support - Architecture Design"},"314":{"body":"Logseq uses content blocks as the fundamental unit of information, not full documents. Each block can have: Properties : #card, TODO, DONE, custom properties Tags : Inline tags like #flashcard, #important References : Block references ((block-id)), page references [[page]] Nesting : Outliner-style hierarchy (parent-child blocks) Metadata : Block-level properties (unlike page-level frontmatter) Current KB limitation : Nodes only have content: String (flat markdown). Importing from Logseq loses block structure and properties. Requirement : Support round-trip import/export with full block fidelity: Logseq Graph → KOGRAL Import → KOGRAL Storage → KOGRAL Export → Logseq Graph (blocks preserved) (blocks preserved)","breadcrumbs":"Logseq Blocks Design » Problem Statement","id":"314","title":"Problem Statement"},"315":{"body":"","breadcrumbs":"Logseq Blocks Design » Use Cases","id":"315","title":"Use Cases"},"316":{"body":"Logseq : - What is Rust\'s ownership model? #card - Rust uses ownership, borrowing, and lifetimes - Three rules: one owner, many borrows XOR one mutable KB needs to preserve : Block with #card property Nested answer blocks Ability to query all cards","breadcrumbs":"Logseq Blocks Design » 1. Flashcards (#card)","id":"316","title":"1. Flashcards (#card)"},"317":{"body":"Logseq : - TODO Implement block parser #rust - DONE Research block structure - TODO Write parser tests KB needs to preserve : Task status per block Hierarchical task breakdown Tags on tasks","breadcrumbs":"Logseq Blocks Design » 2. Task Tracking (TODO/DONE)","id":"317","title":"2. Task Tracking (TODO/DONE)"},"318":{"body":"Logseq : - Core concept: ((block-uuid-123)) - See also: [[Related Page]] KB needs to preserve : Block-to-block links (not just page-to-page) UUID references","breadcrumbs":"Logseq Blocks Design » 3. Block References","id":"318","title":"3. Block References"},"319":{"body":"Logseq : - This is a block with properties property1:: value1 property2:: value2 KB needs to preserve : Custom key-value properties per block Property inheritance/override","breadcrumbs":"Logseq Blocks Design » 4. Block Properties","id":"319","title":"4. Block Properties"},"32":{"body":"Create the directory Add a README.md for the section landing page Add section to SUMMARY.md","breadcrumbs":"Introduction » Adding a New Section","id":"32","title":"Adding a New Section"},"320":{"body":"","breadcrumbs":"Logseq Blocks Design » Design Options","id":"320","title":"Design Options"},"321":{"body":"Add blocks field to Node : pub struct Node { // ... existing fields ... pub content: String, // Backward compat: flat markdown pub blocks: Option>, // NEW: Structured blocks\\n} pub struct Block { pub id: String, // UUID or auto-generated pub content: String, // Block text pub properties: BlockProperties, // Tags, status, custom props pub children: Vec, // Nested blocks pub created: DateTime, pub modified: DateTime,\\n} pub struct BlockProperties { pub tags: Vec, // #card, #important pub status: Option, // TODO, DONE, WAITING pub custom: HashMap, // property:: value\\n} pub enum TaskStatus { Todo, Doing, Done, Waiting, Cancelled,\\n} Pros : ✅ Type-safe, explicit structure ✅ Queryable (find all #card blocks) ✅ Preserves hierarchy ✅ Supports block-level operations Cons : ❌ Adds complexity to Node ❌ Dual representation (content + blocks) ❌ Requires migration of existing data","breadcrumbs":"Logseq Blocks Design » Option A: Blocks as First-Class Data Structure","id":"321","title":"Option A: Blocks as First-Class Data Structure"},"322":{"body":"Keep content: String, parse blocks on-demand : pub struct BlockParser; impl BlockParser { // Parse markdown content into block structure fn parse(content: &str) -> Vec; // Serialize blocks back to markdown fn serialize(blocks: &[Block]) -> String;\\n} // Usage\\nlet blocks = BlockParser::parse(&node.content);\\nlet filtered = blocks.iter().filter(|b| b.properties.tags.contains(\\"card\\")); Pros : ✅ No schema changes ✅ Backward compatible ✅ Simple storage (still just String) Cons : ❌ Parse overhead on every access ❌ Can\'t query blocks in database (SurrealDB) ❌ Harder to index/search blocks","breadcrumbs":"Logseq Blocks Design » Option B: Parser-Only Approach","id":"322","title":"Option B: Parser-Only Approach"},"323":{"body":"Combine both: structured storage + lazy parsing : pub struct Node { // ... existing fields ... pub content: String, // Source of truth (markdown) #[serde(skip_serializing_if = \\"Option::is_none\\")] pub blocks: Option>, // Cached structure (parsed)\\n} impl Node { // Parse blocks from content if not already cached pub fn get_blocks(&mut self) -> &Vec { if self.blocks.is_none() { self.blocks = Some(BlockParser::parse(&self.content)); } self.blocks.as_ref().unwrap() } // Update content from blocks (when blocks modified) pub fn sync_blocks_to_content(&mut self) { if let Some(ref blocks) = self.blocks { self.content = BlockParser::serialize(blocks); } }\\n} Storage Strategy : Filesystem - Store as markdown (Logseq compatible): - Block 1 #card - Nested block\\n- Block 2 TODO SurrealDB - Store both: DEFINE TABLE block SCHEMAFULL;\\nDEFINE FIELD node_id ON block TYPE record(node);\\nDEFINE FIELD block_id ON block TYPE string;\\nDEFINE FIELD content ON block TYPE string;\\nDEFINE FIELD properties ON block TYPE object;\\nDEFINE FIELD parent_id ON block TYPE option; -- Index for queries\\nDEFINE INDEX block_tags ON block COLUMNS properties.tags;\\nDEFINE INDEX block_status ON block COLUMNS properties.status; Pros : ✅ Best of both worlds ✅ Filesystem stays Logseq-compatible ✅ SurrealDB can query blocks ✅ Lazy parsing (only when needed) ✅ Backward compatible Cons : ⚠️ Need to keep content/blocks in sync ⚠️ More complex implementation","breadcrumbs":"Logseq Blocks Design » Option C: Hybrid Approach (RECOMMENDED)","id":"323","title":"Option C: Hybrid Approach (RECOMMENDED)"},"324":{"body":"Phase 1: Data Model // crates/kb-core/src/models/block.rs use chrono::{DateTime, Utc};\\nuse serde::{Deserialize, Serialize};\\nuse std::collections::HashMap; /// A content block (Logseq-style)\\n#[derive(Debug, Clone, Serialize, Deserialize)]\\npub struct Block { /// Unique block identifier (UUID) pub id: String, /// Block content (markdown text, excluding nested blocks) pub content: String, /// Block properties (tags, status, custom) pub properties: BlockProperties, /// Child blocks (nested hierarchy) #[serde(default)] pub children: Vec, /// Creation timestamp pub created: DateTime, /// Last modification timestamp pub modified: DateTime, /// Parent block ID (if nested) #[serde(skip_serializing_if = \\"Option::is_none\\")] pub parent_id: Option,\\n} /// Block-level properties\\n#[derive(Debug, Clone, Default, Serialize, Deserialize)]\\npub struct BlockProperties { /// Tags (e.g., #card, #important) #[serde(default)] pub tags: Vec, /// Task status (TODO, DONE, etc.) #[serde(skip_serializing_if = \\"Option::is_none\\")] pub status: Option, /// Custom properties (property:: value) #[serde(default)] pub custom: HashMap, /// Block references ((uuid)) #[serde(default)] pub block_refs: Vec, /// Page references ([[page]]) #[serde(default)] pub page_refs: Vec,\\n} /// Task status for TODO blocks\\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\\n#[serde(rename_all = \\"UPPERCASE\\")]\\npub enum TaskStatus { Todo, Doing, Done, Later, Now, Waiting, Cancelled,\\n} impl Block { /// Create a new block with content pub fn new(content: String) -> Self { use uuid::Uuid; Self { id: Uuid::new_v4().to_string(), content, properties: BlockProperties::default(), children: Vec::new(), created: Utc::now(), modified: Utc::now(), parent_id: None, } } /// Add a child block pub fn add_child(&mut self, mut child: Block) { child.parent_id = Some(self.id.clone()); self.children.push(child); self.modified = Utc::now(); } /// Add a tag to this block pub fn add_tag(&mut self, tag: String) { if !self.properties.tags.contains(&tag) { self.properties.tags.push(tag); self.modified = Utc::now(); } } /// Set task status pub fn set_status(&mut self, status: TaskStatus) { self.properties.status = Some(status); self.modified = Utc::now(); } /// Get all blocks (self + descendants) as flat list pub fn flatten(&self) -> Vec<&Block> { let mut result = vec![self]; for child in &self.children { result.extend(child.flatten()); } result } /// Find block by ID in tree pub fn find(&self, id: &str) -> Option<&Block> { if self.id == id { return Some(self); } for child in &self.children { if let Some(found) = child.find(id) { return Some(found); } } None }\\n} Phase 2: Update Node Model // crates/kb-core/src/models.rs (modifications) use crate::models::block::Block; pub struct Node { // ... existing fields ... pub content: String, /// Structured blocks (optional, parsed from content) #[serde(skip_serializing_if = \\"Option::is_none\\")] pub blocks: Option>,\\n} impl Node { /// Get blocks, parsing from content if needed pub fn get_blocks(&mut self) -> Result<&Vec> { if self.blocks.is_none() { self.blocks = Some(crate::parser::BlockParser::parse(&self.content)?); } Ok(self.blocks.as_ref().unwrap()) } /// Update content from blocks pub fn sync_blocks_to_content(&mut self) { if let Some(ref blocks) = self.blocks { self.content = crate::parser::BlockParser::serialize(blocks); } } /// Find all blocks with a specific tag pub fn find_blocks_by_tag(&mut self, tag: &str) -> Result> { let blocks = self.get_blocks()?; let mut result = Vec::new(); for block in blocks { for b in block.flatten() { if b.properties.tags.iter().any(|t| t == tag) { result.push(b); } } } Ok(result) } /// Find all TODO blocks pub fn find_todos(&mut self) -> Result> { let blocks = self.get_blocks()?; let mut result = Vec::new(); for block in blocks { for b in block.flatten() { if matches!(b.properties.status, Some(TaskStatus::Todo)) { result.push(b); } } } Ok(result) }\\n} Phase 3: Block Parser // crates/kb-core/src/parser/block_parser.rs use crate::models::block::{Block, BlockProperties, TaskStatus};\\nuse regex::Regex; pub struct BlockParser; impl BlockParser { /// Parse markdown content into block structure /// /// Handles: /// - Outliner format (- prefix with indentation) /// - Tags (#card, #important) /// - Task status (TODO, DONE) /// - Properties (property:: value) /// - Block references (((uuid))) /// - Page references ([[page]]) pub fn parse(content: &str) -> Result> { let mut blocks = Vec::new(); let mut stack: Vec<(usize, Block)> = Vec::new(); // (indent_level, block) for line in content.lines() { // Detect indentation level let indent = count_indent(line); let trimmed = line.trim_start(); // Skip empty lines if trimmed.is_empty() { continue; } // Parse block line if let Some(block_content) = trimmed.strip_prefix(\\"- \\") { let mut block = Self::parse_block_line(block_content)?; // Pop stack until we find parent level while let Some((level, _)) = stack.last() { if *level < indent { break; } stack.pop(); } // Add as child to parent or as root if let Some((_, parent)) = stack.last_mut() { parent.add_child(block.clone()); } else { blocks.push(block.clone()); } stack.push((indent, block)); } } Ok(blocks) } /// Parse a single block line (after \\"- \\" prefix) fn parse_block_line(line: &str) -> Result { let mut block = Block::new(String::new()); let mut properties = BlockProperties::default(); // Extract task status (TODO, DONE, etc.) let (status, remaining) = Self::extract_task_status(line); properties.status = status; // Extract tags (#card, #important) let (tags, remaining) = Self::extract_tags(remaining); properties.tags = tags; // Extract properties (property:: value) let (custom_props, remaining) = Self::extract_properties(remaining); properties.custom = custom_props; // Extract block references (((uuid))) let (block_refs, remaining) = Self::extract_block_refs(remaining); properties.block_refs = block_refs; // Extract page references ([[page]]) let (page_refs, content) = Self::extract_page_refs(remaining); properties.page_refs = page_refs; block.content = content.trim().to_string(); block.properties = properties; Ok(block) } /// Serialize blocks back to markdown pub fn serialize(blocks: &[Block]) -> String { let mut result = String::new(); for block in blocks { Self::serialize_block(&mut result, block, 0); } result } fn serialize_block(output: &mut String, block: &Block, indent: usize) { // Write indent for _ in 0..indent { output.push_str(\\" \\"); } // Write prefix output.push_str(\\"- \\"); // Write task status if let Some(status) = block.properties.status { output.push_str(&format!(\\"{:?} \\", status).to_uppercase()); } // Write content output.push_str(&block.content); // Write tags for tag in &block.properties.tags { output.push_str(&format!(\\" #{}\\", tag)); } // Write properties if !block.properties.custom.is_empty() { output.push(\'\\\\n\'); for (key, value) in &block.properties.custom { for _ in 0..=indent { output.push_str(\\" \\"); } output.push_str(&format!(\\"{}:: {}\\\\n\\", key, value)); } } output.push(\'\\\\n\'); // Write children recursively for child in &block.children { Self::serialize_block(output, child, indent + 1); } } // Helper methods for extraction fn extract_task_status(line: &str) -> (Option, &str) { let line = line.trim_start(); if let Some(rest) = line.strip_prefix(\\"TODO \\") { (Some(TaskStatus::Todo), rest) } else if let Some(rest) = line.strip_prefix(\\"DONE \\") { (Some(TaskStatus::Done), rest) } else if let Some(rest) = line.strip_prefix(\\"DOING \\") { (Some(TaskStatus::Doing), rest) } else if let Some(rest) = line.strip_prefix(\\"LATER \\") { (Some(TaskStatus::Later), rest) } else if let Some(rest) = line.strip_prefix(\\"NOW \\") { (Some(TaskStatus::Now), rest) } else if let Some(rest) = line.strip_prefix(\\"WAITING \\") { (Some(TaskStatus::Waiting), rest) } else if let Some(rest) = line.strip_prefix(\\"CANCELLED \\") { (Some(TaskStatus::Cancelled), rest) } else { (None, line) } } fn extract_tags(line: &str) -> (Vec, String) { let tag_regex = Regex::new(r\\"#(\\\\w+)\\").unwrap(); let mut tags = Vec::new(); let mut result = line.to_string(); for cap in tag_regex.captures_iter(line) { if let Some(tag) = cap.get(1) { tags.push(tag.as_str().to_string()); result = result.replace(&format!(\\"#{}\\", tag.as_str()), \\"\\"); } } (tags, result.trim().to_string()) } fn extract_properties(line: &str) -> (HashMap, String) { let prop_regex = Regex::new(r\\"(\\\\w+)::\\\\s*([^\\\\n]+)\\").unwrap(); let mut props = HashMap::new(); let mut result = line.to_string(); for cap in prop_regex.captures_iter(line) { if let (Some(key), Some(value)) = (cap.get(1), cap.get(2)) { props.insert(key.as_str().to_string(), value.as_str().trim().to_string()); result = result.replace(&cap[0], \\"\\"); } } (props, result.trim().to_string()) } fn extract_block_refs(line: &str) -> (Vec, String) { let ref_regex = Regex::new(r\\"\\\\(\\\\(([^)]+)\\\\)\\\\)\\").unwrap(); let mut refs = Vec::new(); let mut result = line.to_string(); for cap in ref_regex.captures_iter(line) { if let Some(uuid) = cap.get(1) { refs.push(uuid.as_str().to_string()); result = result.replace(&cap[0], \\"\\"); } } (refs, result.trim().to_string()) } fn extract_page_refs(line: &str) -> (Vec, String) { let page_regex = Regex::new(r\\"\\\\[\\\\[([^\\\\]]+)\\\\]\\\\]\\").unwrap(); let mut pages = Vec::new(); let result = line.to_string(); for cap in page_regex.captures_iter(line) { if let Some(page) = cap.get(1) { pages.push(page.as_str().to_string()); // Keep [[page]] in content for now (backward compat) } } (pages, result) }\\n} fn count_indent(line: &str) -> usize { line.chars().take_while(|c| c.is_whitespace()).count() / 2\\n} Phase 4: Logseq Import/Export // crates/kb-core/src/logseq.rs use crate::models::{Node, NodeType};\\nuse crate::models::block::Block;\\nuse crate::parser::BlockParser; pub struct LogseqImporter; impl LogseqImporter { /// Import a Logseq page (markdown file) as a Node pub fn import_page(path: &Path) -> Result { let content = std::fs::read_to_string(path)?; // Extract frontmatter if present let (frontmatter, body) = Self::split_frontmatter(&content); // Parse blocks from body let blocks = BlockParser::parse(&body)?; // Create node with blocks let mut node = Node::new(NodeType::Note, Self::extract_title(path)); node.content = body; node.blocks = Some(blocks); // Apply frontmatter properties if let Some(fm) = frontmatter { Self::apply_frontmatter(&mut node, &fm)?; } Ok(node) } fn split_frontmatter(content: &str) -> (Option, String) { if content.starts_with(\\"---\\\\n\\") { if let Some(end) = content[4..].find(\\"\\\\n---\\\\n\\") { let frontmatter = content[4..4 + end].to_string(); let body = content[4 + end + 5..].to_string(); return (Some(frontmatter), body); } } (None, content.to_string()) } fn extract_title(path: &Path) -> String { path.file_stem() .and_then(|s| s.to_str()) .unwrap_or(\\"Untitled\\") .to_string() } fn apply_frontmatter(node: &mut Node, frontmatter: &str) -> Result<()> { // Parse YAML frontmatter and apply to node // ... implementation ... Ok(()) }\\n} pub struct LogseqExporter; impl LogseqExporter { /// Export a Node to Logseq page format pub fn export_page(node: &Node, path: &Path) -> Result<()> { let mut output = String::new(); // Generate frontmatter output.push_str(\\"---\\\\n\\"); output.push_str(&Self::generate_frontmatter(node)?); output.push_str(\\"---\\\\n\\\\n\\"); // Serialize blocks or use content if let Some(ref blocks) = node.blocks { output.push_str(&BlockParser::serialize(blocks)); } else { output.push_str(&node.content); } std::fs::write(path, output)?; Ok(()) } fn generate_frontmatter(node: &Node) -> Result { let mut fm = String::new(); fm.push_str(&format!(\\"title: {}\\\\n\\", node.title)); fm.push_str(&format!(\\"tags: {}\\\\n\\", node.tags.join(\\", \\"))); // ... more frontmatter fields ... Ok(fm) }\\n}","breadcrumbs":"Logseq Blocks Design » Recommended Implementation","id":"324","title":"Recommended Implementation"},"325":{"body":"// New methods in Graph or Query module impl Graph { /// Find all blocks with a specific tag across all nodes pub fn find_blocks_by_tag(&mut self, tag: &str) -> Vec<(&Node, &Block)> { let mut results = Vec::new(); for node in self.nodes.values_mut() { if let Ok(blocks) = node.find_blocks_by_tag(tag) { for block in blocks { results.push((node as &Node, block)); } } } results } /// Find all flashcards (#card blocks) pub fn find_flashcards(&mut self) -> Vec<(&Node, &Block)> { self.find_blocks_by_tag(\\"card\\") } /// Find all TODO items across knowledge base pub fn find_all_todos(&mut self) -> Vec<(&Node, &Block)> { let mut results = Vec::new(); for node in self.nodes.values_mut() { if let Ok(todos) = node.find_todos() { for block in todos { results.push((node as &Node, block)); } } } results }\\n}","breadcrumbs":"Logseq Blocks Design » Query API Extensions","id":"325","title":"Query API Extensions"},"326":{"body":"{ \\"name\\": \\"kogral/find_blocks\\", \\"description\\": \\"Find blocks by tag, status, or properties\\", \\"inputSchema\\": { \\"type\\": \\"object\\", \\"properties\\": { \\"tag\\": { \\"type\\": \\"string\\", \\"description\\": \\"Filter by tag (e.g., \'card\')\\" }, \\"status\\": { \\"type\\": \\"string\\", \\"enum\\": [\\"TODO\\", \\"DONE\\", \\"DOING\\"] }, \\"property\\": { \\"type\\": \\"string\\", \\"description\\": \\"Custom property key\\" }, \\"value\\": { \\"type\\": \\"string\\", \\"description\\": \\"Property value to match\\" } } }\\n}","breadcrumbs":"Logseq Blocks Design » MCP Tool Extensions","id":"326","title":"MCP Tool Extensions"},"327":{"body":"# schemas/kb/contracts.ncl (additions) BlockConfig = { enabled | Bool | doc \\"Enable block-level parsing and storage\\" | default = true, preserve_hierarchy | Bool | doc \\"Preserve block nesting on import/export\\" | default = true, parse_on_load | Bool | doc \\"Automatically parse blocks when loading nodes\\" | default = false, # Lazy parsing by default supported_statuses | Array String | doc \\"Supported task statuses\\" | default = [\\"TODO\\", \\"DONE\\", \\"DOING\\", \\"LATER\\", \\"NOW\\", \\"WAITING\\", \\"CANCELLED\\"],\\n} KbConfig = { # ... existing fields ... blocks | BlockConfig | doc \\"Block-level features configuration\\" | default = {},\\n}","breadcrumbs":"Logseq Blocks Design » Configuration","id":"327","title":"Configuration"},"328":{"body":"Phase 1 : Add Block models (no behavior change) Phase 2 : Add BlockParser (opt-in via config) Phase 3 : Update Logseq import/export Phase 4 : Add block queries to CLI/MCP Phase 5 : SurrealDB block indexing Backward Compatibility : Existing nodes without blocks field work as before content remains source of truth blocks is optional cache/structure Config flag blocks.enabled to opt-in","breadcrumbs":"Logseq Blocks Design » Migration Path","id":"328","title":"Migration Path"},"329":{"body":"#[cfg(test)]\\nmod tests { use super::*; #[test] fn test_parse_simple_block() { let content = \\"- This is a block #card\\"; let blocks = BlockParser::parse(content).unwrap(); assert_eq!(blocks.len(), 1); assert_eq!(blocks[0].content, \\"This is a block\\"); assert_eq!(blocks[0].properties.tags, vec![\\"card\\"]); } #[test] fn test_parse_nested_blocks() { let content = r#\\"\\n- Parent block - Child block 1 - Child block 2 - Grandchild\\n\\"#; let blocks = BlockParser::parse(content).unwrap(); assert_eq!(blocks.len(), 1); assert_eq!(blocks[0].children.len(), 2); assert_eq!(blocks[0].children[1].children.len(), 1); } #[test] fn test_parse_todo() { let content = \\"- TODO Implement feature #rust\\"; let blocks = BlockParser::parse(content).unwrap(); assert_eq!(blocks[0].properties.status, Some(TaskStatus::Todo)); assert_eq!(blocks[0].content, \\"Implement feature\\"); assert_eq!(blocks[0].properties.tags, vec![\\"rust\\"]); } #[test] fn test_roundtrip() { let original = r#\\"- Block 1 #card - Nested\\n- TODO Block 2 priority:: high\\n\\"#; let blocks = BlockParser::parse(original).unwrap(); let serialized = BlockParser::serialize(&blocks); let reparsed = BlockParser::parse(&serialized).unwrap(); assert_eq!(blocks.len(), reparsed.len()); assert_eq!(blocks[0].properties, reparsed[0].properties); }\\n}","breadcrumbs":"Logseq Blocks Design » Testing Strategy","id":"329","title":"Testing Strategy"},"33":{"body":"","breadcrumbs":"Introduction » 🧪 Testing Documentation","id":"33","title":"🧪 Testing Documentation"},"330":{"body":"Recommended Approach : Hybrid (Option C) Add Block struct with properties, hierarchy Extend Node with optional blocks: Option> Implement bidirectional parser (markdown ↔ blocks) Preserve content as source of truth (backward compat) Enable block queries in CLI/MCP Support round-trip Logseq import/export Benefits : ✅ Full Logseq compatibility ✅ Queryable blocks (find #card, TODO, etc.) ✅ Backward compatible ✅ Extensible (custom properties) ✅ Type-safe structure Trade-offs : ⚠️ Added complexity ⚠️ Need to sync content ↔ blocks ⚠️ More storage for SurrealDB backend Next Steps : Review and approve design Implement Phase 1 (Block models) Implement Phase 2 (BlockParser) Update Logseq import/export Add block queries to MCP/CLI","breadcrumbs":"Logseq Blocks Design » Summary","id":"330","title":"Summary"},"331":{"body":"Status : Accepted Date : 2026-01-17 Deciders : Architecture Team Context : Configuration Strategy for Knowledge Base System","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » ADR-001: Nickel vs TOML for Configuration","id":"331","title":"ADR-001: Nickel vs TOML for Configuration"},"332":{"body":"The KOGRAL requires a flexible, type-safe configuration format that supports: Complex nested structures (graph settings, storage configs, embedding providers) Type validation (prevent runtime errors from config mistakes) Composition and inheritance (shared configs, environment-specific overrides) Documentation (self-documenting schemas) Validation before runtime (catch errors early) We evaluated two primary options:","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » Context","id":"332","title":"Context"},"333":{"body":"Pros : Widely adopted in Rust ecosystem (Cargo.toml) Simple, human-readable syntax Native serde support IDE support (syntax highlighting, completion) Cons : No type system (validation only at runtime) Limited composition (no imports, no functions) No schema validation (errors discovered during execution) Verbose for complex nested structures No documentation in config files Example TOML : [graph]\\nname = \\"my-project\\"\\nversion = \\"1.0.0\\" [storage]\\nprimary = \\"filesystem\\" # String, not validated as enum [storage.secondary]\\nenabled = true\\ntype = \\"surrealdb\\" # Typo would fail at runtime\\nurl = \\"ws://localhost:8000\\" [embeddings]\\nenabled = true\\nprovider = \\"openai\\" # No validation of valid providers\\nmodel = \\"text-embedding-3-small\\" Problems : Typos in enum values (\\"surrealdb\\" vs \\"surealdb\\") fail at runtime No validation that provider = \\"openai\\" requires api_key_env No documentation of valid options No way to compose configs (e.g., base config + environment override)","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » Option 1: TOML (Traditional Config Format)","id":"333","title":"Option 1: TOML (Traditional Config Format)"},"334":{"body":"Pros : Type system with contracts (validate before runtime) Composition via imports and merging Documentation in schemas (self-documenting) Validation at export time (catch errors early) Functions for conditional logic Default values in schema definitions Cons : Less familiar to Rust developers Requires separate nickel CLI tool Smaller ecosystem Steeper learning curve Example Nickel : # schemas/kb-config.ncl\\n{ KbConfig = { graph | GraphConfig, storage | StorageConfig, embeddings | EmbeddingConfig, }, StorageConfig = { primary | [| \'filesystem, \'memory |], # Enum validated at export secondary | { enabled | Bool, type | [| \'surrealdb, \'sqlite |], # Typos caught immediately url | String, } | optional, }, EmbeddingConfig = { enabled | Bool, provider | [| \'openai, \'claude, \'fastembed |], # Valid providers enforced model | String, api_key_env | String | doc \\"Environment variable for API key\\", },\\n} Benefits : Typos in enum values caught at nickel export time Schema enforces required fields based on provider Documentation embedded in schema Config can be composed: import \\"base.ncl\\" & { /* overrides */ }","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » Option 2: Nickel (Functional Configuration Language)","id":"334","title":"Option 2: Nickel (Functional Configuration Language)"},"335":{"body":"We will use Nickel for configuration. Implementation : Define schemas in schemas/*.ncl with type contracts Users write configs in .kogral/config.ncl Export to JSON via CLI: nickel export --format json config.ncl Load JSON in Rust via serde_json into typed structs Pattern (double validation): Nickel Config (.ncl) ↓ [nickel export]\\nJSON (validated by Nickel contracts) ↓ [serde_json::from_str]\\nRust Struct (validated by serde) ↓\\nRuntime (guaranteed valid config) Bridge Code (kb-core/src/config/nickel.rs): pub fn load_config>(path: P) -> Result { // Export Nickel to JSON let json = export_nickel_to_json(path)?; // Deserialize to Rust struct let config: KbConfig = serde_json::from_str(&json)?; Ok(config)\\n} fn export_nickel_to_json>(path: P) -> Result { let output = Command::new(\\"nickel\\") .arg(\\"export\\") .arg(\\"--format\\").arg(\\"json\\") .arg(path.as_ref()) .output()?; Ok(String::from_utf8(output.stdout)?)\\n}","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » Decision","id":"335","title":"Decision"},"336":{"body":"","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » Consequences","id":"336","title":"Consequences"},"337":{"body":"✅ Type Safety : Config errors caught before runtime Invalid enum values fail at export: \'filesystm → error Missing required fields detected: no graph.name → error Type mismatches prevented: enabled = \\"yes\\" → error (expects Bool) ✅ Self-Documenting : Schemas serve as documentation | doc \\"Environment variable for API key\\" describes fields Enum options visible in schema: [| \'openai, \'claude, \'fastembed |] Default values explicit: | default = \'filesystem ✅ Composition : Config reuse and overrides # base.ncl\\n{ graph = { version = \\"1.0.0\\" } } # project.ncl\\nimport \\"base.ncl\\" & { graph = { name = \\"my-project\\" } } ✅ Validation Before Deployment : Catch errors in CI # CI pipeline\\nnickel typecheck config.ncl\\nnickel export --format json config.ncl > /dev/null ✅ Conditional Logic : Environment-specific configs let is_prod = std.string.is_match \\"prod\\" (std.env.get \\"ENV\\") in\\n{ embeddings = { provider = if is_prod then \'openai else \'fastembed, },\\n}","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » Positive","id":"337","title":"Positive"},"338":{"body":"❌ Learning Curve : Team must learn Nickel syntax Mitigation : Provide comprehensive examples in config/ directory Mitigation : Document common patterns in docs/config/ ❌ Tool Dependency : Requires nickel CLI installed Mitigation : Document installation in setup guide Mitigation : Check nickel availability in kb init command ❌ IDE Support : Limited compared to TOML Mitigation : Use LSP (nickel-lang-lsp) for VSCode/Neovim Mitigation : Syntax highlighting available for major editors ❌ Ecosystem Size : Smaller than TOML Mitigation : Nickel actively developed by Tweag Mitigation : Stable language specification (v1.0+)","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » Negative","id":"338","title":"Negative"},"339":{"body":"⚪ Two-Stage Loading : Nickel → JSON → Rust Not a performance concern (config loaded once at startup) Adds resilience (double validation) Allows runtime config inspection (read JSON directly)","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » Neutral","id":"339","title":"Neutral"},"34":{"body":"just docs::test This runs all Rust code examples in the documentation to ensure they compile.","breadcrumbs":"Introduction » Test Code Examples","id":"34","title":"Test Code Examples"},"340":{"body":"","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » Alternatives Considered","id":"340","title":"Alternatives Considered"},"341":{"body":"Rejected : Not ergonomic for humans to write No comments Verbose syntax ({\\"key\\": \\"value\\"} vs key = value) JSON Schema separate from config (duplication)","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » JSON Schema","id":"341","title":"JSON Schema"},"342":{"body":"Rejected : No type system, ambiguous parsing Boolean confusion: yes/no/on/off/true/false Indentation-sensitive (error-prone) No validation without external tools","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » YAML","id":"342","title":"YAML"},"343":{"body":"Rejected : More complex than needed Turing-incomplete by design (limits use cases) Smaller ecosystem than Nickel Steeper learning curve","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » Dhall","id":"343","title":"Dhall"},"344":{"body":"Rejected : Kubernetes-focused, less general-purpose Designed for K8s manifests Less mature than Nickel for general config","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » KCL (KusionStack Configuration Language)","id":"344","title":"KCL (KusionStack Configuration Language)"},"345":{"body":"✅ Define base schemas (schemas/kb-config.ncl) ✅ Implement Nickel loader (kb-core/src/config/nickel.rs) ✅ Create example configs (config/defaults.ncl, config/production.ncl) ✅ Document Nickel usage (docs/config/nickel-schemas.md) ⏳ Add LSP recommendations to setup guide ⏳ Create Nickel → TOML migration tool (for existing users)","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » Implementation Timeline","id":"345","title":"Implementation Timeline"},"346":{"body":"Success Criteria : Config errors caught at export time (not runtime) Users can compose configs for different environments Team comfortable with Nickel syntax within 2 weeks Metrics : Number of config validation errors caught before runtime Time to diagnose config issues (should decrease) User feedback on config complexity","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » Monitoring","id":"346","title":"Monitoring"},"347":{"body":"Nickel Language Nickel User Manual platform-config pattern (reference implementation) TOML Specification","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » References","id":"347","title":"References"},"348":{"body":"Date Author Change 2026-01-17 Architecture Team Initial decision Next ADR : ADR-002: FastEmbed via AI Providers","breadcrumbs":"ADR-001: Nickel vs TOML for Configuration » Revision History","id":"348","title":"Revision History"},"349":{"body":"Status : Accepted Date : 2026-01-17 Deciders : Architecture Team Context : Embedding Strategy for Semantic Search","breadcrumbs":"ADR-002: FastEmbed via AI Providers » ADR-002: FastEmbed via AI Providers for Embeddings","id":"349","title":"ADR-002: FastEmbed via AI Providers for Embeddings"},"35":{"body":"just docs::check-links This validates all internal and external links.","breadcrumbs":"Introduction » Check Links","id":"35","title":"Check Links"},"350":{"body":"The KOGRAL requires embedding generation for semantic search capabilities. Embeddings convert text into numerical vectors that capture semantic meaning, enabling \\"find concepts\\" rather than just \\"find keywords\\". Requirements : Local-First Option : Must work offline without external API dependencies Production Scalability : Support cloud AI providers for large-scale deployments Multiple Providers : Flexibility to choose based on cost, quality, privacy Cost-Effective Development : Free local embeddings for development and testing Quality : Good enough embeddings for finding related concepts Options Evaluated :","breadcrumbs":"ADR-002: FastEmbed via AI Providers » Context","id":"350","title":"Context"},"351":{"body":"Pros : No API costs Works offline Privacy-preserving (no data leaves machine) Fast (local GPU acceleration possible) Cons : Limited model quality compared to cloud providers Resource-intensive (requires download ~100MB models) Single provider lock-in (fastembed library) Example : use fastembed::{TextEmbedding, InitOptions}; let model = TextEmbedding::try_new(InitOptions { model_name: \\"BAAI/bge-small-en-v1.5\\", ..Default::default()\\n})?; let embeddings = model.embed(vec![\\"Hello world\\"], None)?;\\n// Output: Vec> with 384 dimensions","breadcrumbs":"ADR-002: FastEmbed via AI Providers » Option 1: Only Local Embeddings (fastembed)","id":"351","title":"Option 1: Only Local Embeddings (fastembed)"},"352":{"body":"Pros : State-of-the-art embedding quality No local resource usage Latest models available Scalable to millions of documents Cons : Requires API keys (cost per embedding) Network dependency (no offline mode) Privacy concerns (data sent to third parties) Vendor lock-in risk Example : use rig::providers::openai; let client = openai::Client::new(\\"sk-...\\");\\nlet embeddings = client.embeddings(\\"text-embedding-3-small\\") .embed_documents(vec![\\"Hello world\\"]).await?;\\n// Output: Vec> with 1536 dimensions","breadcrumbs":"ADR-002: FastEmbed via AI Providers » Option 2: Only Cloud AI Providers (OpenAI, Claude, etc.)","id":"352","title":"Option 2: Only Cloud AI Providers (OpenAI, Claude, etc.)"},"353":{"body":"Pros : ✅ Best of both worlds: local dev, cloud production ✅ User choice: privacy-first or quality-first ✅ Cost flexibility: free for small projects, paid for scale ✅ Unified interface via rig-core library ✅ Easy provider switching (config-driven) Cons : ❌ More complex implementation (multiple providers) ❌ Dimension mismatch between providers (384 vs 1536) ❌ Additional dependencies (rig-core, fastembed)","breadcrumbs":"ADR-002: FastEmbed via AI Providers » Option 3: Hybrid Strategy (fastembed + AI providers via rig-core)","id":"353","title":"Option 3: Hybrid Strategy (fastembed + AI providers via rig-core)"},"354":{"body":"We will use a hybrid strategy: fastembed (local) + AI providers (via rig-core). Implementation : Default : fastembed with BAAI/bge-small-en-v1.5 (384 dimensions) Optional : OpenAI, Claude, Ollama via rig-core (configurable) Interface : EmbeddingProvider trait abstracts provider details Config-Driven : Provider selection via Nickel configuration Architecture : #[async_trait]\\npub trait EmbeddingProvider: Send + Sync { async fn embed(&self, texts: Vec) -> Result>>; fn dimensions(&self) -> usize; fn model_name(&self) -> &str;\\n} // Local implementation\\npub struct FastEmbedProvider { model: TextEmbedding,\\n} impl FastEmbedProvider { pub fn new(model_name: &str) -> Result { let model = TextEmbedding::try_new(InitOptions { model_name: model_name.into(), ..Default::default() })?; Ok(Self { model }) }\\n} #[async_trait]\\nimpl EmbeddingProvider for FastEmbedProvider { async fn embed(&self, texts: Vec) -> Result>> { Ok(self.model.embed(texts, None)?) } fn dimensions(&self) -> usize { 384 } fn model_name(&self) -> &str { \\"BAAI/bge-small-en-v1.5\\" }\\n} // Cloud provider implementation (via rig-core)\\npub struct RigEmbeddingProvider { client: rig::Client, model: String, dimensions: usize,\\n} #[async_trait]\\nimpl EmbeddingProvider for RigEmbeddingProvider { async fn embed(&self, texts: Vec) -> Result>> { let embeddings = self.client .embeddings(&self.model) .embed_documents(texts) .await?; Ok(embeddings) } fn dimensions(&self) -> usize { self.dimensions } fn model_name(&self) -> &str { &self.model }\\n} Configuration (Nickel): # Local development (default)\\n{ embeddings = { enabled = true, provider = \'fastembed, model = \\"BAAI/bge-small-en-v1.5\\", dimensions = 384, },\\n} # Production with OpenAI\\n{ embeddings = { enabled = true, provider = \'openai, model = \\"text-embedding-3-small\\", dimensions = 1536, api_key_env = \\"OPENAI_API_KEY\\", },\\n} # Self-hosted with Ollama\\n{ embeddings = { enabled = true, provider = \'ollama, model = \\"nomic-embed-text\\", dimensions = 768, },\\n} Provider Selection (kb-core/src/embeddings/mod.rs): pub fn create_provider(config: &EmbeddingConfig) -> Result> { match config.provider { EmbeddingProviderType::FastEmbed => { Ok(Box::new(FastEmbedProvider::new(&config.model)?)) } EmbeddingProviderType::OpenAI => { let api_key = std::env::var(&config.api_key_env)?; Ok(Box::new(RigEmbeddingProvider::new_openai(api_key, &config.model)?)) } EmbeddingProviderType::Claude => { let api_key = std::env::var(&config.api_key_env)?; Ok(Box::new(RigEmbeddingProvider::new_claude(api_key, &config.model)?)) } EmbeddingProviderType::Ollama => { Ok(Box::new(RigEmbeddingProvider::new_ollama(&config.model)?)) } }\\n}","breadcrumbs":"ADR-002: FastEmbed via AI Providers » Decision","id":"354","title":"Decision"},"355":{"body":"","breadcrumbs":"ADR-002: FastEmbed via AI Providers » Consequences","id":"355","title":"Consequences"},"356":{"body":"✅ Development Flexibility : Developers can use fastembed without API keys Fast feedback loop (local embeddings, no network calls) Works offline (train trips, flights) ✅ Production Quality : Production deployments can use OpenAI/Claude for better quality Latest embedding models available Scalable to millions of documents ✅ Privacy Control : Privacy-sensitive projects use local embeddings Public projects can use cloud providers User choice via configuration ✅ Cost Optimization : Small projects: free (fastembed) Large projects: pay for quality (cloud providers) Hybrid: important docs via cloud, bulk via local ✅ Unified Interface : EmbeddingProvider trait abstracts provider details Query code doesn\'t know/care about provider Easy to add new providers","breadcrumbs":"ADR-002: FastEmbed via AI Providers » Positive","id":"356","title":"Positive"},"357":{"body":"❌ Dimension Mismatch : fastembed: 384 dimensions OpenAI: 1536 dimensions Cannot mix in same index Mitigation : Store provider + dimensions in node metadata Rebuild index when changing providers Document dimension constraints ❌ Model Download : First use of fastembed downloads ~100MB model Slow initial startup Mitigation : Pre-download in Docker images Document model download in setup guide Cache models in ~/.cache/fastembed ❌ Complex Configuration : Multiple provider options may confuse users Mitigation : Sane default (fastembed) Clear examples for each provider Validation errors explain misconfigurations","breadcrumbs":"ADR-002: FastEmbed via AI Providers » Negative","id":"357","title":"Negative"},"358":{"body":"⚪ Dependency Trade-off : fastembed adds ~5MB to binary rig-core adds ~2MB Total: ~7MB overhead Not a concern for CLI/MCP server use case.","breadcrumbs":"ADR-002: FastEmbed via AI Providers » Neutral","id":"358","title":"Neutral"},"359":{"body":"Provider Dimensions Quality Cost Privacy Offline fastembed 384 Good Free ✅ Local ✅ Yes OpenAI 1536 Excellent $0.0001/1K ❌ Cloud ❌ No Claude 1024 Excellent $0.00025/1K ❌ Cloud ❌ No Ollama 768 Very Good Free ✅ Local ✅ Yes Recommendation by Use Case : Development : fastembed (fast, free, offline) Small Teams : fastembed or Ollama (privacy, no costs) Enterprise : OpenAI or Claude (best quality, scalable) Self-Hosted : Ollama (good quality, local control)","breadcrumbs":"ADR-002: FastEmbed via AI Providers » Provider Comparison","id":"359","title":"Provider Comparison"},"36":{"body":"When contributing to documentation: Use clear, concise language - Write for developers and AI agents Include code examples - Show, don\'t just tell Add diagrams where helpful - Visual aids improve understanding Link related concepts - Help readers discover related content Test code examples - Ensure code compiles and works Use consistent formatting - Follow existing page structure Update SUMMARY.md - New pages must be in navigation Run checks before committing : just docs::build\\njust docs::test\\njust docs::check-links","breadcrumbs":"Introduction » 📝 Documentation Standards","id":"36","title":"📝 Documentation Standards"},"360":{"body":"✅ Define EmbeddingProvider trait ✅ Implement FastEmbedProvider (stub, feature-gated) ✅ Implement RigEmbeddingProvider (stub, feature-gated) ⏳ Complete FastEmbed integration with model download ⏳ Complete rig-core integration (OpenAI, Claude, Ollama) ⏳ Add query engine with similarity search ⏳ Document provider selection and trade-offs","breadcrumbs":"ADR-002: FastEmbed via AI Providers » Implementation Timeline","id":"360","title":"Implementation Timeline"},"361":{"body":"Success Criteria : Users can switch providers via config change Local embeddings work without API keys Production deployments use cloud providers successfully Query quality acceptable for both local and cloud embeddings Metrics : Embedding generation latency (local vs cloud) Query accuracy (precision@10 for semantic search) API costs (cloud providers) User satisfaction (feedback on search quality)","breadcrumbs":"ADR-002: FastEmbed via AI Providers » Monitoring","id":"361","title":"Monitoring"},"362":{"body":"fastembed Documentation rig-core Documentation OpenAI Embeddings API BAAI/bge Models Ollama Embeddings","breadcrumbs":"ADR-002: FastEmbed via AI Providers » References","id":"362","title":"References"},"363":{"body":"Date Author Change 2026-01-17 Architecture Team Initial decision Previous ADR : ADR-001: Nickel vs TOML Next ADR : ADR-003: Hybrid Storage Strategy","breadcrumbs":"ADR-002: FastEmbed via AI Providers » Revision History","id":"363","title":"Revision History"},"364":{"body":"Status : Accepted Date : 2026-01-17 Deciders : Architecture Team Context : Storage Backend Strategy for Knowledge Base","breadcrumbs":"ADR-003: Hybrid Storage Strategy » ADR-003: Hybrid Storage Strategy","id":"364","title":"ADR-003: Hybrid Storage Strategy"},"365":{"body":"The KOGRAL needs to store knowledge graphs with these requirements: Git-Friendly : Knowledge should version alongside code Scalable : Support small projects (10s of nodes) to large organizations (10,000+ nodes) Queryable : Efficient graph queries and relationship traversal Offline-Capable : Work without network access Collaborative : Support shared organizational knowledge Cost-Effective : Free for small projects, reasonable cost at scale Constraints : Developers want to edit knowledge in text editors Organizations want centralized guideline management Git workflows essential for code-adjacent knowledge Large graphs need database performance","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Context","id":"365","title":"Context"},"366":{"body":"Approach : Store everything as markdown files Pros : ✅ Git-native (perfect for versioning) ✅ Text editor friendly ✅ No dependencies ✅ Works offline ✅ Free Cons : ❌ Poor performance for large graphs (100 0+ nodes) ❌ No efficient graph queries ❌ Difficult to share across projects ❌ Manual sync for collaboration Scalability : Good for < 100 nodes, poor beyond","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Option 1: Filesystem Only","id":"366","title":"Option 1: Filesystem Only"},"367":{"body":"Approach : Store all knowledge in SurrealDB graph database Pros : ✅ Excellent query performance ✅ Native graph relationships ✅ Scalable to millions of nodes ✅ Centralized for collaboration Cons : ❌ Not git-trackable ❌ Requires running database server ❌ Can\'t edit with text editor ❌ Network dependency ❌ Infrastructure cost Scalability : Excellent, but loses developer workflow benefits","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Option 2: Database Only (SurrealDB)","id":"367","title":"Option 2: Database Only (SurrealDB)"},"368":{"body":"Approach : Filesystem for local project knowledge, SurrealDB for shared organizational knowledge Pros : ✅ Git-friendly for project knowledge ✅ Text editor friendly ✅ Scalable for shared knowledge ✅ Works offline (local graph) ✅ Collaborative (shared graph) ✅ Cost-effective (DB only for shared) Cons : ❌ More complex implementation ❌ Sync mechanism needed ❌ Two storage systems to manage Scalability : Excellent - best of both worlds","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Option 3: Hybrid (Filesystem + SurrealDB)","id":"368","title":"Option 3: Hybrid (Filesystem + SurrealDB)"},"369":{"body":"We will use a hybrid storage strategy: Filesystem (local) + SurrealDB (shared). Architecture : ┌─────────────────────────────────────────────────────────────┐\\n│ Project A (.kogral/) │\\n│ Storage: Filesystem (git-tracked) │\\n│ Scope: Project-specific notes, decisions, patterns │\\n│ Access: Local only │\\n└──────────────────┬──────────────────────────────────────────┘ │ │ [inherits] ↓\\n┌─────────────────────────────────────────────────────────────┐\\n│ Shared KB (SurrealDB or synced filesystem) │\\n│ Storage: SurrealDB (scalable) or filesystem (synced) │\\n│ Scope: Organization-wide guidelines, patterns │\\n│ Access: All projects │\\n└─────────────────────────────────────────────────────────────┘ Implementation : # Project config\\n{ storage = { primary = \'filesystem, # Local project knowledge secondary = { enabled = true, type = \'surrealdb, # Shared knowledge url = \\"ws://kb-central.company.com:8000\\", namespace = \\"organization\\", database = \\"shared-kb\\", }, }, inheritance = { base = \\"surrealdb://organization/shared-kb\\", # Inherit from shared priority = 100, # Project overrides shared },\\n} Sync Strategy : .kogral/ (Filesystem) ↓ [on save]\\nWatch for changes ↓ [debounced]\\nSync to SurrealDB ↓\\nShared graph updated ↓ [on query]\\nMerge local + shared results","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Decision","id":"369","title":"Decision"},"37":{"body":"","breadcrumbs":"Introduction » 💡 Tips","id":"37","title":"💡 Tips"},"370":{"body":"","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Consequences","id":"370","title":"Consequences"},"371":{"body":"✅ Developer Workflow Preserved : # Local knowledge workflow (unchanged)\\nvim .kogral/notes/my-note.md\\ngit add .kogral/notes/my-note.md\\ngit commit -m \\"Add implementation note\\"\\ngit push ✅ Git Integration : Project knowledge versioned with code Branches include relevant knowledge Merges resolve knowledge conflicts PR reviews include knowledge changes ✅ Offline Development : Full functionality without network Shared guidelines cached locally Sync when reconnected ✅ Scalability : Projects: filesystem (100s of nodes, fine performance) Organization: SurrealDB (10,000+ nodes, excellent performance) ✅ Collaboration : Shared guidelines accessible to all projects Updates to shared knowledge propagate automatically Consistent practices across organization ✅ Cost-Effective : Small projects: free (filesystem only) Organizations: SurrealDB for shared only (not all project knowledge) ✅ Gradual Adoption : Start with filesystem only Add SurrealDB when needed Feature-gated (--features surrealdb)","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Positive","id":"371","title":"Positive"},"372":{"body":"❌ Complexity : Two storage implementations Sync mechanism required Conflict resolution needed Mitigation : Storage trait abstracts differences Sync is optional (can disable) Conflicts rare (guidelines change infrequently) ❌ Sync Latency : Changes to shared KB not instant in all projects Mitigation : Acceptable latency (guidelines don\'t change rapidly) Manual sync command available (kb sync) Auto-sync on query (fetch latest) ❌ Infrastructure Requirement : SurrealDB server needed for shared KB Mitigation : Optional (can use synced filesystem instead) Docker Compose for easy setup Managed SurrealDB Cloud option","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Negative","id":"372","title":"Negative"},"373":{"body":"⚪ Storage Trait Implementation : #[async_trait]\\npub trait Storage { async fn save_graph(&self, graph: &Graph) -> Result<()>; async fn load_graph(&self, name: &str) -> Result; async fn list_graphs(&self) -> Result>;\\n} // Three implementations\\nimpl Storage for FilesystemStorage { /* ... */ }\\nimpl Storage for SurrealDbStorage { /* ... */ }\\nimpl Storage for MemoryStorage { /* ... */ } Abstraction makes multi-backend manageable.","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Neutral","id":"373","title":"Neutral"},"374":{"body":"","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Use Cases","id":"374","title":"Use Cases"},"375":{"body":"Config : { storage = { primary = \'filesystem } } Behavior : All knowledge in .kogral/ directory Git-tracked with code No database required Works offline","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Small Project (Solo Developer)","id":"375","title":"Small Project (Solo Developer)"},"376":{"body":"Config : { storage = { primary = \'filesystem, secondary = { enabled = true, type = \'surrealdb, url = \\"ws://team-kb.local:8000\\", }, },\\n} Behavior : Project knowledge in .kogral/ (git-tracked) Shared team patterns in SurrealDB Automatic sync Offline fallback to cached","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Medium Project (Team)","id":"376","title":"Medium Project (Team)"},"377":{"body":"Config : { storage = { primary = \'filesystem, secondary = { enabled = true, type = \'surrealdb, url = \\"ws://kb.company.com:8000\\", namespace = \\"engineering\\", database = \\"shared-kb\\", }, }, inheritance = { base = \\"surrealdb://engineering/shared-kb\\", guidelines = [ \\"surrealdb://engineering/rust-guidelines\\", \\"surrealdb://engineering/security-policies\\", ], },\\n} Behavior : Project-specific in .kogral/ Organization guidelines in SurrealDB Security policies enforced Automatic guideline updates","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Large Organization","id":"377","title":"Large Organization"},"378":{"body":"","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Sync Mechanism","id":"378","title":"Sync Mechanism"},"379":{"body":"Trigger : File changes detected (via notify crate) Process : Parse changed markdown file Convert to Node struct Upsert to SurrealDB Update relationships Debouncing : 500ms (configurable)","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Filesystem → SurrealDB","id":"379","title":"Filesystem → SurrealDB"},"38":{"body":"just docs::watch This watches for changes and rebuilds automatically. Open http://localhost:3000 in your browser to see updates in real-time.","breadcrumbs":"Introduction » Live Reload While Writing","id":"38","title":"Live Reload While Writing"},"380":{"body":"Trigger : Query for shared knowledge Process : Query SurrealDB for shared nodes Cache locally (in-memory or filesystem) Merge with local results Return combined Caching : TTL-based (5 minutes default)","breadcrumbs":"ADR-003: Hybrid Storage Strategy » SurrealDB → Filesystem","id":"380","title":"SurrealDB → Filesystem"},"381":{"body":"Strategy : Last-write-wins with version tracking Example : Project A: Updates shared guideline (v1 → v2)\\nProject B: Has cached v1 On Project B query: - Detects v2 available - Fetches v2 - Updates cache - Uses v2 going forward","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Conflict Resolution","id":"381","title":"Conflict Resolution"},"382":{"body":"","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Alternatives Considered","id":"382","title":"Alternatives Considered"},"383":{"body":"Rejected : Cumbersome workflow Requires manual submodule update Merge conflicts in shared submodule Not discoverable (need to know submodule exists)","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Git Submodules for Shared Knowledge","id":"383","title":"Git Submodules for Shared Knowledge"},"384":{"body":"Rejected : Not designed for this use case No query optimization No relationship indexes Sync conflicts difficult to resolve","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Syncthing for Filesystem Sync","id":"384","title":"Syncthing for Filesystem Sync"},"385":{"body":"Rejected : Not a graph database Poor graph query performance Relationship traversal requires complex SQL joins No native graph features","breadcrumbs":"ADR-003: Hybrid Storage Strategy » PostgreSQL with JSON","id":"385","title":"PostgreSQL with JSON"},"386":{"body":"","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Migration Path","id":"386","title":"Migration Path"},"387":{"body":"All storage via filesystem Git-tracked No database required","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Phase 1: Filesystem Only (Current)","id":"387","title":"Phase 1: Filesystem Only (Current)"},"388":{"body":"Add SurrealDB support (feature-gated) Manual sync command Shared KB opt-in","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Phase 2: Optional SurrealDB","id":"388","title":"Phase 2: Optional SurrealDB"},"389":{"body":"File watching Auto-sync on changes Background sync","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Phase 3: Automatic Sync","id":"389","title":"Phase 3: Automatic Sync"},"39":{"body":"Most editors have Markdown preview: VS Code : Ctrl+Shift+V (Cmd+Shift+V on Mac) IntelliJ/CLion : Preview pane (right side) Vim/Neovim : Use plugins like markdown-preview.nvim","breadcrumbs":"Introduction » Markdown Preview in Editor","id":"39","title":"Markdown Preview in Editor"},"390":{"body":"Organization namespaces Access control Audit logs","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Phase 4: Multi-Tenant SurrealDB","id":"390","title":"Phase 4: Multi-Tenant SurrealDB"},"391":{"body":"Success Criteria : Developers don\'t notice hybrid complexity Sync completes < 1 second for typical changes Shared guidelines accessible in < 100ms Zero data loss in sync Metrics : Sync latency (P50, P95, P99) Cache hit rate (shared knowledge) Conflict rate (expect < 0.1%) User satisfaction","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Monitoring","id":"391","title":"Monitoring"},"392":{"body":"SurrealDB Documentation Storage Trait Implementation FilesystemStorage SurrealDbStorage Sync Mechanism","breadcrumbs":"ADR-003: Hybrid Storage Strategy » References","id":"392","title":"References"},"393":{"body":"Date Author Change 2026-01-17 Architecture Team Initial decision Previous ADR : ADR-002: FastEmbed via AI Providers Next ADR : ADR-004: Logseq Compatibility","breadcrumbs":"ADR-003: Hybrid Storage Strategy » Revision History","id":"393","title":"Revision History"},"394":{"body":"","breadcrumbs":"ADR-004: Logseq Blocks Support » ADR-004: Logseq Blocks Support","id":"394","title":"ADR-004: Logseq Blocks Support"},"395":{"body":"Proposed (Design phase)","breadcrumbs":"ADR-004: Logseq Blocks Support » Status","id":"395","title":"Status"},"396":{"body":"Logseq uses content blocks as the fundamental unit of information, not full documents. KB currently treats Node.content as flat markdown string, which loses block-level features on import/export: Lost features : Block properties (#card, TODO, custom properties) Block hierarchy (outliner nesting) Block references (((block-uuid))) Block-level queries (find all flashcards, TODOs) User requirement : Round-trip Logseq import/export with full fidelity: Logseq → KOGRAL Import → KOGRAL Storage → KOGRAL Export → Logseq (blocks preserved at every step)","breadcrumbs":"ADR-004: Logseq Blocks Support » Context","id":"396","title":"Context"},"397":{"body":"Implement Hybrid Block Support (structured + markdown):","breadcrumbs":"ADR-004: Logseq Blocks Support » Decision","id":"397","title":"Decision"},"398":{"body":"pub struct Block { pub id: String, // UUID pub content: String, // Block text pub properties: BlockProperties, // Tags, status, custom pub children: Vec, // Nested blocks // ... timestamps ...\\n} pub struct BlockProperties { pub tags: Vec, // #card, #important pub status: Option, // TODO, DONE, etc. pub custom: HashMap, // property:: value pub block_refs: Vec, // ((uuid)) pub page_refs: Vec, // [[page]]\\n}","breadcrumbs":"ADR-004: Logseq Blocks Support » 1. Add Block Data Structure","id":"398","title":"1. Add Block Data Structure"},"399":{"body":"pub struct Node { // ... existing fields ... pub content: String, // Source of truth (markdown) pub blocks: Option>, // Cached structure (optional)\\n}","breadcrumbs":"ADR-004: Logseq Blocks Support » 2. Extend Node Model","id":"399","title":"2. Extend Node Model"},"4":{"body":"All documentation is written in Markdown and can be read directly: Browse via GitHub/GitLab web interface Use your editor\'s Markdown preview Read from terminal with bat, glow, or similar tools Navigation : See SUMMARY.md for the complete table of contents.","breadcrumbs":"Introduction » Option 3: Read Markdown Files Directly","id":"4","title":"Option 3: Read Markdown Files Directly"},"40":{"body":"SUMMARY.md - Table of contents (edit to add/remove pages) book.toml - mdBook configuration theme/ - Custom CSS/JS (if needed) diagrams/ - SVG diagrams","breadcrumbs":"Introduction » Quick Reference","id":"40","title":"Quick Reference"},"400":{"body":"Parse : Markdown → Vec (lazy, on-demand) Serialize : Vec → Markdown (for export)","breadcrumbs":"ADR-004: Logseq Blocks Support » 3. Bidirectional Parser","id":"400","title":"3. Bidirectional Parser"},"401":{"body":"Filesystem (git-friendly, Logseq-compatible): - Block 1 #card - Nested answer\\n- TODO Block 2 priority:: high SurrealDB (queryable): DEFINE TABLE block;\\nDEFINE FIELD node_id ON block TYPE record(node);\\nDEFINE FIELD block_id ON block TYPE string;\\nDEFINE FIELD properties ON block TYPE object;\\nDEFINE INDEX block_tags ON block COLUMNS properties.tags;","breadcrumbs":"ADR-004: Logseq Blocks Support » 4. Storage Strategy","id":"401","title":"4. Storage Strategy"},"402":{"body":"// Find all flashcards\\ngraph.find_blocks_by_tag(\\"card\\") // Find all TODOs\\ngraph.find_all_todos() // Find blocks with custom property\\nnode.find_blocks_by_property(\\"priority\\", \\"high\\")","breadcrumbs":"ADR-004: Logseq Blocks Support » 5. Query Extensions","id":"402","title":"5. Query Extensions"},"403":{"body":"","breadcrumbs":"ADR-004: Logseq Blocks Support » Consequences","id":"403","title":"Consequences"},"404":{"body":"✅ Full Logseq Compatibility - Import/export preserves all block features ✅ Queryable Blocks - Find #card, TODO, custom properties across KOGRAL ✅ Backward Compatible - Existing nodes without blocks still work ✅ Type-Safe - Structured data instead of regex parsing everywhere ✅ Extensible - Custom block properties supported ✅ Hierarchy Preserved - Nested blocks maintain parent-child relationships","breadcrumbs":"ADR-004: Logseq Blocks Support » Positive","id":"404","title":"Positive"},"405":{"body":"⚠️ Added Complexity - New data structures, parser, sync logic ⚠️ Dual Representation - Must keep content and blocks in sync ⚠️ Storage Overhead - SurrealDB stores both markdown and structure ⚠️ Migration Required - Existing data needs parsing to populate blocks","breadcrumbs":"ADR-004: Logseq Blocks Support » Negative","id":"405","title":"Negative"},"406":{"body":"⚙️ Lazy Parsing - Blocks parsed on-demand (not stored by default) ⚙️ Opt-In - Config flag blocks.enabled to activate features ⚙️ Gradual Adoption - Can implement in phases","breadcrumbs":"ADR-004: Logseq Blocks Support » Neutral","id":"406","title":"Neutral"},"407":{"body":"Phase 1: Foundation (No behavior change) Add Block struct to models/block.rs Add optional blocks field to Node Add config: blocks.enabled = false (default off) Phase 2: Parser Implement BlockParser::parse() (markdown → blocks) Implement BlockParser::serialize() (blocks → markdown) Add Node::get_blocks() method (lazy parsing) Phase 3: Logseq Integration Update LogseqImporter to parse blocks Update LogseqExporter to serialize blocks Test round-trip (Logseq → KB → Logseq) Phase 4: Query API Add Graph::find_blocks_by_tag() Add Graph::find_all_todos() Add Node::find_blocks_by_property() Phase 5: MCP/CLI Integration Add kb/find_blocks MCP tool Add kb find-cards CLI command Add kb find-todos CLI command Phase 6: SurrealDB Backend Create block table schema Index on tags, status, properties Store blocks alongside nodes","breadcrumbs":"ADR-004: Logseq Blocks Support » Implementation Phases","id":"407","title":"Implementation Phases"},"408":{"body":"","breadcrumbs":"ADR-004: Logseq Blocks Support » Alternatives Considered","id":"408","title":"Alternatives Considered"},"409":{"body":"Convert each Logseq block to a separate KOGRAL Node. Rejected : Too granular, explosion of nodes, loses document context.","breadcrumbs":"ADR-004: Logseq Blocks Support » Alternative 1: Blocks as First-Class Nodes","id":"409","title":"Alternative 1: Blocks as First-Class Nodes"},"41":{"body":"","breadcrumbs":"Introduction » 🐛 Troubleshooting","id":"41","title":"🐛 Troubleshooting"},"410":{"body":"Keep content: String, parse blocks on every access. Rejected : Can\'t query blocks in database, parse overhead, can\'t index.","breadcrumbs":"ADR-004: Logseq Blocks Support » Alternative 2: Parser-Only (No Storage)","id":"410","title":"Alternative 2: Parser-Only (No Storage)"},"411":{"body":"Store blocks in metadata: HashMap. Rejected : Not type-safe, harder to query, no schema validation.","breadcrumbs":"ADR-004: Logseq Blocks Support » Alternative 3: Metadata Field","id":"411","title":"Alternative 3: Metadata Field"},"412":{"body":"Logseq Block Format Full Design Document Implementation Tracking","breadcrumbs":"ADR-004: Logseq Blocks Support » References","id":"412","title":"References"},"413":{"body":"Backward Compatibility Strategy : content remains source of truth blocks is optional enhancement Old code works unchanged New features opt-in via config Migration Path : Existing users: blocks disabled by default New users: blocks enabled, parsed on import Manual: kb reindex --parse-blocks to populate Decision Date : 2026-01-17 Approvers : TBD Review Date : After Phase 2 implementation","breadcrumbs":"ADR-004: Logseq Blocks Support » Notes","id":"413","title":"Notes"},"414":{"body":"","breadcrumbs":"ADR-005: MCP Protocol for AI Integration » ADR-005: MCP Protocol for AI Integration","id":"414","title":"ADR-005: MCP Protocol for AI Integration"},"415":{"body":"","breadcrumbs":"Prerequisites » Prerequisites","id":"415","title":"Prerequisites"},"416":{"body":"","breadcrumbs":"Installation Methods » Installation Methods","id":"416","title":"Installation Methods"},"417":{"body":"","breadcrumbs":"Project Initialization » Project Initialization","id":"417","title":"Project Initialization"},"418":{"body":"","breadcrumbs":"Environment Configuration » Environment Configuration","id":"418","title":"Environment Configuration"},"419":{"body":"","breadcrumbs":"Verification » Verification","id":"419","title":"Verification"},"42":{"body":"# Install mdBook\\ncargo install mdbook # Verify installation\\nmdbook --version","breadcrumbs":"Introduction » mdbook command not found","id":"42","title":"mdbook command not found"},"420":{"body":"","breadcrumbs":"Configuration Overview » Configuration Overview","id":"420","title":"Configuration Overview"},"421":{"body":"","breadcrumbs":"Nickel Schemas » Nickel Schemas","id":"421","title":"Nickel Schemas"},"422":{"body":"","breadcrumbs":"Graph Settings » Graph Settings","id":"422","title":"Graph Settings"},"423":{"body":"","breadcrumbs":"Inheritance » Inheritance","id":"423","title":"Inheritance"},"424":{"body":"","breadcrumbs":"Examples » Examples","id":"424","title":"Examples"},"425":{"body":"","breadcrumbs":"Storage Backends » Storage Backends","id":"425","title":"Storage Backends"},"426":{"body":"","breadcrumbs":"Filesystem Storage » Filesystem Storage","id":"426","title":"Filesystem Storage"},"427":{"body":"","breadcrumbs":"SurrealDB Storage » SurrealDB Storage","id":"427","title":"SurrealDB Storage"},"428":{"body":"","breadcrumbs":"In-Memory Storage » In-Memory Storage","id":"428","title":"In-Memory Storage"},"429":{"body":"","breadcrumbs":"Sync Strategies » Sync Strategies","id":"429","title":"Sync Strategies"},"43":{"body":"# Serve on different port\\ncd docs\\nmdbook serve --port 3001","breadcrumbs":"Introduction » Port 3000 already in use","id":"43","title":"Port 3000 already in use"},"430":{"body":"","breadcrumbs":"Embeddings Overview » Embeddings Overview","id":"430","title":"Embeddings Overview"},"431":{"body":"","breadcrumbs":"Provider Configuration » Provider Configuration","id":"431","title":"Provider Configuration"},"432":{"body":"","breadcrumbs":"FastEmbed Local » FastEmbed Local","id":"432","title":"FastEmbed Local"},"433":{"body":"","breadcrumbs":"OpenAI Integration » OpenAI Integration","id":"433","title":"OpenAI Integration"},"434":{"body":"","breadcrumbs":"Claude Integration » Claude Integration","id":"434","title":"Claude Integration"},"435":{"body":"","breadcrumbs":"Ollama Integration » Ollama Integration","id":"435","title":"Ollama Integration"},"436":{"body":"","breadcrumbs":"Semantic Search » Semantic Search","id":"436","title":"Semantic Search"},"437":{"body":"","breadcrumbs":"Template System » Template System","id":"437","title":"Template System"},"438":{"body":"","breadcrumbs":"Document Templates » Document Templates","id":"438","title":"Document Templates"},"439":{"body":"","breadcrumbs":"Export Templates » Export Templates","id":"439","title":"Export Templates"},"44":{"body":"# Check all links\\njust docs::check-links # Update internal links in affected files\\n# Then rebuild\\njust docs::build","breadcrumbs":"Introduction » Links broken after moving files","id":"44","title":"Links broken after moving files"},"440":{"body":"","breadcrumbs":"Customization » Customization","id":"440","title":"Customization"},"441":{"body":"","breadcrumbs":"CLI Overview » CLI Overview","id":"441","title":"CLI Overview"},"442":{"body":"","breadcrumbs":"Commands Reference » Commands Reference","id":"442","title":"Commands Reference"},"443":{"body":"","breadcrumbs":"Workflows » Workflows","id":"443","title":"Workflows"},"444":{"body":"","breadcrumbs":"NuShell Scripts » NuShell Scripts","id":"444","title":"NuShell Scripts"},"445":{"body":"Fast-track guide to integrating KOGRAL with Claude Code via the Model Context Protocol (MCP).","breadcrumbs":"MCP Quick Guide » MCP Quick Guide","id":"445","title":"MCP Quick Guide"},"446":{"body":"MCP (Model Context Protocol) is a protocol that allows Claude Code to interact with external tools and data sources. The kogral-mcp server exposes your KOGRAL knowledge base to Claude Code for AI-assisted knowledge management.","breadcrumbs":"MCP Quick Guide » What is MCP?","id":"446","title":"What is MCP?"},"447":{"body":"","breadcrumbs":"MCP Quick Guide » Quick Setup (5 Minutes)","id":"447","title":"Quick Setup (5 Minutes)"},"448":{"body":"# Build kogral-mcp server\\ncargo build --package kb-mcp --release # Verify binary\\nls -lh target/release/kb-mcp","breadcrumbs":"MCP Quick Guide » Step 1: Build MCP Server","id":"448","title":"Step 1: Build MCP Server"},"449":{"body":"Add to ~/.config/claude/config.json: { \\"mcpServers\\": { \\"kogral-mcp\\": { \\"command\\": \\"/path/to/knowledge-base/target/release/kb-mcp\\", \\"args\\": [\\"serve\\"], \\"env\\": { \\"KOGRAL_DIR\\": \\"/path/to/your/project/.kogral\\" } } }\\n} Replace /path/to/knowledge-base and /path/to/your/project/.kogral with your actual paths.","breadcrumbs":"MCP Quick Guide » Step 2: Configure Claude Code","id":"449","title":"Step 2: Configure Claude Code"},"45":{"body":"mdBook User Guide GitHub Flavored Markdown Spec Markdown Guide","breadcrumbs":"Introduction » 📚 Resources","id":"45","title":"📚 Resources"},"450":{"body":"# Navigate to your project\\ncd /path/to/your/project # Initialize .kb directory\\nkb init","breadcrumbs":"MCP Quick Guide » Step 3: Initialize KOGRAL","id":"450","title":"Step 3: Initialize KOGRAL"},"451":{"body":"# Start Claude Code (will auto-connect to kb-mcp)\\nclaude-code","breadcrumbs":"MCP Quick Guide » Step 4: Start Claude Code","id":"451","title":"Step 4: Start Claude Code"},"452":{"body":"In Claude Code, try: Search for \\"error handling\\" Claude will use the kogral/search tool to query your knowledge base.","breadcrumbs":"MCP Quick Guide » Step 5: Test Connection","id":"452","title":"Step 5: Test Connection"},"453":{"body":"","breadcrumbs":"MCP Quick Guide » Essential Commands","id":"453","title":"Essential Commands"},"454":{"body":"Natural language : Find notes about Rust error handling Claude translates to : { \\"tool\\": \\"kogral/search\\", \\"params\\": { \\"query\\": \\"error handling\\", \\"type\\": \\"note\\", \\"semantic\\": true }\\n}","breadcrumbs":"MCP Quick Guide » Search Knowledge Base","id":"454","title":"Search Knowledge Base"},"455":{"body":"Natural language : Add a note about async Rust patterns with tags rust, async, patterns Claude translates to : { \\"tool\\": \\"kogral/add_note\\", \\"params\\": { \\"title\\": \\"Async Rust Patterns\\", \\"content\\": \\"...\\", \\"tags\\": [\\"rust\\", \\"async\\", \\"patterns\\"] }\\n}","breadcrumbs":"MCP Quick Guide » Add Note","id":"455","title":"Add Note"},"456":{"body":"Natural language : Document decision to use SurrealDB for storage Claude translates to : { \\"tool\\": \\"kogral/add_decision\\", \\"params\\": { \\"title\\": \\"Use SurrealDB for Storage\\", \\"context\\": \\"Need scalable graph database\\", \\"decision\\": \\"Adopt SurrealDB as primary storage backend\\", \\"consequences\\": [\\"Better query performance\\", \\"Additional infrastructure\\"] }\\n}","breadcrumbs":"MCP Quick Guide » Add Decision","id":"456","title":"Add Decision"},"457":{"body":"Natural language : What are our Rust error handling guidelines? Claude translates to : { \\"tool\\": \\"kogral/get_guidelines\\", \\"params\\": { \\"language\\": \\"rust\\", \\"category\\": \\"error-handling\\" }\\n}","breadcrumbs":"MCP Quick Guide » Get Guidelines","id":"457","title":"Get Guidelines"},"458":{"body":"Natural language : Link note-async-patterns to decision-use-tokio as implements Claude translates to : { \\"tool\\": \\"kogral/link\\", \\"params\\": { \\"from\\": \\"note-async-patterns\\", \\"to\\": \\"decision-use-tokio\\", \\"relation\\": \\"implements\\" }\\n}","breadcrumbs":"MCP Quick Guide » Link Concepts","id":"458","title":"Link Concepts"},"459":{"body":"","breadcrumbs":"MCP Quick Guide » Common Workflows","id":"459","title":"Common Workflows"},"46":{"body":"Documentation improvements are always welcome! To contribute: Fork the repository Create a feature branch Make your changes Test with just docs::build and just docs::test Submit a pull request See contributing/documentation.md for detailed guidelines. Happy documenting! 📖 If you have questions or need help, please open an issue or reach out to the maintainers.","breadcrumbs":"Introduction » 🤝 Contributing to Documentation","id":"46","title":"🤝 Contributing to Documentation"},"460":{"body":"You : We just decided in our meeting to migrate from REST to GraphQL.\\nContext: current REST API is too chatty, requires multiple round trips.\\nConsequences: better client performance, but team needs to learn GraphQL.\\nCreate a decision record. Claude (uses kb/add_decision): Created decision: decision-migrate-to-graphql Status: proposed\\nContext: Current REST API requires multiple round trips (chatty)\\nDecision: Migrate from REST to GraphQL API\\nConsequences: - ✅ Better client performance - ❌ Team learning curve for GraphQL","breadcrumbs":"MCP Quick Guide » Capture Meeting Notes","id":"460","title":"Capture Meeting Notes"},"461":{"body":"You : I\'m working on error handling. What related notes and patterns do we have? Claude (uses kogral/search with semantic=true): Found 5 related items: 1. **Error Handling with thiserror** (pattern) Tags: rust, error-handling Created: 2026-01-15 2. **Result Type Best Practices** (guideline) Tags: rust, error-handling, best-practices Created: 2026-01-10 3. **Decision: Use anyhow for Application Errors** (decision) Status: accepted Created: 2026-01-08 4. **Custom Error Types** (note) Tags: rust, error-handling Created: 2026-01-05 5. **Error Propagation Patterns** (pattern) Tags: rust, error-handling Created: 2026-01-03 Would you like me to link your current work to any of these?","breadcrumbs":"MCP Quick Guide » Find Related Knowledge","id":"461","title":"Find Related Knowledge"},"462":{"body":"You : I just implemented the user authentication module following our security guidelines.\\nAdd a note and link it to our security guideline. Claude (uses kb/add_note + kb/link): Created note: note-user-auth-implementation\\nTags: security, authentication, implementation Linked: note-user-auth-implementation --[implements]--> guideline-security-practices Done! Your implementation is now documented and connected to our guidelines.","breadcrumbs":"MCP Quick Guide » Document Implementation","id":"462","title":"Document Implementation"},"463":{"body":"You : Summarize our project knowledge: what decisions have we made, what patterns are we using? Claude (uses kb/summarize_project prompt): # Project Knowledge Summary **Total Nodes**: 42 ## Recent Decisions (5)\\n- Use SurrealDB for Storage (accepted, 2 days ago)\\n- Adopt MCP for AI Integration (accepted, 5 days ago)\\n- Nickel for Configuration (accepted, 1 week ago) ## Active Patterns (8)\\n- Error Handling with thiserror\\n- Repository Pattern for DB\\n- Builder Pattern for Complex Objects\\n- ... ## Top Tags\\n1. rust (23 nodes)\\n2. architecture (12 nodes)\\n3. error-handling (8 nodes)\\n4. patterns (7 nodes) ## Guideline Coverage\\n- Rust: 5 guidelines\\n- Testing: 3 guidelines\\n- Security: 2 guidelines","breadcrumbs":"MCP Quick Guide » Review Project Knowledge","id":"463","title":"Review Project Knowledge"},"464":{"body":"","breadcrumbs":"MCP Quick Guide » Advanced Usage","id":"464","title":"Advanced Usage"},"465":{"body":"You : Find all decisions made in the last week that are still proposed (not accepted) Claude (combines kogral/search with filtering): Found 2 proposed decisions from last week: 1. **Migrate to GraphQL** (proposed) Created: 3 days ago Context: REST API is too chatty... 2. **Add Redis Caching** (proposed) Created: 5 days ago Context: Database queries are slow... Would you like to review these and update their status?","breadcrumbs":"MCP Quick Guide » Conditional Queries","id":"465","title":"Conditional Queries"},"466":{"body":"You : Before I implement X, check if we have any decisions or guidelines about it Claude (uses kogral/search + kogral/get_guidelines): Checking existing knowledge about X... **Decisions**: None found\\n**Guidelines**: 1 relevant guideline found - guideline-module-structure: \\"Keep modules focused and small\\" **Related Notes**: 2 notes mention similar topics - note-module-design-patterns - note-separation-of-concerns Recommendation: Your implementation of X looks aligned with our guidelines.\\nConsider linking it to guideline-module-structure when done.","breadcrumbs":"MCP Quick Guide » Cross-Reference Check","id":"466","title":"Cross-Reference Check"},"467":{"body":"You : Export our architectural decisions to Logseq so I can review them visually Claude (uses kb/export): Exporting to Logseq format... ✓ Exported 12 decisions to /Users/akasha/logseq-export/ - 12 decision records - Preserved wikilinks - Added Logseq properties You can now open /Users/akasha/logseq-export/ in Logseq to visualize the decision graph.","breadcrumbs":"MCP Quick Guide » Export for Sharing","id":"467","title":"Export for Sharing"},"468":{"body":"","breadcrumbs":"MCP Quick Guide » Tips and Tricks","id":"468","title":"Tips and Tricks"},"469":{"body":"Don\'t worry about exact tool syntax. Claude understands: ❌ Don\'t say : \\"Use kb/search with query=\'rust\' and type=\'pattern\'\\" ✅ Do say : \\"Find Rust patterns in KOGRAL\\"","breadcrumbs":"MCP Quick Guide » 1. Use Natural Language","id":"469","title":"1. Use Natural Language"},"47":{"body":"KOGRAL ( KO wledge GRA phs, L ocal-first) is a git-native knowledge graph system designed for developer teams to capture, connect, and query structured knowledge.","breadcrumbs":"What is KOGRAL? » What is KOGRAL?","id":"47","title":"What is KOGRAL?"},"470":{"body":"When adding notes, use consistent tags: ✅ Good : tags: rust, error-handling, pattern ❌ Bad : tags: Rust, ErrorHandling, patterns","breadcrumbs":"MCP Quick Guide » 2. Be Specific with Tags","id":"470","title":"2. Be Specific with Tags"},"471":{"body":"After creating notes, ask Claude to link them: Link this note to our error handling guideline as \'implements\'","breadcrumbs":"MCP Quick Guide » 3. Link as You Go","id":"471","title":"3. Link as You Go"},"472":{"body":"Ask Claude for summaries: What have we documented this week?","breadcrumbs":"MCP Quick Guide » 4. Review Regularly","id":"472","title":"4. Review Regularly"},"473":{"body":"For conceptual queries: Find anything related to \\"making code maintainable\\" Not just keyword \\"maintainable\\", but concepts like refactoring, clean code, patterns, etc.","breadcrumbs":"MCP Quick Guide » 5. Use Semantic Search","id":"473","title":"5. Use Semantic Search"},"474":{"body":"","breadcrumbs":"MCP Quick Guide » Troubleshooting","id":"474","title":"Troubleshooting"},"475":{"body":"# Check kb-mcp is built\\nls target/release/kb-mcp # Test manually\\necho \'{\\"jsonrpc\\":\\"2.0\\",\\"id\\":1,\\"method\\":\\"kogral/search\\",\\"params\\":{\\"query\\":\\"test\\"}}\' \\\\ | target/release/kb-mcp serve","breadcrumbs":"MCP Quick Guide » \\"MCP server not responding\\"","id":"475","title":"\\"MCP server not responding\\""},"476":{"body":"# Verify .kb exists\\nls -la /path/to/project/.kogral # Initialize if missing\\ncd /path/to/project\\nkb init","breadcrumbs":"MCP Quick Guide » \\"KB directory not found\\"","id":"476","title":"\\"KB directory not found\\""},"477":{"body":"# Make binary executable\\nchmod +x target/release/kb-mcp # Check environment variable\\necho $KOGRAL_DIR","breadcrumbs":"MCP Quick Guide » \\"Permission denied\\"","id":"477","title":"\\"Permission denied\\""},"478":{"body":"# Add some test content\\nkb add note \\"Test Note\\" --content \\"Test content\\" # Try search again in Claude Code","breadcrumbs":"MCP Quick Guide » \\"Empty search results\\"","id":"478","title":"\\"Empty search results\\""},"479":{"body":"Read : MCP Tools API Reference for all available tools Explore : Use Cases for more examples Configure : Configuration Reference to customize behavior Integrate : Claude Code Integration for advanced setup","breadcrumbs":"MCP Quick Guide » Next Steps","id":"479","title":"Next Steps"},"48":{"body":"KOGRAL solves the problem of knowledge fragmentation in software development: 📝 Notes scattered across tools 🤔 Decisions lost in chat histories 📚 Guidelines buried in wikis 🔄 Patterns rediscovered repeatedly 🤖 AI agents lacking project context","breadcrumbs":"What is KOGRAL? » Purpose","id":"48","title":"Purpose"},"480":{"body":"Task Say to Claude Search \\"Find notes about X\\" Add note \\"Add a note about X with tags Y, Z\\" Add decision \\"Document decision to use X for Y\\" Get guidelines \\"What are our X guidelines?\\" Link nodes \\"Link A to B as implements\\" Summarize \\"Summarize project knowledge\\" Export \\"Export to Logseq format\\" Remember : Claude Code with MCP turns KOGRAL into an active participant in your development workflow. Ask questions, capture decisions, and let AI help you maintain your project\'s knowledge graph.","breadcrumbs":"MCP Quick Guide » Quick Reference Card","id":"480","title":"Quick Reference Card"},"481":{"body":"","breadcrumbs":"Claude Code Integration » Claude Code Integration","id":"481","title":"Claude Code Integration"},"482":{"body":"","breadcrumbs":"Logseq Integration » Logseq Integration","id":"482","title":"Logseq Integration"},"483":{"body":"","breadcrumbs":"Obsidian Compatibility » Obsidian Compatibility","id":"483","title":"Obsidian Compatibility"},"484":{"body":"","breadcrumbs":"Git Workflows » Git Workflows","id":"484","title":"Git Workflows"},"485":{"body":"","breadcrumbs":"MCP Protocol » MCP Protocol","id":"485","title":"MCP Protocol"},"486":{"body":"Complete reference for the Model Context Protocol (MCP) server tools and resources.","breadcrumbs":"Tools Reference » MCP Tools API Reference","id":"486","title":"MCP Tools API Reference"},"487":{"body":"The kogral-mcp server implements the MCP protocol (JSON-RPC 2.0) for Claude Code integration. It provides: 10 Tools : Operations for querying and modifying knowledge base (7 core + 3 block tools) 6 Resources : Access to knowledge graph content via URIs 2 Prompts : Guided workflows for common tasks","breadcrumbs":"Tools Reference » Overview","id":"487","title":"Overview"},"488":{"body":"","breadcrumbs":"Tools Reference » Server Configuration","id":"488","title":"Server Configuration"},"489":{"body":"# Stdio transport (local use)\\nkb serve # Or run directly\\nkb-mcp serve","breadcrumbs":"Tools Reference » Start MCP Server","id":"489","title":"Start MCP Server"},"49":{"body":"KOGRAL provides a unified, queryable knowledge graph that: Captures knowledge in structured, git-friendly markdown Connects concepts through typed relationships Queries via text and semantic similarity Integrates with AI tools (Claude Code via MCP) Syncs across local (filesystem) and shared (SurrealDB) storage","breadcrumbs":"What is KOGRAL? » Solution","id":"49","title":"Solution"},"490":{"body":"Add to ~/.config/claude/config.json: { \\"mcpServers\\": { \\"kogral-mcp\\": { \\"command\\": \\"/path/to/kb-mcp\\", \\"args\\": [\\"serve\\"], \\"env\\": { \\"KOGRAL_DIR\\": \\"/path/to/project/.kogral\\" } } }\\n}","breadcrumbs":"Tools Reference » Claude Code Configuration","id":"490","title":"Claude Code Configuration"},"491":{"body":"","breadcrumbs":"Tools Reference » Tools","id":"491","title":"Tools"},"492":{"body":"Search the knowledge base using text and/or semantic similarity. Input Schema : { \\"type\\": \\"object\\", \\"properties\\": { \\"query\\": { \\"type\\": \\"string\\", \\"description\\": \\"Search query\\" }, \\"type\\": { \\"type\\": \\"string\\", \\"enum\\": [\\"note\\", \\"decision\\", \\"guideline\\", \\"pattern\\", \\"journal\\", \\"execution\\", \\"all\\"], \\"description\\": \\"Filter by node type\\", \\"default\\": \\"all\\" }, \\"project\\": { \\"type\\": \\"string\\", \\"description\\": \\"Limit search to specific project graph\\" }, \\"semantic\\": { \\"type\\": \\"boolean\\", \\"description\\": \\"Enable semantic similarity search\\", \\"default\\": true }, \\"threshold\\": { \\"type\\": \\"number\\", \\"description\\": \\"Minimum similarity threshold (0-1)\\", \\"default\\": 0.4 }, \\"limit\\": { \\"type\\": \\"integer\\", \\"description\\": \\"Maximum number of results\\", \\"default\\": 10 } }, \\"required\\": [\\"query\\"]\\n} Example Request : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 1, \\"method\\": \\"kogral/search\\", \\"params\\": { \\"query\\": \\"error handling patterns in Rust\\", \\"type\\": \\"pattern\\", \\"semantic\\": true, \\"threshold\\": 0.6, \\"limit\\": 5 }\\n} Example Response : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 1, \\"result\\": { \\"type\\": \\"text\\", \\"text\\": \\"Found 3 result(s):\\\\n\\\\n1. Error Handling with thiserror (pattern, score: 0.85)\\\\n Tags: rust, error-handling\\\\n Created: 2026-01-15\\\\n \\\\n2. Result Type Best Practices (guideline, score: 0.72)\\\\n Tags: rust, error-handling, best-practices\\\\n Created: 2026-01-10\\\\n\\\\n3. Custom Error Types (note, score: 0.65)\\\\n Tags: rust, error-handling\\\\n Created: 2026-01-08\\" }\\n}","breadcrumbs":"Tools Reference » kb/search","id":"492","title":"kb/search"},"493":{"body":"Add a new note to the knowledge base. Input Schema : { \\"type\\": \\"object\\", \\"properties\\": { \\"title\\": { \\"type\\": \\"string\\", \\"description\\": \\"Note title\\" }, \\"content\\": { \\"type\\": \\"string\\", \\"description\\": \\"Note content (markdown)\\" }, \\"tags\\": { \\"type\\": \\"array\\", \\"items\\": { \\"type\\": \\"string\\" }, \\"description\\": \\"Tags for categorization\\", \\"default\\": [] }, \\"relates_to\\": { \\"type\\": \\"array\\", \\"items\\": { \\"type\\": \\"string\\" }, \\"description\\": \\"Related node IDs\\", \\"default\\": [] }, \\"project\\": { \\"type\\": \\"string\\", \\"description\\": \\"Project graph name\\", \\"default\\": \\"default\\" } }, \\"required\\": [\\"title\\", \\"content\\"]\\n} Example Request : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 2, \\"method\\": \\"kogral/add_note\\", \\"params\\": { \\"title\\": \\"Async Trait Patterns\\", \\"content\\": \\"Common patterns for using async traits in Rust:\\\\n\\\\n1. Use `async-trait` crate\\\\n2. Box return types for flexibility\\\\n3. Consider Send + Sync bounds\\", \\"tags\\": [\\"rust\\", \\"async\\", \\"patterns\\"], \\"relates_to\\": [\\"pattern-error-handling\\"] }\\n} Example Response : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 2, \\"result\\": { \\"type\\": \\"text\\", \\"text\\": \\"Note added successfully: note-async-trait-patterns (ID: note-abc123)\\" }\\n}","breadcrumbs":"Tools Reference » kb/add_note","id":"493","title":"kb/add_note"},"494":{"body":"Create an Architectural Decision Record (ADR). Input Schema : { \\"type\\": \\"object\\", \\"properties\\": { \\"title\\": { \\"type\\": \\"string\\", \\"description\\": \\"Decision title\\" }, \\"context\\": { \\"type\\": \\"string\\", \\"description\\": \\"Decision context and background\\" }, \\"decision\\": { \\"type\\": \\"string\\", \\"description\\": \\"The decision made\\" }, \\"consequences\\": { \\"type\\": \\"array\\", \\"items\\": { \\"type\\": \\"string\\" }, \\"description\\": \\"List of consequences\\", \\"default\\": [] }, \\"status\\": { \\"type\\": \\"string\\", \\"enum\\": [\\"proposed\\", \\"accepted\\", \\"rejected\\", \\"deprecated\\", \\"superseded\\"], \\"default\\": \\"proposed\\" }, \\"tags\\": { \\"type\\": \\"array\\", \\"items\\": { \\"type\\": \\"string\\" }, \\"default\\": [] } }, \\"required\\": [\\"title\\", \\"context\\", \\"decision\\"]\\n} Example Request : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 3, \\"method\\": \\"kogral/add_decision\\", \\"params\\": { \\"title\\": \\"Use SurrealDB for Knowledge Graph Storage\\", \\"context\\": \\"Need a scalable storage solution that supports graph queries and can handle growing knowledge base\\", \\"decision\\": \\"Adopt SurrealDB as the primary storage backend for production deployments\\", \\"consequences\\": [ \\"Better query performance for graph traversal\\", \\"Native support for relationships\\", \\"Additional infrastructure dependency\\", \\"Team needs to learn SurrealDB query language\\" ], \\"status\\": \\"accepted\\", \\"tags\\": [\\"architecture\\", \\"storage\\", \\"surrealdb\\"] }\\n} Example Response : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 3, \\"result\\": { \\"type\\": \\"text\\", \\"text\\": \\"Decision added: decision-use-surrealdb (ID: decision-xyz789)\\\\nStatus: accepted\\" }\\n}","breadcrumbs":"Tools Reference » kb/add_decision","id":"494","title":"kb/add_decision"},"495":{"body":"Create a relationship between two nodes. Input Schema : { \\"type\\": \\"object\\", \\"properties\\": { \\"from\\": { \\"type\\": \\"string\\", \\"description\\": \\"Source node ID\\" }, \\"to\\": { \\"type\\": \\"string\\", \\"description\\": \\"Target node ID\\" }, \\"relation\\": { \\"type\\": \\"string\\", \\"enum\\": [\\"relates_to\\", \\"depends_on\\", \\"implements\\", \\"extends\\", \\"supersedes\\", \\"explains\\"], \\"description\\": \\"Relationship type\\" }, \\"strength\\": { \\"type\\": \\"number\\", \\"description\\": \\"Relationship strength (0-1)\\", \\"minimum\\": 0, \\"maximum\\": 1, \\"default\\": 1.0 } }, \\"required\\": [\\"from\\", \\"to\\", \\"relation\\"]\\n} Example Request : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 4, \\"method\\": \\"kogral/link\\", \\"params\\": { \\"from\\": \\"note-async-trait-patterns\\", \\"to\\": \\"pattern-error-handling\\", \\"relation\\": \\"relates_to\\", \\"strength\\": 0.8 }\\n} Example Response : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 4, \\"result\\": { \\"type\\": \\"text\\", \\"text\\": \\"Link created: note-async-trait-patterns --[relates_to]--> pattern-error-handling (strength: 0.8)\\" }\\n} Relationship Types : relates_to: General conceptual relationship depends_on: Dependency (from depends on to) implements: Implementation of concept/pattern extends: Inherits or extends another node supersedes: Replaces an older version explains: Provides documentation/clarification","breadcrumbs":"Tools Reference » kb/link","id":"495","title":"kb/link"},"496":{"body":"Retrieve guidelines for current project with inheritance resolution. Input Schema : { \\"type\\": \\"object\\", \\"properties\\": { \\"language\\": { \\"type\\": \\"string\\", \\"description\\": \\"Programming language (e.g., rust, nushell)\\" }, \\"category\\": { \\"type\\": \\"string\\", \\"description\\": \\"Guideline category (e.g., error-handling, testing)\\" }, \\"include_base\\": { \\"type\\": \\"boolean\\", \\"description\\": \\"Include shared/base guidelines\\", \\"default\\": true } }\\n} Example Request : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 5, \\"method\\": \\"kogral/get_guidelines\\", \\"params\\": { \\"language\\": \\"rust\\", \\"category\\": \\"error-handling\\", \\"include_base\\": true }\\n} Example Response : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 5, \\"result\\": { \\"type\\": \\"text\\", \\"text\\": \\"Guidelines for rust/error-handling:\\\\n\\\\n## Project Guidelines (priority: 150)\\\\n\\\\n1. Custom Error Types (guideline-custom-errors)\\\\n - Use thiserror for error definitions\\\\n - Implement From traits for conversions\\\\n - Source: .kogral/guidelines/rust-errors.md\\\\n\\\\n## Shared Guidelines (priority: 50)\\\\n\\\\n1. Result Type Best Practices (guideline-result-best-practices)\\\\n - Always use Result for fallible operations\\\\n - Never use unwrap() in production\\\\n - Source: ~/Tools/.kogral-shared/guidelines/rust-errors.md\\\\n\\\\n2. Error Propagation (guideline-error-propagation)\\\\n - Use ? operator for error propagation\\\\n - Add context with .context()\\\\n - Source: ~/Tools/.kogral-shared/guidelines/rust-errors.md\\" }\\n}","breadcrumbs":"Tools Reference » kb/get_guidelines","id":"496","title":"kb/get_guidelines"},"497":{"body":"List available knowledge graphs. Input Schema : { \\"type\\": \\"object\\", \\"properties\\": {}\\n} Example Request : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 6, \\"method\\": \\"kb/list_graphs\\"\\n} Example Response : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 6, \\"result\\": { \\"type\\": \\"text\\", \\"text\\": \\"Available graphs:\\\\n\\\\n- default (Current project)\\\\n Path: /path/to/project/.kogral\\\\n Nodes: 42\\\\n Last modified: 2026-01-17T10:30:00Z\\\\n\\\\n- shared (Shared guidelines)\\\\n Path: ~/Tools/.kogral-shared\\\\n Nodes: 156\\\\n Last modified: 2026-01-15T14:20:00Z\\" }\\n}","breadcrumbs":"Tools Reference » kb/list_graphs","id":"497","title":"kb/list_graphs"},"498":{"body":"Export knowledge base to various formats. Input Schema : { \\"type\\": \\"object\\", \\"properties\\": { \\"format\\": { \\"type\\": \\"string\\", \\"enum\\": [\\"logseq\\", \\"json\\", \\"markdown\\"], \\"description\\": \\"Export format\\" }, \\"output_path\\": { \\"type\\": \\"string\\", \\"description\\": \\"Output file or directory path\\" }, \\"include_types\\": { \\"type\\": \\"array\\", \\"items\\": { \\"type\\": \\"string\\", \\"enum\\": [\\"note\\", \\"decision\\", \\"guideline\\", \\"pattern\\", \\"journal\\", \\"execution\\"] }, \\"description\\": \\"Node types to include\\", \\"default\\": [\\"note\\", \\"decision\\", \\"guideline\\", \\"pattern\\"] }, \\"skip_journals\\": { \\"type\\": \\"boolean\\", \\"default\\": true } }, \\"required\\": [\\"format\\", \\"output_path\\"]\\n} Example Request : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 7, \\"method\\": \\"kogral/export\\", \\"params\\": { \\"format\\": \\"logseq\\", \\"output_path\\": \\"/Users/akasha/logseq-graph\\", \\"include_types\\": [\\"note\\", \\"decision\\", \\"guideline\\"], \\"skip_journals\\": true }\\n} Example Response : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 7, \\"result\\": { \\"type\\": \\"text\\", \\"text\\": \\"Export completed:\\\\n\\\\nFormat: Logseq\\\\nOutput: /Users/akasha/logseq-graph\\\\nExported: 42 nodes\\\\n - 23 notes\\\\n - 12 decisions\\\\n - 7 guidelines\\\\n\\\\nLogseq graph ready to open.\\" }\\n}","breadcrumbs":"Tools Reference » kb/export","id":"498","title":"kb/export"},"499":{"body":"Tools for querying Logseq content blocks. Requires blocks.enable_mcp_tools = true in configuration.","breadcrumbs":"Tools Reference » Block Tools","id":"499","title":"Block Tools"},"5":{"body":"We use just recipes for documentation tasks. All commands assume you\'re in the project root directory.","breadcrumbs":"Introduction » 🛠️ Documentation Commands","id":"5","title":"🛠️ Documentation Commands"},"50":{"body":"","breadcrumbs":"What is KOGRAL? » Core Philosophy","id":"50","title":"Core Philosophy"},"500":{"body":"Find blocks by tag, task status, or custom property across the knowledge base. Input Schema : { \\"type\\": \\"object\\", \\"properties\\": { \\"tag\\": { \\"type\\": \\"string\\", \\"description\\": \\"Find blocks with this tag (e.g., \'card\', \'important\')\\" }, \\"status\\": { \\"type\\": \\"string\\", \\"enum\\": [\\"TODO\\", \\"DOING\\", \\"DONE\\", \\"LATER\\", \\"NOW\\", \\"WAITING\\", \\"CANCELLED\\"], \\"description\\": \\"Find blocks with this task status\\" }, \\"property_key\\": { \\"type\\": \\"string\\", \\"description\\": \\"Custom property key to search for\\" }, \\"property_value\\": { \\"type\\": \\"string\\", \\"description\\": \\"Custom property value to match\\" }, \\"limit\\": { \\"type\\": \\"integer\\", \\"description\\": \\"Maximum number of results\\", \\"default\\": 20 } }\\n} Note : Provide one of: tag, status, or both property_key and property_value. Example Request (find blocks by tag): { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 8, \\"method\\": \\"kogral/find_blocks\\", \\"params\\": { \\"tag\\": \\"high-priority\\", \\"limit\\": 10 }\\n} Example Response : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 8, \\"result\\": { \\"type\\": \\"text\\", \\"text\\": \\"Found 3 blocks with tag \'#high-priority\':\\\\n\\\\n**Project Tasks** (project-tasks-123)\\\\n - TODO Implement authentication #high-priority\\\\n - TODO Fix security vulnerability #high-priority\\\\n\\\\n**Sprint Planning** (sprint-planning-456)\\\\n - DOING Refactor database layer #high-priority\\" }\\n} Example Request (find blocks by property): { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 9, \\"method\\": \\"kogral/find_blocks\\", \\"params\\": { \\"property_key\\": \\"priority\\", \\"property_value\\": \\"high\\", \\"limit\\": 15 }\\n}","breadcrumbs":"Tools Reference » kb/find_blocks","id":"500","title":"kb/find_blocks"},"501":{"body":"Find all TODO blocks across the knowledge base. Input Schema : { \\"type\\": \\"object\\", \\"properties\\": { \\"limit\\": { \\"type\\": \\"integer\\", \\"description\\": \\"Maximum number of results\\", \\"default\\": 20 } }\\n} Example Request : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 10, \\"method\\": \\"kogral/find_todos\\", \\"params\\": { \\"limit\\": 25 }\\n} Example Response : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 10, \\"result\\": { \\"type\\": \\"text\\", \\"text\\": \\"Found 8 TODO blocks:\\\\n\\\\n**Project Tasks** (project-tasks-123)\\\\n - TODO Implement authentication\\\\n - TODO Write integration tests\\\\n - TODO Update documentation\\\\n\\\\n**Bug Fixes** (bug-fixes-456)\\\\n - TODO Fix race condition in cache\\\\n - TODO Address memory leak\\\\n\\\\n**Research** (research-789)\\\\n - TODO Evaluate GraphQL alternatives\\\\n - TODO Benchmark new approach\\\\n - TODO Document findings\\" }\\n}","breadcrumbs":"Tools Reference » kb/find_todos","id":"501","title":"kb/find_todos"},"502":{"body":"Find all flashcard blocks (blocks tagged with #card) for spaced repetition learning. Input Schema : { \\"type\\": \\"object\\", \\"properties\\": { \\"limit\\": { \\"type\\": \\"integer\\", \\"description\\": \\"Maximum number of flashcards\\", \\"default\\": 10 } }\\n} Example Request : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 11, \\"method\\": \\"kogral/find_cards\\", \\"params\\": { \\"limit\\": 5 }\\n} Example Response : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 11, \\"result\\": { \\"type\\": \\"text\\", \\"text\\": \\"Found 3 flashcards:\\\\n\\\\n**Rust Learning** (rust-learning-123)\\\\n - What is Rust\'s ownership model? #card #rust\\\\n - Ownership prevents data races at compile time\\\\n - Each value has a single owner\\\\n\\\\n**System Design** (system-design-456)\\\\n - What is the CAP theorem? #card #distributed-systems\\\\n - Consistency, Availability, Partition tolerance\\\\n - Can only guarantee 2 of 3\\\\n\\\\n**Algorithms** (algorithms-789)\\\\n - What is the time complexity of quicksort? #card #algorithms\\\\n - Average: O(n log n)\\\\n - Worst case: O(n²)\\" }\\n} Use Cases : kb/find_blocks : General block search by metadata kb/find_todos : Task management and tracking kb/find_cards : Spaced repetition learning system See Also : Logseq Blocks Support ADR-004: Logseq Blocks Support","breadcrumbs":"Tools Reference » kb/find_cards","id":"502","title":"kb/find_cards"},"503":{"body":"Resources provide read-only access to knowledge graph content via URIs.","breadcrumbs":"Tools Reference » Resources","id":"503","title":"Resources"},"504":{"body":"Access project notes. URI : kogral://project/notes or kogral://project/notes/{note-id} Example : Read all project notes kogral://project/notes Example : Read specific note kogral://project/notes/async-trait-patterns","breadcrumbs":"Tools Reference » kogral://project/notes","id":"504","title":"kogral://project/notes"},"505":{"body":"Access project decisions (ADRs). URI : kogral://project/decisions or kogral://project/decisions/{decision-id}","breadcrumbs":"Tools Reference » kogral://project/decisions","id":"505","title":"kogral://project/decisions"},"506":{"body":"Access project-specific guidelines. URI : kogral://project/guidelines or kogral://project/guidelines/{guideline-id}","breadcrumbs":"Tools Reference » kogral://project/guidelines","id":"506","title":"kogral://project/guidelines"},"507":{"body":"Access project patterns. URI : kogral://project/patterns or kogral://project/patterns/{pattern-id}","breadcrumbs":"Tools Reference » kogral://project/patterns","id":"507","title":"kogral://project/patterns"},"508":{"body":"Access shared guidelines (inherited). URI : kogral://shared/guidelines or kogral://shared/guidelines/{guideline-id}","breadcrumbs":"Tools Reference » kogral://shared/guidelines","id":"508","title":"kogral://shared/guidelines"},"509":{"body":"Access shared patterns (inherited). URI : kogral://shared/patterns or kogral://shared/patterns/{pattern-id}","breadcrumbs":"Tools Reference » kogral://shared/patterns","id":"509","title":"kogral://shared/patterns"},"51":{"body":"Behavior defined in Nickel schemas, not hardcoded: { graph = { name = \\"my-project\\" }, storage = { primary = \'filesystem }, embeddings = { provider = \'fastembed }, templates = { templates_dir = \\"templates\\" },\\n} Every aspect configurable: storage, embeddings, templates, query behavior.","breadcrumbs":"What is KOGRAL? » Config-Driven","id":"51","title":"Config-Driven"},"510":{"body":"Prompts provide guided workflows for common tasks.","breadcrumbs":"Tools Reference » Prompts","id":"510","title":"Prompts"},"511":{"body":"Generate a comprehensive project knowledge summary. Arguments : { \\"project\\": { \\"type\\": \\"string\\", \\"description\\": \\"Project graph name\\", \\"default\\": \\"default\\" }\\n} Example Request : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 8, \\"method\\": \\"kogral/summarize_project\\", \\"params\\": { \\"project\\": \\"default\\" }\\n} Returns : Prompt messages with project summary including: Total node counts by type Recent additions Top tags Key decisions Active patterns","breadcrumbs":"Tools Reference » kb/summarize_project","id":"511","title":"kb/summarize_project"},"512":{"body":"Find nodes related to a specific topic or node. Arguments : { \\"node_id\\": { \\"type\\": \\"string\\", \\"description\\": \\"Node ID to find relations for\\" }, \\"depth\\": { \\"type\\": \\"integer\\", \\"description\\": \\"Maximum traversal depth\\", \\"default\\": 2 }\\n} Example Request : { \\"jsonrpc\\": \\"2.0\\", \\"id\\": 9, \\"method\\": \\"kb/find_related\\", \\"params\\": { \\"node_id\\": \\"pattern-error-handling\\", \\"depth\\": 2 }\\n} Returns : Prompt messages with: Direct relationships Indirect relationships (depth 2+) Common tags Related guidelines","breadcrumbs":"Tools Reference » kb/find_related","id":"512","title":"kb/find_related"},"513":{"body":"","breadcrumbs":"Tools Reference » Error Handling","id":"513","title":"Error Handling"},"514":{"body":"Standard JSON-RPC 2.0 error codes: Code Meaning Description -32700 Parse error Invalid JSON -32600 Invalid Request Missing required fields -32601 Method not found Unknown tool/resource -32602 Invalid params Parameter validation failed -32603 Internal error Server-side error","breadcrumbs":"Tools Reference » Error Codes","id":"514","title":"Error Codes"},"515":{"body":"{ \\"jsonrpc\\": \\"2.0\\", \\"id\\": 1, \\"error\\": { \\"code\\": -32602, \\"message\\": \\"Invalid params\\", \\"data\\": { \\"details\\": \\"Field \'query\' is required but missing\\", \\"field\\": \\"query\\" } }\\n}","breadcrumbs":"Tools Reference » Example Error Response","id":"515","title":"Example Error Response"},"516":{"body":"","breadcrumbs":"Tools Reference » Best Practices","id":"516","title":"Best Practices"},"517":{"body":"{ \\"method\\": \\"kogral/search\\", \\"params\\": { \\"query\\": \\"how to handle database connection errors\\", \\"semantic\\": true, \\"threshold\\": 0.5 }\\n}","breadcrumbs":"Tools Reference » 1. Use Semantic Search for Discovery","id":"517","title":"1. Use Semantic Search for Discovery"},"518":{"body":"{ \\"method\\": \\"kogral/link\\", \\"params\\": { \\"from\\": \\"note-new-discovery\\", \\"to\\": \\"pattern-related-pattern\\", \\"relation\\": \\"implements\\" }\\n}","breadcrumbs":"Tools Reference » 2. Link Related Concepts","id":"518","title":"2. Link Related Concepts"},"519":{"body":"{ \\"method\\": \\"kogral/get_guidelines\\", \\"params\\": { \\"language\\": \\"rust\\", \\"category\\": \\"testing\\" }\\n}","breadcrumbs":"Tools Reference » 3. Query Guidelines Before Implementation","id":"519","title":"3. Query Guidelines Before Implementation"},"52":{"body":"Knowledge stored as markdown files with YAML frontmatter: ---\\nid: note-123\\ntype: note\\ntitle: Error Handling Patterns\\ntags: [rust, error-handling]\\n--- # Error Handling Patterns Use `thiserror` for custom error types... Changes tracked via git, reviewable in PRs, mergeable across branches.","breadcrumbs":"What is KOGRAL? » Git-Friendly","id":"52","title":"Git-Friendly"},"520":{"body":"{ \\"method\\": \\"kogral/add_decision\\", \\"params\\": { \\"title\\": \\"Use X for Y\\", \\"context\\": \\"Background...\\", \\"decision\\": \\"We will...\\", \\"consequences\\": [\\"Pro 1\\", \\"Con 1\\"] }\\n}","breadcrumbs":"Tools Reference » 4. Document Decisions with ADRs","id":"520","title":"4. Document Decisions with ADRs"},"521":{"body":"MCP Specification Quick Start Guide Configuration Reference kb-mcp Source Code","breadcrumbs":"Tools Reference » See Also","id":"521","title":"See Also"},"522":{"body":"","breadcrumbs":"Resources » Resources","id":"522","title":"Resources"},"523":{"body":"","breadcrumbs":"Rust API » Rust API","id":"523","title":"Rust API"},"524":{"body":"","breadcrumbs":"Development Setup » Development Setup","id":"524","title":"Development Setup"},"525":{"body":"","breadcrumbs":"Code Standards » Code Standards","id":"525","title":"Code Standards"},"526":{"body":"","breadcrumbs":"Testing » Testing","id":"526","title":"Testing"},"53":{"body":"Built for agent collaboration: MCP Protocol : Native integration with Claude Code Semantic Search : Find concepts, not just keywords Auto-Linking : Suggest relationships based on content Context Injection : Agents query relevant guidelines before coding","breadcrumbs":"What is KOGRAL? » AI-Native","id":"53","title":"AI-Native"},"54":{"body":"","breadcrumbs":"What is KOGRAL? » Key Concepts","id":"54","title":"Key Concepts"},"55":{"body":"6 types of knowledge nodes: Type Purpose Example Note General observations \\"Rust ownership patterns\\" Decision ADRs (Architectural Decision Records) \\"Use SurrealDB for storage\\" Guideline Code standards \\"Error handling with thiserror\\" Pattern Reusable solutions \\"Repository pattern for DB access\\" Journal Daily reflections \\"2026-01-17 progress notes\\" Execution Agent task records \\"Implemented auth module\\"","breadcrumbs":"What is KOGRAL? » Nodes","id":"55","title":"Nodes"},"56":{"body":"6 typed edges connecting nodes: Relation Meaning Example relates_to Conceptual link Note ↔ Note depends_on Prerequisite Pattern → Guideline implements Concrete realization Code → Pattern extends Inheritance ProjectGuideline → BaseGuideline supersedes Replacement DecisionV2 → DecisionV1 explains Documentation Note → Execution","breadcrumbs":"What is KOGRAL? » Relationships","id":"56","title":"Relationships"},"57":{"body":"Local Graph (per project): Stored in .kogral/ directory Git-tracked for version control Project-specific knowledge Shared Graph (organization-wide): Centralized guidelines and patterns SurrealDB for scalability Inherited by projects Inheritance Resolution : Shared Guidelines (priority: 50) ↓\\nProject Guidelines (priority: 100) ↓\\nEffective Guidelines (higher priority wins)","breadcrumbs":"What is KOGRAL? » Multi-Graph Architecture","id":"57","title":"Multi-Graph Architecture"},"58":{"body":"","breadcrumbs":"What is KOGRAL? » Use Cases","id":"58","title":"Use Cases"},"59":{"body":"Capture decisions as you make them (ADRs) Document patterns for future reference Track daily progress in journal entries Query past decisions before new implementations","breadcrumbs":"What is KOGRAL? » For Developers","id":"59","title":"For Developers"},"6":{"body":"# Serve documentation locally (recommended)\\njust docs::serve # Build static HTML\\njust docs::build # Watch and rebuild on file changes\\njust docs::watch","breadcrumbs":"Introduction » Build and Serve","id":"6","title":"Build and Serve"},"60":{"body":"Share guidelines across projects Standardize patterns organization-wide Onboard new members with searchable knowledge Review decisions in context with git history","breadcrumbs":"What is KOGRAL? » For Teams","id":"60","title":"For Teams"},"61":{"body":"Query guidelines before generating code Check past decisions for context Document executions for audit trails Suggest related patterns during implementation","breadcrumbs":"What is KOGRAL? » For AI Agents","id":"61","title":"For AI Agents"},"62":{"body":"","breadcrumbs":"What is KOGRAL? » Comparison with Other Tools","id":"62","title":"Comparison with Other Tools"},"63":{"body":"Feature KOGRAL Logseq Storage Git-friendly markdown + DB Local markdown AI Integration Native MCP protocol Plugin-based Config Type-safe Nickel schemas JSON files Multi-Backend Filesystem + SurrealDB Filesystem only Semantic Search Multiple AI providers Local only Graph Queries SurrealDB graph queries Block references Compatibility : KOGRAL can import/export Logseq graphs for visual editing.","breadcrumbs":"What is KOGRAL? » vs. Logseq","id":"63","title":"vs. Logseq"},"64":{"body":"Feature KOGRAL Obsidian Target Audience Developers + AI agents Knowledge workers Focus Structured knowledge graph Flexible note-taking Configuration Config-driven (Nickel) Settings UI CLI Full CLI + MCP server Limited CLI Version Control Git-native Git plugin Use Case : KOGRAL for developer knowledge, Obsidian for personal notes.","breadcrumbs":"What is KOGRAL? » vs. Obsidian","id":"64","title":"vs. Obsidian"},"65":{"body":"Feature KOGRAL Notion/Confluence Storage Local-first Cloud-only Format Plain markdown Proprietary AI Access Programmatic API Web scraping Offline Full functionality Limited Privacy Self-hosted Third-party servers Advantage : KOGRAL keeps sensitive knowledge on-premises.","breadcrumbs":"What is KOGRAL? » vs. Notion/Confluence","id":"65","title":"vs. Notion/Confluence"},"66":{"body":"┌─────────────────────────────────────────────────────┐\\n│ kb-core │\\n│ (Rust library: graph, storage, config, query) │\\n└──────────────┬─────────────┬────────────────────────┘ │ │ ┌─────────┴──────┐ ┌──┴─────────┐ │ │ │ │\\n┌────▼─────┐ ┌──────▼──▼───┐ ┌─────▼─────┐\\n│ kb-cli │ │ kb-mcp │ │ NuShell │\\n│ (13 cmds)│ │ (MCP server) │ │ (scripts) │\\n└──────────┘ └──────────────┘ └───────────┘ Layers : kb-core : Core library (models, storage, query) kb-cli : Command-line interface kb-mcp : MCP server for AI integration Scripts : NuShell automation (sync, backup, etc.)","breadcrumbs":"What is KOGRAL? » Architecture Overview","id":"66","title":"Architecture Overview"},"67":{"body":"✅ Good fit : Developer teams building software Projects with architectural decisions Organizations standardizing patterns AI-assisted development workflows Knowledge requiring version control ❌ Not ideal for : Personal journaling (use Obsidian) Team wikis (use Notion) Customer documentation (use mdBook) Simple note-taking (use Logseq)","breadcrumbs":"What is KOGRAL? » When to Use KOGRAL","id":"67","title":"When to Use KOGRAL"},"68":{"body":"New to KOGRAL? → Installation Guide Ready to start? → Quick Start Want examples? → Use Cases Understand design? → Architecture Overview \\"Knowledge is only valuable when it\'s accessible, connected, and queryable.\\"","breadcrumbs":"What is KOGRAL? » Next Steps","id":"68","title":"Next Steps"},"69":{"body":"Understanding the fundamental concepts behind KOGRAL.","breadcrumbs":"Core Concepts » Core Concepts","id":"69","title":"Core Concepts"},"7":{"body":"# Test code examples in documentation\\njust docs::test # Check for broken links\\njust docs::check-links","breadcrumbs":"Introduction » Validation","id":"7","title":"Validation"},"70":{"body":"At its core, KOGRAL is a directed graph where: Nodes = pieces of knowledge (notes, decisions, guidelines, patterns) Edges = typed relationships between concepts Node Types and Relationships This graph structure enables: Discovery : Find related concepts through traversal Context : Understand how ideas connect Evolution : Track how knowledge changes over time","breadcrumbs":"Core Concepts » The Knowledge Graph","id":"70","title":"The Knowledge Graph"},"71":{"body":"","breadcrumbs":"Core Concepts » Node Types","id":"71","title":"Node Types"},"72":{"body":"Purpose : Capture general observations, learnings, and discoveries. When to use : Documenting a concept you learned Recording implementation details Capturing meeting notes Quick knowledge capture Example : ---\\ntype: note\\ntitle: Async Trait Patterns in Rust\\ntags: [rust, async, patterns]\\n--- # Async Trait Patterns in Rust Using async traits with the async-trait crate...","breadcrumbs":"Core Concepts » 1. Note","id":"72","title":"1. Note"},"73":{"body":"Purpose : Record architectural decisions with full context. When to use : Choosing between alternatives (REST vs GraphQL) Major technical decisions (database selection) Trade-off analysis Explaining \\"why\\" for future reference Structure : Context : Background and problem Decision : What was chosen Consequences : Positive and negative outcomes Alternatives : What was considered but rejected Example : ---\\ntype: decision\\ntitle: Use SurrealDB for Storage\\nstatus: accepted\\n--- ## Context\\nNeed a graph database that supports our relationship model... ## Decision\\nAdopt SurrealDB as the primary storage backend. ## Consequences\\n+ Better graph query performance\\n+ Native relationship support\\n- Additional infrastructure dependency\\n- Team learning curve","breadcrumbs":"Core Concepts » 2. Decision (ADR)","id":"73","title":"2. Decision (ADR)"},"74":{"body":"Purpose : Define coding standards, best practices, and conventions. When to use : Code style rules Architecture patterns to follow Security requirements Testing standards Can be : Shared : Organization-wide (in shared KOGRAL) Project-specific : Overrides shared guidelines Example : ---\\ntype: guideline\\nlanguage: rust\\ncategory: error-handling\\n--- # Rust Error Handling Guidelines 1. Use `thiserror` for custom error types\\n2. Never use `unwrap()` in production code\\n3. Always propagate errors with `?`","breadcrumbs":"Core Concepts » 3. Guideline","id":"74","title":"3. Guideline"},"75":{"body":"Purpose : Document reusable solutions to common problems. When to use : Recurring implementation patterns Tested solutions Best practice implementations Code templates Structure : Problem : What challenge does this solve? Solution : The pattern/approach Context : When to use/not use Example : Working code Example : ---\\ntype: pattern\\ntitle: Repository Pattern for Database Access\\ntags: [architecture, database, pattern]\\n--- ## Problem\\nNeed consistent database access across modules. ## Solution\\nRepository pattern with trait abstraction... ## Example\\n\\\\`\\\\`\\\\`rust\\ntrait UserRepository { async fn find_by_id(&self, id: Uuid) -> Result;\\n}\\n\\\\`\\\\`\\\\`","breadcrumbs":"Core Concepts » 4. Pattern","id":"75","title":"4. Pattern"},"76":{"body":"Purpose : Daily development log for tracking progress and reflections. When to use : End of day summaries Daily standup notes Progress tracking Blocker documentation Auto-linked : KOGRAL can auto-link journal entries to mentioned concepts. Example : ---\\ntype: journal\\ndate: 2026-01-17\\n--- ## Progress\\n- Implemented authentication module\\n- Fixed cache race condition ## Blockers\\n- Need API versioning discussion ## Learnings\\n- tokio::select! perfect for timeouts","breadcrumbs":"Core Concepts » 5. Journal","id":"76","title":"5. Journal"},"77":{"body":"Purpose : Record AI agent execution results (from Vapora integration). When to use : Agent task completion Execution metrics Agent decision history Audit trail Example : ---\\ntype: execution\\ntask_type: code_generation\\nagent: rust-expert\\noutcome: success\\nduration: 45s\\n--- Generated authentication module following project guidelines.","breadcrumbs":"Core Concepts » 6. Execution","id":"77","title":"6. Execution"},"78":{"body":"","breadcrumbs":"Core Concepts » Relationship Types","id":"78","title":"Relationship Types"},"79":{"body":"Meaning : General conceptual relationship. Use : Connect related ideas without specific dependency. Example : [Note: Async Patterns] --relates_to--> [Note: Tokio Runtime]","breadcrumbs":"Core Concepts » 1. relates_to","id":"79","title":"1. relates_to"},"8":{"body":"# Remove build artifacts\\njust docs::clean","breadcrumbs":"Introduction » Cleanup","id":"8","title":"Cleanup"},"80":{"body":"Meaning : Prerequisite relationship. Source requires target to exist/be understood first. Use : Learning paths, implementation order. Example : [Pattern: Advanced Error Handling] --depends_on--> [Guideline: Basic Errors]","breadcrumbs":"Core Concepts » 2. depends_on","id":"80","title":"2. depends_on"},"81":{"body":"Meaning : Concrete implementation of an abstract concept. Use : Connect code to patterns/guidelines. Example : [Note: Auth Module Implementation] --implements--> [Pattern: Repository Pattern]","breadcrumbs":"Core Concepts » 3. implements","id":"81","title":"3. implements"},"82":{"body":"Meaning : Inheritance/extension relationship. Use : Guideline overrides, pattern variations. Example : [Guideline: Project Error Handling] --extends--> [Guideline: Shared Error Handling]","breadcrumbs":"Core Concepts » 4. extends","id":"82","title":"4. extends"},"83":{"body":"Meaning : Replacement relationship. Source replaces target. Use : Track evolution of decisions/patterns. Example : [Decision: Use GraphQL v2] --supersedes--> [Decision: Use REST]","breadcrumbs":"Core Concepts » 5. supersedes","id":"83","title":"5. supersedes"},"84":{"body":"Meaning : Documentation/clarification relationship. Use : Connect notes to implementations, executions to rationale. Example : [Note: Why We Chose Rust] --explains--> [Decision: Adopt Rust]","breadcrumbs":"Core Concepts » 6. explains","id":"84","title":"6. explains"},"85":{"body":"KB supports multiple knowledge graphs :","breadcrumbs":"Core Concepts » Multi-Graph Architecture","id":"85","title":"Multi-Graph Architecture"},"86":{"body":"Location : .kogral/ in project directory Purpose : Project-specific knowledge Project decisions Implementation notes Local patterns Daily journals Storage : Filesystem (git-tracked) Scope : Single project","breadcrumbs":"Core Concepts » Local Graph (Project-Specific)","id":"86","title":"Local Graph (Project-Specific)"},"87":{"body":"Location : Configurable (e.g., ~/org/.kogral-shared) Purpose : Shared organizational knowledge Coding guidelines Standard patterns Architecture principles Security policies Storage : SurrealDB (centralized) or filesystem (synced) Scope : All projects","breadcrumbs":"Core Concepts » Shared Graph (Organization-Wide)","id":"87","title":"Shared Graph (Organization-Wide)"},"88":{"body":"Shared Guidelines (priority: 50) ↓ [inherited by]\\nProject Guidelines (priority: 100) ↓ [effective]\\nCombined Guidelines (higher priority wins) Example : Shared guideline: \\"Use Result for errors\\" Project override: \\"Use Result + log all errors with tracing\\" Effective: Both rules apply, project adds requirement","breadcrumbs":"Core Concepts » Inheritance Model","id":"88","title":"Inheritance Model"},"89":{"body":"Everything is configurable via Nickel schemas: { graph = { name = \\"my-project\\" }, # Graph metadata storage = { primary = \'filesystem }, # Where to store embeddings = { provider = \'fastembed }, # AI provider templates = { /* ... */ }, # Document templates query = { similarity_threshold = 0.6 }, # Search behavior\\n} No hardcoding : Change behavior without code changes.","breadcrumbs":"Core Concepts » Config-Driven Behavior","id":"89","title":"Config-Driven Behavior"},"9":{"body":"just docs::help","breadcrumbs":"Introduction » View All Documentation Commands","id":"9","title":"View All Documentation Commands"},"90":{"body":"Beyond keyword matching, KOGRAL uses embeddings to find concepts: Keyword search : \\"Find \'error handling\'\\" Matches exact phrase \\"error handling\\" Semantic search : \\"How to handle failures gracefully?\\" Finds: error handling, exception patterns, Result types, panic recovery Understands: \\"failures\\" = errors, \\"gracefully\\" = best practices How it works : Text → Embedding (384 or 1536 dimensional vector) Similarity search (cosine distance) Return nodes above threshold (e.g., 0.6) Providers : fastembed : Local, free, offline (384d) OpenAI : Cloud, best quality (1536d) Claude : Cloud, excellent (1024d) Ollama : Self-hosted (768d)","breadcrumbs":"Core Concepts » Semantic Search","id":"90","title":"Semantic Search"},"91":{"body":"Tera templates generate consistent documents: ---\\nid: {{ id }}\\ntype: {{ type }}\\ntitle: {{ title }}\\ntags: [{% for tag in tags %}\\"{{ tag }}\\"{% endfor %}]\\n--- # {{ title }} {{ content }} Customizable : Override templates per project. Export formats : Logseq, JSON, Markdown.","breadcrumbs":"Core Concepts » Templates","id":"91","title":"Templates"},"92":{"body":"Model Context Protocol connects KOGRAL to Claude Code: Claude Code ↓ [JSON-RPC 2.0]\\nkb-mcp Server ↓ [Rust API]\\nkb-core Library ↓ [Storage]\\nKnowledge Graph Tools : kogral/search, kogral/add_note, kogral/get_guidelines, etc. Resources : kogral://project/notes, kogral://shared/guidelines Prompts : kogral/summarize_project, kogral/find_related","breadcrumbs":"Core Concepts » MCP Integration","id":"92","title":"MCP Integration"},"93":{"body":"Markdown + YAML frontmatter = git-tracked knowledge: ---\\nid: note-123\\ntype: note\\ntitle: My Note\\n--- # Content here Benefits : ✅ Diffs in PRs (reviewable changes) ✅ Branches (experiment with knowledge) ✅ Merges (combine knowledge from feature branches) ✅ History (track evolution over time) ✅ Blame (who added this knowledge?)","breadcrumbs":"Core Concepts » Git-Friendly Storage","id":"93","title":"Git-Friendly Storage"},"94":{"body":"KOGRAL provides full support for Logseq-style outliner blocks with rich metadata and structure.","breadcrumbs":"Core Concepts » Logseq Content Blocks","id":"94","title":"Logseq Content Blocks"},"95":{"body":"Blocks are the fundamental unit of content in Logseq\'s outliner format: Each bullet point is a block Blocks can have children (nested blocks) Blocks support tasks, tags, and custom properties Blocks can reference other blocks or pages","breadcrumbs":"Core Concepts » What are Blocks?","id":"95","title":"What are Blocks?"},"96":{"body":"Task Status : - TODO Implement authentication #high-priority\\n- DOING Write tests\\n- DONE Deploy to staging\\n- LATER Consider GraphQL API\\n- NOW Fix critical bug\\n- WAITING Code review from @alice\\n- CANCELLED Old approach Inline Tags : - Learning Rust ownership #rust #learning #card - Prevents data races at compile time - Borrowing rules enforce safety Custom Properties : - Research paper summary priority:: high reviewed:: 2026-01-17 source:: https://example.com/paper.pdf - Key findings... Block and Page References : - Meeting notes from [[2026-01-17]] - Discussed architecture ((block-ref-123)) - Action items: [[Project Roadmap]] Hierarchical Structure : - Parent block #top-level - Child block 1 - Nested child - Child block 2","breadcrumbs":"Core Concepts » Block Features","id":"96","title":"Block Features"},"97":{"body":"Blocks support is opt-in via configuration: { blocks = { enabled = true, # Enable blocks parsing parse_on_import = true, # Auto-parse from Logseq imports serialize_on_export = true, # Serialize to outliner format enable_mcp_tools = true, # Enable block-related MCP tools },\\n}","breadcrumbs":"Core Concepts » Configuration","id":"97","title":"Configuration"},"98":{"body":"1. Task Management : - TODO Weekly sprint planning #meeting - DONE Review last sprint - DOING Plan current sprint - TODO Assign tasks 2. Flashcards (Spaced Repetition) : - What is Rust\'s ownership model? #card #rust - Ownership prevents data races at compile time - Each value has a single owner - When owner goes out of scope, value is dropped 3. Knowledge Capture with Metadata : - Tokio async runtime patterns #rust #async category:: architecture difficulty:: intermediate - Use tokio::select! for concurrent operations - spawn_blocking() for CPU-intensive work 4. Linked Notes : - Discussed [[ADR-001]] in architecture meeting - Decided on SurrealDB - See ((meeting-notes-block-id)) for details","breadcrumbs":"Core Concepts » Use Cases","id":"98","title":"Use Cases"},"99":{"body":"Query blocks across your knowledge base: Find blocks by tag : { \\"tool\\": \\"kogral/find_blocks\\", \\"arguments\\": { \\"tag\\": \\"card\\" }\\n} Find all TODOs : { \\"tool\\": \\"kogral/find_todos\\", \\"arguments\\": { \\"limit\\": 20 }\\n} Find flashcards : { \\"tool\\": \\"kogral/find_cards\\", \\"arguments\\": { \\"limit\\": 10 }\\n} Find blocks by property : { \\"tool\\": \\"kogral/find_blocks\\", \\"arguments\\": { \\"property_key\\": \\"priority\\", \\"property_value\\": \\"high\\" }\\n}","breadcrumbs":"Core Concepts » Block Queries (MCP Tools)","id":"99","title":"Block Queries (MCP Tools)"}},"length":527,"save":true},"fields":["title","body","breadcrumbs"],"index":{"body":{"root":{"0":{".":{".":{"=":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"0":{".":{"0":{".":{"0":{":":{"8":{"0":{"0":{"0":{"df":1,"docs":{"190":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"1":{"/":{"1":{"df":0,"docs":{},"k":{"df":1,"docs":{"359":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"5":{"/":{"1":{"df":0,"docs":{},"k":{"df":1,"docs":{"359":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"144":{"tf":1.0}}},"1":{"df":1,"docs":{"391":{"tf":1.0}}},"3":{"df":1,"docs":{"302":{"tf":1.0}}},"4":{"df":1,"docs":{"492":{"tf":1.0}}},"5":{"df":1,"docs":{"517":{"tf":1.0}}},"6":{"5":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"492":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":5,"docs":{"298":{"tf":1.0},"308":{"tf":1.0},"492":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0}}},"7":{"2":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"492":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"200":{"tf":1.0},"290":{"tf":1.0}}},"8":{"5":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"492":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"495":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"0":{"0":{"1":{"df":1,"docs":{"270":{"tf":1.0}}},"2":{"df":1,"docs":{"270":{"tf":1.0}}},"df":0,"docs":{}},"1":{"df":3,"docs":{"331":{"tf":1.0},"363":{"tf":1.0},"98":{"tf":1.0}}},"2":{"df":3,"docs":{"348":{"tf":1.0},"349":{"tf":1.0},"393":{"tf":1.0}}},"3":{"df":2,"docs":{"363":{"tf":1.0},"364":{"tf":1.0}}},"4":{"df":4,"docs":{"100":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"502":{"tf":1.0}}},"5":{"df":1,"docs":{"414":{"tf":1.0}}},"df":0,"docs":{}},"1":{"df":17,"docs":{"202":{"tf":1.4142135623730951},"238":{"tf":1.7320508075688772},"247":{"tf":1.7320508075688772},"270":{"tf":1.4142135623730951},"331":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"393":{"tf":1.0},"413":{"tf":1.0},"461":{"tf":2.23606797749979},"492":{"tf":1.7320508075688772},"497":{"tf":1.4142135623730951},"55":{"tf":1.0},"76":{"tf":1.0},"96":{"tf":1.4142135623730951}}},"3":{"df":1,"docs":{"461":{"tf":1.0}}},"5":{"df":1,"docs":{"461":{"tf":1.0}}},"8":{"df":2,"docs":{"461":{"tf":1.0},"492":{"tf":1.0}}},"df":8,"docs":{"237":{"tf":1.4142135623730951},"277":{"tf":2.23606797749979},"289":{"tf":1.0},"308":{"tf":1.0},"324":{"tf":1.0},"366":{"tf":1.0},"492":{"tf":1.0},"495":{"tf":1.4142135623730951}},"x":{"0":{"1":{"df":1,"docs":{"150":{"tf":1.0}}},"df":0,"docs":{}},"4":{"2":{"df":1,"docs":{"150":{"tf":1.0}}},"b":{"df":1,"docs":{"150":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"1":{".":{"0":{".":{"0":{"df":4,"docs":{"212":{"tf":1.0},"292":{"tf":1.0},"333":{"tf":1.0},"337":{"tf":1.0}}},"df":0,"docs":{}},"df":2,"docs":{"144":{"tf":1.0},"495":{"tf":1.0}}},"7":{"0":{"df":2,"docs":{"161":{"tf":1.0},"195":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{",":{"0":{"0":{"0":{"df":3,"docs":{"281":{"tf":1.4142135623730951},"365":{"tf":1.0},"371":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"df":2,"docs":{"241":{"tf":1.0},"281":{"tf":1.4142135623730951}}},"df":7,"docs":{"153":{"tf":1.0},"244":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"369":{"tf":1.0},"371":{"tf":1.0},"57":{"tf":1.0},"88":{"tf":1.0}},"m":{"b":{"df":2,"docs":{"351":{"tf":1.0},"357":{"tf":1.0}}},"df":1,"docs":{"391":{"tf":1.0}}}},"2":{"4":{"d":{"df":1,"docs":{"90":{"tf":1.0}}},"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"3":{"df":1,"docs":{"492":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":15,"docs":{"113":{"tf":1.0},"118":{"tf":1.0},"142":{"tf":1.0},"205":{"tf":1.0},"24":{"tf":1.0},"243":{"tf":1.0},"247":{"tf":1.0},"365":{"tf":1.0},"461":{"tf":1.0},"487":{"tf":1.0},"492":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.4142135623730951},"502":{"tf":1.0},"99":{"tf":1.0}}},"1":{"df":3,"docs":{"143":{"tf":1.0},"25":{"tf":1.0},"502":{"tf":1.4142135623730951}}},"2":{"3":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":3,"docs":{"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0}}}},"df":0,"docs":{}},"df":6,"docs":{"264":{"tf":1.4142135623730951},"296":{"tf":1.0},"318":{"tf":1.0},"52":{"tf":1.0},"93":{"tf":1.0},"96":{"tf":1.0}}},"df":5,"docs":{"144":{"tf":1.0},"26":{"tf":1.0},"463":{"tf":1.0},"467":{"tf":1.4142135623730951},"498":{"tf":1.0}}},"3":{"df":2,"docs":{"257":{"tf":1.0},"66":{"tf":1.0}}},"5":{"0":{")":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"1":{"df":1,"docs":{"496":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"231":{"tf":1.0}}},"3":{"6":{"d":{"df":1,"docs":{"90":{"tf":1.0}}},"df":7,"docs":{"289":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"357":{"tf":1.0},"359":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}},"6":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"497":{"tf":1.0}}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"492":{"tf":1.0}}}},"df":3,"docs":{"295":{"tf":1.0},"461":{"tf":1.0},"500":{"tf":1.0}},"t":{"1":{"4":{":":{"2":{"0":{":":{"0":{"0":{"df":0,"docs":{},"z":{"df":1,"docs":{"497":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"7":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"270":{"tf":1.0}}},"df":0,"docs":{}}},"df":12,"docs":{"238":{"tf":1.7320508075688772},"247":{"tf":1.7320508075688772},"331":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"393":{"tf":1.0},"413":{"tf":1.0},"55":{"tf":1.0},"76":{"tf":1.0},"96":{"tf":1.4142135623730951}},"t":{"1":{"0":{":":{"3":{"0":{":":{"0":{"0":{"df":0,"docs":{},"z":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"497":{"tf":1.0}}}},"df":0,"docs":{}}},"df":1,"docs":{"202":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"8":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"270":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":54,"docs":{"107":{"tf":1.0},"113":{"tf":1.0},"127":{"tf":1.0},"133":{"tf":1.0},"146":{"tf":1.0},"15":{"tf":1.0},"150":{"tf":1.0},"156":{"tf":1.0},"164":{"tf":1.0},"169":{"tf":1.0},"184":{"tf":1.0},"196":{"tf":1.0},"2":{"tf":1.0},"229":{"tf":1.0},"231":{"tf":1.0},"247":{"tf":1.4142135623730951},"250":{"tf":1.4142135623730951},"287":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"298":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"316":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.4142135623730951},"328":{"tf":1.0},"329":{"tf":2.23606797749979},"330":{"tf":1.0},"333":{"tf":1.0},"351":{"tf":1.0},"366":{"tf":1.0},"387":{"tf":1.0},"391":{"tf":1.0},"398":{"tf":1.0},"401":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"448":{"tf":1.0},"461":{"tf":1.0},"463":{"tf":1.4142135623730951},"465":{"tf":1.0},"466":{"tf":1.0},"469":{"tf":1.0},"492":{"tf":1.7320508075688772},"495":{"tf":1.4142135623730951},"515":{"tf":1.0},"517":{"tf":1.0},"520":{"tf":1.4142135623730951},"72":{"tf":1.0},"74":{"tf":1.0},"79":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}},"2":{".":{"0":{"df":17,"docs":{"258":{"tf":1.0},"487":{"tf":1.0},"492":{"tf":1.4142135623730951},"493":{"tf":1.4142135623730951},"494":{"tf":1.4142135623730951},"495":{"tf":1.4142135623730951},"496":{"tf":1.4142135623730951},"497":{"tf":1.4142135623730951},"498":{"tf":1.4142135623730951},"500":{"tf":1.7320508075688772},"501":{"tf":1.4142135623730951},"502":{"tf":1.4142135623730951},"511":{"tf":1.0},"512":{"tf":1.0},"514":{"tf":1.0},"515":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"df":0,"docs":{},"m":{"df":1,"docs":{"234":{"tf":1.0}}}},"2":{"4":{"0":{"3":{"0":{"7":{"df":2,"docs":{"290":{"tf":1.0},"292":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"6":{"df":17,"docs":{"202":{"tf":1.4142135623730951},"238":{"tf":1.7320508075688772},"247":{"tf":1.7320508075688772},"270":{"tf":1.4142135623730951},"331":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"393":{"tf":1.0},"413":{"tf":1.0},"461":{"tf":2.23606797749979},"492":{"tf":1.7320508075688772},"497":{"tf":1.4142135623730951},"55":{"tf":1.0},"76":{"tf":1.0},"96":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":3,"docs":{"500":{"tf":1.0},"501":{"tf":1.0},"99":{"tf":1.0}}},"3":{"4":{"df":1,"docs":{"238":{"tf":1.4142135623730951}}},"df":2,"docs":{"463":{"tf":1.0},"498":{"tf":1.0}}},"5":{"df":1,"docs":{"501":{"tf":1.0}}},"df":54,"docs":{"108":{"tf":1.0},"113":{"tf":1.4142135623730951},"117":{"tf":1.4142135623730951},"118":{"tf":1.0},"128":{"tf":1.0},"134":{"tf":1.0},"147":{"tf":1.0},"16":{"tf":1.0},"165":{"tf":1.0},"170":{"tf":1.0},"185":{"tf":1.0},"197":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.0},"247":{"tf":1.4142135623730951},"250":{"tf":1.4142135623730951},"258":{"tf":1.0},"288":{"tf":1.0},"296":{"tf":1.0},"299":{"tf":1.0},"3":{"tf":1.0},"307":{"tf":1.0},"317":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.4142135623730951},"328":{"tf":1.0},"329":{"tf":1.7320508075688772},"330":{"tf":1.0},"334":{"tf":1.0},"346":{"tf":1.0},"352":{"tf":1.0},"367":{"tf":1.0},"388":{"tf":1.0},"399":{"tf":1.0},"401":{"tf":1.0},"407":{"tf":1.0},"410":{"tf":1.0},"413":{"tf":1.0},"449":{"tf":1.0},"461":{"tf":1.0},"463":{"tf":1.7320508075688772},"465":{"tf":1.4142135623730951},"466":{"tf":1.0},"470":{"tf":1.0},"487":{"tf":1.0},"493":{"tf":1.4142135623730951},"502":{"tf":1.0},"512":{"tf":1.7320508075688772},"518":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"80":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}},"m":{"b":{"df":1,"docs":{"358":{"tf":1.0}}},"df":0,"docs":{}}},"3":{"0":{"0":{"0":{"df":2,"docs":{"2":{"tf":1.0},"43":{"tf":1.0}}},"1":{"df":1,"docs":{"43":{"tf":1.0}}},"df":1,"docs":{"289":{"tf":1.0}}},"df":1,"docs":{"127":{"tf":1.0}}},"2":{"6":{"0":{"0":{"df":1,"docs":{"514":{"tf":1.0}}},"1":{"df":1,"docs":{"514":{"tf":1.0}}},"2":{"df":2,"docs":{"514":{"tf":1.0},"515":{"tf":1.0}}},"3":{"df":1,"docs":{"514":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"7":{"0":{"0":{"df":1,"docs":{"514":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"4":{"d":{"df":1,"docs":{"90":{"tf":1.0}}},"df":7,"docs":{"288":{"tf":1.0},"351":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.7320508075688772},"357":{"tf":1.0},"359":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"*":{"*":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":1,"docs":{"502":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":48,"docs":{"109":{"tf":1.4142135623730951},"114":{"tf":1.0},"129":{"tf":1.0},"135":{"tf":1.0},"148":{"tf":1.0},"166":{"tf":1.0},"17":{"tf":1.0},"171":{"tf":1.0},"182":{"tf":1.0},"186":{"tf":1.0},"198":{"tf":1.0},"231":{"tf":1.0},"235":{"tf":1.0},"247":{"tf":1.0},"250":{"tf":2.0},"289":{"tf":1.4142135623730951},"290":{"tf":1.0},"292":{"tf":1.0},"300":{"tf":1.0},"304":{"tf":1.0},"308":{"tf":1.0},"318":{"tf":1.0},"324":{"tf":1.0},"328":{"tf":1.0},"333":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"368":{"tf":1.0},"389":{"tf":1.0},"4":{"tf":1.0},"400":{"tf":1.0},"407":{"tf":1.0},"411":{"tf":1.0},"450":{"tf":1.0},"461":{"tf":1.0},"463":{"tf":1.4142135623730951},"465":{"tf":1.0},"471":{"tf":1.0},"487":{"tf":1.0},"492":{"tf":1.0},"494":{"tf":1.4142135623730951},"500":{"tf":1.0},"502":{"tf":1.0},"519":{"tf":1.0},"74":{"tf":1.4142135623730951},"81":{"tf":1.0},"98":{"tf":1.0}}},"4":{"2":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"497":{"tf":1.0}}}},"df":2,"docs":{"463":{"tf":1.0},"498":{"tf":1.0}}},"5":{"6":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":3,"docs":{"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"77":{"tf":1.0}}},"8":{"df":1,"docs":{"278":{"tf":1.0}}},"df":27,"docs":{"110":{"tf":1.0},"113":{"tf":1.0},"136":{"tf":1.0},"149":{"tf":1.0},"18":{"tf":1.0},"199":{"tf":1.0},"238":{"tf":1.0},"247":{"tf":1.4142135623730951},"276":{"tf":1.0},"290":{"tf":1.0},"301":{"tf":1.0},"309":{"tf":1.0},"319":{"tf":1.0},"324":{"tf":1.0},"328":{"tf":1.0},"390":{"tf":1.0},"401":{"tf":1.0},"407":{"tf":1.0},"451":{"tf":1.0},"461":{"tf":1.0},"463":{"tf":1.0},"472":{"tf":1.0},"495":{"tf":1.4142135623730951},"520":{"tf":1.0},"75":{"tf":1.0},"82":{"tf":1.0},"98":{"tf":1.0}}},"5":{".":{".":{"]":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{")":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"1":{"df":1,"docs":{"496":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"0":{"df":0,"docs":{},"m":{"df":1,"docs":{"379":{"tf":1.0}}}},"df":5,"docs":{"129":{"tf":1.0},"231":{"tf":1.0},"244":{"tf":1.0},"57":{"tf":1.0},"88":{"tf":1.0}},"m":{"df":1,"docs":{"234":{"tf":1.4142135623730951}}}},"6":{"df":1,"docs":{"278":{"tf":1.0}}},"df":31,"docs":{"108":{"tf":1.0},"111":{"tf":1.0},"114":{"tf":1.0},"137":{"tf":1.0},"150":{"tf":1.0},"16":{"tf":1.0},"19":{"tf":1.0},"194":{"tf":1.0},"200":{"tf":1.4142135623730951},"231":{"tf":1.0},"234":{"tf":1.4142135623730951},"239":{"tf":1.0},"241":{"tf":1.4142135623730951},"278":{"tf":1.0},"302":{"tf":1.0},"310":{"tf":1.0},"328":{"tf":1.0},"380":{"tf":1.0},"402":{"tf":1.0},"407":{"tf":1.0},"447":{"tf":1.0},"452":{"tf":1.0},"461":{"tf":1.4142135623730951},"463":{"tf":1.7320508075688772},"465":{"tf":1.0},"473":{"tf":1.0},"492":{"tf":1.0},"496":{"tf":1.4142135623730951},"502":{"tf":1.0},"76":{"tf":1.0},"83":{"tf":1.0}},"m":{"b":{"df":1,"docs":{"358":{"tf":1.0}}},"df":0,"docs":{}}},"6":{"df":18,"docs":{"115":{"tf":1.0},"116":{"tf":1.0},"138":{"tf":1.0},"144":{"tf":1.0},"20":{"tf":1.0},"201":{"tf":1.0},"231":{"tf":1.4142135623730951},"242":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0},"276":{"tf":1.0},"407":{"tf":1.0},"487":{"tf":1.0},"497":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.0},"77":{"tf":1.0},"84":{"tf":1.0}}},"7":{"6":{"8":{"d":{"df":1,"docs":{"90":{"tf":1.0}}},"df":3,"docs":{"292":{"tf":1.0},"354":{"tf":1.0},"359":{"tf":1.0}}},"df":0,"docs":{}},"8":{"9":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":2,"docs":{"501":{"tf":1.0},"502":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":8,"docs":{"139":{"tf":1.0},"202":{"tf":1.0},"21":{"tf":1.0},"245":{"tf":1.0},"258":{"tf":1.0},"463":{"tf":1.0},"487":{"tf":1.0},"498":{"tf":1.7320508075688772}},"m":{"b":{"df":1,"docs":{"358":{"tf":1.0}}},"df":0,"docs":{}}},"8":{"0":{"df":1,"docs":{"234":{"tf":1.4142135623730951}}},"df":9,"docs":{"140":{"tf":1.0},"203":{"tf":1.0},"22":{"tf":1.0},"231":{"tf":1.0},"248":{"tf":1.0},"463":{"tf":1.4142135623730951},"500":{"tf":1.4142135623730951},"501":{"tf":1.0},"511":{"tf":1.0}}},"9":{"df":5,"docs":{"141":{"tf":1.0},"204":{"tf":1.0},"23":{"tf":1.0},"500":{"tf":1.0},"512":{"tf":1.0}}},"_":{"df":1,"docs":{"324":{"tf":1.7320508075688772}}},"a":{"b":{"c":{"1":{"2":{"3":{"df":1,"docs":{"493":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"316":{"tf":1.0}}}},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"90":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":7,"docs":{"255":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"75":{"tf":1.0},"81":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"351":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"t":{"df":15,"docs":{"208":{"tf":1.0},"231":{"tf":1.4142135623730951},"247":{"tf":1.0},"250":{"tf":1.7320508075688772},"287":{"tf":1.0},"331":{"tf":1.0},"349":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":1.0},"372":{"tf":1.0},"461":{"tf":1.0},"463":{"tf":1.7320508075688772},"465":{"tf":1.0},"494":{"tf":1.7320508075688772},"73":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":25,"docs":{"100":{"tf":1.0},"104":{"tf":1.0},"111":{"tf":1.0},"121":{"tf":1.0},"238":{"tf":1.0},"247":{"tf":1.4142135623730951},"322":{"tf":1.0},"365":{"tf":1.0},"369":{"tf":1.4142135623730951},"371":{"tf":1.0},"390":{"tf":1.0},"391":{"tf":1.0},"410":{"tf":1.0},"487":{"tf":1.0},"503":{"tf":1.0},"504":{"tf":1.0},"505":{"tf":1.0},"506":{"tf":1.0},"507":{"tf":1.0},"508":{"tf":1.0},"509":{"tf":1.0},"55":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"75":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"361":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"234":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"123":{"tf":1.0},"139":{"tf":1.0},"158":{"tf":1.0},"96":{"tf":1.0}}}},"v":{"df":7,"docs":{"125":{"tf":1.0},"202":{"tf":1.0},"338":{"tf":1.0},"406":{"tf":1.0},"463":{"tf":1.0},"480":{"tf":1.0},"511":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"157":{"tf":1.0},"449":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"109":{"tf":1.0},"133":{"tf":1.0}}}}},"d":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"40":{"tf":1.0}}}}}}}},"_":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":51,"docs":{"138":{"tf":1.0},"143":{"tf":1.7320508075688772},"185":{"tf":1.0},"188":{"tf":1.0},"197":{"tf":1.7320508075688772},"198":{"tf":1.0},"203":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.4142135623730951},"210":{"tf":1.7320508075688772},"213":{"tf":1.4142135623730951},"215":{"tf":2.0},"226":{"tf":1.0},"231":{"tf":1.0},"233":{"tf":1.0},"234":{"tf":2.0},"237":{"tf":1.0},"238":{"tf":1.0},"241":{"tf":2.23606797749979},"244":{"tf":1.7320508075688772},"257":{"tf":1.0},"278":{"tf":1.0},"301":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.4142135623730951},"321":{"tf":1.4142135623730951},"324":{"tf":1.7320508075688772},"328":{"tf":1.7320508075688772},"330":{"tf":1.4142135623730951},"339":{"tf":1.0},"345":{"tf":1.0},"356":{"tf":1.0},"358":{"tf":1.4142135623730951},"36":{"tf":1.0},"360":{"tf":1.0},"371":{"tf":1.7320508075688772},"388":{"tf":1.0},"398":{"tf":1.0},"407":{"tf":3.1622776601683795},"449":{"tf":1.0},"455":{"tf":1.4142135623730951},"456":{"tf":1.0},"462":{"tf":1.0},"465":{"tf":1.0},"478":{"tf":1.4142135623730951},"480":{"tf":1.7320508075688772},"490":{"tf":1.0},"493":{"tf":1.0},"496":{"tf":1.0},"88":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":9,"docs":{"198":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.0},"327":{"tf":1.0},"353":{"tf":1.0},"456":{"tf":1.0},"494":{"tf":1.0},"511":{"tf":1.0},"73":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"244":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"501":{"tf":1.0}}}}}}},"df":13,"docs":{"144":{"tf":1.0},"234":{"tf":1.0},"241":{"tf":1.0},"301":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"330":{"tf":1.0},"405":{"tf":1.0},"467":{"tf":1.0},"470":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"93":{"tf":1.0}},"j":{"a":{"c":{"df":1,"docs":{"365":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"250":{"tf":2.23606797749979}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":11,"docs":{"198":{"tf":1.0},"208":{"tf":1.0},"231":{"tf":1.0},"333":{"tf":1.0},"371":{"tf":1.0},"406":{"tf":1.0},"456":{"tf":1.0},"463":{"tf":1.0},"494":{"tf":1.0},"73":{"tf":1.0},"84":{"tf":1.0}}}}},"r":{"df":31,"docs":{"100":{"tf":1.0},"114":{"tf":1.0},"116":{"tf":1.0},"141":{"tf":1.0},"151":{"tf":1.0},"17":{"tf":1.0},"208":{"tf":1.0},"232":{"tf":1.0},"234":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0},"258":{"tf":1.0},"270":{"tf":1.0},"282":{"tf":1.0},"311":{"tf":1.0},"331":{"tf":1.0},"348":{"tf":1.4142135623730951},"349":{"tf":1.0},"363":{"tf":2.0},"364":{"tf":1.0},"393":{"tf":2.0},"394":{"tf":1.0},"414":{"tf":1.0},"494":{"tf":1.0},"502":{"tf":1.0},"505":{"tf":1.0},"520":{"tf":1.0},"55":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":1.0},"98":{"tf":1.0}}},"v":{"a":{"df":0,"docs":{},"n":{"c":{"df":8,"docs":{"170":{"tf":1.0},"212":{"tf":1.0},"23":{"tf":1.0},"241":{"tf":1.0},"252":{"tf":1.0},"464":{"tf":1.0},"479":{"tf":1.0},"80":{"tf":1.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"65":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"138":{"tf":1.0},"44":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"125":{"tf":1.0}}}}}}}}}}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"478":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":9,"docs":{"123":{"tf":2.23606797749979},"125":{"tf":1.0},"36":{"tf":1.0},"48":{"tf":1.0},"53":{"tf":1.4142135623730951},"55":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.0},"77":{"tf":2.0}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"307":{"tf":1.0}}}}}},"o":{"df":5,"docs":{"118":{"tf":1.0},"231":{"tf":1.4142135623730951},"247":{"tf":1.0},"463":{"tf":1.7320508075688772},"465":{"tf":1.4142135623730951}}}},"i":{"d":{"df":1,"docs":{"36":{"tf":1.0}}},"df":40,"docs":{"101":{"tf":1.0},"105":{"tf":1.0},"108":{"tf":1.4142135623730951},"123":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"130":{"tf":1.0},"137":{"tf":2.6457513110645907},"142":{"tf":1.0},"143":{"tf":2.6457513110645907},"151":{"tf":1.0},"157":{"tf":1.4142135623730951},"205":{"tf":1.0},"21":{"tf":1.4142135623730951},"252":{"tf":1.0},"255":{"tf":1.0},"258":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"350":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"36":{"tf":1.0},"393":{"tf":1.0},"414":{"tf":1.0},"446":{"tf":1.0},"463":{"tf":1.0},"48":{"tf":1.0},"480":{"tf":1.0},"49":{"tf":1.0},"53":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"77":{"tf":1.0},"89":{"tf":1.0}}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":1,"docs":{"502":{"tf":1.0}},"s":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"502":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}},"i":{"c":{"df":1,"docs":{"96":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"466":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":2,"docs":{"339":{"tf":1.0},"446":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"107":{"tf":1.0},"136":{"tf":1.0},"141":{"tf":1.0},"365":{"tf":1.0},"407":{"tf":1.0}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":3,"docs":{"104":{"tf":1.0},"323":{"tf":1.0},"43":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"501":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":8,"docs":{"140":{"tf":1.0},"340":{"tf":1.0},"382":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":7,"docs":{"153":{"tf":1.0},"231":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"46":{"tf":1.0},"496":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"342":{"tf":1.0}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"104":{"tf":1.0}}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"73":{"tf":1.0}}}}}}},"d":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"492":{"tf":1.0}}}}},"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"|":{"df":2,"docs":{"139":{"tf":1.0},"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"174":{"tf":1.0},"495":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"316":{"tf":1.0},"401":{"tf":1.0}}}}}},"t":{"df":1,"docs":{"182":{"tf":1.0}},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"182":{"tf":1.0}},"i":{"c":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"=":{"\\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"182":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"df":1,"docs":{"145":{"tf":1.0}}}},"y":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":3,"docs":{"108":{"tf":1.0},"244":{"tf":1.0},"461":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":4,"docs":{"108":{"tf":1.0},"129":{"tf":1.0},"142":{"tf":1.0},"473":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":4,"docs":{"182":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"354":{"tf":1.0}}}}}},"df":1,"docs":{"354":{"tf":1.4142135623730951}}}}}},"df":30,"docs":{"135":{"tf":1.0},"182":{"tf":1.0},"234":{"tf":1.0},"238":{"tf":2.0},"248":{"tf":1.0},"249":{"tf":1.0},"25":{"tf":1.7320508075688772},"250":{"tf":2.8284271247461903},"257":{"tf":1.0},"289":{"tf":1.0},"306":{"tf":1.0},"325":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0},"361":{"tf":1.4142135623730951},"362":{"tf":1.0},"407":{"tf":1.0},"460":{"tf":1.7320508075688772},"465":{"tf":1.0},"479":{"tf":1.0},"486":{"tf":1.0},"523":{"tf":1.0},"65":{"tf":1.0},"76":{"tf":1.0},"92":{"tf":1.0},"96":{"tf":1.0}}},"p":{"df":2,"docs":{"107":{"tf":1.0},"24":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"108":{"tf":1.0},"244":{"tf":1.0},"461":{"tf":1.0}}},"df":6,"docs":{"110":{"tf":1.7320508075688772},"118":{"tf":1.0},"247":{"tf":1.0},"295":{"tf":1.0},"324":{"tf":1.4142135623730951},"88":{"tf":1.0}}},"y":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"o":{"a":{"c":{"df":0,"docs":{},"h":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"501":{"tf":1.0}}}},"df":11,"docs":{"241":{"tf":1.4142135623730951},"249":{"tf":1.0},"250":{"tf":1.0},"285":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"330":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"96":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"31":{"tf":1.0}}}}},"v":{"df":2,"docs":{"330":{"tf":1.0},"413":{"tf":1.0}}}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":48,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"104":{"tf":1.0},"114":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"158":{"tf":1.0},"17":{"tf":2.0},"196":{"tf":1.0},"198":{"tf":1.0},"20":{"tf":1.0},"200":{"tf":1.0},"208":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.0},"254":{"tf":1.4142135623730951},"255":{"tf":1.4142135623730951},"268":{"tf":1.0},"27":{"tf":1.4142135623730951},"282":{"tf":1.4142135623730951},"284":{"tf":1.4142135623730951},"297":{"tf":1.0},"312":{"tf":1.0},"313":{"tf":1.0},"331":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"354":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"369":{"tf":1.0},"393":{"tf":1.0},"463":{"tf":1.0},"467":{"tf":1.0},"494":{"tf":1.4142135623730951},"55":{"tf":1.0},"57":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.4142135623730951}},"e":{",":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"208":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"v":{"df":0,"docs":{},"g":{"df":1,"docs":{"27":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"v":{"df":1,"docs":{"259":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"a":{"df":1,"docs":{"135":{"tf":1.0}}},"df":0,"docs":{},"n":{"\'":{"df":0,"docs":{},"t":{"df":1,"docs":{"104":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"g":{"(":{"\\"":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"335":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"335":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":4,"docs":{"185":{"tf":1.0},"335":{"tf":1.0},"449":{"tf":1.0},"490":{"tf":1.0}},"s":{"(":{"[":{"\\"":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"303":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"511":{"tf":1.0},"512":{"tf":1.0},"99":{"tf":2.0}}}}}}}},"r":{"a":{"df":0,"docs":{},"y":{"df":5,"docs":{"291":{"tf":1.0},"327":{"tf":1.0},"493":{"tf":1.4142135623730951},"494":{"tf":1.4142135623730951},"498":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"df":1,"docs":{"352":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"241":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"k":{"df":8,"docs":{"113":{"tf":1.0},"114":{"tf":1.0},"118":{"tf":1.0},"234":{"tf":1.0},"250":{"tf":1.0},"471":{"tf":1.0},"472":{"tf":1.0},"480":{"tf":1.0}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"51":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"<":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{">":{">":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"335":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"329":{"tf":1.7320508075688772}}}}}},"[":{"0":{"]":{".":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"329":{"tf":1.0}}}}}},"[":{"1":{"]":{".":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"329":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"329":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"329":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"329":{"tf":1.0}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"329":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"98":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":9,"docs":{"101":{"tf":1.0},"105":{"tf":1.0},"124":{"tf":1.0},"137":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.4142135623730951},"205":{"tf":1.0},"446":{"tf":1.0},"67":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"5":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"c":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"262":{"tf":1.0},"263":{"tf":1.0},"354":{"tf":1.7320508075688772},"373":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":16,"docs":{"208":{"tf":1.0},"262":{"tf":2.0},"263":{"tf":1.0},"264":{"tf":1.4142135623730951},"270":{"tf":1.0},"279":{"tf":1.0},"354":{"tf":1.7320508075688772},"373":{"tf":1.7320508075688772},"455":{"tf":2.0},"458":{"tf":1.4142135623730951},"493":{"tf":2.23606797749979},"495":{"tf":1.4142135623730951},"72":{"tf":2.23606797749979},"75":{"tf":1.0},"79":{"tf":1.0},"98":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"151":{"tf":1.0},"247":{"tf":1.0},"280":{"tf":1.0}}}},"t":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"287":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"64":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":3,"docs":{"390":{"tf":1.0},"61":{"tf":1.0},"77":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":4,"docs":{"137":{"tf":1.4142135623730951},"462":{"tf":1.4142135623730951},"55":{"tf":1.0},"81":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"137":{"tf":1.4142135623730951},"238":{"tf":1.7320508075688772},"249":{"tf":1.0},"462":{"tf":1.4142135623730951},"500":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"96":{"tf":1.0}},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"501":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"348":{"tf":1.0},"363":{"tf":1.0},"393":{"tf":1.0}}}}},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"289":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}}},"df":10,"docs":{"2":{"tf":1.0},"238":{"tf":1.4142135623730951},"299":{"tf":1.4142135623730951},"321":{"tf":1.0},"372":{"tf":1.0},"389":{"tf":1.0},"451":{"tf":1.0},"53":{"tf":1.0},"76":{"tf":1.4142135623730951},"97":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"t":{"df":9,"docs":{"123":{"tf":1.0},"2":{"tf":1.0},"303":{"tf":1.0},"327":{"tf":1.0},"371":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"38":{"tf":1.0},"389":{"tf":1.0}}}},"df":5,"docs":{"156":{"tf":1.0},"214":{"tf":1.0},"255":{"tf":1.0},"259":{"tf":1.0},"66":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":15,"docs":{"114":{"tf":1.0},"199":{"tf":1.0},"225":{"tf":1.0},"234":{"tf":1.0},"241":{"tf":1.0},"251":{"tf":1.0},"258":{"tf":1.0},"338":{"tf":1.4142135623730951},"352":{"tf":1.0},"356":{"tf":1.0},"372":{"tf":1.0},"381":{"tf":1.0},"479":{"tf":1.0},"497":{"tf":1.4142135623730951},"502":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"234":{"tf":1.0},"502":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"145":{"tf":1.0},"219":{"tf":1.0},"247":{"tf":1.0}}},"df":0,"docs":{}}}},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"354":{"tf":1.0}}}},"r":{"df":1,"docs":{"123":{"tf":1.0}}}},"df":0,"docs":{}}},"b":{".":{"1":{".":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"_":{"c":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"(":{"&":{"a":{".":{"1":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"273":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"\\"":{"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"322":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}}},"a":{"a":{"df":0,"docs":{},"i":{"/":{"b":{"df":0,"docs":{},"g":{"df":5,"docs":{"146":{"tf":1.0},"288":{"tf":1.0},"351":{"tf":1.0},"354":{"tf":1.7320508075688772},"362":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"303":{"tf":1.0},"322":{"tf":1.0},"324":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":19,"docs":{"140":{"tf":1.0},"162":{"tf":1.0},"167":{"tf":1.7320508075688772},"176":{"tf":1.0},"177":{"tf":1.0},"20":{"tf":1.7320508075688772},"255":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.0},"300":{"tf":1.0},"330":{"tf":1.0},"364":{"tf":1.0},"373":{"tf":1.0},"407":{"tf":1.0},"425":{"tf":1.0},"456":{"tf":1.0},"494":{"tf":1.0},"63":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"389":{"tf":1.0},"494":{"tf":1.0},"520":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"111":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":2,"docs":{"214":{"tf":1.0},"259":{"tf":1.0}}}}},"df":2,"docs":{"214":{"tf":1.0},"66":{"tf":1.0}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":9,"docs":{"156":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.4142135623730951},"404":{"tf":1.0},"413":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"d":{"df":5,"docs":{"133":{"tf":1.0},"139":{"tf":1.0},"298":{"tf":1.0},"307":{"tf":1.0},"470":{"tf":1.0}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"133":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"241":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":2,"docs":{"334":{"tf":1.0},"337":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"170":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"k":{"b":{"df":2,"docs":{"185":{"tf":1.0},"449":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":51,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"110":{"tf":1.0},"120":{"tf":1.0},"131":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"164":{"tf":1.4142135623730951},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.4142135623730951},"196":{"tf":1.0},"197":{"tf":1.0},"200":{"tf":1.0},"202":{"tf":1.0},"204":{"tf":1.0},"213":{"tf":1.0},"215":{"tf":1.0},"226":{"tf":1.0},"244":{"tf":1.0},"251":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0},"285":{"tf":1.0},"288":{"tf":1.4142135623730951},"291":{"tf":2.23606797749979},"325":{"tf":1.0},"331":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"345":{"tf":1.0},"350":{"tf":1.0},"364":{"tf":1.0},"369":{"tf":1.0},"377":{"tf":1.0},"380":{"tf":1.0},"446":{"tf":1.0},"449":{"tf":1.0},"452":{"tf":1.0},"454":{"tf":1.0},"487":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"53":{"tf":1.0},"63":{"tf":1.0},"99":{"tf":1.0}},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"56":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"h":{"df":1,"docs":{"238":{"tf":1.0}}},"i":{"c":{"df":2,"docs":{"217":{"tf":1.0},"80":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"279":{"tf":1.4142135623730951}}}},"df":1,"docs":{"4":{"tf":1.0}}}},"df":6,"docs":{"110":{"tf":1.0},"273":{"tf":1.0},"322":{"tf":1.0},"324":{"tf":1.4142135623730951},"381":{"tf":1.4142135623730951},"480":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"125":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":27,"docs":{"113":{"tf":1.0},"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"120":{"tf":1.0},"123":{"tf":1.0},"134":{"tf":1.0},"156":{"tf":1.0},"157":{"tf":1.0},"241":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"257":{"tf":1.0},"285":{"tf":1.0},"301":{"tf":1.0},"309":{"tf":1.0},"328":{"tf":1.0},"332":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.4142135623730951},"346":{"tf":1.0},"36":{"tf":1.0},"466":{"tf":1.0},"519":{"tf":1.0},"53":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":21,"docs":{"109":{"tf":1.4142135623730951},"133":{"tf":1.0},"146":{"tf":1.0},"157":{"tf":1.0},"192":{"tf":1.0},"267":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.4142135623730951},"291":{"tf":1.0},"293":{"tf":1.0},"299":{"tf":1.0},"302":{"tf":1.0},"306":{"tf":1.0},"328":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"407":{"tf":1.0},"479":{"tf":1.0},"51":{"tf":1.4142135623730951},"89":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"103":{"tf":1.0},"69":{"tf":1.0}}},"df":0,"docs":{}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":2,"docs":{"247":{"tf":1.0},"501":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":15,"docs":{"107":{"tf":1.0},"119":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"141":{"tf":1.0},"267":{"tf":1.0},"287":{"tf":1.0},"297":{"tf":1.0},"330":{"tf":1.0},"334":{"tf":1.0},"367":{"tf":1.0},"93":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":21,"docs":{"108":{"tf":1.0},"109":{"tf":1.0},"122":{"tf":1.0},"130":{"tf":1.4142135623730951},"137":{"tf":1.0},"142":{"tf":1.0},"2":{"tf":1.0},"244":{"tf":1.0},"253":{"tf":1.0},"305":{"tf":1.0},"323":{"tf":1.0},"353":{"tf":1.0},"359":{"tf":1.0},"368":{"tf":1.0},"461":{"tf":1.4142135623730951},"492":{"tf":1.4142135623730951},"496":{"tf":1.4142135623730951},"516":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"90":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"125":{"tf":1.0},"198":{"tf":1.0},"219":{"tf":1.0},"231":{"tf":1.0},"356":{"tf":1.0},"456":{"tf":1.0},"460":{"tf":1.4142135623730951},"494":{"tf":1.0},"73":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"105":{"tf":1.0},"199":{"tf":1.0},"257":{"tf":1.0},"353":{"tf":1.0},"495":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"122":{"tf":1.0},"366":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"100":{"tf":1.0},"144":{"tf":1.0},"214":{"tf":1.0},"269":{"tf":1.0},"330":{"tf":1.0},"400":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"150":{"tf":1.0},"193":{"tf":1.0},"358":{"tf":1.0},"448":{"tf":1.0},"477":{"tf":1.0}}}}},"d":{"df":1,"docs":{"190":{"tf":1.0}}},"df":1,"docs":{"188":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"93":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"150":{"tf":1.0}}},"c":{"df":0,"docs":{},"k":{".":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"324":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{".":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"323":{"tf":1.0},"401":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":2,"docs":{"324":{"tf":1.7320508075688772},"398":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"323":{"tf":1.0}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"323":{"tf":1.0},"401":{"tf":1.0}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"327":{"tf":1.4142135623730951}}}}}}}},"df":47,"docs":{"100":{"tf":3.1622776601683795},"238":{"tf":1.0},"279":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":3.1622776601683795},"316":{"tf":1.4142135623730951},"317":{"tf":1.7320508075688772},"318":{"tf":2.0},"319":{"tf":1.7320508075688772},"321":{"tf":3.1622776601683795},"322":{"tf":2.6457513110645907},"323":{"tf":4.123105625617661},"324":{"tf":7.416198487095663},"325":{"tf":3.1622776601683795},"326":{"tf":1.0},"327":{"tf":2.23606797749979},"328":{"tf":2.23606797749979},"329":{"tf":3.3166247903554},"330":{"tf":2.8284271247461903},"394":{"tf":1.0},"396":{"tf":2.8284271247461903},"397":{"tf":1.0},"398":{"tf":2.0},"399":{"tf":1.0},"401":{"tf":2.6457513110645907},"402":{"tf":1.0},"404":{"tf":2.23606797749979},"405":{"tf":1.4142135623730951},"406":{"tf":1.0},"407":{"tf":2.8284271247461903},"409":{"tf":1.4142135623730951},"410":{"tf":1.4142135623730951},"411":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":2.0},"487":{"tf":1.0},"499":{"tf":1.4142135623730951},"500":{"tf":2.449489742783178},"501":{"tf":1.0},"502":{"tf":2.23606797749979},"63":{"tf":1.0},"94":{"tf":1.4142135623730951},"95":{"tf":2.8284271247461903},"96":{"tf":2.449489742783178},"97":{"tf":2.0},"98":{"tf":1.0},"99":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"238":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":5,"docs":{"100":{"tf":1.0},"322":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"328":{"tf":1.0},"330":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"407":{"tf":1.0}},"e":{"(":{"&":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"322":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"d":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"329":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"329":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"329":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"(":{"&":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"329":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"323":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"407":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":3,"docs":{"321":{"tf":1.4142135623730951},"324":{"tf":1.7320508075688772},"398":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"s":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"c":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"499":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"328":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"|":{"b":{"df":1,"docs":{"322":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},":":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"*":{"*":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"501":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"o":{"d":{"df":0,"docs":{},"i":{"df":4,"docs":{"140":{"tf":1.0},"264":{"tf":1.0},"28":{"tf":1.0},"324":{"tf":2.23606797749979}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"40":{"tf":1.0}}}}}}},"df":0,"docs":{}},"l":{"df":3,"docs":{"327":{"tf":1.7320508075688772},"334":{"tf":1.4142135623730951},"337":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"n":{"df":4,"docs":{"342":{"tf":1.0},"492":{"tf":1.0},"496":{"tf":1.0},"498":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":3,"docs":{"202":{"tf":1.0},"316":{"tf":1.4142135623730951},"96":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"h":{"df":9,"docs":{"137":{"tf":1.0},"274":{"tf":1.0},"323":{"tf":1.7320508075688772},"353":{"tf":1.0},"361":{"tf":1.0},"368":{"tf":1.0},"405":{"tf":1.0},"500":{"tf":1.0},"88":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"493":{"tf":1.0}}},"df":0,"docs":{}}},"x":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"293":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"293":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"e":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"m":{"a":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"i":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"d":{"b":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"293":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"d":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"df":2,"docs":{"138":{"tf":1.0},"293":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":1,"docs":{"493":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":8,"docs":{"107":{"tf":2.0},"136":{"tf":1.0},"141":{"tf":1.0},"151":{"tf":1.0},"371":{"tf":1.0},"46":{"tf":1.0},"52":{"tf":1.0},"93":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"k":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"317":{"tf":1.0}}}}}},"df":4,"docs":{"138":{"tf":1.0},"156":{"tf":1.0},"301":{"tf":1.0},"324":{"tf":1.0}}}},"df":0,"docs":{},"w":{"df":1,"docs":{"162":{"tf":1.0}}}},"i":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"335":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"a":{"d":{"df":1,"docs":{"250":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"295":{"tf":1.0},"44":{"tf":1.0},"7":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"129":{"tf":1.0}}}},"df":0,"docs":{}},"df":4,"docs":{"108":{"tf":1.0},"114":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"2":{"tf":1.0},"27":{"tf":1.0},"3":{"tf":1.0},"38":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"g":{"df":9,"docs":{"104":{"tf":1.4142135623730951},"108":{"tf":1.0},"117":{"tf":1.4142135623730951},"118":{"tf":1.0},"245":{"tf":1.0},"246":{"tf":1.0},"251":{"tf":1.0},"501":{"tf":1.0},"96":{"tf":1.0}}},"i":{"df":0,"docs":{},"l":{"d":{"df":22,"docs":{"10":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"138":{"tf":1.0},"143":{"tf":1.0},"164":{"tf":1.4142135623730951},"165":{"tf":2.6457513110645907},"166":{"tf":2.23606797749979},"167":{"tf":1.4142135623730951},"181":{"tf":1.4142135623730951},"184":{"tf":1.4142135623730951},"189":{"tf":1.0},"2":{"tf":1.0},"209":{"tf":1.0},"226":{"tf":1.0},"3":{"tf":1.4142135623730951},"309":{"tf":1.0},"31":{"tf":1.0},"448":{"tf":1.7320508075688772},"6":{"tf":1.4142135623730951},"67":{"tf":1.0},"8":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"463":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"df":4,"docs":{"0":{"tf":1.0},"28":{"tf":1.0},"475":{"tf":1.0},"53":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"k":{"df":1,"docs":{"356":{"tf":1.0}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"95":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"104":{"tf":1.0},"48":{"tf":1.0}}}}}},"c":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"e":{"(":{")":{")":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"a":{"c":{"df":0,"docs":{},"h":{"df":20,"docs":{"100":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"233":{"tf":1.0},"234":{"tf":2.23606797749979},"238":{"tf":2.23606797749979},"241":{"tf":4.0},"247":{"tf":2.449489742783178},"279":{"tf":1.0},"281":{"tf":1.0},"323":{"tf":1.4142135623730951},"357":{"tf":1.0},"371":{"tf":1.0},"376":{"tf":1.0},"380":{"tf":1.4142135623730951},"381":{"tf":1.4142135623730951},"391":{"tf":1.0},"399":{"tf":1.0},"465":{"tf":1.0},"76":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":1,"docs":{"357":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"328":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"255":{"tf":1.0}}}}}}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"501":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"356":{"tf":1.0}}}},"n":{"\'":{"df":0,"docs":{},"t":{"df":5,"docs":{"133":{"tf":1.0},"142":{"tf":1.0},"322":{"tf":1.0},"367":{"tf":1.0},"410":{"tf":1.4142135623730951}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":5,"docs":{"321":{"tf":1.0},"324":{"tf":1.0},"327":{"tf":1.0},"500":{"tf":1.0},"96":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"1":{"df":1,"docs":{"324":{"tf":2.0}}},"2":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"198":{"tf":1.0},"350":{"tf":1.0},"365":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"324":{"tf":2.0},"502":{"tf":1.0}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":18,"docs":{"101":{"tf":1.0},"105":{"tf":1.0},"116":{"tf":1.0},"120":{"tf":1.0},"127":{"tf":1.0},"207":{"tf":1.0},"226":{"tf":1.0},"249":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.4142135623730951},"350":{"tf":1.0},"460":{"tf":1.0},"47":{"tf":1.0},"480":{"tf":1.0},"49":{"tf":1.0},"59":{"tf":1.0},"72":{"tf":1.7320508075688772},"98":{"tf":1.0}}}}}},"r":{"d":{"df":20,"docs":{"314":{"tf":1.0},"316":{"tf":2.0},"321":{"tf":1.4142135623730951},"323":{"tf":1.0},"324":{"tf":1.7320508075688772},"325":{"tf":1.0},"326":{"tf":1.0},"329":{"tf":1.4142135623730951},"330":{"tf":1.0},"396":{"tf":1.0},"398":{"tf":1.0},"401":{"tf":1.0},"404":{"tf":1.0},"407":{"tf":1.0},"480":{"tf":1.0},"500":{"tf":1.0},"502":{"tf":2.0},"96":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"120":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"333":{"tf":1.0}}}}}}},"df":17,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.7320508075688772},"161":{"tf":1.0},"162":{"tf":1.0},"164":{"tf":1.4142135623730951},"165":{"tf":1.7320508075688772},"166":{"tf":1.4142135623730951},"167":{"tf":1.4142135623730951},"175":{"tf":1.7320508075688772},"181":{"tf":1.0},"184":{"tf":1.0},"188":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"193":{"tf":1.0},"195":{"tf":1.0},"42":{"tf":1.0},"448":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":24,"docs":{"130":{"tf":1.0},"158":{"tf":1.0},"16":{"tf":1.0},"228":{"tf":1.0},"229":{"tf":1.0},"232":{"tf":1.0},"235":{"tf":1.0},"238":{"tf":1.0},"239":{"tf":1.0},"242":{"tf":1.0},"245":{"tf":1.0},"248":{"tf":1.0},"315":{"tf":1.0},"343":{"tf":1.0},"358":{"tf":1.0},"359":{"tf":1.0},"374":{"tf":1.0},"384":{"tf":1.0},"479":{"tf":1.0},"502":{"tf":1.4142135623730951},"58":{"tf":1.0},"64":{"tf":1.0},"68":{"tf":1.0},"98":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"134":{"tf":1.0},"332":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.0}}}},"df":2,"docs":{"237":{"tf":1.0},"244":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"493":{"tf":1.0}},"i":{"df":8,"docs":{"142":{"tf":1.0},"213":{"tf":1.0},"244":{"tf":1.4142135623730951},"457":{"tf":1.0},"496":{"tf":1.7320508075688772},"519":{"tf":1.0},"74":{"tf":1.0},"98":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":6,"docs":{"134":{"tf":1.0},"267":{"tf":1.0},"301":{"tf":1.0},"334":{"tf":1.4142135623730951},"337":{"tf":1.0},"346":{"tf":1.4142135623730951}}}}}}},"d":{"df":9,"docs":{"164":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.0},"196":{"tf":1.0},"213":{"tf":1.0},"244":{"tf":1.0},"43":{"tf":1.0},"450":{"tf":1.0},"476":{"tf":1.0}}},"df":2,"docs":{"323":{"tf":1.0},"330":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{":":{"8":{"0":{"0":{"0":{"df":1,"docs":{"369":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":5,"docs":{"269":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"57":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"215":{"tf":1.0},"240":{"tf":1.0}}}}},"df":0,"docs":{}}}},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"329":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":3,"docs":{"228":{"tf":1.0},"234":{"tf":1.0},"75":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"g":{"df":31,"docs":{"107":{"tf":1.0},"109":{"tf":1.0},"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"136":{"tf":1.0},"2":{"tf":1.0},"285":{"tf":1.0},"298":{"tf":1.4142135623730951},"301":{"tf":1.0},"302":{"tf":1.0},"322":{"tf":1.0},"328":{"tf":1.0},"348":{"tf":1.0},"357":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"369":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.7320508075688772},"379":{"tf":1.4142135623730951},"38":{"tf":1.0},"389":{"tf":1.0},"391":{"tf":1.0},"393":{"tf":1.0},"407":{"tf":1.0},"46":{"tf":1.0},"52":{"tf":1.0},"6":{"tf":1.0},"70":{"tf":1.0},"89":{"tf":1.4142135623730951},"93":{"tf":1.0}}}},"t":{"df":1,"docs":{"48":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"460":{"tf":1.4142135623730951},"465":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":22,"docs":{"123":{"tf":1.0},"173":{"tf":1.0},"190":{"tf":1.0},"191":{"tf":1.0},"207":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"267":{"tf":1.0},"280":{"tf":1.0},"303":{"tf":1.7320508075688772},"304":{"tf":1.0},"338":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"44":{"tf":1.0},"466":{"tf":1.7320508075688772},"475":{"tf":1.0},"477":{"tf":1.0},"61":{"tf":1.0},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"12":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"107":{"tf":1.0},"136":{"tf":1.0},"141":{"tf":1.0}}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"l":{"d":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":5,"docs":{"314":{"tf":1.0},"324":{"tf":2.8284271247461903},"329":{"tf":1.4142135623730951},"404":{"tf":1.0},"96":{"tf":1.7320508075688772}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":4,"docs":{"321":{"tf":1.0},"324":{"tf":1.7320508075688772},"398":{"tf":1.0},"95":{"tf":1.0}}}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"477":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"133":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":3,"docs":{"115":{"tf":1.0},"350":{"tf":1.0},"73":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":5,"docs":{"104":{"tf":1.0},"230":{"tf":1.0},"241":{"tf":1.0},"247":{"tf":1.0},"84":{"tf":1.0}},"n":{"df":2,"docs":{"241":{"tf":1.0},"73":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"{":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"/":{"c":{"d":{"df":2,"docs":{"18":{"tf":1.0},"309":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"337":{"tf":1.4142135623730951}}},"l":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"257":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"321":{"tf":1.0},"409":{"tf":1.0}}}},"u":{"d":{"df":66,"docs":{"105":{"tf":1.0},"108":{"tf":1.4142135623730951},"114":{"tf":1.0},"118":{"tf":1.4142135623730951},"127":{"tf":1.0},"134":{"tf":1.0},"143":{"tf":1.0},"147":{"tf":1.0},"182":{"tf":1.7320508075688772},"183":{"tf":1.4142135623730951},"185":{"tf":1.0},"186":{"tf":1.0},"192":{"tf":1.0},"205":{"tf":1.7320508075688772},"225":{"tf":1.0},"231":{"tf":1.7320508075688772},"234":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.7320508075688772},"24":{"tf":1.0},"241":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"250":{"tf":1.4142135623730951},"258":{"tf":1.0},"263":{"tf":1.0},"275":{"tf":1.0},"290":{"tf":1.7320508075688772},"292":{"tf":1.4142135623730951},"334":{"tf":1.0},"337":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.0},"359":{"tf":1.4142135623730951},"360":{"tf":1.0},"434":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.4142135623730951},"449":{"tf":1.0},"451":{"tf":1.7320508075688772},"452":{"tf":1.4142135623730951},"454":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0},"457":{"tf":1.0},"458":{"tf":1.0},"460":{"tf":1.0},"461":{"tf":1.0},"462":{"tf":1.0},"463":{"tf":1.0},"465":{"tf":1.0},"466":{"tf":1.0},"467":{"tf":1.0},"469":{"tf":1.0},"471":{"tf":1.0},"472":{"tf":1.0},"478":{"tf":1.0},"479":{"tf":1.0},"480":{"tf":1.4142135623730951},"481":{"tf":1.0},"487":{"tf":1.0},"49":{"tf":1.0},"490":{"tf":1.0},"53":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"189":{"tf":1.4142135623730951},"473":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"8":{"tf":1.0}}}}},"r":{"df":4,"docs":{"139":{"tf":1.0},"157":{"tf":1.0},"357":{"tf":1.0},"36":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"139":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"/":{"df":0,"docs":{},"m":{"c":{"df":0,"docs":{},"p":{"df":3,"docs":{"328":{"tf":1.0},"330":{"tf":1.0},"358":{"tf":1.0}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"28":{"tf":1.0}}}},"df":19,"docs":{"161":{"tf":1.4142135623730951},"164":{"tf":1.4142135623730951},"165":{"tf":1.4142135623730951},"170":{"tf":1.0},"173":{"tf":1.0},"188":{"tf":1.0},"193":{"tf":1.0},"195":{"tf":1.7320508075688772},"225":{"tf":1.0},"23":{"tf":1.7320508075688772},"255":{"tf":1.0},"257":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"338":{"tf":1.0},"407":{"tf":1.4142135623730951},"441":{"tf":1.0},"64":{"tf":1.7320508075688772},"66":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"(":{"\\"":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"352":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":3,"docs":{"352":{"tf":1.0},"354":{"tf":1.0},"460":{"tf":1.4142135623730951}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":2,"docs":{"164":{"tf":1.4142135623730951},"324":{"tf":1.7320508075688772}}}},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"104":{"tf":1.0}}}},"u":{"d":{"df":16,"docs":{"109":{"tf":1.0},"135":{"tf":2.0},"157":{"tf":1.0},"281":{"tf":1.0},"289":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.7320508075688772},"359":{"tf":1.4142135623730951},"361":{"tf":2.0},"372":{"tf":1.0},"65":{"tf":1.0},"90":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"m":{"d":{"+":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"+":{"df":0,"docs":{},"v":{"df":1,"docs":{"39":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"66":{"tf":1.0}}},"df":0,"docs":{}},"o":{"d":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"77":{"tf":1.0}}}}}}}},"b":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"238":{"tf":1.0},"299":{"tf":1.0}}}},"df":0,"docs":{}},"df":83,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"107":{"tf":1.7320508075688772},"108":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.4142135623730951},"125":{"tf":2.0},"133":{"tf":1.4142135623730951},"136":{"tf":1.4142135623730951},"141":{"tf":2.8284271247461903},"143":{"tf":1.0},"153":{"tf":1.4142135623730951},"157":{"tf":1.4142135623730951},"183":{"tf":1.4142135623730951},"185":{"tf":1.0},"186":{"tf":1.0},"192":{"tf":1.0},"202":{"tf":1.0},"205":{"tf":1.7320508075688772},"218":{"tf":1.4142135623730951},"225":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.0},"238":{"tf":1.0},"239":{"tf":1.0},"24":{"tf":1.0},"240":{"tf":1.0},"241":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0},"258":{"tf":1.0},"26":{"tf":1.0},"264":{"tf":1.4142135623730951},"275":{"tf":1.0},"28":{"tf":1.0},"280":{"tf":1.0},"285":{"tf":1.4142135623730951},"293":{"tf":1.0},"302":{"tf":1.0},"309":{"tf":1.0},"335":{"tf":1.0},"34":{"tf":1.4142135623730951},"356":{"tf":1.0},"36":{"tf":1.7320508075688772},"365":{"tf":1.4142135623730951},"371":{"tf":1.0},"375":{"tf":1.0},"39":{"tf":1.0},"413":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.4142135623730951},"449":{"tf":1.0},"451":{"tf":1.7320508075688772},"452":{"tf":1.0},"473":{"tf":1.4142135623730951},"478":{"tf":1.0},"479":{"tf":1.0},"480":{"tf":1.0},"481":{"tf":1.0},"487":{"tf":1.0},"49":{"tf":1.0},"490":{"tf":1.0},"514":{"tf":1.7320508075688772},"515":{"tf":1.0},"521":{"tf":1.0},"525":{"tf":1.0},"53":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.7320508075688772},"75":{"tf":1.4142135623730951},"81":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0},"92":{"tf":1.4142135623730951},"96":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":9,"docs":{"121":{"tf":1.0},"248":{"tf":1.0},"251":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"371":{"tf":1.0},"53":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"272":{"tf":1.0},"273":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"155":{"tf":1.0},"257":{"tf":1.0},"259":{"tf":1.0}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{"df":3,"docs":{"296":{"tf":1.0},"323":{"tf":1.4142135623730951},"401":{"tf":1.0}}}}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"244":{"tf":1.0},"274":{"tf":1.0},"323":{"tf":1.0},"380":{"tf":1.0},"465":{"tf":1.0},"88":{"tf":1.0},"93":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"144":{"tf":1.0}}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"346":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"n":{"d":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\\"":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"303":{"tf":1.0},"335":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":17,"docs":{"185":{"tf":1.0},"225":{"tf":1.4142135623730951},"226":{"tf":1.0},"23":{"tf":1.0},"257":{"tf":1.4142135623730951},"338":{"tf":1.0},"372":{"tf":1.0},"388":{"tf":1.0},"407":{"tf":1.4142135623730951},"42":{"tf":1.0},"442":{"tf":1.0},"449":{"tf":1.0},"453":{"tf":1.0},"490":{"tf":1.0},"5":{"tf":1.4142135623730951},"66":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"104":{"tf":1.0},"117":{"tf":1.0},"124":{"tf":1.0},"341":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"125":{"tf":1.4142135623730951},"136":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"36":{"tf":1.0},"371":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":11,"docs":{"206":{"tf":1.0},"228":{"tf":1.0},"23":{"tf":1.0},"251":{"tf":1.0},"338":{"tf":1.0},"459":{"tf":1.0},"487":{"tf":1.0},"493":{"tf":1.0},"510":{"tf":1.0},"512":{"tf":1.0},"75":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"df":2,"docs":{"191":{"tf":1.0},"226":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"338":{"tf":1.0},"351":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"21":{"tf":1.0},"359":{"tf":1.0},"62":{"tf":1.0}}}}}}},"t":{"df":18,"docs":{"100":{"tf":1.0},"156":{"tf":1.0},"170":{"tf":1.0},"204":{"tf":1.0},"250":{"tf":1.0},"269":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.7320508075688772},"324":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.7320508075688772},"393":{"tf":1.0},"401":{"tf":1.0},"404":{"tf":1.4142135623730951},"413":{"tf":1.0},"483":{"tf":1.0},"63":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":7,"docs":{"189":{"tf":1.0},"301":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"502":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":7,"docs":{"27":{"tf":1.0},"333":{"tf":1.0},"360":{"tf":1.4142135623730951},"391":{"tf":1.0},"4":{"tf":1.0},"486":{"tf":1.0},"77":{"tf":1.0}},"e":{"d":{":":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"498":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"x":{"df":18,"docs":{"234":{"tf":1.0},"308":{"tf":1.0},"321":{"tf":1.0},"323":{"tf":1.0},"330":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"343":{"tf":1.0},"346":{"tf":1.0},"353":{"tf":1.0},"357":{"tf":1.0},"368":{"tf":1.0},"372":{"tf":1.0},"385":{"tf":1.0},"391":{"tf":1.0},"405":{"tf":1.0},"463":{"tf":1.0},"502":{"tf":1.0}}}},"i":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"122":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"138":{"tf":1.4142135623730951},"149":{"tf":1.0},"256":{"tf":1.0},"258":{"tf":1.0}}},"s":{"df":10,"docs":{"138":{"tf":1.4142135623730951},"157":{"tf":1.0},"234":{"tf":1.0},"285":{"tf":1.4142135623730951},"291":{"tf":1.0},"292":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"346":{"tf":1.0},"372":{"tf":1.0}},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"291":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":8,"docs":{"138":{"tf":1.0},"154":{"tf":1.0},"286":{"tf":1.7320508075688772},"291":{"tf":1.4142135623730951},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"v":{"df":0,"docs":{},"g":{"df":1,"docs":{"27":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":5,"docs":{"0":{"tf":1.0},"153":{"tf":1.0},"254":{"tf":1.0},"338":{"tf":1.0},"511":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"214":{"tf":1.0}}}}}}}},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"495":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":26,"docs":{"101":{"tf":1.0},"105":{"tf":1.0},"108":{"tf":1.4142135623730951},"128":{"tf":1.0},"130":{"tf":1.4142135623730951},"142":{"tf":1.7320508075688772},"15":{"tf":1.0},"197":{"tf":1.0},"199":{"tf":1.0},"202":{"tf":1.0},"251":{"tf":1.0},"318":{"tf":1.0},"350":{"tf":1.4142135623730951},"36":{"tf":1.0},"458":{"tf":1.0},"473":{"tf":1.0},"49":{"tf":1.0},"518":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"69":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"72":{"tf":1.0},"76":{"tf":1.0},"81":{"tf":1.0},"90":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"v":{"df":0,"docs":{},"g":{"df":1,"docs":{"27":{"tf":1.0}}}}}},"df":0,"docs":{}},"u":{"df":6,"docs":{"199":{"tf":1.0},"200":{"tf":1.0},"473":{"tf":1.0},"495":{"tf":1.0},"56":{"tf":1.0},"79":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"339":{"tf":1.0},"352":{"tf":1.0},"358":{"tf":1.0},"466":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"36":{"tf":1.0}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"157":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"56":{"tf":1.0},"81":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":3,"docs":{"238":{"tf":1.0},"247":{"tf":1.7320508075688772},"98":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":9,"docs":{"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"238":{"tf":2.23606797749979},"247":{"tf":1.7320508075688772},"334":{"tf":1.0},"337":{"tf":1.0},"465":{"tf":1.0},"501":{"tf":1.0},"76":{"tf":1.0}}}}},"df":12,"docs":{"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"520":{"tf":1.0}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}},".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"146":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"293":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"354":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"n":{"c":{"df":0,"docs":{},"l":{"df":5,"docs":{"266":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.4142135623730951},"345":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"133":{"tf":1.0},"147":{"tf":1.0},"354":{"tf":1.0}}},"df":0,"docs":{}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"298":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"293":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":3,"docs":{"169":{"tf":1.0},"196":{"tf":1.0},"270":{"tf":1.0}}}}}}},"/":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"e":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":5,"docs":{"185":{"tf":1.0},"205":{"tf":1.0},"258":{"tf":1.0},"449":{"tf":1.0},"490":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"k":{"b":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"\\"":{")":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"303":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},":":{"1":{"5":{":":{"5":{"df":1,"docs":{"295":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":5,"docs":{"290":{"tf":1.0},"292":{"tf":1.0},"303":{"tf":1.4142135623730951},"304":{"tf":1.0},"311":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"345":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"/":{"*":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"311":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":2,"docs":{"299":{"tf":1.0},"304":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":2,"docs":{"299":{"tf":1.0},"304":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":2,"docs":{"299":{"tf":1.0},"304":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"{":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{",":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{",":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"}":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"290":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"345":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"304":{"tf":1.4142135623730951}},"s":{"/":{"*":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"310":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"b":{"df":4,"docs":{"292":{"tf":1.4142135623730951},"293":{"tf":1.0},"303":{"tf":1.4142135623730951},"304":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":54,"docs":{"109":{"tf":1.0},"133":{"tf":1.7320508075688772},"139":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"156":{"tf":1.0},"157":{"tf":1.0},"17":{"tf":1.0},"170":{"tf":1.4142135623730951},"171":{"tf":1.0},"19":{"tf":1.0},"213":{"tf":1.0},"257":{"tf":1.0},"267":{"tf":1.0},"27":{"tf":1.0},"280":{"tf":1.0},"284":{"tf":1.4142135623730951},"290":{"tf":1.0},"293":{"tf":1.7320508075688772},"297":{"tf":1.0},"298":{"tf":1.4142135623730951},"301":{"tf":1.0},"302":{"tf":1.4142135623730951},"304":{"tf":2.0},"306":{"tf":1.0},"307":{"tf":1.7320508075688772},"310":{"tf":1.0},"328":{"tf":1.4142135623730951},"332":{"tf":1.7320508075688772},"333":{"tf":2.0},"334":{"tf":1.0},"335":{"tf":2.0},"337":{"tf":1.7320508075688772},"338":{"tf":1.0},"339":{"tf":1.4142135623730951},"341":{"tf":1.0},"344":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":2.23606797749979},"347":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"361":{"tf":1.0},"369":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"413":{"tf":1.0},"51":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"89":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":1,"docs":{"139":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":1,"docs":{"139":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"139":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"r":{"df":59,"docs":{"133":{"tf":1.0},"134":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"149":{"tf":1.0},"151":{"tf":1.0},"161":{"tf":1.0},"170":{"tf":1.7320508075688772},"171":{"tf":1.0},"178":{"tf":1.0},"182":{"tf":1.0},"185":{"tf":1.0},"19":{"tf":1.7320508075688772},"192":{"tf":1.0},"196":{"tf":1.0},"205":{"tf":1.0},"21":{"tf":1.0},"212":{"tf":1.7320508075688772},"213":{"tf":1.0},"225":{"tf":1.4142135623730951},"252":{"tf":1.0},"257":{"tf":1.0},"265":{"tf":1.0},"27":{"tf":1.0},"279":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":2.0},"286":{"tf":1.7320508075688772},"288":{"tf":1.0},"292":{"tf":1.0},"294":{"tf":1.0},"303":{"tf":1.4142135623730951},"304":{"tf":1.4142135623730951},"311":{"tf":1.4142135623730951},"327":{"tf":1.4142135623730951},"331":{"tf":1.4142135623730951},"332":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"344":{"tf":1.0},"354":{"tf":1.7320508075688772},"356":{"tf":1.0},"357":{"tf":1.0},"379":{"tf":1.0},"40":{"tf":1.0},"418":{"tf":1.0},"420":{"tf":1.0},"431":{"tf":1.0},"449":{"tf":1.0},"463":{"tf":1.0},"479":{"tf":1.4142135623730951},"488":{"tf":1.0},"490":{"tf":1.0},"499":{"tf":1.0},"51":{"tf":1.0},"521":{"tf":1.0},"64":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0},"97":{"tf":1.4142135623730951}}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"t":{"df":7,"docs":{"136":{"tf":1.4142135623730951},"371":{"tf":1.0},"372":{"tf":1.4142135623730951},"381":{"tf":1.0},"383":{"tf":1.0},"384":{"tf":1.0},"391":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"107":{"tf":1.0},"124":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"s":{"df":2,"docs":{"342":{"tf":1.0},"357":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"226":{"tf":1.0}}}}}},"df":0,"docs":{}}},"n":{"df":2,"docs":{"179":{"tf":1.0},"238":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"t":{"_":{"d":{"b":{"df":1,"docs":{"238":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":24,"docs":{"101":{"tf":1.0},"105":{"tf":1.0},"111":{"tf":1.4142135623730951},"128":{"tf":1.0},"144":{"tf":1.0},"186":{"tf":1.0},"190":{"tf":1.0},"226":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":1.0},"251":{"tf":1.0},"451":{"tf":1.0},"452":{"tf":1.0},"462":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"517":{"tf":1.0},"56":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"79":{"tf":1.0},"81":{"tf":1.0},"84":{"tf":1.0},"92":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":1,"docs":{"250":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":13,"docs":{"116":{"tf":1.0},"198":{"tf":1.4142135623730951},"231":{"tf":1.4142135623730951},"234":{"tf":1.0},"336":{"tf":1.0},"355":{"tf":1.0},"370":{"tf":1.0},"403":{"tf":1.0},"456":{"tf":1.0},"460":{"tf":1.4142135623730951},"494":{"tf":1.7320508075688772},"520":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}},"i":{"d":{"df":7,"docs":{"340":{"tf":1.0},"382":{"tf":1.0},"408":{"tf":1.0},"466":{"tf":1.0},"493":{"tf":1.0},"73":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"279":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":13,"docs":{"110":{"tf":1.0},"121":{"tf":1.0},"219":{"tf":1.4142135623730951},"234":{"tf":1.0},"238":{"tf":1.0},"244":{"tf":1.0},"255":{"tf":1.0},"36":{"tf":1.0},"371":{"tf":1.0},"470":{"tf":1.0},"502":{"tf":1.0},"75":{"tf":1.0},"91":{"tf":1.0}}}}},"t":{"df":1,"docs":{"146":{"tf":1.0}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"357":{"tf":1.0},"365":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"137":{"tf":1.4142135623730951},"292":{"tf":1.0}}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"0":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"/":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"323":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"[":{"4":{".":{".":{"4":{"df":1,"docs":{"324":{"tf":1.0}}},"]":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"(":{"\\"":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}},"df":45,"docs":{"100":{"tf":1.0},"139":{"tf":1.0},"150":{"tf":1.0},"197":{"tf":1.4142135623730951},"200":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"209":{"tf":1.0},"210":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"241":{"tf":1.0},"244":{"tf":1.4142135623730951},"247":{"tf":1.0},"261":{"tf":1.0},"264":{"tf":1.7320508075688772},"28":{"tf":1.0},"314":{"tf":1.4142135623730951},"321":{"tf":1.7320508075688772},"322":{"tf":1.4142135623730951},"323":{"tf":2.0},"324":{"tf":3.872983346207417},"328":{"tf":1.0},"329":{"tf":1.7320508075688772},"330":{"tf":1.4142135623730951},"36":{"tf":1.0},"396":{"tf":1.0},"398":{"tf":1.0},"399":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"410":{"tf":1.0},"413":{"tf":1.0},"455":{"tf":1.0},"478":{"tf":1.7320508075688772},"487":{"tf":1.0},"493":{"tf":2.0},"499":{"tf":1.0},"503":{"tf":1.0},"53":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"(":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":43,"docs":{"104":{"tf":1.4142135623730951},"113":{"tf":1.0},"114":{"tf":1.0},"116":{"tf":1.4142135623730951},"120":{"tf":1.4142135623730951},"121":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"144":{"tf":1.0},"151":{"tf":1.0},"198":{"tf":1.0},"231":{"tf":2.0},"234":{"tf":1.4142135623730951},"241":{"tf":1.0},"250":{"tf":2.0},"251":{"tf":1.0},"258":{"tf":1.0},"276":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"349":{"tf":1.0},"350":{"tf":1.0},"364":{"tf":1.0},"365":{"tf":1.0},"396":{"tf":1.0},"409":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"456":{"tf":1.0},"460":{"tf":1.4142135623730951},"465":{"tf":1.4142135623730951},"48":{"tf":1.0},"486":{"tf":1.0},"494":{"tf":2.0},"496":{"tf":1.0},"520":{"tf":1.0},"53":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.7320508075688772},"75":{"tf":1.0},"92":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"324":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":14,"docs":{"134":{"tf":1.0},"147":{"tf":1.0},"151":{"tf":1.0},"154":{"tf":1.4142135623730951},"267":{"tf":1.0},"280":{"tf":1.0},"285":{"tf":1.7320508075688772},"287":{"tf":1.4142135623730951},"288":{"tf":1.0},"295":{"tf":1.7320508075688772},"300":{"tf":1.0},"301":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.4142135623730951}},"s":{".":{"df":0,"docs":{},"k":{"b":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"288":{"tf":1.4142135623730951},"290":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"301":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"26":{"tf":1.4142135623730951},"36":{"tf":1.0},"46":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"m":{"d":{"df":2,"docs":{"30":{"tf":1.0},"46":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":12,"docs":{"105":{"tf":1.0},"135":{"tf":1.0},"151":{"tf":1.0},"215":{"tf":1.0},"269":{"tf":1.4142135623730951},"289":{"tf":1.0},"356":{"tf":1.0},"359":{"tf":1.0},"390":{"tf":1.0},"57":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"140":{"tf":1.7320508075688772},"74":{"tf":1.0}}}},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"t":{"df":5,"docs":{"238":{"tf":1.0},"296":{"tf":1.0},"350":{"tf":1.0},"379":{"tf":1.0},"409":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"i":{"df":4,"docs":{"170":{"tf":1.0},"220":{"tf":1.0},"241":{"tf":1.0},"324":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"292":{"tf":1.4142135623730951},"293":{"tf":1.0},"299":{"tf":1.7320508075688772},"303":{"tf":1.4142135623730951}}}}}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"r":{"df":2,"docs":{"335":{"tf":1.0},"345":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"354":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}},"/":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":31,"docs":{"126":{"tf":1.0},"130":{"tf":1.0},"132":{"tf":1.0},"135":{"tf":1.0},"15":{"tf":1.0},"165":{"tf":1.4142135623730951},"166":{"tf":1.0},"167":{"tf":1.0},"175":{"tf":1.0},"178":{"tf":1.0},"181":{"tf":1.0},"231":{"tf":1.0},"255":{"tf":1.4142135623730951},"260":{"tf":1.4142135623730951},"263":{"tf":1.0},"27":{"tf":1.0},"275":{"tf":1.0},"278":{"tf":1.0},"293":{"tf":1.0},"318":{"tf":1.0},"353":{"tf":1.7320508075688772},"354":{"tf":1.7320508075688772},"358":{"tf":1.0},"360":{"tf":1.0},"362":{"tf":1.0},"487":{"tf":1.0},"50":{"tf":1.0},"66":{"tf":1.7320508075688772},"69":{"tf":1.0},"70":{"tf":1.0},"92":{"tf":1.0}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"190":{"tf":1.0},"285":{"tf":1.0},"295":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"308":{"tf":1.0},"90":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"(":{"&":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"[":{"0":{"df":1,"docs":{"273":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"t":{"df":14,"docs":{"109":{"tf":1.0},"135":{"tf":1.4142135623730951},"289":{"tf":1.0},"350":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.0},"359":{"tf":1.4142135623730951},"361":{"tf":1.0},"365":{"tf":1.4142135623730951},"367":{"tf":1.0},"368":{"tf":1.0},"371":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":1,"docs":{"511":{"tf":1.0}}}},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"149":{"tf":1.0},"157":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"153":{"tf":1.0},"278":{"tf":1.0},"463":{"tf":1.0}}}},"df":1,"docs":{"159":{"tf":1.0}}}}}},"p":{"df":2,"docs":{"170":{"tf":1.0},"220":{"tf":1.0}},"u":{"df":1,"docs":{"98":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{":":{":":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{":":{":":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"{":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"{":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"324":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"(":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"2":{"df":1,"docs":{"493":{"tf":1.0}}},"df":0,"docs":{}}},"df":3,"docs":{"165":{"tf":1.0},"379":{"tf":1.0},"72":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"k":{"b":{"df":2,"docs":{"164":{"tf":1.0},"324":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":37,"docs":{"143":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.0},"192":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.4142135623730951},"198":{"tf":1.0},"199":{"tf":1.4142135623730951},"202":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.0},"213":{"tf":1.4142135623730951},"226":{"tf":1.0},"234":{"tf":1.4142135623730951},"238":{"tf":1.7320508075688772},"241":{"tf":1.4142135623730951},"244":{"tf":1.0},"250":{"tf":1.7320508075688772},"257":{"tf":1.4142135623730951},"258":{"tf":1.7320508075688772},"261":{"tf":1.4142135623730951},"31":{"tf":1.0},"32":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":2.0},"345":{"tf":1.4142135623730951},"407":{"tf":1.0},"46":{"tf":1.0},"460":{"tf":1.4142135623730951},"461":{"tf":2.23606797749979},"462":{"tf":1.0},"465":{"tf":1.4142135623730951},"471":{"tf":1.0},"492":{"tf":1.7320508075688772},"494":{"tf":1.0},"495":{"tf":1.4142135623730951}},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"354":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"298":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":3,"docs":{"346":{"tf":1.0},"361":{"tf":1.0},"391":{"tf":1.0}}},"df":0,"docs":{}}}},"i":{"c":{"df":2,"docs":{"231":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":5,"docs":{"171":{"tf":1.0},"242":{"tf":1.0},"251":{"tf":1.0},"274":{"tf":1.0},"466":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"j":{"df":1,"docs":{"40":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"+":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"+":{"df":0,"docs":{},"v":{"df":1,"docs":{"39":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"383":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"l":{"df":3,"docs":{"161":{"tf":1.0},"162":{"tf":1.0},"190":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":12,"docs":{"114":{"tf":1.0},"144":{"tf":1.0},"234":{"tf":1.0},"243":{"tf":1.0},"314":{"tf":1.0},"387":{"tf":1.0},"396":{"tf":1.0},"460":{"tf":1.4142135623730951},"461":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"98":{"tf":1.0}}}}}},"v":{"df":6,"docs":{"231":{"tf":1.0},"334":{"tf":1.0},"338":{"tf":1.0},"343":{"tf":1.0},"460":{"tf":1.0},"73":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}}}}},"df":36,"docs":{"108":{"tf":1.0},"109":{"tf":1.0},"124":{"tf":1.0},"140":{"tf":1.4142135623730951},"169":{"tf":1.0},"192":{"tf":1.0},"212":{"tf":1.0},"22":{"tf":1.0},"220":{"tf":1.0},"231":{"tf":1.0},"244":{"tf":1.0},"280":{"tf":1.0},"285":{"tf":1.0},"290":{"tf":1.0},"314":{"tf":1.0},"319":{"tf":1.0},"321":{"tf":1.4142135623730951},"324":{"tf":1.7320508075688772},"326":{"tf":1.0},"330":{"tf":1.0},"396":{"tf":1.0},"398":{"tf":1.4142135623730951},"40":{"tf":1.0},"402":{"tf":1.0},"404":{"tf":1.4142135623730951},"440":{"tf":1.0},"461":{"tf":1.0},"479":{"tf":1.0},"492":{"tf":1.0},"496":{"tf":1.4142135623730951},"500":{"tf":1.7320508075688772},"52":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":2,"docs":{"140":{"tf":1.0},"91":{"tf":1.0}}}}}}}}}},"d":{")":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"203":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":11,"docs":{"196":{"tf":1.0},"203":{"tf":1.0},"210":{"tf":1.0},"227":{"tf":1.0},"238":{"tf":1.0},"251":{"tf":1.0},"270":{"tf":1.0},"55":{"tf":1.0},"59":{"tf":1.0},"76":{"tf":1.4142135623730951},"86":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":3,"docs":{"238":{"tf":1.4142135623730951},"247":{"tf":2.0},"262":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":23,"docs":{"111":{"tf":1.0},"151":{"tf":1.0},"178":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.4142135623730951},"236":{"tf":1.0},"262":{"tf":1.0},"289":{"tf":1.0},"322":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.7320508075688772},"369":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"410":{"tf":1.0},"456":{"tf":1.0},"465":{"tf":1.0},"500":{"tf":1.0},"517":{"tf":1.0},"73":{"tf":1.4142135623730951},"75":{"tf":1.7320508075688772}},"e":{"(":{"#":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"237":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":17,"docs":{"135":{"tf":1.0},"155":{"tf":1.0},"247":{"tf":1.0},"278":{"tf":1.0},"321":{"tf":1.4142135623730951},"324":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"391":{"tf":1.0},"398":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.4142135623730951},"446":{"tf":1.0},"502":{"tf":1.0},"515":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":8,"docs":{"331":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"393":{"tf":1.0},"413":{"tf":1.4142135623730951},"76":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"<":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"c":{"df":3,"docs":{"261":{"tf":1.7320508075688772},"321":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"y":{"df":7,"docs":{"113":{"tf":1.0},"114":{"tf":1.0},"231":{"tf":1.0},"238":{"tf":1.7320508075688772},"463":{"tf":1.4142135623730951},"465":{"tf":1.4142135623730951},"76":{"tf":1.0}}}},"b":{"df":5,"docs":{"179":{"tf":1.0},"368":{"tf":1.0},"463":{"tf":1.0},"55":{"tf":1.0},"63":{"tf":1.0}}},"df":0,"docs":{},"e":{"b":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"115":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"369":{"tf":1.0},"379":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"m":{"df":1,"docs":{"289":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"g":{"df":7,"docs":{"117":{"tf":1.0},"191":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.0},"247":{"tf":1.0},"277":{"tf":1.0},"289":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"331":{"tf":1.0},"349":{"tf":1.0},"364":{"tf":1.0},"460":{"tf":1.0},"98":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":78,"docs":{"101":{"tf":1.0},"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"108":{"tf":1.0},"110":{"tf":1.4142135623730951},"111":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.4142135623730951},"116":{"tf":1.7320508075688772},"122":{"tf":1.0},"123":{"tf":1.4142135623730951},"124":{"tf":1.0},"125":{"tf":1.0},"127":{"tf":1.0},"136":{"tf":1.0},"141":{"tf":1.4142135623730951},"151":{"tf":1.0},"157":{"tf":1.0},"169":{"tf":1.0},"17":{"tf":1.0},"196":{"tf":1.4142135623730951},"198":{"tf":2.0},"199":{"tf":1.0},"200":{"tf":1.0},"208":{"tf":1.4142135623730951},"217":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.7320508075688772},"232":{"tf":1.0},"233":{"tf":1.0},"234":{"tf":2.6457513110645907},"238":{"tf":1.0},"240":{"tf":1.0},"241":{"tf":2.23606797749979},"246":{"tf":1.0},"247":{"tf":1.4142135623730951},"249":{"tf":1.0},"250":{"tf":4.123105625617661},"251":{"tf":1.4142135623730951},"257":{"tf":1.0},"270":{"tf":1.0},"282":{"tf":1.0},"335":{"tf":1.0},"348":{"tf":1.0},"354":{"tf":1.0},"363":{"tf":1.0},"369":{"tf":1.4142135623730951},"393":{"tf":1.0},"397":{"tf":1.0},"413":{"tf":1.0},"456":{"tf":1.7320508075688772},"458":{"tf":1.4142135623730951},"460":{"tf":2.0},"461":{"tf":1.4142135623730951},"463":{"tf":1.4142135623730951},"465":{"tf":1.4142135623730951},"466":{"tf":1.4142135623730951},"467":{"tf":2.0},"48":{"tf":1.0},"480":{"tf":1.7320508075688772},"492":{"tf":1.0},"494":{"tf":3.1622776601683795},"498":{"tf":1.7320508075688772},"505":{"tf":1.0},"511":{"tf":1.0},"520":{"tf":1.4142135623730951},"55":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":2.449489742783178},"77":{"tf":1.0},"83":{"tf":1.4142135623730951},"84":{"tf":1.0},"86":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":2,"docs":{"140":{"tf":1.0},"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"498":{"tf":1.0}}}},"df":0,"docs":{}},"v":{"1":{"df":1,"docs":{"56":{"tf":1.0}}},"2":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"346":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"100":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"274":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"282":{"tf":1.0}}}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"351":{"tf":1.0},"354":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":36,"docs":{"136":{"tf":1.0},"140":{"tf":1.7320508075688772},"154":{"tf":1.0},"167":{"tf":1.0},"170":{"tf":1.0},"178":{"tf":1.0},"179":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.7320508075688772},"288":{"tf":1.4142135623730951},"291":{"tf":1.4142135623730951},"301":{"tf":1.0},"303":{"tf":1.4142135623730951},"308":{"tf":1.0},"324":{"tf":1.0},"327":{"tf":2.449489742783178},"334":{"tf":1.0},"337":{"tf":1.4142135623730951},"354":{"tf":1.4142135623730951},"357":{"tf":1.0},"380":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"413":{"tf":1.0},"492":{"tf":2.0},"493":{"tf":2.0},"494":{"tf":1.7320508075688772},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.4142135623730951},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0},"511":{"tf":1.7320508075688772},"512":{"tf":1.0}},"s":{".":{"b":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"290":{"tf":1.0},"302":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"301":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":12,"docs":{"109":{"tf":1.0},"134":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.0},"323":{"tf":2.8284271247461903},"335":{"tf":1.0},"345":{"tf":1.0},"360":{"tf":1.0},"401":{"tf":2.23606797749979},"51":{"tf":1.0},"74":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.0},"285":{"tf":1.0},"334":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}}},"g":{"df":0,"docs":{},"r":{"a":{"d":{"df":1,"docs":{"142":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"289":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"262":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"279":{"tf":1.0},"303":{"tf":1.0},"322":{"tf":1.0},"400":{"tf":1.0},"406":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"i":{"df":2,"docs":{"139":{"tf":1.0},"477":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":15,"docs":{"144":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"234":{"tf":1.0},"338":{"tf":1.0},"350":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"358":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.4142135623730951},"73":{"tf":1.0},"79":{"tf":1.0}},"s":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":5,"docs":{"111":{"tf":1.0},"199":{"tf":1.0},"495":{"tf":1.4142135623730951},"56":{"tf":1.0},"80":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":8,"docs":{"18":{"tf":1.0},"290":{"tf":1.0},"337":{"tf":1.0},"350":{"tf":1.0},"356":{"tf":1.0},"361":{"tf":1.0},"494":{"tf":1.0},"96":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"156":{"tf":1.0},"494":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"512":{"tf":2.0}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"257":{"tf":1.0}},"e":{"(":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"293":{"tf":1.0},"324":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"237":{"tf":1.0},"277":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"s":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"i":{"b":{"df":3,"docs":{"107":{"tf":1.0},"136":{"tf":1.0},"337":{"tf":1.0}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":17,"docs":{"167":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.0},"241":{"tf":1.0},"326":{"tf":2.0},"492":{"tf":2.449489742783178},"493":{"tf":2.23606797749979},"494":{"tf":2.0},"495":{"tf":2.0},"496":{"tf":1.7320508075688772},"498":{"tf":1.7320508075688772},"500":{"tf":2.23606797749979},"501":{"tf":1.0},"502":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.4142135623730951},"514":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"267":{"tf":1.0},"293":{"tf":1.4142135623730951},"296":{"tf":1.0},"301":{"tf":1.0},"324":{"tf":1.7320508075688772},"335":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":21,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"126":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.4142135623730951},"15":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":1.0},"250":{"tf":1.4142135623730951},"313":{"tf":1.0},"320":{"tf":1.0},"330":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"384":{"tf":1.0},"395":{"tf":1.0},"412":{"tf":1.0},"466":{"tf":1.0},"47":{"tf":1.0},"502":{"tf":1.4142135623730951},"68":{"tf":1.0}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":15,"docs":{"104":{"tf":1.0},"17":{"tf":1.0},"201":{"tf":1.0},"225":{"tf":1.0},"241":{"tf":1.0},"256":{"tf":1.0},"257":{"tf":1.0},"282":{"tf":1.0},"30":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.0},"46":{"tf":1.0},"515":{"tf":1.0},"72":{"tf":1.0},"98":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":7,"docs":{"139":{"tf":1.0},"238":{"tf":1.0},"264":{"tf":1.0},"324":{"tf":1.0},"337":{"tf":1.0},"379":{"tf":1.0},"381":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"289":{"tf":1.0}}}}}}}},"v":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"304":{"tf":1.0}}}}}},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"289":{"tf":1.0}}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"337":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"19":{"tf":1.0},"285":{"tf":1.0}}}}}}},"df":1,"docs":{"133":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":2,"docs":{"307":{"tf":1.4142135623730951},"353":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":47,"docs":{"104":{"tf":1.4142135623730951},"109":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"117":{"tf":1.0},"120":{"tf":1.0},"124":{"tf":1.4142135623730951},"125":{"tf":2.23606797749979},"133":{"tf":1.0},"135":{"tf":1.0},"139":{"tf":1.0},"157":{"tf":1.0},"18":{"tf":1.0},"203":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.7320508075688772},"236":{"tf":1.0},"238":{"tf":1.7320508075688772},"244":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.4142135623730951},"251":{"tf":1.0},"26":{"tf":1.0},"282":{"tf":1.0},"289":{"tf":1.4142135623730951},"299":{"tf":1.0},"334":{"tf":1.0},"338":{"tf":1.0},"350":{"tf":1.4142135623730951},"354":{"tf":1.0},"356":{"tf":1.4142135623730951},"359":{"tf":1.0},"36":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"371":{"tf":1.4142135623730951},"375":{"tf":1.0},"391":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"480":{"tf":1.0},"524":{"tf":1.0},"59":{"tf":1.0},"64":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"76":{"tf":1.0}}}}}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"343":{"tf":1.0}}}}},"df":0,"docs":{}},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"346":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":5,"docs":{"12":{"tf":1.4142135623730951},"17":{"tf":1.0},"27":{"tf":1.7320508075688772},"36":{"tf":1.0},"40":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"136":{"tf":1.0}}}},"df":0,"docs":{}},"df":3,"docs":{"107":{"tf":1.0},"136":{"tf":1.0},"93":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":12,"docs":{"106":{"tf":1.0},"110":{"tf":1.4142135623730951},"117":{"tf":1.0},"133":{"tf":1.0},"140":{"tf":1.0},"285":{"tf":1.0},"299":{"tf":1.0},"302":{"tf":1.0},"307":{"tf":1.0},"346":{"tf":1.0},"372":{"tf":1.0},"43":{"tf":1.0}}}},"i":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"366":{"tf":1.0},"384":{"tf":1.0}},"i":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":9,"docs":{"288":{"tf":1.0},"289":{"tf":1.0},"292":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":2.23606797749979},"357":{"tf":2.23606797749979},"359":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"90":{"tf":1.0}},"s":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"263":{"tf":1.0},"354":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"r":{"df":2,"docs":{"140":{"tf":1.0},"222":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"214":{"tf":1.0},"512":{"tf":1.0},"70":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":6,"docs":{"143":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"339":{"tf":1.0},"4":{"tf":1.4142135623730951},"489":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":18,"docs":{"0":{"tf":1.0},"107":{"tf":1.0},"140":{"tf":1.0},"169":{"tf":1.0},"196":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"257":{"tf":1.0},"269":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"338":{"tf":1.0},"375":{"tf":1.0},"450":{"tf":1.0},"476":{"tf":1.0},"498":{"tf":1.0},"5":{"tf":1.0},"57":{"tf":1.0},"86":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"138":{"tf":1.0},"289":{"tf":1.0},"372":{"tf":1.0},"413":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":8,"docs":{"104":{"tf":1.0},"113":{"tf":1.0},"125":{"tf":1.0},"238":{"tf":1.0},"251":{"tf":1.0},"303":{"tf":1.4142135623730951},"333":{"tf":1.0},"36":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"142":{"tf":1.0},"143":{"tf":1.0},"157":{"tf":1.0},"285":{"tf":1.0},"383":{"tf":1.0}},"i":{"df":9,"docs":{"101":{"tf":1.0},"104":{"tf":1.0},"137":{"tf":1.0},"142":{"tf":1.0},"303":{"tf":1.0},"517":{"tf":1.0},"518":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":12,"docs":{"104":{"tf":1.4142135623730951},"115":{"tf":1.0},"116":{"tf":1.0},"226":{"tf":1.0},"233":{"tf":1.0},"238":{"tf":1.7320508075688772},"249":{"tf":1.4142135623730951},"250":{"tf":1.4142135623730951},"251":{"tf":1.0},"76":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}}}},"df":0,"docs":{},"k":{"df":1,"docs":{"289":{"tf":1.0}}},"p":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"203":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"257":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"90":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"281":{"tf":1.0},"502":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"282":{"tf":1.0}}}}},"o":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"238":{"tf":1.0}}}}}}},"c":{"df":14,"docs":{"104":{"tf":1.0},"124":{"tf":1.0},"129":{"tf":1.0},"141":{"tf":2.23606797749979},"215":{"tf":1.0},"231":{"tf":1.0},"287":{"tf":1.4142135623730951},"300":{"tf":1.0},"308":{"tf":1.4142135623730951},"327":{"tf":2.23606797749979},"334":{"tf":1.0},"337":{"tf":1.0},"356":{"tf":1.0},"43":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"234":{"tf":1.0},"357":{"tf":1.0},"372":{"tf":1.0}}}}},"s":{"/":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"/":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{".":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"3":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":1,"docs":{"3":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"345":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":1,"docs":{"338":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"237":{"tf":1.0}}}}}}}},":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":6,"docs":{"3":{"tf":1.0},"31":{"tf":1.0},"36":{"tf":1.0},"44":{"tf":1.0},"46":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":4,"docs":{"35":{"tf":1.0},"36":{"tf":1.0},"44":{"tf":1.0},"7":{"tf":1.0}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":3,"docs":{"2":{"tf":1.0},"28":{"tf":1.0},"6":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"34":{"tf":1.0},"36":{"tf":1.0},"46":{"tf":1.0},"7":{"tf":1.0}}}}}},"w":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"38":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"199":{"tf":1.0},"495":{"tf":1.0},"84":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"*":{"*":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"501":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":84,"docs":{"0":{"tf":1.7320508075688772},"1":{"tf":1.4142135623730951},"10":{"tf":1.0},"101":{"tf":1.0},"108":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.4142135623730951},"124":{"tf":1.0},"125":{"tf":1.0},"127":{"tf":1.4142135623730951},"128":{"tf":1.0},"130":{"tf":1.0},"134":{"tf":1.0},"14":{"tf":1.4142135623730951},"141":{"tf":1.4142135623730951},"154":{"tf":1.0},"198":{"tf":1.0},"2":{"tf":1.0},"202":{"tf":1.7320508075688772},"208":{"tf":1.0},"22":{"tf":1.0},"225":{"tf":1.0},"231":{"tf":1.0},"233":{"tf":1.0},"234":{"tf":1.4142135623730951},"240":{"tf":1.0},"241":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0},"26":{"tf":1.0},"267":{"tf":1.0},"27":{"tf":1.4142135623730951},"276":{"tf":1.0},"28":{"tf":1.4142135623730951},"285":{"tf":1.4142135623730951},"287":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"300":{"tf":1.7320508075688772},"308":{"tf":1.0},"314":{"tf":1.0},"33":{"tf":1.0},"332":{"tf":1.4142135623730951},"333":{"tf":1.4142135623730951},"334":{"tf":1.7320508075688772},"337":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"34":{"tf":1.0},"345":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"360":{"tf":1.0},"362":{"tf":1.4142135623730951},"392":{"tf":1.0},"396":{"tf":1.0},"4":{"tf":1.0},"409":{"tf":1.0},"412":{"tf":1.0},"438":{"tf":1.0},"456":{"tf":1.0},"46":{"tf":1.7320508075688772},"462":{"tf":1.4142135623730951},"472":{"tf":1.0},"480":{"tf":1.0},"5":{"tf":1.4142135623730951},"501":{"tf":1.0},"520":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0},"7":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"89":{"tf":1.0},"9":{"tf":1.0},"91":{"tf":1.0}}}}}},"s":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"124":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":7,"docs":{"321":{"tf":1.0},"324":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0},"500":{"tf":1.4142135623730951},"96":{"tf":1.0},"98":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"n":{"\'":{"df":0,"docs":{},"t":{"df":2,"docs":{"142":{"tf":1.0},"356":{"tf":1.0}}}},"df":0,"docs":{}}}},"n":{"\'":{"df":0,"docs":{},"t":{"df":12,"docs":{"101":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"148":{"tf":1.0},"149":{"tf":1.0},"150":{"tf":1.0},"156":{"tf":1.0},"307":{"tf":1.4142135623730951},"36":{"tf":1.0},"372":{"tf":1.0},"391":{"tf":1.0},"469":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"df":13,"docs":{"127":{"tf":1.0},"314":{"tf":1.0},"317":{"tf":1.0},"321":{"tf":1.4142135623730951},"324":{"tf":2.0},"326":{"tf":1.0},"327":{"tf":1.0},"398":{"tf":1.0},"462":{"tf":1.0},"466":{"tf":1.0},"500":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":6,"docs":{"134":{"tf":1.0},"267":{"tf":1.0},"285":{"tf":1.0},"294":{"tf":1.0},"335":{"tf":1.0},"339":{"tf":1.0}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":4,"docs":{"181":{"tf":1.0},"351":{"tf":1.0},"357":{"tf":2.0},"360":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"a":{"df":0,"docs":{},"w":{"df":1,"docs":{"151":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":4,"docs":{"155":{"tf":1.0},"173":{"tf":1.4142135623730951},"257":{"tf":1.0},"259":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":3,"docs":{"126":{"tf":1.0},"293":{"tf":1.0},"302":{"tf":1.0}},"n":{"df":12,"docs":{"109":{"tf":1.0},"133":{"tf":1.4142135623730951},"157":{"tf":1.0},"17":{"tf":1.0},"284":{"tf":1.4142135623730951},"297":{"tf":1.0},"298":{"tf":1.4142135623730951},"353":{"tf":1.0},"354":{"tf":1.0},"51":{"tf":1.0},"64":{"tf":1.0},"89":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"98":{"tf":1.0}}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"321":{"tf":1.0},"405":{"tf":1.0}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"243":{"tf":1.0},"341":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":10,"docs":{"101":{"tf":1.0},"116":{"tf":1.0},"127":{"tf":1.0},"130":{"tf":1.0},"134":{"tf":1.7320508075688772},"234":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0},"333":{"tf":1.0},"61":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"203":{"tf":1.0},"238":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":8,"docs":{"295":{"tf":1.0},"324":{"tf":1.0},"326":{"tf":1.0},"333":{"tf":1.0},"496":{"tf":1.4142135623730951},"500":{"tf":1.0},"87":{"tf":1.0},"90":{"tf":1.0}}}},"a":{"c":{"df":0,"docs":{},"h":{"df":12,"docs":{"121":{"tf":1.0},"236":{"tf":1.0},"238":{"tf":1.4142135623730951},"243":{"tf":1.0},"244":{"tf":1.0},"250":{"tf":1.0},"314":{"tf":1.0},"357":{"tf":1.0},"409":{"tf":1.0},"502":{"tf":1.0},"95":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":7,"docs":{"134":{"tf":1.0},"139":{"tf":1.0},"157":{"tf":1.0},"279":{"tf":1.0},"309":{"tf":1.0},"332":{"tf":1.0},"334":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":6,"docs":{"140":{"tf":1.0},"157":{"tf":1.0},"238":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.0},"372":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"238":{"tf":1.0},"250":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"251":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":6,"docs":{"174":{"tf":1.4142135623730951},"191":{"tf":1.0},"215":{"tf":1.0},"304":{"tf":1.7320508075688772},"475":{"tf":1.0},"477":{"tf":1.0}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":4,"docs":{"333":{"tf":1.0},"334":{"tf":1.0},"338":{"tf":1.0},"343":{"tf":1.0}}}}}}}}}},"d":{"df":0,"docs":{},"g":{"df":4,"docs":{"15":{"tf":1.0},"261":{"tf":1.7320508075688772},"56":{"tf":1.0},"70":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"261":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"t":{"df":14,"docs":{"143":{"tf":1.4142135623730951},"170":{"tf":1.0},"178":{"tf":1.0},"202":{"tf":1.4142135623730951},"204":{"tf":1.0},"212":{"tf":1.0},"220":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"300":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"40":{"tf":1.0},"63":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"\'":{"df":1,"docs":{"4":{"tf":1.0}}},"df":11,"docs":{"143":{"tf":1.0},"170":{"tf":1.0},"202":{"tf":1.7320508075688772},"203":{"tf":1.0},"220":{"tf":1.0},"338":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"39":{"tf":1.4142135623730951}}}}}}},"df":1,"docs":{"139":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":8,"docs":{"197":{"tf":1.0},"244":{"tf":1.0},"350":{"tf":1.0},"365":{"tf":1.0},"368":{"tf":1.0},"371":{"tf":1.0},"57":{"tf":1.0},"88":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"i":{"df":3,"docs":{"122":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0}}}},"df":0,"docs":{}}}},"m":{"b":{"df":1,"docs":{"354":{"tf":1.0}},"e":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"263":{"tf":1.0},"354":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"354":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"c":{"!":{"[":{"\\"":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":1,"docs":{"352":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}},"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"146":{"tf":1.0}}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":5,"docs":{"133":{"tf":1.0},"266":{"tf":1.0},"293":{"tf":1.0},"334":{"tf":1.4142135623730951},"354":{"tf":1.0}}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":8,"docs":{"133":{"tf":1.7320508075688772},"134":{"tf":1.0},"138":{"tf":1.4142135623730951},"263":{"tf":1.0},"293":{"tf":1.0},"354":{"tf":2.23606797749979},"356":{"tf":1.0},"360":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{":":{":":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"u":{"d":{"df":2,"docs":{"293":{"tf":1.0},"354":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"293":{"tf":1.0},"354":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"m":{"a":{"df":2,"docs":{"293":{"tf":1.0},"354":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"i":{"df":2,"docs":{"293":{"tf":1.0},"354":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}},"s":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"354":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"(":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{"!":{"[":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"]":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"273":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":47,"docs":{"109":{"tf":2.23606797749979},"133":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.4142135623730951},"138":{"tf":1.7320508075688772},"140":{"tf":1.4142135623730951},"149":{"tf":1.0},"167":{"tf":1.0},"180":{"tf":1.0},"182":{"tf":1.4142135623730951},"200":{"tf":1.0},"21":{"tf":1.4142135623730951},"212":{"tf":1.0},"25":{"tf":1.0},"255":{"tf":1.0},"259":{"tf":1.0},"263":{"tf":1.0},"266":{"tf":1.0},"27":{"tf":1.0},"279":{"tf":1.4142135623730951},"281":{"tf":1.7320508075688772},"285":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":2.23606797749979},"290":{"tf":1.0},"291":{"tf":1.4142135623730951},"292":{"tf":1.0},"293":{"tf":1.4142135623730951},"299":{"tf":1.4142135623730951},"302":{"tf":1.0},"303":{"tf":1.4142135623730951},"332":{"tf":1.0},"333":{"tf":1.4142135623730951},"334":{"tf":1.4142135623730951},"337":{"tf":1.0},"349":{"tf":1.4142135623730951},"350":{"tf":2.0},"351":{"tf":1.4142135623730951},"352":{"tf":2.0},"354":{"tf":2.23606797749979},"356":{"tf":1.7320508075688772},"361":{"tf":1.7320508075688772},"362":{"tf":1.4142135623730951},"430":{"tf":1.0},"51":{"tf":1.4142135623730951},"89":{"tf":1.0},"90":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"r":{"a":{"c":{"df":1,"docs":{"144":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"151":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"324":{"tf":1.0},"478":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":26,"docs":{"143":{"tf":1.0},"167":{"tf":1.7320508075688772},"178":{"tf":1.0},"182":{"tf":1.0},"212":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.4142135623730951},"289":{"tf":1.7320508075688772},"291":{"tf":1.4142135623730951},"292":{"tf":1.4142135623730951},"299":{"tf":1.0},"302":{"tf":1.0},"327":{"tf":1.4142135623730951},"330":{"tf":1.0},"333":{"tf":1.4142135623730951},"334":{"tf":1.4142135623730951},"337":{"tf":1.0},"350":{"tf":1.0},"354":{"tf":1.7320508075688772},"369":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"413":{"tf":1.0},"492":{"tf":1.0},"70":{"tf":1.0},"97":{"tf":1.7320508075688772}},"e":{"_":{"df":0,"docs":{},"m":{"c":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"97":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"117":{"tf":1.0},"118":{"tf":1.0},"238":{"tf":1.0}}}}}}},"d":{"]":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"238":{"tf":1.4142135623730951},"324":{"tf":1.0},"76":{"tf":1.0}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"91":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"234":{"tf":1.0},"250":{"tf":1.0},"306":{"tf":1.0}}}}}}}},"df":5,"docs":{"133":{"tf":1.0},"146":{"tf":1.0},"288":{"tf":1.0},"351":{"tf":1.0},"354":{"tf":1.7320508075688772}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"c":{"df":3,"docs":{"334":{"tf":1.4142135623730951},"377":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"255":{"tf":1.4142135623730951},"271":{"tf":1.0},"275":{"tf":1.0},"276":{"tf":1.0},"360":{"tf":1.0},"377":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"12":{"tf":1.0},"135":{"tf":1.0},"143":{"tf":1.7320508075688772},"413":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"104":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"350":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"285":{"tf":1.0},"288":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"197":{"tf":1.0},"28":{"tf":1.0}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":8,"docs":{"118":{"tf":1.0},"196":{"tf":1.0},"203":{"tf":1.0},"210":{"tf":1.0},"238":{"tf":2.23606797749979},"247":{"tf":1.0},"59":{"tf":1.0},"76":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":16,"docs":{"237":{"tf":1.0},"267":{"tf":1.0},"277":{"tf":1.0},"287":{"tf":1.0},"295":{"tf":1.4142135623730951},"321":{"tf":1.0},"324":{"tf":1.0},"326":{"tf":1.0},"333":{"tf":1.4142135623730951},"334":{"tf":1.4142135623730951},"337":{"tf":1.4142135623730951},"492":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"498":{"tf":1.4142135623730951},"500":{"tf":1.0}}}},"v":{"df":5,"docs":{"185":{"tf":1.0},"307":{"tf":1.4142135623730951},"337":{"tf":1.0},"449":{"tf":1.0},"490":{"tf":1.0}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":17,"docs":{"168":{"tf":1.0},"18":{"tf":1.4142135623730951},"182":{"tf":1.0},"19":{"tf":1.0},"285":{"tf":1.0},"289":{"tf":1.0},"299":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":1.0},"307":{"tf":1.7320508075688772},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.4142135623730951},"346":{"tf":1.0},"418":{"tf":1.0},"477":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"289":{"tf":1.0},"300":{"tf":1.0}}}}}}}},"q":{"df":1,"docs":{"324":{"tf":1.0}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"341":{"tf":1.0}}}}}}},"r":{"(":{"\\"":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"\\"":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"148":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"k":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"i":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"148":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"(":{"\\"":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}}}}}},"d":{"a":{"df":0,"docs":{},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"237":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"277":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"277":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"277":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"277":{"tf":1.0}}}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"237":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":58,"docs":{"108":{"tf":2.23606797749979},"129":{"tf":1.0},"134":{"tf":1.7320508075688772},"139":{"tf":2.0},"142":{"tf":1.4142135623730951},"148":{"tf":1.0},"153":{"tf":1.0},"155":{"tf":1.0},"157":{"tf":1.0},"189":{"tf":1.0},"200":{"tf":1.0},"207":{"tf":1.0},"209":{"tf":1.4142135623730951},"213":{"tf":1.4142135623730951},"218":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.7320508075688772},"236":{"tf":1.0},"237":{"tf":2.8284271247461903},"238":{"tf":1.4142135623730951},"243":{"tf":1.0},"244":{"tf":2.6457513110645907},"259":{"tf":1.0},"267":{"tf":1.0},"270":{"tf":1.0},"277":{"tf":2.449489742783178},"295":{"tf":1.4142135623730951},"296":{"tf":1.4142135623730951},"332":{"tf":1.4142135623730951},"333":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":2.23606797749979},"342":{"tf":1.0},"346":{"tf":1.4142135623730951},"357":{"tf":1.0},"452":{"tf":1.0},"454":{"tf":1.4142135623730951},"457":{"tf":1.4142135623730951},"461":{"tf":3.0},"463":{"tf":1.4142135623730951},"470":{"tf":1.0},"471":{"tf":1.0},"492":{"tf":2.449489742783178},"493":{"tf":1.0},"495":{"tf":1.4142135623730951},"496":{"tf":2.6457513110645907},"512":{"tf":1.0},"513":{"tf":1.0},"514":{"tf":2.23606797749979},"515":{"tf":1.4142135623730951},"517":{"tf":1.0},"52":{"tf":2.0},"55":{"tf":1.0},"74":{"tf":2.0},"80":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951},"90":{"tf":2.0}},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"470":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"m":{"d":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"2":{"df":1,"docs":{"496":{"tf":1.0}}},"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}}},"df":3,"docs":{"244":{"tf":1.0},"270":{"tf":1.0},"496":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"s":{"c":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"140":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"365":{"tf":1.0},"453":{"tf":1.0}}}}}}}},"t":{"c":{"df":7,"docs":{"324":{"tf":1.4142135623730951},"330":{"tf":1.0},"352":{"tf":1.0},"398":{"tf":1.0},"473":{"tf":1.0},"66":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":3,"docs":{"332":{"tf":1.0},"350":{"tf":1.0},"501":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"108":{"tf":1.0},"238":{"tf":1.0}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"121":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":4,"docs":{"109":{"tf":1.0},"140":{"tf":1.4142135623730951},"366":{"tf":1.0},"89":{"tf":1.0}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"404":{"tf":1.0}}}}}}}}},"i":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"241":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":6,"docs":{"156":{"tf":1.4142135623730951},"250":{"tf":1.0},"301":{"tf":1.0},"70":{"tf":1.0},"83":{"tf":1.0},"93":{"tf":1.0}}}},"v":{"df":3,"docs":{"101":{"tf":1.0},"136":{"tf":1.0},"141":{"tf":1.0}}}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":5,"docs":{"108":{"tf":1.0},"142":{"tf":1.7320508075688772},"247":{"tf":1.0},"469":{"tf":1.0},"90":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":68,"docs":{"108":{"tf":1.0},"109":{"tf":1.0},"111":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"16":{"tf":1.0},"167":{"tf":1.0},"21":{"tf":1.0},"238":{"tf":1.0},"247":{"tf":1.0},"264":{"tf":1.0},"28":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"311":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.4142135623730951},"345":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"357":{"tf":1.0},"36":{"tf":1.4142135623730951},"381":{"tf":1.0},"424":{"tf":1.0},"479":{"tf":1.0},"492":{"tf":1.4142135623730951},"493":{"tf":1.4142135623730951},"494":{"tf":1.4142135623730951},"495":{"tf":1.4142135623730951},"496":{"tf":1.4142135623730951},"497":{"tf":1.4142135623730951},"498":{"tf":1.4142135623730951},"500":{"tf":1.7320508075688772},"501":{"tf":1.4142135623730951},"502":{"tf":1.4142135623730951},"504":{"tf":1.4142135623730951},"511":{"tf":1.0},"512":{"tf":1.0},"515":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"68":{"tf":1.0},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.7320508075688772},"76":{"tf":1.0},"77":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":7,"docs":{"231":{"tf":1.0},"251":{"tf":1.0},"359":{"tf":1.4142135623730951},"367":{"tf":1.4142135623730951},"368":{"tf":1.0},"371":{"tf":1.0},"90":{"tf":1.0}}},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"90":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"u":{"d":{"df":2,"docs":{"215":{"tf":1.0},"324":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":11,"docs":{"123":{"tf":1.0},"134":{"tf":1.0},"333":{"tf":1.0},"477":{"tf":1.0},"492":{"tf":1.0},"498":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0},"77":{"tf":2.0},"84":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"b":{"df":1,"docs":{"80":{"tf":1.0}}},"df":0,"docs":{}},"df":17,"docs":{"15":{"tf":1.0},"156":{"tf":1.0},"301":{"tf":1.0},"321":{"tf":1.4142135623730951},"323":{"tf":1.0},"324":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"345":{"tf":1.0},"36":{"tf":1.0},"383":{"tf":1.0},"399":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.0},"413":{"tf":1.0},"466":{"tf":1.0},"476":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"234":{"tf":1.0},"337":{"tf":1.0},"391":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"139":{"tf":1.0},"2":{"tf":1.0},"234":{"tf":1.0},"93":{"tf":1.0}}},"t":{"df":1,"docs":{"77":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"120":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"199":{"tf":1.0},"240":{"tf":1.0},"357":{"tf":1.0},"495":{"tf":1.4142135623730951},"56":{"tf":1.0},"73":{"tf":1.0},"84":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"139":{"tf":1.0},"140":{"tf":1.0},"321":{"tf":1.0},"337":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"231":{"tf":1.0},"479":{"tf":1.0}}},"s":{"df":1,"docs":{"409":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"335":{"tf":1.0}}}}},"df":0,"docs":{}}},"<":{"df":0,"docs":{},"p":{"df":1,"docs":{"335":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":32,"docs":{"134":{"tf":1.4142135623730951},"147":{"tf":1.0},"170":{"tf":1.4142135623730951},"182":{"tf":1.7320508075688772},"188":{"tf":1.0},"204":{"tf":1.7320508075688772},"22":{"tf":1.0},"231":{"tf":1.4142135623730951},"257":{"tf":1.4142135623730951},"258":{"tf":1.0},"259":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"276":{"tf":1.0},"292":{"tf":1.7320508075688772},"295":{"tf":1.0},"299":{"tf":1.7320508075688772},"301":{"tf":1.0},"303":{"tf":1.7320508075688772},"304":{"tf":2.6457513110645907},"314":{"tf":1.0},"324":{"tf":1.0},"334":{"tf":1.7320508075688772},"335":{"tf":2.0},"337":{"tf":1.4142135623730951},"346":{"tf":1.0},"396":{"tf":1.0},"400":{"tf":1.0},"439":{"tf":1.0},"467":{"tf":2.449489742783178},"480":{"tf":1.4142135623730951},"498":{"tf":1.7320508075688772},"91":{"tf":1.0}}}},"s":{"df":1,"docs":{"446":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"295":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":6,"docs":{"199":{"tf":1.0},"330":{"tf":1.0},"399":{"tf":1.0},"495":{"tf":1.7320508075688772},"56":{"tf":1.0},"82":{"tf":1.4142135623730951}}},"df":0,"docs":{},"s":{"df":6,"docs":{"30":{"tf":1.0},"325":{"tf":1.0},"326":{"tf":1.0},"330":{"tf":1.0},"402":{"tf":1.0},"404":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"342":{"tf":1.0},"35":{"tf":1.0},"350":{"tf":1.0},"446":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}}}},"t":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":3,"docs":{"137":{"tf":1.0},"264":{"tf":1.0},"324":{"tf":2.6457513110645907}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"f":{"3":{"2":{"df":1,"docs":{"261":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":8,"docs":{"139":{"tf":2.0},"157":{"tf":1.0},"190":{"tf":1.0},"224":{"tf":1.0},"237":{"tf":1.4142135623730951},"333":{"tf":1.4142135623730951},"337":{"tf":1.0},"514":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"134":{"tf":1.0},"139":{"tf":1.0},"90":{"tf":1.4142135623730951}}}}}},"l":{"df":0,"docs":{},"l":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"376":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"303":{"tf":1.0}},"i":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"153":{"tf":1.0},"231":{"tf":1.0},"496":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":6,"docs":{"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":2.0},"292":{"tf":1.0},"327":{"tf":1.0},"407":{"tf":1.0}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"334":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"df":8,"docs":{"100":{"tf":1.0},"139":{"tf":1.4142135623730951},"157":{"tf":1.0},"289":{"tf":1.7320508075688772},"351":{"tf":1.0},"356":{"tf":1.0},"359":{"tf":1.0},"445":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"b":{"df":34,"docs":{"109":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"135":{"tf":1.0},"147":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"181":{"tf":1.7320508075688772},"182":{"tf":1.0},"212":{"tf":1.0},"263":{"tf":1.0},"281":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"299":{"tf":1.0},"302":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.4142135623730951},"348":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.4142135623730951},"353":{"tf":1.4142135623730951},"354":{"tf":1.7320508075688772},"356":{"tf":1.4142135623730951},"357":{"tf":1.7320508075688772},"358":{"tf":1.0},"359":{"tf":1.7320508075688772},"360":{"tf":1.0},"362":{"tf":1.0},"393":{"tf":1.0},"432":{"tf":1.0},"51":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0}},"e":{"d":{":":{":":{"df":0,"docs":{},"{":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"263":{"tf":1.0},"354":{"tf":1.7320508075688772},"360":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\\"":{"b":{"a":{"a":{"df":0,"docs":{},"i":{"/":{"b":{"df":0,"docs":{},"g":{"df":1,"docs":{"133":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"149":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"df":2,"docs":{"121":{"tf":1.0},"125":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"202":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":33,"docs":{"107":{"tf":1.7320508075688772},"135":{"tf":1.0},"136":{"tf":1.7320508075688772},"141":{"tf":1.0},"142":{"tf":1.0},"166":{"tf":2.23606797749979},"167":{"tf":2.6457513110645907},"175":{"tf":1.4142135623730951},"181":{"tf":1.4142135623730951},"241":{"tf":1.0},"252":{"tf":1.0},"257":{"tf":1.0},"259":{"tf":1.0},"264":{"tf":1.0},"28":{"tf":1.0},"301":{"tf":1.0},"306":{"tf":1.0},"327":{"tf":1.0},"329":{"tf":1.4142135623730951},"360":{"tf":1.4142135623730951},"371":{"tf":1.4142135623730951},"385":{"tf":1.0},"388":{"tf":1.0},"396":{"tf":1.4142135623730951},"404":{"tf":1.0},"406":{"tf":1.0},"413":{"tf":1.0},"46":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"93":{"tf":1.0},"96":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"281":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"d":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":5,"docs":{"139":{"tf":1.0},"157":{"tf":1.0},"346":{"tf":1.0},"356":{"tf":1.0},"361":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"372":{"tf":1.0},"381":{"tf":1.0}}}},"df":0,"docs":{}}},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"100":{"tf":1.0},"314":{"tf":1.0},"396":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":17,"docs":{"287":{"tf":1.4142135623730951},"295":{"tf":1.0},"296":{"tf":1.7320508075688772},"308":{"tf":1.0},"321":{"tf":1.4142135623730951},"323":{"tf":2.449489742783178},"324":{"tf":1.4142135623730951},"327":{"tf":1.0},"328":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.4142135623730951},"399":{"tf":1.0},"401":{"tf":1.7320508075688772},"407":{"tf":1.0},"411":{"tf":1.0},"514":{"tf":1.0},"515":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{"4":{"2":{"df":1,"docs":{"264":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},":":{"/":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{".":{"d":{"b":{"df":1,"docs":{"177":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":29,"docs":{"107":{"tf":1.0},"136":{"tf":1.0},"139":{"tf":1.0},"143":{"tf":1.4142135623730951},"144":{"tf":1.0},"202":{"tf":1.0},"224":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"270":{"tf":1.0},"280":{"tf":1.4142135623730951},"284":{"tf":1.0},"298":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.0},"300":{"tf":1.0},"31":{"tf":1.0},"310":{"tf":1.0},"324":{"tf":1.0},"333":{"tf":1.0},"366":{"tf":1.0},"379":{"tf":1.4142135623730951},"389":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.4142135623730951},"498":{"tf":1.0},"52":{"tf":1.0},"6":{"tf":1.0},"63":{"tf":1.0}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":44,"docs":{"100":{"tf":1.0},"135":{"tf":1.0},"140":{"tf":1.4142135623730951},"166":{"tf":1.0},"167":{"tf":1.4142135623730951},"178":{"tf":1.0},"20":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.0},"259":{"tf":1.0},"269":{"tf":1.7320508075688772},"279":{"tf":1.0},"281":{"tf":1.4142135623730951},"287":{"tf":1.4142135623730951},"288":{"tf":1.0},"289":{"tf":1.0},"291":{"tf":1.0},"295":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.4142135623730951},"323":{"tf":1.4142135623730951},"333":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.4142135623730951},"369":{"tf":2.449489742783178},"371":{"tf":1.7320508075688772},"372":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.4142135623730951},"384":{"tf":1.0},"387":{"tf":1.4142135623730951},"401":{"tf":1.0},"426":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"63":{"tf":1.4142135623730951},"86":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"262":{"tf":1.0},"373":{"tf":1.0},"392":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\\"":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"d":{"/":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"298":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"m":{"df":1,"docs":{"337":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"272":{"tf":1.0}}},"df":0,"docs":{}}}}},"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"273":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":8,"docs":{"137":{"tf":1.0},"142":{"tf":1.0},"200":{"tf":1.0},"279":{"tf":1.0},"322":{"tf":1.0},"326":{"tf":1.0},"465":{"tf":1.0},"492":{"tf":1.0}}}}}},"n":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"325":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"324":{"tf":1.0},"325":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"y":{"_":{"df":0,"docs":{},"i":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"75":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"325":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":39,"docs":{"108":{"tf":1.4142135623730951},"114":{"tf":1.0},"118":{"tf":1.0},"129":{"tf":1.4142135623730951},"134":{"tf":1.0},"142":{"tf":2.23606797749979},"144":{"tf":1.0},"157":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.0},"223":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"258":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":2.0},"325":{"tf":1.7320508075688772},"326":{"tf":1.0},"330":{"tf":1.0},"350":{"tf":1.7320508075688772},"396":{"tf":1.0},"402":{"tf":1.7320508075688772},"404":{"tf":1.0},"407":{"tf":1.4142135623730951},"454":{"tf":1.0},"461":{"tf":1.0},"465":{"tf":1.0},"469":{"tf":1.0},"473":{"tf":1.0},"480":{"tf":1.0},"500":{"tf":2.23606797749979},"501":{"tf":1.4142135623730951},"502":{"tf":1.0},"512":{"tf":1.4142135623730951},"53":{"tf":1.0},"70":{"tf":1.0},"90":{"tf":1.7320508075688772},"96":{"tf":1.0},"99":{"tf":2.0}}},"df":0,"docs":{},"e":{"df":1,"docs":{"371":{"tf":1.0}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"238":{"tf":1.4142135623730951}}}}}},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":18,"docs":{"0":{"tf":1.0},"100":{"tf":1.0},"135":{"tf":1.0},"151":{"tf":1.0},"157":{"tf":1.0},"181":{"tf":1.0},"192":{"tf":1.0},"197":{"tf":1.0},"226":{"tf":1.0},"237":{"tf":1.0},"321":{"tf":1.0},"350":{"tf":1.0},"353":{"tf":1.4142135623730951},"357":{"tf":1.0},"409":{"tf":1.0},"47":{"tf":1.0},"65":{"tf":1.0},"80":{"tf":1.0}}}}},"t":{"df":1,"docs":{"67":{"tf":1.0}}},"x":{"df":10,"docs":{"104":{"tf":1.0},"108":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"238":{"tf":2.0},"247":{"tf":1.7320508075688772},"500":{"tf":1.0},"501":{"tf":1.7320508075688772},"76":{"tf":1.0},"96":{"tf":1.0}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"278":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"167":{"tf":1.0},"306":{"tf":1.0},"328":{"tf":1.0},"406":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":8,"docs":{"314":{"tf":1.0},"316":{"tf":1.0},"325":{"tf":1.0},"396":{"tf":1.0},"402":{"tf":1.0},"502":{"tf":1.4142135623730951},"98":{"tf":1.0},"99":{"tf":1.0}},"s":{":":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"*":{"*":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"502":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":4,"docs":{"314":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":1.0},"396":{"tf":1.0}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"30":{"tf":1.0},"45":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"\\\\":{"df":0,"docs":{},"n":{"3":{"df":1,"docs":{"493":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"l":{"df":11,"docs":{"110":{"tf":1.0},"133":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"250":{"tf":1.4142135623730951},"299":{"tf":1.0},"332":{"tf":1.0},"350":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.0},"64":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"w":{"df":3,"docs":{"27":{"tf":1.0},"275":{"tf":1.0},"286":{"tf":1.0}}}}},"m":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{"&":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"!":{"(":{"\\"":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"324":{"tf":1.4142135623730951}}},"n":{"df":18,"docs":{"133":{"tf":1.4142135623730951},"139":{"tf":1.4142135623730951},"149":{"tf":1.4142135623730951},"238":{"tf":1.0},"262":{"tf":2.0},"263":{"tf":1.7320508075688772},"293":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.0},"322":{"tf":1.4142135623730951},"323":{"tf":1.4142135623730951},"324":{"tf":5.0990195135927845},"325":{"tf":1.7320508075688772},"329":{"tf":2.0},"335":{"tf":1.4142135623730951},"354":{"tf":3.3166247903554},"373":{"tf":1.7320508075688772},"75":{"tf":1.0}}},"o":{"c":{"df":0,"docs":{},"u":{"df":1,"docs":{"64":{"tf":1.0}},"s":{"df":4,"docs":{"138":{"tf":1.4142135623730951},"241":{"tf":1.0},"344":{"tf":1.0},"466":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"108":{"tf":1.0},"111":{"tf":1.0},"128":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":19,"docs":{"107":{"tf":1.0},"121":{"tf":1.0},"123":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"14":{"tf":1.0},"142":{"tf":1.0},"156":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"230":{"tf":1.0},"238":{"tf":1.0},"241":{"tf":1.0},"243":{"tf":1.0},"284":{"tf":1.0},"36":{"tf":1.0},"462":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0}}}}}},"r":{"b":{"df":0,"docs":{},"i":{"d":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"153":{"tf":1.0},"280":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"251":{"tf":1.0}}}},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}},"k":{"df":1,"docs":{"46":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"t":{"\\"":{")":{".":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"(":{"\\"":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"335":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":28,"docs":{"143":{"tf":1.0},"150":{"tf":1.0},"170":{"tf":1.0},"202":{"tf":1.0},"220":{"tf":1.0},"225":{"tf":1.0},"258":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.4142135623730951},"270":{"tf":1.0},"292":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":1.7320508075688772},"324":{"tf":1.4142135623730951},"332":{"tf":1.0},"333":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"36":{"tf":1.0},"412":{"tf":1.0},"467":{"tf":1.0},"480":{"tf":1.0},"498":{"tf":2.23606797749979},"65":{"tf":1.0},"91":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}}}},"df":0,"docs":{}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"381":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"407":{"tf":1.0}}}},"df":19,"docs":{"108":{"tf":1.0},"134":{"tf":1.0},"188":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"231":{"tf":1.0},"237":{"tf":1.0},"247":{"tf":1.0},"277":{"tf":1.0},"42":{"tf":1.0},"461":{"tf":1.0},"465":{"tf":1.0},"466":{"tf":1.4142135623730951},"476":{"tf":1.0},"492":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0},"514":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":1,"docs":{"286":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"104":{"tf":1.0},"48":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":10,"docs":{"238":{"tf":1.0},"247":{"tf":1.4142135623730951},"350":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.0},"359":{"tf":1.7320508075688772},"365":{"tf":1.0},"366":{"tf":1.0},"371":{"tf":1.0},"90":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"241":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":12,"docs":{"136":{"tf":1.0},"157":{"tf":1.0},"255":{"tf":1.0},"262":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.4142135623730951},"401":{"tf":1.0},"49":{"tf":1.0},"52":{"tf":1.0},"63":{"tf":1.0},"93":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"m":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"133":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"293":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":11,"docs":{"136":{"tf":1.0},"137":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"225":{"tf":1.0},"264":{"tf":1.4142135623730951},"269":{"tf":1.0},"314":{"tf":1.0},"324":{"tf":3.0},"52":{"tf":1.0},"93":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":25,"docs":{"100":{"tf":1.0},"114":{"tf":1.0},"116":{"tf":1.0},"120":{"tf":1.0},"140":{"tf":1.0},"153":{"tf":1.0},"167":{"tf":1.4142135623730951},"225":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.0},"238":{"tf":1.4142135623730951},"241":{"tf":1.0},"250":{"tf":1.0},"278":{"tf":1.0},"279":{"tf":1.0},"314":{"tf":1.4142135623730951},"330":{"tf":1.0},"371":{"tf":1.0},"396":{"tf":1.4142135623730951},"404":{"tf":1.0},"412":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"73":{"tf":1.0},"94":{"tf":1.0}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"12":{"tf":1.0},"135":{"tf":1.0},"210":{"tf":1.0},"291":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.4142135623730951},"371":{"tf":1.0},"65":{"tf":1.0}}}}}}},"d":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"314":{"tf":1.0},"396":{"tf":1.0},"69":{"tf":1.0},"95":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"291":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"225":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"233":{"tf":1.0},"238":{"tf":1.0},"25":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":1.0}}}}}}},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"360":{"tf":1.4142135623730951},"371":{"tf":1.0},"388":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":27,"docs":{"104":{"tf":1.0},"123":{"tf":1.0},"125":{"tf":1.0},"137":{"tf":1.0},"167":{"tf":1.0},"196":{"tf":1.0},"199":{"tf":1.0},"214":{"tf":1.0},"258":{"tf":1.0},"279":{"tf":1.0},"3":{"tf":1.0},"304":{"tf":1.0},"310":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":1.0},"344":{"tf":1.4142135623730951},"350":{"tf":1.0},"361":{"tf":1.0},"495":{"tf":1.0},"502":{"tf":1.0},"511":{"tf":1.0},"55":{"tf":1.0},"61":{"tf":1.0},"72":{"tf":1.0},"77":{"tf":1.0},"79":{"tf":1.0},"91":{"tf":1.0}}}}},"t":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":5,"docs":{"114":{"tf":1.0},"197":{"tf":1.0},"202":{"tf":1.4142135623730951},"217":{"tf":1.0},"226":{"tf":1.0}}}},"i":{"df":0,"docs":{},"t":{"df":35,"docs":{"105":{"tf":1.0},"107":{"tf":2.0},"136":{"tf":2.0},"141":{"tf":1.4142135623730951},"143":{"tf":1.4142135623730951},"151":{"tf":1.0},"157":{"tf":1.0},"164":{"tf":1.0},"215":{"tf":1.7320508075688772},"255":{"tf":1.0},"262":{"tf":1.0},"269":{"tf":1.0},"300":{"tf":1.0},"310":{"tf":1.0},"365":{"tf":1.4142135623730951},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"369":{"tf":1.0},"371":{"tf":2.0},"375":{"tf":1.0},"376":{"tf":1.0},"383":{"tf":1.0},"387":{"tf":1.0},"401":{"tf":1.0},"47":{"tf":1.0},"484":{"tf":1.0},"49":{"tf":1.0},"52":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.4142135623730951},"86":{"tf":1.0},"93":{"tf":1.4142135623730951}},"h":{"df":0,"docs":{},"u":{"b":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"a":{"b":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":4,"docs":{"104":{"tf":1.0},"226":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"215":{"tf":1.4142135623730951}}}}}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"4":{"tf":1.0}}}}},"o":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"157":{"tf":1.0}}}},"df":3,"docs":{"101":{"tf":1.0},"381":{"tf":1.0},"471":{"tf":1.0}},"e":{"df":2,"docs":{"202":{"tf":1.0},"98":{"tf":1.0}}},"o":{"d":{"df":11,"docs":{"133":{"tf":1.0},"139":{"tf":1.0},"219":{"tf":1.0},"237":{"tf":1.0},"298":{"tf":1.0},"307":{"tf":1.0},"350":{"tf":1.0},"359":{"tf":1.7320508075688772},"366":{"tf":1.0},"470":{"tf":1.0},"67":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":1,"docs":{"104":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"u":{"df":1,"docs":{"351":{"tf":1.0}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"142":{"tf":1.0}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"142":{"tf":1.0},"90":{"tf":1.4142135623730951}}}}}}}}},"d":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"371":{"tf":1.0},"406":{"tf":1.0}}}},"df":0,"docs":{}}},"df":2,"docs":{"0":{"tf":1.0},"47":{"tf":1.0}},"n":{"d":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"329":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"136":{"tf":1.0},"409":{"tf":1.0}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"402":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"(":{"\\"":{"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"402":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"337":{"tf":1.0}}}},"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":2,"docs":{"272":{"tf":1.0},"273":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"407":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"407":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"498":{"tf":1.0}}}}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":3,"docs":{"266":{"tf":1.0},"293":{"tf":1.0},"334":{"tf":1.0}}}}}}}},"df":73,"docs":{"105":{"tf":1.0},"110":{"tf":1.0},"114":{"tf":1.0},"124":{"tf":1.0},"128":{"tf":1.0},"140":{"tf":1.4142135623730951},"142":{"tf":1.0},"144":{"tf":1.4142135623730951},"15":{"tf":1.0},"151":{"tf":1.4142135623730951},"17":{"tf":1.0},"198":{"tf":1.4142135623730951},"204":{"tf":1.4142135623730951},"212":{"tf":1.0},"231":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.4142135623730951},"258":{"tf":1.0},"259":{"tf":1.0},"261":{"tf":1.4142135623730951},"262":{"tf":1.7320508075688772},"266":{"tf":1.0},"269":{"tf":1.4142135623730951},"270":{"tf":1.0},"274":{"tf":1.4142135623730951},"279":{"tf":1.0},"281":{"tf":1.0},"282":{"tf":1.4142135623730951},"283":{"tf":1.0},"290":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"296":{"tf":1.0},"307":{"tf":1.0},"314":{"tf":1.4142135623730951},"325":{"tf":1.4142135623730951},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.4142135623730951},"365":{"tf":1.7320508075688772},"366":{"tf":1.4142135623730951},"367":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"369":{"tf":1.0},"373":{"tf":1.4142135623730951},"385":{"tf":1.7320508075688772},"422":{"tf":1.0},"456":{"tf":1.0},"467":{"tf":1.0},"47":{"tf":1.0},"480":{"tf":1.0},"487":{"tf":1.0},"49":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.7320508075688772},"497":{"tf":1.0},"498":{"tf":1.4142135623730951},"503":{"tf":1.0},"51":{"tf":1.0},"511":{"tf":1.0},"57":{"tf":1.7320508075688772},"63":{"tf":1.7320508075688772},"64":{"tf":1.0},"66":{"tf":1.0},"70":{"tf":1.7320508075688772},"73":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951},"86":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.4142135623730951},"92":{"tf":1.0}},"q":{"df":0,"docs":{},"l":{"df":8,"docs":{"249":{"tf":1.0},"250":{"tf":2.8284271247461903},"460":{"tf":2.23606797749979},"465":{"tf":1.0},"501":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"96":{"tf":1.0}}}},"s":{":":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"497":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":2,"docs":{"140":{"tf":1.0},"494":{"tf":1.0}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"120":{"tf":1.0}}}}}},"p":{"c":{"df":1,"docs":{"250":{"tf":2.449489742783178}}},"df":0,"docs":{}}},"u":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"267":{"tf":1.0},"335":{"tf":1.0},"502":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"d":{"df":20,"docs":{"130":{"tf":1.0},"131":{"tf":1.0},"157":{"tf":1.0},"159":{"tf":1.0},"16":{"tf":1.7320508075688772},"192":{"tf":1.0},"194":{"tf":1.0},"24":{"tf":1.0},"252":{"tf":1.4142135623730951},"282":{"tf":1.0},"311":{"tf":1.4142135623730951},"338":{"tf":1.0},"345":{"tf":1.0},"357":{"tf":1.0},"445":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"487":{"tf":1.0},"510":{"tf":1.0},"521":{"tf":1.0},"68":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":70,"docs":{"101":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":1.4142135623730951},"108":{"tf":1.0},"110":{"tf":2.0},"111":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.4142135623730951},"116":{"tf":1.0},"121":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"137":{"tf":1.0},"141":{"tf":1.7320508075688772},"142":{"tf":1.0},"144":{"tf":1.0},"156":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"213":{"tf":2.0},"231":{"tf":2.23606797749979},"241":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":3.0},"247":{"tf":1.0},"251":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"26":{"tf":1.4142135623730951},"269":{"tf":1.0},"270":{"tf":1.4142135623730951},"30":{"tf":1.0},"365":{"tf":1.0},"369":{"tf":1.0},"371":{"tf":1.4142135623730951},"372":{"tf":1.4142135623730951},"377":{"tf":2.0},"381":{"tf":1.0},"391":{"tf":1.0},"457":{"tf":1.4142135623730951},"46":{"tf":1.0},"461":{"tf":1.0},"462":{"tf":2.0},"463":{"tf":2.0},"466":{"tf":2.449489742783178},"471":{"tf":1.0},"48":{"tf":1.0},"480":{"tf":1.4142135623730951},"492":{"tf":1.4142135623730951},"496":{"tf":3.0},"498":{"tf":1.7320508075688772},"506":{"tf":1.0},"508":{"tf":1.0},"512":{"tf":1.0},"519":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.0},"61":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":2.0},"77":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.7320508075688772},"87":{"tf":1.0},"88":{"tf":2.0}},"e":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"497":{"tf":1.0}}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":1,"docs":{"498":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"k":{"df":0,"docs":{},"u":{"df":2,"docs":{"290":{"tf":1.0},"292":{"tf":1.0}}}}},"n":{"d":{"df":0,"docs":{},"l":{"df":39,"docs":{"108":{"tf":1.4142135623730951},"129":{"tf":1.0},"142":{"tf":1.4142135623730951},"155":{"tf":1.0},"200":{"tf":1.0},"207":{"tf":1.0},"209":{"tf":1.4142135623730951},"213":{"tf":1.4142135623730951},"218":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.4142135623730951},"237":{"tf":2.449489742783178},"238":{"tf":1.7320508075688772},"243":{"tf":1.0},"244":{"tf":2.0},"259":{"tf":1.0},"277":{"tf":1.0},"324":{"tf":1.0},"452":{"tf":1.0},"454":{"tf":1.4142135623730951},"457":{"tf":1.4142135623730951},"461":{"tf":2.449489742783178},"463":{"tf":1.4142135623730951},"470":{"tf":1.0},"471":{"tf":1.0},"492":{"tf":1.7320508075688772},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.4142135623730951},"496":{"tf":1.4142135623730951},"512":{"tf":1.0},"513":{"tf":1.0},"517":{"tf":1.0},"52":{"tf":1.7320508075688772},"55":{"tf":1.0},"74":{"tf":1.4142135623730951},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"90":{"tf":2.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{",":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"219":{"tf":1.0},"237":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"270":{"tf":1.0}}},"df":0,"docs":{}}},":":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"492":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"127":{"tf":1.0}}}},"i":{"df":1,"docs":{"46":{"tf":1.0}}}}},"r":{"d":{"c":{"df":0,"docs":{},"o":{"d":{"df":10,"docs":{"109":{"tf":1.0},"133":{"tf":1.4142135623730951},"146":{"tf":1.0},"149":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"298":{"tf":1.7320508075688772},"306":{"tf":1.0},"51":{"tf":1.0},"89":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"322":{"tf":1.0},"411":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":5,"docs":{"261":{"tf":1.4142135623730951},"321":{"tf":1.0},"324":{"tf":1.4142135623730951},"398":{"tf":1.0},"411":{"tf":1.0}}}}}},"df":1,"docs":{"279":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"140":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"104":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":5,"docs":{"173":{"tf":1.4142135623730951},"226":{"tf":2.0},"36":{"tf":1.4142135623730951},"46":{"tf":1.0},"480":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}},"s":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"290":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"291":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"202":{"tf":1.0},"93":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"317":{"tf":1.0},"96":{"tf":1.0}},"i":{"df":6,"docs":{"314":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":1.0},"330":{"tf":1.0},"396":{"tf":1.0},"404":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"h":{"df":9,"docs":{"247":{"tf":1.0},"255":{"tf":1.0},"289":{"tf":1.0},"329":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"500":{"tf":2.449489742783178},"96":{"tf":1.4142135623730951},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"308":{"tf":1.0},"57":{"tf":1.0},"88":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":2,"docs":{"333":{"tf":1.0},"338":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"251":{"tf":1.0}},"i":{"df":9,"docs":{"104":{"tf":1.0},"238":{"tf":1.0},"348":{"tf":1.0},"363":{"tf":1.0},"393":{"tf":1.0},"48":{"tf":1.0},"60":{"tf":1.0},"77":{"tf":1.0},"93":{"tf":1.0}}}}}}},"t":{"df":2,"docs":{"241":{"tf":1.0},"391":{"tf":1.0}}}},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"144":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"354":{"tf":1.0},"359":{"tf":1.0},"65":{"tf":1.0},"90":{"tf":1.0}}}},"t":{"df":1,"docs":{"285":{"tf":1.0}}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"113":{"tf":1.4142135623730951},"117":{"tf":1.4142135623730951},"247":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":2,"docs":{"3":{"tf":1.4142135623730951},"6":{"tf":1.0}}}},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"3":{"0":{"0":{"0":{"df":2,"docs":{"2":{"tf":1.0},"38":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"0":{"0":{"0":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"190":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"161":{"tf":1.0}},"s":{":":{"/":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"p":{"d":{"df":0,"docs":{},"f":{"df":1,"docs":{"96":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"d":{"b":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"162":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"161":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":5,"docs":{"137":{"tf":2.23606797749979},"143":{"tf":2.8284271247461903},"157":{"tf":1.0},"333":{"tf":1.0},"341":{"tf":1.0}}}},"df":0,"docs":{}}},"y":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"d":{"df":15,"docs":{"100":{"tf":1.0},"20":{"tf":1.0},"269":{"tf":1.0},"27":{"tf":1.0},"323":{"tf":1.0},"330":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"368":{"tf":1.0},"369":{"tf":1.0},"391":{"tf":1.0},"397":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"i":{"\'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"127":{"tf":1.0}}}},"m":{"df":2,"docs":{"237":{"tf":1.0},"461":{"tf":1.0}}}},"/":{"df":0,"docs":{},"o":{"df":2,"docs":{"208":{"tf":1.0},"289":{"tf":1.0}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"28":{"tf":1.0}}}}},"d":{"df":40,"docs":{"137":{"tf":1.0},"150":{"tf":1.0},"199":{"tf":1.7320508075688772},"201":{"tf":1.7320508075688772},"202":{"tf":1.4142135623730951},"223":{"tf":1.0},"224":{"tf":1.0},"261":{"tf":1.4142135623730951},"264":{"tf":1.4142135623730951},"300":{"tf":1.0},"314":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":2.449489742783178},"333":{"tf":1.0},"338":{"tf":1.0},"398":{"tf":1.0},"492":{"tf":1.4142135623730951},"493":{"tf":2.0},"494":{"tf":1.7320508075688772},"495":{"tf":2.0},"496":{"tf":1.4142135623730951},"497":{"tf":1.4142135623730951},"498":{"tf":1.4142135623730951},"500":{"tf":1.7320508075688772},"501":{"tf":1.4142135623730951},"502":{"tf":1.4142135623730951},"504":{"tf":1.0},"505":{"tf":1.0},"506":{"tf":1.0},"507":{"tf":1.0},"508":{"tf":1.0},"509":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.4142135623730951},"515":{"tf":1.0},"52":{"tf":1.0},"75":{"tf":1.0},"91":{"tf":1.4142135623730951},"93":{"tf":1.0},"98":{"tf":1.0}},"e":{"a":{"df":4,"docs":{"105":{"tf":1.0},"238":{"tf":1.0},"70":{"tf":1.0},"79":{"tf":1.0}},"l":{"df":2,"docs":{"124":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"310":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"357":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"101":{"tf":1.0},"334":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"112":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":10,"docs":{"133":{"tf":1.4142135623730951},"149":{"tf":1.4142135623730951},"293":{"tf":1.0},"303":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":2.23606797749979},"325":{"tf":1.0},"354":{"tf":1.7320508075688772},"373":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":70,"docs":{"104":{"tf":1.0},"111":{"tf":1.4142135623730951},"130":{"tf":1.0},"131":{"tf":1.0},"134":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.7320508075688772},"138":{"tf":1.4142135623730951},"139":{"tf":1.0},"141":{"tf":1.4142135623730951},"143":{"tf":1.0},"144":{"tf":1.4142135623730951},"152":{"tf":1.0},"199":{"tf":1.4142135623730951},"210":{"tf":1.0},"218":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":2.0},"240":{"tf":1.0},"241":{"tf":3.0},"251":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"282":{"tf":1.0},"317":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.4142135623730951},"329":{"tf":1.4142135623730951},"330":{"tf":1.7320508075688772},"335":{"tf":1.0},"345":{"tf":1.4142135623730951},"347":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.7320508075688772},"360":{"tf":1.7320508075688772},"368":{"tf":1.0},"369":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.4142135623730951},"392":{"tf":1.0},"397":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.7320508075688772},"412":{"tf":1.0},"413":{"tf":1.0},"458":{"tf":1.4142135623730951},"462":{"tf":2.6457513110645907},"466":{"tf":1.4142135623730951},"471":{"tf":1.0},"480":{"tf":1.0},"487":{"tf":1.0},"495":{"tf":1.7320508075688772},"496":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"518":{"tf":1.0},"519":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.4142135623730951},"76":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":2.0},"84":{"tf":1.0},"86":{"tf":1.0},"96":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":8,"docs":{"314":{"tf":1.0},"324":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.4142135623730951},"396":{"tf":1.4142135623730951},"404":{"tf":1.0},"63":{"tf":1.0}}}}}}}}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":19,"docs":{"113":{"tf":1.0},"154":{"tf":1.0},"170":{"tf":1.0},"179":{"tf":1.4142135623730951},"257":{"tf":1.4142135623730951},"259":{"tf":1.4142135623730951},"290":{"tf":1.0},"314":{"tf":1.7320508075688772},"321":{"tf":1.0},"324":{"tf":2.0},"333":{"tf":1.0},"334":{"tf":1.4142135623730951},"337":{"tf":1.0},"356":{"tf":1.0},"396":{"tf":1.0},"398":{"tf":1.0},"413":{"tf":1.0},"500":{"tf":1.0},"97":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":2,"docs":{"36":{"tf":1.0},"46":{"tf":1.0}}}}}}},"n":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"d":{"df":11,"docs":{"141":{"tf":1.0},"247":{"tf":1.0},"250":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"300":{"tf":1.0},"36":{"tf":1.0},"371":{"tf":1.4142135623730951},"496":{"tf":1.0},"498":{"tf":1.0},"511":{"tf":1.0}},"e":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"496":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"498":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"343":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"104":{"tf":1.0},"243":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"234":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":2,"docs":{"324":{"tf":2.6457513110645907},"342":{"tf":1.0}}}},"x":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"322":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":10,"docs":{"100":{"tf":1.4142135623730951},"279":{"tf":1.0},"28":{"tf":1.0},"323":{"tf":1.7320508075688772},"328":{"tf":1.0},"357":{"tf":1.4142135623730951},"384":{"tf":1.0},"401":{"tf":1.0},"407":{"tf":1.0},"410":{"tf":1.0}}}},"i":{"c":{"df":1,"docs":{"259":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"512":{"tf":1.0}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"u":{"df":3,"docs":{"120":{"tf":1.0},"122":{"tf":1.0},"270":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"151":{"tf":1.0}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"314":{"tf":1.0},"396":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"198":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.7320508075688772},"367":{"tf":1.0},"372":{"tf":1.0},"456":{"tf":1.0},"494":{"tf":1.0},"73":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"372":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{".":{"b":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"171":{"tf":1.0},"213":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"199":{"tf":1.0},"82":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"319":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":18,"docs":{"110":{"tf":1.4142135623730951},"114":{"tf":1.0},"138":{"tf":1.0},"171":{"tf":1.0},"213":{"tf":1.0},"244":{"tf":1.4142135623730951},"258":{"tf":1.0},"332":{"tf":1.0},"369":{"tf":1.7320508075688772},"377":{"tf":1.0},"423":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"508":{"tf":1.0},"509":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951}}}}}}},"i":{"df":0,"docs":{},"t":{"df":11,"docs":{"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"173":{"tf":1.0},"196":{"tf":1.0},"213":{"tf":1.0},"222":{"tf":1.0},"244":{"tf":1.0},"257":{"tf":1.0},"338":{"tf":1.0},"450":{"tf":1.0},"476":{"tf":1.0}},"i":{"df":15,"docs":{"169":{"tf":1.7320508075688772},"171":{"tf":1.0},"173":{"tf":1.0},"179":{"tf":1.0},"18":{"tf":1.0},"196":{"tf":1.4142135623730951},"222":{"tf":1.0},"257":{"tf":1.0},"348":{"tf":1.0},"357":{"tf":1.0},"363":{"tf":1.0},"393":{"tf":1.0},"417":{"tf":1.0},"450":{"tf":1.4142135623730951},"476":{"tf":1.0}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"123":{"tf":1.0},"53":{"tf":1.0}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"100":{"tf":1.0},"124":{"tf":1.0},"226":{"tf":1.0},"285":{"tf":1.0},"300":{"tf":1.0},"314":{"tf":1.0},"96":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":12,"docs":{"264":{"tf":1.0},"280":{"tf":1.4142135623730951},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0}},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":1,"docs":{"326":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"339":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"151":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":18,"docs":{"10":{"tf":1.0},"11":{"tf":1.4142135623730951},"12":{"tf":2.0},"13":{"tf":1.0},"159":{"tf":1.4142135623730951},"16":{"tf":1.0},"161":{"tf":1.0},"162":{"tf":1.4142135623730951},"163":{"tf":1.0},"164":{"tf":2.0},"172":{"tf":1.0},"188":{"tf":1.7320508075688772},"193":{"tf":1.0},"195":{"tf":2.23606797749979},"338":{"tf":1.4142135623730951},"416":{"tf":1.0},"42":{"tf":1.7320508075688772},"68":{"tf":1.0}}},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"118":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"372":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"116":{"tf":1.0},"234":{"tf":1.0},"251":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":5,"docs":{"238":{"tf":1.0},"247":{"tf":1.0},"285":{"tf":1.0},"372":{"tf":1.0},"404":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"122":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":5,"docs":{"492":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0},"512":{"tf":1.0}},"r":{"df":38,"docs":{"105":{"tf":1.0},"142":{"tf":1.0},"151":{"tf":1.0},"175":{"tf":1.0},"18":{"tf":1.0},"183":{"tf":1.0},"192":{"tf":1.0},"205":{"tf":1.0},"215":{"tf":1.0},"225":{"tf":1.0},"24":{"tf":1.7320508075688772},"241":{"tf":1.4142135623730951},"252":{"tf":1.0},"255":{"tf":1.0},"258":{"tf":1.4142135623730951},"278":{"tf":1.0},"293":{"tf":1.0},"304":{"tf":1.4142135623730951},"360":{"tf":1.4142135623730951},"371":{"tf":1.0},"407":{"tf":1.4142135623730951},"414":{"tf":1.0},"433":{"tf":1.0},"434":{"tf":1.0},"435":{"tf":1.0},"445":{"tf":1.0},"463":{"tf":1.0},"479":{"tf":1.4142135623730951},"481":{"tf":1.0},"482":{"tf":1.0},"487":{"tf":1.0},"49":{"tf":1.0},"501":{"tf":1.0},"53":{"tf":1.0},"63":{"tf":1.0},"66":{"tf":1.0},"77":{"tf":1.0},"92":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"j":{"/":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"39":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"351":{"tf":1.0},"98":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"136":{"tf":1.0}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"197":{"tf":1.0},"257":{"tf":1.0},"446":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"128":{"tf":1.0},"144":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"f":{"a":{"c":{"df":7,"docs":{"255":{"tf":1.0},"257":{"tf":1.4142135623730951},"353":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.0},"4":{"tf":1.0},"66":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"267":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"12":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"df":4,"docs":{"250":{"tf":2.23606797749979},"35":{"tf":1.0},"44":{"tf":1.0},"514":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"135":{"tf":1.0}}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":8,"docs":{"134":{"tf":1.0},"147":{"tf":1.0},"234":{"tf":1.0},"241":{"tf":1.0},"295":{"tf":1.0},"337":{"tf":1.0},"514":{"tf":1.7320508075688772},"515":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"245":{"tf":1.0},"251":{"tf":1.0}}}}}}}}},"s":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"337":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":5,"docs":{"128":{"tf":1.0},"138":{"tf":1.0},"144":{"tf":1.0},"289":{"tf":1.0},"299":{"tf":1.0}}}},"s":{"df":0,"docs":{},"u":{"df":6,"docs":{"104":{"tf":1.0},"226":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"346":{"tf":1.0},"46":{"tf":1.0}}}}},"t":{"\'":{"df":2,"docs":{"306":{"tf":1.4142135623730951},"68":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":7,"docs":{"247":{"tf":1.0},"325":{"tf":1.0},"461":{"tf":1.0},"493":{"tf":1.4142135623730951},"494":{"tf":1.4142135623730951},"498":{"tf":1.0},"96":{"tf":1.0}}},"r":{"df":1,"docs":{"289":{"tf":1.0}}}}}},"j":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"j":{"a":{"2":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"a":{"df":2,"docs":{"104":{"tf":1.0},"124":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"113":{"tf":1.0},"114":{"tf":1.0},"226":{"tf":1.0},"230":{"tf":1.0},"385":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":19,"docs":{"108":{"tf":1.0},"118":{"tf":1.0},"124":{"tf":1.0},"169":{"tf":1.0},"196":{"tf":1.4142135623730951},"203":{"tf":2.0},"210":{"tf":1.4142135623730951},"238":{"tf":2.8284271247461903},"247":{"tf":2.0},"251":{"tf":1.0},"257":{"tf":1.0},"270":{"tf":1.4142135623730951},"492":{"tf":1.0},"498":{"tf":1.0},"55":{"tf":1.0},"59":{"tf":1.0},"67":{"tf":1.0},"76":{"tf":1.7320508075688772},"86":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":23,"docs":{"170":{"tf":1.0},"238":{"tf":1.0},"258":{"tf":1.0},"267":{"tf":1.4142135623730951},"27":{"tf":1.0},"275":{"tf":1.4142135623730951},"280":{"tf":1.0},"292":{"tf":1.7320508075688772},"293":{"tf":1.4142135623730951},"296":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":2.23606797749979},"335":{"tf":2.449489742783178},"337":{"tf":1.0},"339":{"tf":1.4142135623730951},"341":{"tf":1.4142135623730951},"385":{"tf":1.0},"487":{"tf":1.0},"498":{"tf":1.0},"514":{"tf":1.4142135623730951},"63":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.0}},"r":{"df":0,"docs":{},"p":{"c":{"\\"":{":":{"\\"":{"2":{".":{"0":{"\\"":{",":{"\\"":{"df":0,"docs":{},"i":{"d":{"\\"":{":":{"1":{",":{"\\"":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"d":{"\\"":{":":{"\\"":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"\\"":{",":{"\\"":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"\\"":{":":{"df":0,"docs":{},"{":{"\\"":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"\\"":{":":{"\\"":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"174":{"tf":1.0},"475":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"p":{"df":1,"docs":{"191":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":13,"docs":{"492":{"tf":1.4142135623730951},"493":{"tf":1.4142135623730951},"494":{"tf":1.4142135623730951},"495":{"tf":1.4142135623730951},"496":{"tf":1.4142135623730951},"497":{"tf":1.4142135623730951},"498":{"tf":1.4142135623730951},"500":{"tf":1.7320508075688772},"501":{"tf":1.4142135623730951},"502":{"tf":1.4142135623730951},"511":{"tf":1.0},"512":{"tf":1.0},"515":{"tf":1.0}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"304":{"tf":1.4142135623730951}}}}}}}},"w":{"df":0,"docs":{},"t":{"df":1,"docs":{"137":{"tf":1.0}}}}},"k":{"8":{"df":1,"docs":{"344":{"tf":1.0}}},"b":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{":":{"8":{"0":{"0":{"0":{"df":1,"docs":{"376":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"/":{"a":{"d":{"d":{"_":{"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":3,"docs":{"258":{"tf":1.0},"460":{"tf":1.0},"494":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":4,"docs":{"241":{"tf":1.0},"258":{"tf":1.0},"462":{"tf":1.0},"493":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"258":{"tf":1.0},"467":{"tf":1.0},"498":{"tf":1.0}}}}}}}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"407":{"tf":1.0},"500":{"tf":1.0},"502":{"tf":1.0}}}},"df":0,"docs":{}}}},"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"502":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"258":{"tf":1.0},"512":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":2,"docs":{"501":{"tf":1.0},"502":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"231":{"tf":1.0},"244":{"tf":1.0},"258":{"tf":1.0},"496":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":4,"docs":{"241":{"tf":1.0},"258":{"tf":1.0},"462":{"tf":1.0},"495":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":2,"docs":{"258":{"tf":1.0},"497":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"186":{"tf":1.0},"205":{"tf":1.0},"275":{"tf":1.0},"469":{"tf":1.0},"492":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"258":{"tf":1.0},"463":{"tf":1.0},"511":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"303":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"\\"":{".":{"df":0,"docs":{},"k":{"b":{"df":1,"docs":{"293":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"302":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":7,"docs":{"266":{"tf":1.0},"267":{"tf":1.0},"293":{"tf":1.7320508075688772},"303":{"tf":1.0},"327":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0}}}}}}}},"df":109,"docs":{"103":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":2.0},"111":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.4142135623730951},"115":{"tf":1.0},"116":{"tf":1.4142135623730951},"117":{"tf":1.0},"118":{"tf":1.0},"124":{"tf":1.7320508075688772},"125":{"tf":1.0},"126":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"151":{"tf":1.0},"156":{"tf":1.0},"164":{"tf":1.0},"165":{"tf":2.23606797749979},"166":{"tf":1.0},"167":{"tf":1.0},"169":{"tf":1.7320508075688772},"170":{"tf":1.4142135623730951},"171":{"tf":2.0},"173":{"tf":1.7320508075688772},"174":{"tf":1.4142135623730951},"175":{"tf":1.0},"178":{"tf":1.4142135623730951},"179":{"tf":1.0},"181":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"191":{"tf":1.4142135623730951},"193":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.4142135623730951},"198":{"tf":1.0},"199":{"tf":1.4142135623730951},"200":{"tf":2.0},"201":{"tf":1.4142135623730951},"203":{"tf":1.0},"205":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.0},"210":{"tf":1.0},"213":{"tf":2.0},"222":{"tf":2.23606797749979},"223":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"23":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"241":{"tf":1.4142135623730951},"244":{"tf":2.0},"247":{"tf":1.0},"250":{"tf":1.0},"255":{"tf":1.7320508075688772},"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":2.449489742783178},"260":{"tf":1.0},"275":{"tf":1.4142135623730951},"278":{"tf":1.4142135623730951},"285":{"tf":1.0},"290":{"tf":1.4142135623730951},"292":{"tf":1.7320508075688772},"293":{"tf":1.0},"295":{"tf":1.0},"299":{"tf":1.7320508075688772},"303":{"tf":2.0},"304":{"tf":3.0},"310":{"tf":1.0},"311":{"tf":1.4142135623730951},"314":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"335":{"tf":1.0},"338":{"tf":1.0},"345":{"tf":1.0},"354":{"tf":1.0},"369":{"tf":1.7320508075688772},"372":{"tf":1.7320508075688772},"377":{"tf":1.4142135623730951},"388":{"tf":1.0},"396":{"tf":1.0},"407":{"tf":1.7320508075688772},"413":{"tf":1.0},"448":{"tf":1.0},"450":{"tf":1.4142135623730951},"451":{"tf":1.0},"475":{"tf":1.0},"476":{"tf":1.7320508075688772},"478":{"tf":1.0},"489":{"tf":1.4142135623730951},"521":{"tf":1.0},"66":{"tf":2.449489742783178},"85":{"tf":1.0},"92":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}}}},"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"344":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":9,"docs":{"135":{"tf":1.0},"291":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0},"405":{"tf":1.0},"410":{"tf":1.0},"466":{"tf":1.0},"65":{"tf":1.0}}}},"y":{"df":16,"docs":{"101":{"tf":1.0},"197":{"tf":1.0},"202":{"tf":1.0},"319":{"tf":1.0},"324":{"tf":1.4142135623730951},"326":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.0},"341":{"tf":1.4142135623730951},"352":{"tf":1.0},"356":{"tf":1.0},"361":{"tf":1.0},"500":{"tf":1.0},"511":{"tf":1.0},"54":{"tf":1.0},"96":{"tf":1.0}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":6,"docs":{"108":{"tf":1.7320508075688772},"142":{"tf":1.4142135623730951},"350":{"tf":1.0},"473":{"tf":1.0},"53":{"tf":1.0},"90":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"/":{"c":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"142":{"tf":1.0},"383":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":95,"docs":{"101":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":2.0},"107":{"tf":2.23606797749979},"110":{"tf":1.4142135623730951},"111":{"tf":1.0},"114":{"tf":1.0},"120":{"tf":1.4142135623730951},"121":{"tf":1.4142135623730951},"122":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.7320508075688772},"127":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"136":{"tf":2.449489742783178},"142":{"tf":1.4142135623730951},"144":{"tf":1.0},"157":{"tf":1.4142135623730951},"164":{"tf":1.4142135623730951},"169":{"tf":1.4142135623730951},"171":{"tf":1.4142135623730951},"192":{"tf":1.0},"193":{"tf":1.4142135623730951},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"200":{"tf":1.0},"202":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"213":{"tf":1.0},"215":{"tf":1.0},"226":{"tf":1.4142135623730951},"231":{"tf":1.4142135623730951},"234":{"tf":1.0},"244":{"tf":1.0},"251":{"tf":1.4142135623730951},"257":{"tf":1.4142135623730951},"258":{"tf":1.0},"259":{"tf":1.0},"269":{"tf":1.0},"325":{"tf":1.0},"331":{"tf":1.0},"364":{"tf":1.0},"365":{"tf":2.23606797749979},"367":{"tf":1.0},"368":{"tf":2.0},"369":{"tf":1.4142135623730951},"371":{"tf":2.6457513110645907},"375":{"tf":1.0},"376":{"tf":1.0},"380":{"tf":1.0},"383":{"tf":1.0},"391":{"tf":1.0},"446":{"tf":1.4142135623730951},"452":{"tf":1.0},"454":{"tf":1.0},"461":{"tf":1.0},"463":{"tf":1.7320508075688772},"466":{"tf":1.0},"47":{"tf":1.4142135623730951},"48":{"tf":1.0},"480":{"tf":1.4142135623730951},"487":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.4142135623730951},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"503":{"tf":1.0},"511":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.7320508075688772},"65":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.7320508075688772},"72":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":2.0},"98":{"tf":1.0},"99":{"tf":1.0}},"e":{"b":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"138":{"tf":1.0},"149":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"o":{"df":2,"docs":{"0":{"tf":1.0},"47":{"tf":1.0}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"/":{"a":{"d":{"d":{"_":{"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":3,"docs":{"456":{"tf":1.0},"494":{"tf":1.0},"520":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":3,"docs":{"455":{"tf":1.0},"493":{"tf":1.0},"92":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":6,"docs":{"170":{"tf":1.7320508075688772},"178":{"tf":1.0},"182":{"tf":1.0},"212":{"tf":1.0},"267":{"tf":1.0},"335":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":3,"docs":{"107":{"tf":1.0},"136":{"tf":1.0},"141":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"498":{"tf":1.0}}}}}}}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"326":{"tf":1.0},"500":{"tf":1.4142135623730951},"99":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":2,"docs":{"502":{"tf":1.0},"99":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"92":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":2,"docs":{"501":{"tf":1.0},"99":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"457":{"tf":1.0},"466":{"tf":1.0},"496":{"tf":1.0},"519":{"tf":1.0},"92":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"141":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"496":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"/":{"$":{"(":{"d":{"df":1,"docs":{"203":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"215":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":3,"docs":{"458":{"tf":1.0},"495":{"tf":1.0},"518":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":2,"docs":{"143":{"tf":1.0},"202":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"202":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"i":{"df":2,"docs":{"143":{"tf":1.4142135623730951},"371":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"141":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":10,"docs":{"237":{"tf":1.0},"258":{"tf":1.0},"452":{"tf":1.0},"454":{"tf":1.0},"461":{"tf":1.0},"465":{"tf":1.0},"466":{"tf":1.0},"492":{"tf":1.0},"517":{"tf":1.0},"92":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"511":{"tf":1.0},"92":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},":":{"/":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"/":{"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"258":{"tf":1.0},"505":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"{":{"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"505":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"258":{"tf":1.0},"506":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"506":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":3,"docs":{"258":{"tf":1.0},"504":{"tf":1.7320508075688772},"92":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"504":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"{":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"504":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"258":{"tf":1.0},"507":{"tf":1.4142135623730951}},"s":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"507":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"258":{"tf":1.0},"508":{"tf":1.4142135623730951},"92":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"508":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"258":{"tf":1.0},"509":{"tf":1.4142135623730951}},"s":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"509":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"449":{"tf":1.0},"477":{"tf":1.0},"490":{"tf":1.0}}}}},"df":0,"docs":{}},"df":66,"docs":{"0":{"tf":1.7320508075688772},"102":{"tf":1.0},"107":{"tf":1.4142135623730951},"136":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"15":{"tf":1.7320508075688772},"159":{"tf":1.0},"165":{"tf":1.0},"169":{"tf":1.0},"185":{"tf":1.0},"194":{"tf":1.0},"196":{"tf":1.4142135623730951},"215":{"tf":1.0},"228":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"241":{"tf":1.0},"244":{"tf":1.7320508075688772},"247":{"tf":1.0},"250":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.0},"269":{"tf":1.4142135623730951},"270":{"tf":1.0},"284":{"tf":1.0},"314":{"tf":1.7320508075688772},"332":{"tf":1.0},"350":{"tf":1.0},"365":{"tf":1.0},"369":{"tf":1.4142135623730951},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"396":{"tf":1.7320508075688772},"404":{"tf":1.0},"409":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.4142135623730951},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"469":{"tf":1.0},"47":{"tf":1.4142135623730951},"48":{"tf":1.0},"480":{"tf":1.0},"487":{"tf":1.0},"49":{"tf":1.0},"490":{"tf":1.0},"57":{"tf":1.0},"63":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"86":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0},"94":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"344":{"tf":1.0}}}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"344":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"104":{"tf":1.0},"48":{"tf":1.0}}}},"df":1,"docs":{"476":{"tf":1.0}},"n":{"d":{"df":1,"docs":{"32":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":4,"docs":{"161":{"tf":1.0},"188":{"tf":1.0},"195":{"tf":1.0},"338":{"tf":1.0}},"u":{"a":{"df":0,"docs":{},"g":{"df":17,"docs":{"213":{"tf":1.0},"244":{"tf":1.0},"334":{"tf":1.0},"338":{"tf":1.0},"344":{"tf":1.0},"347":{"tf":1.0},"36":{"tf":1.0},"454":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0},"457":{"tf":1.4142135623730951},"458":{"tf":1.0},"469":{"tf":1.0},"494":{"tf":1.0},"496":{"tf":1.7320508075688772},"519":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"g":{"df":7,"docs":{"109":{"tf":1.0},"281":{"tf":1.0},"350":{"tf":1.0},"356":{"tf":1.0},"365":{"tf":1.4142135623730951},"366":{"tf":1.0},"377":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"144":{"tf":1.0},"231":{"tf":1.0},"324":{"tf":1.0},"381":{"tf":1.0},"465":{"tf":1.4142135623730951},"497":{"tf":1.4142135623730951},"98":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"361":{"tf":1.0},"372":{"tf":1.4142135623730951},"391":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":14,"docs":{"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"127":{"tf":1.0},"13":{"tf":1.0},"161":{"tf":1.0},"234":{"tf":1.0},"238":{"tf":1.0},"250":{"tf":1.0},"324":{"tf":1.0},"327":{"tf":1.0},"500":{"tf":1.0},"96":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"179":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0},"372":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":13,"docs":{"238":{"tf":1.4142135623730951},"241":{"tf":2.449489742783178},"247":{"tf":1.0},"255":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"500":{"tf":1.0},"66":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"270":{"tf":1.0}}}}}},"z":{"df":0,"docs":{},"i":{"df":6,"docs":{"279":{"tf":1.0},"323":{"tf":1.4142135623730951},"327":{"tf":1.0},"400":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"100":{"tf":1.0}}}}}}},"df":2,"docs":{"0":{"tf":1.0},"47":{"tf":1.0}},"e":{"a":{"d":{"df":2,"docs":{"113":{"tf":1.0},"231":{"tf":1.0}}},"df":0,"docs":{},"k":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"*":{"*":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"501":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"n":{"df":21,"docs":{"101":{"tf":1.0},"102":{"tf":1.0},"104":{"tf":1.0},"120":{"tf":1.4142135623730951},"130":{"tf":1.0},"197":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"231":{"tf":1.0},"238":{"tf":1.4142135623730951},"334":{"tf":1.0},"338":{"tf":1.4142135623730951},"343":{"tf":1.0},"460":{"tf":1.4142135623730951},"494":{"tf":1.0},"502":{"tf":2.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"76":{"tf":1.0},"80":{"tf":1.0},"96":{"tf":1.4142135623730951}}}},"v":{"df":2,"docs":{"104":{"tf":1.0},"351":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"28":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"334":{"tf":1.0},"344":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"104":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":9,"docs":{"191":{"tf":1.0},"244":{"tf":1.0},"255":{"tf":1.0},"314":{"tf":1.4142135623730951},"321":{"tf":1.0},"324":{"tf":2.0},"327":{"tf":1.4142135623730951},"396":{"tf":1.4142135623730951},"96":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"220":{"tf":1.0}}}},"df":0,"docs":{}}}}},"h":{"df":1,"docs":{"448":{"tf":1.0}}},"i":{"b":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":10,"docs":{"124":{"tf":1.0},"165":{"tf":1.0},"209":{"tf":1.0},"235":{"tf":1.0},"255":{"tf":1.4142135623730951},"260":{"tf":1.0},"351":{"tf":1.0},"353":{"tf":1.0},"66":{"tf":1.4142135623730951},"92":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"202":{"tf":1.0},"316":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":15,"docs":{"109":{"tf":1.0},"200":{"tf":1.4142135623730951},"238":{"tf":2.23606797749979},"314":{"tf":1.0},"333":{"tf":1.0},"338":{"tf":1.0},"343":{"tf":1.0},"351":{"tf":1.0},"492":{"tf":1.7320508075688772},"500":{"tf":1.7320508075688772},"501":{"tf":1.4142135623730951},"502":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.0},"99":{"tf":1.4142135623730951}}}}},"n":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"(":{")":{".":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"|":{"c":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"(":{"\\"":{"c":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"324":{"tf":1.0}},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"324":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":2.0}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"124":{"tf":1.0}}}},"df":4,"docs":{"257":{"tf":1.0},"296":{"tf":1.0},"324":{"tf":2.449489742783178},"66":{"tf":1.0}}},"k":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"12":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":35,"docs":{"101":{"tf":1.0},"116":{"tf":1.0},"12":{"tf":1.4142135623730951},"125":{"tf":1.0},"137":{"tf":1.4142135623730951},"151":{"tf":1.0},"199":{"tf":1.7320508075688772},"217":{"tf":1.0},"218":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.0},"238":{"tf":1.4142135623730951},"240":{"tf":1.0},"241":{"tf":1.7320508075688772},"250":{"tf":1.7320508075688772},"251":{"tf":1.0},"257":{"tf":1.0},"264":{"tf":1.0},"318":{"tf":1.0},"35":{"tf":1.7320508075688772},"36":{"tf":1.4142135623730951},"44":{"tf":2.0},"458":{"tf":1.4142135623730951},"461":{"tf":1.0},"462":{"tf":1.4142135623730951},"466":{"tf":1.0},"471":{"tf":1.7320508075688772},"480":{"tf":1.4142135623730951},"495":{"tf":1.0},"518":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":1.0},"7":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951},"98":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"/":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"162":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"262":{"tf":1.0},"373":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":7,"docs":{"199":{"tf":1.0},"223":{"tf":1.4142135623730951},"257":{"tf":1.4142135623730951},"258":{"tf":1.0},"324":{"tf":1.0},"494":{"tf":1.0},"497":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":4,"docs":{"104":{"tf":1.0},"141":{"tf":1.0},"2":{"tf":1.0},"38":{"tf":1.0}}}}},"o":{"a":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"139":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"<":{"df":0,"docs":{},"p":{"df":1,"docs":{"335":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"262":{"tf":1.0},"373":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":10,"docs":{"139":{"tf":1.0},"234":{"tf":1.0},"241":{"tf":1.0},"267":{"tf":1.0},"278":{"tf":1.0},"279":{"tf":1.4142135623730951},"303":{"tf":1.0},"327":{"tf":1.0},"335":{"tf":1.0},"339":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"345":{"tf":1.0}}}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{"df":35,"docs":{"101":{"tf":1.0},"109":{"tf":1.0},"135":{"tf":1.7320508075688772},"151":{"tf":1.0},"157":{"tf":1.0},"167":{"tf":1.0},"181":{"tf":1.0},"182":{"tf":1.0},"2":{"tf":1.4142135623730951},"257":{"tf":1.0},"263":{"tf":1.0},"269":{"tf":1.0},"281":{"tf":1.0},"289":{"tf":1.4142135623730951},"350":{"tf":1.4142135623730951},"351":{"tf":1.4142135623730951},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.7320508075688772},"356":{"tf":1.7320508075688772},"359":{"tf":1.7320508075688772},"361":{"tf":1.7320508075688772},"368":{"tf":1.4142135623730951},"369":{"tf":2.0},"371":{"tf":1.4142135623730951},"380":{"tf":1.4142135623730951},"432":{"tf":1.0},"489":{"tf":1.0},"49":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"63":{"tf":1.4142135623730951},"65":{"tf":1.0},"86":{"tf":1.4142135623730951},"90":{"tf":1.0}}},"t":{"df":9,"docs":{"140":{"tf":1.0},"171":{"tf":1.0},"218":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{},"k":{"df":4,"docs":{"238":{"tf":1.0},"247":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":7,"docs":{"177":{"tf":1.4142135623730951},"191":{"tf":1.4142135623730951},"244":{"tf":1.0},"390":{"tf":1.0},"502":{"tf":1.0},"76":{"tf":1.0},"88":{"tf":1.0}},"i":{"c":{"df":5,"docs":{"231":{"tf":1.0},"241":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.0},"405":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"\'":{"df":1,"docs":{"95":{"tf":1.0}}},".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":2,"docs":{"204":{"tf":1.0},"259":{"tf":1.4142135623730951}}}}},"/":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"257":{"tf":1.0}}}}}}},"\\\\":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"498":{"tf":1.0}}}}}}}}}},"df":39,"docs":{"100":{"tf":1.7320508075688772},"124":{"tf":1.0},"136":{"tf":1.0},"151":{"tf":1.0},"204":{"tf":2.0},"231":{"tf":1.4142135623730951},"24":{"tf":1.0},"257":{"tf":1.0},"259":{"tf":1.4142135623730951},"276":{"tf":1.4142135623730951},"313":{"tf":1.0},"314":{"tf":2.0},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"323":{"tf":1.4142135623730951},"324":{"tf":2.0},"328":{"tf":1.0},"330":{"tf":1.7320508075688772},"393":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":2.0},"401":{"tf":1.0},"404":{"tf":1.0},"407":{"tf":1.7320508075688772},"409":{"tf":1.0},"412":{"tf":1.0},"467":{"tf":2.0},"480":{"tf":1.0},"482":{"tf":1.0},"498":{"tf":1.4142135623730951},"499":{"tf":1.0},"502":{"tf":1.4142135623730951},"63":{"tf":1.7320508075688772},"67":{"tf":1.0},"91":{"tf":1.0},"94":{"tf":1.4142135623730951},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"324":{"tf":1.4142135623730951},"407":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"324":{"tf":1.4142135623730951},"407":{"tf":1.0}}}}}}}}}}}},"o":{"df":0,"docs":{},"k":{"df":3,"docs":{"129":{"tf":1.0},"247":{"tf":1.0},"466":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"279":{"tf":1.0}}}}},"p":{"df":1,"docs":{"356":{"tf":1.0}}},"s":{"df":1,"docs":{"157":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":5,"docs":{"130":{"tf":1.0},"314":{"tf":1.0},"367":{"tf":1.0},"396":{"tf":1.0},"409":{"tf":1.0}}},"s":{"df":1,"docs":{"391":{"tf":1.0}}},"t":{"df":5,"docs":{"104":{"tf":1.4142135623730951},"115":{"tf":1.0},"117":{"tf":1.0},"396":{"tf":1.0},"48":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"241":{"tf":1.0}}}},"s":{"df":4,"docs":{"143":{"tf":1.0},"448":{"tf":1.0},"475":{"tf":1.0},"476":{"tf":1.0}},"p":{"df":2,"docs":{"338":{"tf":1.4142135623730951},"345":{"tf":1.0}}}}},"m":{"a":{"c":{"df":1,"docs":{"39":{"tf":1.0}},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"351":{"tf":1.0}}}}},"o":{"df":1,"docs":{"162":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":4,"docs":{"240":{"tf":1.0},"463":{"tf":1.0},"465":{"tf":1.0},"494":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"255":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"138":{"tf":1.0},"404":{"tf":1.0},"46":{"tf":1.0},"473":{"tf":1.4142135623730951},"480":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"162":{"tf":1.0},"259":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"156":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":3,"docs":{"156":{"tf":1.0},"338":{"tf":1.0},"73":{"tf":1.0}}}}},"k":{"df":0,"docs":{},"e":{"df":10,"docs":{"106":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"222":{"tf":1.0},"251":{"tf":1.0},"373":{"tf":1.0},"46":{"tf":1.0},"473":{"tf":1.0},"477":{"tf":1.0},"59":{"tf":1.0}}}},"n":{"a":{"df":0,"docs":{},"g":{"df":12,"docs":{"124":{"tf":1.0},"157":{"tf":1.0},"161":{"tf":1.0},"205":{"tf":1.0},"257":{"tf":1.4142135623730951},"365":{"tf":1.0},"368":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"446":{"tf":1.0},"502":{"tf":1.0},"98":{"tf":1.0}}}},"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"133":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":1,"docs":{"316":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"344":{"tf":1.0}}}}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":10,"docs":{"108":{"tf":1.0},"179":{"tf":1.0},"289":{"tf":1.0},"347":{"tf":1.0},"366":{"tf":1.0},"372":{"tf":1.0},"383":{"tf":1.0},"388":{"tf":1.0},"413":{"tf":1.0},"475":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"|":{"df":1,"docs":{"139":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"k":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":42,"docs":{"100":{"tf":2.23606797749979},"107":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.4142135623730951},"140":{"tf":1.0},"143":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"202":{"tf":1.4142135623730951},"217":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"30":{"tf":1.0},"31":{"tf":1.0},"314":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":1.4142135623730951},"323":{"tf":1.4142135623730951},"324":{"tf":2.0},"330":{"tf":1.0},"366":{"tf":1.0},"379":{"tf":1.0},"39":{"tf":1.7320508075688772},"396":{"tf":1.0},"397":{"tf":1.0},"399":{"tf":1.0},"4":{"tf":1.7320508075688772},"400":{"tf":1.4142135623730951},"405":{"tf":1.0},"407":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"49":{"tf":1.0},"493":{"tf":1.0},"498":{"tf":1.0},"52":{"tf":1.0},"63":{"tf":1.4142135623730951},"65":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}},"df":0,"docs":{}}},"t":{"c":{"df":0,"docs":{},"h":{"df":12,"docs":{"108":{"tf":1.0},"133":{"tf":1.0},"142":{"tf":1.4142135623730951},"285":{"tf":1.0},"293":{"tf":1.4142135623730951},"295":{"tf":1.0},"296":{"tf":1.4142135623730951},"308":{"tf":1.0},"326":{"tf":1.0},"354":{"tf":1.0},"500":{"tf":1.0},"90":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{"!":{"(":{"b":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"344":{"tf":1.0}}}}},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":6,"docs":{"492":{"tf":1.0},"495":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0},"512":{"tf":1.0}}}}}}},"y":{"b":{"df":1,"docs":{"115":{"tf":1.0}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"p":{"/":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"330":{"tf":1.0},"407":{"tf":1.0}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"266":{"tf":1.0},"293":{"tf":1.0}}}}}}}},"df":52,"docs":{"100":{"tf":1.0},"105":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"151":{"tf":1.0},"165":{"tf":1.4142135623730951},"174":{"tf":1.4142135623730951},"183":{"tf":1.0},"184":{"tf":1.4142135623730951},"185":{"tf":1.4142135623730951},"191":{"tf":1.0},"192":{"tf":1.0},"205":{"tf":1.4142135623730951},"225":{"tf":1.0},"231":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"252":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.4142135623730951},"266":{"tf":1.0},"275":{"tf":1.4142135623730951},"278":{"tf":1.0},"293":{"tf":1.0},"326":{"tf":1.0},"407":{"tf":1.0},"414":{"tf":1.0},"445":{"tf":1.4142135623730951},"446":{"tf":1.7320508075688772},"448":{"tf":2.0},"449":{"tf":1.4142135623730951},"451":{"tf":1.0},"463":{"tf":1.0},"475":{"tf":2.0},"477":{"tf":1.0},"479":{"tf":1.0},"480":{"tf":1.0},"485":{"tf":1.0},"486":{"tf":1.4142135623730951},"487":{"tf":1.4142135623730951},"489":{"tf":1.4142135623730951},"49":{"tf":1.0},"490":{"tf":1.4142135623730951},"521":{"tf":1.4142135623730951},"53":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":2.0},"92":{"tf":1.4142135623730951},"97":{"tf":1.0},"99":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"185":{"tf":1.0},"449":{"tf":1.0},"490":{"tf":1.0}}}}}}}}}},"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":14,"docs":{"0":{"tf":1.0},"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"12":{"tf":1.7320508075688772},"124":{"tf":1.0},"13":{"tf":1.4142135623730951},"2":{"tf":1.4142135623730951},"3":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":2.0},"43":{"tf":1.0},"45":{"tf":1.0},"67":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":4,"docs":{"143":{"tf":1.0},"203":{"tf":1.0},"215":{"tf":1.0},"371":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"n":{"df":10,"docs":{"111":{"tf":1.0},"350":{"tf":1.0},"514":{"tf":1.0},"56":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":6,"docs":{"20":{"tf":1.0},"291":{"tf":1.0},"368":{"tf":1.0},"372":{"tf":1.0},"378":{"tf":1.0},"392":{"tf":1.0}}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"281":{"tf":1.0},"376":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":10,"docs":{"104":{"tf":1.4142135623730951},"116":{"tf":1.0},"220":{"tf":1.0},"234":{"tf":1.0},"238":{"tf":1.4142135623730951},"250":{"tf":1.0},"460":{"tf":1.4142135623730951},"72":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.7320508075688772}}}},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"104":{"tf":1.0},"121":{"tf":1.0},"229":{"tf":1.0},"60":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":20,"docs":{"122":{"tf":1.0},"177":{"tf":1.4142135623730951},"190":{"tf":1.0},"20":{"tf":1.0},"200":{"tf":1.0},"255":{"tf":1.0},"262":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"287":{"tf":1.0},"289":{"tf":1.0},"291":{"tf":1.4142135623730951},"292":{"tf":1.0},"295":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.4142135623730951},"334":{"tf":1.0},"380":{"tf":1.0},"428":{"tf":1.0},"501":{"tf":1.0}}},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"262":{"tf":1.0},"373":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"466":{"tf":1.0},"76":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"g":{"df":12,"docs":{"107":{"tf":1.7320508075688772},"136":{"tf":1.7320508075688772},"141":{"tf":1.7320508075688772},"151":{"tf":1.0},"274":{"tf":1.0},"291":{"tf":2.23606797749979},"334":{"tf":1.0},"369":{"tf":1.0},"371":{"tf":1.0},"380":{"tf":1.0},"383":{"tf":1.0},"93":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"274":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"291":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}},"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"12":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"139":{"tf":1.4142135623730951},"237":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.0},"515":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":13,"docs":{"100":{"tf":1.0},"137":{"tf":1.0},"261":{"tf":1.4142135623730951},"270":{"tf":1.0},"279":{"tf":1.0},"308":{"tf":1.0},"314":{"tf":1.0},"357":{"tf":1.0},"411":{"tf":1.4142135623730951},"502":{"tf":1.0},"89":{"tf":1.0},"94":{"tf":1.0},"98":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"d":{"df":26,"docs":{"163":{"tf":1.0},"164":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"249":{"tf":1.0},"324":{"tf":1.0},"325":{"tf":1.0},"407":{"tf":1.0},"416":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.4142135623730951},"501":{"tf":1.0},"502":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.0},"514":{"tf":1.0},"517":{"tf":1.0},"518":{"tf":1.0},"519":{"tf":1.0},"520":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"346":{"tf":1.0},"361":{"tf":1.0},"391":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":11,"docs":{"156":{"tf":1.4142135623730951},"179":{"tf":1.0},"238":{"tf":1.4142135623730951},"321":{"tf":1.0},"328":{"tf":1.0},"345":{"tf":1.0},"386":{"tf":1.0},"405":{"tf":1.0},"413":{"tf":1.0},"460":{"tf":1.7320508075688772},"465":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"179":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"352":{"tf":1.0},"356":{"tf":1.0},"367":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"140":{"tf":1.0}},"u":{"df":0,"docs":{},"m":{"df":3,"docs":{"308":{"tf":1.0},"492":{"tf":1.0},"495":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"df":8,"docs":{"118":{"tf":1.0},"16":{"tf":1.0},"194":{"tf":1.0},"234":{"tf":1.4142135623730951},"241":{"tf":1.4142135623730951},"247":{"tf":1.0},"380":{"tf":1.0},"447":{"tf":1.0}}}}},"s":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"357":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"337":{"tf":1.0},"353":{"tf":1.0},"357":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":6,"docs":{"113":{"tf":1.0},"296":{"tf":1.0},"337":{"tf":1.0},"476":{"tf":1.0},"514":{"tf":1.0},"515":{"tf":1.0}}},"t":{"a":{"df":0,"docs":{},"k":{"df":3,"docs":{"104":{"tf":1.0},"113":{"tf":1.0},"332":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":3,"docs":{"338":{"tf":2.8284271247461903},"357":{"tf":1.7320508075688772},"372":{"tf":1.7320508075688772}}}}},"x":{"df":2,"docs":{"285":{"tf":1.0},"357":{"tf":1.0}}}},"k":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":4,"docs":{"171":{"tf":1.0},"213":{"tf":1.0},"244":{"tf":1.0},"304":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"d":{"df":1,"docs":{"329":{"tf":1.0}},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"291":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}},"df":10,"docs":{"155":{"tf":1.0},"174":{"tf":1.0},"19":{"tf":1.0},"257":{"tf":1.0},"259":{"tf":1.0},"285":{"tf":1.0},"289":{"tf":2.0},"290":{"tf":1.4142135623730951},"307":{"tf":1.0},"352":{"tf":1.0}},"l":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"(":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{"!":{"[":{"\\"":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":1,"docs":{"351":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"351":{"tf":1.0},"354":{"tf":1.0}},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"263":{"tf":1.0},"354":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"354":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":38,"docs":{"100":{"tf":1.0},"109":{"tf":1.0},"146":{"tf":1.0},"17":{"tf":1.0},"181":{"tf":1.0},"182":{"tf":1.0},"258":{"tf":1.0},"261":{"tf":1.0},"278":{"tf":1.0},"282":{"tf":1.4142135623730951},"283":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"292":{"tf":1.0},"316":{"tf":1.0},"324":{"tf":1.4142135623730951},"328":{"tf":1.0},"330":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"351":{"tf":1.7320508075688772},"352":{"tf":1.0},"354":{"tf":2.6457513110645907},"356":{"tf":1.0},"357":{"tf":2.0},"360":{"tf":1.0},"362":{"tf":1.0},"399":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"486":{"tf":1.0},"502":{"tf":1.0},"66":{"tf":1.0},"73":{"tf":1.0},"88":{"tf":1.0},"92":{"tf":1.0},"98":{"tf":1.0}},"s":{"/":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"407":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"104":{"tf":1.0}}}},"s":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"307":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"307":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"324":{"tf":1.4142135623730951}},"i":{"df":7,"docs":{"202":{"tf":1.0},"261":{"tf":1.0},"321":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.4142135623730951},"487":{"tf":1.0},"497":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"l":{"df":13,"docs":{"207":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"278":{"tf":1.0},"291":{"tf":1.0},"325":{"tf":1.0},"462":{"tf":1.0},"466":{"tf":2.0},"55":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"81":{"tf":1.0}},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"237":{"tf":1.0},"238":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"346":{"tf":1.0},"361":{"tf":1.0},"391":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"h":{"df":9,"docs":{"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"144":{"tf":1.0},"231":{"tf":1.7320508075688772},"234":{"tf":1.0},"247":{"tf":1.0},"250":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":9,"docs":{"117":{"tf":1.0},"231":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0},"330":{"tf":1.0},"343":{"tf":1.0},"353":{"tf":1.0},"368":{"tf":1.0},"479":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"102":{"tf":1.0},"103":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"44":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":8,"docs":{"110":{"tf":1.0},"144":{"tf":1.0},"281":{"tf":1.0},"373":{"tf":1.0},"390":{"tf":1.0},"57":{"tf":1.0},"63":{"tf":1.0},"85":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":9,"docs":{"233":{"tf":1.0},"249":{"tf":1.0},"285":{"tf":1.0},"350":{"tf":1.0},"353":{"tf":1.0},"357":{"tf":1.0},"460":{"tf":1.4142135623730951},"63":{"tf":1.0},"85":{"tf":1.0}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":1,"docs":{"241":{"tf":1.0}}}},"df":4,"docs":{"273":{"tf":1.0},"276":{"tf":1.0},"324":{"tf":4.69041575982343},"325":{"tf":1.4142135623730951}}}}},"n":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"502":{"tf":1.0}}}},"df":0,"docs":{}},"2":{"df":1,"docs":{"492":{"tf":1.0}}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}},"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":20,"docs":{"140":{"tf":1.7320508075688772},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"212":{"tf":1.0},"213":{"tf":1.0},"244":{"tf":1.0},"261":{"tf":1.0},"262":{"tf":1.4142135623730951},"290":{"tf":1.0},"292":{"tf":1.0},"296":{"tf":1.0},"307":{"tf":1.0},"326":{"tf":1.0},"333":{"tf":1.0},"337":{"tf":1.0},"373":{"tf":1.0},"493":{"tf":1.0},"51":{"tf":1.0},"511":{"tf":1.0},"89":{"tf":1.0}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":4,"docs":{"178":{"tf":1.0},"369":{"tf":1.0},"377":{"tf":1.0},"390":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"142":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":14,"docs":{"107":{"tf":1.0},"108":{"tf":1.0},"137":{"tf":1.0},"157":{"tf":1.0},"333":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"385":{"tf":1.0},"47":{"tf":1.0},"494":{"tf":1.0},"53":{"tf":1.4142135623730951},"63":{"tf":1.0},"64":{"tf":1.0},"73":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"105":{"tf":1.0},"217":{"tf":1.0},"454":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0},"457":{"tf":1.0},"458":{"tf":1.0},"469":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":8,"docs":{"169":{"tf":1.0},"196":{"tf":1.0},"2":{"tf":1.0},"28":{"tf":1.0},"31":{"tf":1.0},"36":{"tf":1.0},"4":{"tf":1.0},"450":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"l":{"df":4,"docs":{"298":{"tf":1.0},"300":{"tf":1.0},"310":{"tf":1.0},"335":{"tf":1.0}}}},"df":1,"docs":{"324":{"tf":2.449489742783178}},"e":{"df":0,"docs":{},"e":{"d":{"df":39,"docs":{"101":{"tf":1.0},"142":{"tf":1.0},"157":{"tf":1.0},"198":{"tf":1.0},"210":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.0},"233":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.4142135623730951},"238":{"tf":1.4142135623730951},"240":{"tf":1.0},"244":{"tf":1.0},"246":{"tf":1.0},"249":{"tf":1.0},"250":{"tf":1.7320508075688772},"251":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"323":{"tf":1.4142135623730951},"324":{"tf":1.0},"330":{"tf":1.0},"343":{"tf":1.0},"365":{"tf":1.4142135623730951},"368":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.4142135623730951},"383":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"456":{"tf":1.0},"46":{"tf":1.0},"460":{"tf":1.0},"494":{"tf":1.4142135623730951},"73":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0}}},"df":0,"docs":{}},"g":{"df":5,"docs":{"338":{"tf":1.0},"357":{"tf":1.0},"372":{"tf":1.0},"405":{"tf":1.0},"73":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":17,"docs":{"238":{"tf":1.0},"295":{"tf":1.0},"314":{"tf":1.0},"316":{"tf":1.0},"321":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.7320508075688772},"327":{"tf":1.0},"329":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"396":{"tf":1.0},"398":{"tf":1.0},"401":{"tf":1.0},"404":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}}},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":5,"docs":{"352":{"tf":1.0},"356":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"371":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":4,"docs":{"339":{"tf":1.0},"358":{"tf":1.0},"373":{"tf":1.0},"406":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"127":{"tf":1.0},"231":{"tf":1.0},"244":{"tf":1.0},"306":{"tf":1.0},"496":{"tf":1.0},"74":{"tf":1.0}}}}},"w":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"354":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":30,"docs":{"104":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"121":{"tf":1.0},"133":{"tf":1.0},"138":{"tf":1.0},"141":{"tf":1.0},"229":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.7320508075688772},"237":{"tf":1.0},"238":{"tf":1.0},"249":{"tf":1.0},"250":{"tf":1.0},"301":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":1.0},"325":{"tf":1.0},"356":{"tf":1.0},"36":{"tf":1.0},"405":{"tf":1.0},"413":{"tf":1.4142135623730951},"493":{"tf":1.0},"501":{"tf":1.0},"518":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"68":{"tf":1.0}}},"x":{"df":0,"docs":{},"t":{"df":14,"docs":{"102":{"tf":1.0},"158":{"tf":1.0},"192":{"tf":1.0},"210":{"tf":1.0},"211":{"tf":1.0},"237":{"tf":1.0},"252":{"tf":1.0},"282":{"tf":1.0},"330":{"tf":1.0},"348":{"tf":1.0},"363":{"tf":1.0},"393":{"tf":1.0},"479":{"tf":1.0},"68":{"tf":1.0}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"\'":{"df":1,"docs":{"308":{"tf":1.0}}},":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"304":{"tf":1.0}}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"304":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":43,"docs":{"109":{"tf":1.0},"134":{"tf":1.4142135623730951},"147":{"tf":1.0},"151":{"tf":1.0},"154":{"tf":1.0},"161":{"tf":1.4142135623730951},"170":{"tf":1.4142135623730951},"188":{"tf":2.0},"19":{"tf":1.0},"195":{"tf":1.4142135623730951},"266":{"tf":1.0},"267":{"tf":1.4142135623730951},"27":{"tf":1.0},"280":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.4142135623730951},"287":{"tf":1.0},"292":{"tf":1.4142135623730951},"295":{"tf":1.4142135623730951},"299":{"tf":1.7320508075688772},"300":{"tf":1.0},"304":{"tf":3.7416573867739413},"309":{"tf":1.0},"311":{"tf":1.0},"331":{"tf":1.0},"334":{"tf":2.0},"335":{"tf":2.449489742783178},"337":{"tf":1.4142135623730951},"338":{"tf":2.23606797749979},"339":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"345":{"tf":1.7320508075688772},"346":{"tf":1.0},"347":{"tf":1.4142135623730951},"354":{"tf":1.4142135623730951},"363":{"tf":1.0},"421":{"tf":1.0},"463":{"tf":1.0},"51":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"89":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"104":{"tf":1.0},"115":{"tf":1.0}}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"e":{".":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"324":{"tf":1.0},"396":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"272":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"273":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"(":{"\\"":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"402":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"t":{"a":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"325":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"325":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"272":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"272":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"407":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"407":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"273":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"i":{"d":{"df":3,"docs":{"323":{"tf":1.0},"401":{"tf":1.0},"512":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":2,"docs":{"261":{"tf":1.0},"264":{"tf":1.0}}}}}},"df":47,"docs":{"136":{"tf":1.0},"15":{"tf":1.0},"199":{"tf":1.7320508075688772},"201":{"tf":2.23606797749979},"202":{"tf":1.0},"217":{"tf":1.0},"223":{"tf":1.7320508075688772},"257":{"tf":2.23606797749979},"258":{"tf":1.0},"261":{"tf":2.23606797749979},"264":{"tf":1.4142135623730951},"27":{"tf":1.0},"279":{"tf":1.4142135623730951},"281":{"tf":1.7320508075688772},"314":{"tf":1.0},"321":{"tf":1.7320508075688772},"323":{"tf":1.4142135623730951},"324":{"tf":3.4641016151377544},"325":{"tf":2.23606797749979},"327":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.0},"357":{"tf":1.0},"365":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"367":{"tf":1.0},"371":{"tf":1.4142135623730951},"379":{"tf":1.0},"380":{"tf":1.0},"399":{"tf":1.4142135623730951},"404":{"tf":1.0},"407":{"tf":1.4142135623730951},"409":{"tf":1.7320508075688772},"463":{"tf":2.23606797749979},"480":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"495":{"tf":2.0},"497":{"tf":1.4142135623730951},"498":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"56":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"90":{"tf":1.0}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"s":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"498":{"tf":1.0}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"261":{"tf":1.0}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":2,"docs":{"261":{"tf":1.0},"324":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"264":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"354":{"tf":1.0}}},"df":0,"docs":{}}},"n":{"df":1,"docs":{"279":{"tf":1.0}},"e":{"df":4,"docs":{"324":{"tf":2.0},"351":{"tf":1.0},"354":{"tf":1.0},"466":{"tf":1.0}}}},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"137":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":2,"docs":{"140":{"tf":1.0},"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":2,"docs":{"143":{"tf":1.4142135623730951},"371":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":62,"docs":{"104":{"tf":1.7320508075688772},"105":{"tf":1.0},"108":{"tf":1.0},"111":{"tf":1.0},"114":{"tf":1.0},"137":{"tf":1.4142135623730951},"142":{"tf":1.0},"143":{"tf":1.4142135623730951},"150":{"tf":1.0},"151":{"tf":1.0},"169":{"tf":1.0},"196":{"tf":1.4142135623730951},"197":{"tf":2.0},"199":{"tf":1.0},"202":{"tf":1.0},"207":{"tf":1.7320508075688772},"220":{"tf":1.0},"224":{"tf":1.7320508075688772},"234":{"tf":1.0},"241":{"tf":2.6457513110645907},"247":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"264":{"tf":3.0},"270":{"tf":1.4142135623730951},"369":{"tf":1.0},"371":{"tf":1.0},"413":{"tf":1.0},"454":{"tf":1.4142135623730951},"455":{"tf":1.4142135623730951},"458":{"tf":1.4142135623730951},"460":{"tf":1.0},"461":{"tf":1.4142135623730951},"462":{"tf":2.0},"466":{"tf":2.0},"470":{"tf":1.0},"471":{"tf":1.4142135623730951},"478":{"tf":1.4142135623730951},"48":{"tf":1.0},"480":{"tf":1.7320508075688772},"492":{"tf":1.4142135623730951},"493":{"tf":2.449489742783178},"495":{"tf":1.4142135623730951},"498":{"tf":1.7320508075688772},"500":{"tf":1.0},"504":{"tf":1.7320508075688772},"518":{"tf":1.0},"52":{"tf":1.4142135623730951},"55":{"tf":1.4142135623730951},"56":{"tf":1.7320508075688772},"64":{"tf":1.4142135623730951},"67":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.7320508075688772},"76":{"tf":1.0},"79":{"tf":1.4142135623730951},"81":{"tf":1.0},"84":{"tf":1.4142135623730951},"86":{"tf":1.0},"93":{"tf":1.7320508075688772},"96":{"tf":1.0},"98":{"tf":1.4142135623730951}},"s":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"220":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"498":{"tf":1.0}}}},"df":0,"docs":{}}},"i":{"c":{"df":1,"docs":{"391":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"379":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"65":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"107":{"tf":1.0},"124":{"tf":1.0},"67":{"tf":1.0}}}}}},"w":{"df":7,"docs":{"130":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"327":{"tf":1.0},"462":{"tf":1.0},"467":{"tf":1.0},"500":{"tf":1.0},"96":{"tf":1.0}}}},"s":{"df":1,"docs":{"179":{"tf":1.0}}},"u":{"df":4,"docs":{"162":{"tf":1.0},"179":{"tf":1.0},"204":{"tf":1.0},"214":{"tf":1.7320508075688772}},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"291":{"tf":1.0},"296":{"tf":1.0}}}},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":7,"docs":{"308":{"tf":1.0},"346":{"tf":1.0},"492":{"tf":1.4142135623730951},"495":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"350":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":8,"docs":{"155":{"tf":1.0},"162":{"tf":1.0},"214":{"tf":1.0},"255":{"tf":1.0},"259":{"tf":1.0},"444":{"tf":1.0},"496":{"tf":1.0},"66":{"tf":1.4142135623730951}}}}}}}},"o":{"(":{"1":{"df":1,"docs":{"279":{"tf":1.0}}},"df":0,"docs":{},"n":{"df":2,"docs":{"279":{"tf":1.0},"502":{"tf":1.4142135623730951}}}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":16,"docs":{"203":{"tf":1.0},"238":{"tf":1.0},"323":{"tf":1.0},"326":{"tf":1.0},"401":{"tf":1.0},"463":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":2,"docs":{"55":{"tf":1.0},"72":{"tf":1.0}}}}},"i":{"d":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"n":{"df":6,"docs":{"124":{"tf":1.0},"136":{"tf":1.0},"151":{"tf":1.0},"483":{"tf":1.0},"64":{"tf":1.7320508075688772},"67":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"c":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"0":{"tf":1.0},"47":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":4,"docs":{"240":{"tf":1.0},"241":{"tf":1.4142135623730951},"330":{"tf":1.0},"360":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":16,"docs":{"135":{"tf":1.4142135623730951},"157":{"tf":1.0},"3":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0},"359":{"tf":1.4142135623730951},"365":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"371":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"65":{"tf":1.0},"90":{"tf":1.0}}}}}}},"k":{"(":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"324":{"tf":1.4142135623730951},"325":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"x":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"133":{"tf":1.0},"354":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"133":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"e":{"(":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"354":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"m":{"a":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"354":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"i":{"(":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"354":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":3,"docs":{"293":{"tf":1.0},"303":{"tf":1.4142135623730951},"335":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"354":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"f":{"df":0,"docs":{},"m":{"df":1,"docs":{"324":{"tf":1.0}}}},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"303":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"354":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"303":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"354":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"8":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"335":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"325":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":3,"docs":{"139":{"tf":1.0},"238":{"tf":1.0},"324":{"tf":1.4142135623730951}}},"l":{"d":{"df":4,"docs":{"120":{"tf":1.0},"141":{"tf":1.0},"413":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"199":{"tf":1.0},"495":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"m":{"a":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"=":{"\\"":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"1":{"1":{"4":{"3":{"4":{"df":1,"docs":{"182":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":8,"docs":{"182":{"tf":1.7320508075688772},"263":{"tf":1.0},"354":{"tf":1.7320508075688772},"359":{"tf":1.7320508075688772},"360":{"tf":1.0},"362":{"tf":1.0},"435":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"n":{"b":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"r":{"d":{"df":6,"docs":{"104":{"tf":1.0},"121":{"tf":1.0},"229":{"tf":1.0},"231":{"tf":1.0},"251":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"c":{"df":4,"docs":{"105":{"tf":1.0},"251":{"tf":1.0},"292":{"tf":1.0},"339":{"tf":1.0}}},"df":4,"docs":{"110":{"tf":1.0},"136":{"tf":1.0},"316":{"tf":1.4142135623730951},"500":{"tf":1.0}}},"p":{"a":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"148":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"1":{"df":1,"docs":{"134":{"tf":1.0}}},"df":0,"docs":{},"i":{"/":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"u":{"d":{"df":3,"docs":{"135":{"tf":1.0},"281":{"tf":1.0},"356":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},":":{":":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"352":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"=":{"\\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"182":{"tf":1.0}}}}},"df":0,"docs":{}},"df":2,"docs":{"182":{"tf":1.0},"354":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":20,"docs":{"109":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"140":{"tf":1.0},"147":{"tf":1.0},"182":{"tf":1.7320508075688772},"263":{"tf":1.0},"289":{"tf":1.0},"299":{"tf":1.0},"333":{"tf":1.4142135623730951},"334":{"tf":1.0},"337":{"tf":1.4142135623730951},"352":{"tf":1.0},"354":{"tf":1.7320508075688772},"357":{"tf":1.0},"359":{"tf":1.4142135623730951},"360":{"tf":1.0},"362":{"tf":1.0},"433":{"tf":1.0},"90":{"tf":1.0}}}},"df":9,"docs":{"2":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"3":{"tf":1.0},"38":{"tf":1.0},"46":{"tf":1.0},"467":{"tf":1.0},"498":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":10,"docs":{"208":{"tf":1.0},"231":{"tf":1.4142135623730951},"247":{"tf":1.0},"257":{"tf":1.0},"277":{"tf":1.0},"280":{"tf":1.0},"321":{"tf":1.0},"487":{"tf":1.0},"496":{"tf":1.0},"98":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"233":{"tf":1.0}}}}}}},"t":{"df":5,"docs":{"328":{"tf":1.4142135623730951},"388":{"tf":1.0},"406":{"tf":1.0},"413":{"tf":1.0},"97":{"tf":1.0}},"i":{"df":0,"docs":{},"m":{"df":8,"docs":{"137":{"tf":1.0},"142":{"tf":1.0},"157":{"tf":1.0},"279":{"tf":1.0},"285":{"tf":1.0},"289":{"tf":2.0},"356":{"tf":1.0},"384":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"<":{"&":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{"<":{"d":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"df":1,"docs":{"138":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"139":{"tf":1.0}}}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.4142135623730951}}}}},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":3,"docs":{"321":{"tf":1.0},"324":{"tf":1.4142135623730951},"398":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":5,"docs":{"321":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0},"330":{"tf":1.0},"399":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":46,"docs":{"1":{"tf":1.0},"12":{"tf":1.0},"135":{"tf":1.0},"157":{"tf":1.0},"162":{"tf":1.0},"167":{"tf":1.0},"170":{"tf":1.0},"171":{"tf":1.0},"176":{"tf":1.0},"180":{"tf":1.0},"2":{"tf":1.0},"204":{"tf":1.0},"212":{"tf":1.0},"215":{"tf":1.0},"225":{"tf":1.0},"269":{"tf":1.0},"28":{"tf":1.0},"287":{"tf":1.7320508075688772},"288":{"tf":1.0},"3":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.4142135623730951},"332":{"tf":1.0},"333":{"tf":1.4142135623730951},"334":{"tf":1.4142135623730951},"337":{"tf":1.0},"350":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"357":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"372":{"tf":1.7320508075688772},"388":{"tf":1.0},"399":{"tf":1.0},"4":{"tf":1.0},"407":{"tf":1.0},"413":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"80":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"/":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":2,"docs":{"244":{"tf":2.0},"87":{"tf":1.0}}}}}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"n":{"df":19,"docs":{"105":{"tf":1.0},"110":{"tf":1.4142135623730951},"122":{"tf":1.0},"14":{"tf":1.0},"213":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":1.7320508075688772},"269":{"tf":1.4142135623730951},"281":{"tf":1.0},"365":{"tf":1.4142135623730951},"369":{"tf":1.4142135623730951},"371":{"tf":1.7320508075688772},"377":{"tf":1.4142135623730951},"390":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.0},"87":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":4,"docs":{"110":{"tf":1.0},"365":{"tf":1.0},"368":{"tf":1.0},"87":{"tf":1.0}}}}}},"df":1,"docs":{"244":{"tf":1.4142135623730951}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"329":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"\'":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"73":{"tf":1.0},"77":{"tf":1.0}}}}},"d":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"113":{"tf":1.0},"141":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"46":{"tf":1.0},"98":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":8,"docs":{"100":{"tf":1.4142135623730951},"151":{"tf":1.0},"314":{"tf":1.0},"324":{"tf":1.0},"396":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"\'":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{"&":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"(":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":2.23606797749979}}}}}},"df":0,"docs":{}}}}}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"498":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}},"df":12,"docs":{"13":{"tf":1.0},"155":{"tf":1.0},"257":{"tf":1.0},"259":{"tf":1.0},"264":{"tf":1.0},"292":{"tf":1.0},"303":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"335":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":1.0},"498":{"tf":1.0}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":11,"docs":{"101":{"tf":1.0},"104":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"230":{"tf":1.0},"241":{"tf":1.4142135623730951},"247":{"tf":1.0},"258":{"tf":1.0},"291":{"tf":1.0},"70":{"tf":1.0},"93":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":5,"docs":{"289":{"tf":1.0},"322":{"tf":1.0},"358":{"tf":1.0},"405":{"tf":1.0},"410":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"y":{"df":2,"docs":{"285":{"tf":1.0},"289":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"d":{"df":16,"docs":{"110":{"tf":1.4142135623730951},"140":{"tf":1.0},"244":{"tf":1.0},"251":{"tf":1.0},"285":{"tf":1.0},"290":{"tf":1.4142135623730951},"291":{"tf":2.449489742783178},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.0},"369":{"tf":1.0},"74":{"tf":1.0},"82":{"tf":1.0},"88":{"tf":1.0},"91":{"tf":1.0}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"v":{"df":0,"docs":{},"g":{"df":1,"docs":{"27":{"tf":1.0}}}}}},"df":12,"docs":{"102":{"tf":1.0},"158":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.0},"420":{"tf":1.0},"430":{"tf":1.0},"441":{"tf":1.0},"487":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0}}}}}}}}},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"*":{"*":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"502":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":2,"docs":{"316":{"tf":1.0},"98":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":7,"docs":{"202":{"tf":1.0},"205":{"tf":1.0},"316":{"tf":1.4142135623730951},"502":{"tf":1.4142135623730951},"55":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.4142135623730951}}}}}}}}}}},"p":{"5":{"0":{"df":1,"docs":{"391":{"tf":1.0}}},"df":0,"docs":{}},"9":{"5":{"df":1,"docs":{"391":{"tf":1.0}}},"9":{"df":1,"docs":{"391":{"tf":1.0}}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":6,"docs":{"165":{"tf":1.7320508075688772},"166":{"tf":1.0},"175":{"tf":1.0},"181":{"tf":1.0},"184":{"tf":1.0},"448":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":2,"docs":{"324":{"tf":1.7320508075688772},"398":{"tf":1.0}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{".":{"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":12,"docs":{"27":{"tf":1.0},"28":{"tf":1.0},"31":{"tf":1.0},"314":{"tf":1.7320508075688772},"318":{"tf":1.7320508075688772},"32":{"tf":1.0},"324":{"tf":3.3166247903554},"36":{"tf":1.4142135623730951},"398":{"tf":1.0},"40":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"i":{"d":{"df":1,"docs":{"353":{"tf":1.0}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"39":{"tf":1.0}}},"i":{"c":{"df":2,"docs":{"142":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"96":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":22,"docs":{"454":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0},"457":{"tf":1.0},"458":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.4142135623730951},"501":{"tf":1.0},"502":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.0},"514":{"tf":1.0},"515":{"tf":1.0},"517":{"tf":1.0},"518":{"tf":1.0},"519":{"tf":1.0},"520":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"285":{"tf":1.0},"514":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{".":{"a":{"d":{"d":{"_":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"(":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"100":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":5,"docs":{"314":{"tf":1.0},"324":{"tf":2.0},"329":{"tf":1.0},"404":{"tf":1.0},"96":{"tf":1.0}}}}},"s":{"df":19,"docs":{"100":{"tf":1.4142135623730951},"137":{"tf":1.4142135623730951},"224":{"tf":1.0},"264":{"tf":1.7320508075688772},"322":{"tf":1.7320508075688772},"323":{"tf":2.0},"324":{"tf":2.6457513110645907},"327":{"tf":1.7320508075688772},"342":{"tf":1.0},"379":{"tf":1.0},"400":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"410":{"tf":1.4142135623730951},"413":{"tf":1.4142135623730951},"514":{"tf":1.0},"97":{"tf":1.4142135623730951}},"e":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"322":{"tf":1.0},"324":{"tf":1.0}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}},"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"97":{"tf":1.0}}}}}}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"327":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":11,"docs":{"207":{"tf":1.0},"264":{"tf":1.0},"278":{"tf":1.0},"317":{"tf":1.4142135623730951},"322":{"tf":1.0},"324":{"tf":1.0},"330":{"tf":1.0},"400":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"410":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"223":{"tf":1.0}},"e":{"df":0,"docs":{},"q":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":2,"docs":{"125":{"tf":1.0},"480":{"tf":1.0}}}}},"df":2,"docs":{"352":{"tf":1.0},"65":{"tf":1.0}},"t":{"df":1,"docs":{"502":{"tf":1.0}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"250":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"177":{"tf":1.4142135623730951},"179":{"tf":1.0},"190":{"tf":1.0}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"178":{"tf":1.0}}},"df":0,"docs":{}}}}},"t":{"df":6,"docs":{"104":{"tf":1.0},"123":{"tf":1.0},"247":{"tf":1.0},"251":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"/":{".":{"df":0,"docs":{},"k":{"b":{"df":1,"docs":{"222":{"tf":1.0}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"139":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"k":{"b":{"df":1,"docs":{"490":{"tf":1.0}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":3,"docs":{"170":{"tf":1.0},"185":{"tf":1.0},"449":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":1,"docs":{"204":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"/":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"497":{"tf":1.0}}}},"df":0,"docs":{}}},"df":3,"docs":{"193":{"tf":1.0},"476":{"tf":1.0},"490":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"476":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"/":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"449":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"169":{"tf":1.0},"196":{"tf":1.0},"450":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\\"":{".":{"df":0,"docs":{},"k":{"b":{"df":1,"docs":{"303":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"=":{"\\"":{"$":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"/":{".":{"c":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{":":{"$":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"188":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":14,"docs":{"139":{"tf":1.4142135623730951},"164":{"tf":1.0},"188":{"tf":1.0},"280":{"tf":1.0},"293":{"tf":1.0},"306":{"tf":1.0},"324":{"tf":2.0},"328":{"tf":1.0},"386":{"tf":1.0},"413":{"tf":1.0},"449":{"tf":1.0},"497":{"tf":1.4142135623730951},"498":{"tf":1.0},"80":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":1,"docs":{"237":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"75":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":77,"docs":{"101":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":1.0},"108":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.7320508075688772},"116":{"tf":1.0},"121":{"tf":1.0},"123":{"tf":1.4142135623730951},"124":{"tf":1.0},"125":{"tf":1.4142135623730951},"137":{"tf":1.0},"141":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"144":{"tf":1.0},"145":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.0},"196":{"tf":1.4142135623730951},"209":{"tf":2.0},"230":{"tf":1.0},"235":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":2.0},"238":{"tf":2.23606797749979},"241":{"tf":1.7320508075688772},"243":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.4142135623730951},"251":{"tf":1.0},"257":{"tf":1.0},"270":{"tf":1.0},"286":{"tf":1.0},"335":{"tf":1.0},"338":{"tf":1.0},"347":{"tf":1.0},"369":{"tf":1.4142135623730951},"376":{"tf":1.0},"455":{"tf":2.0},"458":{"tf":1.4142135623730951},"461":{"tf":2.0},"463":{"tf":2.23606797749979},"466":{"tf":1.0},"469":{"tf":1.0},"470":{"tf":1.4142135623730951},"473":{"tf":1.0},"48":{"tf":1.0},"492":{"tf":2.0},"493":{"tf":2.23606797749979},"495":{"tf":2.0},"498":{"tf":1.4142135623730951},"504":{"tf":1.0},"507":{"tf":1.0},"509":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.0},"518":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"55":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":2.449489742783178},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.4142135623730951},"82":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"90":{"tf":1.0},"98":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"270":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"81":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"y":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":5,"docs":{"171":{"tf":1.0},"213":{"tf":1.0},"244":{"tf":1.0},"304":{"tf":1.0},"335":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"234":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":11,"docs":{"110":{"tf":1.4142135623730951},"113":{"tf":1.0},"136":{"tf":1.0},"241":{"tf":1.0},"269":{"tf":1.0},"278":{"tf":1.0},"317":{"tf":1.0},"319":{"tf":1.0},"352":{"tf":1.0},"57":{"tf":1.0},"91":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"124":{"tf":1.0},"238":{"tf":1.0},"366":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":17,"docs":{"198":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.0},"247":{"tf":1.0},"250":{"tf":1.4142135623730951},"279":{"tf":1.0},"289":{"tf":1.0},"339":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"371":{"tf":1.4142135623730951},"385":{"tf":1.0},"456":{"tf":1.0},"460":{"tf":1.4142135623730951},"494":{"tf":1.0},"73":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"156":{"tf":1.0}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"139":{"tf":1.0},"280":{"tf":1.0},"477":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"122":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"120":{"tf":1.0},"124":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.0}}}}}}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":11,"docs":{"324":{"tf":2.0},"328":{"tf":2.23606797749979},"330":{"tf":1.4142135623730951},"387":{"tf":1.0},"388":{"tf":1.0},"389":{"tf":1.0},"390":{"tf":1.0},"395":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":2.6457513110645907},"413":{"tf":1.0}}}}},"df":2,"docs":{"0":{"tf":1.0},"47":{"tf":1.0}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":7,"docs":{"102":{"tf":1.4142135623730951},"126":{"tf":1.0},"130":{"tf":1.4142135623730951},"131":{"tf":1.0},"15":{"tf":1.0},"285":{"tf":1.0},"50":{"tf":1.0}}}}}}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"90":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"157":{"tf":1.0},"70":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"155":{"tf":1.0},"337":{"tf":1.0}}}}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"65":{"tf":1.0}}}},"n":{"df":2,"docs":{"500":{"tf":1.4142135623730951},"98":{"tf":1.4142135623730951}},"e":{"df":1,"docs":{"135":{"tf":1.0}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"12":{"tf":1.4142135623730951}}}}}}},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"304":{"tf":1.4142135623730951},"347":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"46":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"151":{"tf":1.0},"39":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"142":{"tf":1.0},"95":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"377":{"tf":1.4142135623730951},"87":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"135":{"tf":1.0},"366":{"tf":1.4142135623730951},"385":{"tf":1.0}}}},"p":{"df":1,"docs":{"324":{"tf":1.0}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"405":{"tf":1.0},"413":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"2":{"tf":1.0},"43":{"tf":1.7320508075688772}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"120":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"337":{"tf":1.0},"356":{"tf":1.0},"371":{"tf":1.0},"404":{"tf":1.0},"73":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"247":{"tf":1.0},"351":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"234":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":3,"docs":{"111":{"tf":1.0},"230":{"tf":1.0},"385":{"tf":1.0}}}}}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":17,"docs":{"104":{"tf":1.0},"108":{"tf":1.0},"122":{"tf":1.0},"142":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":1.4142135623730951},"253":{"tf":1.0},"305":{"tf":1.0},"371":{"tf":1.0},"461":{"tf":1.4142135623730951},"462":{"tf":1.0},"492":{"tf":1.0},"496":{"tf":1.0},"516":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"90":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"492":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":10,"docs":{"104":{"tf":1.4142135623730951},"107":{"tf":1.0},"117":{"tf":1.0},"136":{"tf":1.0},"141":{"tf":1.0},"238":{"tf":1.4142135623730951},"241":{"tf":1.4142135623730951},"371":{"tf":1.0},"52":{"tf":1.0},"93":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"291":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"@":{"1":{"0":{"df":1,"docs":{"361":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":2,"docs":{"303":{"tf":1.0},"357":{"tf":1.0}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"324":{"tf":1.7320508075688772}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"65":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"239":{"tf":1.0},"240":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"160":{"tf":1.0},"195":{"tf":1.0},"415":{"tf":1.0},"56":{"tf":1.0},"80":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"295":{"tf":1.0},"324":{"tf":1.0}}}},"r":{"df":0,"docs":{},"v":{"df":20,"docs":{"100":{"tf":1.0},"104":{"tf":1.0},"136":{"tf":1.0},"151":{"tf":1.0},"238":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0},"314":{"tf":1.4142135623730951},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"321":{"tf":1.0},"327":{"tf":1.0},"330":{"tf":1.0},"351":{"tf":1.0},"371":{"tf":1.0},"396":{"tf":1.0},"404":{"tf":1.4142135623730951},"467":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"327":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"s":{"df":1,"docs":{"28":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"332":{"tf":1.0},"337":{"tf":1.0},"502":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"39":{"tf":1.0}}}}}}},"df":2,"docs":{"39":{"tf":1.7320508075688772},"4":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":2,"docs":{"363":{"tf":1.0},"393":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":23,"docs":{"140":{"tf":1.0},"143":{"tf":1.0},"178":{"tf":1.0},"257":{"tf":1.0},"281":{"tf":1.0},"287":{"tf":1.4142135623730951},"288":{"tf":1.0},"289":{"tf":1.4142135623730951},"291":{"tf":1.7320508075688772},"292":{"tf":1.0},"295":{"tf":1.4142135623730951},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"369":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"456":{"tf":1.0},"494":{"tf":1.0},"51":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":18,"docs":{"101":{"tf":1.0},"126":{"tf":1.0},"131":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"152":{"tf":1.0},"157":{"tf":1.0},"87":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":11,"docs":{"231":{"tf":1.4142135623730951},"244":{"tf":1.7320508075688772},"329":{"tf":1.0},"369":{"tf":1.0},"401":{"tf":1.0},"496":{"tf":1.4142135623730951},"500":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772},"88":{"tf":1.7320508075688772},"96":{"tf":1.4142135623730951},"99":{"tf":1.0}}},"y":{"\'":{":":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"*":{"*":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"500":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"*":{"*":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"500":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"500":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"v":{"a":{"c":{"df":0,"docs":{},"i":{"df":8,"docs":{"135":{"tf":1.4142135623730951},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.4142135623730951},"359":{"tf":1.4142135623730951},"65":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":16,"docs":{"104":{"tf":1.4142135623730951},"122":{"tf":1.0},"230":{"tf":1.0},"233":{"tf":1.0},"236":{"tf":1.4142135623730951},"237":{"tf":1.0},"238":{"tf":1.0},"240":{"tf":1.0},"243":{"tf":1.0},"246":{"tf":1.0},"249":{"tf":1.0},"314":{"tf":1.0},"333":{"tf":1.0},"48":{"tf":1.0},"73":{"tf":1.0},"75":{"tf":1.7320508075688772}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"267":{"tf":1.0},"279":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.0}}}}}},"d":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"304":{"tf":1.0}}}}}},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"289":{"tf":1.0}}}},"df":0,"docs":{}}},"df":2,"docs":{"307":{"tf":1.7320508075688772},"337":{"tf":1.0}},"u":{"c":{"df":0,"docs":{},"t":{"df":18,"docs":{"109":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"135":{"tf":1.0},"153":{"tf":1.0},"18":{"tf":1.0},"231":{"tf":1.4142135623730951},"244":{"tf":1.0},"246":{"tf":1.0},"289":{"tf":1.0},"299":{"tf":1.0},"350":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.4142135623730951},"361":{"tf":1.0},"494":{"tf":1.0},"74":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":12,"docs":{"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"520":{"tf":1.0}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"202":{"tf":1.0},"496":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"65":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":7,"docs":{"203":{"tf":1.4142135623730951},"210":{"tf":1.0},"238":{"tf":1.0},"259":{"tf":1.0},"55":{"tf":1.0},"59":{"tf":1.0},"76":{"tf":1.7320508075688772}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"\'":{"df":1,"docs":{"480":{"tf":1.0}}},")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"497":{"tf":1.0}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"337":{"tf":1.0}}}},"df":0,"docs":{}}},"/":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"244":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"(":{"&":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"274":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"274":{"tf":1.0}}}}}}}}},"df":72,"docs":{"105":{"tf":1.4142135623730951},"110":{"tf":3.1622776601683795},"120":{"tf":1.0},"124":{"tf":1.0},"135":{"tf":1.4142135623730951},"140":{"tf":1.7320508075688772},"144":{"tf":1.0},"169":{"tf":2.0},"171":{"tf":1.7320508075688772},"193":{"tf":1.0},"196":{"tf":1.4142135623730951},"209":{"tf":1.0},"212":{"tf":1.0},"213":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.4142135623730951},"242":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":2.449489742783178},"251":{"tf":1.4142135623730951},"258":{"tf":1.0},"269":{"tf":1.4142135623730951},"270":{"tf":1.0},"274":{"tf":1.0},"281":{"tf":1.4142135623730951},"285":{"tf":1.0},"290":{"tf":1.7320508075688772},"292":{"tf":1.0},"307":{"tf":1.0},"333":{"tf":1.0},"337":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":2.0},"365":{"tf":1.4142135623730951},"366":{"tf":1.0},"368":{"tf":1.4142135623730951},"369":{"tf":2.449489742783178},"371":{"tf":2.23606797749979},"372":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.4142135623730951},"377":{"tf":1.0},"381":{"tf":1.7320508075688772},"417":{"tf":1.0},"450":{"tf":1.0},"463":{"tf":1.7320508075688772},"48":{"tf":1.0},"480":{"tf":1.0},"492":{"tf":1.4142135623730951},"493":{"tf":1.4142135623730951},"496":{"tf":1.4142135623730951},"5":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"504":{"tf":1.4142135623730951},"505":{"tf":1.0},"506":{"tf":1.0},"507":{"tf":1.0},"51":{"tf":1.0},"511":{"tf":2.23606797749979},"57":{"tf":2.0},"60":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"82":{"tf":1.0},"86":{"tf":2.23606797749979},"87":{"tf":1.0},"88":{"tf":1.7320508075688772},"89":{"tf":1.0},"91":{"tf":1.0},"96":{"tf":1.0}},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"56":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":9,"docs":{"197":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"463":{"tf":1.0},"487":{"tf":1.0},"510":{"tf":1.4142135623730951},"511":{"tf":1.0},"512":{"tf":1.0},"92":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"342":{"tf":1.0}}}},"p":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{".":{"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"a":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":8,"docs":{"108":{"tf":1.0},"231":{"tf":1.0},"244":{"tf":1.0},"277":{"tf":1.0},"371":{"tf":1.0},"461":{"tf":1.0},"496":{"tf":1.0},"74":{"tf":1.0}}}},"df":2,"docs":{"321":{"tf":1.0},"324":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":29,"docs":{"100":{"tf":1.0},"314":{"tf":2.0},"316":{"tf":1.0},"319":{"tf":2.0},"321":{"tf":1.4142135623730951},"323":{"tf":1.0},"324":{"tf":3.7416573867739413},"326":{"tf":2.23606797749979},"330":{"tf":1.4142135623730951},"396":{"tf":1.4142135623730951},"398":{"tf":1.4142135623730951},"401":{"tf":1.0},"402":{"tf":1.0},"404":{"tf":1.4142135623730951},"407":{"tf":1.0},"467":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":2.23606797749979},"501":{"tf":1.0},"502":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"323":{"tf":1.0},"324":{"tf":1.0},"401":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"y":{"1":{"df":1,"docs":{"319":{"tf":1.0}}},"2":{"df":1,"docs":{"319":{"tf":1.0}}},"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"500":{"tf":1.7320508075688772},"99":{"tf":1.0}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":2,"docs":{"500":{"tf":1.7320508075688772},"99":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"s":{"df":5,"docs":{"234":{"tf":1.4142135623730951},"395":{"tf":1.0},"460":{"tf":1.0},"465":{"tf":2.0},"494":{"tf":1.4142135623730951}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"150":{"tf":1.0},"65":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"s":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":1,"docs":{"250":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":12,"docs":{"151":{"tf":1.0},"258":{"tf":1.4142135623730951},"275":{"tf":1.0},"414":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.4142135623730951},"485":{"tf":1.0},"486":{"tf":1.0},"487":{"tf":1.0},"53":{"tf":1.0},"63":{"tf":1.0},"92":{"tf":1.0}}}}},"df":1,"docs":{"161":{"tf":1.0}}}},"v":{"df":0,"docs":{},"i":{"d":{"df":54,"docs":{"105":{"tf":1.0},"109":{"tf":1.4142135623730951},"133":{"tf":1.0},"134":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"147":{"tf":1.4142135623730951},"149":{"tf":1.0},"156":{"tf":1.0},"180":{"tf":1.0},"182":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"212":{"tf":1.0},"238":{"tf":1.0},"263":{"tf":1.0},"285":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"289":{"tf":1.4142135623730951},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"302":{"tf":1.0},"306":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.7320508075688772},"334":{"tf":1.7320508075688772},"337":{"tf":1.0},"338":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"350":{"tf":1.4142135623730951},"351":{"tf":1.4142135623730951},"352":{"tf":1.0},"353":{"tf":2.0},"354":{"tf":2.8284271247461903},"356":{"tf":2.23606797749979},"357":{"tf":2.0},"359":{"tf":1.4142135623730951},"360":{"tf":1.0},"361":{"tf":1.7320508075688772},"393":{"tf":1.0},"431":{"tf":1.0},"487":{"tf":1.0},"49":{"tf":1.0},"495":{"tf":1.0},"500":{"tf":1.0},"503":{"tf":1.0},"51":{"tf":1.0},"510":{"tf":1.0},"63":{"tf":1.0},"89":{"tf":1.4142135623730951},"90":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"b":{"df":17,"docs":{"237":{"tf":1.0},"261":{"tf":4.58257569495584},"262":{"tf":1.0},"263":{"tf":1.0},"277":{"tf":1.0},"293":{"tf":3.0},"303":{"tf":1.0},"321":{"tf":3.872983346207417},"322":{"tf":1.0},"323":{"tf":2.23606797749979},"324":{"tf":5.916079783099616},"325":{"tf":1.7320508075688772},"335":{"tf":1.0},"354":{"tf":2.23606797749979},"373":{"tf":1.0},"398":{"tf":3.3166247903554},"399":{"tf":1.7320508075688772}},"l":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"250":{"tf":2.6457513110645907},"356":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"46":{"tf":1.0}}}},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":18,"docs":{"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"344":{"tf":1.0},"48":{"tf":1.0},"55":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"371":{"tf":1.0}}}},"t":{"df":1,"docs":{"307":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":11,"docs":{"109":{"tf":1.0},"241":{"tf":1.0},"289":{"tf":1.0},"350":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.7320508075688772},"359":{"tf":1.7320508075688772},"361":{"tf":1.4142135623730951},"90":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":74,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"105":{"tf":1.0},"108":{"tf":1.0},"118":{"tf":1.0},"123":{"tf":1.0},"125":{"tf":1.0},"137":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.4142135623730951},"198":{"tf":1.0},"222":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.4142135623730951},"250":{"tf":1.0},"255":{"tf":1.0},"258":{"tf":1.0},"266":{"tf":1.0},"271":{"tf":1.0},"274":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"278":{"tf":1.0},"279":{"tf":1.0},"28":{"tf":1.0},"285":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"302":{"tf":1.0},"316":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.4142135623730951},"325":{"tf":1.4142135623730951},"328":{"tf":1.0},"330":{"tf":1.4142135623730951},"356":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.4142135623730951},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"369":{"tf":1.0},"372":{"tf":1.0},"380":{"tf":1.4142135623730951},"381":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"396":{"tf":1.0},"402":{"tf":1.0},"407":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"452":{"tf":1.0},"454":{"tf":1.0},"456":{"tf":1.0},"465":{"tf":1.4142135623730951},"47":{"tf":1.0},"473":{"tf":1.0},"487":{"tf":1.0},"49":{"tf":1.0},"492":{"tf":2.0},"494":{"tf":1.7320508075688772},"499":{"tf":1.0},"51":{"tf":1.0},"515":{"tf":1.4142135623730951},"517":{"tf":1.0},"519":{"tf":1.0},"53":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"73":{"tf":1.0},"89":{"tf":1.0},"99":{"tf":1.4142135623730951}}},"y":{"=":{"\'":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"469":{"tf":1.0}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"273":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"a":{"b":{"df":0,"docs":{},"l":{"df":10,"docs":{"105":{"tf":1.0},"129":{"tf":1.0},"251":{"tf":1.0},"321":{"tf":1.0},"330":{"tf":1.0},"365":{"tf":1.0},"401":{"tf":1.0},"404":{"tf":1.0},"49":{"tf":1.0},"68":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"266":{"tf":1.0},"293":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"113":{"tf":1.4142135623730951},"46":{"tf":1.0},"480":{"tf":1.0}}}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":17,"docs":{"102":{"tf":1.0},"120":{"tf":1.0},"130":{"tf":1.4142135623730951},"158":{"tf":1.0},"16":{"tf":1.0},"192":{"tf":1.0},"194":{"tf":1.0},"207":{"tf":1.4142135623730951},"24":{"tf":1.0},"252":{"tf":1.4142135623730951},"40":{"tf":1.0},"445":{"tf":1.0},"447":{"tf":1.0},"480":{"tf":1.0},"521":{"tf":1.0},"68":{"tf":1.0},"72":{"tf":1.0}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"502":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":9,"docs":{"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"238":{"tf":2.23606797749979},"247":{"tf":2.0},"501":{"tf":1.0},"502":{"tf":1.0},"76":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":1,"docs":{"279":{"tf":1.0}},"p":{"df":1,"docs":{"121":{"tf":1.0}}}},"p":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"372":{"tf":1.0}}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"372":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"238":{"tf":2.23606797749979},"241":{"tf":1.0},"391":{"tf":1.4142135623730951}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"241":{"tf":1.0},"251":{"tf":1.4142135623730951},"84":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"329":{"tf":1.4142135623730951}},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"46":{"tf":1.0}}}},"d":{"a":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"137":{"tf":1.7320508075688772},"143":{"tf":1.0},"157":{"tf":1.0},"333":{"tf":1.0}}}},"df":0,"docs":{}},"df":13,"docs":{"1":{"tf":1.4142135623730951},"113":{"tf":1.4142135623730951},"137":{"tf":1.0},"139":{"tf":1.0},"2":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"247":{"tf":1.0},"339":{"tf":1.0},"4":{"tf":1.7320508075688772},"479":{"tf":1.0},"503":{"tf":1.0},"504":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"36":{"tf":1.0}}}},"i":{"df":3,"docs":{"130":{"tf":1.0},"498":{"tf":1.0},"68":{"tf":1.0}}},"m":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"32":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":4,"docs":{"112":{"tf":1.0},"228":{"tf":1.0},"241":{"tf":1.0},"38":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"56":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"365":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":6,"docs":{"189":{"tf":1.0},"259":{"tf":1.0},"357":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"120":{"tf":1.0},"238":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"230":{"tf":1.0},"463":{"tf":1.0},"511":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"5":{"tf":1.0}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":9,"docs":{"164":{"tf":1.0},"2":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0},"330":{"tf":1.0},"345":{"tf":1.0},"359":{"tf":1.0},"466":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"133":{"tf":1.0},"285":{"tf":1.0},"298":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"371":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"d":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"323":{"tf":1.0},"401":{"tf":1.0}}},"df":0,"docs":{}}}},"df":14,"docs":{"124":{"tf":1.0},"151":{"tf":1.0},"17":{"tf":1.0},"198":{"tf":1.0},"232":{"tf":1.0},"250":{"tf":1.0},"291":{"tf":1.0},"460":{"tf":1.0},"467":{"tf":1.0},"494":{"tf":1.0},"55":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"142":{"tf":1.0},"90":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"75":{"tf":1.0}},"s":{"df":2,"docs":{"291":{"tf":1.4142135623730951},"324":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":4,"docs":{"233":{"tf":1.0},"234":{"tf":2.449489742783178},"241":{"tf":2.449489742783178},"465":{"tf":1.0}},"s":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":4,"docs":{"104":{"tf":1.0},"236":{"tf":1.0},"238":{"tf":1.0},"48":{"tf":1.0}}}}},"df":0,"docs":{}}},"u":{"c":{"df":1,"docs":{"134":{"tf":1.0}},"t":{"df":1,"docs":{"234":{"tf":1.0}}}},"df":0,"docs":{}}},"df":1,"docs":{"115":{"tf":1.0}},"f":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{".":{"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"134":{"tf":1.0},"473":{"tf":1.0},"500":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":3,"docs":{"264":{"tf":1.0},"324":{"tf":1.4142135623730951},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":32,"docs":{"100":{"tf":1.0},"19":{"tf":1.0},"192":{"tf":1.0},"212":{"tf":1.0},"218":{"tf":1.0},"225":{"tf":1.0},"23":{"tf":1.0},"233":{"tf":1.0},"25":{"tf":1.0},"252":{"tf":1.0},"264":{"tf":1.0},"311":{"tf":1.0},"314":{"tf":1.7320508075688772},"318":{"tf":1.4142135623730951},"324":{"tf":2.449489742783178},"347":{"tf":1.4142135623730951},"362":{"tf":1.0},"392":{"tf":1.0},"396":{"tf":1.0},"40":{"tf":1.0},"412":{"tf":1.0},"442":{"tf":1.0},"466":{"tf":1.0},"479":{"tf":1.4142135623730951},"480":{"tf":1.0},"486":{"tf":1.4142135623730951},"521":{"tf":1.0},"59":{"tf":1.0},"63":{"tf":1.0},"73":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"136":{"tf":1.0},"141":{"tf":1.0},"55":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"r":{"\\"":{"#":{"(":{"\\\\":{"df":0,"docs":{},"w":{"+":{")":{"\\"":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"(":{"\\\\":{"df":0,"docs":{},"w":{"+":{")":{":":{":":{"\\\\":{"df":0,"docs":{},"s":{"*":{"(":{"[":{"^":{"\\\\":{"df":0,"docs":{},"n":{"]":{"+":{")":{"\\"":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"\\\\":{"(":{"\\\\":{"(":{"(":{"[":{"^":{")":{"]":{"+":{")":{"\\\\":{")":{"\\\\":{")":{"\\"":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\\\":{"[":{"(":{"[":{"^":{"\\\\":{"]":{"]":{"+":{")":{"\\\\":{"]":{"\\\\":{"]":{"\\"":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"404":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"214":{"tf":1.0},"472":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"259":{"tf":1.0}}}}},"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":12,"docs":{"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"383":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"409":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"494":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"t":{"df":30,"docs":{"101":{"tf":1.0},"108":{"tf":1.0},"114":{"tf":1.0},"116":{"tf":1.0},"129":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"200":{"tf":1.0},"217":{"tf":1.0},"234":{"tf":1.4142135623730951},"246":{"tf":1.0},"251":{"tf":1.0},"258":{"tf":1.0},"261":{"tf":1.0},"318":{"tf":1.0},"350":{"tf":1.0},"36":{"tf":1.4142135623730951},"458":{"tf":1.0},"461":{"tf":1.7320508075688772},"466":{"tf":1.0},"473":{"tf":1.0},"493":{"tf":1.0},"495":{"tf":1.7320508075688772},"512":{"tf":1.7320508075688772},"518":{"tf":1.7320508075688772},"56":{"tf":1.0},"61":{"tf":1.0},"70":{"tf":1.0},"79":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":9,"docs":{"111":{"tf":1.0},"137":{"tf":1.4142135623730951},"199":{"tf":1.4142135623730951},"238":{"tf":1.0},"250":{"tf":1.7320508075688772},"493":{"tf":1.4142135623730951},"495":{"tf":2.0},"56":{"tf":1.0},"79":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":35,"docs":{"105":{"tf":1.0},"111":{"tf":1.4142135623730951},"137":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.7320508075688772},"151":{"tf":1.0},"199":{"tf":2.0},"201":{"tf":1.4142135623730951},"231":{"tf":1.0},"234":{"tf":1.0},"250":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"261":{"tf":1.0},"27":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"379":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"404":{"tf":1.0},"49":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":2.23606797749979},"512":{"tf":1.4142135623730951},"53":{"tf":1.0},"56":{"tf":1.0},"70":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"78":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":5,"docs":{"164":{"tf":1.0},"165":{"tf":1.7320508075688772},"166":{"tf":1.4142135623730951},"184":{"tf":1.0},"448":{"tf":1.0}}}},"df":0,"docs":{},"v":{"df":7,"docs":{"101":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.4142135623730951},"27":{"tf":1.0},"371":{"tf":1.0},"466":{"tf":1.0},"53":{"tf":1.0}}}},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"231":{"tf":1.0},"289":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"a":{"d":{"df":3,"docs":{"2":{"tf":1.4142135623730951},"285":{"tf":1.0},"38":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"324":{"tf":2.0},"328":{"tf":1.0},"413":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":4,"docs":{"115":{"tf":1.0},"142":{"tf":1.0},"207":{"tf":1.0},"480":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"v":{"df":4,"docs":{"156":{"tf":1.0},"193":{"tf":1.7320508075688772},"257":{"tf":1.0},"8":{"tf":1.0}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"280":{"tf":1.0},"296":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"276":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"329":{"tf":1.0}},"e":{"d":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"329":{"tf":1.0}}}}}},"[":{"0":{"]":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"329":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"104":{"tf":1.0},"234":{"tf":1.0}},"e":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"122":{"tf":1.0},"236":{"tf":1.0},"48":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"502":{"tf":1.4142135623730951},"98":{"tf":1.0}}}}}},"l":{"a":{"c":{"df":7,"docs":{"143":{"tf":1.0},"199":{"tf":1.0},"291":{"tf":1.0},"449":{"tf":1.0},"495":{"tf":1.0},"56":{"tf":1.0},"83":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"226":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":7,"docs":{"111":{"tf":1.0},"164":{"tf":1.4142135623730951},"46":{"tf":1.0},"463":{"tf":1.0},"55":{"tf":1.0},"75":{"tf":1.4142135623730951},"81":{"tf":1.0}}},"y":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"270":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"321":{"tf":1.0},"405":{"tf":1.0}}}}}}}}},"q":{"/":{"df":1,"docs":{"241":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":15,"docs":{"275":{"tf":1.0},"46":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.4142135623730951},"501":{"tf":1.0},"502":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.0},"514":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":41,"docs":{"10":{"tf":1.0},"161":{"tf":1.0},"200":{"tf":1.0},"234":{"tf":1.0},"240":{"tf":1.0},"287":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"298":{"tf":1.0},"314":{"tf":1.0},"321":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.4142135623730951},"337":{"tf":1.0},"338":{"tf":1.0},"350":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"372":{"tf":1.4142135623730951},"375":{"tf":1.0},"383":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"396":{"tf":1.0},"405":{"tf":1.0},"460":{"tf":1.4142135623730951},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"498":{"tf":1.0},"499":{"tf":1.0},"514":{"tf":1.0},"515":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.0},"80":{"tf":1.0},"88":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"317":{"tf":1.0},"501":{"tf":1.0},"96":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"339":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":4,"docs":{"372":{"tf":1.0},"381":{"tf":1.0},"496":{"tf":1.0},"57":{"tf":1.0}}}},"v":{"df":3,"docs":{"136":{"tf":1.0},"371":{"tf":1.0},"384":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":9,"docs":{"258":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"45":{"tf":1.0},"486":{"tf":1.0},"487":{"tf":1.0},"503":{"tf":1.4142135623730951},"522":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"191":{"tf":1.0},"475":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":14,"docs":{"234":{"tf":1.7320508075688772},"275":{"tf":1.0},"289":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0},"515":{"tf":1.0}}}}}},"t":{"df":8,"docs":{"249":{"tf":1.0},"25":{"tf":1.0},"250":{"tf":2.8284271247461903},"324":{"tf":2.6457513110645907},"460":{"tf":2.0},"465":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"s":{")":{":":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"1":{"df":1,"docs":{"492":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"b":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"c":{"df":0,"docs":{},"e":{"(":{"&":{"c":{"a":{"df":0,"docs":{},"p":{"[":{"0":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"<":{"&":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{"<":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"x":{"<":{"d":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"df":2,"docs":{"133":{"tf":1.0},"354":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"139":{"tf":1.0}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":2,"docs":{"262":{"tf":1.0},"373":{"tf":1.0}}}}},"df":0,"docs":{}}},"k":{"b":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"335":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"293":{"tf":1.0},"303":{"tf":1.0},"354":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"324":{"tf":1.0},"335":{"tf":1.0}}}}},"t":{"df":3,"docs":{"153":{"tf":1.0},"231":{"tf":1.0},"496":{"tf":1.0}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"75":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"&":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"262":{"tf":1.0},"373":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"df":0,"docs":{},"f":{"3":{"2":{"df":2,"docs":{"263":{"tf":1.0},"354":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":37,"docs":{"104":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.4142135623730951},"109":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"129":{"tf":1.0},"142":{"tf":1.0},"200":{"tf":1.0},"231":{"tf":1.0},"238":{"tf":1.7320508075688772},"244":{"tf":1.0},"262":{"tf":1.4142135623730951},"272":{"tf":1.0},"275":{"tf":1.4142135623730951},"28":{"tf":1.0},"291":{"tf":1.0},"324":{"tf":4.123105625617661},"325":{"tf":2.0},"369":{"tf":1.0},"373":{"tf":1.0},"380":{"tf":1.0},"461":{"tf":1.0},"478":{"tf":1.0},"492":{"tf":1.7320508075688772},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.7320508075688772},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.4142135623730951},"501":{"tf":1.4142135623730951},"502":{"tf":1.0},"77":{"tf":1.0},"88":{"tf":1.4142135623730951},"90":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"325":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"258":{"tf":1.0},"496":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":8,"docs":{"120":{"tf":1.0},"303":{"tf":1.7320508075688772},"324":{"tf":1.7320508075688772},"380":{"tf":1.0},"493":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.0},"90":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"104":{"tf":1.0},"196":{"tf":1.0},"55":{"tf":1.0},"75":{"tf":1.0}}}},"df":0,"docs":{}},"df":3,"docs":{"125":{"tf":1.0},"251":{"tf":1.0},"337":{"tf":1.0}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":21,"docs":{"107":{"tf":1.0},"136":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"238":{"tf":1.4142135623730951},"239":{"tf":1.0},"240":{"tf":1.4142135623730951},"241":{"tf":1.4142135623730951},"251":{"tf":1.0},"330":{"tf":1.0},"371":{"tf":1.0},"413":{"tf":1.0},"463":{"tf":1.0},"465":{"tf":1.0},"467":{"tf":1.0},"472":{"tf":1.0},"52":{"tf":1.0},"60":{"tf":1.0},"93":{"tf":1.0},"96":{"tf":1.4142135623730951},"98":{"tf":1.0}}}},"s":{"df":3,"docs":{"348":{"tf":1.0},"363":{"tf":1.0},"393":{"tf":1.0}}}}}},"f":{"df":1,"docs":{"193":{"tf":1.4142135623730951}}},"i":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"94":{"tf":1.0}}}},"df":0,"docs":{},"g":{":":{":":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"354":{"tf":1.0}}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"352":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":6,"docs":{"263":{"tf":1.0},"353":{"tf":1.7320508075688772},"354":{"tf":1.7320508075688772},"358":{"tf":1.0},"360":{"tf":1.0},"362":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"263":{"tf":1.0},"354":{"tf":1.4142135623730951},"360":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"39":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"352":{"tf":1.0}}}}},"m":{"df":1,"docs":{"193":{"tf":1.4142135623730951}}},"o":{"a":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"96":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":7,"docs":{"140":{"tf":1.0},"177":{"tf":2.0},"178":{"tf":1.4142135623730951},"179":{"tf":1.4142135623730951},"190":{"tf":1.4142135623730951},"324":{"tf":1.0},"5":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":6,"docs":{"100":{"tf":1.0},"314":{"tf":1.0},"330":{"tf":1.0},"396":{"tf":1.0},"407":{"tf":1.0},"460":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"p":{"c":{"df":5,"docs":{"258":{"tf":1.0},"275":{"tf":1.4142135623730951},"487":{"tf":1.0},"514":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":5,"docs":{"287":{"tf":1.0},"316":{"tf":1.0},"74":{"tf":1.0},"88":{"tf":1.0},"96":{"tf":1.0}}}},"n":{"df":13,"docs":{"155":{"tf":1.0},"173":{"tf":1.4142135623730951},"175":{"tf":2.0},"179":{"tf":1.0},"190":{"tf":1.0},"194":{"tf":1.0},"257":{"tf":1.0},"259":{"tf":1.0},"309":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"367":{"tf":1.0},"489":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":17,"docs":{"134":{"tf":1.7320508075688772},"147":{"tf":1.4142135623730951},"157":{"tf":1.0},"19":{"tf":1.0},"267":{"tf":1.4142135623730951},"285":{"tf":1.0},"296":{"tf":1.0},"301":{"tf":1.0},"332":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"334":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"346":{"tf":1.4142135623730951},"79":{"tf":1.0},"98":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"\'":{"df":3,"docs":{"316":{"tf":1.0},"502":{"tf":1.0},"98":{"tf":1.0}}},",":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"209":{"tf":1.0},"219":{"tf":1.0},"237":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{",":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"219":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{",":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"197":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},".":{"df":0,"docs":{},"m":{"d":{"df":2,"docs":{"202":{"tf":1.0},"270":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"496":{"tf":1.0}}}}}}}},":":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"1":{"df":1,"docs":{"493":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"502":{"tf":1.0}}}},"df":63,"docs":{"110":{"tf":1.0},"153":{"tf":1.0},"161":{"tf":1.0},"189":{"tf":1.0},"195":{"tf":1.0},"197":{"tf":1.4142135623730951},"200":{"tf":1.0},"202":{"tf":1.7320508075688772},"203":{"tf":1.0},"205":{"tf":1.0},"208":{"tf":1.0},"213":{"tf":1.4142135623730951},"217":{"tf":1.0},"231":{"tf":1.4142135623730951},"237":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":2.0},"255":{"tf":1.0},"257":{"tf":1.0},"264":{"tf":1.0},"267":{"tf":1.4142135623730951},"27":{"tf":1.0},"270":{"tf":1.0},"275":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.4142135623730951},"296":{"tf":1.4142135623730951},"301":{"tf":1.0},"309":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"329":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.7320508075688772},"339":{"tf":1.0},"34":{"tf":1.0},"454":{"tf":1.0},"455":{"tf":2.0},"457":{"tf":1.4142135623730951},"461":{"tf":2.0},"463":{"tf":1.4142135623730951},"469":{"tf":1.0},"470":{"tf":1.4142135623730951},"492":{"tf":2.0},"493":{"tf":1.0},"496":{"tf":1.4142135623730951},"502":{"tf":1.0},"519":{"tf":1.0},"52":{"tf":1.0},"523":{"tf":1.0},"55":{"tf":1.0},"66":{"tf":1.0},"72":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0},"84":{"tf":1.4142135623730951},"92":{"tf":1.0},"96":{"tf":1.4142135623730951},"98":{"tf":1.4142135623730951}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"189":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"<":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"238":{"tf":1.0},"247":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"s":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":13,"docs":{"134":{"tf":1.4142135623730951},"151":{"tf":1.0},"157":{"tf":1.0},"237":{"tf":1.0},"247":{"tf":1.0},"267":{"tf":1.0},"301":{"tf":1.0},"321":{"tf":1.0},"330":{"tf":1.0},"332":{"tf":1.0},"404":{"tf":1.0},"411":{"tf":1.0},"63":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":6,"docs":{"200":{"tf":1.0},"231":{"tf":1.0},"247":{"tf":1.0},"285":{"tf":1.0},"337":{"tf":1.0},"96":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"e":{"df":11,"docs":{"110":{"tf":1.0},"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"122":{"tf":1.0},"236":{"tf":1.0},"243":{"tf":1.7320508075688772},"247":{"tf":1.0},"269":{"tf":1.0},"299":{"tf":1.0},"357":{"tf":1.0}}}},"n":{"df":0,"docs":{},"e":{"df":2,"docs":{"140":{"tf":1.0},"357":{"tf":1.0}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"280":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"361":{"tf":1.0},"391":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"262":{"tf":1.0},"373":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":3,"docs":{"238":{"tf":1.0},"278":{"tf":1.0},"369":{"tf":1.0}}}}},"c":{"a":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"l":{"df":20,"docs":{"162":{"tf":1.0},"198":{"tf":1.0},"255":{"tf":1.0},"262":{"tf":1.0},"281":{"tf":1.0},"289":{"tf":1.0},"300":{"tf":1.0},"350":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0},"359":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"369":{"tf":1.0},"371":{"tf":1.0},"456":{"tf":1.0},"494":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":5,"docs":{"135":{"tf":1.0},"289":{"tf":1.0},"350":{"tf":1.0},"353":{"tf":1.0},"365":{"tf":1.0}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"48":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"228":{"tf":1.0},"302":{"tf":1.0}}}}}},"df":0,"docs":{}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":1,"docs":{"179":{"tf":1.0}}}}}}}},"df":41,"docs":{"109":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.7320508075688772},"140":{"tf":1.0},"147":{"tf":1.0},"154":{"tf":1.0},"157":{"tf":1.0},"170":{"tf":1.0},"179":{"tf":1.4142135623730951},"19":{"tf":1.0},"250":{"tf":1.4142135623730951},"266":{"tf":1.0},"267":{"tf":1.0},"285":{"tf":1.4142135623730951},"287":{"tf":1.0},"304":{"tf":1.0},"311":{"tf":1.4142135623730951},"322":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":2.0},"335":{"tf":1.0},"337":{"tf":1.4142135623730951},"341":{"tf":1.4142135623730951},"345":{"tf":1.0},"407":{"tf":1.0},"411":{"tf":1.0},"421":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0},"51":{"tf":1.0},"63":{"tf":1.0},"89":{"tf":1.0}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"323":{"tf":1.0}}}}},"s":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"345":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"*":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"335":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"b":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":3,"docs":{"287":{"tf":1.0},"304":{"tf":1.0},"327":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":2,"docs":{"288":{"tf":1.0},"304":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"304":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":2,"docs":{"290":{"tf":1.0},"304":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"304":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"304":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"{":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{",":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{",":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"}":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"289":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":3,"docs":{"266":{"tf":1.0},"334":{"tf":1.0},"345":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":5,"docs":{"269":{"tf":1.4142135623730951},"369":{"tf":1.4142135623730951},"86":{"tf":1.0},"87":{"tf":1.0},"98":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"d":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"|":{"a":{"df":1,"docs":{"273":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":2,"docs":{"273":{"tf":1.0},"492":{"tf":1.7320508075688772}}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"65":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":8,"docs":{"155":{"tf":1.0},"162":{"tf":1.0},"179":{"tf":1.0},"214":{"tf":1.0},"255":{"tf":1.0},"259":{"tf":1.4142135623730951},"444":{"tf":1.0},"66":{"tf":1.4142135623730951}},"s":{"/":{"df":0,"docs":{},"k":{"b":{"df":3,"docs":{"179":{"tf":1.0},"204":{"tf":1.0},"214":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"149":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"302":{"tf":1.0}}}}}},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"302":{"tf":1.0}}}},"df":0,"docs":{}}},"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"219":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"df":43,"docs":{"100":{"tf":1.0},"105":{"tf":1.0},"108":{"tf":1.4142135623730951},"114":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"142":{"tf":1.4142135623730951},"144":{"tf":1.0},"2":{"tf":1.0},"200":{"tf":3.0},"21":{"tf":1.0},"210":{"tf":1.4142135623730951},"222":{"tf":1.0},"223":{"tf":1.4142135623730951},"238":{"tf":1.0},"247":{"tf":1.0},"251":{"tf":1.0},"257":{"tf":1.4142135623730951},"272":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"279":{"tf":1.0},"28":{"tf":2.0},"281":{"tf":1.4142135623730951},"308":{"tf":1.0},"349":{"tf":1.0},"350":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.4142135623730951},"436":{"tf":1.0},"452":{"tf":1.0},"454":{"tf":1.0},"473":{"tf":1.0},"478":{"tf":1.4142135623730951},"480":{"tf":1.0},"492":{"tf":2.0},"500":{"tf":1.0},"502":{"tf":1.0},"517":{"tf":1.0},"53":{"tf":1.0},"63":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":2.0}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":9,"docs":{"178":{"tf":1.0},"287":{"tf":1.4142135623730951},"288":{"tf":1.0},"289":{"tf":1.4142135623730951},"292":{"tf":1.0},"334":{"tf":1.0},"369":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0}}},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":3,"docs":{"127":{"tf":1.0},"130":{"tf":1.0},"391":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"14":{"tf":1.0},"32":{"tf":1.7320508075688772}}}}}},"u":{"df":0,"docs":{},"r":{"df":12,"docs":{"110":{"tf":1.0},"122":{"tf":1.0},"137":{"tf":1.4142135623730951},"243":{"tf":1.0},"244":{"tf":1.4142135623730951},"280":{"tf":1.0},"377":{"tf":1.0},"462":{"tf":2.0},"463":{"tf":1.0},"500":{"tf":1.0},"74":{"tf":1.0},"87":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"244":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"e":{"df":17,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"130":{"tf":1.0},"158":{"tf":1.0},"195":{"tf":1.0},"212":{"tf":1.0},"217":{"tf":1.0},"241":{"tf":1.0},"30":{"tf":1.0},"311":{"tf":1.0},"318":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"46":{"tf":1.0},"502":{"tf":1.0},"521":{"tf":1.0},"98":{"tf":1.0}},"n":{"df":2,"docs":{"118":{"tf":1.0},"247":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"306":{"tf":1.0},"354":{"tf":1.4142135623730951},"360":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}},"f":{".":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"323":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951}},"s":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"323":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"324":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"354":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"354":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"149":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"(":{"\\"":{"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"325":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"i":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"354":{"tf":1.0}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"324":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"325":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}}},":":{":":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}}}},"t":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"\\"":{".":{"df":0,"docs":{},"k":{"b":{"df":1,"docs":{"303":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"&":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"303":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"(":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":15,"docs":{"133":{"tf":1.0},"134":{"tf":1.0},"267":{"tf":1.0},"285":{"tf":1.0},"300":{"tf":1.0},"323":{"tf":1.4142135623730951},"324":{"tf":3.1622776601683795},"325":{"tf":1.7320508075688772},"332":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.0},"354":{"tf":1.0},"359":{"tf":1.0},"65":{"tf":1.0},"90":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":32,"docs":{"105":{"tf":1.0},"108":{"tf":1.0},"129":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"156":{"tf":1.0},"200":{"tf":1.7320508075688772},"21":{"tf":1.0},"210":{"tf":1.0},"238":{"tf":1.0},"247":{"tf":1.0},"251":{"tf":1.0},"257":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"302":{"tf":1.4142135623730951},"308":{"tf":1.0},"349":{"tf":1.0},"350":{"tf":1.4142135623730951},"361":{"tf":1.0},"436":{"tf":1.0},"454":{"tf":1.0},"473":{"tf":1.0},"49":{"tf":1.0},"492":{"tf":2.0},"517":{"tf":1.4142135623730951},"53":{"tf":1.0},"63":{"tf":1.0},"90":{"tf":1.4142135623730951}},"i":{"c":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"461":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"n":{"d":{"df":4,"docs":{"262":{"tf":1.0},"263":{"tf":1.0},"354":{"tf":1.0},"493":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"288":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":4,"docs":{"135":{"tf":1.0},"342":{"tf":1.0},"356":{"tf":1.0},"65":{"tf":1.0}}}}},"t":{"df":1,"docs":{"352":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":4,"docs":{"334":{"tf":1.0},"341":{"tf":1.0},"409":{"tf":1.0},"466":{"tf":1.0}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"144":{"tf":1.0}}}}}}}},"r":{"d":{"df":8,"docs":{"134":{"tf":1.0},"267":{"tf":1.0},"280":{"tf":1.0},"285":{"tf":1.0},"293":{"tf":1.0},"296":{"tf":1.4142135623730951},"333":{"tf":1.0},"335":{"tf":1.0}},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":2.23606797749979}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},":":{":":{"df":0,"docs":{},"{":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"293":{"tf":1.0},"324":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"303":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"139":{"tf":1.0}}}}}},"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"293":{"tf":1.0},"335":{"tf":1.0}}}}}},"s":{")":{".":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"139":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":2,"docs":{"267":{"tf":1.0},"335":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"238":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"335":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":8,"docs":{"100":{"tf":1.0},"293":{"tf":1.4142135623730951},"322":{"tf":1.0},"324":{"tf":2.449489742783178},"329":{"tf":1.0},"400":{"tf":1.0},"407":{"tf":1.0},"97":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"(":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"322":{"tf":1.0},"324":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"97":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"v":{"df":14,"docs":{"10":{"tf":1.0},"174":{"tf":1.4142135623730951},"185":{"tf":1.0},"191":{"tf":1.4142135623730951},"2":{"tf":1.4142135623730951},"205":{"tf":1.0},"257":{"tf":1.0},"337":{"tf":1.0},"43":{"tf":1.4142135623730951},"449":{"tf":1.0},"475":{"tf":1.0},"489":{"tf":1.4142135623730951},"490":{"tf":1.0},"6":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":25,"docs":{"165":{"tf":1.0},"174":{"tf":1.4142135623730951},"177":{"tf":1.4142135623730951},"184":{"tf":1.0},"191":{"tf":1.0},"2":{"tf":1.0},"205":{"tf":1.4142135623730951},"234":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"358":{"tf":1.0},"367":{"tf":1.0},"372":{"tf":1.0},"446":{"tf":1.0},"448":{"tf":1.4142135623730951},"475":{"tf":1.0},"486":{"tf":1.0},"487":{"tf":1.0},"488":{"tf":1.0},"489":{"tf":1.0},"514":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.4142135623730951},"92":{"tf":1.0}}}},"i":{"c":{"df":2,"docs":{"111":{"tf":1.0},"250":{"tf":2.23606797749979}}},"df":0,"docs":{}}}},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":10,"docs":{"159":{"tf":1.0},"171":{"tf":1.4142135623730951},"182":{"tf":1.0},"190":{"tf":1.0},"213":{"tf":1.4142135623730951},"285":{"tf":1.0},"324":{"tf":1.0},"332":{"tf":1.0},"422":{"tf":1.0},"64":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":14,"docs":{"168":{"tf":1.0},"176":{"tf":1.0},"18":{"tf":1.7320508075688772},"180":{"tf":1.0},"234":{"tf":1.0},"244":{"tf":1.0},"26":{"tf":1.0},"338":{"tf":1.0},"345":{"tf":1.0},"357":{"tf":1.0},"372":{"tf":1.0},"447":{"tf":1.0},"479":{"tf":1.0},"524":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"/":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"496":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"497":{"tf":1.0}}}},"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"(":{"&":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"274":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"274":{"tf":1.4142135623730951}}}}}}}}},"df":0,"docs":{}},"df":39,"docs":{"101":{"tf":1.4142135623730951},"105":{"tf":1.0},"110":{"tf":2.23606797749979},"121":{"tf":1.4142135623730951},"144":{"tf":1.0},"171":{"tf":2.8284271247461903},"193":{"tf":1.4142135623730951},"213":{"tf":2.6457513110645907},"231":{"tf":1.0},"244":{"tf":3.1622776601683795},"251":{"tf":1.0},"269":{"tf":1.0},"274":{"tf":1.0},"332":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":2.0},"369":{"tf":2.8284271247461903},"371":{"tf":2.0},"372":{"tf":1.4142135623730951},"376":{"tf":1.0},"377":{"tf":1.0},"380":{"tf":1.4142135623730951},"381":{"tf":1.0},"383":{"tf":1.4142135623730951},"388":{"tf":1.0},"391":{"tf":1.4142135623730951},"467":{"tf":1.0},"49":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.4142135623730951},"508":{"tf":1.0},"509":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.0},"74":{"tf":1.7320508075688772},"82":{"tf":1.0},"87":{"tf":1.7320508075688772},"88":{"tf":1.4142135623730951}}}}},"df":2,"docs":{"161":{"tf":1.0},"162":{"tf":1.0}},"o":{"df":0,"docs":{},"w":{"df":14,"docs":{"116":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"173":{"tf":1.0},"201":{"tf":2.0},"214":{"tf":1.0},"228":{"tf":1.0},"234":{"tf":1.0},"241":{"tf":1.4142135623730951},"247":{"tf":1.0},"250":{"tf":1.0},"257":{"tf":1.0},"300":{"tf":1.0},"36":{"tf":1.0}}}}},"i":{"d":{"df":0,"docs":{},"e":{"df":2,"docs":{"39":{"tf":1.0},"514":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"139":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":9,"docs":{"246":{"tf":1.0},"273":{"tf":1.7320508075688772},"308":{"tf":1.0},"360":{"tf":1.0},"4":{"tf":1.0},"466":{"tf":1.0},"49":{"tf":1.0},"492":{"tf":1.7320508075688772},"90":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":4,"docs":{"290":{"tf":1.0},"302":{"tf":1.0},"308":{"tf":1.0},"89":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":5,"docs":{"200":{"tf":1.0},"252":{"tf":1.0},"322":{"tf":1.0},"333":{"tf":1.0},"67":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"241":{"tf":1.0}}}},"i":{"c":{"df":1,"docs":{"241":{"tf":1.0}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":7,"docs":{"105":{"tf":1.0},"244":{"tf":1.0},"324":{"tf":1.0},"351":{"tf":1.0},"502":{"tf":1.0},"86":{"tf":1.0},"98":{"tf":1.0}}}}},"z":{"df":0,"docs":{},"e":{"df":2,"docs":{"279":{"tf":1.0},"338":{"tf":1.0}}}}},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"498":{"tf":1.4142135623730951}}}}}}}},"df":1,"docs":{"324":{"tf":1.0}}}}},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"104":{"tf":1.4142135623730951},"115":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":3,"docs":{"104":{"tf":1.0},"357":{"tf":1.0},"465":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":20,"docs":{"133":{"tf":1.0},"135":{"tf":1.0},"138":{"tf":1.4142135623730951},"146":{"tf":1.0},"157":{"tf":1.0},"182":{"tf":1.0},"281":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"333":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":2.0},"356":{"tf":1.0},"359":{"tf":1.0},"365":{"tf":1.4142135623730951},"371":{"tf":1.0},"375":{"tf":1.0},"466":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"334":{"tf":1.0},"338":{"tf":1.0},"343":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"104":{"tf":1.0},"48":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"o":{"df":1,"docs":{"375":{"tf":1.0}}},"u":{"df":0,"docs":{},"t":{"df":19,"docs":{"104":{"tf":1.7320508075688772},"105":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"125":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":1.4142135623730951},"238":{"tf":1.7320508075688772},"241":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.4142135623730951},"250":{"tf":1.0},"251":{"tf":1.4142135623730951},"49":{"tf":1.0},"494":{"tf":1.0},"55":{"tf":1.0},"75":{"tf":2.0}}}},"v":{"df":12,"docs":{"104":{"tf":1.4142135623730951},"117":{"tf":1.0},"118":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.0},"228":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"246":{"tf":1.0},"48":{"tf":1.0},"75":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"(":{"(":{"_":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":1.0}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"323":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}},"f":{"df":0,"docs":{},"m":{"df":1,"docs":{"324":{"tf":1.0}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"324":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"149":{"tf":1.0}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":2.6457513110645907}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"df":0,"docs":{},"i":{"d":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"324":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"324":{"tf":1.0}}},"s":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{":":{":":{"c":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"324":{"tf":1.0}},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"324":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":2,"docs":{"324":{"tf":1.4142135623730951},"329":{"tf":1.0}}}},"df":0,"docs":{}}},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"115":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.0},"250":{"tf":1.0}},"e":{"\'":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":17,"docs":{"100":{"tf":1.0},"105":{"tf":1.0},"164":{"tf":1.0},"244":{"tf":1.0},"285":{"tf":1.0},"323":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.0},"399":{"tf":1.0},"413":{"tf":1.0},"446":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.7320508075688772},"521":{"tf":1.0},"80":{"tf":1.0},"83":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"c":{"df":0,"docs":{},"e":{"df":2,"docs":{"502":{"tf":1.4142135623730951},"98":{"tf":1.0}}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"98":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"134":{"tf":1.0},"45":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"244":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":30,"docs":{"101":{"tf":1.0},"105":{"tf":1.0},"110":{"tf":1.4142135623730951},"165":{"tf":1.0},"166":{"tf":1.0},"218":{"tf":1.0},"25":{"tf":1.0},"269":{"tf":1.0},"285":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"324":{"tf":1.0},"325":{"tf":1.0},"332":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"347":{"tf":1.0},"369":{"tf":1.0},"377":{"tf":1.0},"470":{"tf":1.0},"492":{"tf":1.0},"504":{"tf":1.0},"506":{"tf":1.0},"512":{"tf":1.0},"521":{"tf":1.0},"57":{"tf":1.0},"74":{"tf":1.0},"79":{"tf":1.0},"86":{"tf":1.4142135623730951}},"i":{"df":1,"docs":{"222":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"289":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"500":{"tf":1.0},"98":{"tf":1.7320508075688772}}}}}}},"q":{"df":0,"docs":{},"l":{"df":1,"docs":{"385":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"334":{"tf":1.0}}}}},"x":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"237":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"c":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{"1":{"0":{"df":1,"docs":{"264":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{"4":{"2":{"df":1,"docs":{"218":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"f":{"df":2,"docs":{"161":{"tf":1.0},"162":{"tf":1.0}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"189":{"tf":1.0},"338":{"tf":1.0}}}},"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"324":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"324":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":2,"docs":{"339":{"tf":1.0},"96":{"tf":1.0}}}},"n":{"d":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"128":{"tf":1.0},"27":{"tf":1.0}}}}},"r":{"d":{"df":16,"docs":{"110":{"tf":1.0},"122":{"tf":1.0},"140":{"tf":1.4142135623730951},"209":{"tf":1.0},"213":{"tf":1.0},"237":{"tf":1.0},"243":{"tf":1.0},"26":{"tf":1.0},"36":{"tf":1.0},"514":{"tf":1.0},"525":{"tf":1.0},"55":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.4142135623730951},"87":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"76":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":26,"docs":{"102":{"tf":1.4142135623730951},"130":{"tf":1.7320508075688772},"140":{"tf":1.0},"158":{"tf":1.4142135623730951},"16":{"tf":1.0},"174":{"tf":1.0},"177":{"tf":2.0},"186":{"tf":1.0},"190":{"tf":1.4142135623730951},"192":{"tf":1.0},"194":{"tf":1.0},"197":{"tf":1.0},"2":{"tf":1.0},"202":{"tf":1.7320508075688772},"203":{"tf":1.0},"205":{"tf":1.4142135623730951},"217":{"tf":1.0},"226":{"tf":1.0},"238":{"tf":1.4142135623730951},"252":{"tf":1.4142135623730951},"257":{"tf":1.0},"371":{"tf":1.0},"451":{"tf":1.4142135623730951},"489":{"tf":1.0},"521":{"tf":1.0},"68":{"tf":1.4142135623730951}},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"339":{"tf":1.0},"357":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"352":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"314":{"tf":1.0}}}}}}},"i":{"c":{"df":2,"docs":{"3":{"tf":1.4142135623730951},"6":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"214":{"tf":1.0},"259":{"tf":1.0}}}}},"s":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":2,"docs":{"214":{"tf":1.0},"259":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":23,"docs":{"100":{"tf":1.4142135623730951},"202":{"tf":1.0},"208":{"tf":1.0},"234":{"tf":1.4142135623730951},"250":{"tf":1.7320508075688772},"261":{"tf":1.0},"317":{"tf":1.0},"321":{"tf":1.4142135623730951},"324":{"tf":3.3166247903554},"326":{"tf":1.4142135623730951},"331":{"tf":1.0},"349":{"tf":1.0},"364":{"tf":1.0},"395":{"tf":1.0},"398":{"tf":1.4142135623730951},"407":{"tf":1.0},"460":{"tf":1.0},"461":{"tf":1.0},"465":{"tf":1.0},"494":{"tf":1.4142135623730951},"500":{"tf":2.0},"73":{"tf":1.0},"96":{"tf":1.0}},"s":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"327":{"tf":1.0}}}}},"y":{"df":1,"docs":{"323":{"tf":1.0}}}},"d":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"337":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"337":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"(":{"\\"":{"df":0,"docs":{},"k":{"b":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"303":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"354":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"f":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"139":{"tf":1.4142135623730951},"293":{"tf":1.0},"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":4,"docs":{"174":{"tf":1.0},"191":{"tf":1.0},"258":{"tf":1.0},"489":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"231":{"tf":1.0},"334":{"tf":1.0},"343":{"tf":1.0}}}}}},"p":{"df":25,"docs":{"102":{"tf":1.0},"158":{"tf":1.0},"192":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"211":{"tf":1.0},"252":{"tf":1.0},"282":{"tf":1.0},"330":{"tf":1.0},"396":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"451":{"tf":1.0},"452":{"tf":1.0},"479":{"tf":1.0},"68":{"tf":1.0}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":3,"docs":{"322":{"tf":1.0},"404":{"tf":1.0},"465":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"122":{"tf":1.0},"130":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"g":{"df":78,"docs":{"100":{"tf":1.0},"135":{"tf":1.0},"138":{"tf":2.23606797749979},"140":{"tf":2.0},"151":{"tf":1.0},"162":{"tf":1.0},"167":{"tf":1.4142135623730951},"178":{"tf":1.0},"198":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"217":{"tf":1.0},"231":{"tf":1.0},"25":{"tf":1.0},"255":{"tf":1.4142135623730951},"262":{"tf":1.4142135623730951},"266":{"tf":1.0},"268":{"tf":1.0},"269":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"278":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"282":{"tf":1.4142135623730951},"285":{"tf":1.0},"287":{"tf":1.7320508075688772},"288":{"tf":1.0},"289":{"tf":1.7320508075688772},"291":{"tf":1.7320508075688772},"292":{"tf":1.0},"293":{"tf":1.7320508075688772},"298":{"tf":1.4142135623730951},"299":{"tf":1.4142135623730951},"300":{"tf":1.0},"306":{"tf":1.0},"307":{"tf":1.7320508075688772},"312":{"tf":1.0},"314":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.4142135623730951},"327":{"tf":1.0},"330":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.4142135623730951},"368":{"tf":1.0},"369":{"tf":2.0},"372":{"tf":1.4142135623730951},"373":{"tf":2.23606797749979},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"387":{"tf":1.0},"392":{"tf":1.0},"396":{"tf":1.0},"401":{"tf":1.0},"405":{"tf":1.0},"410":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"456":{"tf":1.7320508075688772},"463":{"tf":1.0},"49":{"tf":1.0},"494":{"tf":2.0},"51":{"tf":1.4142135623730951},"55":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"86":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0}},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}},".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"333":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":4,"docs":{"266":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.0},"334":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":3,"docs":{"287":{"tf":1.4142135623730951},"295":{"tf":1.0},"300":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"d":{"b":{"df":1,"docs":{"293":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"e":{"df":14,"docs":{"100":{"tf":1.0},"142":{"tf":1.0},"323":{"tf":1.4142135623730951},"357":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"411":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":1.0},"89":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":22,"docs":{"156":{"tf":1.0},"20":{"tf":1.0},"236":{"tf":1.0},"238":{"tf":1.0},"249":{"tf":1.0},"269":{"tf":1.0},"27":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"323":{"tf":1.0},"329":{"tf":1.0},"331":{"tf":1.0},"349":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.4142135623730951},"369":{"tf":1.4142135623730951},"381":{"tf":1.0},"401":{"tf":1.0},"413":{"tf":1.0},"429":{"tf":1.0}}}}}}},"df":8,"docs":{"146":{"tf":1.0},"262":{"tf":1.4142135623730951},"263":{"tf":1.0},"322":{"tf":1.0},"324":{"tf":3.605551275463989},"325":{"tf":1.0},"354":{"tf":2.0},"373":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"144":{"tf":1.0},"261":{"tf":1.0},"495":{"tf":2.0}}}}}}},"i":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"290":{"tf":1.0},"308":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"156":{"tf":1.0}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"324":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":26,"docs":{"100":{"tf":1.0},"261":{"tf":2.6457513110645907},"314":{"tf":1.0},"321":{"tf":2.0},"322":{"tf":1.7320508075688772},"323":{"tf":1.7320508075688772},"324":{"tf":3.872983346207417},"326":{"tf":2.0},"327":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.7320508075688772},"354":{"tf":1.0},"396":{"tf":1.0},"398":{"tf":1.7320508075688772},"399":{"tf":1.0},"401":{"tf":1.0},"410":{"tf":1.0},"492":{"tf":1.7320508075688772},"493":{"tf":2.23606797749979},"494":{"tf":2.449489742783178},"495":{"tf":1.7320508075688772},"496":{"tf":1.4142135623730951},"498":{"tf":1.7320508075688772},"500":{"tf":2.0},"511":{"tf":1.0},"512":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":16,"docs":{"138":{"tf":1.0},"261":{"tf":1.7320508075688772},"264":{"tf":1.0},"267":{"tf":1.0},"293":{"tf":1.4142135623730951},"321":{"tf":1.7320508075688772},"322":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":2.449489742783178},"330":{"tf":1.0},"335":{"tf":1.7320508075688772},"354":{"tf":1.4142135623730951},"379":{"tf":1.0},"398":{"tf":1.4142135623730951},"399":{"tf":1.0},"407":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":37,"docs":{"100":{"tf":1.7320508075688772},"110":{"tf":1.0},"111":{"tf":1.0},"137":{"tf":1.0},"14":{"tf":1.0},"155":{"tf":1.0},"196":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":1.0},"247":{"tf":1.4142135623730951},"277":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"314":{"tf":1.0},"317":{"tf":1.0},"321":{"tf":1.7320508075688772},"322":{"tf":1.0},"323":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"330":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"36":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0},"399":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.4142135623730951},"466":{"tf":1.4142135623730951},"47":{"tf":1.0},"49":{"tf":1.0},"64":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"75":{"tf":1.0},"94":{"tf":1.0},"96":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":1,"docs":{"360":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":4,"docs":{"314":{"tf":1.0},"324":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.0}}}}}},"u":{"b":{"df":1,"docs":{"234":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"46":{"tf":1.0}}}},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"383":{"tf":2.0}}}}},"df":0,"docs":{}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"346":{"tf":1.0},"361":{"tf":1.0},"391":{"tf":1.0},"77":{"tf":1.0}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"361":{"tf":1.0},"493":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"142":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"53":{"tf":1.0},"61":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"231":{"tf":1.0},"463":{"tf":1.0},"480":{"tf":1.4142135623730951}},"i":{"df":8,"docs":{"251":{"tf":1.0},"258":{"tf":1.0},"330":{"tf":1.0},"463":{"tf":1.0},"472":{"tf":1.0},"511":{"tf":1.4142135623730951},"76":{"tf":1.0},"96":{"tf":1.0}}},"y":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":5,"docs":{"31":{"tf":1.0},"32":{"tf":1.0},"36":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"329":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"d":{"df":6,"docs":{"101":{"tf":1.0},"199":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.4142135623730951},"56":{"tf":1.0},"83":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":25,"docs":{"100":{"tf":1.0},"12":{"tf":1.4142135623730951},"167":{"tf":1.0},"296":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"321":{"tf":1.0},"327":{"tf":1.0},"330":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.4142135623730951},"338":{"tf":1.0},"350":{"tf":1.0},"365":{"tf":1.4142135623730951},"388":{"tf":1.0},"394":{"tf":1.0},"397":{"tf":1.0},"404":{"tf":1.0},"494":{"tf":1.4142135623730951},"502":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"85":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}},"e":{"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"327":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"d":{"b":{"df":1,"docs":{"333":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"222":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"d":{"b":{",":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":1,"docs":{"166":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"270":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"p":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"162":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},":":{"/":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"377":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"377":{"tf":1.0}}}}},"df":0,"docs":{}},"h":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"377":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"369":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":62,"docs":{"100":{"tf":1.0},"135":{"tf":1.0},"140":{"tf":1.0},"151":{"tf":1.0},"162":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":2.0},"176":{"tf":1.4142135623730951},"177":{"tf":1.0},"178":{"tf":1.0},"190":{"tf":1.7320508075688772},"198":{"tf":1.4142135623730951},"20":{"tf":1.0},"214":{"tf":1.0},"217":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.0},"238":{"tf":2.0},"255":{"tf":1.0},"257":{"tf":1.0},"259":{"tf":1.0},"269":{"tf":1.4142135623730951},"279":{"tf":1.0},"281":{"tf":1.4142135623730951},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"295":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.4142135623730951},"322":{"tf":1.0},"323":{"tf":1.4142135623730951},"328":{"tf":1.0},"330":{"tf":1.0},"333":{"tf":1.4142135623730951},"334":{"tf":1.0},"367":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"369":{"tf":2.23606797749979},"371":{"tf":2.0},"372":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"377":{"tf":1.4142135623730951},"379":{"tf":1.4142135623730951},"380":{"tf":1.4142135623730951},"388":{"tf":1.4142135623730951},"390":{"tf":1.0},"392":{"tf":1.0},"401":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"427":{"tf":1.0},"456":{"tf":1.7320508075688772},"463":{"tf":1.0},"49":{"tf":1.0},"494":{"tf":2.23606797749979},"55":{"tf":1.0},"57":{"tf":1.0},"63":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"87":{"tf":1.0},"98":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"262":{"tf":1.0},"373":{"tf":1.0},"392":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":3,"docs":{"177":{"tf":1.4142135623730951},"179":{"tf":1.0},"190":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"241":{"tf":1.0}}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"g":{"df":2,"docs":{"27":{"tf":1.0},"40":{"tf":1.0}}}},"w":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"138":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"120":{"tf":1.0},"133":{"tf":1.0},"247":{"tf":1.4142135623730951},"353":{"tf":1.0},"361":{"tf":1.0}}}},"df":0,"docs":{}}}},"y":{"df":0,"docs":{},"n":{"c":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":2,"docs":{"214":{"tf":1.0},"259":{"tf":1.0}}}}},"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"266":{"tf":1.0},"293":{"tf":1.0}}}}}}}},"df":33,"docs":{"20":{"tf":1.0},"214":{"tf":1.0},"257":{"tf":1.4142135623730951},"259":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"266":{"tf":1.0},"269":{"tf":1.7320508075688772},"281":{"tf":1.0},"289":{"tf":1.7320508075688772},"293":{"tf":1.0},"299":{"tf":1.4142135623730951},"323":{"tf":1.0},"330":{"tf":1.0},"354":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"369":{"tf":2.0},"371":{"tf":1.0},"372":{"tf":2.6457513110645907},"376":{"tf":1.0},"378":{"tf":1.0},"384":{"tf":1.4142135623730951},"388":{"tf":1.0},"389":{"tf":1.7320508075688772},"391":{"tf":1.7320508075688772},"392":{"tf":1.0},"405":{"tf":1.4142135623730951},"429":{"tf":1.0},"49":{"tf":1.0},"493":{"tf":1.0},"66":{"tf":1.0},"87":{"tf":1.0}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"384":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"x":{"df":5,"docs":{"333":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"341":{"tf":1.0},"346":{"tf":1.0},"469":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":20,"docs":{"102":{"tf":1.0},"103":{"tf":1.0},"138":{"tf":1.4142135623730951},"158":{"tf":1.0},"17":{"tf":1.0},"22":{"tf":1.0},"254":{"tf":1.0},"265":{"tf":1.0},"27":{"tf":1.0},"276":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"331":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"342":{"tf":1.0},"368":{"tf":1.0},"437":{"tf":1.0},"47":{"tf":1.0},"502":{"tf":1.4142135623730951}},"s":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"502":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":6,"docs":{"100":{"tf":1.0},"323":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.0},"401":{"tf":1.0},"407":{"tf":1.0}}}},"df":0,"docs":{},"g":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"272":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{".":{"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":44,"docs":{"100":{"tf":1.4142135623730951},"111":{"tf":1.0},"137":{"tf":1.4142135623730951},"142":{"tf":1.0},"143":{"tf":1.0},"197":{"tf":1.4142135623730951},"202":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.0},"214":{"tf":1.0},"219":{"tf":2.23606797749979},"237":{"tf":1.0},"238":{"tf":1.0},"261":{"tf":1.0},"264":{"tf":1.4142135623730951},"314":{"tf":1.4142135623730951},"317":{"tf":1.0},"321":{"tf":1.4142135623730951},"324":{"tf":4.123105625617661},"325":{"tf":1.4142135623730951},"326":{"tf":1.7320508075688772},"398":{"tf":1.4142135623730951},"407":{"tf":1.0},"455":{"tf":1.4142135623730951},"461":{"tf":2.0},"462":{"tf":1.0},"463":{"tf":1.0},"470":{"tf":2.0},"480":{"tf":1.0},"492":{"tf":1.7320508075688772},"493":{"tf":1.7320508075688772},"494":{"tf":1.4142135623730951},"500":{"tf":2.6457513110645907},"502":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.0},"52":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.0},"91":{"tf":2.0},"95":{"tf":1.0},"96":{"tf":1.0},"99":{"tf":1.4142135623730951}},"s":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"e":{"df":3,"docs":{"291":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"k":{"b":{"df":3,"docs":{"448":{"tf":1.0},"475":{"tf":1.4142135623730951},"477":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":5,"docs":{"179":{"tf":1.0},"495":{"tf":1.0},"64":{"tf":1.0},"80":{"tf":1.0},"83":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"k":{"b":{"df":1,"docs":{"299":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"77":{"tf":1.0}}}}}},"df":16,"docs":{"259":{"tf":1.0},"317":{"tf":2.0},"324":{"tf":2.449489742783178},"327":{"tf":1.0},"480":{"tf":1.0},"487":{"tf":1.0},"5":{"tf":1.0},"500":{"tf":2.0},"501":{"tf":1.4142135623730951},"502":{"tf":1.0},"510":{"tf":1.0},"55":{"tf":1.0},"77":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":2,"docs":{"321":{"tf":1.0},"324":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}}}}},"b":{"d":{"df":1,"docs":{"413":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"m":{"df":31,"docs":{"104":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.4142135623730951},"122":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"229":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.0},"233":{"tf":1.0},"236":{"tf":1.0},"238":{"tf":1.4142135623730951},"249":{"tf":1.0},"250":{"tf":1.0},"331":{"tf":1.0},"338":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"359":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"376":{"tf":1.4142135623730951},"393":{"tf":1.0},"460":{"tf":1.4142135623730951},"47":{"tf":1.0},"494":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":1.4142135623730951},"73":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"113":{"tf":1.0}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"124":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"257":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"36":{"tf":1.0}}}},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"280":{"tf":1.0}},"l":{"a":{"df":0,"docs":{},"t":{"df":15,"docs":{"138":{"tf":1.0},"140":{"tf":2.0},"212":{"tf":1.4142135623730951},"22":{"tf":2.449489742783178},"220":{"tf":1.7320508075688772},"266":{"tf":1.0},"276":{"tf":2.0},"293":{"tf":1.0},"437":{"tf":1.0},"438":{"tf":1.0},"439":{"tf":1.0},"51":{"tf":1.7320508075688772},"75":{"tf":1.0},"89":{"tf":1.4142135623730951},"91":{"tf":1.7320508075688772}},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"266":{"tf":1.0},"293":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"138":{"tf":1.4142135623730951}}}}}}},"s":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"220":{"tf":1.4142135623730951}}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"220":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"140":{"tf":1.0},"212":{"tf":1.0},"51":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"n":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"390":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"132":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"122":{"tf":1.0}}}}},"r":{"a":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"\\"":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\\"":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"*":{"*":{"/":{"*":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"22":{"tf":1.0},"276":{"tf":1.4142135623730951},"91":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":1,"docs":{"142":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"174":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.0},"279":{"tf":1.0},"4":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"304":{"tf":1.0}}}}}},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"289":{"tf":1.0}}}},"df":0,"docs":{}}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"302":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"329":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"329":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"329":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"329":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"302":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"138":{"tf":1.0},"302":{"tf":1.0}}}},"df":0,"docs":{}},"df":37,"docs":{"110":{"tf":1.0},"138":{"tf":1.0},"153":{"tf":1.4142135623730951},"173":{"tf":1.4142135623730951},"174":{"tf":1.7320508075688772},"175":{"tf":2.6457513110645907},"177":{"tf":1.0},"18":{"tf":1.0},"186":{"tf":1.4142135623730951},"191":{"tf":1.0},"236":{"tf":1.0},"241":{"tf":2.449489742783178},"243":{"tf":1.0},"26":{"tf":1.0},"278":{"tf":2.8284271247461903},"289":{"tf":1.7320508075688772},"299":{"tf":1.0},"302":{"tf":2.0},"317":{"tf":1.0},"329":{"tf":2.449489742783178},"33":{"tf":1.0},"34":{"tf":1.0},"350":{"tf":1.0},"36":{"tf":1.0},"407":{"tf":1.0},"452":{"tf":1.0},"46":{"tf":1.0},"463":{"tf":1.0},"475":{"tf":1.0},"478":{"tf":1.7320508075688772},"496":{"tf":1.0},"519":{"tf":1.0},"526":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"96":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"270":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"s":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"278":{"tf":1.0}}}}}}}}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"501":{"tf":1.0}}}},"df":0,"docs":{}}}},"x":{"df":0,"docs":{},"t":{"df":37,"docs":{"100":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"182":{"tf":1.0},"200":{"tf":1.0},"257":{"tf":1.0},"263":{"tf":1.0},"272":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"289":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":1.0},"333":{"tf":1.0},"350":{"tf":1.0},"354":{"tf":2.23606797749979},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"398":{"tf":1.0},"49":{"tf":1.0},"492":{"tf":1.7320508075688772},"493":{"tf":1.4142135623730951},"494":{"tf":1.4142135623730951},"495":{"tf":1.4142135623730951},"496":{"tf":1.4142135623730951},"497":{"tf":1.4142135623730951},"498":{"tf":1.4142135623730951},"500":{"tf":1.4142135623730951},"501":{"tf":1.4142135623730951},"502":{"tf":1.4142135623730951},"90":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"351":{"tf":1.0},"354":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":1,"docs":{"354":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":2,"docs":{"251":{"tf":1.0},"40":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"502":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"r":{"d":{"df":2,"docs":{"352":{"tf":1.0},"65":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"237":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":15,"docs":{"108":{"tf":1.0},"142":{"tf":1.0},"153":{"tf":1.0},"209":{"tf":1.0},"231":{"tf":1.0},"237":{"tf":1.7320508075688772},"244":{"tf":1.0},"277":{"tf":1.0},"461":{"tf":1.0},"463":{"tf":1.0},"492":{"tf":1.0},"496":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.0},"74":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"104":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":5,"docs":{"126":{"tf":1.0},"255":{"tf":1.0},"291":{"tf":1.0},"316":{"tf":1.0},"373":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"273":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":8,"docs":{"200":{"tf":1.0},"279":{"tf":1.0},"290":{"tf":1.0},"298":{"tf":1.4142135623730951},"306":{"tf":1.0},"492":{"tf":1.7320508075688772},"517":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":5,"docs":{"129":{"tf":1.0},"241":{"tf":1.0},"284":{"tf":1.0},"49":{"tf":1.0},"70":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"277":{"tf":1.0}}}}}}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"104":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"502":{"tf":1.0}}}},"df":19,"docs":{"101":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"130":{"tf":1.4142135623730951},"134":{"tf":1.0},"147":{"tf":1.0},"234":{"tf":1.4142135623730951},"237":{"tf":1.4142135623730951},"238":{"tf":1.0},"267":{"tf":1.0},"295":{"tf":1.0},"334":{"tf":1.4142135623730951},"346":{"tf":1.4142135623730951},"38":{"tf":1.0},"502":{"tf":1.0},"70":{"tf":1.0},"93":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"345":{"tf":1.0},"360":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"238":{"tf":1.7320508075688772},"306":{"tf":1.0},"76":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":2,"docs":{"324":{"tf":1.4142135623730951},"398":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"p":{"df":3,"docs":{"216":{"tf":1.0},"37":{"tf":1.0},"468":{"tf":1.0}}},"t":{"df":0,"docs":{},"l":{"df":19,"docs":{"137":{"tf":1.0},"197":{"tf":1.0},"202":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"261":{"tf":1.0},"264":{"tf":1.4142135623730951},"28":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0},"493":{"tf":2.0},"494":{"tf":2.0},"52":{"tf":1.0},"520":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"75":{"tf":1.0},"91":{"tf":1.7320508075688772},"93":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"v":{"1":{".":{"2":{"df":1,"docs":{"161":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"d":{"a":{"df":0,"docs":{},"y":{"\'":{"df":2,"docs":{"125":{"tf":1.0},"203":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{",":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"207":{"tf":1.0}}}}},"df":0,"docs":{}}},"/":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"317":{"tf":1.0}}}}},"df":0,"docs":{}},"df":21,"docs":{"314":{"tf":1.0},"317":{"tf":1.4142135623730951},"321":{"tf":1.4142135623730951},"323":{"tf":1.0},"324":{"tf":2.449489742783178},"325":{"tf":1.4142135623730951},"326":{"tf":1.0},"327":{"tf":1.0},"329":{"tf":1.4142135623730951},"330":{"tf":1.0},"396":{"tf":1.4142135623730951},"398":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"404":{"tf":1.0},"407":{"tf":1.0},"500":{"tf":1.7320508075688772},"501":{"tf":3.1622776601683795},"96":{"tf":1.0},"98":{"tf":1.4142135623730951},"99":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"141":{"tf":2.0},"199":{"tf":1.0},"250":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"238":{"tf":1.4142135623730951},"76":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":3,"docs":{"458":{"tf":1.4142135623730951},"79":{"tf":1.0},"98":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"502":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"l":{"df":8,"docs":{"170":{"tf":1.0},"311":{"tf":1.0},"331":{"tf":1.0},"333":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"345":{"tf":1.0},"347":{"tf":1.0},"363":{"tf":1.0}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"238":{"tf":1.4142135623730951}}}}}}}},"o":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"514":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":42,"docs":{"100":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"12":{"tf":1.0},"156":{"tf":1.0},"164":{"tf":1.0},"192":{"tf":1.0},"225":{"tf":1.0},"238":{"tf":1.0},"25":{"tf":1.0},"250":{"tf":1.4142135623730951},"258":{"tf":1.0},"303":{"tf":1.0},"326":{"tf":1.0},"334":{"tf":1.0},"338":{"tf":1.0},"342":{"tf":1.0},"345":{"tf":1.0},"4":{"tf":1.0},"407":{"tf":1.0},"446":{"tf":1.0},"452":{"tf":1.0},"454":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0},"457":{"tf":1.0},"458":{"tf":1.0},"469":{"tf":1.0},"479":{"tf":1.4142135623730951},"48":{"tf":1.0},"486":{"tf":1.4142135623730951},"487":{"tf":1.4142135623730951},"49":{"tf":1.0},"491":{"tf":1.0},"499":{"tf":1.4142135623730951},"62":{"tf":1.0},"92":{"tf":1.0},"97":{"tf":1.0},"99":{"tf":2.23606797749979}},"s":{"/":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":5,"docs":{"171":{"tf":1.7320508075688772},"193":{"tf":1.0},"213":{"tf":1.7320508075688772},"496":{"tf":1.4142135623730951},"497":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":4,"docs":{"28":{"tf":1.0},"463":{"tf":1.0},"511":{"tf":1.0},"96":{"tf":1.0}},"i":{"c":{"df":2,"docs":{"466":{"tf":1.0},"512":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"l":{"df":5,"docs":{"257":{"tf":1.0},"278":{"tf":1.0},"358":{"tf":1.0},"463":{"tf":1.0},"511":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":3,"docs":{"177":{"tf":1.4142135623730951},"244":{"tf":1.0},"88":{"tf":1.0}}},"k":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"367":{"tf":1.0}}}},"df":0,"docs":{}},"df":24,"docs":{"105":{"tf":1.0},"123":{"tf":1.0},"210":{"tf":1.0},"238":{"tf":1.0},"251":{"tf":1.0},"300":{"tf":1.0},"310":{"tf":1.0},"317":{"tf":1.0},"369":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"381":{"tf":1.0},"387":{"tf":1.0},"412":{"tf":1.0},"445":{"tf":1.0},"502":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"70":{"tf":1.0},"76":{"tf":1.4142135623730951},"83":{"tf":1.0},"86":{"tf":1.0},"93":{"tf":1.4142135623730951}}}},"d":{"df":0,"docs":{},"e":{"df":6,"docs":{"240":{"tf":1.0},"241":{"tf":1.4142135623730951},"330":{"tf":1.0},"358":{"tf":1.0},"360":{"tf":1.0},"73":{"tf":1.0}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"333":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"61":{"tf":1.0},"77":{"tf":1.0}}},"n":{"df":2,"docs":{"135":{"tf":1.0},"356":{"tf":1.0}}},"t":{"df":17,"docs":{"138":{"tf":2.23606797749979},"203":{"tf":1.0},"25":{"tf":1.4142135623730951},"262":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"354":{"tf":1.4142135623730951},"356":{"tf":1.0},"360":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.4142135623730951},"392":{"tf":1.0},"493":{"tf":2.0},"495":{"tf":1.4142135623730951},"496":{"tf":1.0},"504":{"tf":1.0},"72":{"tf":2.0},"75":{"tf":1.4142135623730951}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":5,"docs":{"454":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0},"457":{"tf":1.0},"458":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"174":{"tf":1.0},"489":{"tf":1.0}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":10,"docs":{"114":{"tf":1.0},"137":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"280":{"tf":1.0},"365":{"tf":1.0},"385":{"tf":1.0},"494":{"tf":1.0},"512":{"tf":1.0},"70":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"396":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"324":{"tf":1.0}}}},"i":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"114":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"216":{"tf":1.0},"468":{"tf":1.0}}}},"df":2,"docs":{"452":{"tf":1.0},"478":{"tf":1.0}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"379":{"tf":1.0},"380":{"tf":1.0}}}}}},"m":{"df":1,"docs":{"324":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"d":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":7,"docs":{"100":{"tf":1.0},"314":{"tf":1.0},"330":{"tf":1.0},"356":{"tf":1.0},"396":{"tf":1.0},"407":{"tf":1.0},"460":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":5,"docs":{"187":{"tf":1.0},"221":{"tf":1.0},"23":{"tf":1.0},"41":{"tf":1.0},"474":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"e":{"df":21,"docs":{"178":{"tf":1.0},"182":{"tf":1.0},"212":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.4142135623730951},"291":{"tf":1.4142135623730951},"292":{"tf":1.0},"302":{"tf":1.0},"327":{"tf":1.4142135623730951},"333":{"tf":1.4142135623730951},"354":{"tf":1.7320508075688772},"369":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"454":{"tf":1.0},"492":{"tf":1.4142135623730951},"496":{"tf":1.4142135623730951},"498":{"tf":1.4142135623730951},"499":{"tf":1.0},"517":{"tf":1.0},"97":{"tf":2.0}}},"t":{"df":0,"docs":{},"h":{"df":8,"docs":{"100":{"tf":1.0},"105":{"tf":1.0},"244":{"tf":1.0},"323":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.0},"399":{"tf":1.0},"413":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"l":{"df":3,"docs":{"234":{"tf":1.0},"241":{"tf":1.4142135623730951},"380":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"289":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"343":{"tf":1.0}}},"n":{"df":1,"docs":{"480":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"338":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"294":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":10,"docs":{"117":{"tf":1.0},"118":{"tf":1.0},"234":{"tf":1.0},"238":{"tf":1.0},"250":{"tf":1.0},"332":{"tf":1.0},"339":{"tf":1.0},"368":{"tf":1.0},"372":{"tf":1.0},"495":{"tf":1.0}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"=":{"\'":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"469":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"304":{"tf":2.6457513110645907},"309":{"tf":1.0},"337":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":80,"docs":{"105":{"tf":1.0},"108":{"tf":1.4142135623730951},"111":{"tf":1.0},"134":{"tf":1.0},"137":{"tf":1.4142135623730951},"142":{"tf":1.0},"144":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"157":{"tf":1.0},"178":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.4142135623730951},"202":{"tf":1.0},"209":{"tf":1.0},"215":{"tf":1.0},"224":{"tf":1.0},"231":{"tf":1.4142135623730951},"234":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":1.0},"264":{"tf":1.0},"267":{"tf":1.4142135623730951},"27":{"tf":1.0},"28":{"tf":1.0},"285":{"tf":1.4142135623730951},"287":{"tf":1.7320508075688772},"288":{"tf":1.0},"293":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.4142135623730951},"300":{"tf":1.0},"301":{"tf":1.0},"321":{"tf":1.0},"323":{"tf":2.23606797749979},"326":{"tf":2.23606797749979},"330":{"tf":1.0},"332":{"tf":1.4142135623730951},"333":{"tf":1.4142135623730951},"334":{"tf":1.4142135623730951},"335":{"tf":1.4142135623730951},"337":{"tf":1.4142135623730951},"342":{"tf":1.0},"369":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"401":{"tf":1.7320508075688772},"404":{"tf":1.0},"411":{"tf":1.0},"454":{"tf":1.0},"461":{"tf":1.4142135623730951},"49":{"tf":1.0},"492":{"tf":3.605551275463989},"493":{"tf":3.1622776601683795},"494":{"tf":3.1622776601683795},"495":{"tf":2.8284271247461903},"496":{"tf":2.6457513110645907},"497":{"tf":1.4142135623730951},"498":{"tf":2.8284271247461903},"500":{"tf":2.6457513110645907},"501":{"tf":1.7320508075688772},"502":{"tf":1.7320508075688772},"511":{"tf":1.4142135623730951},"512":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"55":{"tf":1.4142135623730951},"56":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.4142135623730951},"93":{"tf":1.0}}},"i":{"c":{"df":1,"docs":{"391":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":3,"docs":{"134":{"tf":1.0},"333":{"tf":1.4142135623730951},"334":{"tf":1.4142135623730951}}}}}},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"64":{"tf":1.0}}},"n":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":2,"docs":{"371":{"tf":1.0},"413":{"tf":1.0}}}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"d":{"df":14,"docs":{"102":{"tf":1.0},"103":{"tf":1.0},"111":{"tf":1.0},"130":{"tf":1.0},"158":{"tf":1.0},"230":{"tf":1.0},"246":{"tf":1.0},"27":{"tf":1.0},"36":{"tf":1.0},"469":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"80":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":4,"docs":{"105":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.0},"49":{"tf":1.0}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"193":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"202":{"tf":1.0},"324":{"tf":1.0}}}},"t":{"df":5,"docs":{"241":{"tf":1.0},"278":{"tf":1.0},"314":{"tf":1.0},"396":{"tf":1.0},"95":{"tf":1.0}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"514":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"k":{"df":1,"docs":{"314":{"tf":1.0}}}}},"s":{"a":{"df":0,"docs":{},"f":{"df":2,"docs":{"153":{"tf":1.0},"280":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"(":{"\\"":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":5,"docs":{"153":{"tf":1.0},"231":{"tf":1.0},"244":{"tf":1.0},"496":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":21,"docs":{"101":{"tf":1.0},"104":{"tf":1.0},"141":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"301":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.4142135623730951},"328":{"tf":1.0},"330":{"tf":1.0},"36":{"tf":1.0},"369":{"tf":1.0},"371":{"tf":1.0},"377":{"tf":1.0},"379":{"tf":1.0},"38":{"tf":1.0},"381":{"tf":1.4142135623730951},"383":{"tf":1.0},"407":{"tf":1.4142135623730951},"44":{"tf":1.0},"465":{"tf":1.0},"501":{"tf":1.0}}}},"df":0,"docs":{}},"df":5,"docs":{"121":{"tf":1.0},"159":{"tf":1.0},"171":{"tf":1.0},"194":{"tf":1.0},"213":{"tf":1.0}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"379":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"i":{"df":9,"docs":{"258":{"tf":1.0},"487":{"tf":1.0},"503":{"tf":1.0},"504":{"tf":1.0},"505":{"tf":1.0},"506":{"tf":1.0},"507":{"tf":1.0},"508":{"tf":1.0},"509":{"tf":1.0}}},"l":{"df":9,"docs":{"164":{"tf":1.0},"178":{"tf":1.0},"288":{"tf":1.0},"307":{"tf":2.6457513110645907},"333":{"tf":1.0},"334":{"tf":1.0},"369":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":12,"docs":{"134":{"tf":1.0},"167":{"tf":1.0},"226":{"tf":1.0},"23":{"tf":1.0},"238":{"tf":1.0},"276":{"tf":1.0},"293":{"tf":1.0},"304":{"tf":1.0},"322":{"tf":1.0},"345":{"tf":1.0},"352":{"tf":1.0},"464":{"tf":1.0}}}},"df":120,"docs":{"102":{"tf":1.0},"108":{"tf":1.0},"111":{"tf":1.0},"116":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":2.449489742783178},"130":{"tf":1.0},"135":{"tf":1.0},"140":{"tf":1.4142135623730951},"142":{"tf":1.0},"149":{"tf":1.0},"153":{"tf":1.0},"157":{"tf":1.0},"158":{"tf":1.4142135623730951},"16":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"181":{"tf":1.0},"183":{"tf":1.0},"198":{"tf":1.0},"202":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"217":{"tf":1.4142135623730951},"219":{"tf":1.0},"228":{"tf":1.0},"229":{"tf":1.0},"231":{"tf":1.7320508075688772},"232":{"tf":1.0},"234":{"tf":1.0},"235":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":2.0},"239":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.4142135623730951},"245":{"tf":1.0},"247":{"tf":1.7320508075688772},"248":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0},"270":{"tf":1.0},"28":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.4142135623730951},"307":{"tf":1.0},"308":{"tf":1.0},"314":{"tf":1.0},"315":{"tf":1.0},"316":{"tf":1.0},"324":{"tf":3.3166247903554},"329":{"tf":1.0},"335":{"tf":1.0},"338":{"tf":1.0},"343":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":2.0},"357":{"tf":1.0},"358":{"tf":1.0},"359":{"tf":1.0},"36":{"tf":1.4142135623730951},"361":{"tf":1.0},"369":{"tf":1.0},"372":{"tf":1.0},"374":{"tf":1.0},"381":{"tf":1.0},"384":{"tf":1.0},"39":{"tf":1.0},"396":{"tf":1.0},"4":{"tf":1.0},"43":{"tf":1.0},"452":{"tf":1.0},"456":{"tf":1.4142135623730951},"458":{"tf":1.4142135623730951},"460":{"tf":1.0},"461":{"tf":1.4142135623730951},"462":{"tf":1.0},"463":{"tf":1.7320508075688772},"466":{"tf":1.0},"467":{"tf":1.0},"469":{"tf":1.4142135623730951},"470":{"tf":1.0},"473":{"tf":1.0},"479":{"tf":1.0},"480":{"tf":1.0},"489":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.4142135623730951},"494":{"tf":1.4142135623730951},"496":{"tf":2.0},"5":{"tf":1.0},"502":{"tf":1.0},"517":{"tf":1.0},"52":{"tf":1.0},"520":{"tf":1.0},"55":{"tf":1.0},"58":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":2.23606797749979},"68":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.7320508075688772},"75":{"tf":1.4142135623730951},"76":{"tf":1.0},"77":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.7320508075688772},"84":{"tf":1.0},"88":{"tf":1.4142135623730951},"90":{"tf":1.0},"98":{"tf":1.4142135623730951}},"e":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"75":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"142":{"tf":1.0}}}}}},"r":{"_":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"290":{"tf":1.4142135623730951},"291":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}},"df":30,"docs":{"111":{"tf":1.0},"133":{"tf":1.4142135623730951},"142":{"tf":1.0},"143":{"tf":1.0},"177":{"tf":1.4142135623730951},"179":{"tf":1.0},"190":{"tf":1.0},"234":{"tf":1.0},"238":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.0},"267":{"tf":1.0},"280":{"tf":1.0},"285":{"tf":1.0},"290":{"tf":1.4142135623730951},"307":{"tf":1.7320508075688772},"311":{"tf":1.0},"335":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.4142135623730951},"347":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"361":{"tf":1.4142135623730951},"391":{"tf":1.0},"396":{"tf":1.0},"413":{"tf":1.4142135623730951},"45":{"tf":1.0},"462":{"tf":1.7320508075688772}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"178":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"75":{"tf":1.0}}}}}}}}}}}},"s":{"/":{"a":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":2,"docs":{"467":{"tf":1.4142135623730951},"498":{"tf":1.4142135623730951}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"z":{"df":3,"docs":{"263":{"tf":1.0},"324":{"tf":1.4142135623730951},"354":{"tf":2.0}}}}},"t":{"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"324":{"tf":2.23606797749979}}}}}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"i":{"d":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"v":{"4":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":6,"docs":{"318":{"tf":1.4142135623730951},"321":{"tf":1.0},"324":{"tf":2.0},"396":{"tf":1.0},"398":{"tf":1.4142135623730951},"75":{"tf":1.0}}},"df":0,"docs":{}}},"x":{"df":1,"docs":{"155":{"tf":1.0}}}},"v":{"0":{".":{"4":{".":{"df":0,"docs":{},"x":{"df":1,"docs":{"13":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{".":{"0":{"df":1,"docs":{"338":{"tf":1.0}}},"5":{"df":5,"docs":{"133":{"tf":1.0},"146":{"tf":1.0},"288":{"tf":1.0},"351":{"tf":1.0},"354":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":2,"docs":{"250":{"tf":1.4142135623730951},"381":{"tf":1.4142135623730951}}},"2":{"df":3,"docs":{"250":{"tf":1.4142135623730951},"381":{"tf":2.0},"83":{"tf":1.0}}},"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"237":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":31,"docs":{"12":{"tf":1.0},"134":{"tf":2.0},"147":{"tf":1.7320508075688772},"154":{"tf":1.0},"157":{"tf":1.0},"224":{"tf":1.0},"257":{"tf":1.0},"267":{"tf":1.7320508075688772},"280":{"tf":2.0},"285":{"tf":1.4142135623730951},"287":{"tf":1.7320508075688772},"288":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"295":{"tf":1.7320508075688772},"296":{"tf":1.4142135623730951},"301":{"tf":1.4142135623730951},"304":{"tf":2.23606797749979},"309":{"tf":1.0},"332":{"tf":1.4142135623730951},"333":{"tf":2.6457513110645907},"334":{"tf":2.0},"335":{"tf":2.0},"337":{"tf":1.0},"339":{"tf":1.0},"342":{"tf":1.0},"346":{"tf":1.0},"35":{"tf":1.0},"357":{"tf":1.0},"411":{"tf":1.0},"514":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}},"u":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"68":{"tf":1.0}}}},"df":0,"docs":{}},"df":23,"docs":{"131":{"tf":1.0},"134":{"tf":1.0},"261":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"291":{"tf":1.7320508075688772},"295":{"tf":1.7320508075688772},"296":{"tf":1.0},"307":{"tf":1.4142135623730951},"319":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":2.23606797749979},"326":{"tf":1.4142135623730951},"333":{"tf":1.0},"334":{"tf":1.4142135623730951},"337":{"tf":1.4142135623730951},"341":{"tf":1.4142135623730951},"398":{"tf":1.0},"411":{"tf":1.0},"500":{"tf":1.0},"502":{"tf":1.0},"98":{"tf":1.4142135623730951}},"e":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"1":{"df":1,"docs":{"319":{"tf":1.0}}},"2":{"df":1,"docs":{"319":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":2,"docs":{"24":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":5,"docs":{"182":{"tf":1.0},"303":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.0},"477":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"134":{"tf":1.0}}}},"t":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"498":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"c":{"!":{"[":{"\\"":{"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"329":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"264":{"tf":1.0},"329":{"tf":1.0}}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"324":{"tf":2.8284271247461903},"325":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"<":{"&":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"(":{"&":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"325":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"324":{"tf":1.0}}}}},"_":{"df":1,"docs":{"273":{"tf":1.0}}},"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":6,"docs":{"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0},"398":{"tf":1.0},"400":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"261":{"tf":1.0}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"149":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":6,"docs":{"261":{"tf":1.0},"263":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":2.449489742783178},"354":{"tf":1.7320508075688772},"398":{"tf":1.7320508075688772}}}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"df":0,"docs":{},"f":{"3":{"2":{"df":2,"docs":{"351":{"tf":1.0},"352":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"350":{"tf":1.0},"90":{"tf":1.0}}}}}},"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"352":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":2,"docs":{"333":{"tf":1.0},"341":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"359":{"tf":1.0}},"f":{"df":2,"docs":{"137":{"tf":1.0},"419":{"tf":1.0}},"i":{"df":9,"docs":{"13":{"tf":1.0},"164":{"tf":1.0},"172":{"tf":1.0},"186":{"tf":1.0},"188":{"tf":1.0},"31":{"tf":1.0},"42":{"tf":1.0},"448":{"tf":1.0},"476":{"tf":1.0}}}}},"s":{"a":{"df":1,"docs":{"133":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"\'":{"df":1,"docs":{"141":{"tf":1.0}}},"df":33,"docs":{"105":{"tf":1.0},"107":{"tf":1.0},"13":{"tf":1.0},"136":{"tf":1.0},"141":{"tf":1.7320508075688772},"151":{"tf":1.0},"156":{"tf":1.4142135623730951},"157":{"tf":1.0},"164":{"tf":1.0},"173":{"tf":1.4142135623730951},"188":{"tf":1.0},"199":{"tf":1.0},"212":{"tf":1.0},"215":{"tf":1.0},"238":{"tf":2.0},"249":{"tf":1.0},"250":{"tf":1.7320508075688772},"261":{"tf":1.0},"269":{"tf":1.4142135623730951},"292":{"tf":1.0},"310":{"tf":1.0},"333":{"tf":1.0},"337":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"371":{"tf":1.0},"381":{"tf":1.0},"42":{"tf":1.0},"495":{"tf":1.0},"57":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.0},"76":{"tf":1.0}}}}}}}},"i":{"a":{"df":36,"docs":{"105":{"tf":1.0},"108":{"tf":1.0},"11":{"tf":1.0},"114":{"tf":1.0},"133":{"tf":1.0},"154":{"tf":1.0},"231":{"tf":1.4142135623730951},"237":{"tf":1.0},"238":{"tf":1.0},"241":{"tf":1.0},"244":{"tf":1.0},"258":{"tf":1.4142135623730951},"263":{"tf":1.0},"279":{"tf":1.0},"298":{"tf":1.0},"328":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.4142135623730951},"348":{"tf":1.0},"349":{"tf":1.0},"353":{"tf":1.4142135623730951},"354":{"tf":2.0},"356":{"tf":1.7320508075688772},"361":{"tf":1.0},"379":{"tf":1.0},"387":{"tf":1.0},"393":{"tf":1.0},"4":{"tf":1.0},"413":{"tf":1.0},"445":{"tf":1.0},"487":{"tf":1.0},"49":{"tf":1.4142135623730951},"503":{"tf":1.0},"52":{"tf":1.0},"89":{"tf":1.0},"97":{"tf":1.0}}},"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"133":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":4,"docs":{"151":{"tf":1.0},"201":{"tf":1.0},"27":{"tf":1.0},"9":{"tf":1.0}}}},"m":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"39":{"tf":1.0}}}}}}}}},"df":2,"docs":{"143":{"tf":1.0},"371":{"tf":1.0}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"337":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"125":{"tf":1.0}}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":7,"docs":{"204":{"tf":1.0},"231":{"tf":1.0},"257":{"tf":1.0},"27":{"tf":1.4142135623730951},"36":{"tf":1.0},"467":{"tf":1.4142135623730951},"63":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"338":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":15,"docs":{"241":{"tf":1.0},"249":{"tf":1.0},"287":{"tf":1.0},"311":{"tf":1.0},"331":{"tf":1.0},"333":{"tf":1.0},"341":{"tf":1.0},"353":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"39":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"73":{"tf":1.0}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"500":{"tf":1.0}}}}}}}},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"101":{"tf":1.0},"321":{"tf":1.4142135623730951},"324":{"tf":1.0},"327":{"tf":1.0},"500":{"tf":1.0},"96":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"170":{"tf":1.0},"365":{"tf":1.4142135623730951},"68":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"156":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"2":{"tf":1.0},"369":{"tf":1.0},"38":{"tf":1.0},"389":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"y":{"df":1,"docs":{"333":{"tf":1.0}}}},"df":0,"docs":{},"e":{"\'":{"df":0,"docs":{},"r":{"df":1,"docs":{"250":{"tf":1.0}}},"v":{"df":2,"docs":{"104":{"tf":1.4142135623730951},"247":{"tf":1.0}}}},"b":{"df":4,"docs":{"107":{"tf":1.0},"2":{"tf":1.0},"4":{"tf":1.0},"65":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"k":{"df":8,"docs":{"113":{"tf":1.0},"115":{"tf":1.0},"231":{"tf":1.0},"238":{"tf":1.0},"346":{"tf":1.0},"463":{"tf":1.0},"465":{"tf":1.4142135623730951},"472":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"l":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"0":{"tf":1.0},"46":{"tf":1.0}}}}},"df":0,"docs":{}}},"h":{"a":{"df":0,"docs":{},"t":{"\'":{"df":1,"docs":{"237":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"233":{"tf":1.0}}}}}}}},"i":{"d":{"df":0,"docs":{},"e":{"df":10,"docs":{"105":{"tf":1.0},"213":{"tf":1.0},"244":{"tf":1.0},"269":{"tf":1.0},"333":{"tf":1.0},"369":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"74":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":8,"docs":{"104":{"tf":1.0},"107":{"tf":1.0},"113":{"tf":1.0},"115":{"tf":1.0},"124":{"tf":1.0},"243":{"tf":1.0},"48":{"tf":1.0},"67":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":6,"docs":{"136":{"tf":1.0},"151":{"tf":1.0},"202":{"tf":1.0},"217":{"tf":1.0},"264":{"tf":1.4142135623730951},"467":{"tf":1.0}}}}}}}},"n":{"df":3,"docs":{"381":{"tf":1.0},"57":{"tf":1.0},"88":{"tf":1.0}}},"s":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"101":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"291":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"234":{"tf":1.0},"346":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":16,"docs":{"108":{"tf":1.0},"109":{"tf":1.0},"133":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"285":{"tf":1.0},"302":{"tf":1.0},"328":{"tf":1.0},"342":{"tf":1.0},"350":{"tf":1.0},"356":{"tf":1.0},"361":{"tf":1.0},"365":{"tf":1.0},"371":{"tf":1.0},"404":{"tf":1.0},"79":{"tf":1.0},"89":{"tf":1.0}}}}}}}},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":2,"docs":{"0":{"tf":1.0},"47":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":26,"docs":{"101":{"tf":1.0},"107":{"tf":1.0},"127":{"tf":1.0},"135":{"tf":1.4142135623730951},"136":{"tf":1.0},"143":{"tf":1.0},"157":{"tf":1.0},"230":{"tf":1.0},"238":{"tf":2.0},"251":{"tf":1.0},"328":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"356":{"tf":1.0},"36":{"tf":1.0},"361":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"375":{"tf":1.0},"404":{"tf":1.0},"413":{"tf":1.0},"461":{"tf":1.4142135623730951},"75":{"tf":1.0},"90":{"tf":1.0},"98":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"64":{"tf":1.0}}}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":18,"docs":{"133":{"tf":1.0},"143":{"tf":1.7320508075688772},"206":{"tf":1.0},"220":{"tf":1.0},"227":{"tf":1.0},"23":{"tf":1.0},"278":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"371":{"tf":1.4142135623730951},"383":{"tf":1.0},"443":{"tf":1.0},"459":{"tf":1.0},"480":{"tf":1.0},"484":{"tf":1.0},"487":{"tf":1.0},"510":{"tf":1.0},"67":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":4,"docs":{"164":{"tf":1.0},"166":{"tf":1.0},"175":{"tf":1.4142135623730951},"189":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"d":{"\\"":{"]":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"352":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":7,"docs":{"112":{"tf":1.0},"137":{"tf":1.0},"228":{"tf":1.0},"323":{"tf":1.0},"351":{"tf":1.0},"353":{"tf":1.0},"368":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"469":{"tf":1.0}}}},"s":{"df":1,"docs":{"141":{"tf":1.0}},"t":{"df":1,"docs":{"502":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":14,"docs":{"104":{"tf":1.0},"125":{"tf":1.4142135623730951},"241":{"tf":1.0},"267":{"tf":1.0},"280":{"tf":1.0},"317":{"tf":1.0},"324":{"tf":2.6457513110645907},"335":{"tf":1.0},"341":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"381":{"tf":1.0},"501":{"tf":1.0},"96":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"30":{"tf":1.0},"4":{"tf":1.0}}}}}}}},"s":{":":{"/":{"/":{"df":0,"docs":{},"k":{"b":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{":":{"8":{"0":{"0":{"0":{"df":1,"docs":{"377":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"369":{"tf":1.0}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"8":{"0":{"0":{"0":{"df":4,"docs":{"178":{"tf":1.0},"179":{"tf":1.0},"288":{"tf":1.0},"333":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"376":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"x":{"df":9,"docs":{"104":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"136":{"tf":1.7320508075688772},"143":{"tf":1.4142135623730951},"466":{"tf":1.7320508075688772},"477":{"tf":1.0},"480":{"tf":2.0},"520":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"316":{"tf":1.0}}}},"y":{"df":0,"docs":{},"z":{"7":{"8":{"9":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"494":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":12,"docs":{"136":{"tf":1.0},"137":{"tf":1.0},"140":{"tf":1.0},"143":{"tf":1.0},"150":{"tf":1.0},"224":{"tf":1.0},"264":{"tf":1.4142135623730951},"269":{"tf":1.0},"324":{"tf":1.0},"342":{"tf":1.0},"52":{"tf":1.0},"93":{"tf":1.0}}}}},"df":5,"docs":{"104":{"tf":1.0},"143":{"tf":1.0},"203":{"tf":1.0},"480":{"tf":1.4142135623730951},"520":{"tf":1.0}},"e":{"df":3,"docs":{"167":{"tf":1.0},"337":{"tf":1.0},"359":{"tf":1.4142135623730951}},"s":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"342":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"u":{"\'":{"df":0,"docs":{},"r":{"df":1,"docs":{"5":{"tf":1.0}}},"v":{"df":1,"docs":{"226":{"tf":1.0}}}},"df":0,"docs":{}}}},"z":{"df":2,"docs":{"143":{"tf":1.0},"480":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":4,"docs":{"153":{"tf":1.0},"238":{"tf":1.0},"298":{"tf":1.0},"391":{"tf":1.0}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"151":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}}}},"breadcrumbs":{"root":{"0":{".":{".":{"=":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"0":{".":{"0":{".":{"0":{":":{"8":{"0":{"0":{"0":{"df":1,"docs":{"190":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"1":{"/":{"1":{"df":0,"docs":{},"k":{"df":1,"docs":{"359":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"5":{"/":{"1":{"df":0,"docs":{},"k":{"df":1,"docs":{"359":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"144":{"tf":1.0}}},"1":{"df":1,"docs":{"391":{"tf":1.0}}},"3":{"df":1,"docs":{"302":{"tf":1.0}}},"4":{"df":1,"docs":{"492":{"tf":1.0}}},"5":{"df":1,"docs":{"517":{"tf":1.0}}},"6":{"5":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"492":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":5,"docs":{"298":{"tf":1.0},"308":{"tf":1.0},"492":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0}}},"7":{"2":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"492":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"200":{"tf":1.0},"290":{"tf":1.0}}},"8":{"5":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"492":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"495":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"0":{"0":{"1":{"df":1,"docs":{"270":{"tf":1.0}}},"2":{"df":1,"docs":{"270":{"tf":1.0}}},"df":0,"docs":{}},"1":{"df":20,"docs":{"331":{"tf":1.7320508075688772},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"363":{"tf":1.0},"98":{"tf":1.0}}},"2":{"df":17,"docs":{"348":{"tf":1.0},"349":{"tf":1.7320508075688772},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"358":{"tf":1.0},"359":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.0},"393":{"tf":1.0}}},"3":{"df":31,"docs":{"363":{"tf":1.0},"364":{"tf":1.7320508075688772},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"369":{"tf":1.0},"370":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"382":{"tf":1.0},"383":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":1.0},"387":{"tf":1.0},"388":{"tf":1.0},"389":{"tf":1.0},"390":{"tf":1.0},"391":{"tf":1.0},"392":{"tf":1.0},"393":{"tf":1.0}}},"4":{"df":23,"docs":{"100":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.7320508075688772},"395":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0},"399":{"tf":1.0},"400":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"502":{"tf":1.0}}},"5":{"df":1,"docs":{"414":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"1":{"df":17,"docs":{"202":{"tf":1.4142135623730951},"238":{"tf":1.7320508075688772},"247":{"tf":1.7320508075688772},"270":{"tf":1.4142135623730951},"331":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"393":{"tf":1.0},"413":{"tf":1.0},"461":{"tf":2.23606797749979},"492":{"tf":1.7320508075688772},"497":{"tf":1.4142135623730951},"55":{"tf":1.0},"76":{"tf":1.0},"96":{"tf":1.4142135623730951}}},"3":{"df":1,"docs":{"461":{"tf":1.0}}},"5":{"df":1,"docs":{"461":{"tf":1.0}}},"8":{"df":2,"docs":{"461":{"tf":1.0},"492":{"tf":1.0}}},"df":8,"docs":{"237":{"tf":1.4142135623730951},"277":{"tf":2.23606797749979},"289":{"tf":1.0},"308":{"tf":1.0},"324":{"tf":1.0},"366":{"tf":1.0},"492":{"tf":1.0},"495":{"tf":1.4142135623730951}},"x":{"0":{"1":{"df":1,"docs":{"150":{"tf":1.0}}},"df":0,"docs":{}},"4":{"2":{"df":1,"docs":{"150":{"tf":1.0}}},"b":{"df":1,"docs":{"150":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"1":{".":{"0":{".":{"0":{"df":4,"docs":{"212":{"tf":1.0},"292":{"tf":1.0},"333":{"tf":1.0},"337":{"tf":1.0}}},"df":0,"docs":{}},"df":2,"docs":{"144":{"tf":1.0},"495":{"tf":1.0}}},"7":{"0":{"df":2,"docs":{"161":{"tf":1.0},"195":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{",":{"0":{"0":{"0":{"df":3,"docs":{"281":{"tf":1.4142135623730951},"365":{"tf":1.0},"371":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"df":2,"docs":{"241":{"tf":1.0},"281":{"tf":1.4142135623730951}}},"df":7,"docs":{"153":{"tf":1.0},"244":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"369":{"tf":1.0},"371":{"tf":1.0},"57":{"tf":1.0},"88":{"tf":1.0}},"m":{"b":{"df":2,"docs":{"351":{"tf":1.0},"357":{"tf":1.0}}},"df":1,"docs":{"391":{"tf":1.0}}}},"2":{"4":{"d":{"df":1,"docs":{"90":{"tf":1.0}}},"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"3":{"df":1,"docs":{"492":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":15,"docs":{"113":{"tf":1.0},"118":{"tf":1.0},"142":{"tf":1.4142135623730951},"205":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"243":{"tf":1.0},"247":{"tf":1.0},"365":{"tf":1.0},"461":{"tf":1.0},"487":{"tf":1.0},"492":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.4142135623730951},"502":{"tf":1.0},"99":{"tf":1.0}}},"1":{"df":3,"docs":{"143":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"502":{"tf":1.4142135623730951}}},"2":{"3":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":3,"docs":{"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0}}}},"df":0,"docs":{}},"df":6,"docs":{"264":{"tf":1.4142135623730951},"296":{"tf":1.0},"318":{"tf":1.0},"52":{"tf":1.0},"93":{"tf":1.0},"96":{"tf":1.0}}},"df":5,"docs":{"144":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"463":{"tf":1.0},"467":{"tf":1.4142135623730951},"498":{"tf":1.0}}},"3":{"df":2,"docs":{"257":{"tf":1.0},"66":{"tf":1.0}}},"5":{"0":{")":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"1":{"df":1,"docs":{"496":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"231":{"tf":1.0}}},"3":{"6":{"d":{"df":1,"docs":{"90":{"tf":1.0}}},"df":7,"docs":{"289":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"357":{"tf":1.0},"359":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}},"6":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"497":{"tf":1.0}}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"492":{"tf":1.0}}}},"df":3,"docs":{"295":{"tf":1.0},"461":{"tf":1.0},"500":{"tf":1.0}},"t":{"1":{"4":{":":{"2":{"0":{":":{"0":{"0":{"df":0,"docs":{},"z":{"df":1,"docs":{"497":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"7":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"270":{"tf":1.0}}},"df":0,"docs":{}}},"df":12,"docs":{"238":{"tf":1.7320508075688772},"247":{"tf":1.7320508075688772},"331":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"393":{"tf":1.0},"413":{"tf":1.0},"55":{"tf":1.0},"76":{"tf":1.0},"96":{"tf":1.4142135623730951}},"t":{"1":{"0":{":":{"3":{"0":{":":{"0":{"0":{"df":0,"docs":{},"z":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"497":{"tf":1.0}}}},"df":0,"docs":{}}},"df":1,"docs":{"202":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"8":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"270":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":54,"docs":{"107":{"tf":1.4142135623730951},"113":{"tf":1.0},"127":{"tf":1.4142135623730951},"133":{"tf":1.4142135623730951},"146":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"150":{"tf":1.0},"156":{"tf":1.0},"164":{"tf":1.4142135623730951},"169":{"tf":1.4142135623730951},"184":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"2":{"tf":1.4142135623730951},"229":{"tf":1.4142135623730951},"231":{"tf":1.0},"247":{"tf":1.4142135623730951},"250":{"tf":1.4142135623730951},"287":{"tf":1.4142135623730951},"295":{"tf":1.4142135623730951},"296":{"tf":1.0},"298":{"tf":1.4142135623730951},"306":{"tf":1.4142135623730951},"308":{"tf":1.0},"316":{"tf":1.4142135623730951},"323":{"tf":1.0},"324":{"tf":1.4142135623730951},"328":{"tf":1.0},"329":{"tf":2.23606797749979},"330":{"tf":1.0},"333":{"tf":1.4142135623730951},"351":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"391":{"tf":1.0},"398":{"tf":1.4142135623730951},"401":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.4142135623730951},"448":{"tf":1.4142135623730951},"461":{"tf":1.0},"463":{"tf":1.4142135623730951},"465":{"tf":1.0},"466":{"tf":1.0},"469":{"tf":1.4142135623730951},"492":{"tf":1.7320508075688772},"495":{"tf":1.4142135623730951},"515":{"tf":1.0},"517":{"tf":1.4142135623730951},"520":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"74":{"tf":1.0},"79":{"tf":1.4142135623730951},"96":{"tf":1.0},"98":{"tf":1.0}}},"2":{".":{"0":{"df":17,"docs":{"258":{"tf":1.0},"487":{"tf":1.0},"492":{"tf":1.4142135623730951},"493":{"tf":1.4142135623730951},"494":{"tf":1.4142135623730951},"495":{"tf":1.4142135623730951},"496":{"tf":1.4142135623730951},"497":{"tf":1.4142135623730951},"498":{"tf":1.4142135623730951},"500":{"tf":1.7320508075688772},"501":{"tf":1.4142135623730951},"502":{"tf":1.4142135623730951},"511":{"tf":1.0},"512":{"tf":1.0},"514":{"tf":1.0},"515":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"df":0,"docs":{},"m":{"df":1,"docs":{"234":{"tf":1.0}}}},"2":{"4":{"0":{"3":{"0":{"7":{"df":2,"docs":{"290":{"tf":1.0},"292":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"6":{"df":17,"docs":{"202":{"tf":1.4142135623730951},"238":{"tf":1.7320508075688772},"247":{"tf":1.7320508075688772},"270":{"tf":1.4142135623730951},"331":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"393":{"tf":1.0},"413":{"tf":1.0},"461":{"tf":2.23606797749979},"492":{"tf":1.7320508075688772},"497":{"tf":1.4142135623730951},"55":{"tf":1.0},"76":{"tf":1.0},"96":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":3,"docs":{"500":{"tf":1.0},"501":{"tf":1.0},"99":{"tf":1.0}}},"3":{"4":{"df":1,"docs":{"238":{"tf":1.4142135623730951}}},"df":2,"docs":{"463":{"tf":1.0},"498":{"tf":1.0}}},"5":{"df":1,"docs":{"501":{"tf":1.0}}},"df":54,"docs":{"108":{"tf":1.4142135623730951},"113":{"tf":1.4142135623730951},"117":{"tf":1.4142135623730951},"118":{"tf":1.0},"128":{"tf":1.4142135623730951},"134":{"tf":1.4142135623730951},"147":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"165":{"tf":1.4142135623730951},"170":{"tf":1.4142135623730951},"185":{"tf":1.4142135623730951},"197":{"tf":1.4142135623730951},"231":{"tf":1.0},"232":{"tf":1.4142135623730951},"247":{"tf":1.4142135623730951},"250":{"tf":1.4142135623730951},"258":{"tf":1.0},"288":{"tf":1.4142135623730951},"296":{"tf":1.4142135623730951},"299":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"317":{"tf":1.4142135623730951},"323":{"tf":1.0},"324":{"tf":1.4142135623730951},"328":{"tf":1.0},"329":{"tf":1.7320508075688772},"330":{"tf":1.0},"334":{"tf":1.4142135623730951},"346":{"tf":1.0},"352":{"tf":1.4142135623730951},"367":{"tf":1.4142135623730951},"388":{"tf":1.4142135623730951},"399":{"tf":1.4142135623730951},"401":{"tf":1.0},"407":{"tf":1.0},"410":{"tf":1.4142135623730951},"413":{"tf":1.0},"449":{"tf":1.4142135623730951},"461":{"tf":1.0},"463":{"tf":1.7320508075688772},"465":{"tf":1.4142135623730951},"466":{"tf":1.0},"470":{"tf":1.4142135623730951},"487":{"tf":1.0},"493":{"tf":1.4142135623730951},"502":{"tf":1.0},"512":{"tf":1.7320508075688772},"518":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.0},"80":{"tf":1.4142135623730951},"96":{"tf":1.0},"98":{"tf":1.0}},"m":{"b":{"df":1,"docs":{"358":{"tf":1.0}}},"df":0,"docs":{}}},"3":{"0":{"0":{"0":{"df":2,"docs":{"2":{"tf":1.0},"43":{"tf":1.4142135623730951}}},"1":{"df":1,"docs":{"43":{"tf":1.0}}},"df":1,"docs":{"289":{"tf":1.0}}},"df":1,"docs":{"127":{"tf":1.0}}},"2":{"6":{"0":{"0":{"df":1,"docs":{"514":{"tf":1.0}}},"1":{"df":1,"docs":{"514":{"tf":1.0}}},"2":{"df":2,"docs":{"514":{"tf":1.0},"515":{"tf":1.0}}},"3":{"df":1,"docs":{"514":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"7":{"0":{"0":{"df":1,"docs":{"514":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"4":{"d":{"df":1,"docs":{"90":{"tf":1.0}}},"df":7,"docs":{"288":{"tf":1.0},"351":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.7320508075688772},"357":{"tf":1.0},"359":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"*":{"*":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":1,"docs":{"502":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":48,"docs":{"109":{"tf":1.7320508075688772},"114":{"tf":1.0},"129":{"tf":1.4142135623730951},"135":{"tf":1.4142135623730951},"148":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"171":{"tf":1.4142135623730951},"182":{"tf":1.0},"186":{"tf":1.4142135623730951},"198":{"tf":1.4142135623730951},"231":{"tf":1.0},"235":{"tf":1.4142135623730951},"247":{"tf":1.0},"250":{"tf":2.0},"289":{"tf":1.7320508075688772},"290":{"tf":1.0},"292":{"tf":1.0},"300":{"tf":1.4142135623730951},"304":{"tf":1.0},"308":{"tf":1.4142135623730951},"318":{"tf":1.4142135623730951},"324":{"tf":1.0},"328":{"tf":1.0},"333":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.4142135623730951},"354":{"tf":1.0},"368":{"tf":1.4142135623730951},"389":{"tf":1.4142135623730951},"4":{"tf":1.4142135623730951},"400":{"tf":1.4142135623730951},"407":{"tf":1.0},"411":{"tf":1.4142135623730951},"450":{"tf":1.4142135623730951},"461":{"tf":1.0},"463":{"tf":1.4142135623730951},"465":{"tf":1.0},"471":{"tf":1.4142135623730951},"487":{"tf":1.0},"492":{"tf":1.0},"494":{"tf":1.4142135623730951},"500":{"tf":1.0},"502":{"tf":1.0},"519":{"tf":1.4142135623730951},"74":{"tf":1.7320508075688772},"81":{"tf":1.4142135623730951},"98":{"tf":1.0}}},"4":{"2":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"497":{"tf":1.0}}}},"df":2,"docs":{"463":{"tf":1.0},"498":{"tf":1.0}}},"5":{"6":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":3,"docs":{"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"77":{"tf":1.0}}},"8":{"df":1,"docs":{"278":{"tf":1.0}}},"df":27,"docs":{"110":{"tf":1.4142135623730951},"113":{"tf":1.0},"136":{"tf":1.4142135623730951},"149":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"199":{"tf":1.4142135623730951},"238":{"tf":1.0},"247":{"tf":1.4142135623730951},"276":{"tf":1.0},"290":{"tf":1.4142135623730951},"301":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"319":{"tf":1.4142135623730951},"324":{"tf":1.0},"328":{"tf":1.0},"390":{"tf":1.4142135623730951},"401":{"tf":1.4142135623730951},"407":{"tf":1.0},"451":{"tf":1.4142135623730951},"461":{"tf":1.0},"463":{"tf":1.0},"472":{"tf":1.4142135623730951},"495":{"tf":1.4142135623730951},"520":{"tf":1.4142135623730951},"75":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951},"98":{"tf":1.0}}},"5":{".":{".":{"]":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{")":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"1":{"df":1,"docs":{"496":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"0":{"df":0,"docs":{},"m":{"df":1,"docs":{"379":{"tf":1.0}}}},"df":5,"docs":{"129":{"tf":1.0},"231":{"tf":1.0},"244":{"tf":1.0},"57":{"tf":1.0},"88":{"tf":1.0}},"m":{"df":1,"docs":{"234":{"tf":1.4142135623730951}}}},"6":{"df":1,"docs":{"278":{"tf":1.0}}},"df":31,"docs":{"108":{"tf":1.0},"111":{"tf":1.4142135623730951},"114":{"tf":1.0},"137":{"tf":1.4142135623730951},"150":{"tf":1.4142135623730951},"16":{"tf":1.0},"19":{"tf":1.4142135623730951},"194":{"tf":1.0},"200":{"tf":1.7320508075688772},"231":{"tf":1.0},"234":{"tf":1.4142135623730951},"239":{"tf":1.4142135623730951},"241":{"tf":1.4142135623730951},"278":{"tf":1.0},"302":{"tf":1.4142135623730951},"310":{"tf":1.4142135623730951},"328":{"tf":1.0},"380":{"tf":1.0},"402":{"tf":1.4142135623730951},"407":{"tf":1.0},"447":{"tf":1.4142135623730951},"452":{"tf":1.4142135623730951},"461":{"tf":1.4142135623730951},"463":{"tf":1.7320508075688772},"465":{"tf":1.0},"473":{"tf":1.4142135623730951},"492":{"tf":1.0},"496":{"tf":1.4142135623730951},"502":{"tf":1.0},"76":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951}},"m":{"b":{"df":1,"docs":{"358":{"tf":1.0}}},"df":0,"docs":{}}},"6":{"df":18,"docs":{"115":{"tf":1.0},"116":{"tf":1.0},"138":{"tf":1.4142135623730951},"144":{"tf":1.0},"20":{"tf":1.4142135623730951},"201":{"tf":1.4142135623730951},"231":{"tf":1.4142135623730951},"242":{"tf":1.4142135623730951},"258":{"tf":1.0},"259":{"tf":1.0},"276":{"tf":1.0},"407":{"tf":1.0},"487":{"tf":1.0},"497":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.0},"77":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951}}},"7":{"6":{"8":{"d":{"df":1,"docs":{"90":{"tf":1.0}}},"df":3,"docs":{"292":{"tf":1.0},"354":{"tf":1.0},"359":{"tf":1.0}}},"df":0,"docs":{}},"8":{"9":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":2,"docs":{"501":{"tf":1.0},"502":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":8,"docs":{"139":{"tf":1.4142135623730951},"202":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"245":{"tf":1.4142135623730951},"258":{"tf":1.0},"463":{"tf":1.0},"487":{"tf":1.0},"498":{"tf":1.7320508075688772}},"m":{"b":{"df":1,"docs":{"358":{"tf":1.0}}},"df":0,"docs":{}}},"8":{"0":{"df":1,"docs":{"234":{"tf":1.4142135623730951}}},"df":9,"docs":{"140":{"tf":1.4142135623730951},"203":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"231":{"tf":1.0},"248":{"tf":1.4142135623730951},"463":{"tf":1.4142135623730951},"500":{"tf":1.4142135623730951},"501":{"tf":1.0},"511":{"tf":1.0}}},"9":{"df":5,"docs":{"141":{"tf":1.4142135623730951},"204":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"500":{"tf":1.0},"512":{"tf":1.0}}},"_":{"df":1,"docs":{"324":{"tf":1.7320508075688772}}},"a":{"b":{"c":{"1":{"2":{"3":{"df":1,"docs":{"493":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"316":{"tf":1.0}}}},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"90":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":7,"docs":{"255":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"75":{"tf":1.0},"81":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"351":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"t":{"df":15,"docs":{"208":{"tf":1.0},"231":{"tf":1.4142135623730951},"247":{"tf":1.0},"250":{"tf":1.7320508075688772},"287":{"tf":1.0},"331":{"tf":1.0},"349":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":1.0},"372":{"tf":1.0},"461":{"tf":1.0},"463":{"tf":1.7320508075688772},"465":{"tf":1.0},"494":{"tf":1.7320508075688772},"73":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":25,"docs":{"100":{"tf":1.0},"104":{"tf":1.0},"111":{"tf":1.0},"121":{"tf":1.0},"238":{"tf":1.0},"247":{"tf":1.4142135623730951},"322":{"tf":1.0},"365":{"tf":1.0},"369":{"tf":1.4142135623730951},"371":{"tf":1.0},"390":{"tf":1.0},"391":{"tf":1.0},"410":{"tf":1.0},"487":{"tf":1.0},"503":{"tf":1.0},"504":{"tf":1.0},"505":{"tf":1.0},"506":{"tf":1.0},"507":{"tf":1.0},"508":{"tf":1.0},"509":{"tf":1.0},"55":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"75":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"361":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"234":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"123":{"tf":1.0},"139":{"tf":1.0},"158":{"tf":1.0},"96":{"tf":1.0}}}},"v":{"df":7,"docs":{"125":{"tf":1.0},"202":{"tf":1.0},"338":{"tf":1.0},"406":{"tf":1.0},"463":{"tf":1.0},"480":{"tf":1.0},"511":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"157":{"tf":1.0},"449":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"109":{"tf":1.0},"133":{"tf":1.0}}}}},"d":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"40":{"tf":1.0}}}}}}}},"_":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":51,"docs":{"138":{"tf":1.0},"143":{"tf":1.7320508075688772},"185":{"tf":1.0},"188":{"tf":1.0},"197":{"tf":1.7320508075688772},"198":{"tf":1.0},"203":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.4142135623730951},"210":{"tf":1.7320508075688772},"213":{"tf":1.4142135623730951},"215":{"tf":2.0},"226":{"tf":1.0},"231":{"tf":1.0},"233":{"tf":1.0},"234":{"tf":2.0},"237":{"tf":1.0},"238":{"tf":1.0},"241":{"tf":2.23606797749979},"244":{"tf":1.7320508075688772},"257":{"tf":1.0},"278":{"tf":1.0},"301":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.4142135623730951},"321":{"tf":1.4142135623730951},"324":{"tf":1.7320508075688772},"328":{"tf":1.7320508075688772},"330":{"tf":1.4142135623730951},"339":{"tf":1.0},"345":{"tf":1.0},"356":{"tf":1.0},"358":{"tf":1.4142135623730951},"36":{"tf":1.0},"360":{"tf":1.0},"371":{"tf":1.7320508075688772},"388":{"tf":1.0},"398":{"tf":1.4142135623730951},"407":{"tf":3.1622776601683795},"449":{"tf":1.0},"455":{"tf":1.7320508075688772},"456":{"tf":1.4142135623730951},"462":{"tf":1.0},"465":{"tf":1.0},"478":{"tf":1.4142135623730951},"480":{"tf":1.7320508075688772},"490":{"tf":1.0},"493":{"tf":1.0},"496":{"tf":1.0},"88":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":9,"docs":{"198":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.0},"327":{"tf":1.0},"353":{"tf":1.0},"456":{"tf":1.0},"494":{"tf":1.0},"511":{"tf":1.0},"73":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"244":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"501":{"tf":1.0}}}}}}},"df":13,"docs":{"144":{"tf":1.0},"234":{"tf":1.0},"241":{"tf":1.0},"301":{"tf":1.0},"31":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"330":{"tf":1.0},"405":{"tf":1.0},"467":{"tf":1.0},"470":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"93":{"tf":1.0}},"j":{"a":{"c":{"df":1,"docs":{"365":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"250":{"tf":2.23606797749979}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":11,"docs":{"198":{"tf":1.0},"208":{"tf":1.0},"231":{"tf":1.0},"333":{"tf":1.0},"371":{"tf":1.0},"406":{"tf":1.0},"456":{"tf":1.0},"463":{"tf":1.0},"494":{"tf":1.0},"73":{"tf":1.0},"84":{"tf":1.0}}}}},"r":{"df":107,"docs":{"100":{"tf":1.0},"114":{"tf":1.0},"116":{"tf":1.0},"141":{"tf":1.0},"151":{"tf":1.0},"17":{"tf":1.0},"208":{"tf":1.0},"232":{"tf":1.4142135623730951},"234":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0},"258":{"tf":1.0},"270":{"tf":1.0},"282":{"tf":1.0},"311":{"tf":1.0},"331":{"tf":1.7320508075688772},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.7320508075688772},"349":{"tf":1.7320508075688772},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"358":{"tf":1.0},"359":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":2.23606797749979},"364":{"tf":1.7320508075688772},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"369":{"tf":1.0},"370":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"382":{"tf":1.0},"383":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":1.0},"387":{"tf":1.0},"388":{"tf":1.0},"389":{"tf":1.0},"390":{"tf":1.0},"391":{"tf":1.0},"392":{"tf":1.0},"393":{"tf":2.23606797749979},"394":{"tf":1.7320508075688772},"395":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0},"399":{"tf":1.0},"400":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.7320508075688772},"494":{"tf":1.0},"502":{"tf":1.0},"505":{"tf":1.0},"520":{"tf":1.4142135623730951},"55":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":1.4142135623730951},"98":{"tf":1.0}}},"v":{"a":{"df":0,"docs":{},"n":{"c":{"df":8,"docs":{"170":{"tf":1.0},"212":{"tf":1.0},"23":{"tf":1.0},"241":{"tf":1.0},"252":{"tf":1.0},"464":{"tf":1.4142135623730951},"479":{"tf":1.0},"80":{"tf":1.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"65":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"138":{"tf":1.0},"44":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"125":{"tf":1.0}}}}}}}}}}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"478":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":9,"docs":{"123":{"tf":2.449489742783178},"125":{"tf":1.0},"36":{"tf":1.0},"48":{"tf":1.0},"53":{"tf":1.4142135623730951},"55":{"tf":1.0},"61":{"tf":1.4142135623730951},"64":{"tf":1.0},"77":{"tf":2.0}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"307":{"tf":1.0}}}}}},"o":{"df":5,"docs":{"118":{"tf":1.0},"231":{"tf":1.4142135623730951},"247":{"tf":1.0},"463":{"tf":1.7320508075688772},"465":{"tf":1.4142135623730951}}}},"i":{"d":{"df":1,"docs":{"36":{"tf":1.0}}},"df":50,"docs":{"101":{"tf":1.0},"105":{"tf":1.0},"108":{"tf":1.7320508075688772},"123":{"tf":1.4142135623730951},"124":{"tf":1.0},"125":{"tf":1.0},"130":{"tf":1.0},"137":{"tf":2.8284271247461903},"142":{"tf":1.0},"143":{"tf":2.8284271247461903},"151":{"tf":1.0},"157":{"tf":1.4142135623730951},"205":{"tf":1.0},"21":{"tf":2.0},"252":{"tf":1.0},"255":{"tf":1.0},"258":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.7320508075688772},"350":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":1.7320508075688772},"353":{"tf":1.7320508075688772},"354":{"tf":1.4142135623730951},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"358":{"tf":1.0},"359":{"tf":1.0},"36":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.0},"393":{"tf":1.0},"414":{"tf":1.7320508075688772},"446":{"tf":1.0},"463":{"tf":1.0},"48":{"tf":1.0},"480":{"tf":1.0},"49":{"tf":1.0},"53":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"77":{"tf":1.0},"89":{"tf":1.0}}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":1,"docs":{"502":{"tf":1.0}},"s":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"502":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}},"i":{"c":{"df":1,"docs":{"96":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"466":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":2,"docs":{"339":{"tf":1.0},"446":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"107":{"tf":1.0},"136":{"tf":1.0},"141":{"tf":1.0},"365":{"tf":1.0},"407":{"tf":1.0}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":3,"docs":{"104":{"tf":1.0},"323":{"tf":1.0},"43":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"501":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":8,"docs":{"140":{"tf":1.0},"340":{"tf":1.4142135623730951},"382":{"tf":1.4142135623730951},"408":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"410":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951}}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":7,"docs":{"153":{"tf":1.0},"231":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"46":{"tf":1.0},"496":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"342":{"tf":1.0}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"104":{"tf":1.0}}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"73":{"tf":1.0}}}}}}},"d":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"492":{"tf":1.0}}}}},"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"|":{"df":2,"docs":{"139":{"tf":1.0},"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"174":{"tf":1.0},"495":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"316":{"tf":1.0},"401":{"tf":1.0}}}}}},"t":{"df":1,"docs":{"182":{"tf":1.0}},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"182":{"tf":1.0}},"i":{"c":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"=":{"\\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"182":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"df":1,"docs":{"145":{"tf":1.4142135623730951}}}},"y":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":3,"docs":{"108":{"tf":1.0},"244":{"tf":1.0},"461":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":4,"docs":{"108":{"tf":1.0},"129":{"tf":1.0},"142":{"tf":1.0},"473":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":4,"docs":{"182":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"354":{"tf":1.0}}}}}},"df":1,"docs":{"354":{"tf":1.4142135623730951}}}}}},"df":30,"docs":{"135":{"tf":1.0},"182":{"tf":1.4142135623730951},"234":{"tf":1.0},"238":{"tf":2.0},"248":{"tf":1.4142135623730951},"249":{"tf":1.0},"25":{"tf":2.23606797749979},"250":{"tf":2.8284271247461903},"257":{"tf":1.0},"289":{"tf":1.0},"306":{"tf":1.0},"325":{"tf":1.4142135623730951},"334":{"tf":1.0},"337":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0},"361":{"tf":1.4142135623730951},"362":{"tf":1.0},"407":{"tf":1.0},"460":{"tf":1.7320508075688772},"465":{"tf":1.0},"479":{"tf":1.0},"486":{"tf":1.4142135623730951},"523":{"tf":1.7320508075688772},"65":{"tf":1.0},"76":{"tf":1.0},"92":{"tf":1.0},"96":{"tf":1.0}}},"p":{"df":2,"docs":{"107":{"tf":1.0},"24":{"tf":2.0}},"l":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"108":{"tf":1.0},"244":{"tf":1.0},"461":{"tf":1.0}}},"df":6,"docs":{"110":{"tf":1.7320508075688772},"118":{"tf":1.0},"247":{"tf":1.0},"295":{"tf":1.0},"324":{"tf":1.4142135623730951},"88":{"tf":1.0}}},"y":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"o":{"a":{"c":{"df":0,"docs":{},"h":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"501":{"tf":1.0}}}},"df":11,"docs":{"241":{"tf":1.4142135623730951},"249":{"tf":1.0},"250":{"tf":1.0},"285":{"tf":1.0},"322":{"tf":1.4142135623730951},"323":{"tf":1.4142135623730951},"330":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"96":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"31":{"tf":1.0}}}}},"v":{"df":2,"docs":{"330":{"tf":1.0},"413":{"tf":1.0}}}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":48,"docs":{"100":{"tf":1.4142135623730951},"102":{"tf":1.0},"104":{"tf":1.0},"114":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"158":{"tf":1.0},"17":{"tf":2.449489742783178},"196":{"tf":1.0},"198":{"tf":1.0},"20":{"tf":1.0},"200":{"tf":1.0},"208":{"tf":1.4142135623730951},"230":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.4142135623730951},"254":{"tf":1.7320508075688772},"255":{"tf":1.7320508075688772},"268":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"282":{"tf":1.4142135623730951},"284":{"tf":1.7320508075688772},"297":{"tf":1.4142135623730951},"312":{"tf":1.7320508075688772},"313":{"tf":1.4142135623730951},"331":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"354":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"369":{"tf":1.0},"393":{"tf":1.0},"463":{"tf":1.0},"467":{"tf":1.0},"494":{"tf":1.4142135623730951},"55":{"tf":1.0},"57":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"85":{"tf":1.4142135623730951},"87":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.4142135623730951}},"e":{",":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"208":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"v":{"df":0,"docs":{},"g":{"df":1,"docs":{"27":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"v":{"df":1,"docs":{"259":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"a":{"df":1,"docs":{"135":{"tf":1.0}}},"df":0,"docs":{},"n":{"\'":{"df":0,"docs":{},"t":{"df":1,"docs":{"104":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"g":{"(":{"\\"":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"335":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"335":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":4,"docs":{"185":{"tf":1.0},"335":{"tf":1.0},"449":{"tf":1.0},"490":{"tf":1.0}},"s":{"(":{"[":{"\\"":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"303":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"511":{"tf":1.0},"512":{"tf":1.0},"99":{"tf":2.0}}}}}}}},"r":{"a":{"df":0,"docs":{},"y":{"df":5,"docs":{"291":{"tf":1.0},"327":{"tf":1.0},"493":{"tf":1.4142135623730951},"494":{"tf":1.4142135623730951},"498":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"df":1,"docs":{"352":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"241":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"k":{"df":8,"docs":{"113":{"tf":1.0},"114":{"tf":1.0},"118":{"tf":1.0},"234":{"tf":1.0},"250":{"tf":1.0},"471":{"tf":1.0},"472":{"tf":1.0},"480":{"tf":1.0}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"51":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"<":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{">":{">":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"335":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"329":{"tf":1.7320508075688772}}}}}},"[":{"0":{"]":{".":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"329":{"tf":1.0}}}}}},"[":{"1":{"]":{".":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"329":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"329":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"329":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"329":{"tf":1.0}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"329":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"98":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":9,"docs":{"101":{"tf":1.0},"105":{"tf":1.0},"124":{"tf":1.0},"137":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.4142135623730951},"205":{"tf":1.0},"446":{"tf":1.0},"67":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"5":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"c":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"262":{"tf":1.0},"263":{"tf":1.0},"354":{"tf":1.7320508075688772},"373":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":16,"docs":{"208":{"tf":1.0},"262":{"tf":2.0},"263":{"tf":1.0},"264":{"tf":1.4142135623730951},"270":{"tf":1.0},"279":{"tf":1.0},"354":{"tf":1.7320508075688772},"373":{"tf":1.7320508075688772},"455":{"tf":2.0},"458":{"tf":1.4142135623730951},"493":{"tf":2.23606797749979},"495":{"tf":1.4142135623730951},"72":{"tf":2.23606797749979},"75":{"tf":1.0},"79":{"tf":1.0},"98":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"151":{"tf":1.0},"247":{"tf":1.0},"280":{"tf":1.0}}}},"t":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"287":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"64":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":3,"docs":{"390":{"tf":1.0},"61":{"tf":1.0},"77":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":4,"docs":{"137":{"tf":1.4142135623730951},"462":{"tf":1.4142135623730951},"55":{"tf":1.0},"81":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"137":{"tf":1.4142135623730951},"238":{"tf":1.7320508075688772},"249":{"tf":1.0},"462":{"tf":1.4142135623730951},"500":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"96":{"tf":1.0}},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"501":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"348":{"tf":1.0},"363":{"tf":1.0},"393":{"tf":1.0}}}}},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"289":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}}},"df":10,"docs":{"2":{"tf":1.0},"238":{"tf":1.4142135623730951},"299":{"tf":1.4142135623730951},"321":{"tf":1.0},"372":{"tf":1.0},"389":{"tf":1.0},"451":{"tf":1.0},"53":{"tf":1.0},"76":{"tf":1.4142135623730951},"97":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"t":{"df":9,"docs":{"123":{"tf":1.0},"2":{"tf":1.0},"303":{"tf":1.0},"327":{"tf":1.0},"371":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"38":{"tf":1.0},"389":{"tf":1.4142135623730951}}}},"df":5,"docs":{"156":{"tf":1.0},"214":{"tf":1.4142135623730951},"255":{"tf":1.0},"259":{"tf":1.0},"66":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":15,"docs":{"114":{"tf":1.0},"199":{"tf":1.0},"225":{"tf":1.0},"234":{"tf":1.0},"241":{"tf":1.0},"251":{"tf":1.0},"258":{"tf":1.0},"338":{"tf":1.4142135623730951},"352":{"tf":1.0},"356":{"tf":1.0},"372":{"tf":1.0},"381":{"tf":1.0},"479":{"tf":1.0},"497":{"tf":1.4142135623730951},"502":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"234":{"tf":1.0},"502":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"145":{"tf":1.4142135623730951},"219":{"tf":1.0},"247":{"tf":1.0}}},"df":0,"docs":{}}}},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"354":{"tf":1.0}}}},"r":{"df":1,"docs":{"123":{"tf":1.0}}}},"df":0,"docs":{}}},"b":{".":{"1":{".":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"_":{"c":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"(":{"&":{"a":{".":{"1":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"273":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"\\"":{"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"322":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}}},"a":{"a":{"df":0,"docs":{},"i":{"/":{"b":{"df":0,"docs":{},"g":{"df":5,"docs":{"146":{"tf":1.0},"288":{"tf":1.0},"351":{"tf":1.0},"354":{"tf":1.7320508075688772},"362":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"303":{"tf":1.0},"322":{"tf":1.0},"324":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":19,"docs":{"140":{"tf":1.0},"162":{"tf":1.0},"167":{"tf":1.7320508075688772},"176":{"tf":1.0},"177":{"tf":1.0},"20":{"tf":1.7320508075688772},"255":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.0},"300":{"tf":1.0},"330":{"tf":1.0},"364":{"tf":1.0},"373":{"tf":1.0},"407":{"tf":1.0},"425":{"tf":1.7320508075688772},"456":{"tf":1.0},"494":{"tf":1.0},"63":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"389":{"tf":1.0},"494":{"tf":1.0},"520":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"111":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":2,"docs":{"214":{"tf":1.0},"259":{"tf":1.0}}}}},"df":2,"docs":{"214":{"tf":1.0},"66":{"tf":1.0}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":9,"docs":{"156":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.4142135623730951},"404":{"tf":1.0},"413":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"d":{"df":5,"docs":{"133":{"tf":1.0},"139":{"tf":1.0},"298":{"tf":1.0},"307":{"tf":1.0},"470":{"tf":1.0}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"133":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"241":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":2,"docs":{"334":{"tf":1.0},"337":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"170":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"k":{"b":{"df":2,"docs":{"185":{"tf":1.0},"449":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":51,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"110":{"tf":1.0},"120":{"tf":1.0},"131":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"164":{"tf":1.4142135623730951},"169":{"tf":1.7320508075688772},"171":{"tf":1.4142135623730951},"192":{"tf":1.0},"193":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"197":{"tf":1.0},"200":{"tf":1.4142135623730951},"202":{"tf":1.0},"204":{"tf":1.0},"213":{"tf":1.0},"215":{"tf":1.0},"226":{"tf":1.0},"244":{"tf":1.0},"251":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0},"285":{"tf":1.0},"288":{"tf":1.4142135623730951},"291":{"tf":2.23606797749979},"325":{"tf":1.0},"331":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"345":{"tf":1.0},"350":{"tf":1.0},"364":{"tf":1.0},"369":{"tf":1.0},"377":{"tf":1.0},"380":{"tf":1.0},"446":{"tf":1.0},"449":{"tf":1.0},"452":{"tf":1.0},"454":{"tf":1.4142135623730951},"487":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"53":{"tf":1.0},"63":{"tf":1.0},"99":{"tf":1.0}},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"56":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"h":{"df":1,"docs":{"238":{"tf":1.0}}},"i":{"c":{"df":2,"docs":{"217":{"tf":1.0},"80":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"279":{"tf":1.4142135623730951}}}},"df":1,"docs":{"4":{"tf":1.0}}}},"df":6,"docs":{"110":{"tf":1.0},"273":{"tf":1.0},"322":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"381":{"tf":1.4142135623730951},"480":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"125":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":27,"docs":{"113":{"tf":1.4142135623730951},"115":{"tf":1.4142135623730951},"117":{"tf":1.4142135623730951},"118":{"tf":1.0},"120":{"tf":1.0},"123":{"tf":1.0},"134":{"tf":1.0},"156":{"tf":1.0},"157":{"tf":1.0},"241":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"257":{"tf":1.0},"285":{"tf":1.0},"301":{"tf":1.0},"309":{"tf":1.0},"328":{"tf":1.0},"332":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.4142135623730951},"346":{"tf":1.0},"36":{"tf":1.0},"466":{"tf":1.0},"519":{"tf":1.4142135623730951},"53":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":21,"docs":{"109":{"tf":1.4142135623730951},"133":{"tf":1.0},"146":{"tf":1.4142135623730951},"157":{"tf":1.0},"192":{"tf":1.0},"267":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.4142135623730951},"291":{"tf":1.0},"293":{"tf":1.0},"299":{"tf":1.0},"302":{"tf":1.0},"306":{"tf":1.0},"328":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"407":{"tf":1.0},"479":{"tf":1.0},"51":{"tf":1.4142135623730951},"89":{"tf":2.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"103":{"tf":1.0},"69":{"tf":1.0}}},"df":0,"docs":{}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":2,"docs":{"247":{"tf":1.0},"501":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":15,"docs":{"107":{"tf":1.0},"119":{"tf":1.4142135623730951},"133":{"tf":1.0},"134":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"141":{"tf":1.0},"267":{"tf":1.0},"287":{"tf":1.0},"297":{"tf":1.4142135623730951},"330":{"tf":1.0},"334":{"tf":1.0},"367":{"tf":1.0},"93":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":21,"docs":{"108":{"tf":1.0},"109":{"tf":1.0},"122":{"tf":1.0},"130":{"tf":1.4142135623730951},"137":{"tf":1.0},"142":{"tf":1.0},"2":{"tf":1.0},"244":{"tf":1.0},"253":{"tf":1.7320508075688772},"305":{"tf":1.4142135623730951},"323":{"tf":1.0},"353":{"tf":1.0},"359":{"tf":1.0},"368":{"tf":1.0},"461":{"tf":1.4142135623730951},"492":{"tf":1.4142135623730951},"496":{"tf":1.4142135623730951},"516":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.0},"90":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"125":{"tf":1.0},"198":{"tf":1.0},"219":{"tf":1.0},"231":{"tf":1.0},"356":{"tf":1.0},"456":{"tf":1.0},"460":{"tf":1.4142135623730951},"494":{"tf":1.0},"73":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"105":{"tf":1.0},"199":{"tf":1.0},"257":{"tf":1.0},"353":{"tf":1.0},"495":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"122":{"tf":1.0},"366":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"100":{"tf":1.0},"144":{"tf":1.0},"214":{"tf":1.0},"269":{"tf":1.0},"330":{"tf":1.0},"400":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"150":{"tf":1.0},"193":{"tf":1.0},"358":{"tf":1.0},"448":{"tf":1.0},"477":{"tf":1.0}}}}},"d":{"df":1,"docs":{"190":{"tf":1.0}}},"df":1,"docs":{"188":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"93":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"150":{"tf":1.0}}},"c":{"df":0,"docs":{},"k":{".":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"324":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{".":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"323":{"tf":1.0},"401":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":2,"docs":{"324":{"tf":1.7320508075688772},"398":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"323":{"tf":1.0}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"323":{"tf":1.0},"401":{"tf":1.0}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"327":{"tf":1.4142135623730951}}}}}}}},"df":53,"docs":{"100":{"tf":3.1622776601683795},"238":{"tf":1.0},"279":{"tf":1.0},"313":{"tf":1.7320508075688772},"314":{"tf":3.3166247903554},"315":{"tf":1.0},"316":{"tf":1.7320508075688772},"317":{"tf":2.0},"318":{"tf":2.449489742783178},"319":{"tf":2.23606797749979},"320":{"tf":1.0},"321":{"tf":3.4641016151377544},"322":{"tf":2.8284271247461903},"323":{"tf":4.242640687119285},"324":{"tf":7.483314773547883},"325":{"tf":3.3166247903554},"326":{"tf":1.4142135623730951},"327":{"tf":2.449489742783178},"328":{"tf":2.449489742783178},"329":{"tf":3.4641016151377544},"330":{"tf":3.0},"394":{"tf":1.7320508075688772},"395":{"tf":1.0},"396":{"tf":3.0},"397":{"tf":1.4142135623730951},"398":{"tf":2.449489742783178},"399":{"tf":1.4142135623730951},"400":{"tf":1.0},"401":{"tf":2.8284271247461903},"402":{"tf":1.4142135623730951},"403":{"tf":1.0},"404":{"tf":2.449489742783178},"405":{"tf":1.7320508075688772},"406":{"tf":1.4142135623730951},"407":{"tf":3.0},"408":{"tf":1.0},"409":{"tf":2.0},"410":{"tf":1.7320508075688772},"411":{"tf":1.4142135623730951},"412":{"tf":1.4142135623730951},"413":{"tf":2.23606797749979},"487":{"tf":1.0},"499":{"tf":1.7320508075688772},"500":{"tf":2.449489742783178},"501":{"tf":1.0},"502":{"tf":2.23606797749979},"63":{"tf":1.0},"94":{"tf":1.7320508075688772},"95":{"tf":3.0},"96":{"tf":2.6457513110645907},"97":{"tf":2.0},"98":{"tf":1.0},"99":{"tf":2.23606797749979}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"238":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":5,"docs":{"100":{"tf":1.0},"322":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"328":{"tf":1.0},"330":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"407":{"tf":1.0}},"e":{"(":{"&":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"322":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"d":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"329":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"329":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"329":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"(":{"&":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"329":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"323":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"407":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":3,"docs":{"321":{"tf":1.4142135623730951},"324":{"tf":1.7320508075688772},"398":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"s":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"c":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"499":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"328":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"|":{"b":{"df":1,"docs":{"322":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},":":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"*":{"*":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"501":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"o":{"d":{"df":0,"docs":{},"i":{"df":4,"docs":{"140":{"tf":1.0},"264":{"tf":1.0},"28":{"tf":1.0},"324":{"tf":2.23606797749979}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"40":{"tf":1.0}}}}}}},"df":0,"docs":{}},"l":{"df":3,"docs":{"327":{"tf":1.7320508075688772},"334":{"tf":1.4142135623730951},"337":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"n":{"df":4,"docs":{"342":{"tf":1.0},"492":{"tf":1.0},"496":{"tf":1.0},"498":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":3,"docs":{"202":{"tf":1.0},"316":{"tf":1.4142135623730951},"96":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"h":{"df":9,"docs":{"137":{"tf":1.0},"274":{"tf":1.0},"323":{"tf":1.7320508075688772},"353":{"tf":1.0},"361":{"tf":1.0},"368":{"tf":1.0},"405":{"tf":1.0},"500":{"tf":1.0},"88":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"493":{"tf":1.0}}},"df":0,"docs":{}}},"x":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"293":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"293":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"e":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"m":{"a":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"i":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"d":{"b":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"293":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"d":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"df":2,"docs":{"138":{"tf":1.0},"293":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":1,"docs":{"493":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":8,"docs":{"107":{"tf":2.0},"136":{"tf":1.0},"141":{"tf":1.0},"151":{"tf":1.0},"371":{"tf":1.0},"46":{"tf":1.0},"52":{"tf":1.0},"93":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"k":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"317":{"tf":1.0}}}}}},"df":4,"docs":{"138":{"tf":1.0},"156":{"tf":1.0},"301":{"tf":1.0},"324":{"tf":1.0}}}},"df":0,"docs":{},"w":{"df":1,"docs":{"162":{"tf":1.0}}}},"i":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"335":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"a":{"d":{"df":1,"docs":{"250":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"295":{"tf":1.0},"44":{"tf":1.4142135623730951},"7":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"129":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":4,"docs":{"108":{"tf":1.0},"114":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"2":{"tf":1.0},"27":{"tf":1.0},"3":{"tf":1.0},"38":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"g":{"df":9,"docs":{"104":{"tf":1.4142135623730951},"108":{"tf":1.0},"117":{"tf":1.4142135623730951},"118":{"tf":1.0},"245":{"tf":1.4142135623730951},"246":{"tf":1.0},"251":{"tf":1.0},"501":{"tf":1.0},"96":{"tf":1.0}}},"i":{"df":0,"docs":{},"l":{"d":{"df":22,"docs":{"10":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"138":{"tf":1.0},"143":{"tf":1.4142135623730951},"164":{"tf":1.4142135623730951},"165":{"tf":2.8284271247461903},"166":{"tf":2.449489742783178},"167":{"tf":1.4142135623730951},"181":{"tf":1.4142135623730951},"184":{"tf":1.7320508075688772},"189":{"tf":1.0},"2":{"tf":1.0},"209":{"tf":1.4142135623730951},"226":{"tf":1.0},"3":{"tf":1.7320508075688772},"309":{"tf":1.0},"31":{"tf":1.0},"448":{"tf":2.0},"6":{"tf":1.7320508075688772},"67":{"tf":1.0},"8":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"463":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"df":4,"docs":{"0":{"tf":1.0},"28":{"tf":1.0},"475":{"tf":1.0},"53":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"k":{"df":1,"docs":{"356":{"tf":1.0}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"95":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"104":{"tf":1.0},"48":{"tf":1.0}}}}}},"c":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"e":{"(":{")":{")":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"a":{"c":{"df":0,"docs":{},"h":{"df":20,"docs":{"100":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"233":{"tf":1.0},"234":{"tf":2.23606797749979},"238":{"tf":2.23606797749979},"241":{"tf":4.0},"247":{"tf":2.449489742783178},"279":{"tf":1.0},"281":{"tf":1.0},"323":{"tf":1.4142135623730951},"357":{"tf":1.0},"371":{"tf":1.0},"376":{"tf":1.0},"380":{"tf":1.4142135623730951},"381":{"tf":1.4142135623730951},"391":{"tf":1.0},"399":{"tf":1.0},"465":{"tf":1.0},"76":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":1,"docs":{"357":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"328":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"255":{"tf":1.0}}}}}}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"501":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"356":{"tf":1.0}}}},"n":{"\'":{"df":0,"docs":{},"t":{"df":5,"docs":{"133":{"tf":1.0},"142":{"tf":1.0},"322":{"tf":1.0},"367":{"tf":1.0},"410":{"tf":1.4142135623730951}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":5,"docs":{"321":{"tf":1.0},"324":{"tf":1.0},"327":{"tf":1.0},"500":{"tf":1.0},"96":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"1":{"df":1,"docs":{"324":{"tf":2.0}}},"2":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"198":{"tf":1.0},"350":{"tf":1.0},"365":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"324":{"tf":2.0},"502":{"tf":1.0}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":18,"docs":{"101":{"tf":1.0},"105":{"tf":1.0},"116":{"tf":1.0},"120":{"tf":1.0},"127":{"tf":1.4142135623730951},"207":{"tf":1.4142135623730951},"226":{"tf":1.0},"249":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.4142135623730951},"350":{"tf":1.0},"460":{"tf":1.4142135623730951},"47":{"tf":1.0},"480":{"tf":1.0},"49":{"tf":1.0},"59":{"tf":1.0},"72":{"tf":1.7320508075688772},"98":{"tf":1.0}}}}}},"r":{"d":{"df":20,"docs":{"314":{"tf":1.0},"316":{"tf":2.23606797749979},"321":{"tf":1.4142135623730951},"323":{"tf":1.0},"324":{"tf":1.7320508075688772},"325":{"tf":1.0},"326":{"tf":1.0},"329":{"tf":1.4142135623730951},"330":{"tf":1.0},"396":{"tf":1.0},"398":{"tf":1.0},"401":{"tf":1.0},"404":{"tf":1.0},"407":{"tf":1.0},"480":{"tf":1.4142135623730951},"500":{"tf":1.0},"502":{"tf":2.0},"96":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"120":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"333":{"tf":1.0}}}}}}},"df":17,"docs":{"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"161":{"tf":1.0},"162":{"tf":1.0},"164":{"tf":1.4142135623730951},"165":{"tf":1.7320508075688772},"166":{"tf":1.4142135623730951},"167":{"tf":1.4142135623730951},"175":{"tf":1.7320508075688772},"181":{"tf":1.0},"184":{"tf":1.0},"188":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"193":{"tf":1.0},"195":{"tf":1.0},"42":{"tf":1.0},"448":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":40,"docs":{"130":{"tf":1.0},"158":{"tf":1.0},"16":{"tf":1.0},"228":{"tf":1.7320508075688772},"229":{"tf":1.7320508075688772},"230":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.7320508075688772},"233":{"tf":1.0},"234":{"tf":1.0},"235":{"tf":1.7320508075688772},"236":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.4142135623730951},"239":{"tf":1.7320508075688772},"240":{"tf":1.0},"241":{"tf":1.0},"242":{"tf":1.7320508075688772},"243":{"tf":1.0},"244":{"tf":1.0},"245":{"tf":1.7320508075688772},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.7320508075688772},"249":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0},"252":{"tf":1.0},"315":{"tf":1.4142135623730951},"343":{"tf":1.0},"358":{"tf":1.0},"359":{"tf":1.0},"374":{"tf":1.4142135623730951},"384":{"tf":1.0},"479":{"tf":1.0},"502":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"64":{"tf":1.0},"68":{"tf":1.0},"98":{"tf":1.4142135623730951}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"134":{"tf":1.0},"332":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.0}}}},"df":2,"docs":{"237":{"tf":1.0},"244":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"493":{"tf":1.0}},"i":{"df":8,"docs":{"142":{"tf":1.0},"213":{"tf":1.0},"244":{"tf":1.4142135623730951},"457":{"tf":1.0},"496":{"tf":1.7320508075688772},"519":{"tf":1.0},"74":{"tf":1.0},"98":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":6,"docs":{"134":{"tf":1.0},"267":{"tf":1.0},"301":{"tf":1.0},"334":{"tf":1.4142135623730951},"337":{"tf":1.0},"346":{"tf":1.4142135623730951}}}}}}},"d":{"df":9,"docs":{"164":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.0},"196":{"tf":1.0},"213":{"tf":1.0},"244":{"tf":1.0},"43":{"tf":1.0},"450":{"tf":1.0},"476":{"tf":1.0}}},"df":2,"docs":{"323":{"tf":1.4142135623730951},"330":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{":":{"8":{"0":{"0":{"0":{"df":1,"docs":{"369":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":5,"docs":{"269":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"57":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"215":{"tf":1.0},"240":{"tf":1.0}}}}},"df":0,"docs":{}}}},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"329":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":3,"docs":{"228":{"tf":1.0},"234":{"tf":1.0},"75":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"g":{"df":31,"docs":{"107":{"tf":1.0},"109":{"tf":1.0},"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"136":{"tf":1.0},"2":{"tf":1.0},"285":{"tf":1.0},"298":{"tf":1.4142135623730951},"301":{"tf":1.0},"302":{"tf":1.0},"322":{"tf":1.0},"328":{"tf":1.0},"348":{"tf":1.0},"357":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"369":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.7320508075688772},"379":{"tf":1.4142135623730951},"38":{"tf":1.0},"389":{"tf":1.0},"391":{"tf":1.0},"393":{"tf":1.0},"407":{"tf":1.0},"46":{"tf":1.0},"52":{"tf":1.0},"6":{"tf":1.0},"70":{"tf":1.0},"89":{"tf":1.4142135623730951},"93":{"tf":1.0}}}},"t":{"df":1,"docs":{"48":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"460":{"tf":1.4142135623730951},"465":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":22,"docs":{"123":{"tf":1.0},"173":{"tf":1.0},"190":{"tf":1.0},"191":{"tf":1.0},"207":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"267":{"tf":1.0},"280":{"tf":1.0},"303":{"tf":1.7320508075688772},"304":{"tf":1.0},"338":{"tf":1.0},"35":{"tf":1.4142135623730951},"36":{"tf":1.0},"44":{"tf":1.0},"466":{"tf":2.0},"475":{"tf":1.0},"477":{"tf":1.0},"61":{"tf":1.0},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"12":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"107":{"tf":1.0},"136":{"tf":1.0},"141":{"tf":1.0}}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"l":{"d":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":5,"docs":{"314":{"tf":1.0},"324":{"tf":2.8284271247461903},"329":{"tf":1.4142135623730951},"404":{"tf":1.0},"96":{"tf":1.7320508075688772}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":4,"docs":{"321":{"tf":1.0},"324":{"tf":1.7320508075688772},"398":{"tf":1.0},"95":{"tf":1.0}}}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"477":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"133":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":3,"docs":{"115":{"tf":1.0},"350":{"tf":1.0},"73":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":5,"docs":{"104":{"tf":1.0},"230":{"tf":1.0},"241":{"tf":1.0},"247":{"tf":1.0},"84":{"tf":1.0}},"n":{"df":2,"docs":{"241":{"tf":1.0},"73":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"{":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"/":{"c":{"d":{"df":2,"docs":{"18":{"tf":1.0},"309":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"337":{"tf":1.4142135623730951}}},"l":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"257":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"321":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951}}}},"u":{"d":{"df":66,"docs":{"105":{"tf":1.0},"108":{"tf":1.4142135623730951},"114":{"tf":1.0},"118":{"tf":1.4142135623730951},"127":{"tf":1.0},"134":{"tf":1.0},"143":{"tf":1.0},"147":{"tf":1.0},"182":{"tf":2.0},"183":{"tf":1.7320508075688772},"185":{"tf":1.4142135623730951},"186":{"tf":1.0},"192":{"tf":1.0},"205":{"tf":2.0},"225":{"tf":1.0},"231":{"tf":1.7320508075688772},"234":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.7320508075688772},"24":{"tf":1.0},"241":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"250":{"tf":1.4142135623730951},"258":{"tf":1.0},"263":{"tf":1.0},"275":{"tf":1.0},"290":{"tf":1.7320508075688772},"292":{"tf":1.4142135623730951},"334":{"tf":1.0},"337":{"tf":1.0},"352":{"tf":1.4142135623730951},"354":{"tf":1.0},"359":{"tf":1.4142135623730951},"360":{"tf":1.0},"434":{"tf":1.7320508075688772},"445":{"tf":1.0},"446":{"tf":1.4142135623730951},"449":{"tf":1.4142135623730951},"451":{"tf":2.0},"452":{"tf":1.4142135623730951},"454":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0},"457":{"tf":1.0},"458":{"tf":1.0},"460":{"tf":1.0},"461":{"tf":1.0},"462":{"tf":1.0},"463":{"tf":1.0},"465":{"tf":1.0},"466":{"tf":1.0},"467":{"tf":1.0},"469":{"tf":1.0},"471":{"tf":1.0},"472":{"tf":1.0},"478":{"tf":1.0},"479":{"tf":1.0},"480":{"tf":1.4142135623730951},"481":{"tf":1.7320508075688772},"487":{"tf":1.0},"49":{"tf":1.0},"490":{"tf":1.4142135623730951},"53":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"189":{"tf":1.4142135623730951},"473":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"8":{"tf":1.4142135623730951}}}}},"r":{"df":4,"docs":{"139":{"tf":1.0},"157":{"tf":1.0},"357":{"tf":1.0},"36":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"139":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"i":{"/":{"df":0,"docs":{},"m":{"c":{"df":0,"docs":{},"p":{"df":3,"docs":{"328":{"tf":1.0},"330":{"tf":1.0},"358":{"tf":1.0}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"28":{"tf":1.0}}}},"df":19,"docs":{"161":{"tf":1.4142135623730951},"164":{"tf":1.4142135623730951},"165":{"tf":1.4142135623730951},"170":{"tf":1.0},"173":{"tf":1.4142135623730951},"188":{"tf":1.0},"193":{"tf":1.0},"195":{"tf":1.7320508075688772},"225":{"tf":1.0},"23":{"tf":2.23606797749979},"255":{"tf":1.0},"257":{"tf":1.4142135623730951},"334":{"tf":1.0},"335":{"tf":1.0},"338":{"tf":1.0},"407":{"tf":1.4142135623730951},"441":{"tf":1.7320508075688772},"64":{"tf":1.7320508075688772},"66":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"(":{"\\"":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"352":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":3,"docs":{"352":{"tf":1.0},"354":{"tf":1.0},"460":{"tf":1.4142135623730951}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":2,"docs":{"164":{"tf":1.4142135623730951},"324":{"tf":1.7320508075688772}}}},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"104":{"tf":1.0}}}},"u":{"d":{"df":16,"docs":{"109":{"tf":1.0},"135":{"tf":2.23606797749979},"157":{"tf":1.0},"281":{"tf":1.0},"289":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.4142135623730951},"353":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.7320508075688772},"359":{"tf":1.4142135623730951},"361":{"tf":2.0},"372":{"tf":1.0},"65":{"tf":1.0},"90":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"m":{"d":{"+":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"+":{"df":0,"docs":{},"v":{"df":1,"docs":{"39":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"66":{"tf":1.0}}},"df":0,"docs":{}},"o":{"d":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"77":{"tf":1.0}}}}}}}},"b":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"238":{"tf":1.0},"299":{"tf":1.0}}}},"df":0,"docs":{}},"df":83,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"107":{"tf":1.7320508075688772},"108":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.4142135623730951},"125":{"tf":2.0},"133":{"tf":1.4142135623730951},"136":{"tf":1.4142135623730951},"141":{"tf":3.0},"143":{"tf":1.0},"153":{"tf":1.4142135623730951},"157":{"tf":1.4142135623730951},"183":{"tf":1.7320508075688772},"185":{"tf":1.4142135623730951},"186":{"tf":1.0},"192":{"tf":1.0},"202":{"tf":1.0},"205":{"tf":2.0},"218":{"tf":1.7320508075688772},"225":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.0},"238":{"tf":1.0},"239":{"tf":1.4142135623730951},"24":{"tf":1.0},"240":{"tf":1.0},"241":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0},"258":{"tf":1.0},"26":{"tf":1.0},"264":{"tf":1.4142135623730951},"275":{"tf":1.0},"28":{"tf":1.0},"280":{"tf":1.0},"285":{"tf":1.4142135623730951},"293":{"tf":1.0},"302":{"tf":1.0},"309":{"tf":1.0},"335":{"tf":1.0},"34":{"tf":1.7320508075688772},"356":{"tf":1.0},"36":{"tf":1.7320508075688772},"365":{"tf":1.4142135623730951},"371":{"tf":1.0},"375":{"tf":1.0},"39":{"tf":1.0},"413":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.4142135623730951},"449":{"tf":1.4142135623730951},"451":{"tf":2.0},"452":{"tf":1.0},"473":{"tf":1.4142135623730951},"478":{"tf":1.0},"479":{"tf":1.0},"480":{"tf":1.0},"481":{"tf":1.7320508075688772},"487":{"tf":1.0},"49":{"tf":1.0},"490":{"tf":1.4142135623730951},"514":{"tf":2.0},"515":{"tf":1.0},"521":{"tf":1.0},"525":{"tf":1.7320508075688772},"53":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.7320508075688772},"75":{"tf":1.4142135623730951},"81":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0},"92":{"tf":1.4142135623730951},"96":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":9,"docs":{"121":{"tf":1.0},"248":{"tf":1.4142135623730951},"251":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"371":{"tf":1.0},"53":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"272":{"tf":1.0},"273":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"155":{"tf":1.0},"257":{"tf":1.0},"259":{"tf":1.0}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{"df":3,"docs":{"296":{"tf":1.0},"323":{"tf":1.4142135623730951},"401":{"tf":1.0}}}}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"244":{"tf":1.0},"274":{"tf":1.0},"323":{"tf":1.0},"380":{"tf":1.0},"465":{"tf":1.0},"88":{"tf":1.0},"93":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"144":{"tf":1.0}}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"346":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"n":{"d":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\\"":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"303":{"tf":1.0},"335":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":17,"docs":{"185":{"tf":1.0},"225":{"tf":1.4142135623730951},"226":{"tf":1.0},"23":{"tf":1.0},"257":{"tf":1.7320508075688772},"338":{"tf":1.0},"372":{"tf":1.0},"388":{"tf":1.0},"407":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"442":{"tf":1.7320508075688772},"449":{"tf":1.0},"453":{"tf":1.4142135623730951},"490":{"tf":1.0},"5":{"tf":1.7320508075688772},"66":{"tf":1.0},"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"104":{"tf":1.0},"117":{"tf":1.0},"124":{"tf":1.0},"341":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"125":{"tf":1.4142135623730951},"136":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"36":{"tf":1.0},"371":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":11,"docs":{"206":{"tf":1.4142135623730951},"228":{"tf":1.0},"23":{"tf":1.0},"251":{"tf":1.0},"338":{"tf":1.0},"459":{"tf":1.4142135623730951},"487":{"tf":1.0},"493":{"tf":1.0},"510":{"tf":1.0},"512":{"tf":1.0},"75":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"df":2,"docs":{"191":{"tf":1.0},"226":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"338":{"tf":1.0},"351":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"21":{"tf":1.0},"359":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951}}}}}}},"t":{"df":18,"docs":{"100":{"tf":1.0},"156":{"tf":1.0},"170":{"tf":1.0},"204":{"tf":1.0},"250":{"tf":1.0},"269":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.7320508075688772},"324":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.7320508075688772},"393":{"tf":1.0},"401":{"tf":1.0},"404":{"tf":1.4142135623730951},"413":{"tf":1.0},"483":{"tf":1.7320508075688772},"63":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":7,"docs":{"189":{"tf":1.4142135623730951},"301":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"502":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":7,"docs":{"27":{"tf":1.0},"333":{"tf":1.0},"360":{"tf":1.4142135623730951},"391":{"tf":1.0},"4":{"tf":1.0},"486":{"tf":1.0},"77":{"tf":1.0}},"e":{"d":{":":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"498":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"x":{"df":18,"docs":{"234":{"tf":1.0},"308":{"tf":1.4142135623730951},"321":{"tf":1.0},"323":{"tf":1.0},"330":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"343":{"tf":1.0},"346":{"tf":1.0},"353":{"tf":1.0},"357":{"tf":1.0},"368":{"tf":1.0},"372":{"tf":1.0},"385":{"tf":1.0},"391":{"tf":1.0},"405":{"tf":1.0},"463":{"tf":1.0},"502":{"tf":1.0}}}},"i":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"122":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"138":{"tf":1.4142135623730951},"149":{"tf":1.4142135623730951},"256":{"tf":1.4142135623730951},"258":{"tf":1.0}}},"s":{"df":10,"docs":{"138":{"tf":1.4142135623730951},"157":{"tf":1.0},"234":{"tf":1.0},"285":{"tf":1.4142135623730951},"291":{"tf":1.0},"292":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"346":{"tf":1.0},"372":{"tf":1.0}},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"291":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":8,"docs":{"138":{"tf":1.4142135623730951},"154":{"tf":1.0},"286":{"tf":2.0},"291":{"tf":1.7320508075688772},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"v":{"df":0,"docs":{},"g":{"df":1,"docs":{"27":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":5,"docs":{"0":{"tf":1.0},"153":{"tf":1.0},"254":{"tf":1.0},"338":{"tf":1.0},"511":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"214":{"tf":1.0}}}}}}}},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"495":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":53,"docs":{"100":{"tf":1.0},"101":{"tf":1.4142135623730951},"102":{"tf":1.0},"105":{"tf":1.0},"108":{"tf":1.4142135623730951},"128":{"tf":1.0},"130":{"tf":1.4142135623730951},"142":{"tf":1.7320508075688772},"15":{"tf":1.0},"197":{"tf":1.0},"199":{"tf":1.0},"202":{"tf":1.0},"251":{"tf":1.0},"318":{"tf":1.0},"350":{"tf":1.4142135623730951},"36":{"tf":1.0},"458":{"tf":1.4142135623730951},"473":{"tf":1.0},"49":{"tf":1.0},"518":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"69":{"tf":2.0},"70":{"tf":1.7320508075688772},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.4142135623730951},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.4142135623730951},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"v":{"df":0,"docs":{},"g":{"df":1,"docs":{"27":{"tf":1.0}}}}}},"df":0,"docs":{}},"u":{"df":6,"docs":{"199":{"tf":1.0},"200":{"tf":1.0},"473":{"tf":1.0},"495":{"tf":1.0},"56":{"tf":1.0},"79":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"339":{"tf":1.0},"352":{"tf":1.0},"358":{"tf":1.0},"466":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"36":{"tf":1.0}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"157":{"tf":1.4142135623730951}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"56":{"tf":1.0},"81":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":3,"docs":{"238":{"tf":1.0},"247":{"tf":1.7320508075688772},"98":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":9,"docs":{"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"238":{"tf":2.23606797749979},"247":{"tf":1.7320508075688772},"334":{"tf":1.0},"337":{"tf":1.0},"465":{"tf":1.4142135623730951},"501":{"tf":1.0},"76":{"tf":1.0}}}}},"df":12,"docs":{"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"520":{"tf":1.0}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}},".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"146":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"293":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"354":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"n":{"c":{"df":0,"docs":{},"l":{"df":5,"docs":{"266":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.4142135623730951},"345":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"133":{"tf":1.0},"147":{"tf":1.0},"354":{"tf":1.0}}},"df":0,"docs":{}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"298":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"293":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":3,"docs":{"169":{"tf":1.0},"196":{"tf":1.0},"270":{"tf":1.0}}}}}}},"/":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"e":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":5,"docs":{"185":{"tf":1.0},"205":{"tf":1.0},"258":{"tf":1.0},"449":{"tf":1.0},"490":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"k":{"b":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"\\"":{")":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"303":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},":":{"1":{"5":{":":{"5":{"df":1,"docs":{"295":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":5,"docs":{"290":{"tf":1.0},"292":{"tf":1.0},"303":{"tf":1.4142135623730951},"304":{"tf":1.0},"311":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"345":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"/":{"*":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"311":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":2,"docs":{"299":{"tf":1.0},"304":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":2,"docs":{"299":{"tf":1.0},"304":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":2,"docs":{"299":{"tf":1.0},"304":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"{":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{",":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{",":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"}":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"290":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"345":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"304":{"tf":1.4142135623730951}},"s":{"/":{"*":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"310":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"b":{"df":4,"docs":{"292":{"tf":1.4142135623730951},"293":{"tf":1.0},"303":{"tf":1.4142135623730951},"304":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":71,"docs":{"109":{"tf":1.4142135623730951},"133":{"tf":2.0},"139":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"156":{"tf":1.0},"157":{"tf":1.0},"17":{"tf":1.0},"170":{"tf":1.4142135623730951},"171":{"tf":1.0},"19":{"tf":1.4142135623730951},"213":{"tf":1.0},"257":{"tf":1.0},"267":{"tf":1.0},"27":{"tf":1.0},"280":{"tf":1.0},"284":{"tf":2.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.4142135623730951},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":2.0},"294":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.7320508075688772},"298":{"tf":1.7320508075688772},"299":{"tf":1.0},"300":{"tf":1.0},"301":{"tf":1.4142135623730951},"302":{"tf":1.7320508075688772},"303":{"tf":1.0},"304":{"tf":2.23606797749979},"305":{"tf":1.0},"306":{"tf":1.4142135623730951},"307":{"tf":2.0},"308":{"tf":1.0},"309":{"tf":1.0},"310":{"tf":1.7320508075688772},"311":{"tf":1.0},"328":{"tf":1.4142135623730951},"332":{"tf":1.7320508075688772},"333":{"tf":2.23606797749979},"334":{"tf":1.0},"335":{"tf":2.0},"337":{"tf":1.7320508075688772},"338":{"tf":1.0},"339":{"tf":1.4142135623730951},"341":{"tf":1.0},"344":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":2.23606797749979},"347":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"361":{"tf":1.0},"369":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"413":{"tf":1.0},"51":{"tf":1.4142135623730951},"63":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"89":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":1,"docs":{"139":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":1,"docs":{"139":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"139":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"r":{"df":72,"docs":{"133":{"tf":1.0},"134":{"tf":1.7320508075688772},"140":{"tf":1.7320508075688772},"149":{"tf":1.0},"151":{"tf":1.0},"161":{"tf":1.0},"170":{"tf":2.0},"171":{"tf":1.0},"178":{"tf":1.4142135623730951},"182":{"tf":1.0},"185":{"tf":1.4142135623730951},"19":{"tf":2.0},"192":{"tf":1.0},"196":{"tf":1.0},"205":{"tf":1.0},"21":{"tf":1.0},"212":{"tf":2.0},"213":{"tf":1.0},"225":{"tf":1.4142135623730951},"252":{"tf":1.0},"257":{"tf":1.0},"265":{"tf":1.4142135623730951},"27":{"tf":1.0},"279":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":2.0},"286":{"tf":2.0},"288":{"tf":1.0},"292":{"tf":1.0},"294":{"tf":1.0},"303":{"tf":1.7320508075688772},"304":{"tf":1.4142135623730951},"311":{"tf":1.4142135623730951},"327":{"tf":1.7320508075688772},"331":{"tf":2.0},"332":{"tf":1.4142135623730951},"333":{"tf":1.0},"334":{"tf":1.7320508075688772},"335":{"tf":1.4142135623730951},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.7320508075688772},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"354":{"tf":1.7320508075688772},"356":{"tf":1.0},"357":{"tf":1.0},"379":{"tf":1.0},"40":{"tf":1.0},"418":{"tf":1.7320508075688772},"420":{"tf":1.7320508075688772},"431":{"tf":1.7320508075688772},"449":{"tf":1.4142135623730951},"463":{"tf":1.0},"479":{"tf":1.4142135623730951},"488":{"tf":1.4142135623730951},"490":{"tf":1.4142135623730951},"499":{"tf":1.0},"51":{"tf":1.0},"521":{"tf":1.0},"64":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0},"97":{"tf":1.7320508075688772}}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"t":{"df":7,"docs":{"136":{"tf":1.4142135623730951},"371":{"tf":1.0},"372":{"tf":1.4142135623730951},"381":{"tf":1.4142135623730951},"383":{"tf":1.0},"384":{"tf":1.0},"391":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"107":{"tf":1.0},"124":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"s":{"df":2,"docs":{"342":{"tf":1.0},"357":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"226":{"tf":1.0}}}}}},"df":0,"docs":{}}},"n":{"df":2,"docs":{"179":{"tf":1.0},"238":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"t":{"_":{"d":{"b":{"df":1,"docs":{"238":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":24,"docs":{"101":{"tf":1.0},"105":{"tf":1.0},"111":{"tf":1.4142135623730951},"128":{"tf":1.4142135623730951},"144":{"tf":1.0},"186":{"tf":1.4142135623730951},"190":{"tf":1.4142135623730951},"226":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":1.0},"251":{"tf":1.0},"451":{"tf":1.0},"452":{"tf":1.4142135623730951},"462":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"517":{"tf":1.0},"56":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"79":{"tf":1.0},"81":{"tf":1.0},"84":{"tf":1.0},"92":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":1,"docs":{"250":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":13,"docs":{"116":{"tf":1.0},"198":{"tf":1.4142135623730951},"231":{"tf":1.4142135623730951},"234":{"tf":1.0},"336":{"tf":1.4142135623730951},"355":{"tf":1.4142135623730951},"370":{"tf":1.4142135623730951},"403":{"tf":1.4142135623730951},"456":{"tf":1.0},"460":{"tf":1.4142135623730951},"494":{"tf":1.7320508075688772},"520":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}},"i":{"d":{"df":7,"docs":{"340":{"tf":1.4142135623730951},"382":{"tf":1.4142135623730951},"408":{"tf":1.4142135623730951},"466":{"tf":1.0},"493":{"tf":1.0},"73":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"279":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":13,"docs":{"110":{"tf":1.0},"121":{"tf":1.0},"219":{"tf":1.7320508075688772},"234":{"tf":1.0},"238":{"tf":1.0},"244":{"tf":1.0},"255":{"tf":1.0},"36":{"tf":1.0},"371":{"tf":1.0},"470":{"tf":1.0},"502":{"tf":1.0},"75":{"tf":1.0},"91":{"tf":1.0}}}}},"t":{"df":1,"docs":{"146":{"tf":1.0}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"357":{"tf":1.0},"365":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"137":{"tf":1.4142135623730951},"292":{"tf":1.0}}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"0":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"/":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"323":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"[":{"4":{".":{".":{"4":{"df":1,"docs":{"324":{"tf":1.0}}},"]":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"(":{"\\"":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}},"df":45,"docs":{"100":{"tf":1.0},"139":{"tf":1.0},"150":{"tf":1.0},"197":{"tf":1.4142135623730951},"200":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"209":{"tf":1.0},"210":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"241":{"tf":1.0},"244":{"tf":1.4142135623730951},"247":{"tf":1.0},"261":{"tf":1.0},"264":{"tf":1.7320508075688772},"28":{"tf":1.0},"314":{"tf":1.4142135623730951},"321":{"tf":1.7320508075688772},"322":{"tf":1.4142135623730951},"323":{"tf":2.0},"324":{"tf":3.872983346207417},"328":{"tf":1.0},"329":{"tf":1.7320508075688772},"330":{"tf":1.4142135623730951},"36":{"tf":1.0},"396":{"tf":1.0},"398":{"tf":1.0},"399":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"410":{"tf":1.0},"413":{"tf":1.0},"455":{"tf":1.0},"478":{"tf":1.7320508075688772},"487":{"tf":1.0},"493":{"tf":2.0},"499":{"tf":1.0},"503":{"tf":1.0},"53":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0},"94":{"tf":1.4142135623730951},"95":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"(":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":43,"docs":{"104":{"tf":1.4142135623730951},"113":{"tf":1.0},"114":{"tf":1.0},"116":{"tf":1.4142135623730951},"120":{"tf":1.4142135623730951},"121":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"144":{"tf":1.0},"151":{"tf":1.0},"198":{"tf":1.0},"231":{"tf":2.0},"234":{"tf":1.4142135623730951},"241":{"tf":1.0},"250":{"tf":2.0},"251":{"tf":1.0},"258":{"tf":1.0},"276":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.4142135623730951},"349":{"tf":1.0},"350":{"tf":1.4142135623730951},"364":{"tf":1.0},"365":{"tf":1.4142135623730951},"396":{"tf":1.4142135623730951},"409":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"456":{"tf":1.0},"460":{"tf":1.4142135623730951},"465":{"tf":1.4142135623730951},"48":{"tf":1.0},"486":{"tf":1.0},"494":{"tf":2.0},"496":{"tf":1.0},"520":{"tf":1.0},"53":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.7320508075688772},"75":{"tf":1.0},"92":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"324":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":14,"docs":{"134":{"tf":1.0},"147":{"tf":1.0},"151":{"tf":1.0},"154":{"tf":1.4142135623730951},"267":{"tf":1.0},"280":{"tf":1.0},"285":{"tf":1.7320508075688772},"287":{"tf":1.7320508075688772},"288":{"tf":1.0},"295":{"tf":2.0},"300":{"tf":1.0},"301":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.4142135623730951}},"s":{".":{"df":0,"docs":{},"k":{"b":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"288":{"tf":1.4142135623730951},"290":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"301":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"26":{"tf":2.0},"36":{"tf":1.0},"46":{"tf":1.7320508075688772}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"m":{"d":{"df":2,"docs":{"30":{"tf":1.0},"46":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":12,"docs":{"105":{"tf":1.0},"135":{"tf":1.0},"151":{"tf":1.0},"215":{"tf":1.0},"269":{"tf":1.4142135623730951},"289":{"tf":1.0},"356":{"tf":1.0},"359":{"tf":1.0},"390":{"tf":1.0},"57":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"140":{"tf":2.0},"74":{"tf":1.0}}}},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"t":{"df":5,"docs":{"238":{"tf":1.0},"296":{"tf":1.0},"350":{"tf":1.0},"379":{"tf":1.0},"409":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"i":{"df":4,"docs":{"170":{"tf":1.0},"220":{"tf":1.0},"241":{"tf":1.0},"324":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"292":{"tf":1.4142135623730951},"293":{"tf":1.0},"299":{"tf":1.7320508075688772},"303":{"tf":1.4142135623730951}}}}}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"r":{"df":2,"docs":{"335":{"tf":1.0},"345":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"354":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}},"/":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":62,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"126":{"tf":1.0},"130":{"tf":1.0},"132":{"tf":1.4142135623730951},"135":{"tf":1.0},"15":{"tf":1.0},"165":{"tf":1.4142135623730951},"166":{"tf":1.0},"167":{"tf":1.0},"175":{"tf":1.0},"178":{"tf":1.4142135623730951},"181":{"tf":1.0},"231":{"tf":1.0},"255":{"tf":1.4142135623730951},"260":{"tf":2.0},"263":{"tf":1.0},"27":{"tf":1.0},"275":{"tf":1.0},"278":{"tf":1.0},"293":{"tf":1.0},"318":{"tf":1.0},"353":{"tf":2.0},"354":{"tf":1.7320508075688772},"358":{"tf":1.0},"360":{"tf":1.0},"362":{"tf":1.0},"487":{"tf":1.0},"50":{"tf":1.4142135623730951},"66":{"tf":1.7320508075688772},"69":{"tf":1.7320508075688772},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.4142135623730951},"93":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"190":{"tf":1.0},"285":{"tf":1.0},"295":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"308":{"tf":1.0},"90":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"(":{"&":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"[":{"0":{"df":1,"docs":{"273":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"t":{"df":14,"docs":{"109":{"tf":1.0},"135":{"tf":1.4142135623730951},"289":{"tf":1.0},"350":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.0},"359":{"tf":1.4142135623730951},"361":{"tf":1.0},"365":{"tf":1.4142135623730951},"367":{"tf":1.0},"368":{"tf":1.0},"371":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":1,"docs":{"511":{"tf":1.0}}}},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"149":{"tf":1.4142135623730951},"157":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"153":{"tf":1.0},"278":{"tf":1.0},"463":{"tf":1.0}}}},"df":1,"docs":{"159":{"tf":1.0}}}}}},"p":{"df":2,"docs":{"170":{"tf":1.0},"220":{"tf":1.0}},"u":{"df":1,"docs":{"98":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{":":{":":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{":":{":":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"{":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"{":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"324":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"(":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"2":{"df":1,"docs":{"493":{"tf":1.0}}},"df":0,"docs":{}}},"df":3,"docs":{"165":{"tf":1.4142135623730951},"379":{"tf":1.0},"72":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"k":{"b":{"df":2,"docs":{"164":{"tf":1.0},"324":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":37,"docs":{"143":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.0},"192":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.7320508075688772},"198":{"tf":1.4142135623730951},"199":{"tf":1.4142135623730951},"202":{"tf":1.0},"203":{"tf":1.4142135623730951},"204":{"tf":1.0},"208":{"tf":1.0},"213":{"tf":1.4142135623730951},"226":{"tf":1.0},"234":{"tf":1.4142135623730951},"238":{"tf":1.7320508075688772},"241":{"tf":1.4142135623730951},"244":{"tf":1.0},"250":{"tf":1.7320508075688772},"257":{"tf":1.4142135623730951},"258":{"tf":1.7320508075688772},"261":{"tf":1.4142135623730951},"31":{"tf":1.0},"32":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":2.0},"345":{"tf":1.4142135623730951},"407":{"tf":1.0},"46":{"tf":1.0},"460":{"tf":1.4142135623730951},"461":{"tf":2.23606797749979},"462":{"tf":1.0},"465":{"tf":1.4142135623730951},"471":{"tf":1.0},"492":{"tf":1.7320508075688772},"494":{"tf":1.0},"495":{"tf":1.4142135623730951}},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"354":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"298":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":3,"docs":{"346":{"tf":1.0},"361":{"tf":1.0},"391":{"tf":1.0}}},"df":0,"docs":{}}}},"i":{"c":{"df":2,"docs":{"231":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":5,"docs":{"171":{"tf":1.0},"242":{"tf":1.4142135623730951},"251":{"tf":1.0},"274":{"tf":1.4142135623730951},"466":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"j":{"df":1,"docs":{"40":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"+":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"+":{"df":0,"docs":{},"v":{"df":1,"docs":{"39":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"383":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"l":{"df":3,"docs":{"161":{"tf":1.0},"162":{"tf":1.0},"190":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":12,"docs":{"114":{"tf":1.0},"144":{"tf":1.0},"234":{"tf":1.0},"243":{"tf":1.0},"314":{"tf":1.0},"387":{"tf":1.4142135623730951},"396":{"tf":1.0},"460":{"tf":1.4142135623730951},"461":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"98":{"tf":1.0}}}}}},"v":{"df":6,"docs":{"231":{"tf":1.0},"334":{"tf":1.0},"338":{"tf":1.0},"343":{"tf":1.0},"460":{"tf":1.0},"73":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}}}}},"df":36,"docs":{"108":{"tf":1.0},"109":{"tf":1.0},"124":{"tf":1.0},"140":{"tf":1.4142135623730951},"169":{"tf":1.0},"192":{"tf":1.0},"212":{"tf":1.4142135623730951},"22":{"tf":1.0},"220":{"tf":1.0},"231":{"tf":1.0},"244":{"tf":1.0},"280":{"tf":1.0},"285":{"tf":1.0},"290":{"tf":1.4142135623730951},"314":{"tf":1.0},"319":{"tf":1.0},"321":{"tf":1.4142135623730951},"324":{"tf":1.7320508075688772},"326":{"tf":1.0},"330":{"tf":1.0},"396":{"tf":1.0},"398":{"tf":1.4142135623730951},"40":{"tf":1.0},"402":{"tf":1.0},"404":{"tf":1.4142135623730951},"440":{"tf":1.7320508075688772},"461":{"tf":1.0},"479":{"tf":1.0},"492":{"tf":1.0},"496":{"tf":1.4142135623730951},"500":{"tf":1.7320508075688772},"52":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":2,"docs":{"140":{"tf":1.0},"91":{"tf":1.0}}}}}}}}}},"d":{")":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"203":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":11,"docs":{"196":{"tf":1.0},"203":{"tf":1.4142135623730951},"210":{"tf":1.4142135623730951},"227":{"tf":1.7320508075688772},"238":{"tf":1.0},"251":{"tf":1.0},"270":{"tf":1.0},"55":{"tf":1.0},"59":{"tf":1.0},"76":{"tf":1.4142135623730951},"86":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":3,"docs":{"238":{"tf":1.4142135623730951},"247":{"tf":2.0},"262":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":23,"docs":{"111":{"tf":1.0},"151":{"tf":1.0},"178":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.4142135623730951},"236":{"tf":1.0},"262":{"tf":1.0},"289":{"tf":1.0},"322":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":2.0},"369":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"410":{"tf":1.0},"456":{"tf":1.0},"465":{"tf":1.0},"500":{"tf":1.0},"517":{"tf":1.0},"73":{"tf":1.4142135623730951},"75":{"tf":1.7320508075688772}},"e":{"(":{"#":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"237":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":17,"docs":{"135":{"tf":1.0},"155":{"tf":1.0},"247":{"tf":1.0},"278":{"tf":1.0},"321":{"tf":1.7320508075688772},"324":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"391":{"tf":1.0},"398":{"tf":1.4142135623730951},"404":{"tf":1.0},"405":{"tf":1.4142135623730951},"446":{"tf":1.0},"502":{"tf":1.0},"515":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":8,"docs":{"331":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"393":{"tf":1.0},"413":{"tf":1.4142135623730951},"76":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"<":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"c":{"df":3,"docs":{"261":{"tf":1.7320508075688772},"321":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"y":{"df":7,"docs":{"113":{"tf":1.0},"114":{"tf":1.0},"231":{"tf":1.0},"238":{"tf":1.7320508075688772},"463":{"tf":1.4142135623730951},"465":{"tf":1.4142135623730951},"76":{"tf":1.0}}}},"b":{"df":5,"docs":{"179":{"tf":1.0},"368":{"tf":1.0},"463":{"tf":1.0},"55":{"tf":1.0},"63":{"tf":1.0}}},"df":0,"docs":{},"e":{"b":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"115":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"369":{"tf":1.0},"379":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"m":{"df":1,"docs":{"289":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"g":{"df":7,"docs":{"117":{"tf":1.0},"191":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.0},"247":{"tf":1.0},"277":{"tf":1.0},"289":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"331":{"tf":1.0},"349":{"tf":1.0},"364":{"tf":1.0},"460":{"tf":1.0},"98":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":78,"docs":{"101":{"tf":1.0},"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"108":{"tf":1.0},"110":{"tf":1.4142135623730951},"111":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.4142135623730951},"116":{"tf":1.7320508075688772},"122":{"tf":1.0},"123":{"tf":1.4142135623730951},"124":{"tf":1.0},"125":{"tf":1.0},"127":{"tf":1.0},"136":{"tf":1.0},"141":{"tf":1.4142135623730951},"151":{"tf":1.0},"157":{"tf":1.0},"169":{"tf":1.0},"17":{"tf":1.0},"196":{"tf":1.4142135623730951},"198":{"tf":2.23606797749979},"199":{"tf":1.0},"200":{"tf":1.0},"208":{"tf":1.7320508075688772},"217":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.7320508075688772},"232":{"tf":1.4142135623730951},"233":{"tf":1.0},"234":{"tf":2.6457513110645907},"238":{"tf":1.0},"240":{"tf":1.0},"241":{"tf":2.23606797749979},"246":{"tf":1.0},"247":{"tf":1.4142135623730951},"249":{"tf":1.0},"250":{"tf":4.123105625617661},"251":{"tf":1.4142135623730951},"257":{"tf":1.0},"270":{"tf":1.0},"282":{"tf":1.0},"335":{"tf":1.4142135623730951},"348":{"tf":1.0},"354":{"tf":1.4142135623730951},"363":{"tf":1.0},"369":{"tf":1.7320508075688772},"393":{"tf":1.0},"397":{"tf":1.4142135623730951},"413":{"tf":1.0},"456":{"tf":2.0},"458":{"tf":1.4142135623730951},"460":{"tf":2.0},"461":{"tf":1.4142135623730951},"463":{"tf":1.4142135623730951},"465":{"tf":1.4142135623730951},"466":{"tf":1.4142135623730951},"467":{"tf":2.0},"48":{"tf":1.0},"480":{"tf":1.7320508075688772},"492":{"tf":1.0},"494":{"tf":3.1622776601683795},"498":{"tf":1.7320508075688772},"505":{"tf":1.0},"511":{"tf":1.0},"520":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":2.6457513110645907},"77":{"tf":1.0},"83":{"tf":1.4142135623730951},"84":{"tf":1.0},"86":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":2,"docs":{"140":{"tf":1.0},"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"498":{"tf":1.0}}}},"df":0,"docs":{}},"v":{"1":{"df":1,"docs":{"56":{"tf":1.0}}},"2":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"346":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"100":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"274":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"282":{"tf":1.0}}}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"351":{"tf":1.0},"354":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":36,"docs":{"136":{"tf":1.4142135623730951},"140":{"tf":1.7320508075688772},"154":{"tf":1.0},"167":{"tf":1.0},"170":{"tf":1.0},"178":{"tf":1.0},"179":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.7320508075688772},"288":{"tf":1.7320508075688772},"291":{"tf":1.4142135623730951},"301":{"tf":1.0},"303":{"tf":1.4142135623730951},"308":{"tf":1.0},"324":{"tf":1.0},"327":{"tf":2.449489742783178},"334":{"tf":1.0},"337":{"tf":1.4142135623730951},"354":{"tf":1.4142135623730951},"357":{"tf":1.0},"380":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"413":{"tf":1.0},"492":{"tf":2.0},"493":{"tf":2.0},"494":{"tf":1.7320508075688772},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.4142135623730951},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0},"511":{"tf":1.7320508075688772},"512":{"tf":1.0}},"s":{".":{"b":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"290":{"tf":1.0},"302":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"301":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":12,"docs":{"109":{"tf":1.0},"134":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.0},"323":{"tf":2.8284271247461903},"335":{"tf":1.0},"345":{"tf":1.0},"360":{"tf":1.0},"401":{"tf":2.23606797749979},"51":{"tf":1.0},"74":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"285":{"tf":1.0},"334":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}}},"g":{"df":0,"docs":{},"r":{"a":{"d":{"df":1,"docs":{"142":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"289":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"262":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"279":{"tf":1.0},"303":{"tf":1.0},"322":{"tf":1.0},"400":{"tf":1.0},"406":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"i":{"df":2,"docs":{"139":{"tf":1.0},"477":{"tf":1.4142135623730951}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":15,"docs":{"144":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"234":{"tf":1.0},"338":{"tf":1.0},"350":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"358":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.4142135623730951},"73":{"tf":1.0},"79":{"tf":1.0}},"s":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":5,"docs":{"111":{"tf":1.0},"199":{"tf":1.0},"495":{"tf":1.4142135623730951},"56":{"tf":1.0},"80":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":8,"docs":{"18":{"tf":1.0},"290":{"tf":1.0},"337":{"tf":1.0},"350":{"tf":1.0},"356":{"tf":1.0},"361":{"tf":1.0},"494":{"tf":1.0},"96":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"156":{"tf":1.0},"494":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"512":{"tf":2.0}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"257":{"tf":1.0}},"e":{"(":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"293":{"tf":1.0},"324":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"237":{"tf":1.0},"277":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"s":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"i":{"b":{"df":3,"docs":{"107":{"tf":1.0},"136":{"tf":1.0},"337":{"tf":1.0}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":17,"docs":{"167":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.0},"241":{"tf":1.0},"326":{"tf":2.0},"492":{"tf":2.449489742783178},"493":{"tf":2.23606797749979},"494":{"tf":2.0},"495":{"tf":2.0},"496":{"tf":1.7320508075688772},"498":{"tf":1.7320508075688772},"500":{"tf":2.23606797749979},"501":{"tf":1.0},"502":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.4142135623730951},"514":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"267":{"tf":1.0},"293":{"tf":1.4142135623730951},"296":{"tf":1.4142135623730951},"301":{"tf":1.0},"324":{"tf":1.7320508075688772},"335":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":91,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"126":{"tf":1.4142135623730951},"130":{"tf":1.0},"131":{"tf":2.0},"132":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"148":{"tf":1.0},"149":{"tf":1.0},"15":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"154":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"157":{"tf":1.0},"158":{"tf":1.0},"248":{"tf":1.4142135623730951},"249":{"tf":1.0},"250":{"tf":1.4142135623730951},"284":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.0},"298":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":1.0},"305":{"tf":1.0},"306":{"tf":1.0},"307":{"tf":1.0},"308":{"tf":1.0},"309":{"tf":1.0},"310":{"tf":1.0},"311":{"tf":1.0},"313":{"tf":1.7320508075688772},"314":{"tf":1.0},"315":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"320":{"tf":1.7320508075688772},"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0},"325":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"329":{"tf":1.0},"330":{"tf":1.4142135623730951},"343":{"tf":1.0},"344":{"tf":1.0},"384":{"tf":1.0},"395":{"tf":1.0},"412":{"tf":1.0},"466":{"tf":1.0},"47":{"tf":1.0},"502":{"tf":1.4142135623730951},"68":{"tf":1.0}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":15,"docs":{"104":{"tf":1.0},"17":{"tf":1.0},"201":{"tf":1.4142135623730951},"225":{"tf":1.0},"241":{"tf":1.0},"256":{"tf":1.4142135623730951},"257":{"tf":1.0},"282":{"tf":1.0},"30":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.0},"46":{"tf":1.0},"515":{"tf":1.0},"72":{"tf":1.0},"98":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":7,"docs":{"139":{"tf":1.0},"238":{"tf":1.0},"264":{"tf":1.0},"324":{"tf":1.0},"337":{"tf":1.0},"379":{"tf":1.0},"381":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"289":{"tf":1.0}}}}}}}},"v":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"304":{"tf":1.0}}}}}},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"289":{"tf":1.0}}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"337":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"19":{"tf":1.0},"285":{"tf":1.0}}}}}}},"df":1,"docs":{"133":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":2,"docs":{"307":{"tf":1.4142135623730951},"353":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":47,"docs":{"104":{"tf":1.4142135623730951},"109":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"117":{"tf":1.0},"120":{"tf":1.4142135623730951},"124":{"tf":1.4142135623730951},"125":{"tf":2.23606797749979},"133":{"tf":1.0},"135":{"tf":1.0},"139":{"tf":1.0},"157":{"tf":1.0},"18":{"tf":1.0},"203":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.7320508075688772},"236":{"tf":1.0},"238":{"tf":1.7320508075688772},"244":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.4142135623730951},"251":{"tf":1.0},"26":{"tf":1.0},"282":{"tf":1.0},"289":{"tf":1.4142135623730951},"299":{"tf":1.0},"334":{"tf":1.0},"338":{"tf":1.0},"350":{"tf":1.4142135623730951},"354":{"tf":1.0},"356":{"tf":1.4142135623730951},"359":{"tf":1.0},"36":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"371":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"391":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"480":{"tf":1.0},"524":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"76":{"tf":1.0}}}}}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"343":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"346":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":5,"docs":{"12":{"tf":1.4142135623730951},"17":{"tf":1.0},"27":{"tf":2.0},"36":{"tf":1.0},"40":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"136":{"tf":1.0}}}},"df":0,"docs":{}},"df":3,"docs":{"107":{"tf":1.0},"136":{"tf":1.0},"93":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":12,"docs":{"106":{"tf":1.4142135623730951},"110":{"tf":1.4142135623730951},"117":{"tf":1.0},"133":{"tf":1.0},"140":{"tf":1.0},"285":{"tf":1.0},"299":{"tf":1.0},"302":{"tf":1.0},"307":{"tf":1.4142135623730951},"346":{"tf":1.0},"372":{"tf":1.0},"43":{"tf":1.0}}}},"i":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"366":{"tf":1.0},"384":{"tf":1.0}},"i":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":9,"docs":{"288":{"tf":1.0},"289":{"tf":1.0},"292":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":2.23606797749979},"357":{"tf":2.23606797749979},"359":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"90":{"tf":1.0}},"s":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"263":{"tf":1.0},"354":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"r":{"df":2,"docs":{"140":{"tf":1.0},"222":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"214":{"tf":1.0},"512":{"tf":1.0},"70":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":6,"docs":{"143":{"tf":1.0},"202":{"tf":1.4142135623730951},"203":{"tf":1.0},"339":{"tf":1.0},"4":{"tf":1.7320508075688772},"489":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":18,"docs":{"0":{"tf":1.0},"107":{"tf":1.0},"140":{"tf":1.0},"169":{"tf":1.0},"196":{"tf":1.4142135623730951},"222":{"tf":1.7320508075688772},"257":{"tf":1.0},"269":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"338":{"tf":1.0},"375":{"tf":1.0},"450":{"tf":1.0},"476":{"tf":1.4142135623730951},"498":{"tf":1.0},"5":{"tf":1.0},"57":{"tf":1.0},"86":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"138":{"tf":1.0},"289":{"tf":1.0},"372":{"tf":1.0},"413":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":8,"docs":{"104":{"tf":1.0},"113":{"tf":1.0},"125":{"tf":1.0},"238":{"tf":1.0},"251":{"tf":1.0},"303":{"tf":1.4142135623730951},"333":{"tf":1.0},"36":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"142":{"tf":1.4142135623730951},"143":{"tf":1.0},"157":{"tf":1.0},"285":{"tf":1.0},"383":{"tf":1.0}},"i":{"df":9,"docs":{"101":{"tf":1.0},"104":{"tf":1.0},"137":{"tf":1.0},"142":{"tf":1.0},"303":{"tf":1.4142135623730951},"517":{"tf":1.4142135623730951},"518":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":12,"docs":{"104":{"tf":1.4142135623730951},"115":{"tf":1.0},"116":{"tf":1.0},"226":{"tf":1.0},"233":{"tf":1.0},"238":{"tf":1.7320508075688772},"249":{"tf":1.4142135623730951},"250":{"tf":1.4142135623730951},"251":{"tf":1.0},"76":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}}}},"df":0,"docs":{},"k":{"df":1,"docs":{"289":{"tf":1.0}}},"p":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"203":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"257":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"90":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"281":{"tf":1.0},"502":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"282":{"tf":1.0}}}}},"o":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"238":{"tf":1.0}}}}}}},"c":{"df":14,"docs":{"104":{"tf":1.0},"124":{"tf":1.0},"129":{"tf":1.0},"141":{"tf":2.23606797749979},"215":{"tf":1.0},"231":{"tf":1.0},"287":{"tf":1.4142135623730951},"300":{"tf":1.0},"308":{"tf":1.4142135623730951},"327":{"tf":2.23606797749979},"334":{"tf":1.0},"337":{"tf":1.0},"356":{"tf":1.0},"43":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"234":{"tf":1.0},"357":{"tf":1.0},"372":{"tf":1.0}}}}},"s":{"/":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"/":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{".":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"3":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":1,"docs":{"3":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"345":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":1,"docs":{"338":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"237":{"tf":1.0}}}}}}}},":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":6,"docs":{"3":{"tf":1.0},"31":{"tf":1.0},"36":{"tf":1.0},"44":{"tf":1.0},"46":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":4,"docs":{"35":{"tf":1.0},"36":{"tf":1.0},"44":{"tf":1.0},"7":{"tf":1.0}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":3,"docs":{"2":{"tf":1.0},"28":{"tf":1.0},"6":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"34":{"tf":1.0},"36":{"tf":1.0},"46":{"tf":1.0},"7":{"tf":1.0}}}}}},"w":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"38":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"199":{"tf":1.0},"495":{"tf":1.0},"84":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"*":{"*":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"501":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":84,"docs":{"0":{"tf":2.0},"1":{"tf":1.7320508075688772},"10":{"tf":1.0},"101":{"tf":1.0},"108":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.4142135623730951},"124":{"tf":1.0},"125":{"tf":1.0},"127":{"tf":1.4142135623730951},"128":{"tf":1.0},"130":{"tf":1.0},"134":{"tf":1.0},"14":{"tf":1.7320508075688772},"141":{"tf":1.7320508075688772},"154":{"tf":1.0},"198":{"tf":1.0},"2":{"tf":1.0},"202":{"tf":2.0},"208":{"tf":1.4142135623730951},"22":{"tf":1.0},"225":{"tf":1.0},"231":{"tf":1.0},"233":{"tf":1.0},"234":{"tf":1.4142135623730951},"240":{"tf":1.0},"241":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0},"26":{"tf":1.0},"267":{"tf":1.0},"27":{"tf":1.4142135623730951},"276":{"tf":1.0},"28":{"tf":1.7320508075688772},"285":{"tf":1.4142135623730951},"287":{"tf":1.0},"29":{"tf":1.4142135623730951},"30":{"tf":1.0},"300":{"tf":2.0},"308":{"tf":1.4142135623730951},"314":{"tf":1.0},"33":{"tf":1.4142135623730951},"332":{"tf":1.4142135623730951},"333":{"tf":1.4142135623730951},"334":{"tf":1.7320508075688772},"337":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"34":{"tf":1.0},"345":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.4142135623730951},"36":{"tf":1.7320508075688772},"360":{"tf":1.0},"362":{"tf":1.4142135623730951},"392":{"tf":1.0},"396":{"tf":1.0},"4":{"tf":1.0},"409":{"tf":1.0},"412":{"tf":1.0},"438":{"tf":1.7320508075688772},"456":{"tf":1.0},"46":{"tf":2.0},"462":{"tf":1.7320508075688772},"472":{"tf":1.0},"480":{"tf":1.0},"5":{"tf":1.7320508075688772},"501":{"tf":1.0},"520":{"tf":1.4142135623730951},"56":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0},"7":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"89":{"tf":1.0},"9":{"tf":1.4142135623730951},"91":{"tf":1.0}}}}}},"s":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"124":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":7,"docs":{"321":{"tf":1.0},"324":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0},"500":{"tf":1.4142135623730951},"96":{"tf":1.0},"98":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"n":{"\'":{"df":0,"docs":{},"t":{"df":2,"docs":{"142":{"tf":1.0},"356":{"tf":1.0}}}},"df":0,"docs":{}}}},"n":{"\'":{"df":0,"docs":{},"t":{"df":12,"docs":{"101":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"148":{"tf":1.0},"149":{"tf":1.0},"150":{"tf":1.0},"156":{"tf":1.0},"307":{"tf":1.4142135623730951},"36":{"tf":1.0},"372":{"tf":1.0},"391":{"tf":1.0},"469":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"df":13,"docs":{"127":{"tf":1.0},"314":{"tf":1.0},"317":{"tf":1.0},"321":{"tf":1.4142135623730951},"324":{"tf":2.0},"326":{"tf":1.0},"327":{"tf":1.0},"398":{"tf":1.0},"462":{"tf":1.0},"466":{"tf":1.0},"500":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":6,"docs":{"134":{"tf":1.0},"267":{"tf":1.0},"285":{"tf":1.0},"294":{"tf":1.4142135623730951},"335":{"tf":1.0},"339":{"tf":1.0}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":4,"docs":{"181":{"tf":1.0},"351":{"tf":1.0},"357":{"tf":2.0},"360":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"a":{"df":0,"docs":{},"w":{"df":1,"docs":{"151":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":4,"docs":{"155":{"tf":1.0},"173":{"tf":1.4142135623730951},"257":{"tf":1.0},"259":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":3,"docs":{"126":{"tf":1.0},"293":{"tf":1.0},"302":{"tf":1.0}},"n":{"df":37,"docs":{"109":{"tf":1.4142135623730951},"133":{"tf":1.7320508075688772},"157":{"tf":1.0},"17":{"tf":1.0},"284":{"tf":2.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.7320508075688772},"298":{"tf":1.7320508075688772},"299":{"tf":1.0},"300":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":1.0},"305":{"tf":1.0},"306":{"tf":1.0},"307":{"tf":1.0},"308":{"tf":1.0},"309":{"tf":1.0},"310":{"tf":1.0},"311":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"51":{"tf":1.4142135623730951},"64":{"tf":1.0},"89":{"tf":1.4142135623730951}}}}}},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"98":{"tf":1.0}}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"321":{"tf":1.0},"405":{"tf":1.0}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"243":{"tf":1.0},"341":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":10,"docs":{"101":{"tf":1.0},"116":{"tf":1.0},"127":{"tf":1.4142135623730951},"130":{"tf":1.0},"134":{"tf":1.7320508075688772},"234":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0},"333":{"tf":1.0},"61":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"203":{"tf":1.0},"238":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":8,"docs":{"295":{"tf":1.0},"324":{"tf":1.0},"326":{"tf":1.0},"333":{"tf":1.0},"496":{"tf":1.4142135623730951},"500":{"tf":1.0},"87":{"tf":1.0},"90":{"tf":1.0}}}},"a":{"c":{"df":0,"docs":{},"h":{"df":12,"docs":{"121":{"tf":1.0},"236":{"tf":1.0},"238":{"tf":1.4142135623730951},"243":{"tf":1.0},"244":{"tf":1.0},"250":{"tf":1.0},"314":{"tf":1.0},"357":{"tf":1.0},"409":{"tf":1.0},"502":{"tf":1.0},"95":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":7,"docs":{"134":{"tf":1.0},"139":{"tf":1.0},"157":{"tf":1.0},"279":{"tf":1.0},"309":{"tf":1.4142135623730951},"332":{"tf":1.0},"334":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":6,"docs":{"140":{"tf":1.0},"157":{"tf":1.0},"238":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.0},"372":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"238":{"tf":1.0},"250":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"251":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":6,"docs":{"174":{"tf":1.4142135623730951},"191":{"tf":1.0},"215":{"tf":1.0},"304":{"tf":1.7320508075688772},"475":{"tf":1.0},"477":{"tf":1.0}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":4,"docs":{"333":{"tf":1.0},"334":{"tf":1.0},"338":{"tf":1.0},"343":{"tf":1.0}}}}}}}}}},"d":{"df":0,"docs":{},"g":{"df":4,"docs":{"15":{"tf":1.0},"261":{"tf":1.7320508075688772},"56":{"tf":1.0},"70":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"261":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"t":{"df":14,"docs":{"143":{"tf":1.4142135623730951},"170":{"tf":1.0},"178":{"tf":1.0},"202":{"tf":1.7320508075688772},"204":{"tf":1.0},"212":{"tf":1.0},"220":{"tf":1.0},"29":{"tf":1.4142135623730951},"30":{"tf":1.0},"300":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"40":{"tf":1.0},"63":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"\'":{"df":1,"docs":{"4":{"tf":1.0}}},"df":11,"docs":{"143":{"tf":1.0},"170":{"tf":1.0},"202":{"tf":1.7320508075688772},"203":{"tf":1.0},"220":{"tf":1.0},"338":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"39":{"tf":1.7320508075688772}}}}}}},"df":1,"docs":{"139":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":8,"docs":{"197":{"tf":1.0},"244":{"tf":1.0},"350":{"tf":1.0},"365":{"tf":1.0},"368":{"tf":1.0},"371":{"tf":1.0},"57":{"tf":1.0},"88":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"i":{"df":3,"docs":{"122":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0}}}},"df":0,"docs":{}}}},"m":{"b":{"df":1,"docs":{"354":{"tf":1.0}},"e":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"263":{"tf":1.0},"354":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"354":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"c":{"!":{"[":{"\\"":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":1,"docs":{"352":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}},"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"146":{"tf":1.0}}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":5,"docs":{"133":{"tf":1.0},"266":{"tf":1.0},"293":{"tf":1.0},"334":{"tf":1.4142135623730951},"354":{"tf":1.0}}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":8,"docs":{"133":{"tf":1.7320508075688772},"134":{"tf":1.0},"138":{"tf":1.4142135623730951},"263":{"tf":1.0},"293":{"tf":1.0},"354":{"tf":2.23606797749979},"356":{"tf":1.0},"360":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{":":{":":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"u":{"d":{"df":2,"docs":{"293":{"tf":1.0},"354":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"293":{"tf":1.0},"354":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"m":{"a":{"df":2,"docs":{"293":{"tf":1.0},"354":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"i":{"df":2,"docs":{"293":{"tf":1.0},"354":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}},"s":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"354":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"(":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{"!":{"[":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"]":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"273":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":47,"docs":{"109":{"tf":2.23606797749979},"133":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.4142135623730951},"138":{"tf":1.7320508075688772},"140":{"tf":1.4142135623730951},"149":{"tf":1.0},"167":{"tf":1.0},"180":{"tf":1.4142135623730951},"182":{"tf":1.4142135623730951},"200":{"tf":1.0},"21":{"tf":1.7320508075688772},"212":{"tf":1.0},"25":{"tf":1.0},"255":{"tf":1.0},"259":{"tf":1.0},"263":{"tf":1.4142135623730951},"266":{"tf":1.0},"27":{"tf":1.0},"279":{"tf":1.4142135623730951},"281":{"tf":1.7320508075688772},"285":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":2.23606797749979},"290":{"tf":1.0},"291":{"tf":1.4142135623730951},"292":{"tf":1.0},"293":{"tf":1.4142135623730951},"299":{"tf":1.4142135623730951},"302":{"tf":1.0},"303":{"tf":1.4142135623730951},"332":{"tf":1.0},"333":{"tf":1.4142135623730951},"334":{"tf":1.4142135623730951},"337":{"tf":1.0},"349":{"tf":1.7320508075688772},"350":{"tf":2.0},"351":{"tf":1.7320508075688772},"352":{"tf":2.0},"354":{"tf":2.23606797749979},"356":{"tf":1.7320508075688772},"361":{"tf":1.7320508075688772},"362":{"tf":1.4142135623730951},"430":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951},"89":{"tf":1.0},"90":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"r":{"a":{"c":{"df":1,"docs":{"144":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"151":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"324":{"tf":1.0},"478":{"tf":1.4142135623730951}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":26,"docs":{"143":{"tf":1.4142135623730951},"167":{"tf":1.7320508075688772},"178":{"tf":1.0},"182":{"tf":1.0},"212":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.4142135623730951},"289":{"tf":1.7320508075688772},"291":{"tf":1.4142135623730951},"292":{"tf":1.4142135623730951},"299":{"tf":1.0},"302":{"tf":1.0},"327":{"tf":1.4142135623730951},"330":{"tf":1.0},"333":{"tf":1.4142135623730951},"334":{"tf":1.4142135623730951},"337":{"tf":1.0},"350":{"tf":1.0},"354":{"tf":1.7320508075688772},"369":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"413":{"tf":1.0},"492":{"tf":1.0},"70":{"tf":1.0},"97":{"tf":1.7320508075688772}},"e":{"_":{"df":0,"docs":{},"m":{"c":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"97":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"117":{"tf":1.0},"118":{"tf":1.0},"238":{"tf":1.0}}}}}}},"d":{"]":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"238":{"tf":1.4142135623730951},"324":{"tf":1.0},"76":{"tf":1.0}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"91":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"234":{"tf":1.0},"250":{"tf":1.0},"306":{"tf":1.0}}}}}}}},"df":5,"docs":{"133":{"tf":1.0},"146":{"tf":1.0},"288":{"tf":1.0},"351":{"tf":1.0},"354":{"tf":1.7320508075688772}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"c":{"df":3,"docs":{"334":{"tf":1.4142135623730951},"377":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"255":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"275":{"tf":1.0},"276":{"tf":1.0},"360":{"tf":1.0},"377":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"12":{"tf":1.0},"135":{"tf":1.0},"143":{"tf":1.7320508075688772},"413":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"104":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"350":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"285":{"tf":1.0},"288":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"197":{"tf":1.0},"28":{"tf":1.0}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":8,"docs":{"118":{"tf":1.0},"196":{"tf":1.0},"203":{"tf":1.4142135623730951},"210":{"tf":1.0},"238":{"tf":2.23606797749979},"247":{"tf":1.0},"59":{"tf":1.0},"76":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":16,"docs":{"237":{"tf":1.0},"267":{"tf":1.0},"277":{"tf":1.0},"287":{"tf":1.0},"295":{"tf":1.4142135623730951},"321":{"tf":1.0},"324":{"tf":1.0},"326":{"tf":1.0},"333":{"tf":1.4142135623730951},"334":{"tf":1.4142135623730951},"337":{"tf":1.4142135623730951},"492":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"498":{"tf":1.4142135623730951},"500":{"tf":1.0}}}},"v":{"df":5,"docs":{"185":{"tf":1.0},"307":{"tf":1.4142135623730951},"337":{"tf":1.0},"449":{"tf":1.0},"490":{"tf":1.0}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":17,"docs":{"168":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"182":{"tf":1.0},"19":{"tf":1.0},"285":{"tf":1.0},"289":{"tf":1.0},"299":{"tf":1.4142135623730951},"303":{"tf":1.0},"304":{"tf":1.0},"307":{"tf":2.0},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.4142135623730951},"346":{"tf":1.0},"418":{"tf":1.7320508075688772},"477":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"289":{"tf":1.0},"300":{"tf":1.0}}}}}}}},"q":{"df":1,"docs":{"324":{"tf":1.0}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"341":{"tf":1.0}}}}}}},"r":{"(":{"\\"":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"\\"":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"148":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"k":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"i":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"148":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"(":{"\\"":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}}}}}},"d":{"a":{"df":0,"docs":{},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"237":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"277":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"277":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"277":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"277":{"tf":1.0}}}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"237":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":58,"docs":{"108":{"tf":2.23606797749979},"129":{"tf":1.0},"134":{"tf":1.7320508075688772},"139":{"tf":2.0},"142":{"tf":1.4142135623730951},"148":{"tf":1.4142135623730951},"153":{"tf":1.0},"155":{"tf":1.0},"157":{"tf":1.0},"189":{"tf":1.4142135623730951},"200":{"tf":1.0},"207":{"tf":1.0},"209":{"tf":1.4142135623730951},"213":{"tf":1.4142135623730951},"218":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.7320508075688772},"236":{"tf":1.0},"237":{"tf":2.8284271247461903},"238":{"tf":1.4142135623730951},"243":{"tf":1.0},"244":{"tf":2.6457513110645907},"259":{"tf":1.0},"267":{"tf":1.0},"270":{"tf":1.0},"277":{"tf":2.6457513110645907},"295":{"tf":1.4142135623730951},"296":{"tf":1.4142135623730951},"332":{"tf":1.4142135623730951},"333":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":2.23606797749979},"342":{"tf":1.0},"346":{"tf":1.4142135623730951},"357":{"tf":1.0},"452":{"tf":1.0},"454":{"tf":1.4142135623730951},"457":{"tf":1.4142135623730951},"461":{"tf":3.0},"463":{"tf":1.4142135623730951},"470":{"tf":1.0},"471":{"tf":1.0},"492":{"tf":2.449489742783178},"493":{"tf":1.0},"495":{"tf":1.4142135623730951},"496":{"tf":2.6457513110645907},"512":{"tf":1.0},"513":{"tf":1.4142135623730951},"514":{"tf":2.449489742783178},"515":{"tf":1.7320508075688772},"517":{"tf":1.0},"52":{"tf":2.0},"55":{"tf":1.0},"74":{"tf":2.0},"80":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951},"90":{"tf":2.0}},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"470":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"m":{"d":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"2":{"df":1,"docs":{"496":{"tf":1.0}}},"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}}},"df":3,"docs":{"244":{"tf":1.0},"270":{"tf":1.0},"496":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"s":{"c":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"140":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"365":{"tf":1.0},"453":{"tf":1.4142135623730951}}}}}}}},"t":{"c":{"df":7,"docs":{"324":{"tf":1.4142135623730951},"330":{"tf":1.0},"352":{"tf":1.4142135623730951},"398":{"tf":1.0},"473":{"tf":1.0},"66":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":3,"docs":{"332":{"tf":1.0},"350":{"tf":1.0},"501":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"108":{"tf":1.0},"238":{"tf":1.0}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"121":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":4,"docs":{"109":{"tf":1.0},"140":{"tf":1.4142135623730951},"366":{"tf":1.0},"89":{"tf":1.0}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"404":{"tf":1.0}}}}}}}}},"i":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"241":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":6,"docs":{"156":{"tf":1.7320508075688772},"250":{"tf":1.0},"301":{"tf":1.4142135623730951},"70":{"tf":1.0},"83":{"tf":1.0},"93":{"tf":1.0}}}},"v":{"df":3,"docs":{"101":{"tf":1.0},"136":{"tf":1.0},"141":{"tf":1.0}}}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":5,"docs":{"108":{"tf":1.0},"142":{"tf":1.7320508075688772},"247":{"tf":1.0},"469":{"tf":1.0},"90":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":68,"docs":{"108":{"tf":1.0},"109":{"tf":1.0},"111":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"16":{"tf":1.0},"167":{"tf":1.0},"21":{"tf":1.0},"238":{"tf":1.0},"247":{"tf":1.0},"264":{"tf":1.0},"28":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"311":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.7320508075688772},"345":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"357":{"tf":1.0},"36":{"tf":1.4142135623730951},"381":{"tf":1.0},"424":{"tf":1.7320508075688772},"479":{"tf":1.0},"492":{"tf":1.4142135623730951},"493":{"tf":1.4142135623730951},"494":{"tf":1.4142135623730951},"495":{"tf":1.4142135623730951},"496":{"tf":1.4142135623730951},"497":{"tf":1.4142135623730951},"498":{"tf":1.4142135623730951},"500":{"tf":1.7320508075688772},"501":{"tf":1.4142135623730951},"502":{"tf":1.4142135623730951},"504":{"tf":1.4142135623730951},"511":{"tf":1.0},"512":{"tf":1.0},"515":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.0},"68":{"tf":1.0},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.7320508075688772},"76":{"tf":1.0},"77":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":7,"docs":{"231":{"tf":1.0},"251":{"tf":1.0},"359":{"tf":1.4142135623730951},"367":{"tf":1.4142135623730951},"368":{"tf":1.0},"371":{"tf":1.0},"90":{"tf":1.0}}},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"90":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"u":{"d":{"df":2,"docs":{"215":{"tf":1.0},"324":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":11,"docs":{"123":{"tf":1.0},"134":{"tf":1.0},"333":{"tf":1.0},"477":{"tf":1.0},"492":{"tf":1.0},"498":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0},"77":{"tf":2.23606797749979},"84":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"b":{"df":1,"docs":{"80":{"tf":1.0}}},"df":0,"docs":{}},"df":17,"docs":{"15":{"tf":1.0},"156":{"tf":1.0},"301":{"tf":1.0},"321":{"tf":1.4142135623730951},"323":{"tf":1.0},"324":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"345":{"tf":1.0},"36":{"tf":1.0},"383":{"tf":1.0},"399":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.0},"413":{"tf":1.0},"466":{"tf":1.0},"476":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"234":{"tf":1.0},"337":{"tf":1.0},"391":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"139":{"tf":1.0},"2":{"tf":1.0},"234":{"tf":1.0},"93":{"tf":1.0}}},"t":{"df":1,"docs":{"77":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"120":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"199":{"tf":1.0},"240":{"tf":1.0},"357":{"tf":1.0},"495":{"tf":1.4142135623730951},"56":{"tf":1.0},"73":{"tf":1.0},"84":{"tf":1.7320508075688772}}}}},"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"139":{"tf":1.0},"140":{"tf":1.0},"321":{"tf":1.0},"337":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"231":{"tf":1.0},"479":{"tf":1.0}}},"s":{"df":1,"docs":{"409":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"335":{"tf":1.0}}}}},"df":0,"docs":{}}},"<":{"df":0,"docs":{},"p":{"df":1,"docs":{"335":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":32,"docs":{"134":{"tf":1.4142135623730951},"147":{"tf":1.0},"170":{"tf":1.4142135623730951},"182":{"tf":1.7320508075688772},"188":{"tf":1.0},"204":{"tf":2.0},"22":{"tf":1.0},"231":{"tf":1.4142135623730951},"257":{"tf":1.4142135623730951},"258":{"tf":1.0},"259":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"276":{"tf":1.0},"292":{"tf":2.0},"295":{"tf":1.0},"299":{"tf":1.7320508075688772},"301":{"tf":1.0},"303":{"tf":1.7320508075688772},"304":{"tf":2.6457513110645907},"314":{"tf":1.0},"324":{"tf":1.0},"334":{"tf":1.7320508075688772},"335":{"tf":2.0},"337":{"tf":1.4142135623730951},"346":{"tf":1.0},"396":{"tf":1.0},"400":{"tf":1.0},"439":{"tf":1.7320508075688772},"467":{"tf":2.6457513110645907},"480":{"tf":1.4142135623730951},"498":{"tf":1.7320508075688772},"91":{"tf":1.0}}}},"s":{"df":1,"docs":{"446":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"295":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":6,"docs":{"199":{"tf":1.0},"330":{"tf":1.0},"399":{"tf":1.4142135623730951},"495":{"tf":1.7320508075688772},"56":{"tf":1.0},"82":{"tf":1.7320508075688772}}},"df":0,"docs":{},"s":{"df":6,"docs":{"30":{"tf":1.0},"325":{"tf":1.4142135623730951},"326":{"tf":1.4142135623730951},"330":{"tf":1.0},"402":{"tf":1.4142135623730951},"404":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"342":{"tf":1.0},"35":{"tf":1.0},"350":{"tf":1.0},"446":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}}}},"t":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":3,"docs":{"137":{"tf":1.0},"264":{"tf":1.0},"324":{"tf":2.6457513110645907}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"f":{"3":{"2":{"df":1,"docs":{"261":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":8,"docs":{"139":{"tf":2.449489742783178},"157":{"tf":1.0},"190":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"237":{"tf":1.4142135623730951},"333":{"tf":1.4142135623730951},"337":{"tf":1.0},"514":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"134":{"tf":1.0},"139":{"tf":1.0},"90":{"tf":1.4142135623730951}}}}}},"l":{"df":0,"docs":{},"l":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"376":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"303":{"tf":1.0}},"i":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"153":{"tf":1.0},"231":{"tf":1.0},"496":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":6,"docs":{"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":2.0},"292":{"tf":1.0},"327":{"tf":1.0},"407":{"tf":1.0}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"334":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"df":8,"docs":{"100":{"tf":1.0},"139":{"tf":1.7320508075688772},"157":{"tf":1.0},"289":{"tf":1.7320508075688772},"351":{"tf":1.0},"356":{"tf":1.0},"359":{"tf":1.0},"445":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"b":{"df":39,"docs":{"109":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"135":{"tf":1.0},"147":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"181":{"tf":2.0},"182":{"tf":1.0},"212":{"tf":1.0},"263":{"tf":1.0},"281":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"299":{"tf":1.0},"302":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.4142135623730951},"348":{"tf":1.0},"349":{"tf":1.7320508075688772},"350":{"tf":1.0},"351":{"tf":2.0},"352":{"tf":1.0},"353":{"tf":2.0},"354":{"tf":2.0},"355":{"tf":1.0},"356":{"tf":1.7320508075688772},"357":{"tf":2.0},"358":{"tf":1.4142135623730951},"359":{"tf":2.0},"360":{"tf":1.4142135623730951},"361":{"tf":1.0},"362":{"tf":1.4142135623730951},"363":{"tf":1.0},"393":{"tf":1.0},"432":{"tf":1.7320508075688772},"51":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0}},"e":{"d":{":":{":":{"df":0,"docs":{},"{":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"263":{"tf":1.0},"354":{"tf":1.7320508075688772},"360":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\\"":{"b":{"a":{"a":{"df":0,"docs":{},"i":{"/":{"b":{"df":0,"docs":{},"g":{"df":1,"docs":{"133":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"149":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"df":2,"docs":{"121":{"tf":1.0},"125":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"202":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":33,"docs":{"107":{"tf":1.7320508075688772},"135":{"tf":1.0},"136":{"tf":1.7320508075688772},"141":{"tf":1.0},"142":{"tf":1.0},"166":{"tf":2.449489742783178},"167":{"tf":2.8284271247461903},"175":{"tf":1.4142135623730951},"181":{"tf":1.4142135623730951},"241":{"tf":1.0},"252":{"tf":1.0},"257":{"tf":1.0},"259":{"tf":1.0},"264":{"tf":1.0},"28":{"tf":1.0},"301":{"tf":1.0},"306":{"tf":1.0},"327":{"tf":1.0},"329":{"tf":1.4142135623730951},"360":{"tf":1.4142135623730951},"371":{"tf":1.4142135623730951},"385":{"tf":1.0},"388":{"tf":1.0},"396":{"tf":1.4142135623730951},"404":{"tf":1.0},"406":{"tf":1.0},"413":{"tf":1.0},"46":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"93":{"tf":1.0},"96":{"tf":1.4142135623730951}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"281":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"d":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":5,"docs":{"139":{"tf":1.0},"157":{"tf":1.0},"346":{"tf":1.0},"356":{"tf":1.0},"361":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"372":{"tf":1.0},"381":{"tf":1.0}}}},"df":0,"docs":{}}},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"100":{"tf":1.0},"314":{"tf":1.0},"396":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":17,"docs":{"287":{"tf":1.4142135623730951},"295":{"tf":1.0},"296":{"tf":1.7320508075688772},"308":{"tf":1.4142135623730951},"321":{"tf":1.4142135623730951},"323":{"tf":2.449489742783178},"324":{"tf":1.4142135623730951},"327":{"tf":1.0},"328":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.4142135623730951},"399":{"tf":1.0},"401":{"tf":1.7320508075688772},"407":{"tf":1.0},"411":{"tf":1.4142135623730951},"514":{"tf":1.0},"515":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{"4":{"2":{"df":1,"docs":{"264":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},":":{"/":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{".":{"d":{"b":{"df":1,"docs":{"177":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":29,"docs":{"107":{"tf":1.0},"136":{"tf":1.0},"139":{"tf":1.0},"143":{"tf":1.4142135623730951},"144":{"tf":1.0},"202":{"tf":1.0},"224":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"270":{"tf":1.4142135623730951},"280":{"tf":1.4142135623730951},"284":{"tf":1.0},"298":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.4142135623730951},"300":{"tf":1.0},"31":{"tf":1.0},"310":{"tf":1.0},"324":{"tf":1.0},"333":{"tf":1.0},"366":{"tf":1.0},"379":{"tf":1.4142135623730951},"389":{"tf":1.0},"4":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"498":{"tf":1.0},"52":{"tf":1.0},"6":{"tf":1.0},"63":{"tf":1.0}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":44,"docs":{"100":{"tf":1.0},"135":{"tf":1.0},"140":{"tf":1.4142135623730951},"166":{"tf":1.0},"167":{"tf":1.4142135623730951},"178":{"tf":1.0},"20":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.0},"259":{"tf":1.0},"269":{"tf":1.7320508075688772},"279":{"tf":1.0},"281":{"tf":1.4142135623730951},"287":{"tf":1.4142135623730951},"288":{"tf":1.0},"289":{"tf":1.0},"291":{"tf":1.0},"295":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.4142135623730951},"323":{"tf":1.4142135623730951},"333":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.0},"366":{"tf":1.4142135623730951},"368":{"tf":1.7320508075688772},"369":{"tf":2.449489742783178},"371":{"tf":1.7320508075688772},"372":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"379":{"tf":1.4142135623730951},"380":{"tf":1.7320508075688772},"384":{"tf":1.4142135623730951},"387":{"tf":1.7320508075688772},"401":{"tf":1.0},"426":{"tf":1.7320508075688772},"49":{"tf":1.0},"51":{"tf":1.0},"63":{"tf":1.4142135623730951},"86":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"262":{"tf":1.0},"373":{"tf":1.0},"392":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\\"":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"d":{"/":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"298":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"m":{"df":1,"docs":{"337":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"272":{"tf":1.0}}},"df":0,"docs":{}}}}},"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"273":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":8,"docs":{"137":{"tf":1.0},"142":{"tf":1.0},"200":{"tf":1.0},"279":{"tf":1.0},"322":{"tf":1.0},"326":{"tf":1.0},"465":{"tf":1.0},"492":{"tf":1.0}}}}}},"n":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"325":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"324":{"tf":1.0},"325":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"y":{"_":{"df":0,"docs":{},"i":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"75":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"325":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":39,"docs":{"108":{"tf":1.4142135623730951},"114":{"tf":1.0},"118":{"tf":1.0},"129":{"tf":1.4142135623730951},"134":{"tf":1.0},"142":{"tf":2.23606797749979},"144":{"tf":1.0},"157":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.0},"223":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"258":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":2.0},"325":{"tf":1.7320508075688772},"326":{"tf":1.0},"330":{"tf":1.0},"350":{"tf":1.7320508075688772},"396":{"tf":1.0},"402":{"tf":1.7320508075688772},"404":{"tf":1.0},"407":{"tf":1.4142135623730951},"454":{"tf":1.0},"461":{"tf":1.4142135623730951},"465":{"tf":1.0},"469":{"tf":1.0},"473":{"tf":1.0},"480":{"tf":1.0},"500":{"tf":2.23606797749979},"501":{"tf":1.4142135623730951},"502":{"tf":1.0},"512":{"tf":1.4142135623730951},"53":{"tf":1.0},"70":{"tf":1.0},"90":{"tf":1.7320508075688772},"96":{"tf":1.0},"99":{"tf":2.0}}},"df":0,"docs":{},"e":{"df":1,"docs":{"371":{"tf":1.0}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"238":{"tf":1.4142135623730951}}}}}},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":18,"docs":{"0":{"tf":1.0},"100":{"tf":1.0},"135":{"tf":1.4142135623730951},"151":{"tf":1.0},"157":{"tf":1.0},"181":{"tf":1.0},"192":{"tf":1.0},"197":{"tf":1.4142135623730951},"226":{"tf":1.0},"237":{"tf":1.0},"321":{"tf":1.4142135623730951},"350":{"tf":1.0},"353":{"tf":1.4142135623730951},"357":{"tf":1.0},"409":{"tf":1.4142135623730951},"47":{"tf":1.0},"65":{"tf":1.0},"80":{"tf":1.0}}}}},"t":{"df":1,"docs":{"67":{"tf":1.0}}},"x":{"df":10,"docs":{"104":{"tf":1.0},"108":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"238":{"tf":2.0},"247":{"tf":1.7320508075688772},"500":{"tf":1.0},"501":{"tf":1.7320508075688772},"76":{"tf":1.0},"96":{"tf":1.0}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"278":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"167":{"tf":1.4142135623730951},"306":{"tf":1.0},"328":{"tf":1.0},"406":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":8,"docs":{"314":{"tf":1.0},"316":{"tf":1.4142135623730951},"325":{"tf":1.0},"396":{"tf":1.0},"402":{"tf":1.0},"502":{"tf":1.4142135623730951},"98":{"tf":1.0},"99":{"tf":1.0}},"s":{":":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"*":{"*":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"502":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":4,"docs":{"314":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":1.0},"396":{"tf":1.0}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"30":{"tf":1.0},"45":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"\\\\":{"df":0,"docs":{},"n":{"3":{"df":1,"docs":{"493":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"l":{"df":11,"docs":{"110":{"tf":1.0},"133":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"250":{"tf":1.4142135623730951},"299":{"tf":1.4142135623730951},"332":{"tf":1.0},"350":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.0},"64":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"w":{"df":3,"docs":{"27":{"tf":1.0},"275":{"tf":1.4142135623730951},"286":{"tf":1.4142135623730951}}}}},"m":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{"&":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"!":{"(":{"\\"":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"324":{"tf":1.4142135623730951}}},"n":{"df":18,"docs":{"133":{"tf":1.4142135623730951},"139":{"tf":1.4142135623730951},"149":{"tf":1.4142135623730951},"238":{"tf":1.0},"262":{"tf":2.0},"263":{"tf":1.7320508075688772},"293":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.0},"322":{"tf":1.4142135623730951},"323":{"tf":1.4142135623730951},"324":{"tf":5.0990195135927845},"325":{"tf":1.7320508075688772},"329":{"tf":2.0},"335":{"tf":1.4142135623730951},"354":{"tf":3.3166247903554},"373":{"tf":1.7320508075688772},"75":{"tf":1.0}}},"o":{"c":{"df":0,"docs":{},"u":{"df":1,"docs":{"64":{"tf":1.0}},"s":{"df":4,"docs":{"138":{"tf":1.4142135623730951},"241":{"tf":1.0},"344":{"tf":1.0},"466":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"108":{"tf":1.0},"111":{"tf":1.0},"128":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":19,"docs":{"107":{"tf":1.0},"121":{"tf":1.0},"123":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"14":{"tf":1.0},"142":{"tf":1.0},"156":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"230":{"tf":1.0},"238":{"tf":1.0},"241":{"tf":1.0},"243":{"tf":1.0},"284":{"tf":1.0},"36":{"tf":1.0},"462":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0}}}}}},"r":{"b":{"df":0,"docs":{},"i":{"d":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"153":{"tf":1.0},"280":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"251":{"tf":1.0}}}},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}},"k":{"df":1,"docs":{"46":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"t":{"\\"":{")":{".":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"(":{"\\"":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"335":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":28,"docs":{"143":{"tf":1.0},"150":{"tf":1.4142135623730951},"170":{"tf":1.0},"202":{"tf":1.0},"220":{"tf":1.0},"225":{"tf":1.0},"258":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.4142135623730951},"270":{"tf":1.0},"292":{"tf":1.0},"30":{"tf":1.4142135623730951},"303":{"tf":1.0},"304":{"tf":1.7320508075688772},"324":{"tf":1.4142135623730951},"332":{"tf":1.0},"333":{"tf":1.4142135623730951},"335":{"tf":1.0},"337":{"tf":1.0},"36":{"tf":1.0},"412":{"tf":1.0},"467":{"tf":1.0},"480":{"tf":1.0},"498":{"tf":2.23606797749979},"65":{"tf":1.0},"91":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}}}},"df":0,"docs":{}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"381":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"407":{"tf":1.0}}}},"df":19,"docs":{"108":{"tf":1.0},"134":{"tf":1.0},"188":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"223":{"tf":1.4142135623730951},"231":{"tf":1.0},"237":{"tf":1.0},"247":{"tf":1.0},"277":{"tf":1.0},"42":{"tf":1.4142135623730951},"461":{"tf":1.0},"465":{"tf":1.0},"466":{"tf":1.4142135623730951},"476":{"tf":1.4142135623730951},"492":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0},"514":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":1,"docs":{"286":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"104":{"tf":1.4142135623730951},"48":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":10,"docs":{"238":{"tf":1.0},"247":{"tf":1.4142135623730951},"350":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.0},"359":{"tf":1.7320508075688772},"365":{"tf":1.0},"366":{"tf":1.0},"371":{"tf":1.0},"90":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"241":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":12,"docs":{"136":{"tf":1.4142135623730951},"157":{"tf":1.0},"255":{"tf":1.0},"262":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.4142135623730951},"401":{"tf":1.0},"49":{"tf":1.0},"52":{"tf":1.4142135623730951},"63":{"tf":1.0},"93":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"m":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"133":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"293":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":11,"docs":{"136":{"tf":1.0},"137":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"224":{"tf":1.7320508075688772},"225":{"tf":1.0},"264":{"tf":1.4142135623730951},"269":{"tf":1.0},"314":{"tf":1.0},"324":{"tf":3.0},"52":{"tf":1.0},"93":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":25,"docs":{"100":{"tf":1.0},"114":{"tf":1.0},"116":{"tf":1.0},"120":{"tf":1.0},"140":{"tf":1.0},"153":{"tf":1.0},"167":{"tf":1.4142135623730951},"225":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.0},"238":{"tf":1.4142135623730951},"241":{"tf":1.0},"250":{"tf":1.0},"278":{"tf":1.0},"279":{"tf":1.0},"314":{"tf":1.4142135623730951},"330":{"tf":1.0},"371":{"tf":1.0},"396":{"tf":1.4142135623730951},"404":{"tf":1.0},"412":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"73":{"tf":1.0},"94":{"tf":1.0}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"12":{"tf":1.0},"135":{"tf":1.0},"210":{"tf":1.0},"291":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.7320508075688772},"371":{"tf":1.0},"65":{"tf":1.0}}}}}}},"d":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"314":{"tf":1.0},"396":{"tf":1.0},"69":{"tf":1.0},"95":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"291":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"225":{"tf":1.4142135623730951}}}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"233":{"tf":1.0},"238":{"tf":1.0},"25":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":1.0}}}}}}},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"360":{"tf":1.4142135623730951},"371":{"tf":1.0},"388":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":27,"docs":{"104":{"tf":1.0},"123":{"tf":1.0},"125":{"tf":1.0},"137":{"tf":1.0},"167":{"tf":1.0},"196":{"tf":1.0},"199":{"tf":1.0},"214":{"tf":1.0},"258":{"tf":1.0},"279":{"tf":1.0},"3":{"tf":1.0},"304":{"tf":1.0},"310":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":1.0},"344":{"tf":1.4142135623730951},"350":{"tf":1.0},"361":{"tf":1.0},"495":{"tf":1.0},"502":{"tf":1.0},"511":{"tf":1.0},"55":{"tf":1.0},"61":{"tf":1.0},"72":{"tf":1.0},"77":{"tf":1.0},"79":{"tf":1.0},"91":{"tf":1.0}}}}},"t":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":5,"docs":{"114":{"tf":1.0},"197":{"tf":1.0},"202":{"tf":1.4142135623730951},"217":{"tf":1.0},"226":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"t":{"df":35,"docs":{"105":{"tf":1.0},"107":{"tf":2.23606797749979},"136":{"tf":2.23606797749979},"141":{"tf":1.4142135623730951},"143":{"tf":1.4142135623730951},"151":{"tf":1.0},"157":{"tf":1.0},"164":{"tf":1.0},"215":{"tf":2.0},"255":{"tf":1.0},"262":{"tf":1.0},"269":{"tf":1.0},"300":{"tf":1.0},"310":{"tf":1.0},"365":{"tf":1.4142135623730951},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"369":{"tf":1.0},"371":{"tf":2.0},"375":{"tf":1.0},"376":{"tf":1.0},"383":{"tf":1.4142135623730951},"387":{"tf":1.0},"401":{"tf":1.0},"47":{"tf":1.0},"484":{"tf":1.7320508075688772},"49":{"tf":1.0},"52":{"tf":1.7320508075688772},"57":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.4142135623730951},"86":{"tf":1.0},"93":{"tf":1.7320508075688772}},"h":{"df":0,"docs":{},"u":{"b":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"a":{"b":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":4,"docs":{"104":{"tf":1.0},"226":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"215":{"tf":1.4142135623730951}}}}}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"4":{"tf":1.0}}}}},"o":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"157":{"tf":1.0}}}},"df":3,"docs":{"101":{"tf":1.0},"381":{"tf":1.0},"471":{"tf":1.4142135623730951}},"e":{"df":2,"docs":{"202":{"tf":1.0},"98":{"tf":1.0}}},"o":{"d":{"df":11,"docs":{"133":{"tf":1.0},"139":{"tf":1.0},"219":{"tf":1.0},"237":{"tf":1.0},"298":{"tf":1.0},"307":{"tf":1.0},"350":{"tf":1.0},"359":{"tf":1.7320508075688772},"366":{"tf":1.0},"470":{"tf":1.0},"67":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":1,"docs":{"104":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"u":{"df":1,"docs":{"351":{"tf":1.0}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"142":{"tf":1.0}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"142":{"tf":1.0},"90":{"tf":1.4142135623730951}}}}}}}}},"d":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"371":{"tf":1.0},"406":{"tf":1.0}}}},"df":0,"docs":{}}},"df":2,"docs":{"0":{"tf":1.0},"47":{"tf":1.0}},"n":{"d":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"329":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"136":{"tf":1.0},"409":{"tf":1.0}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"402":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"(":{"\\"":{"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"402":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"337":{"tf":1.0}}}},"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":2,"docs":{"272":{"tf":1.0},"273":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"407":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"407":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"498":{"tf":1.0}}}}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":3,"docs":{"266":{"tf":1.0},"293":{"tf":1.0},"334":{"tf":1.0}}}}}}}},"df":73,"docs":{"105":{"tf":1.4142135623730951},"110":{"tf":1.4142135623730951},"114":{"tf":1.0},"124":{"tf":1.0},"128":{"tf":1.0},"140":{"tf":1.4142135623730951},"142":{"tf":1.0},"144":{"tf":1.7320508075688772},"15":{"tf":1.0},"151":{"tf":1.4142135623730951},"17":{"tf":1.0},"198":{"tf":1.4142135623730951},"204":{"tf":1.4142135623730951},"212":{"tf":1.0},"231":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.4142135623730951},"258":{"tf":1.0},"259":{"tf":1.0},"261":{"tf":1.4142135623730951},"262":{"tf":1.7320508075688772},"266":{"tf":1.0},"269":{"tf":1.4142135623730951},"270":{"tf":1.0},"274":{"tf":1.7320508075688772},"279":{"tf":1.0},"281":{"tf":1.0},"282":{"tf":1.4142135623730951},"283":{"tf":1.7320508075688772},"290":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"296":{"tf":1.0},"307":{"tf":1.0},"314":{"tf":1.4142135623730951},"325":{"tf":1.4142135623730951},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.4142135623730951},"365":{"tf":1.7320508075688772},"366":{"tf":1.4142135623730951},"367":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"369":{"tf":1.0},"373":{"tf":1.4142135623730951},"385":{"tf":1.7320508075688772},"422":{"tf":1.7320508075688772},"456":{"tf":1.0},"467":{"tf":1.0},"47":{"tf":1.0},"480":{"tf":1.0},"487":{"tf":1.0},"49":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.7320508075688772},"497":{"tf":1.0},"498":{"tf":1.4142135623730951},"503":{"tf":1.0},"51":{"tf":1.0},"511":{"tf":1.0},"57":{"tf":2.0},"63":{"tf":1.7320508075688772},"64":{"tf":1.0},"66":{"tf":1.0},"70":{"tf":2.0},"73":{"tf":1.4142135623730951},"85":{"tf":1.7320508075688772},"86":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"89":{"tf":1.4142135623730951},"92":{"tf":1.0}},"q":{"df":0,"docs":{},"l":{"df":8,"docs":{"249":{"tf":1.0},"250":{"tf":2.8284271247461903},"460":{"tf":2.23606797749979},"465":{"tf":1.0},"501":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"96":{"tf":1.0}}}},"s":{":":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"497":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":2,"docs":{"140":{"tf":1.0},"494":{"tf":1.0}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"120":{"tf":1.0}}}}}},"p":{"c":{"df":1,"docs":{"250":{"tf":2.449489742783178}}},"df":0,"docs":{}}},"u":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"267":{"tf":1.0},"335":{"tf":1.0},"502":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"d":{"df":55,"docs":{"130":{"tf":1.0},"131":{"tf":1.0},"157":{"tf":1.0},"159":{"tf":1.0},"16":{"tf":2.23606797749979},"192":{"tf":1.0},"194":{"tf":1.4142135623730951},"24":{"tf":1.0},"252":{"tf":1.4142135623730951},"282":{"tf":1.0},"311":{"tf":1.4142135623730951},"338":{"tf":1.0},"345":{"tf":1.0},"357":{"tf":1.0},"445":{"tf":2.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"45":{"tf":1.4142135623730951},"450":{"tf":1.0},"451":{"tf":1.0},"452":{"tf":1.0},"453":{"tf":1.0},"454":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0},"457":{"tf":1.0},"458":{"tf":1.0},"459":{"tf":1.0},"460":{"tf":1.0},"461":{"tf":1.0},"462":{"tf":1.0},"463":{"tf":1.0},"464":{"tf":1.0},"465":{"tf":1.0},"466":{"tf":1.0},"467":{"tf":1.0},"468":{"tf":1.0},"469":{"tf":1.0},"470":{"tf":1.0},"471":{"tf":1.0},"472":{"tf":1.0},"473":{"tf":1.0},"474":{"tf":1.0},"475":{"tf":1.0},"476":{"tf":1.0},"477":{"tf":1.0},"478":{"tf":1.0},"479":{"tf":1.0},"480":{"tf":1.0},"487":{"tf":1.0},"510":{"tf":1.0},"521":{"tf":1.0},"68":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":70,"docs":{"101":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":1.4142135623730951},"108":{"tf":1.0},"110":{"tf":2.0},"111":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.4142135623730951},"116":{"tf":1.0},"121":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"137":{"tf":1.0},"141":{"tf":1.7320508075688772},"142":{"tf":1.0},"144":{"tf":1.0},"156":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"213":{"tf":2.23606797749979},"231":{"tf":2.23606797749979},"241":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.0},"244":{"tf":3.0},"247":{"tf":1.0},"251":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"26":{"tf":1.4142135623730951},"269":{"tf":1.0},"270":{"tf":1.4142135623730951},"30":{"tf":1.0},"365":{"tf":1.0},"369":{"tf":1.0},"371":{"tf":1.4142135623730951},"372":{"tf":1.4142135623730951},"377":{"tf":2.0},"381":{"tf":1.0},"391":{"tf":1.0},"457":{"tf":1.7320508075688772},"46":{"tf":1.0},"461":{"tf":1.0},"462":{"tf":2.0},"463":{"tf":2.0},"466":{"tf":2.449489742783178},"471":{"tf":1.0},"48":{"tf":1.0},"480":{"tf":1.4142135623730951},"492":{"tf":1.4142135623730951},"496":{"tf":3.0},"498":{"tf":1.7320508075688772},"506":{"tf":1.0},"508":{"tf":1.0},"512":{"tf":1.0},"519":{"tf":1.4142135623730951},"53":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.0},"61":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":2.23606797749979},"77":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.7320508075688772},"87":{"tf":1.0},"88":{"tf":2.0}},"e":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"497":{"tf":1.0}}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":1,"docs":{"498":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"k":{"df":0,"docs":{},"u":{"df":2,"docs":{"290":{"tf":1.0},"292":{"tf":1.0}}}}},"n":{"d":{"df":0,"docs":{},"l":{"df":39,"docs":{"108":{"tf":1.4142135623730951},"129":{"tf":1.0},"142":{"tf":1.4142135623730951},"155":{"tf":1.0},"200":{"tf":1.0},"207":{"tf":1.0},"209":{"tf":1.4142135623730951},"213":{"tf":1.4142135623730951},"218":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.4142135623730951},"237":{"tf":2.449489742783178},"238":{"tf":1.7320508075688772},"243":{"tf":1.0},"244":{"tf":2.0},"259":{"tf":1.0},"277":{"tf":1.4142135623730951},"324":{"tf":1.0},"452":{"tf":1.0},"454":{"tf":1.4142135623730951},"457":{"tf":1.4142135623730951},"461":{"tf":2.449489742783178},"463":{"tf":1.4142135623730951},"470":{"tf":1.0},"471":{"tf":1.0},"492":{"tf":1.7320508075688772},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.4142135623730951},"496":{"tf":1.4142135623730951},"512":{"tf":1.0},"513":{"tf":1.4142135623730951},"517":{"tf":1.0},"52":{"tf":1.7320508075688772},"55":{"tf":1.0},"74":{"tf":1.4142135623730951},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"90":{"tf":2.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{",":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"219":{"tf":1.0},"237":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"270":{"tf":1.0}}},"df":0,"docs":{}}},":":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"492":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"127":{"tf":1.0}}}},"i":{"df":1,"docs":{"46":{"tf":1.0}}}}},"r":{"d":{"c":{"df":0,"docs":{},"o":{"d":{"df":10,"docs":{"109":{"tf":1.0},"133":{"tf":1.7320508075688772},"146":{"tf":1.4142135623730951},"149":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"298":{"tf":2.0},"306":{"tf":1.4142135623730951},"51":{"tf":1.0},"89":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"322":{"tf":1.0},"411":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":5,"docs":{"261":{"tf":1.4142135623730951},"321":{"tf":1.0},"324":{"tf":1.4142135623730951},"398":{"tf":1.0},"411":{"tf":1.0}}}}}},"df":1,"docs":{"279":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"140":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"104":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":5,"docs":{"173":{"tf":1.4142135623730951},"226":{"tf":2.23606797749979},"36":{"tf":1.4142135623730951},"46":{"tf":1.0},"480":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}},"s":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"290":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"291":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"202":{"tf":1.0},"93":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"317":{"tf":1.0},"96":{"tf":1.0}},"i":{"df":6,"docs":{"314":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":1.0},"330":{"tf":1.0},"396":{"tf":1.0},"404":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"h":{"df":9,"docs":{"247":{"tf":1.0},"255":{"tf":1.4142135623730951},"289":{"tf":1.0},"329":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"500":{"tf":2.449489742783178},"96":{"tf":1.4142135623730951},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"308":{"tf":1.0},"57":{"tf":1.0},"88":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":2,"docs":{"333":{"tf":1.0},"338":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"251":{"tf":1.0}},"i":{"df":9,"docs":{"104":{"tf":1.0},"238":{"tf":1.0},"348":{"tf":1.4142135623730951},"363":{"tf":1.4142135623730951},"393":{"tf":1.4142135623730951},"48":{"tf":1.0},"60":{"tf":1.0},"77":{"tf":1.0},"93":{"tf":1.0}}}}}}},"t":{"df":2,"docs":{"241":{"tf":1.0},"391":{"tf":1.0}}}},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"144":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"354":{"tf":1.0},"359":{"tf":1.0},"65":{"tf":1.0},"90":{"tf":1.0}}}},"t":{"df":1,"docs":{"285":{"tf":1.0}}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"113":{"tf":1.4142135623730951},"117":{"tf":1.4142135623730951},"247":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":2,"docs":{"3":{"tf":1.7320508075688772},"6":{"tf":1.0}}}},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"3":{"0":{"0":{"0":{"df":2,"docs":{"2":{"tf":1.0},"38":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"0":{"0":{"0":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"190":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"161":{"tf":1.0}},"s":{":":{"/":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"p":{"d":{"df":0,"docs":{},"f":{"df":1,"docs":{"96":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"d":{"b":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"162":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"161":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":5,"docs":{"137":{"tf":2.449489742783178},"143":{"tf":3.0},"157":{"tf":1.0},"333":{"tf":1.0},"341":{"tf":1.0}}}},"df":0,"docs":{}}},"y":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"d":{"df":41,"docs":{"100":{"tf":1.0},"20":{"tf":1.0},"269":{"tf":1.4142135623730951},"27":{"tf":1.0},"323":{"tf":1.4142135623730951},"330":{"tf":1.0},"353":{"tf":1.4142135623730951},"354":{"tf":1.0},"356":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.7320508075688772},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.7320508075688772},"369":{"tf":1.4142135623730951},"370":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"382":{"tf":1.0},"383":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":1.0},"387":{"tf":1.0},"388":{"tf":1.0},"389":{"tf":1.0},"390":{"tf":1.0},"391":{"tf":1.4142135623730951},"392":{"tf":1.0},"393":{"tf":1.0},"397":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"i":{"\'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"127":{"tf":1.0}}}},"m":{"df":2,"docs":{"237":{"tf":1.0},"461":{"tf":1.0}}}},"/":{"df":0,"docs":{},"o":{"df":2,"docs":{"208":{"tf":1.0},"289":{"tf":1.0}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"28":{"tf":1.0}}}}},"d":{"df":40,"docs":{"137":{"tf":1.0},"150":{"tf":1.0},"199":{"tf":1.7320508075688772},"201":{"tf":1.7320508075688772},"202":{"tf":1.4142135623730951},"223":{"tf":1.0},"224":{"tf":1.0},"261":{"tf":1.4142135623730951},"264":{"tf":1.4142135623730951},"300":{"tf":1.0},"314":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":2.449489742783178},"333":{"tf":1.0},"338":{"tf":1.0},"398":{"tf":1.0},"492":{"tf":1.4142135623730951},"493":{"tf":2.0},"494":{"tf":1.7320508075688772},"495":{"tf":2.0},"496":{"tf":1.4142135623730951},"497":{"tf":1.4142135623730951},"498":{"tf":1.4142135623730951},"500":{"tf":1.7320508075688772},"501":{"tf":1.4142135623730951},"502":{"tf":1.4142135623730951},"504":{"tf":1.0},"505":{"tf":1.0},"506":{"tf":1.0},"507":{"tf":1.0},"508":{"tf":1.0},"509":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.4142135623730951},"515":{"tf":1.0},"52":{"tf":1.0},"75":{"tf":1.0},"91":{"tf":1.4142135623730951},"93":{"tf":1.0},"98":{"tf":1.0}},"e":{"a":{"df":4,"docs":{"105":{"tf":1.0},"238":{"tf":1.0},"70":{"tf":1.0},"79":{"tf":1.0}},"l":{"df":2,"docs":{"124":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"310":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"357":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"101":{"tf":1.0},"334":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"112":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":10,"docs":{"133":{"tf":1.4142135623730951},"149":{"tf":1.4142135623730951},"293":{"tf":1.0},"303":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":2.23606797749979},"325":{"tf":1.0},"354":{"tf":1.7320508075688772},"373":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":70,"docs":{"104":{"tf":1.0},"111":{"tf":1.4142135623730951},"130":{"tf":1.0},"131":{"tf":1.0},"134":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.7320508075688772},"138":{"tf":1.4142135623730951},"139":{"tf":1.0},"141":{"tf":1.4142135623730951},"143":{"tf":1.0},"144":{"tf":1.4142135623730951},"152":{"tf":1.4142135623730951},"199":{"tf":1.4142135623730951},"210":{"tf":1.0},"218":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":2.0},"240":{"tf":1.0},"241":{"tf":3.0},"251":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"282":{"tf":1.0},"317":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.7320508075688772},"329":{"tf":1.4142135623730951},"330":{"tf":1.7320508075688772},"335":{"tf":1.0},"345":{"tf":1.7320508075688772},"347":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.7320508075688772},"360":{"tf":2.0},"368":{"tf":1.0},"369":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.4142135623730951},"392":{"tf":1.0},"397":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":2.0},"412":{"tf":1.0},"413":{"tf":1.0},"458":{"tf":1.4142135623730951},"462":{"tf":2.8284271247461903},"466":{"tf":1.4142135623730951},"471":{"tf":1.0},"480":{"tf":1.0},"487":{"tf":1.0},"495":{"tf":1.7320508075688772},"496":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"518":{"tf":1.0},"519":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.4142135623730951},"76":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":2.23606797749979},"84":{"tf":1.0},"86":{"tf":1.0},"96":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":8,"docs":{"314":{"tf":1.0},"324":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.4142135623730951},"396":{"tf":1.4142135623730951},"404":{"tf":1.0},"63":{"tf":1.0}}}}}}}}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":19,"docs":{"113":{"tf":1.0},"154":{"tf":1.0},"170":{"tf":1.0},"179":{"tf":1.4142135623730951},"257":{"tf":1.4142135623730951},"259":{"tf":1.4142135623730951},"290":{"tf":1.0},"314":{"tf":1.7320508075688772},"321":{"tf":1.0},"324":{"tf":2.0},"333":{"tf":1.0},"334":{"tf":1.4142135623730951},"337":{"tf":1.0},"356":{"tf":1.0},"396":{"tf":1.0},"398":{"tf":1.0},"413":{"tf":1.0},"500":{"tf":1.0},"97":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":2,"docs":{"36":{"tf":1.0},"46":{"tf":1.0}}}}}}},"n":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"d":{"df":11,"docs":{"141":{"tf":1.0},"247":{"tf":1.0},"250":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"300":{"tf":1.0},"36":{"tf":1.0},"371":{"tf":1.4142135623730951},"496":{"tf":1.0},"498":{"tf":1.0},"511":{"tf":1.0}},"e":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"496":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"498":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"343":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"104":{"tf":1.0},"243":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"234":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":2,"docs":{"324":{"tf":2.6457513110645907},"342":{"tf":1.0}}}},"x":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"322":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":10,"docs":{"100":{"tf":1.4142135623730951},"279":{"tf":1.0},"28":{"tf":1.0},"323":{"tf":1.7320508075688772},"328":{"tf":1.0},"357":{"tf":1.4142135623730951},"384":{"tf":1.0},"401":{"tf":1.0},"407":{"tf":1.0},"410":{"tf":1.0}}}},"i":{"c":{"df":1,"docs":{"259":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"512":{"tf":1.0}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"u":{"df":3,"docs":{"120":{"tf":1.4142135623730951},"122":{"tf":1.0},"270":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"151":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"314":{"tf":1.0},"396":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"198":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.7320508075688772},"367":{"tf":1.0},"372":{"tf":1.0},"456":{"tf":1.0},"494":{"tf":1.0},"73":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"372":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{".":{"b":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"171":{"tf":1.0},"213":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"199":{"tf":1.0},"82":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"319":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":18,"docs":{"110":{"tf":1.4142135623730951},"114":{"tf":1.0},"138":{"tf":1.4142135623730951},"171":{"tf":1.0},"213":{"tf":1.0},"244":{"tf":1.4142135623730951},"258":{"tf":1.0},"332":{"tf":1.0},"369":{"tf":1.7320508075688772},"377":{"tf":1.0},"423":{"tf":1.7320508075688772},"495":{"tf":1.0},"496":{"tf":1.0},"508":{"tf":1.0},"509":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"88":{"tf":1.7320508075688772}}}}}}},"i":{"df":0,"docs":{},"t":{"df":11,"docs":{"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"173":{"tf":1.0},"196":{"tf":1.0},"213":{"tf":1.0},"222":{"tf":1.0},"244":{"tf":1.0},"257":{"tf":1.0},"338":{"tf":1.0},"450":{"tf":1.0},"476":{"tf":1.0}},"i":{"df":15,"docs":{"169":{"tf":2.0},"171":{"tf":1.0},"173":{"tf":1.0},"179":{"tf":1.4142135623730951},"18":{"tf":1.0},"196":{"tf":1.7320508075688772},"222":{"tf":1.0},"257":{"tf":1.0},"348":{"tf":1.0},"357":{"tf":1.0},"363":{"tf":1.0},"393":{"tf":1.0},"417":{"tf":1.7320508075688772},"450":{"tf":1.7320508075688772},"476":{"tf":1.0}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"123":{"tf":1.0},"53":{"tf":1.0}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"100":{"tf":1.0},"124":{"tf":1.0},"226":{"tf":1.0},"285":{"tf":1.0},"300":{"tf":1.0},"314":{"tf":1.0},"96":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":12,"docs":{"264":{"tf":1.0},"280":{"tf":1.4142135623730951},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0}},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":1,"docs":{"326":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"339":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"151":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":45,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.7320508075688772},"12":{"tf":2.23606797749979},"13":{"tf":1.4142135623730951},"159":{"tf":2.0},"16":{"tf":1.0},"160":{"tf":1.0},"161":{"tf":1.4142135623730951},"162":{"tf":1.7320508075688772},"163":{"tf":1.7320508075688772},"164":{"tf":2.449489742783178},"165":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":1.0},"170":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.7320508075688772},"173":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.0},"179":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"182":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"185":{"tf":1.0},"186":{"tf":1.0},"187":{"tf":1.0},"188":{"tf":2.0},"189":{"tf":1.0},"190":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.4142135623730951},"195":{"tf":2.23606797749979},"338":{"tf":1.4142135623730951},"416":{"tf":1.7320508075688772},"42":{"tf":1.7320508075688772},"68":{"tf":1.0}}},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"118":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"372":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"116":{"tf":1.0},"234":{"tf":1.0},"251":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":5,"docs":{"238":{"tf":1.0},"247":{"tf":1.0},"285":{"tf":1.0},"372":{"tf":1.0},"404":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"122":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":5,"docs":{"492":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0},"512":{"tf":1.0}},"r":{"df":38,"docs":{"105":{"tf":1.0},"142":{"tf":1.0},"151":{"tf":1.0},"175":{"tf":1.0},"18":{"tf":1.0},"183":{"tf":1.4142135623730951},"192":{"tf":1.0},"205":{"tf":1.0},"215":{"tf":1.4142135623730951},"225":{"tf":1.0},"24":{"tf":2.0},"241":{"tf":1.4142135623730951},"252":{"tf":1.0},"255":{"tf":1.0},"258":{"tf":1.4142135623730951},"278":{"tf":1.0},"293":{"tf":1.4142135623730951},"304":{"tf":1.7320508075688772},"360":{"tf":1.4142135623730951},"371":{"tf":1.0},"407":{"tf":1.4142135623730951},"414":{"tf":1.7320508075688772},"433":{"tf":1.7320508075688772},"434":{"tf":1.7320508075688772},"435":{"tf":1.7320508075688772},"445":{"tf":1.0},"463":{"tf":1.0},"479":{"tf":1.4142135623730951},"481":{"tf":1.7320508075688772},"482":{"tf":1.7320508075688772},"487":{"tf":1.0},"49":{"tf":1.0},"501":{"tf":1.0},"53":{"tf":1.0},"63":{"tf":1.0},"66":{"tf":1.0},"77":{"tf":1.0},"92":{"tf":1.4142135623730951}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"j":{"/":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"39":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"351":{"tf":1.0},"98":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"136":{"tf":1.0}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"197":{"tf":1.0},"257":{"tf":1.0},"446":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"128":{"tf":1.0},"144":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"f":{"a":{"c":{"df":7,"docs":{"255":{"tf":1.0},"257":{"tf":1.7320508075688772},"353":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.0},"4":{"tf":1.0},"66":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"267":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"12":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"df":4,"docs":{"250":{"tf":2.23606797749979},"35":{"tf":1.0},"44":{"tf":1.0},"514":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"135":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":47,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":8,"docs":{"134":{"tf":1.0},"147":{"tf":1.0},"234":{"tf":1.0},"241":{"tf":1.0},"295":{"tf":1.0},"337":{"tf":1.0},"514":{"tf":1.7320508075688772},"515":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"245":{"tf":1.4142135623730951},"251":{"tf":1.0}}}}}}}}},"s":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"337":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":5,"docs":{"128":{"tf":1.4142135623730951},"138":{"tf":1.0},"144":{"tf":1.0},"289":{"tf":1.0},"299":{"tf":1.0}}}},"s":{"df":0,"docs":{},"u":{"df":6,"docs":{"104":{"tf":1.0},"226":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"346":{"tf":1.0},"46":{"tf":1.0}}}}},"t":{"\'":{"df":2,"docs":{"306":{"tf":1.4142135623730951},"68":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":7,"docs":{"247":{"tf":1.0},"325":{"tf":1.0},"461":{"tf":1.0},"493":{"tf":1.4142135623730951},"494":{"tf":1.4142135623730951},"498":{"tf":1.0},"96":{"tf":1.0}}},"r":{"df":1,"docs":{"289":{"tf":1.0}}}}}},"j":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"j":{"a":{"2":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"a":{"df":2,"docs":{"104":{"tf":1.0},"124":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"113":{"tf":1.0},"114":{"tf":1.0},"226":{"tf":1.0},"230":{"tf":1.0},"385":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":19,"docs":{"108":{"tf":1.0},"118":{"tf":1.0},"124":{"tf":1.0},"169":{"tf":1.0},"196":{"tf":1.4142135623730951},"203":{"tf":2.23606797749979},"210":{"tf":1.4142135623730951},"238":{"tf":2.8284271247461903},"247":{"tf":2.0},"251":{"tf":1.0},"257":{"tf":1.0},"270":{"tf":1.4142135623730951},"492":{"tf":1.0},"498":{"tf":1.0},"55":{"tf":1.0},"59":{"tf":1.0},"67":{"tf":1.0},"76":{"tf":2.0},"86":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":23,"docs":{"170":{"tf":1.0},"238":{"tf":1.0},"258":{"tf":1.0},"267":{"tf":1.4142135623730951},"27":{"tf":1.0},"275":{"tf":1.4142135623730951},"280":{"tf":1.0},"292":{"tf":2.0},"293":{"tf":1.4142135623730951},"296":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":2.23606797749979},"335":{"tf":2.449489742783178},"337":{"tf":1.0},"339":{"tf":1.4142135623730951},"341":{"tf":1.7320508075688772},"385":{"tf":1.4142135623730951},"487":{"tf":1.0},"498":{"tf":1.0},"514":{"tf":1.4142135623730951},"63":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.0}},"r":{"df":0,"docs":{},"p":{"c":{"\\"":{":":{"\\"":{"2":{".":{"0":{"\\"":{",":{"\\"":{"df":0,"docs":{},"i":{"d":{"\\"":{":":{"1":{",":{"\\"":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"d":{"\\"":{":":{"\\"":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"\\"":{",":{"\\"":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"\\"":{":":{"df":0,"docs":{},"{":{"\\"":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"\\"":{":":{"\\"":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"174":{"tf":1.0},"475":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"p":{"df":1,"docs":{"191":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":13,"docs":{"492":{"tf":1.4142135623730951},"493":{"tf":1.4142135623730951},"494":{"tf":1.4142135623730951},"495":{"tf":1.4142135623730951},"496":{"tf":1.4142135623730951},"497":{"tf":1.4142135623730951},"498":{"tf":1.4142135623730951},"500":{"tf":1.7320508075688772},"501":{"tf":1.4142135623730951},"502":{"tf":1.4142135623730951},"511":{"tf":1.0},"512":{"tf":1.0},"515":{"tf":1.0}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"304":{"tf":1.7320508075688772}}}}}}}},"w":{"df":0,"docs":{},"t":{"df":1,"docs":{"137":{"tf":1.0}}}}},"k":{"8":{"df":1,"docs":{"344":{"tf":1.0}}},"b":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{":":{"8":{"0":{"0":{"0":{"df":1,"docs":{"376":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"/":{"a":{"d":{"d":{"_":{"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":3,"docs":{"258":{"tf":1.0},"460":{"tf":1.0},"494":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":4,"docs":{"241":{"tf":1.0},"258":{"tf":1.0},"462":{"tf":1.0},"493":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"258":{"tf":1.0},"467":{"tf":1.0},"498":{"tf":1.4142135623730951}}}}}}}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"407":{"tf":1.0},"500":{"tf":1.4142135623730951},"502":{"tf":1.0}}}},"df":0,"docs":{}}}},"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"502":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"258":{"tf":1.0},"512":{"tf":1.7320508075688772}}}}},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":2,"docs":{"501":{"tf":1.4142135623730951},"502":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"231":{"tf":1.0},"244":{"tf":1.0},"258":{"tf":1.0},"496":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":4,"docs":{"241":{"tf":1.0},"258":{"tf":1.0},"462":{"tf":1.0},"495":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":2,"docs":{"258":{"tf":1.0},"497":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"186":{"tf":1.0},"205":{"tf":1.0},"275":{"tf":1.0},"469":{"tf":1.0},"492":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"258":{"tf":1.0},"463":{"tf":1.0},"511":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"303":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"\\"":{".":{"df":0,"docs":{},"k":{"b":{"df":1,"docs":{"293":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"302":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":7,"docs":{"266":{"tf":1.0},"267":{"tf":1.0},"293":{"tf":1.7320508075688772},"303":{"tf":1.0},"327":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0}}}}}}}},"df":109,"docs":{"103":{"tf":1.4142135623730951},"106":{"tf":1.4142135623730951},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":2.0},"111":{"tf":1.0},"113":{"tf":1.4142135623730951},"114":{"tf":1.7320508075688772},"115":{"tf":1.4142135623730951},"116":{"tf":1.7320508075688772},"117":{"tf":1.4142135623730951},"118":{"tf":1.4142135623730951},"124":{"tf":2.0},"125":{"tf":1.0},"126":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"151":{"tf":1.0},"156":{"tf":1.0},"164":{"tf":1.0},"165":{"tf":2.23606797749979},"166":{"tf":1.0},"167":{"tf":1.0},"169":{"tf":1.7320508075688772},"170":{"tf":1.4142135623730951},"171":{"tf":2.0},"173":{"tf":1.7320508075688772},"174":{"tf":1.4142135623730951},"175":{"tf":1.0},"178":{"tf":1.7320508075688772},"179":{"tf":1.0},"181":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"191":{"tf":1.4142135623730951},"193":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.4142135623730951},"198":{"tf":1.0},"199":{"tf":1.4142135623730951},"200":{"tf":2.0},"201":{"tf":1.4142135623730951},"203":{"tf":1.0},"205":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.0},"210":{"tf":1.0},"213":{"tf":2.0},"222":{"tf":2.449489742783178},"223":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"23":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"241":{"tf":1.4142135623730951},"244":{"tf":2.0},"247":{"tf":1.0},"250":{"tf":1.0},"255":{"tf":1.7320508075688772},"257":{"tf":1.4142135623730951},"258":{"tf":1.4142135623730951},"259":{"tf":2.449489742783178},"260":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"278":{"tf":1.4142135623730951},"285":{"tf":1.0},"290":{"tf":1.4142135623730951},"292":{"tf":1.7320508075688772},"293":{"tf":1.0},"295":{"tf":1.0},"299":{"tf":1.7320508075688772},"303":{"tf":2.0},"304":{"tf":3.0},"310":{"tf":1.0},"311":{"tf":1.4142135623730951},"314":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"335":{"tf":1.0},"338":{"tf":1.0},"345":{"tf":1.0},"354":{"tf":1.0},"369":{"tf":1.7320508075688772},"372":{"tf":1.7320508075688772},"377":{"tf":1.4142135623730951},"388":{"tf":1.0},"396":{"tf":1.0},"407":{"tf":1.7320508075688772},"413":{"tf":1.0},"448":{"tf":1.0},"450":{"tf":1.4142135623730951},"451":{"tf":1.0},"475":{"tf":1.0},"476":{"tf":2.0},"478":{"tf":1.0},"489":{"tf":1.4142135623730951},"521":{"tf":1.0},"66":{"tf":2.449489742783178},"85":{"tf":1.0},"92":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}}}},"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"344":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":9,"docs":{"135":{"tf":1.0},"291":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0},"405":{"tf":1.0},"410":{"tf":1.0},"466":{"tf":1.0},"65":{"tf":1.0}}}},"y":{"df":16,"docs":{"101":{"tf":1.4142135623730951},"197":{"tf":1.0},"202":{"tf":1.0},"319":{"tf":1.0},"324":{"tf":1.4142135623730951},"326":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.0},"341":{"tf":1.4142135623730951},"352":{"tf":1.0},"356":{"tf":1.0},"361":{"tf":1.0},"500":{"tf":1.0},"511":{"tf":1.0},"54":{"tf":1.4142135623730951},"96":{"tf":1.0}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":6,"docs":{"108":{"tf":1.7320508075688772},"142":{"tf":1.4142135623730951},"350":{"tf":1.0},"473":{"tf":1.0},"53":{"tf":1.0},"90":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"/":{"c":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"142":{"tf":1.0},"383":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":95,"docs":{"101":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":2.0},"105":{"tf":2.23606797749979},"107":{"tf":2.23606797749979},"110":{"tf":1.4142135623730951},"111":{"tf":1.0},"114":{"tf":1.0},"120":{"tf":1.4142135623730951},"121":{"tf":1.4142135623730951},"122":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.7320508075688772},"127":{"tf":1.4142135623730951},"128":{"tf":1.4142135623730951},"129":{"tf":1.4142135623730951},"130":{"tf":1.0},"131":{"tf":1.0},"136":{"tf":2.449489742783178},"142":{"tf":1.4142135623730951},"144":{"tf":1.0},"157":{"tf":1.4142135623730951},"164":{"tf":1.4142135623730951},"169":{"tf":1.7320508075688772},"171":{"tf":1.7320508075688772},"192":{"tf":1.0},"193":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"197":{"tf":1.0},"198":{"tf":1.0},"200":{"tf":1.4142135623730951},"202":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"213":{"tf":1.0},"215":{"tf":1.0},"226":{"tf":1.4142135623730951},"231":{"tf":1.4142135623730951},"234":{"tf":1.0},"244":{"tf":1.0},"251":{"tf":1.4142135623730951},"257":{"tf":1.4142135623730951},"258":{"tf":1.0},"259":{"tf":1.0},"269":{"tf":1.0},"325":{"tf":1.0},"331":{"tf":1.0},"364":{"tf":1.0},"365":{"tf":2.23606797749979},"367":{"tf":1.0},"368":{"tf":2.0},"369":{"tf":1.4142135623730951},"371":{"tf":2.6457513110645907},"375":{"tf":1.0},"376":{"tf":1.0},"380":{"tf":1.0},"383":{"tf":1.4142135623730951},"391":{"tf":1.0},"446":{"tf":1.4142135623730951},"452":{"tf":1.0},"454":{"tf":1.4142135623730951},"461":{"tf":1.4142135623730951},"463":{"tf":2.0},"466":{"tf":1.0},"47":{"tf":1.4142135623730951},"48":{"tf":1.0},"480":{"tf":1.4142135623730951},"487":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.4142135623730951},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"503":{"tf":1.0},"511":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.7320508075688772},"65":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":2.0},"72":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":2.0},"98":{"tf":1.0},"99":{"tf":1.0}},"e":{"b":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"138":{"tf":1.0},"149":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"o":{"df":2,"docs":{"0":{"tf":1.0},"47":{"tf":1.0}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"/":{"a":{"d":{"d":{"_":{"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":3,"docs":{"456":{"tf":1.0},"494":{"tf":1.0},"520":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":3,"docs":{"455":{"tf":1.0},"493":{"tf":1.0},"92":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":6,"docs":{"170":{"tf":1.7320508075688772},"178":{"tf":1.0},"182":{"tf":1.0},"212":{"tf":1.0},"267":{"tf":1.0},"335":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":3,"docs":{"107":{"tf":1.0},"136":{"tf":1.0},"141":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"498":{"tf":1.0}}}}}}}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"326":{"tf":1.0},"500":{"tf":1.4142135623730951},"99":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":2,"docs":{"502":{"tf":1.0},"99":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"92":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":2,"docs":{"501":{"tf":1.0},"99":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"457":{"tf":1.0},"466":{"tf":1.0},"496":{"tf":1.0},"519":{"tf":1.0},"92":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"141":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"496":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"/":{"$":{"(":{"d":{"df":1,"docs":{"203":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"215":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":3,"docs":{"458":{"tf":1.0},"495":{"tf":1.0},"518":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":2,"docs":{"143":{"tf":1.0},"202":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"202":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"i":{"df":2,"docs":{"143":{"tf":1.4142135623730951},"371":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"141":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":10,"docs":{"237":{"tf":1.0},"258":{"tf":1.0},"452":{"tf":1.0},"454":{"tf":1.0},"461":{"tf":1.0},"465":{"tf":1.0},"466":{"tf":1.0},"492":{"tf":1.0},"517":{"tf":1.0},"92":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"511":{"tf":1.0},"92":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},":":{"/":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"/":{"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"258":{"tf":1.0},"505":{"tf":1.7320508075688772}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"{":{"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"505":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"258":{"tf":1.0},"506":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"506":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":3,"docs":{"258":{"tf":1.0},"504":{"tf":2.0},"92":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"504":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"{":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"504":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"258":{"tf":1.0},"507":{"tf":1.7320508075688772}},"s":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"507":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"258":{"tf":1.0},"508":{"tf":1.7320508075688772},"92":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"508":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"258":{"tf":1.0},"509":{"tf":1.7320508075688772}},"s":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"509":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"449":{"tf":1.0},"477":{"tf":1.0},"490":{"tf":1.0}}}}},"df":0,"docs":{}},"df":106,"docs":{"0":{"tf":2.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.7320508075688772},"108":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"136":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"15":{"tf":2.23606797749979},"159":{"tf":1.0},"165":{"tf":1.0},"169":{"tf":1.0},"185":{"tf":1.0},"194":{"tf":1.0},"196":{"tf":1.4142135623730951},"215":{"tf":1.0},"228":{"tf":1.0},"231":{"tf":1.4142135623730951},"234":{"tf":1.4142135623730951},"237":{"tf":1.4142135623730951},"238":{"tf":1.0},"241":{"tf":1.4142135623730951},"244":{"tf":2.0},"247":{"tf":1.4142135623730951},"250":{"tf":1.4142135623730951},"254":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.0},"269":{"tf":1.4142135623730951},"270":{"tf":1.0},"284":{"tf":1.0},"314":{"tf":1.7320508075688772},"332":{"tf":1.0},"350":{"tf":1.0},"365":{"tf":1.0},"369":{"tf":1.4142135623730951},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"396":{"tf":1.7320508075688772},"404":{"tf":1.0},"409":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.4142135623730951},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.4142135623730951},"469":{"tf":1.0},"47":{"tf":2.0},"48":{"tf":1.4142135623730951},"480":{"tf":1.0},"487":{"tf":1.0},"49":{"tf":1.4142135623730951},"490":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.7320508075688772},"64":{"tf":1.7320508075688772},"65":{"tf":1.7320508075688772},"66":{"tf":1.0},"67":{"tf":1.7320508075688772},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"86":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0},"94":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"344":{"tf":1.0}}}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"344":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"104":{"tf":1.0},"48":{"tf":1.0}}}},"df":1,"docs":{"476":{"tf":1.0}},"n":{"d":{"df":1,"docs":{"32":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":4,"docs":{"161":{"tf":1.0},"188":{"tf":1.0},"195":{"tf":1.0},"338":{"tf":1.0}},"u":{"a":{"df":0,"docs":{},"g":{"df":17,"docs":{"213":{"tf":1.0},"244":{"tf":1.0},"334":{"tf":1.4142135623730951},"338":{"tf":1.0},"344":{"tf":1.4142135623730951},"347":{"tf":1.0},"36":{"tf":1.0},"454":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0},"457":{"tf":1.4142135623730951},"458":{"tf":1.0},"469":{"tf":1.4142135623730951},"494":{"tf":1.0},"496":{"tf":1.7320508075688772},"519":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"g":{"df":7,"docs":{"109":{"tf":1.0},"281":{"tf":1.0},"350":{"tf":1.0},"356":{"tf":1.0},"365":{"tf":1.4142135623730951},"366":{"tf":1.0},"377":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"144":{"tf":1.0},"231":{"tf":1.0},"324":{"tf":1.0},"381":{"tf":1.0},"465":{"tf":1.4142135623730951},"497":{"tf":1.4142135623730951},"98":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"361":{"tf":1.0},"372":{"tf":1.4142135623730951},"391":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":14,"docs":{"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"127":{"tf":1.0},"13":{"tf":1.0},"161":{"tf":1.0},"234":{"tf":1.0},"238":{"tf":1.0},"250":{"tf":1.0},"324":{"tf":1.0},"327":{"tf":1.0},"500":{"tf":1.0},"96":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"179":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0},"372":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":13,"docs":{"238":{"tf":1.4142135623730951},"241":{"tf":2.449489742783178},"247":{"tf":1.0},"255":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"289":{"tf":1.4142135623730951},"290":{"tf":1.4142135623730951},"291":{"tf":1.0},"500":{"tf":1.0},"66":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"270":{"tf":1.4142135623730951}}}}}},"z":{"df":0,"docs":{},"i":{"df":6,"docs":{"279":{"tf":1.0},"323":{"tf":1.4142135623730951},"327":{"tf":1.0},"400":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"100":{"tf":1.0}}}}}}},"df":2,"docs":{"0":{"tf":1.0},"47":{"tf":1.0}},"e":{"a":{"d":{"df":2,"docs":{"113":{"tf":1.0},"231":{"tf":1.0}}},"df":0,"docs":{},"k":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"*":{"*":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"501":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"n":{"df":21,"docs":{"101":{"tf":1.0},"102":{"tf":1.0},"104":{"tf":1.0},"120":{"tf":1.4142135623730951},"130":{"tf":1.0},"197":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"231":{"tf":1.0},"238":{"tf":1.4142135623730951},"334":{"tf":1.0},"338":{"tf":1.4142135623730951},"343":{"tf":1.0},"460":{"tf":1.4142135623730951},"494":{"tf":1.0},"502":{"tf":2.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"76":{"tf":1.0},"80":{"tf":1.0},"96":{"tf":1.4142135623730951}}}},"v":{"df":2,"docs":{"104":{"tf":1.0},"351":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"28":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"334":{"tf":1.0},"344":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"104":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":9,"docs":{"191":{"tf":1.0},"244":{"tf":1.0},"255":{"tf":1.4142135623730951},"314":{"tf":1.4142135623730951},"321":{"tf":1.0},"324":{"tf":2.0},"327":{"tf":1.4142135623730951},"396":{"tf":1.4142135623730951},"96":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"220":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}},"h":{"df":1,"docs":{"448":{"tf":1.0}}},"i":{"b":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":10,"docs":{"124":{"tf":1.0},"165":{"tf":1.0},"209":{"tf":1.4142135623730951},"235":{"tf":1.4142135623730951},"255":{"tf":1.4142135623730951},"260":{"tf":1.4142135623730951},"351":{"tf":1.0},"353":{"tf":1.0},"66":{"tf":1.4142135623730951},"92":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"202":{"tf":1.0},"316":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":15,"docs":{"109":{"tf":1.0},"200":{"tf":1.4142135623730951},"238":{"tf":2.23606797749979},"314":{"tf":1.0},"333":{"tf":1.0},"338":{"tf":1.0},"343":{"tf":1.0},"351":{"tf":1.0},"492":{"tf":1.7320508075688772},"500":{"tf":1.7320508075688772},"501":{"tf":1.4142135623730951},"502":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.0},"99":{"tf":1.4142135623730951}}}}},"n":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"(":{")":{".":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"|":{"c":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"(":{"\\"":{"c":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"324":{"tf":1.0}},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"324":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":2.0}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"124":{"tf":1.0}}}},"df":4,"docs":{"257":{"tf":1.4142135623730951},"296":{"tf":1.0},"324":{"tf":2.449489742783178},"66":{"tf":1.0}}},"k":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"12":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":35,"docs":{"101":{"tf":1.0},"116":{"tf":1.0},"12":{"tf":1.4142135623730951},"125":{"tf":1.0},"137":{"tf":1.4142135623730951},"151":{"tf":1.0},"199":{"tf":2.0},"217":{"tf":1.0},"218":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.0},"238":{"tf":1.4142135623730951},"240":{"tf":1.0},"241":{"tf":1.7320508075688772},"250":{"tf":1.7320508075688772},"251":{"tf":1.0},"257":{"tf":1.0},"264":{"tf":1.0},"318":{"tf":1.0},"35":{"tf":2.0},"36":{"tf":1.4142135623730951},"44":{"tf":2.23606797749979},"458":{"tf":1.7320508075688772},"461":{"tf":1.0},"462":{"tf":1.4142135623730951},"466":{"tf":1.0},"471":{"tf":2.0},"480":{"tf":1.4142135623730951},"495":{"tf":1.0},"518":{"tf":1.4142135623730951},"53":{"tf":1.0},"56":{"tf":1.0},"7":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951},"98":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"/":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"162":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"262":{"tf":1.0},"373":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":7,"docs":{"199":{"tf":1.0},"223":{"tf":1.4142135623730951},"257":{"tf":1.4142135623730951},"258":{"tf":1.0},"324":{"tf":1.0},"494":{"tf":1.0},"497":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":4,"docs":{"104":{"tf":1.0},"141":{"tf":1.0},"2":{"tf":1.0},"38":{"tf":1.4142135623730951}}}}},"o":{"a":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"139":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"<":{"df":0,"docs":{},"p":{"df":1,"docs":{"335":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"262":{"tf":1.0},"373":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":10,"docs":{"139":{"tf":1.0},"234":{"tf":1.0},"241":{"tf":1.0},"267":{"tf":1.4142135623730951},"278":{"tf":1.0},"279":{"tf":1.4142135623730951},"303":{"tf":1.0},"327":{"tf":1.0},"335":{"tf":1.0},"339":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"345":{"tf":1.0}}}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{"df":35,"docs":{"101":{"tf":1.0},"109":{"tf":1.0},"135":{"tf":2.0},"151":{"tf":1.0},"157":{"tf":1.0},"167":{"tf":1.0},"181":{"tf":1.4142135623730951},"182":{"tf":1.0},"2":{"tf":1.7320508075688772},"257":{"tf":1.0},"263":{"tf":1.0},"269":{"tf":1.0},"281":{"tf":1.0},"289":{"tf":1.4142135623730951},"350":{"tf":1.4142135623730951},"351":{"tf":1.7320508075688772},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.7320508075688772},"356":{"tf":1.7320508075688772},"359":{"tf":1.7320508075688772},"361":{"tf":1.7320508075688772},"368":{"tf":1.4142135623730951},"369":{"tf":2.0},"371":{"tf":1.4142135623730951},"380":{"tf":1.4142135623730951},"432":{"tf":1.7320508075688772},"489":{"tf":1.0},"49":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"63":{"tf":1.4142135623730951},"65":{"tf":1.0},"86":{"tf":1.7320508075688772},"90":{"tf":1.0}}},"t":{"df":9,"docs":{"140":{"tf":1.0},"171":{"tf":1.0},"218":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{},"k":{"df":4,"docs":{"238":{"tf":1.0},"247":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":7,"docs":{"177":{"tf":1.4142135623730951},"191":{"tf":1.4142135623730951},"244":{"tf":1.0},"390":{"tf":1.0},"502":{"tf":1.0},"76":{"tf":1.0},"88":{"tf":1.0}},"i":{"c":{"df":5,"docs":{"231":{"tf":1.0},"241":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.0},"405":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"\'":{"df":1,"docs":{"95":{"tf":1.0}}},".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":2,"docs":{"204":{"tf":1.0},"259":{"tf":1.4142135623730951}}}}},"/":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"257":{"tf":1.0}}}}}}},"\\\\":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"498":{"tf":1.0}}}}}}}}}},"df":60,"docs":{"100":{"tf":1.7320508075688772},"124":{"tf":1.0},"136":{"tf":1.0},"151":{"tf":1.0},"204":{"tf":2.23606797749979},"231":{"tf":1.4142135623730951},"24":{"tf":1.0},"257":{"tf":1.0},"259":{"tf":1.4142135623730951},"276":{"tf":1.4142135623730951},"313":{"tf":1.7320508075688772},"314":{"tf":2.23606797749979},"315":{"tf":1.0},"316":{"tf":1.4142135623730951},"317":{"tf":1.4142135623730951},"318":{"tf":1.4142135623730951},"319":{"tf":1.4142135623730951},"320":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.7320508075688772},"324":{"tf":2.23606797749979},"325":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.4142135623730951},"329":{"tf":1.0},"330":{"tf":2.0},"393":{"tf":1.0},"394":{"tf":1.7320508075688772},"395":{"tf":1.0},"396":{"tf":2.23606797749979},"397":{"tf":1.0},"398":{"tf":1.0},"399":{"tf":1.0},"400":{"tf":1.0},"401":{"tf":1.4142135623730951},"402":{"tf":1.0},"403":{"tf":1.0},"404":{"tf":1.4142135623730951},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":2.0},"408":{"tf":1.0},"409":{"tf":1.4142135623730951},"410":{"tf":1.0},"411":{"tf":1.0},"412":{"tf":1.4142135623730951},"413":{"tf":1.0},"467":{"tf":2.0},"480":{"tf":1.0},"482":{"tf":1.7320508075688772},"498":{"tf":1.4142135623730951},"499":{"tf":1.0},"502":{"tf":1.4142135623730951},"63":{"tf":2.0},"67":{"tf":1.0},"91":{"tf":1.0},"94":{"tf":1.7320508075688772},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"324":{"tf":1.4142135623730951},"407":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"324":{"tf":1.4142135623730951},"407":{"tf":1.0}}}}}}}}}}}},"o":{"df":0,"docs":{},"k":{"df":3,"docs":{"129":{"tf":1.0},"247":{"tf":1.0},"466":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"279":{"tf":1.0}}}}},"p":{"df":1,"docs":{"356":{"tf":1.0}}},"s":{"df":1,"docs":{"157":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":5,"docs":{"130":{"tf":1.0},"314":{"tf":1.0},"367":{"tf":1.0},"396":{"tf":1.0},"409":{"tf":1.0}}},"s":{"df":1,"docs":{"391":{"tf":1.0}}},"t":{"df":5,"docs":{"104":{"tf":1.4142135623730951},"115":{"tf":1.0},"117":{"tf":1.0},"396":{"tf":1.0},"48":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"241":{"tf":1.0}}}},"s":{"df":4,"docs":{"143":{"tf":1.0},"448":{"tf":1.0},"475":{"tf":1.0},"476":{"tf":1.0}},"p":{"df":2,"docs":{"338":{"tf":1.4142135623730951},"345":{"tf":1.0}}}}},"m":{"a":{"c":{"df":1,"docs":{"39":{"tf":1.0}},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"351":{"tf":1.0}}}}},"o":{"df":1,"docs":{"162":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":4,"docs":{"240":{"tf":1.0},"463":{"tf":1.0},"465":{"tf":1.0},"494":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"255":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"138":{"tf":1.0},"404":{"tf":1.0},"46":{"tf":1.0},"473":{"tf":1.4142135623730951},"480":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"162":{"tf":1.0},"259":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"156":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":3,"docs":{"156":{"tf":1.0},"338":{"tf":1.0},"73":{"tf":1.0}}}}},"k":{"df":0,"docs":{},"e":{"df":10,"docs":{"106":{"tf":1.4142135623730951},"115":{"tf":1.0},"116":{"tf":1.0},"222":{"tf":1.0},"251":{"tf":1.0},"373":{"tf":1.0},"46":{"tf":1.0},"473":{"tf":1.0},"477":{"tf":1.0},"59":{"tf":1.0}}}},"n":{"a":{"df":0,"docs":{},"g":{"df":12,"docs":{"124":{"tf":1.0},"157":{"tf":1.0},"161":{"tf":1.0},"205":{"tf":1.0},"257":{"tf":1.4142135623730951},"365":{"tf":1.0},"368":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"446":{"tf":1.0},"502":{"tf":1.0},"98":{"tf":1.0}}}},"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"133":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":1,"docs":{"316":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"344":{"tf":1.0}}}}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":10,"docs":{"108":{"tf":1.0},"179":{"tf":1.0},"289":{"tf":1.0},"347":{"tf":1.0},"366":{"tf":1.0},"372":{"tf":1.0},"383":{"tf":1.0},"388":{"tf":1.0},"413":{"tf":1.0},"475":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"|":{"df":1,"docs":{"139":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"k":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":42,"docs":{"100":{"tf":2.23606797749979},"107":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.4142135623730951},"140":{"tf":1.0},"143":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"202":{"tf":1.4142135623730951},"217":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"30":{"tf":1.0},"31":{"tf":1.0},"314":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":1.4142135623730951},"323":{"tf":1.4142135623730951},"324":{"tf":2.0},"330":{"tf":1.0},"366":{"tf":1.0},"379":{"tf":1.0},"39":{"tf":2.0},"396":{"tf":1.0},"397":{"tf":1.0},"399":{"tf":1.0},"4":{"tf":2.0},"400":{"tf":1.4142135623730951},"405":{"tf":1.0},"407":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"49":{"tf":1.0},"493":{"tf":1.0},"498":{"tf":1.0},"52":{"tf":1.0},"63":{"tf":1.4142135623730951},"65":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}},"df":0,"docs":{}}},"t":{"c":{"df":0,"docs":{},"h":{"df":12,"docs":{"108":{"tf":1.0},"133":{"tf":1.0},"142":{"tf":1.4142135623730951},"285":{"tf":1.0},"293":{"tf":1.4142135623730951},"295":{"tf":1.0},"296":{"tf":1.4142135623730951},"308":{"tf":1.0},"326":{"tf":1.0},"354":{"tf":1.0},"500":{"tf":1.0},"90":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{"!":{"(":{"b":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"344":{"tf":1.0}}}}},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":6,"docs":{"492":{"tf":1.0},"495":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0},"512":{"tf":1.0}}}}}}},"y":{"b":{"df":1,"docs":{"115":{"tf":1.0}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"p":{"/":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"330":{"tf":1.0},"407":{"tf":1.0}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"266":{"tf":1.0},"293":{"tf":1.0}}}}}}}},"df":78,"docs":{"100":{"tf":1.0},"105":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"151":{"tf":1.0},"165":{"tf":1.4142135623730951},"174":{"tf":1.7320508075688772},"183":{"tf":1.0},"184":{"tf":1.7320508075688772},"185":{"tf":1.4142135623730951},"191":{"tf":1.4142135623730951},"192":{"tf":1.0},"205":{"tf":1.7320508075688772},"225":{"tf":1.0},"231":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"252":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":2.0},"266":{"tf":1.0},"275":{"tf":1.7320508075688772},"278":{"tf":1.0},"293":{"tf":1.0},"326":{"tf":1.4142135623730951},"407":{"tf":1.0},"414":{"tf":1.7320508075688772},"445":{"tf":2.0},"446":{"tf":2.23606797749979},"447":{"tf":1.0},"448":{"tf":2.449489742783178},"449":{"tf":1.7320508075688772},"450":{"tf":1.0},"451":{"tf":1.4142135623730951},"452":{"tf":1.0},"453":{"tf":1.0},"454":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0},"457":{"tf":1.0},"458":{"tf":1.0},"459":{"tf":1.0},"460":{"tf":1.0},"461":{"tf":1.0},"462":{"tf":1.0},"463":{"tf":1.4142135623730951},"464":{"tf":1.0},"465":{"tf":1.0},"466":{"tf":1.0},"467":{"tf":1.0},"468":{"tf":1.0},"469":{"tf":1.0},"470":{"tf":1.0},"471":{"tf":1.0},"472":{"tf":1.0},"473":{"tf":1.0},"474":{"tf":1.0},"475":{"tf":2.449489742783178},"476":{"tf":1.0},"477":{"tf":1.4142135623730951},"478":{"tf":1.0},"479":{"tf":1.4142135623730951},"480":{"tf":1.4142135623730951},"485":{"tf":1.7320508075688772},"486":{"tf":1.7320508075688772},"487":{"tf":1.4142135623730951},"489":{"tf":1.7320508075688772},"49":{"tf":1.0},"490":{"tf":1.4142135623730951},"521":{"tf":1.4142135623730951},"53":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":2.0},"92":{"tf":1.7320508075688772},"97":{"tf":1.0},"99":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"185":{"tf":1.0},"449":{"tf":1.0},"490":{"tf":1.0}}}}}}}}}},"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":14,"docs":{"0":{"tf":1.0},"10":{"tf":1.7320508075688772},"11":{"tf":1.0},"12":{"tf":1.7320508075688772},"124":{"tf":1.0},"13":{"tf":1.4142135623730951},"2":{"tf":1.7320508075688772},"3":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":2.23606797749979},"43":{"tf":1.0},"45":{"tf":1.0},"67":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":4,"docs":{"143":{"tf":1.0},"203":{"tf":1.0},"215":{"tf":1.0},"371":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"n":{"df":10,"docs":{"111":{"tf":1.0},"350":{"tf":1.0},"514":{"tf":1.0},"56":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":6,"docs":{"20":{"tf":1.0},"291":{"tf":1.4142135623730951},"368":{"tf":1.0},"372":{"tf":1.0},"378":{"tf":1.4142135623730951},"392":{"tf":1.0}}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"281":{"tf":1.0},"376":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":10,"docs":{"104":{"tf":1.4142135623730951},"116":{"tf":1.0},"220":{"tf":1.0},"234":{"tf":1.0},"238":{"tf":1.4142135623730951},"250":{"tf":1.0},"460":{"tf":1.7320508075688772},"72":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.7320508075688772}}}},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"104":{"tf":1.0},"121":{"tf":1.0},"229":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":20,"docs":{"122":{"tf":1.0},"177":{"tf":1.4142135623730951},"190":{"tf":1.0},"20":{"tf":1.0},"200":{"tf":1.0},"255":{"tf":1.0},"262":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"287":{"tf":1.0},"289":{"tf":1.0},"291":{"tf":1.4142135623730951},"292":{"tf":1.0},"295":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.4142135623730951},"334":{"tf":1.0},"380":{"tf":1.0},"428":{"tf":1.7320508075688772},"501":{"tf":1.0}}},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"262":{"tf":1.0},"373":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"466":{"tf":1.0},"76":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"g":{"df":12,"docs":{"107":{"tf":1.7320508075688772},"136":{"tf":1.7320508075688772},"141":{"tf":1.7320508075688772},"151":{"tf":1.0},"274":{"tf":1.0},"291":{"tf":2.23606797749979},"334":{"tf":1.0},"369":{"tf":1.0},"371":{"tf":1.0},"380":{"tf":1.0},"383":{"tf":1.0},"93":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"274":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"291":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}},"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"12":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"139":{"tf":1.4142135623730951},"237":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.0},"515":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":13,"docs":{"100":{"tf":1.0},"137":{"tf":1.0},"261":{"tf":1.4142135623730951},"270":{"tf":1.0},"279":{"tf":1.0},"308":{"tf":1.0},"314":{"tf":1.0},"357":{"tf":1.0},"411":{"tf":1.7320508075688772},"502":{"tf":1.0},"89":{"tf":1.0},"94":{"tf":1.0},"98":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"d":{"df":26,"docs":{"163":{"tf":1.4142135623730951},"164":{"tf":1.4142135623730951},"165":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"249":{"tf":1.0},"324":{"tf":1.0},"325":{"tf":1.0},"407":{"tf":1.0},"416":{"tf":1.7320508075688772},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.4142135623730951},"501":{"tf":1.0},"502":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.0},"514":{"tf":1.0},"517":{"tf":1.0},"518":{"tf":1.0},"519":{"tf":1.0},"520":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"346":{"tf":1.0},"361":{"tf":1.0},"391":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":11,"docs":{"156":{"tf":1.4142135623730951},"179":{"tf":1.0},"238":{"tf":1.4142135623730951},"321":{"tf":1.0},"328":{"tf":1.4142135623730951},"345":{"tf":1.0},"386":{"tf":1.4142135623730951},"405":{"tf":1.0},"413":{"tf":1.0},"460":{"tf":1.7320508075688772},"465":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"179":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"352":{"tf":1.0},"356":{"tf":1.0},"367":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"140":{"tf":1.0}},"u":{"df":0,"docs":{},"m":{"df":3,"docs":{"308":{"tf":1.0},"492":{"tf":1.0},"495":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"df":8,"docs":{"118":{"tf":1.0},"16":{"tf":1.0},"194":{"tf":1.0},"234":{"tf":1.4142135623730951},"241":{"tf":1.4142135623730951},"247":{"tf":1.0},"380":{"tf":1.0},"447":{"tf":1.4142135623730951}}}}},"s":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"357":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"337":{"tf":1.0},"353":{"tf":1.0},"357":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":6,"docs":{"113":{"tf":1.0},"296":{"tf":1.0},"337":{"tf":1.0},"476":{"tf":1.0},"514":{"tf":1.0},"515":{"tf":1.0}}},"t":{"a":{"df":0,"docs":{},"k":{"df":3,"docs":{"104":{"tf":1.0},"113":{"tf":1.0},"332":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":3,"docs":{"338":{"tf":2.8284271247461903},"357":{"tf":1.7320508075688772},"372":{"tf":1.7320508075688772}}}}},"x":{"df":2,"docs":{"285":{"tf":1.0},"357":{"tf":1.0}}}},"k":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":4,"docs":{"171":{"tf":1.0},"213":{"tf":1.0},"244":{"tf":1.0},"304":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"d":{"df":1,"docs":{"329":{"tf":1.0}},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"291":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}},"df":10,"docs":{"155":{"tf":1.0},"174":{"tf":1.0},"19":{"tf":1.0},"257":{"tf":1.0},"259":{"tf":1.0},"285":{"tf":1.0},"289":{"tf":2.23606797749979},"290":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"352":{"tf":1.0}},"l":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"(":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{"!":{"[":{"\\"":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":1,"docs":{"351":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"351":{"tf":1.0},"354":{"tf":1.0}},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"263":{"tf":1.0},"354":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"354":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":38,"docs":{"100":{"tf":1.0},"109":{"tf":1.0},"146":{"tf":1.0},"17":{"tf":1.0},"181":{"tf":1.0},"182":{"tf":1.0},"258":{"tf":1.0},"261":{"tf":1.4142135623730951},"278":{"tf":1.0},"282":{"tf":1.4142135623730951},"283":{"tf":1.7320508075688772},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"292":{"tf":1.0},"316":{"tf":1.0},"324":{"tf":1.4142135623730951},"328":{"tf":1.0},"330":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"351":{"tf":1.7320508075688772},"352":{"tf":1.0},"354":{"tf":2.6457513110645907},"356":{"tf":1.0},"357":{"tf":2.0},"360":{"tf":1.0},"362":{"tf":1.0},"399":{"tf":1.4142135623730951},"445":{"tf":1.0},"446":{"tf":1.0},"486":{"tf":1.0},"502":{"tf":1.0},"66":{"tf":1.0},"73":{"tf":1.0},"88":{"tf":1.4142135623730951},"92":{"tf":1.0},"98":{"tf":1.0}},"s":{"/":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"407":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"104":{"tf":1.0}}}},"s":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"307":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"307":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"324":{"tf":1.4142135623730951}},"i":{"df":7,"docs":{"202":{"tf":1.0},"261":{"tf":1.0},"321":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.4142135623730951},"487":{"tf":1.0},"497":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"l":{"df":13,"docs":{"207":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"278":{"tf":1.0},"291":{"tf":1.0},"325":{"tf":1.0},"462":{"tf":1.0},"466":{"tf":2.0},"55":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"81":{"tf":1.0}},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"237":{"tf":1.0},"238":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"346":{"tf":1.4142135623730951},"361":{"tf":1.4142135623730951},"391":{"tf":1.4142135623730951}}}}}},"t":{"df":0,"docs":{},"h":{"df":9,"docs":{"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"144":{"tf":1.0},"231":{"tf":1.7320508075688772},"234":{"tf":1.0},"247":{"tf":1.0},"250":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":9,"docs":{"117":{"tf":1.0},"231":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0},"330":{"tf":1.0},"343":{"tf":1.0},"353":{"tf":1.0},"368":{"tf":1.0},"479":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"102":{"tf":1.0},"103":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":8,"docs":{"110":{"tf":1.4142135623730951},"144":{"tf":1.0},"281":{"tf":1.0},"373":{"tf":1.0},"390":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"63":{"tf":1.0},"85":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"l":{"df":9,"docs":{"233":{"tf":1.0},"249":{"tf":1.0},"285":{"tf":1.0},"350":{"tf":1.0},"353":{"tf":1.0},"357":{"tf":1.0},"460":{"tf":1.4142135623730951},"63":{"tf":1.0},"85":{"tf":1.0}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":1,"docs":{"241":{"tf":1.0}}}},"df":4,"docs":{"273":{"tf":1.0},"276":{"tf":1.0},"324":{"tf":4.69041575982343},"325":{"tf":1.4142135623730951}}}}},"n":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"502":{"tf":1.0}}}},"df":0,"docs":{}},"2":{"df":1,"docs":{"492":{"tf":1.0}}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}},"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":20,"docs":{"140":{"tf":1.7320508075688772},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"212":{"tf":1.0},"213":{"tf":1.0},"244":{"tf":1.0},"261":{"tf":1.0},"262":{"tf":1.4142135623730951},"290":{"tf":1.0},"292":{"tf":1.0},"296":{"tf":1.0},"307":{"tf":1.0},"326":{"tf":1.0},"333":{"tf":1.0},"337":{"tf":1.0},"373":{"tf":1.0},"493":{"tf":1.0},"51":{"tf":1.0},"511":{"tf":1.0},"89":{"tf":1.0}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":4,"docs":{"178":{"tf":1.0},"369":{"tf":1.0},"377":{"tf":1.0},"390":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"142":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":14,"docs":{"107":{"tf":1.4142135623730951},"108":{"tf":1.4142135623730951},"137":{"tf":1.4142135623730951},"157":{"tf":1.0},"333":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"385":{"tf":1.0},"47":{"tf":1.0},"494":{"tf":1.0},"53":{"tf":1.7320508075688772},"63":{"tf":1.0},"64":{"tf":1.0},"73":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"105":{"tf":1.0},"217":{"tf":1.0},"454":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0},"457":{"tf":1.0},"458":{"tf":1.0},"469":{"tf":1.4142135623730951}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":8,"docs":{"169":{"tf":1.0},"196":{"tf":1.0},"2":{"tf":1.0},"28":{"tf":1.0},"31":{"tf":1.0},"36":{"tf":1.0},"4":{"tf":1.0},"450":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"l":{"df":4,"docs":{"298":{"tf":1.0},"300":{"tf":1.0},"310":{"tf":1.0},"335":{"tf":1.0}}}},"df":1,"docs":{"324":{"tf":2.449489742783178}},"e":{"df":0,"docs":{},"e":{"d":{"df":39,"docs":{"101":{"tf":1.0},"142":{"tf":1.0},"157":{"tf":1.0},"198":{"tf":1.0},"210":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.0},"233":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.4142135623730951},"238":{"tf":1.4142135623730951},"240":{"tf":1.0},"244":{"tf":1.0},"246":{"tf":1.0},"249":{"tf":1.0},"250":{"tf":1.7320508075688772},"251":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"323":{"tf":1.4142135623730951},"324":{"tf":1.0},"330":{"tf":1.0},"343":{"tf":1.0},"365":{"tf":1.4142135623730951},"368":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.4142135623730951},"383":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"456":{"tf":1.0},"46":{"tf":1.0},"460":{"tf":1.0},"494":{"tf":1.4142135623730951},"73":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0}}},"df":0,"docs":{}},"g":{"df":5,"docs":{"338":{"tf":1.4142135623730951},"357":{"tf":1.4142135623730951},"372":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"73":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":17,"docs":{"238":{"tf":1.0},"295":{"tf":1.0},"314":{"tf":1.0},"316":{"tf":1.0},"321":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.7320508075688772},"327":{"tf":1.0},"329":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"396":{"tf":1.0},"398":{"tf":1.0},"401":{"tf":1.0},"404":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}}},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":5,"docs":{"352":{"tf":1.0},"356":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"371":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":4,"docs":{"339":{"tf":1.4142135623730951},"358":{"tf":1.4142135623730951},"373":{"tf":1.4142135623730951},"406":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"127":{"tf":1.0},"231":{"tf":1.0},"244":{"tf":1.0},"306":{"tf":1.4142135623730951},"496":{"tf":1.0},"74":{"tf":1.0}}}}},"w":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"354":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":30,"docs":{"104":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"121":{"tf":1.0},"133":{"tf":1.0},"138":{"tf":1.0},"141":{"tf":1.0},"229":{"tf":1.4142135623730951},"230":{"tf":1.0},"231":{"tf":1.7320508075688772},"237":{"tf":1.0},"238":{"tf":1.0},"249":{"tf":1.0},"250":{"tf":1.0},"301":{"tf":1.0},"31":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"321":{"tf":1.0},"324":{"tf":1.0},"325":{"tf":1.0},"356":{"tf":1.0},"36":{"tf":1.0},"405":{"tf":1.0},"413":{"tf":1.4142135623730951},"493":{"tf":1.0},"501":{"tf":1.0},"518":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"68":{"tf":1.0}}},"x":{"df":0,"docs":{},"t":{"df":14,"docs":{"102":{"tf":1.4142135623730951},"158":{"tf":1.4142135623730951},"192":{"tf":1.4142135623730951},"210":{"tf":1.0},"211":{"tf":1.4142135623730951},"237":{"tf":1.0},"252":{"tf":1.4142135623730951},"282":{"tf":1.4142135623730951},"330":{"tf":1.0},"348":{"tf":1.0},"363":{"tf":1.0},"393":{"tf":1.0},"479":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"\'":{"df":1,"docs":{"308":{"tf":1.0}}},":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"304":{"tf":1.0}}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"304":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":50,"docs":{"109":{"tf":1.0},"134":{"tf":1.4142135623730951},"147":{"tf":1.0},"151":{"tf":1.0},"154":{"tf":1.4142135623730951},"161":{"tf":1.4142135623730951},"170":{"tf":1.7320508075688772},"188":{"tf":2.23606797749979},"19":{"tf":1.0},"195":{"tf":1.4142135623730951},"266":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"27":{"tf":1.0},"280":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.4142135623730951},"287":{"tf":1.0},"292":{"tf":1.4142135623730951},"295":{"tf":1.7320508075688772},"299":{"tf":1.7320508075688772},"300":{"tf":1.0},"304":{"tf":3.7416573867739413},"309":{"tf":1.0},"311":{"tf":1.0},"331":{"tf":1.7320508075688772},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":2.449489742783178},"335":{"tf":2.6457513110645907},"336":{"tf":1.0},"337":{"tf":1.7320508075688772},"338":{"tf":2.449489742783178},"339":{"tf":1.4142135623730951},"340":{"tf":1.0},"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"345":{"tf":2.0},"346":{"tf":1.4142135623730951},"347":{"tf":1.7320508075688772},"348":{"tf":1.0},"354":{"tf":1.4142135623730951},"363":{"tf":1.0},"421":{"tf":1.7320508075688772},"463":{"tf":1.0},"51":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"89":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"104":{"tf":1.0},"115":{"tf":1.0}}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"e":{".":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"324":{"tf":1.0},"396":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"272":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"273":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"(":{"\\"":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"402":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"t":{"a":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"325":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"325":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"272":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"272":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"407":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"407":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"273":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"i":{"d":{"df":3,"docs":{"323":{"tf":1.0},"401":{"tf":1.0},"512":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":2,"docs":{"261":{"tf":1.0},"264":{"tf":1.0}}}}}},"df":47,"docs":{"136":{"tf":1.0},"15":{"tf":1.0},"199":{"tf":2.0},"201":{"tf":2.449489742783178},"202":{"tf":1.0},"217":{"tf":1.0},"223":{"tf":2.0},"257":{"tf":2.23606797749979},"258":{"tf":1.0},"261":{"tf":2.23606797749979},"264":{"tf":1.4142135623730951},"27":{"tf":1.0},"279":{"tf":1.4142135623730951},"281":{"tf":1.7320508075688772},"314":{"tf":1.0},"321":{"tf":1.7320508075688772},"323":{"tf":1.4142135623730951},"324":{"tf":3.4641016151377544},"325":{"tf":2.23606797749979},"327":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.0},"357":{"tf":1.0},"365":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"367":{"tf":1.0},"371":{"tf":1.4142135623730951},"379":{"tf":1.0},"380":{"tf":1.0},"399":{"tf":1.7320508075688772},"404":{"tf":1.0},"407":{"tf":1.4142135623730951},"409":{"tf":2.0},"463":{"tf":2.23606797749979},"480":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"495":{"tf":2.0},"497":{"tf":1.4142135623730951},"498":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.7320508075688772},"55":{"tf":1.7320508075688772},"56":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.4142135623730951},"90":{"tf":1.0}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"s":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"498":{"tf":1.0}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"261":{"tf":1.0}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":2,"docs":{"261":{"tf":1.0},"324":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"264":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"354":{"tf":1.0}}},"df":0,"docs":{}}},"n":{"df":1,"docs":{"279":{"tf":1.0}},"e":{"df":4,"docs":{"324":{"tf":2.0},"351":{"tf":1.0},"354":{"tf":1.0},"466":{"tf":1.0}}}},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"137":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":2,"docs":{"140":{"tf":1.0},"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":2,"docs":{"143":{"tf":1.4142135623730951},"371":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":62,"docs":{"104":{"tf":1.7320508075688772},"105":{"tf":1.0},"108":{"tf":1.0},"111":{"tf":1.0},"114":{"tf":1.0},"137":{"tf":1.4142135623730951},"142":{"tf":1.0},"143":{"tf":1.4142135623730951},"150":{"tf":1.0},"151":{"tf":1.0},"169":{"tf":1.0},"196":{"tf":1.4142135623730951},"197":{"tf":2.23606797749979},"199":{"tf":1.0},"202":{"tf":1.0},"207":{"tf":2.0},"220":{"tf":1.0},"224":{"tf":1.7320508075688772},"234":{"tf":1.0},"241":{"tf":2.6457513110645907},"247":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"264":{"tf":3.0},"270":{"tf":1.4142135623730951},"369":{"tf":1.0},"371":{"tf":1.0},"413":{"tf":1.4142135623730951},"454":{"tf":1.4142135623730951},"455":{"tf":1.7320508075688772},"458":{"tf":1.4142135623730951},"460":{"tf":1.4142135623730951},"461":{"tf":1.4142135623730951},"462":{"tf":2.0},"466":{"tf":2.0},"470":{"tf":1.0},"471":{"tf":1.4142135623730951},"478":{"tf":1.4142135623730951},"48":{"tf":1.0},"480":{"tf":1.7320508075688772},"492":{"tf":1.4142135623730951},"493":{"tf":2.449489742783178},"495":{"tf":1.4142135623730951},"498":{"tf":1.7320508075688772},"500":{"tf":1.0},"504":{"tf":1.7320508075688772},"518":{"tf":1.0},"52":{"tf":1.4142135623730951},"55":{"tf":1.4142135623730951},"56":{"tf":1.7320508075688772},"64":{"tf":1.4142135623730951},"67":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":2.0},"76":{"tf":1.0},"79":{"tf":1.4142135623730951},"81":{"tf":1.0},"84":{"tf":1.4142135623730951},"86":{"tf":1.0},"93":{"tf":1.7320508075688772},"96":{"tf":1.0},"98":{"tf":1.4142135623730951}},"s":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"220":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"498":{"tf":1.0}}}},"df":0,"docs":{}}},"i":{"c":{"df":1,"docs":{"391":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"379":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"65":{"tf":1.7320508075688772}}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"107":{"tf":1.0},"124":{"tf":1.0},"67":{"tf":1.0}}}}}},"w":{"df":7,"docs":{"130":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"327":{"tf":1.0},"462":{"tf":1.0},"467":{"tf":1.0},"500":{"tf":1.0},"96":{"tf":1.0}}}},"s":{"df":1,"docs":{"179":{"tf":1.0}}},"u":{"df":4,"docs":{"162":{"tf":1.0},"179":{"tf":1.0},"204":{"tf":1.0},"214":{"tf":1.7320508075688772}},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"291":{"tf":1.0},"296":{"tf":1.0}}}},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":7,"docs":{"308":{"tf":1.0},"346":{"tf":1.0},"492":{"tf":1.4142135623730951},"495":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"350":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":8,"docs":{"155":{"tf":1.4142135623730951},"162":{"tf":1.0},"214":{"tf":1.4142135623730951},"255":{"tf":1.0},"259":{"tf":1.4142135623730951},"444":{"tf":1.7320508075688772},"496":{"tf":1.0},"66":{"tf":1.4142135623730951}}}}}}}},"o":{"(":{"1":{"df":1,"docs":{"279":{"tf":1.0}}},"df":0,"docs":{},"n":{"df":2,"docs":{"279":{"tf":1.0},"502":{"tf":1.4142135623730951}}}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":16,"docs":{"203":{"tf":1.0},"238":{"tf":1.0},"323":{"tf":1.0},"326":{"tf":1.0},"401":{"tf":1.0},"463":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":2,"docs":{"55":{"tf":1.0},"72":{"tf":1.0}}}}},"i":{"d":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"n":{"df":6,"docs":{"124":{"tf":1.0},"136":{"tf":1.0},"151":{"tf":1.0},"483":{"tf":1.7320508075688772},"64":{"tf":2.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"c":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"0":{"tf":1.0},"47":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":4,"docs":{"240":{"tf":1.0},"241":{"tf":1.4142135623730951},"330":{"tf":1.0},"360":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":16,"docs":{"135":{"tf":1.4142135623730951},"157":{"tf":1.0},"3":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0},"359":{"tf":1.4142135623730951},"365":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"371":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"65":{"tf":1.0},"90":{"tf":1.0}}}}}}},"k":{"(":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"324":{"tf":1.4142135623730951},"325":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"x":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"133":{"tf":1.0},"354":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"133":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"e":{"(":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"354":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"m":{"a":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"354":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"i":{"(":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"354":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":3,"docs":{"293":{"tf":1.0},"303":{"tf":1.4142135623730951},"335":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"354":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"f":{"df":0,"docs":{},"m":{"df":1,"docs":{"324":{"tf":1.0}}}},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"303":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"354":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"303":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"354":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"8":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"335":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"325":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":3,"docs":{"139":{"tf":1.0},"238":{"tf":1.0},"324":{"tf":1.4142135623730951}}},"l":{"d":{"df":4,"docs":{"120":{"tf":1.0},"141":{"tf":1.0},"413":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"199":{"tf":1.0},"495":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"m":{"a":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"=":{"\\"":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"1":{"1":{"4":{"3":{"4":{"df":1,"docs":{"182":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":8,"docs":{"182":{"tf":2.0},"263":{"tf":1.0},"354":{"tf":1.7320508075688772},"359":{"tf":1.7320508075688772},"360":{"tf":1.0},"362":{"tf":1.0},"435":{"tf":1.7320508075688772},"90":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"n":{"b":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"r":{"d":{"df":6,"docs":{"104":{"tf":1.0},"121":{"tf":1.0},"229":{"tf":1.4142135623730951},"231":{"tf":1.0},"251":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"c":{"df":4,"docs":{"105":{"tf":1.0},"251":{"tf":1.0},"292":{"tf":1.0},"339":{"tf":1.0}}},"df":4,"docs":{"110":{"tf":1.0},"136":{"tf":1.0},"316":{"tf":1.4142135623730951},"500":{"tf":1.0}}},"p":{"a":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"148":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"1":{"df":1,"docs":{"134":{"tf":1.0}}},"df":0,"docs":{},"i":{"/":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"u":{"d":{"df":3,"docs":{"135":{"tf":1.0},"281":{"tf":1.0},"356":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},":":{":":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"352":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"=":{"\\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"182":{"tf":1.0}}}}},"df":0,"docs":{}},"df":2,"docs":{"182":{"tf":1.0},"354":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":20,"docs":{"109":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"140":{"tf":1.0},"147":{"tf":1.0},"182":{"tf":2.0},"263":{"tf":1.0},"289":{"tf":1.0},"299":{"tf":1.0},"333":{"tf":1.4142135623730951},"334":{"tf":1.0},"337":{"tf":1.4142135623730951},"352":{"tf":1.4142135623730951},"354":{"tf":1.7320508075688772},"357":{"tf":1.0},"359":{"tf":1.4142135623730951},"360":{"tf":1.0},"362":{"tf":1.0},"433":{"tf":1.7320508075688772},"90":{"tf":1.0}}}},"df":9,"docs":{"2":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"3":{"tf":1.0},"38":{"tf":1.0},"46":{"tf":1.0},"467":{"tf":1.0},"498":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":10,"docs":{"208":{"tf":1.0},"231":{"tf":1.4142135623730951},"247":{"tf":1.0},"257":{"tf":1.0},"277":{"tf":1.0},"280":{"tf":1.0},"321":{"tf":1.0},"487":{"tf":1.0},"496":{"tf":1.0},"98":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"233":{"tf":1.0}}}}}}},"t":{"df":5,"docs":{"328":{"tf":1.4142135623730951},"388":{"tf":1.0},"406":{"tf":1.0},"413":{"tf":1.0},"97":{"tf":1.0}},"i":{"df":0,"docs":{},"m":{"df":8,"docs":{"137":{"tf":1.0},"142":{"tf":1.4142135623730951},"157":{"tf":1.0},"279":{"tf":1.0},"285":{"tf":1.0},"289":{"tf":2.0},"356":{"tf":1.0},"384":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"<":{"&":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{"<":{"d":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"df":1,"docs":{"138":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"139":{"tf":1.0}}}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.4142135623730951}}}}},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":3,"docs":{"321":{"tf":1.0},"324":{"tf":1.4142135623730951},"398":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":5,"docs":{"321":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0},"330":{"tf":1.0},"399":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":46,"docs":{"1":{"tf":1.0},"12":{"tf":1.4142135623730951},"135":{"tf":1.4142135623730951},"157":{"tf":1.0},"162":{"tf":1.4142135623730951},"167":{"tf":1.0},"170":{"tf":1.4142135623730951},"171":{"tf":1.4142135623730951},"176":{"tf":1.4142135623730951},"180":{"tf":1.4142135623730951},"2":{"tf":1.4142135623730951},"204":{"tf":1.4142135623730951},"212":{"tf":1.0},"215":{"tf":1.0},"225":{"tf":1.0},"269":{"tf":1.0},"28":{"tf":1.0},"287":{"tf":1.7320508075688772},"288":{"tf":1.0},"3":{"tf":1.4142135623730951},"320":{"tf":1.4142135623730951},"321":{"tf":1.4142135623730951},"322":{"tf":1.4142135623730951},"323":{"tf":1.4142135623730951},"324":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.4142135623730951},"332":{"tf":1.0},"333":{"tf":1.7320508075688772},"334":{"tf":1.7320508075688772},"337":{"tf":1.0},"350":{"tf":1.4142135623730951},"351":{"tf":1.4142135623730951},"352":{"tf":1.4142135623730951},"353":{"tf":1.4142135623730951},"354":{"tf":1.0},"357":{"tf":1.0},"366":{"tf":1.4142135623730951},"367":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"372":{"tf":1.7320508075688772},"388":{"tf":1.4142135623730951},"399":{"tf":1.0},"4":{"tf":1.4142135623730951},"407":{"tf":1.0},"413":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"80":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"/":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":2,"docs":{"244":{"tf":2.0},"87":{"tf":1.0}}}}}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"n":{"df":19,"docs":{"105":{"tf":1.0},"110":{"tf":1.4142135623730951},"122":{"tf":1.4142135623730951},"14":{"tf":1.0},"213":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":1.7320508075688772},"269":{"tf":1.4142135623730951},"281":{"tf":1.0},"365":{"tf":1.4142135623730951},"369":{"tf":1.4142135623730951},"371":{"tf":1.7320508075688772},"377":{"tf":1.7320508075688772},"390":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.0},"87":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"z":{"df":4,"docs":{"110":{"tf":1.0},"365":{"tf":1.0},"368":{"tf":1.0},"87":{"tf":1.0}}}}}},"df":1,"docs":{"244":{"tf":1.4142135623730951}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"329":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"\'":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"73":{"tf":1.0},"77":{"tf":1.0}}}}},"d":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"113":{"tf":1.0},"141":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"46":{"tf":1.0},"98":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":8,"docs":{"100":{"tf":1.4142135623730951},"151":{"tf":1.0},"314":{"tf":1.0},"324":{"tf":1.0},"396":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"\'":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{"&":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"(":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":2.23606797749979}}}}}},"df":0,"docs":{}}}}}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"498":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}},"df":12,"docs":{"13":{"tf":1.0},"155":{"tf":1.0},"257":{"tf":1.0},"259":{"tf":1.0},"264":{"tf":1.0},"292":{"tf":1.0},"303":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"335":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":1.0},"498":{"tf":1.0}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":11,"docs":{"101":{"tf":1.0},"104":{"tf":1.0},"138":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"230":{"tf":1.0},"241":{"tf":1.4142135623730951},"247":{"tf":1.0},"258":{"tf":1.0},"291":{"tf":1.0},"70":{"tf":1.0},"93":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":5,"docs":{"289":{"tf":1.0},"322":{"tf":1.0},"358":{"tf":1.0},"405":{"tf":1.0},"410":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"y":{"df":2,"docs":{"285":{"tf":1.0},"289":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"d":{"df":16,"docs":{"110":{"tf":1.4142135623730951},"140":{"tf":1.0},"244":{"tf":1.0},"251":{"tf":1.0},"285":{"tf":1.0},"290":{"tf":1.4142135623730951},"291":{"tf":2.449489742783178},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.0},"369":{"tf":1.0},"74":{"tf":1.0},"82":{"tf":1.0},"88":{"tf":1.0},"91":{"tf":1.0}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"v":{"df":0,"docs":{},"g":{"df":1,"docs":{"27":{"tf":1.0}}}}}},"df":39,"docs":{"102":{"tf":1.0},"158":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"254":{"tf":1.4142135623730951},"255":{"tf":1.4142135623730951},"256":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0},"260":{"tf":1.0},"261":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"264":{"tf":1.0},"265":{"tf":1.0},"266":{"tf":1.0},"267":{"tf":1.0},"268":{"tf":1.0},"269":{"tf":1.0},"270":{"tf":1.0},"271":{"tf":1.0},"272":{"tf":1.0},"273":{"tf":1.0},"274":{"tf":1.0},"275":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"281":{"tf":1.0},"282":{"tf":1.0},"420":{"tf":1.7320508075688772},"430":{"tf":1.7320508075688772},"441":{"tf":1.7320508075688772},"487":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.0}}}}}}}}},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"*":{"*":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"502":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":2,"docs":{"316":{"tf":1.0},"98":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":7,"docs":{"202":{"tf":1.0},"205":{"tf":1.0},"316":{"tf":1.4142135623730951},"502":{"tf":1.4142135623730951},"55":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.4142135623730951}}}}}}}}}}},"p":{"5":{"0":{"df":1,"docs":{"391":{"tf":1.0}}},"df":0,"docs":{}},"9":{"5":{"df":1,"docs":{"391":{"tf":1.0}}},"9":{"df":1,"docs":{"391":{"tf":1.0}}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":6,"docs":{"165":{"tf":1.7320508075688772},"166":{"tf":1.0},"175":{"tf":1.0},"181":{"tf":1.0},"184":{"tf":1.0},"448":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":2,"docs":{"324":{"tf":1.7320508075688772},"398":{"tf":1.0}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{".":{"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":12,"docs":{"27":{"tf":1.0},"28":{"tf":1.0},"31":{"tf":1.4142135623730951},"314":{"tf":1.7320508075688772},"318":{"tf":1.7320508075688772},"32":{"tf":1.0},"324":{"tf":3.3166247903554},"36":{"tf":1.4142135623730951},"398":{"tf":1.0},"40":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"i":{"d":{"df":1,"docs":{"353":{"tf":1.0}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"39":{"tf":1.0}}},"i":{"c":{"df":2,"docs":{"142":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"96":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":22,"docs":{"454":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0},"457":{"tf":1.0},"458":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.4142135623730951},"501":{"tf":1.0},"502":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.0},"514":{"tf":1.0},"515":{"tf":1.0},"517":{"tf":1.0},"518":{"tf":1.0},"519":{"tf":1.0},"520":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"285":{"tf":1.0},"514":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{".":{"a":{"d":{"d":{"_":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"(":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"100":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":5,"docs":{"314":{"tf":1.0},"324":{"tf":2.0},"329":{"tf":1.0},"404":{"tf":1.0},"96":{"tf":1.0}}}}},"s":{"df":19,"docs":{"100":{"tf":1.4142135623730951},"137":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"264":{"tf":1.7320508075688772},"322":{"tf":1.7320508075688772},"323":{"tf":2.0},"324":{"tf":2.6457513110645907},"327":{"tf":1.7320508075688772},"342":{"tf":1.0},"379":{"tf":1.0},"400":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"410":{"tf":1.4142135623730951},"413":{"tf":1.4142135623730951},"514":{"tf":1.0},"97":{"tf":1.4142135623730951}},"e":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"322":{"tf":1.0},"324":{"tf":1.0}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}},"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"97":{"tf":1.0}}}}}}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"327":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":11,"docs":{"207":{"tf":1.0},"264":{"tf":1.4142135623730951},"278":{"tf":1.0},"317":{"tf":1.4142135623730951},"322":{"tf":1.4142135623730951},"324":{"tf":1.0},"330":{"tf":1.0},"400":{"tf":1.4142135623730951},"405":{"tf":1.0},"407":{"tf":1.0},"410":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"223":{"tf":1.0}},"e":{"df":0,"docs":{},"q":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":2,"docs":{"125":{"tf":1.0},"480":{"tf":1.0}}}}},"df":2,"docs":{"352":{"tf":1.0},"65":{"tf":1.0}},"t":{"df":1,"docs":{"502":{"tf":1.0}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"250":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"177":{"tf":1.4142135623730951},"179":{"tf":1.0},"190":{"tf":1.0}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"178":{"tf":1.0}}},"df":0,"docs":{}}}}},"t":{"df":6,"docs":{"104":{"tf":1.0},"123":{"tf":1.0},"247":{"tf":1.0},"251":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"/":{".":{"df":0,"docs":{},"k":{"b":{"df":1,"docs":{"222":{"tf":1.0}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"139":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"k":{"b":{"df":1,"docs":{"490":{"tf":1.0}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":3,"docs":{"170":{"tf":1.0},"185":{"tf":1.0},"449":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":1,"docs":{"204":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"/":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"497":{"tf":1.0}}}},"df":0,"docs":{}}},"df":3,"docs":{"193":{"tf":1.0},"476":{"tf":1.0},"490":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"476":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"/":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"449":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"169":{"tf":1.0},"196":{"tf":1.0},"450":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\\"":{".":{"df":0,"docs":{},"k":{"b":{"df":1,"docs":{"303":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"=":{"\\"":{"$":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"/":{".":{"c":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{":":{"$":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"188":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":14,"docs":{"139":{"tf":1.4142135623730951},"164":{"tf":1.0},"188":{"tf":1.0},"280":{"tf":1.0},"293":{"tf":1.0},"306":{"tf":1.0},"324":{"tf":2.0},"328":{"tf":1.4142135623730951},"386":{"tf":1.4142135623730951},"413":{"tf":1.0},"449":{"tf":1.0},"497":{"tf":1.4142135623730951},"498":{"tf":1.0},"80":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":1,"docs":{"237":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"75":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":77,"docs":{"101":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":1.0},"108":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.7320508075688772},"116":{"tf":1.0},"121":{"tf":1.0},"123":{"tf":1.4142135623730951},"124":{"tf":1.0},"125":{"tf":1.4142135623730951},"137":{"tf":1.0},"141":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"144":{"tf":1.0},"145":{"tf":1.4142135623730951},"169":{"tf":1.0},"171":{"tf":1.0},"196":{"tf":1.4142135623730951},"209":{"tf":2.23606797749979},"230":{"tf":1.0},"235":{"tf":1.4142135623730951},"236":{"tf":1.0},"237":{"tf":2.0},"238":{"tf":2.23606797749979},"241":{"tf":1.7320508075688772},"243":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.4142135623730951},"251":{"tf":1.0},"257":{"tf":1.0},"270":{"tf":1.0},"286":{"tf":1.0},"335":{"tf":1.0},"338":{"tf":1.0},"347":{"tf":1.0},"369":{"tf":1.4142135623730951},"376":{"tf":1.0},"455":{"tf":2.0},"458":{"tf":1.4142135623730951},"461":{"tf":2.0},"463":{"tf":2.23606797749979},"466":{"tf":1.0},"469":{"tf":1.0},"470":{"tf":1.4142135623730951},"473":{"tf":1.0},"48":{"tf":1.0},"492":{"tf":2.0},"493":{"tf":2.23606797749979},"495":{"tf":2.0},"498":{"tf":1.4142135623730951},"504":{"tf":1.0},"507":{"tf":1.0},"509":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.0},"518":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"55":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":2.6457513110645907},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.4142135623730951},"82":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"90":{"tf":1.0},"98":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"270":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"81":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"y":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":5,"docs":{"171":{"tf":1.0},"213":{"tf":1.0},"244":{"tf":1.0},"304":{"tf":1.0},"335":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"234":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":11,"docs":{"110":{"tf":1.4142135623730951},"113":{"tf":1.0},"136":{"tf":1.0},"241":{"tf":1.0},"269":{"tf":1.0},"278":{"tf":1.0},"317":{"tf":1.0},"319":{"tf":1.0},"352":{"tf":1.0},"57":{"tf":1.0},"91":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"124":{"tf":1.0},"238":{"tf":1.0},"366":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":17,"docs":{"198":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.0},"247":{"tf":1.0},"250":{"tf":1.4142135623730951},"279":{"tf":1.4142135623730951},"289":{"tf":1.0},"339":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"371":{"tf":1.4142135623730951},"385":{"tf":1.0},"456":{"tf":1.0},"460":{"tf":1.4142135623730951},"494":{"tf":1.0},"73":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"156":{"tf":1.0}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"139":{"tf":1.0},"280":{"tf":1.0},"477":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"122":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"120":{"tf":1.0},"124":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.0}}}}}}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":11,"docs":{"324":{"tf":2.0},"328":{"tf":2.23606797749979},"330":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"388":{"tf":1.4142135623730951},"389":{"tf":1.4142135623730951},"390":{"tf":1.4142135623730951},"395":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":2.8284271247461903},"413":{"tf":1.0}}}}},"df":2,"docs":{"0":{"tf":1.0},"47":{"tf":1.0}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":34,"docs":{"102":{"tf":1.4142135623730951},"126":{"tf":1.4142135623730951},"130":{"tf":1.4142135623730951},"131":{"tf":1.7320508075688772},"132":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"148":{"tf":1.0},"149":{"tf":1.0},"15":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"154":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"157":{"tf":1.0},"158":{"tf":1.0},"285":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951}}}}}}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"90":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"157":{"tf":1.0},"70":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"155":{"tf":1.0},"337":{"tf":1.0}}}}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"65":{"tf":1.0}}}},"n":{"df":2,"docs":{"500":{"tf":1.4142135623730951},"98":{"tf":1.4142135623730951}},"e":{"df":1,"docs":{"135":{"tf":1.0}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"12":{"tf":1.4142135623730951}}}}}}},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"304":{"tf":1.4142135623730951},"347":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"46":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"151":{"tf":1.0},"39":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"142":{"tf":1.0},"95":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"377":{"tf":1.4142135623730951},"87":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"135":{"tf":1.0},"366":{"tf":1.4142135623730951},"385":{"tf":1.0}}}},"p":{"df":1,"docs":{"324":{"tf":1.0}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"405":{"tf":1.0},"413":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"2":{"tf":1.0},"43":{"tf":2.0}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"120":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"337":{"tf":1.4142135623730951},"356":{"tf":1.4142135623730951},"371":{"tf":1.4142135623730951},"404":{"tf":1.4142135623730951},"73":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"247":{"tf":1.0},"351":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"234":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":3,"docs":{"111":{"tf":1.0},"230":{"tf":1.0},"385":{"tf":1.4142135623730951}}}}}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":17,"docs":{"104":{"tf":1.0},"108":{"tf":1.0},"122":{"tf":1.0},"142":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":1.4142135623730951},"253":{"tf":1.7320508075688772},"305":{"tf":1.4142135623730951},"371":{"tf":1.0},"461":{"tf":1.4142135623730951},"462":{"tf":1.0},"492":{"tf":1.0},"496":{"tf":1.0},"516":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.0},"90":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"492":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":10,"docs":{"104":{"tf":1.4142135623730951},"107":{"tf":1.0},"117":{"tf":1.0},"136":{"tf":1.0},"141":{"tf":1.0},"238":{"tf":1.4142135623730951},"241":{"tf":1.4142135623730951},"371":{"tf":1.0},"52":{"tf":1.0},"93":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"291":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"@":{"1":{"0":{"df":1,"docs":{"361":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":2,"docs":{"303":{"tf":1.0},"357":{"tf":1.0}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"324":{"tf":1.7320508075688772}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"65":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"239":{"tf":1.4142135623730951},"240":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"160":{"tf":1.4142135623730951},"195":{"tf":1.4142135623730951},"415":{"tf":1.7320508075688772},"56":{"tf":1.0},"80":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"295":{"tf":1.0},"324":{"tf":1.0}}}},"r":{"df":0,"docs":{},"v":{"df":20,"docs":{"100":{"tf":1.0},"104":{"tf":1.0},"136":{"tf":1.0},"151":{"tf":1.0},"238":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0},"314":{"tf":1.4142135623730951},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"321":{"tf":1.0},"327":{"tf":1.0},"330":{"tf":1.0},"351":{"tf":1.0},"371":{"tf":1.0},"396":{"tf":1.0},"404":{"tf":1.4142135623730951},"467":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"327":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"s":{"df":1,"docs":{"28":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"332":{"tf":1.0},"337":{"tf":1.0},"502":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"39":{"tf":1.0}}}}}}},"df":2,"docs":{"39":{"tf":2.0},"4":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":2,"docs":{"363":{"tf":1.0},"393":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":23,"docs":{"140":{"tf":1.0},"143":{"tf":1.0},"178":{"tf":1.0},"257":{"tf":1.0},"281":{"tf":1.0},"287":{"tf":1.4142135623730951},"288":{"tf":1.0},"289":{"tf":1.4142135623730951},"291":{"tf":1.7320508075688772},"292":{"tf":1.0},"295":{"tf":1.4142135623730951},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"369":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"456":{"tf":1.0},"494":{"tf":1.0},"51":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":18,"docs":{"101":{"tf":1.4142135623730951},"126":{"tf":1.0},"131":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"152":{"tf":1.4142135623730951},"157":{"tf":1.0},"87":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":11,"docs":{"231":{"tf":1.4142135623730951},"244":{"tf":1.7320508075688772},"329":{"tf":1.0},"369":{"tf":1.0},"401":{"tf":1.0},"496":{"tf":1.4142135623730951},"500":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772},"88":{"tf":1.7320508075688772},"96":{"tf":1.4142135623730951},"99":{"tf":1.0}}},"y":{"\'":{":":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"*":{"*":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"500":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"*":{"*":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"500":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"500":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"v":{"a":{"c":{"df":0,"docs":{},"i":{"df":8,"docs":{"135":{"tf":1.4142135623730951},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.4142135623730951},"359":{"tf":1.4142135623730951},"65":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":16,"docs":{"104":{"tf":1.7320508075688772},"122":{"tf":1.0},"230":{"tf":1.4142135623730951},"233":{"tf":1.4142135623730951},"236":{"tf":1.7320508075688772},"237":{"tf":1.0},"238":{"tf":1.0},"240":{"tf":1.4142135623730951},"243":{"tf":1.4142135623730951},"246":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"314":{"tf":1.4142135623730951},"333":{"tf":1.0},"48":{"tf":1.0},"73":{"tf":1.0},"75":{"tf":1.7320508075688772}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"267":{"tf":1.4142135623730951},"279":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.0}}}}}},"d":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"304":{"tf":1.0}}}}}},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"289":{"tf":1.0}}}},"df":0,"docs":{}}},"df":2,"docs":{"307":{"tf":1.7320508075688772},"337":{"tf":1.0}},"u":{"c":{"df":0,"docs":{},"t":{"df":18,"docs":{"109":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"135":{"tf":1.0},"153":{"tf":1.0},"18":{"tf":1.0},"231":{"tf":1.4142135623730951},"244":{"tf":1.0},"246":{"tf":1.0},"289":{"tf":1.0},"299":{"tf":1.0},"350":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.4142135623730951},"361":{"tf":1.0},"494":{"tf":1.0},"74":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":12,"docs":{"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"520":{"tf":1.0}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"202":{"tf":1.0},"496":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"65":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":7,"docs":{"203":{"tf":1.4142135623730951},"210":{"tf":1.4142135623730951},"238":{"tf":1.0},"259":{"tf":1.0},"55":{"tf":1.0},"59":{"tf":1.0},"76":{"tf":1.7320508075688772}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"\'":{"df":1,"docs":{"480":{"tf":1.0}}},")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"497":{"tf":1.0}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"337":{"tf":1.0}}}},"df":0,"docs":{}}},"/":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"244":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"(":{"&":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"274":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"274":{"tf":1.0}}}}}}}}},"df":72,"docs":{"105":{"tf":1.4142135623730951},"110":{"tf":3.1622776601683795},"120":{"tf":1.0},"124":{"tf":1.0},"135":{"tf":1.4142135623730951},"140":{"tf":1.7320508075688772},"144":{"tf":1.0},"169":{"tf":2.0},"171":{"tf":1.7320508075688772},"193":{"tf":1.0},"196":{"tf":1.4142135623730951},"209":{"tf":1.0},"212":{"tf":1.0},"213":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.4142135623730951},"242":{"tf":1.4142135623730951},"243":{"tf":1.0},"244":{"tf":2.449489742783178},"251":{"tf":1.4142135623730951},"258":{"tf":1.0},"269":{"tf":1.4142135623730951},"270":{"tf":1.0},"274":{"tf":1.0},"281":{"tf":1.4142135623730951},"285":{"tf":1.0},"290":{"tf":1.7320508075688772},"292":{"tf":1.0},"307":{"tf":1.0},"333":{"tf":1.0},"337":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":2.0},"365":{"tf":1.4142135623730951},"366":{"tf":1.0},"368":{"tf":1.4142135623730951},"369":{"tf":2.449489742783178},"371":{"tf":2.23606797749979},"372":{"tf":1.0},"375":{"tf":1.4142135623730951},"376":{"tf":1.7320508075688772},"377":{"tf":1.0},"381":{"tf":1.7320508075688772},"417":{"tf":1.7320508075688772},"450":{"tf":1.0},"463":{"tf":2.0},"48":{"tf":1.0},"480":{"tf":1.0},"492":{"tf":1.4142135623730951},"493":{"tf":1.4142135623730951},"496":{"tf":1.4142135623730951},"5":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"504":{"tf":1.4142135623730951},"505":{"tf":1.0},"506":{"tf":1.0},"507":{"tf":1.0},"51":{"tf":1.0},"511":{"tf":2.23606797749979},"57":{"tf":2.0},"60":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"82":{"tf":1.0},"86":{"tf":2.449489742783178},"87":{"tf":1.0},"88":{"tf":1.7320508075688772},"89":{"tf":1.0},"91":{"tf":1.0},"96":{"tf":1.0}},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"56":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":9,"docs":{"197":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"463":{"tf":1.0},"487":{"tf":1.0},"510":{"tf":1.7320508075688772},"511":{"tf":1.0},"512":{"tf":1.0},"92":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"342":{"tf":1.0}}}},"p":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{".":{"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"a":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":8,"docs":{"108":{"tf":1.0},"231":{"tf":1.0},"244":{"tf":1.0},"277":{"tf":1.0},"371":{"tf":1.0},"461":{"tf":1.0},"496":{"tf":1.0},"74":{"tf":1.0}}}},"df":2,"docs":{"321":{"tf":1.0},"324":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":29,"docs":{"100":{"tf":1.0},"314":{"tf":2.0},"316":{"tf":1.0},"319":{"tf":2.23606797749979},"321":{"tf":1.4142135623730951},"323":{"tf":1.0},"324":{"tf":3.7416573867739413},"326":{"tf":2.23606797749979},"330":{"tf":1.4142135623730951},"396":{"tf":1.4142135623730951},"398":{"tf":1.4142135623730951},"401":{"tf":1.0},"402":{"tf":1.0},"404":{"tf":1.4142135623730951},"407":{"tf":1.0},"467":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":2.23606797749979},"501":{"tf":1.0},"502":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"323":{"tf":1.0},"324":{"tf":1.0},"401":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"y":{"1":{"df":1,"docs":{"319":{"tf":1.0}}},"2":{"df":1,"docs":{"319":{"tf":1.0}}},"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"500":{"tf":1.7320508075688772},"99":{"tf":1.0}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":2,"docs":{"500":{"tf":1.7320508075688772},"99":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"s":{"df":5,"docs":{"234":{"tf":1.4142135623730951},"395":{"tf":1.0},"460":{"tf":1.0},"465":{"tf":2.0},"494":{"tf":1.4142135623730951}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"150":{"tf":1.4142135623730951},"65":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"s":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":1,"docs":{"250":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":12,"docs":{"151":{"tf":1.0},"258":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"414":{"tf":1.7320508075688772},"445":{"tf":1.0},"446":{"tf":1.4142135623730951},"485":{"tf":1.7320508075688772},"486":{"tf":1.0},"487":{"tf":1.0},"53":{"tf":1.0},"63":{"tf":1.0},"92":{"tf":1.0}}}}},"df":1,"docs":{"161":{"tf":1.0}}}},"v":{"df":0,"docs":{},"i":{"d":{"df":58,"docs":{"105":{"tf":1.0},"109":{"tf":1.4142135623730951},"133":{"tf":1.0},"134":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"147":{"tf":1.4142135623730951},"149":{"tf":1.0},"156":{"tf":1.0},"180":{"tf":1.4142135623730951},"182":{"tf":2.0},"21":{"tf":1.4142135623730951},"212":{"tf":1.0},"238":{"tf":1.0},"263":{"tf":1.4142135623730951},"285":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"289":{"tf":1.4142135623730951},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"302":{"tf":1.0},"306":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.7320508075688772},"334":{"tf":1.7320508075688772},"337":{"tf":1.0},"338":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.7320508075688772},"350":{"tf":1.7320508075688772},"351":{"tf":1.7320508075688772},"352":{"tf":1.7320508075688772},"353":{"tf":2.449489742783178},"354":{"tf":3.0},"355":{"tf":1.0},"356":{"tf":2.449489742783178},"357":{"tf":2.23606797749979},"358":{"tf":1.0},"359":{"tf":2.0},"360":{"tf":1.4142135623730951},"361":{"tf":2.0},"362":{"tf":1.0},"363":{"tf":1.0},"393":{"tf":1.0},"431":{"tf":1.7320508075688772},"487":{"tf":1.0},"49":{"tf":1.0},"495":{"tf":1.0},"500":{"tf":1.0},"503":{"tf":1.0},"51":{"tf":1.0},"510":{"tf":1.0},"63":{"tf":1.0},"89":{"tf":1.4142135623730951},"90":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"b":{"df":17,"docs":{"237":{"tf":1.0},"261":{"tf":4.58257569495584},"262":{"tf":1.0},"263":{"tf":1.0},"277":{"tf":1.0},"293":{"tf":3.0},"303":{"tf":1.0},"321":{"tf":3.872983346207417},"322":{"tf":1.0},"323":{"tf":2.23606797749979},"324":{"tf":5.916079783099616},"325":{"tf":1.7320508075688772},"335":{"tf":1.0},"354":{"tf":2.23606797749979},"373":{"tf":1.0},"398":{"tf":3.3166247903554},"399":{"tf":1.7320508075688772}},"l":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"250":{"tf":2.6457513110645907},"356":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"46":{"tf":1.0}}}},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":18,"docs":{"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"344":{"tf":1.0},"48":{"tf":1.4142135623730951},"55":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"371":{"tf":1.0}}}},"t":{"df":1,"docs":{"307":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":11,"docs":{"109":{"tf":1.0},"241":{"tf":1.0},"289":{"tf":1.0},"350":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.7320508075688772},"359":{"tf":1.7320508075688772},"361":{"tf":1.4142135623730951},"90":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":74,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"105":{"tf":1.0},"108":{"tf":1.0},"118":{"tf":1.0},"123":{"tf":1.0},"125":{"tf":1.0},"137":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.4142135623730951},"198":{"tf":1.0},"222":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.4142135623730951},"250":{"tf":1.0},"255":{"tf":1.0},"258":{"tf":1.0},"266":{"tf":1.0},"271":{"tf":1.4142135623730951},"274":{"tf":1.7320508075688772},"275":{"tf":1.4142135623730951},"278":{"tf":1.0},"279":{"tf":1.0},"28":{"tf":1.0},"285":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"302":{"tf":1.0},"316":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.4142135623730951},"325":{"tf":1.7320508075688772},"328":{"tf":1.0},"330":{"tf":1.4142135623730951},"356":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.4142135623730951},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"369":{"tf":1.0},"372":{"tf":1.0},"380":{"tf":1.4142135623730951},"381":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"396":{"tf":1.0},"402":{"tf":1.4142135623730951},"407":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"452":{"tf":1.0},"454":{"tf":1.0},"456":{"tf":1.0},"465":{"tf":1.7320508075688772},"47":{"tf":1.0},"473":{"tf":1.0},"487":{"tf":1.0},"49":{"tf":1.0},"492":{"tf":2.0},"494":{"tf":1.7320508075688772},"499":{"tf":1.0},"51":{"tf":1.0},"515":{"tf":1.4142135623730951},"517":{"tf":1.0},"519":{"tf":1.4142135623730951},"53":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"73":{"tf":1.0},"89":{"tf":1.0},"99":{"tf":1.7320508075688772}}},"y":{"=":{"\'":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"469":{"tf":1.0}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"273":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"a":{"b":{"df":0,"docs":{},"l":{"df":10,"docs":{"105":{"tf":1.4142135623730951},"129":{"tf":1.4142135623730951},"251":{"tf":1.0},"321":{"tf":1.0},"330":{"tf":1.0},"365":{"tf":1.0},"401":{"tf":1.0},"404":{"tf":1.0},"49":{"tf":1.0},"68":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"266":{"tf":1.0},"293":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"113":{"tf":1.4142135623730951},"46":{"tf":1.0},"480":{"tf":1.0}}}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":81,"docs":{"102":{"tf":1.0},"120":{"tf":1.0},"130":{"tf":1.4142135623730951},"158":{"tf":1.0},"16":{"tf":1.0},"192":{"tf":1.0},"194":{"tf":1.7320508075688772},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"206":{"tf":1.0},"207":{"tf":2.0},"208":{"tf":1.0},"209":{"tf":1.0},"210":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"213":{"tf":1.0},"214":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.0},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"24":{"tf":1.0},"252":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"445":{"tf":1.7320508075688772},"446":{"tf":1.0},"447":{"tf":1.7320508075688772},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"451":{"tf":1.0},"452":{"tf":1.0},"453":{"tf":1.0},"454":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0},"457":{"tf":1.0},"458":{"tf":1.0},"459":{"tf":1.0},"460":{"tf":1.0},"461":{"tf":1.0},"462":{"tf":1.0},"463":{"tf":1.0},"464":{"tf":1.0},"465":{"tf":1.0},"466":{"tf":1.0},"467":{"tf":1.0},"468":{"tf":1.0},"469":{"tf":1.0},"470":{"tf":1.0},"471":{"tf":1.0},"472":{"tf":1.0},"473":{"tf":1.0},"474":{"tf":1.0},"475":{"tf":1.0},"476":{"tf":1.0},"477":{"tf":1.0},"478":{"tf":1.0},"479":{"tf":1.0},"480":{"tf":1.7320508075688772},"521":{"tf":1.0},"68":{"tf":1.0},"72":{"tf":1.0}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"502":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":9,"docs":{"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"238":{"tf":2.23606797749979},"247":{"tf":2.0},"501":{"tf":1.0},"502":{"tf":1.0},"76":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":1,"docs":{"279":{"tf":1.0}},"p":{"df":1,"docs":{"121":{"tf":1.0}}}},"p":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"372":{"tf":1.0}}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"372":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"238":{"tf":2.23606797749979},"241":{"tf":1.0},"391":{"tf":1.4142135623730951}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"241":{"tf":1.0},"251":{"tf":1.4142135623730951},"84":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"329":{"tf":1.4142135623730951}},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"46":{"tf":1.0}}}},"d":{"a":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"137":{"tf":2.0},"143":{"tf":1.0},"157":{"tf":1.0},"333":{"tf":1.0}}}},"df":0,"docs":{}},"df":13,"docs":{"1":{"tf":1.7320508075688772},"113":{"tf":1.4142135623730951},"137":{"tf":1.0},"139":{"tf":1.0},"2":{"tf":1.0},"225":{"tf":1.4142135623730951},"226":{"tf":1.0},"247":{"tf":1.0},"339":{"tf":1.0},"4":{"tf":2.0},"479":{"tf":1.0},"503":{"tf":1.0},"504":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"36":{"tf":1.0}}}},"i":{"df":3,"docs":{"130":{"tf":1.0},"498":{"tf":1.0},"68":{"tf":1.0}}},"m":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"32":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":4,"docs":{"112":{"tf":1.4142135623730951},"228":{"tf":1.0},"241":{"tf":1.0},"38":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"56":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"365":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":6,"docs":{"189":{"tf":1.0},"259":{"tf":1.0},"357":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"120":{"tf":1.0},"238":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"230":{"tf":1.0},"463":{"tf":1.0},"511":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"5":{"tf":1.0}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":9,"docs":{"164":{"tf":1.4142135623730951},"2":{"tf":1.4142135623730951},"323":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"330":{"tf":1.0},"345":{"tf":1.0},"359":{"tf":1.0},"466":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"133":{"tf":1.0},"285":{"tf":1.0},"298":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"371":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"d":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"323":{"tf":1.0},"401":{"tf":1.0}}},"df":0,"docs":{}}}},"df":14,"docs":{"124":{"tf":1.0},"151":{"tf":1.0},"17":{"tf":1.0},"198":{"tf":1.4142135623730951},"232":{"tf":1.4142135623730951},"250":{"tf":1.0},"291":{"tf":1.0},"460":{"tf":1.0},"467":{"tf":1.0},"494":{"tf":1.0},"55":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"142":{"tf":1.0},"90":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"75":{"tf":1.0}},"s":{"df":2,"docs":{"291":{"tf":1.4142135623730951},"324":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":4,"docs":{"233":{"tf":1.0},"234":{"tf":2.449489742783178},"241":{"tf":2.449489742783178},"465":{"tf":1.0}},"s":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":4,"docs":{"104":{"tf":1.0},"236":{"tf":1.0},"238":{"tf":1.0},"48":{"tf":1.0}}}}},"df":0,"docs":{}}},"u":{"c":{"df":1,"docs":{"134":{"tf":1.0}},"t":{"df":1,"docs":{"234":{"tf":1.0}}}},"df":0,"docs":{}}},"df":1,"docs":{"115":{"tf":1.0}},"f":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{".":{"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"134":{"tf":1.0},"473":{"tf":1.0},"500":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":3,"docs":{"264":{"tf":1.0},"324":{"tf":1.4142135623730951},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":66,"docs":{"100":{"tf":1.0},"19":{"tf":1.0},"192":{"tf":1.0},"212":{"tf":1.0},"218":{"tf":1.4142135623730951},"225":{"tf":1.0},"23":{"tf":1.4142135623730951},"233":{"tf":1.0},"25":{"tf":1.4142135623730951},"252":{"tf":1.0},"264":{"tf":1.0},"311":{"tf":1.0},"314":{"tf":1.7320508075688772},"318":{"tf":1.7320508075688772},"324":{"tf":2.449489742783178},"347":{"tf":1.7320508075688772},"362":{"tf":1.4142135623730951},"392":{"tf":1.4142135623730951},"396":{"tf":1.0},"40":{"tf":1.4142135623730951},"412":{"tf":1.4142135623730951},"442":{"tf":1.7320508075688772},"466":{"tf":1.4142135623730951},"479":{"tf":1.4142135623730951},"480":{"tf":1.4142135623730951},"486":{"tf":2.0},"487":{"tf":1.0},"488":{"tf":1.0},"489":{"tf":1.0},"490":{"tf":1.0},"491":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.0},"499":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0},"503":{"tf":1.0},"504":{"tf":1.0},"505":{"tf":1.0},"506":{"tf":1.0},"507":{"tf":1.0},"508":{"tf":1.0},"509":{"tf":1.0},"510":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.0},"513":{"tf":1.0},"514":{"tf":1.0},"515":{"tf":1.0},"516":{"tf":1.0},"517":{"tf":1.0},"518":{"tf":1.0},"519":{"tf":1.0},"520":{"tf":1.0},"521":{"tf":1.4142135623730951},"59":{"tf":1.0},"63":{"tf":1.0},"73":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"136":{"tf":1.0},"141":{"tf":1.0},"55":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"r":{"\\"":{"#":{"(":{"\\\\":{"df":0,"docs":{},"w":{"+":{")":{"\\"":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"(":{"\\\\":{"df":0,"docs":{},"w":{"+":{")":{":":{":":{"\\\\":{"df":0,"docs":{},"s":{"*":{"(":{"[":{"^":{"\\\\":{"df":0,"docs":{},"n":{"]":{"+":{")":{"\\"":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"\\\\":{"(":{"\\\\":{"(":{"(":{"[":{"^":{")":{"]":{"+":{")":{"\\\\":{")":{"\\\\":{")":{"\\"":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\\\":{"[":{"(":{"[":{"^":{"\\\\":{"]":{"]":{"+":{")":{"\\\\":{"]":{"\\\\":{"]":{"\\"":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"404":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"214":{"tf":1.0},"472":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"259":{"tf":1.0}}}}},"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":12,"docs":{"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"383":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"409":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"494":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"t":{"df":30,"docs":{"101":{"tf":1.0},"108":{"tf":1.0},"114":{"tf":1.0},"116":{"tf":1.0},"129":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"200":{"tf":1.0},"217":{"tf":1.0},"234":{"tf":1.4142135623730951},"246":{"tf":1.0},"251":{"tf":1.0},"258":{"tf":1.0},"261":{"tf":1.0},"318":{"tf":1.0},"350":{"tf":1.0},"36":{"tf":1.4142135623730951},"458":{"tf":1.0},"461":{"tf":2.0},"466":{"tf":1.0},"473":{"tf":1.0},"493":{"tf":1.0},"495":{"tf":1.7320508075688772},"512":{"tf":1.7320508075688772},"518":{"tf":2.0},"56":{"tf":1.0},"61":{"tf":1.0},"70":{"tf":1.0},"79":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":9,"docs":{"111":{"tf":1.0},"137":{"tf":1.4142135623730951},"199":{"tf":1.4142135623730951},"238":{"tf":1.0},"250":{"tf":1.7320508075688772},"493":{"tf":1.4142135623730951},"495":{"tf":2.0},"56":{"tf":1.0},"79":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":35,"docs":{"105":{"tf":1.0},"111":{"tf":1.7320508075688772},"137":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.7320508075688772},"151":{"tf":1.0},"199":{"tf":2.0},"201":{"tf":1.4142135623730951},"231":{"tf":1.0},"234":{"tf":1.0},"250":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"261":{"tf":1.0},"27":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"379":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"404":{"tf":1.0},"49":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":2.23606797749979},"512":{"tf":1.4142135623730951},"53":{"tf":1.0},"56":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"79":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":5,"docs":{"164":{"tf":1.0},"165":{"tf":1.7320508075688772},"166":{"tf":1.4142135623730951},"184":{"tf":1.0},"448":{"tf":1.0}}}},"df":0,"docs":{},"v":{"df":7,"docs":{"101":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.4142135623730951},"27":{"tf":1.0},"371":{"tf":1.0},"466":{"tf":1.0},"53":{"tf":1.0}}}},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"231":{"tf":1.0},"289":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"a":{"d":{"df":3,"docs":{"2":{"tf":1.4142135623730951},"285":{"tf":1.0},"38":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"324":{"tf":2.0},"328":{"tf":1.0},"413":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":4,"docs":{"115":{"tf":1.0},"142":{"tf":1.0},"207":{"tf":1.0},"480":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"v":{"df":4,"docs":{"156":{"tf":1.0},"193":{"tf":1.7320508075688772},"257":{"tf":1.0},"8":{"tf":1.0}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"280":{"tf":1.0},"296":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"276":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"329":{"tf":1.0}},"e":{"d":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"329":{"tf":1.0}}}}}},"[":{"0":{"]":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"329":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"104":{"tf":1.0},"234":{"tf":1.0}},"e":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"122":{"tf":1.0},"236":{"tf":1.0},"48":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"502":{"tf":1.4142135623730951},"98":{"tf":1.0}}}}}},"l":{"a":{"c":{"df":7,"docs":{"143":{"tf":1.0},"199":{"tf":1.0},"291":{"tf":1.0},"449":{"tf":1.0},"495":{"tf":1.0},"56":{"tf":1.0},"83":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"226":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":7,"docs":{"111":{"tf":1.0},"164":{"tf":1.4142135623730951},"46":{"tf":1.0},"463":{"tf":1.0},"55":{"tf":1.0},"75":{"tf":1.4142135623730951},"81":{"tf":1.0}}},"y":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"270":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"321":{"tf":1.0},"405":{"tf":1.0}}}}}}}}},"q":{"/":{"df":1,"docs":{"241":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":15,"docs":{"275":{"tf":1.0},"46":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.4142135623730951},"501":{"tf":1.0},"502":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.0},"514":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":41,"docs":{"10":{"tf":1.0},"161":{"tf":1.4142135623730951},"200":{"tf":1.0},"234":{"tf":1.0},"240":{"tf":1.0},"287":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"298":{"tf":1.0},"314":{"tf":1.0},"321":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.4142135623730951},"337":{"tf":1.0},"338":{"tf":1.0},"350":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"372":{"tf":1.4142135623730951},"375":{"tf":1.0},"383":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"396":{"tf":1.0},"405":{"tf":1.0},"460":{"tf":1.4142135623730951},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"498":{"tf":1.0},"499":{"tf":1.0},"514":{"tf":1.0},"515":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.0},"80":{"tf":1.0},"88":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"317":{"tf":1.0},"501":{"tf":1.0},"96":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"339":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":4,"docs":{"372":{"tf":1.0},"381":{"tf":1.4142135623730951},"496":{"tf":1.0},"57":{"tf":1.0}}}},"v":{"df":3,"docs":{"136":{"tf":1.0},"371":{"tf":1.0},"384":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":9,"docs":{"258":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"45":{"tf":1.4142135623730951},"486":{"tf":1.0},"487":{"tf":1.0},"503":{"tf":1.7320508075688772},"522":{"tf":1.7320508075688772},"92":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"191":{"tf":1.4142135623730951},"475":{"tf":1.4142135623730951}}},"df":0,"docs":{},"s":{"df":14,"docs":{"234":{"tf":1.7320508075688772},"275":{"tf":1.0},"289":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0},"515":{"tf":1.4142135623730951}}}}}},"t":{"df":8,"docs":{"249":{"tf":1.0},"25":{"tf":1.0},"250":{"tf":2.8284271247461903},"324":{"tf":2.6457513110645907},"460":{"tf":2.0},"465":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"s":{")":{":":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"1":{"df":1,"docs":{"492":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"b":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"c":{"df":0,"docs":{},"e":{"(":{"&":{"c":{"a":{"df":0,"docs":{},"p":{"[":{"0":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"<":{"&":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{"<":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"x":{"<":{"d":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"df":2,"docs":{"133":{"tf":1.0},"354":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"139":{"tf":1.0}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":2,"docs":{"262":{"tf":1.0},"373":{"tf":1.0}}}}},"df":0,"docs":{}}},"k":{"b":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"335":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"293":{"tf":1.0},"303":{"tf":1.0},"354":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"324":{"tf":1.0},"335":{"tf":1.0}}}}},"t":{"df":3,"docs":{"153":{"tf":1.0},"231":{"tf":1.0},"496":{"tf":1.0}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"75":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"&":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"262":{"tf":1.0},"373":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"df":0,"docs":{},"f":{"3":{"2":{"df":2,"docs":{"263":{"tf":1.0},"354":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":37,"docs":{"104":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.4142135623730951},"109":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"129":{"tf":1.0},"142":{"tf":1.0},"200":{"tf":1.0},"231":{"tf":1.0},"238":{"tf":1.7320508075688772},"244":{"tf":1.0},"262":{"tf":1.4142135623730951},"272":{"tf":1.0},"275":{"tf":1.4142135623730951},"28":{"tf":1.0},"291":{"tf":1.0},"324":{"tf":4.123105625617661},"325":{"tf":2.0},"369":{"tf":1.0},"373":{"tf":1.0},"380":{"tf":1.0},"461":{"tf":1.0},"478":{"tf":1.4142135623730951},"492":{"tf":1.7320508075688772},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.7320508075688772},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.4142135623730951},"501":{"tf":1.4142135623730951},"502":{"tf":1.0},"77":{"tf":1.0},"88":{"tf":1.4142135623730951},"90":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"325":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"258":{"tf":1.0},"496":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":8,"docs":{"120":{"tf":1.0},"303":{"tf":1.7320508075688772},"324":{"tf":1.7320508075688772},"380":{"tf":1.0},"493":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.0},"90":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"104":{"tf":1.0},"196":{"tf":1.0},"55":{"tf":1.0},"75":{"tf":1.0}}}},"df":0,"docs":{}},"df":3,"docs":{"125":{"tf":1.0},"251":{"tf":1.0},"337":{"tf":1.0}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":21,"docs":{"107":{"tf":1.0},"136":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"238":{"tf":1.4142135623730951},"239":{"tf":1.4142135623730951},"240":{"tf":1.4142135623730951},"241":{"tf":1.4142135623730951},"251":{"tf":1.0},"330":{"tf":1.0},"371":{"tf":1.0},"413":{"tf":1.0},"463":{"tf":1.4142135623730951},"465":{"tf":1.0},"467":{"tf":1.0},"472":{"tf":1.4142135623730951},"52":{"tf":1.0},"60":{"tf":1.0},"93":{"tf":1.0},"96":{"tf":1.4142135623730951},"98":{"tf":1.0}}}},"s":{"df":3,"docs":{"348":{"tf":1.4142135623730951},"363":{"tf":1.4142135623730951},"393":{"tf":1.4142135623730951}}}}}},"f":{"df":1,"docs":{"193":{"tf":1.4142135623730951}}},"i":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"94":{"tf":1.0}}}},"df":0,"docs":{},"g":{":":{":":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"354":{"tf":1.0}}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"352":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":6,"docs":{"263":{"tf":1.0},"353":{"tf":2.0},"354":{"tf":1.7320508075688772},"358":{"tf":1.0},"360":{"tf":1.0},"362":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"263":{"tf":1.0},"354":{"tf":1.4142135623730951},"360":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"39":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"352":{"tf":1.0}}}}},"m":{"df":1,"docs":{"193":{"tf":1.4142135623730951}}},"o":{"a":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"96":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":7,"docs":{"140":{"tf":1.0},"177":{"tf":2.0},"178":{"tf":1.4142135623730951},"179":{"tf":1.4142135623730951},"190":{"tf":1.4142135623730951},"324":{"tf":1.0},"5":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":6,"docs":{"100":{"tf":1.0},"314":{"tf":1.0},"330":{"tf":1.0},"396":{"tf":1.0},"407":{"tf":1.0},"460":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"p":{"c":{"df":5,"docs":{"258":{"tf":1.0},"275":{"tf":1.4142135623730951},"487":{"tf":1.0},"514":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":5,"docs":{"287":{"tf":1.0},"316":{"tf":1.0},"74":{"tf":1.0},"88":{"tf":1.0},"96":{"tf":1.0}}}},"n":{"df":13,"docs":{"155":{"tf":1.0},"173":{"tf":1.4142135623730951},"175":{"tf":2.23606797749979},"179":{"tf":1.0},"190":{"tf":1.0},"194":{"tf":1.0},"257":{"tf":1.0},"259":{"tf":1.0},"309":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"367":{"tf":1.0},"489":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":17,"docs":{"134":{"tf":1.7320508075688772},"147":{"tf":1.7320508075688772},"157":{"tf":1.0},"19":{"tf":1.0},"267":{"tf":1.4142135623730951},"285":{"tf":1.0},"296":{"tf":1.0},"301":{"tf":1.0},"332":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"334":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"346":{"tf":1.4142135623730951},"79":{"tf":1.0},"98":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"\'":{"df":3,"docs":{"316":{"tf":1.0},"502":{"tf":1.0},"98":{"tf":1.0}}},",":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"209":{"tf":1.0},"219":{"tf":1.0},"237":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{",":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"219":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{",":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"197":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},".":{"df":0,"docs":{},"m":{"d":{"df":2,"docs":{"202":{"tf":1.0},"270":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"496":{"tf":1.0}}}}}}}},":":{"\\\\":{"df":0,"docs":{},"n":{"\\\\":{"df":0,"docs":{},"n":{"1":{"df":1,"docs":{"493":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"502":{"tf":1.0}}}},"df":63,"docs":{"110":{"tf":1.0},"153":{"tf":1.4142135623730951},"161":{"tf":1.0},"189":{"tf":1.0},"195":{"tf":1.0},"197":{"tf":1.4142135623730951},"200":{"tf":1.0},"202":{"tf":1.7320508075688772},"203":{"tf":1.0},"205":{"tf":1.0},"208":{"tf":1.0},"213":{"tf":1.4142135623730951},"217":{"tf":1.0},"231":{"tf":1.4142135623730951},"237":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":2.0},"255":{"tf":1.0},"257":{"tf":1.0},"264":{"tf":1.0},"267":{"tf":1.4142135623730951},"27":{"tf":1.0},"270":{"tf":1.0},"275":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.7320508075688772},"296":{"tf":1.4142135623730951},"301":{"tf":1.0},"309":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"329":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.7320508075688772},"339":{"tf":1.0},"34":{"tf":1.0},"454":{"tf":1.0},"455":{"tf":2.0},"457":{"tf":1.4142135623730951},"461":{"tf":2.0},"463":{"tf":1.4142135623730951},"469":{"tf":1.0},"470":{"tf":1.4142135623730951},"492":{"tf":2.0},"493":{"tf":1.0},"496":{"tf":1.4142135623730951},"502":{"tf":1.0},"519":{"tf":1.0},"52":{"tf":1.0},"523":{"tf":1.7320508075688772},"55":{"tf":1.0},"66":{"tf":1.0},"72":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0},"84":{"tf":1.4142135623730951},"92":{"tf":1.0},"96":{"tf":1.4142135623730951},"98":{"tf":1.4142135623730951}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"189":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"<":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"238":{"tf":1.0},"247":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"s":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":13,"docs":{"134":{"tf":1.7320508075688772},"151":{"tf":1.0},"157":{"tf":1.0},"237":{"tf":1.0},"247":{"tf":1.0},"267":{"tf":1.0},"301":{"tf":1.4142135623730951},"321":{"tf":1.0},"330":{"tf":1.0},"332":{"tf":1.0},"404":{"tf":1.0},"411":{"tf":1.0},"63":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":6,"docs":{"200":{"tf":1.0},"231":{"tf":1.0},"247":{"tf":1.0},"285":{"tf":1.0},"337":{"tf":1.0},"96":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"e":{"df":11,"docs":{"110":{"tf":1.0},"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"122":{"tf":1.0},"236":{"tf":1.0},"243":{"tf":1.7320508075688772},"247":{"tf":1.0},"269":{"tf":1.0},"299":{"tf":1.0},"357":{"tf":1.0}}}},"n":{"df":0,"docs":{},"e":{"df":2,"docs":{"140":{"tf":1.0},"357":{"tf":1.0}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"280":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"361":{"tf":1.0},"391":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"262":{"tf":1.0},"373":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":3,"docs":{"238":{"tf":1.0},"278":{"tf":1.0},"369":{"tf":1.0}}}}},"c":{"a":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"l":{"df":20,"docs":{"162":{"tf":1.0},"198":{"tf":1.0},"255":{"tf":1.0},"262":{"tf":1.0},"281":{"tf":1.4142135623730951},"289":{"tf":1.0},"300":{"tf":1.0},"350":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0},"359":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"369":{"tf":1.0},"371":{"tf":1.0},"456":{"tf":1.0},"494":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":5,"docs":{"135":{"tf":1.0},"289":{"tf":1.0},"350":{"tf":1.0},"353":{"tf":1.0},"365":{"tf":1.0}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"48":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"228":{"tf":1.0},"302":{"tf":1.0}}}}}},"df":0,"docs":{}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":1,"docs":{"179":{"tf":1.0}}}}}}}},"df":41,"docs":{"109":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.7320508075688772},"140":{"tf":1.0},"147":{"tf":1.4142135623730951},"154":{"tf":1.0},"157":{"tf":1.0},"170":{"tf":1.4142135623730951},"179":{"tf":1.7320508075688772},"19":{"tf":1.0},"250":{"tf":1.4142135623730951},"266":{"tf":1.4142135623730951},"267":{"tf":1.0},"285":{"tf":1.4142135623730951},"287":{"tf":1.4142135623730951},"304":{"tf":1.0},"311":{"tf":1.4142135623730951},"322":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":2.0},"335":{"tf":1.0},"337":{"tf":1.4142135623730951},"341":{"tf":1.7320508075688772},"345":{"tf":1.0},"407":{"tf":1.0},"411":{"tf":1.0},"421":{"tf":1.7320508075688772},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0},"51":{"tf":1.0},"63":{"tf":1.0},"89":{"tf":1.0}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"323":{"tf":1.0}}}}},"s":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"345":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"*":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"335":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"b":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":3,"docs":{"287":{"tf":1.0},"304":{"tf":1.0},"327":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":2,"docs":{"288":{"tf":1.0},"304":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"304":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":2,"docs":{"290":{"tf":1.0},"304":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"304":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"304":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"{":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{",":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{",":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"}":{".":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"289":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":3,"docs":{"266":{"tf":1.0},"334":{"tf":1.0},"345":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":5,"docs":{"269":{"tf":1.4142135623730951},"369":{"tf":1.4142135623730951},"86":{"tf":1.0},"87":{"tf":1.0},"98":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"d":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"|":{"a":{"df":1,"docs":{"273":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":2,"docs":{"273":{"tf":1.0},"492":{"tf":1.7320508075688772}}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"65":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":8,"docs":{"155":{"tf":1.0},"162":{"tf":1.0},"179":{"tf":1.0},"214":{"tf":1.4142135623730951},"255":{"tf":1.0},"259":{"tf":1.7320508075688772},"444":{"tf":1.7320508075688772},"66":{"tf":1.4142135623730951}},"s":{"/":{"df":0,"docs":{},"k":{"b":{"df":3,"docs":{"179":{"tf":1.0},"204":{"tf":1.0},"214":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"149":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"302":{"tf":1.0}}}}}},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"302":{"tf":1.0}}}},"df":0,"docs":{}}},"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"219":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"df":43,"docs":{"100":{"tf":1.0},"105":{"tf":1.0},"108":{"tf":1.4142135623730951},"114":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"142":{"tf":1.4142135623730951},"144":{"tf":1.0},"2":{"tf":1.0},"200":{"tf":3.1622776601683795},"21":{"tf":1.0},"210":{"tf":1.4142135623730951},"222":{"tf":1.0},"223":{"tf":1.4142135623730951},"238":{"tf":1.0},"247":{"tf":1.0},"251":{"tf":1.0},"257":{"tf":1.4142135623730951},"272":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"275":{"tf":1.0},"279":{"tf":1.0},"28":{"tf":2.23606797749979},"281":{"tf":1.4142135623730951},"308":{"tf":1.0},"349":{"tf":1.0},"350":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.4142135623730951},"436":{"tf":1.7320508075688772},"452":{"tf":1.0},"454":{"tf":1.4142135623730951},"473":{"tf":1.4142135623730951},"478":{"tf":1.7320508075688772},"480":{"tf":1.0},"492":{"tf":2.0},"500":{"tf":1.0},"502":{"tf":1.0},"517":{"tf":1.4142135623730951},"53":{"tf":1.0},"63":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":2.23606797749979}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":9,"docs":{"178":{"tf":1.0},"287":{"tf":1.4142135623730951},"288":{"tf":1.0},"289":{"tf":1.4142135623730951},"292":{"tf":1.0},"334":{"tf":1.0},"369":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0}}},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":3,"docs":{"127":{"tf":1.0},"130":{"tf":1.0},"391":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"14":{"tf":1.0},"32":{"tf":2.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":12,"docs":{"110":{"tf":1.0},"122":{"tf":1.0},"137":{"tf":1.4142135623730951},"243":{"tf":1.0},"244":{"tf":1.4142135623730951},"280":{"tf":1.4142135623730951},"377":{"tf":1.0},"462":{"tf":2.0},"463":{"tf":1.0},"500":{"tf":1.0},"74":{"tf":1.0},"87":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"244":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"e":{"df":17,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"130":{"tf":1.0},"158":{"tf":1.0},"195":{"tf":1.0},"212":{"tf":1.0},"217":{"tf":1.0},"241":{"tf":1.0},"30":{"tf":1.0},"311":{"tf":1.4142135623730951},"318":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"46":{"tf":1.0},"502":{"tf":1.0},"521":{"tf":1.4142135623730951},"98":{"tf":1.0}},"n":{"df":2,"docs":{"118":{"tf":1.0},"247":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"306":{"tf":1.0},"354":{"tf":1.4142135623730951},"360":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}},"f":{".":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"323":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951}},"s":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"323":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"324":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"354":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"354":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"149":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"(":{"\\"":{"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"325":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"i":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"354":{"tf":1.0}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"324":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"325":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}}},":":{":":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}}}},"t":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"\\"":{".":{"df":0,"docs":{},"k":{"b":{"df":1,"docs":{"303":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"&":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"303":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"(":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":15,"docs":{"133":{"tf":1.0},"134":{"tf":1.0},"267":{"tf":1.0},"285":{"tf":1.0},"300":{"tf":1.4142135623730951},"323":{"tf":1.4142135623730951},"324":{"tf":3.1622776601683795},"325":{"tf":1.7320508075688772},"332":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.0},"354":{"tf":1.0},"359":{"tf":1.0},"65":{"tf":1.0},"90":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":32,"docs":{"105":{"tf":1.0},"108":{"tf":1.0},"129":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"156":{"tf":1.0},"200":{"tf":1.7320508075688772},"21":{"tf":1.0},"210":{"tf":1.0},"238":{"tf":1.0},"247":{"tf":1.0},"251":{"tf":1.0},"257":{"tf":1.0},"273":{"tf":1.4142135623730951},"275":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"302":{"tf":1.4142135623730951},"308":{"tf":1.0},"349":{"tf":1.0},"350":{"tf":1.4142135623730951},"361":{"tf":1.0},"436":{"tf":1.7320508075688772},"454":{"tf":1.0},"473":{"tf":1.4142135623730951},"49":{"tf":1.0},"492":{"tf":2.0},"517":{"tf":1.7320508075688772},"53":{"tf":1.0},"63":{"tf":1.0},"90":{"tf":1.7320508075688772}},"i":{"c":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"461":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"n":{"d":{"df":4,"docs":{"262":{"tf":1.0},"263":{"tf":1.0},"354":{"tf":1.0},"493":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"288":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":4,"docs":{"135":{"tf":1.0},"342":{"tf":1.0},"356":{"tf":1.0},"65":{"tf":1.0}}}}},"t":{"df":1,"docs":{"352":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":4,"docs":{"334":{"tf":1.0},"341":{"tf":1.0},"409":{"tf":1.0},"466":{"tf":1.0}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"144":{"tf":1.0}}}}}}}},"r":{"d":{"df":8,"docs":{"134":{"tf":1.0},"267":{"tf":1.0},"280":{"tf":1.0},"285":{"tf":1.0},"293":{"tf":1.0},"296":{"tf":1.7320508075688772},"333":{"tf":1.0},"335":{"tf":1.0}},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":2.23606797749979}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},":":{":":{"df":0,"docs":{},"{":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"293":{"tf":1.0},"324":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"303":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"(":{"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"139":{"tf":1.0}}}}}},"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"293":{"tf":1.0},"335":{"tf":1.0}}}}}},"s":{")":{".":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"139":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":2,"docs":{"267":{"tf":1.0},"335":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"238":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"335":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":8,"docs":{"100":{"tf":1.0},"293":{"tf":1.4142135623730951},"322":{"tf":1.0},"324":{"tf":2.449489742783178},"329":{"tf":1.0},"400":{"tf":1.0},"407":{"tf":1.0},"97":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"(":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"322":{"tf":1.0},"324":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"97":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"v":{"df":14,"docs":{"10":{"tf":1.0},"174":{"tf":1.4142135623730951},"185":{"tf":1.0},"191":{"tf":1.4142135623730951},"2":{"tf":1.7320508075688772},"205":{"tf":1.0},"257":{"tf":1.0},"337":{"tf":1.0},"43":{"tf":1.4142135623730951},"449":{"tf":1.0},"475":{"tf":1.0},"489":{"tf":1.4142135623730951},"490":{"tf":1.0},"6":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{"df":25,"docs":{"165":{"tf":1.0},"174":{"tf":1.7320508075688772},"177":{"tf":1.7320508075688772},"184":{"tf":1.4142135623730951},"191":{"tf":1.4142135623730951},"2":{"tf":1.0},"205":{"tf":1.7320508075688772},"234":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.4142135623730951},"358":{"tf":1.0},"367":{"tf":1.0},"372":{"tf":1.0},"446":{"tf":1.0},"448":{"tf":1.7320508075688772},"475":{"tf":1.4142135623730951},"486":{"tf":1.0},"487":{"tf":1.0},"488":{"tf":1.4142135623730951},"489":{"tf":1.4142135623730951},"514":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.4142135623730951},"92":{"tf":1.0}}}},"i":{"c":{"df":2,"docs":{"111":{"tf":1.0},"250":{"tf":2.23606797749979}}},"df":0,"docs":{}}}},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":10,"docs":{"159":{"tf":1.0},"171":{"tf":1.7320508075688772},"182":{"tf":1.0},"190":{"tf":1.0},"213":{"tf":1.7320508075688772},"285":{"tf":1.0},"324":{"tf":1.0},"332":{"tf":1.0},"422":{"tf":1.7320508075688772},"64":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":14,"docs":{"168":{"tf":1.4142135623730951},"176":{"tf":1.4142135623730951},"18":{"tf":2.23606797749979},"180":{"tf":1.4142135623730951},"234":{"tf":1.0},"244":{"tf":1.0},"26":{"tf":1.0},"338":{"tf":1.0},"345":{"tf":1.0},"357":{"tf":1.0},"372":{"tf":1.0},"447":{"tf":1.4142135623730951},"479":{"tf":1.0},"524":{"tf":1.7320508075688772}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"/":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"496":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"496":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"497":{"tf":1.0}}}},"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"(":{"&":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"274":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"274":{"tf":1.4142135623730951}}}}}}}}},"df":0,"docs":{}},"df":39,"docs":{"101":{"tf":1.4142135623730951},"105":{"tf":1.0},"110":{"tf":2.23606797749979},"121":{"tf":1.4142135623730951},"144":{"tf":1.0},"171":{"tf":3.0},"193":{"tf":1.4142135623730951},"213":{"tf":2.8284271247461903},"231":{"tf":1.0},"244":{"tf":3.1622776601683795},"251":{"tf":1.0},"269":{"tf":1.0},"274":{"tf":1.0},"332":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":2.0},"369":{"tf":2.8284271247461903},"371":{"tf":2.0},"372":{"tf":1.4142135623730951},"376":{"tf":1.0},"377":{"tf":1.0},"380":{"tf":1.4142135623730951},"381":{"tf":1.0},"383":{"tf":1.7320508075688772},"388":{"tf":1.0},"391":{"tf":1.4142135623730951},"467":{"tf":1.4142135623730951},"49":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.4142135623730951},"508":{"tf":1.0},"509":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.0},"74":{"tf":1.7320508075688772},"82":{"tf":1.0},"87":{"tf":2.0},"88":{"tf":1.4142135623730951}}}}},"df":2,"docs":{"161":{"tf":1.0},"162":{"tf":1.0}},"o":{"df":0,"docs":{},"w":{"df":14,"docs":{"116":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"173":{"tf":1.0},"201":{"tf":2.0},"214":{"tf":1.0},"228":{"tf":1.0},"234":{"tf":1.0},"241":{"tf":1.4142135623730951},"247":{"tf":1.0},"250":{"tf":1.0},"257":{"tf":1.0},"300":{"tf":1.0},"36":{"tf":1.0}}}}},"i":{"d":{"df":0,"docs":{},"e":{"df":2,"docs":{"39":{"tf":1.0},"514":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"139":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":9,"docs":{"246":{"tf":1.0},"273":{"tf":1.7320508075688772},"308":{"tf":1.0},"360":{"tf":1.0},"4":{"tf":1.0},"466":{"tf":1.0},"49":{"tf":1.0},"492":{"tf":1.7320508075688772},"90":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":4,"docs":{"290":{"tf":1.0},"302":{"tf":1.0},"308":{"tf":1.0},"89":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":5,"docs":{"200":{"tf":1.0},"252":{"tf":1.0},"322":{"tf":1.0},"333":{"tf":1.0},"67":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"241":{"tf":1.0}}}},"i":{"c":{"df":1,"docs":{"241":{"tf":1.0}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":7,"docs":{"105":{"tf":1.0},"244":{"tf":1.0},"324":{"tf":1.0},"351":{"tf":1.0},"502":{"tf":1.0},"86":{"tf":1.0},"98":{"tf":1.0}}}}},"z":{"df":0,"docs":{},"e":{"df":2,"docs":{"279":{"tf":1.0},"338":{"tf":1.0}}}}},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"498":{"tf":1.4142135623730951}}}}}}}},"df":1,"docs":{"324":{"tf":1.0}}}}},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"104":{"tf":1.4142135623730951},"115":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":3,"docs":{"104":{"tf":1.0},"357":{"tf":1.0},"465":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":20,"docs":{"133":{"tf":1.0},"135":{"tf":1.0},"138":{"tf":1.4142135623730951},"146":{"tf":1.0},"157":{"tf":1.0},"182":{"tf":1.0},"281":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"333":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":2.0},"356":{"tf":1.0},"359":{"tf":1.0},"365":{"tf":1.4142135623730951},"371":{"tf":1.0},"375":{"tf":1.4142135623730951},"466":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"334":{"tf":1.0},"338":{"tf":1.0},"343":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"104":{"tf":1.0},"48":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"o":{"df":1,"docs":{"375":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"t":{"df":19,"docs":{"104":{"tf":1.7320508075688772},"105":{"tf":1.4142135623730951},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"125":{"tf":1.0},"231":{"tf":1.4142135623730951},"234":{"tf":1.4142135623730951},"236":{"tf":1.0},"237":{"tf":1.7320508075688772},"238":{"tf":1.7320508075688772},"241":{"tf":1.4142135623730951},"244":{"tf":1.4142135623730951},"247":{"tf":1.7320508075688772},"250":{"tf":1.4142135623730951},"251":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"494":{"tf":1.0},"55":{"tf":1.0},"75":{"tf":2.0}}}},"v":{"df":12,"docs":{"104":{"tf":1.4142135623730951},"117":{"tf":1.0},"118":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.0},"228":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"246":{"tf":1.0},"48":{"tf":1.0},"75":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"(":{"(":{"_":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":1.0}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"323":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}},"f":{"df":0,"docs":{},"m":{"df":1,"docs":{"324":{"tf":1.0}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"324":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"149":{"tf":1.0}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":2.6457513110645907}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"df":0,"docs":{},"i":{"d":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"324":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"324":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"324":{"tf":1.0}}},"s":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{":":{":":{"c":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"324":{"tf":1.0}},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"324":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":2,"docs":{"324":{"tf":1.4142135623730951},"329":{"tf":1.0}}}},"df":0,"docs":{}}},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"115":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.0},"250":{"tf":1.0}},"e":{"\'":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":17,"docs":{"100":{"tf":1.0},"105":{"tf":1.0},"164":{"tf":1.4142135623730951},"244":{"tf":1.0},"285":{"tf":1.0},"323":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.0},"399":{"tf":1.0},"413":{"tf":1.0},"446":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.7320508075688772},"521":{"tf":1.0},"80":{"tf":1.0},"83":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"c":{"df":0,"docs":{},"e":{"df":2,"docs":{"502":{"tf":1.4142135623730951},"98":{"tf":1.0}}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"98":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"134":{"tf":1.0},"45":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"244":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":30,"docs":{"101":{"tf":1.0},"105":{"tf":1.0},"110":{"tf":1.4142135623730951},"165":{"tf":1.4142135623730951},"166":{"tf":1.0},"218":{"tf":1.0},"25":{"tf":1.0},"269":{"tf":1.0},"285":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"324":{"tf":1.0},"325":{"tf":1.0},"332":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"347":{"tf":1.0},"369":{"tf":1.0},"377":{"tf":1.0},"470":{"tf":1.4142135623730951},"492":{"tf":1.0},"504":{"tf":1.0},"506":{"tf":1.0},"512":{"tf":1.0},"521":{"tf":1.0},"57":{"tf":1.0},"74":{"tf":1.0},"79":{"tf":1.0},"86":{"tf":1.7320508075688772}},"i":{"df":1,"docs":{"222":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"289":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"500":{"tf":1.0},"98":{"tf":1.7320508075688772}}}}}}},"q":{"df":0,"docs":{},"l":{"df":1,"docs":{"385":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"334":{"tf":1.0}}}}},"x":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"237":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"c":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{"1":{"0":{"df":1,"docs":{"264":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{"4":{"2":{"df":1,"docs":{"218":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"f":{"df":2,"docs":{"161":{"tf":1.0},"162":{"tf":1.0}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"189":{"tf":1.0},"338":{"tf":1.0}}}},"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"324":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"324":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":2,"docs":{"339":{"tf":1.0},"96":{"tf":1.0}}}},"n":{"d":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"128":{"tf":1.0},"27":{"tf":1.0}}}}},"r":{"d":{"df":16,"docs":{"110":{"tf":1.0},"122":{"tf":1.0},"140":{"tf":1.4142135623730951},"209":{"tf":1.0},"213":{"tf":1.0},"237":{"tf":1.0},"243":{"tf":1.0},"26":{"tf":1.0},"36":{"tf":1.4142135623730951},"514":{"tf":1.0},"525":{"tf":1.7320508075688772},"55":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.4142135623730951},"87":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"76":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":52,"docs":{"102":{"tf":1.4142135623730951},"130":{"tf":2.0},"140":{"tf":1.0},"158":{"tf":1.4142135623730951},"16":{"tf":1.0},"174":{"tf":1.0},"177":{"tf":2.23606797749979},"186":{"tf":1.0},"190":{"tf":1.4142135623730951},"192":{"tf":1.0},"194":{"tf":1.7320508075688772},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.4142135623730951},"198":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.0},"200":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":2.0},"203":{"tf":1.4142135623730951},"204":{"tf":1.0},"205":{"tf":2.0},"206":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.0},"210":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"213":{"tf":1.0},"214":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.4142135623730951},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.4142135623730951},"238":{"tf":1.4142135623730951},"252":{"tf":1.4142135623730951},"257":{"tf":1.0},"371":{"tf":1.0},"451":{"tf":1.7320508075688772},"489":{"tf":1.4142135623730951},"521":{"tf":1.0},"68":{"tf":1.4142135623730951}},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"339":{"tf":1.0},"357":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"352":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"314":{"tf":1.4142135623730951}}}}}}},"i":{"c":{"df":2,"docs":{"3":{"tf":1.7320508075688772},"6":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"214":{"tf":1.0},"259":{"tf":1.0}}}}},"s":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":2,"docs":{"214":{"tf":1.0},"259":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":23,"docs":{"100":{"tf":1.4142135623730951},"202":{"tf":1.0},"208":{"tf":1.0},"234":{"tf":1.4142135623730951},"250":{"tf":1.7320508075688772},"261":{"tf":1.0},"317":{"tf":1.0},"321":{"tf":1.4142135623730951},"324":{"tf":3.3166247903554},"326":{"tf":1.4142135623730951},"331":{"tf":1.0},"349":{"tf":1.0},"364":{"tf":1.0},"395":{"tf":1.4142135623730951},"398":{"tf":1.4142135623730951},"407":{"tf":1.0},"460":{"tf":1.0},"461":{"tf":1.0},"465":{"tf":1.0},"494":{"tf":1.4142135623730951},"500":{"tf":2.0},"73":{"tf":1.0},"96":{"tf":1.0}},"s":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"327":{"tf":1.0}}}}},"y":{"df":1,"docs":{"323":{"tf":1.0}}}},"d":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"337":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"337":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"(":{"\\"":{"df":0,"docs":{},"k":{"b":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"303":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"&":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"354":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"f":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"139":{"tf":1.4142135623730951},"293":{"tf":1.0},"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":4,"docs":{"174":{"tf":1.0},"191":{"tf":1.0},"258":{"tf":1.0},"489":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"231":{"tf":1.0},"334":{"tf":1.0},"343":{"tf":1.0}}}}}},"p":{"df":25,"docs":{"102":{"tf":1.4142135623730951},"158":{"tf":1.4142135623730951},"192":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"197":{"tf":1.4142135623730951},"198":{"tf":1.4142135623730951},"199":{"tf":1.4142135623730951},"200":{"tf":1.4142135623730951},"201":{"tf":1.4142135623730951},"202":{"tf":1.4142135623730951},"203":{"tf":1.4142135623730951},"204":{"tf":1.4142135623730951},"205":{"tf":1.4142135623730951},"211":{"tf":1.4142135623730951},"252":{"tf":1.4142135623730951},"282":{"tf":1.4142135623730951},"330":{"tf":1.0},"396":{"tf":1.0},"448":{"tf":1.4142135623730951},"449":{"tf":1.4142135623730951},"450":{"tf":1.4142135623730951},"451":{"tf":1.4142135623730951},"452":{"tf":1.4142135623730951},"479":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":3,"docs":{"322":{"tf":1.0},"404":{"tf":1.0},"465":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"122":{"tf":1.0},"130":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"g":{"df":98,"docs":{"100":{"tf":1.0},"135":{"tf":1.0},"138":{"tf":2.23606797749979},"140":{"tf":2.0},"151":{"tf":1.0},"162":{"tf":1.0},"167":{"tf":1.4142135623730951},"178":{"tf":1.0},"198":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"217":{"tf":1.0},"231":{"tf":1.0},"25":{"tf":1.0},"255":{"tf":1.4142135623730951},"262":{"tf":1.7320508075688772},"266":{"tf":1.0},"268":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"278":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"282":{"tf":1.4142135623730951},"285":{"tf":1.0},"287":{"tf":1.7320508075688772},"288":{"tf":1.0},"289":{"tf":1.7320508075688772},"291":{"tf":1.7320508075688772},"292":{"tf":1.0},"293":{"tf":1.7320508075688772},"298":{"tf":1.4142135623730951},"299":{"tf":1.4142135623730951},"300":{"tf":1.0},"306":{"tf":1.0},"307":{"tf":1.7320508075688772},"312":{"tf":1.7320508075688772},"314":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.4142135623730951},"327":{"tf":1.0},"330":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":2.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.4142135623730951},"369":{"tf":2.23606797749979},"370":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.7320508075688772},"373":{"tf":2.449489742783178},"374":{"tf":1.0},"375":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"377":{"tf":1.4142135623730951},"378":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"382":{"tf":1.0},"383":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":1.0},"387":{"tf":1.4142135623730951},"388":{"tf":1.0},"389":{"tf":1.0},"390":{"tf":1.0},"391":{"tf":1.0},"392":{"tf":1.4142135623730951},"393":{"tf":1.0},"396":{"tf":1.0},"401":{"tf":1.4142135623730951},"405":{"tf":1.0},"410":{"tf":1.4142135623730951},"425":{"tf":1.7320508075688772},"426":{"tf":1.7320508075688772},"427":{"tf":1.7320508075688772},"428":{"tf":1.7320508075688772},"456":{"tf":1.7320508075688772},"463":{"tf":1.0},"49":{"tf":1.0},"494":{"tf":2.0},"51":{"tf":1.4142135623730951},"55":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"86":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.4142135623730951}},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}},".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"333":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":4,"docs":{"266":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.0},"334":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":3,"docs":{"287":{"tf":1.4142135623730951},"295":{"tf":1.0},"300":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"d":{"b":{"df":1,"docs":{"293":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"e":{"df":14,"docs":{"100":{"tf":1.0},"142":{"tf":1.0},"323":{"tf":1.4142135623730951},"357":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"411":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":1.0},"89":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":49,"docs":{"156":{"tf":1.4142135623730951},"20":{"tf":1.0},"236":{"tf":1.0},"238":{"tf":1.0},"249":{"tf":1.0},"269":{"tf":1.4142135623730951},"27":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.4142135623730951},"323":{"tf":1.0},"329":{"tf":1.4142135623730951},"331":{"tf":1.0},"349":{"tf":1.0},"353":{"tf":1.4142135623730951},"354":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":2.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"369":{"tf":1.7320508075688772},"370":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.4142135623730951},"382":{"tf":1.0},"383":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":1.0},"387":{"tf":1.0},"388":{"tf":1.0},"389":{"tf":1.0},"390":{"tf":1.0},"391":{"tf":1.0},"392":{"tf":1.0},"393":{"tf":1.0},"401":{"tf":1.4142135623730951},"413":{"tf":1.0},"429":{"tf":1.7320508075688772}}}}}}},"df":8,"docs":{"146":{"tf":1.0},"262":{"tf":1.4142135623730951},"263":{"tf":1.0},"322":{"tf":1.0},"324":{"tf":3.605551275463989},"325":{"tf":1.0},"354":{"tf":2.0},"373":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"144":{"tf":1.0},"261":{"tf":1.0},"495":{"tf":2.0}}}}}}},"i":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"290":{"tf":1.0},"308":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"156":{"tf":1.0}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"324":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":26,"docs":{"100":{"tf":1.0},"261":{"tf":2.6457513110645907},"314":{"tf":1.0},"321":{"tf":2.0},"322":{"tf":1.7320508075688772},"323":{"tf":1.7320508075688772},"324":{"tf":3.872983346207417},"326":{"tf":2.0},"327":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.7320508075688772},"354":{"tf":1.0},"396":{"tf":1.0},"398":{"tf":1.7320508075688772},"399":{"tf":1.0},"401":{"tf":1.0},"410":{"tf":1.0},"492":{"tf":1.7320508075688772},"493":{"tf":2.23606797749979},"494":{"tf":2.449489742783178},"495":{"tf":1.7320508075688772},"496":{"tf":1.4142135623730951},"498":{"tf":1.7320508075688772},"500":{"tf":2.0},"511":{"tf":1.0},"512":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":16,"docs":{"138":{"tf":1.0},"261":{"tf":1.7320508075688772},"264":{"tf":1.0},"267":{"tf":1.0},"293":{"tf":1.4142135623730951},"321":{"tf":1.7320508075688772},"322":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":2.449489742783178},"330":{"tf":1.0},"335":{"tf":1.7320508075688772},"354":{"tf":1.4142135623730951},"379":{"tf":1.0},"398":{"tf":1.4142135623730951},"399":{"tf":1.0},"407":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":37,"docs":{"100":{"tf":1.7320508075688772},"110":{"tf":1.0},"111":{"tf":1.4142135623730951},"137":{"tf":1.0},"14":{"tf":1.4142135623730951},"155":{"tf":1.0},"196":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":1.0},"247":{"tf":1.4142135623730951},"277":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"314":{"tf":1.0},"317":{"tf":1.0},"321":{"tf":2.0},"322":{"tf":1.0},"323":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"330":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"36":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.4142135623730951},"399":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.4142135623730951},"466":{"tf":1.4142135623730951},"47":{"tf":1.0},"49":{"tf":1.0},"64":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"75":{"tf":1.0},"94":{"tf":1.0},"96":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":1,"docs":{"360":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":4,"docs":{"314":{"tf":1.0},"324":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.0}}}}}},"u":{"b":{"df":1,"docs":{"234":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"46":{"tf":1.0}}}},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"383":{"tf":2.23606797749979}}}}},"df":0,"docs":{}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"346":{"tf":1.0},"361":{"tf":1.0},"391":{"tf":1.0},"77":{"tf":1.0}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"361":{"tf":1.0},"493":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"142":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"53":{"tf":1.0},"61":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"231":{"tf":1.0},"463":{"tf":1.0},"480":{"tf":1.4142135623730951}},"i":{"df":8,"docs":{"251":{"tf":1.4142135623730951},"258":{"tf":1.0},"330":{"tf":1.4142135623730951},"463":{"tf":1.0},"472":{"tf":1.0},"511":{"tf":1.4142135623730951},"76":{"tf":1.0},"96":{"tf":1.0}}},"y":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":5,"docs":{"31":{"tf":1.0},"32":{"tf":1.0},"36":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"329":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"d":{"df":6,"docs":{"101":{"tf":1.0},"199":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.4142135623730951},"56":{"tf":1.0},"83":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":42,"docs":{"100":{"tf":1.0},"12":{"tf":1.4142135623730951},"167":{"tf":1.0},"296":{"tf":1.0},"313":{"tf":1.4142135623730951},"314":{"tf":1.0},"321":{"tf":1.0},"327":{"tf":1.0},"330":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.4142135623730951},"338":{"tf":1.0},"350":{"tf":1.0},"365":{"tf":1.4142135623730951},"388":{"tf":1.0},"394":{"tf":1.7320508075688772},"395":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.4142135623730951},"398":{"tf":1.0},"399":{"tf":1.0},"400":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.0},"404":{"tf":1.4142135623730951},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"494":{"tf":1.4142135623730951},"502":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"85":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}},"e":{"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"327":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"d":{"b":{"df":1,"docs":{"333":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"222":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"d":{"b":{",":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":1,"docs":{"166":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"270":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"p":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"162":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},":":{"/":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"377":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"377":{"tf":1.0}}}}},"df":0,"docs":{}},"h":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"377":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"369":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":62,"docs":{"100":{"tf":1.0},"135":{"tf":1.0},"140":{"tf":1.0},"151":{"tf":1.0},"162":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":2.0},"176":{"tf":1.7320508075688772},"177":{"tf":1.4142135623730951},"178":{"tf":1.0},"190":{"tf":2.0},"198":{"tf":1.4142135623730951},"20":{"tf":1.0},"214":{"tf":1.0},"217":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.0},"238":{"tf":2.0},"255":{"tf":1.0},"257":{"tf":1.0},"259":{"tf":1.0},"269":{"tf":1.4142135623730951},"279":{"tf":1.0},"281":{"tf":1.4142135623730951},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"295":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.4142135623730951},"322":{"tf":1.0},"323":{"tf":1.4142135623730951},"328":{"tf":1.0},"330":{"tf":1.0},"333":{"tf":1.4142135623730951},"334":{"tf":1.0},"367":{"tf":1.7320508075688772},"368":{"tf":1.7320508075688772},"369":{"tf":2.23606797749979},"371":{"tf":2.0},"372":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"377":{"tf":1.4142135623730951},"379":{"tf":1.7320508075688772},"380":{"tf":1.7320508075688772},"388":{"tf":1.7320508075688772},"390":{"tf":1.4142135623730951},"392":{"tf":1.0},"401":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"427":{"tf":1.7320508075688772},"456":{"tf":1.7320508075688772},"463":{"tf":1.0},"49":{"tf":1.0},"494":{"tf":2.23606797749979},"55":{"tf":1.0},"57":{"tf":1.0},"63":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"87":{"tf":1.0},"98":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"262":{"tf":1.0},"373":{"tf":1.0},"392":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":3,"docs":{"177":{"tf":1.4142135623730951},"179":{"tf":1.0},"190":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"241":{"tf":1.0}}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"g":{"df":2,"docs":{"27":{"tf":1.0},"40":{"tf":1.0}}}},"w":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"138":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"120":{"tf":1.0},"133":{"tf":1.0},"247":{"tf":1.4142135623730951},"353":{"tf":1.0},"361":{"tf":1.0}}}},"df":0,"docs":{}}}},"y":{"df":0,"docs":{},"n":{"c":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":2,"docs":{"214":{"tf":1.0},"259":{"tf":1.0}}}}},"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"323":{"tf":1.0},"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"266":{"tf":1.0},"293":{"tf":1.0}}}}}}}},"df":33,"docs":{"20":{"tf":1.0},"214":{"tf":1.0},"257":{"tf":1.4142135623730951},"259":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"266":{"tf":1.0},"269":{"tf":1.7320508075688772},"281":{"tf":1.0},"289":{"tf":1.7320508075688772},"293":{"tf":1.0},"299":{"tf":1.4142135623730951},"323":{"tf":1.0},"330":{"tf":1.0},"354":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"369":{"tf":2.0},"371":{"tf":1.0},"372":{"tf":2.6457513110645907},"376":{"tf":1.0},"378":{"tf":1.4142135623730951},"384":{"tf":1.7320508075688772},"388":{"tf":1.0},"389":{"tf":2.0},"391":{"tf":1.7320508075688772},"392":{"tf":1.0},"405":{"tf":1.4142135623730951},"429":{"tf":1.7320508075688772},"49":{"tf":1.0},"493":{"tf":1.0},"66":{"tf":1.0},"87":{"tf":1.0}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"384":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"x":{"df":5,"docs":{"333":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"341":{"tf":1.0},"346":{"tf":1.0},"469":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":46,"docs":{"102":{"tf":1.0},"103":{"tf":1.0},"138":{"tf":1.4142135623730951},"158":{"tf":1.0},"17":{"tf":1.0},"22":{"tf":1.0},"254":{"tf":1.7320508075688772},"255":{"tf":1.0},"256":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0},"260":{"tf":1.0},"261":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"264":{"tf":1.0},"265":{"tf":1.7320508075688772},"266":{"tf":1.0},"267":{"tf":1.0},"268":{"tf":1.0},"269":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"271":{"tf":1.0},"272":{"tf":1.0},"273":{"tf":1.0},"274":{"tf":1.0},"275":{"tf":1.0},"276":{"tf":1.7320508075688772},"277":{"tf":1.0},"278":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"281":{"tf":1.0},"282":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"331":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"342":{"tf":1.0},"368":{"tf":1.0},"437":{"tf":1.7320508075688772},"47":{"tf":1.0},"502":{"tf":1.4142135623730951}},"s":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"502":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":6,"docs":{"100":{"tf":1.0},"323":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.0},"401":{"tf":1.0},"407":{"tf":1.0}}}},"df":0,"docs":{},"g":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"272":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{".":{"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":44,"docs":{"100":{"tf":1.4142135623730951},"111":{"tf":1.0},"137":{"tf":1.4142135623730951},"142":{"tf":1.0},"143":{"tf":1.0},"197":{"tf":1.4142135623730951},"202":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.0},"214":{"tf":1.0},"219":{"tf":2.449489742783178},"237":{"tf":1.0},"238":{"tf":1.0},"261":{"tf":1.0},"264":{"tf":1.4142135623730951},"314":{"tf":1.4142135623730951},"317":{"tf":1.0},"321":{"tf":1.4142135623730951},"324":{"tf":4.123105625617661},"325":{"tf":1.4142135623730951},"326":{"tf":1.7320508075688772},"398":{"tf":1.4142135623730951},"407":{"tf":1.0},"455":{"tf":1.4142135623730951},"461":{"tf":2.0},"462":{"tf":1.0},"463":{"tf":1.0},"470":{"tf":2.23606797749979},"480":{"tf":1.0},"492":{"tf":1.7320508075688772},"493":{"tf":1.7320508075688772},"494":{"tf":1.4142135623730951},"500":{"tf":2.6457513110645907},"502":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.0},"52":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.0},"91":{"tf":2.0},"95":{"tf":1.0},"96":{"tf":1.0},"99":{"tf":1.4142135623730951}},"s":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"e":{"df":3,"docs":{"291":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"k":{"b":{"df":3,"docs":{"448":{"tf":1.0},"475":{"tf":1.4142135623730951},"477":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":5,"docs":{"179":{"tf":1.0},"495":{"tf":1.0},"64":{"tf":1.0},"80":{"tf":1.0},"83":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"k":{"b":{"df":1,"docs":{"299":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"77":{"tf":1.0}}}}}},"df":16,"docs":{"259":{"tf":1.0},"317":{"tf":2.23606797749979},"324":{"tf":2.449489742783178},"327":{"tf":1.0},"480":{"tf":1.0},"487":{"tf":1.0},"5":{"tf":1.0},"500":{"tf":2.0},"501":{"tf":1.4142135623730951},"502":{"tf":1.0},"510":{"tf":1.0},"55":{"tf":1.0},"77":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":2,"docs":{"321":{"tf":1.0},"324":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}}}}},"b":{"d":{"df":1,"docs":{"413":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"m":{"df":31,"docs":{"104":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.7320508075688772},"122":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"229":{"tf":1.4142135623730951},"230":{"tf":1.0},"231":{"tf":1.0},"233":{"tf":1.0},"236":{"tf":1.0},"238":{"tf":1.4142135623730951},"249":{"tf":1.0},"250":{"tf":1.0},"331":{"tf":1.0},"338":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"359":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"376":{"tf":1.7320508075688772},"393":{"tf":1.0},"460":{"tf":1.4142135623730951},"47":{"tf":1.0},"494":{"tf":1.0},"60":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"73":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"113":{"tf":1.0}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"124":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"257":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"36":{"tf":1.0}}}},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"280":{"tf":1.0}},"l":{"a":{"df":0,"docs":{},"t":{"df":15,"docs":{"138":{"tf":1.0},"140":{"tf":2.0},"212":{"tf":1.4142135623730951},"22":{"tf":2.8284271247461903},"220":{"tf":2.0},"266":{"tf":1.0},"276":{"tf":2.23606797749979},"293":{"tf":1.0},"437":{"tf":1.7320508075688772},"438":{"tf":1.7320508075688772},"439":{"tf":1.7320508075688772},"51":{"tf":1.7320508075688772},"75":{"tf":1.0},"89":{"tf":1.4142135623730951},"91":{"tf":2.0}},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"266":{"tf":1.0},"293":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"138":{"tf":1.4142135623730951}}}}}}},"s":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"220":{"tf":1.4142135623730951}}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"220":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"140":{"tf":1.0},"212":{"tf":1.0},"51":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"n":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"390":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"132":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"122":{"tf":1.0}}}}},"r":{"a":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"\\"":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\\"":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"*":{"*":{"/":{"*":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"276":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"22":{"tf":1.0},"276":{"tf":1.4142135623730951},"91":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":1,"docs":{"142":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"174":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.0},"279":{"tf":1.0},"4":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"304":{"tf":1.0}}}}}},"n":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"289":{"tf":1.0}}}},"df":0,"docs":{}}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"302":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"329":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"329":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"329":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"329":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"302":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"138":{"tf":1.0},"302":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":37,"docs":{"110":{"tf":1.0},"138":{"tf":1.0},"153":{"tf":1.4142135623730951},"173":{"tf":1.7320508075688772},"174":{"tf":2.0},"175":{"tf":2.8284271247461903},"177":{"tf":1.0},"18":{"tf":1.0},"186":{"tf":1.7320508075688772},"191":{"tf":1.0},"236":{"tf":1.0},"241":{"tf":2.449489742783178},"243":{"tf":1.0},"26":{"tf":1.0},"278":{"tf":3.0},"289":{"tf":1.7320508075688772},"299":{"tf":1.0},"302":{"tf":2.0},"317":{"tf":1.0},"329":{"tf":2.6457513110645907},"33":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"350":{"tf":1.0},"36":{"tf":1.0},"407":{"tf":1.0},"452":{"tf":1.4142135623730951},"46":{"tf":1.0},"463":{"tf":1.0},"475":{"tf":1.0},"478":{"tf":1.7320508075688772},"496":{"tf":1.0},"519":{"tf":1.0},"526":{"tf":1.7320508075688772},"7":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"96":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"270":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"s":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"278":{"tf":1.0}}}}}}}}},"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"501":{"tf":1.0}}}},"df":0,"docs":{}}}},"x":{"df":0,"docs":{},"t":{"df":37,"docs":{"100":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"182":{"tf":1.0},"200":{"tf":1.0},"257":{"tf":1.0},"263":{"tf":1.0},"272":{"tf":1.4142135623730951},"275":{"tf":1.0},"28":{"tf":1.0},"289":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":1.0},"333":{"tf":1.0},"350":{"tf":1.0},"354":{"tf":2.23606797749979},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"398":{"tf":1.0},"49":{"tf":1.0},"492":{"tf":1.7320508075688772},"493":{"tf":1.4142135623730951},"494":{"tf":1.4142135623730951},"495":{"tf":1.4142135623730951},"496":{"tf":1.4142135623730951},"497":{"tf":1.4142135623730951},"498":{"tf":1.4142135623730951},"500":{"tf":1.4142135623730951},"501":{"tf":1.4142135623730951},"502":{"tf":1.4142135623730951},"90":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"351":{"tf":1.0},"354":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":1,"docs":{"354":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":2,"docs":{"251":{"tf":1.0},"40":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"502":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"r":{"d":{"df":2,"docs":{"352":{"tf":1.0},"65":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"237":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":15,"docs":{"108":{"tf":1.0},"142":{"tf":1.0},"153":{"tf":1.0},"209":{"tf":1.0},"231":{"tf":1.0},"237":{"tf":1.7320508075688772},"244":{"tf":1.0},"277":{"tf":1.0},"461":{"tf":1.0},"463":{"tf":1.0},"492":{"tf":1.0},"496":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.0},"74":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"104":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":5,"docs":{"126":{"tf":1.0},"255":{"tf":1.0},"291":{"tf":1.0},"316":{"tf":1.0},"373":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"273":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":8,"docs":{"200":{"tf":1.0},"279":{"tf":1.0},"290":{"tf":1.0},"298":{"tf":1.4142135623730951},"306":{"tf":1.0},"492":{"tf":1.7320508075688772},"517":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":5,"docs":{"129":{"tf":1.0},"241":{"tf":1.0},"284":{"tf":1.0},"49":{"tf":1.0},"70":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"277":{"tf":1.0}}}}}}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"104":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"502":{"tf":1.0}}}},"df":19,"docs":{"101":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"130":{"tf":1.4142135623730951},"134":{"tf":1.0},"147":{"tf":1.0},"234":{"tf":1.4142135623730951},"237":{"tf":1.4142135623730951},"238":{"tf":1.0},"267":{"tf":1.0},"295":{"tf":1.0},"334":{"tf":1.4142135623730951},"346":{"tf":1.4142135623730951},"38":{"tf":1.0},"502":{"tf":1.0},"70":{"tf":1.0},"93":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"345":{"tf":1.4142135623730951},"360":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"238":{"tf":1.7320508075688772},"306":{"tf":1.0},"76":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":2,"docs":{"324":{"tf":1.4142135623730951},"398":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"p":{"df":3,"docs":{"216":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"468":{"tf":1.4142135623730951}}},"t":{"df":0,"docs":{},"l":{"df":19,"docs":{"137":{"tf":1.0},"197":{"tf":1.0},"202":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"261":{"tf":1.0},"264":{"tf":1.4142135623730951},"28":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0},"493":{"tf":2.0},"494":{"tf":2.0},"52":{"tf":1.0},"520":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"75":{"tf":1.0},"91":{"tf":1.7320508075688772},"93":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"v":{"1":{".":{"2":{"df":1,"docs":{"161":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"d":{"a":{"df":0,"docs":{},"y":{"\'":{"df":2,"docs":{"125":{"tf":1.0},"203":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{",":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"207":{"tf":1.0}}}}},"df":0,"docs":{}}},"/":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"317":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":21,"docs":{"314":{"tf":1.0},"317":{"tf":1.4142135623730951},"321":{"tf":1.4142135623730951},"323":{"tf":1.0},"324":{"tf":2.449489742783178},"325":{"tf":1.4142135623730951},"326":{"tf":1.0},"327":{"tf":1.0},"329":{"tf":1.4142135623730951},"330":{"tf":1.0},"396":{"tf":1.4142135623730951},"398":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"404":{"tf":1.0},"407":{"tf":1.0},"500":{"tf":1.7320508075688772},"501":{"tf":3.1622776601683795},"96":{"tf":1.0},"98":{"tf":1.4142135623730951},"99":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"141":{"tf":2.0},"199":{"tf":1.4142135623730951},"250":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"238":{"tf":1.4142135623730951},"76":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":3,"docs":{"458":{"tf":1.4142135623730951},"79":{"tf":1.0},"98":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"502":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"l":{"df":21,"docs":{"170":{"tf":1.0},"311":{"tf":1.0},"331":{"tf":1.7320508075688772},"332":{"tf":1.0},"333":{"tf":2.0},"334":{"tf":1.0},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.7320508075688772},"339":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"345":{"tf":1.4142135623730951},"346":{"tf":1.0},"347":{"tf":1.4142135623730951},"348":{"tf":1.0},"363":{"tf":1.0}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"238":{"tf":1.4142135623730951}}}}}}}},"o":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"514":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":74,"docs":{"100":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"12":{"tf":1.4142135623730951},"156":{"tf":1.0},"164":{"tf":1.0},"192":{"tf":1.0},"225":{"tf":1.0},"238":{"tf":1.0},"25":{"tf":1.0},"250":{"tf":1.4142135623730951},"258":{"tf":1.0},"303":{"tf":1.0},"326":{"tf":1.4142135623730951},"334":{"tf":1.0},"338":{"tf":1.0},"342":{"tf":1.0},"345":{"tf":1.0},"4":{"tf":1.0},"407":{"tf":1.0},"446":{"tf":1.0},"452":{"tf":1.0},"454":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0},"457":{"tf":1.0},"458":{"tf":1.0},"469":{"tf":1.0},"479":{"tf":1.4142135623730951},"48":{"tf":1.0},"486":{"tf":2.0},"487":{"tf":1.7320508075688772},"488":{"tf":1.0},"489":{"tf":1.0},"49":{"tf":1.0},"490":{"tf":1.0},"491":{"tf":1.7320508075688772},"492":{"tf":1.0},"493":{"tf":1.0},"494":{"tf":1.0},"495":{"tf":1.0},"496":{"tf":1.0},"497":{"tf":1.0},"498":{"tf":1.0},"499":{"tf":2.0},"500":{"tf":1.0},"501":{"tf":1.0},"502":{"tf":1.0},"503":{"tf":1.0},"504":{"tf":1.0},"505":{"tf":1.0},"506":{"tf":1.0},"507":{"tf":1.0},"508":{"tf":1.0},"509":{"tf":1.0},"510":{"tf":1.0},"511":{"tf":1.0},"512":{"tf":1.0},"513":{"tf":1.0},"514":{"tf":1.0},"515":{"tf":1.0},"516":{"tf":1.0},"517":{"tf":1.0},"518":{"tf":1.0},"519":{"tf":1.0},"520":{"tf":1.0},"521":{"tf":1.0},"62":{"tf":1.4142135623730951},"92":{"tf":1.0},"97":{"tf":1.0},"99":{"tf":2.449489742783178}},"s":{"/":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":5,"docs":{"171":{"tf":1.7320508075688772},"193":{"tf":1.0},"213":{"tf":1.7320508075688772},"496":{"tf":1.4142135623730951},"497":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":4,"docs":{"28":{"tf":1.0},"463":{"tf":1.0},"511":{"tf":1.0},"96":{"tf":1.0}},"i":{"c":{"df":2,"docs":{"466":{"tf":1.0},"512":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"l":{"df":5,"docs":{"257":{"tf":1.0},"278":{"tf":1.0},"358":{"tf":1.0},"463":{"tf":1.0},"511":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":3,"docs":{"177":{"tf":1.4142135623730951},"244":{"tf":1.0},"88":{"tf":1.0}}},"k":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"367":{"tf":1.0}}}},"df":0,"docs":{}},"df":24,"docs":{"105":{"tf":1.0},"123":{"tf":1.0},"210":{"tf":1.4142135623730951},"238":{"tf":1.0},"251":{"tf":1.0},"300":{"tf":1.0},"310":{"tf":1.0},"317":{"tf":1.4142135623730951},"369":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"381":{"tf":1.0},"387":{"tf":1.0},"412":{"tf":1.0},"445":{"tf":1.0},"502":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"70":{"tf":1.0},"76":{"tf":1.4142135623730951},"83":{"tf":1.0},"86":{"tf":1.0},"93":{"tf":1.4142135623730951}}}},"d":{"df":0,"docs":{},"e":{"df":6,"docs":{"240":{"tf":1.0},"241":{"tf":1.4142135623730951},"330":{"tf":1.0},"358":{"tf":1.0},"360":{"tf":1.0},"73":{"tf":1.0}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"333":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"61":{"tf":1.0},"77":{"tf":1.0}}},"n":{"df":2,"docs":{"135":{"tf":1.0},"356":{"tf":1.0}}},"t":{"df":17,"docs":{"138":{"tf":2.23606797749979},"203":{"tf":1.0},"25":{"tf":1.4142135623730951},"262":{"tf":1.7320508075688772},"263":{"tf":1.7320508075688772},"354":{"tf":1.4142135623730951},"356":{"tf":1.0},"360":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.4142135623730951},"392":{"tf":1.0},"493":{"tf":2.0},"495":{"tf":1.4142135623730951},"496":{"tf":1.0},"504":{"tf":1.0},"72":{"tf":2.0},"75":{"tf":1.4142135623730951}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":5,"docs":{"454":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0},"457":{"tf":1.0},"458":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"174":{"tf":1.0},"489":{"tf":1.0}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":10,"docs":{"114":{"tf":1.0},"137":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"280":{"tf":1.0},"365":{"tf":1.0},"385":{"tf":1.0},"494":{"tf":1.0},"512":{"tf":1.0},"70":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"396":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"324":{"tf":1.0}}}},"i":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"114":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"216":{"tf":1.4142135623730951},"468":{"tf":1.4142135623730951}}}},"df":2,"docs":{"452":{"tf":1.0},"478":{"tf":1.0}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"379":{"tf":1.0},"380":{"tf":1.0}}}}}},"m":{"df":1,"docs":{"324":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"d":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":7,"docs":{"100":{"tf":1.0},"314":{"tf":1.0},"330":{"tf":1.0},"356":{"tf":1.0},"396":{"tf":1.0},"407":{"tf":1.0},"460":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":5,"docs":{"187":{"tf":1.4142135623730951},"221":{"tf":1.4142135623730951},"23":{"tf":1.0},"41":{"tf":1.4142135623730951},"474":{"tf":1.4142135623730951}}}}}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"e":{"df":21,"docs":{"178":{"tf":1.0},"182":{"tf":1.0},"212":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.4142135623730951},"291":{"tf":1.4142135623730951},"292":{"tf":1.0},"302":{"tf":1.0},"327":{"tf":1.4142135623730951},"333":{"tf":1.4142135623730951},"354":{"tf":1.7320508075688772},"369":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"454":{"tf":1.0},"492":{"tf":1.4142135623730951},"496":{"tf":1.4142135623730951},"498":{"tf":1.4142135623730951},"499":{"tf":1.0},"517":{"tf":1.0},"97":{"tf":2.0}}},"t":{"df":0,"docs":{},"h":{"df":8,"docs":{"100":{"tf":1.0},"105":{"tf":1.0},"244":{"tf":1.0},"323":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.0},"399":{"tf":1.0},"413":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"l":{"df":3,"docs":{"234":{"tf":1.0},"241":{"tf":1.4142135623730951},"380":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"289":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"343":{"tf":1.0}}},"n":{"df":1,"docs":{"480":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"338":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"294":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":10,"docs":{"117":{"tf":1.0},"118":{"tf":1.0},"234":{"tf":1.0},"238":{"tf":1.0},"250":{"tf":1.0},"332":{"tf":1.0},"339":{"tf":1.0},"368":{"tf":1.0},"372":{"tf":1.0},"495":{"tf":1.0}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"=":{"\'":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"469":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"304":{"tf":2.6457513110645907},"309":{"tf":1.0},"337":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":80,"docs":{"105":{"tf":1.0},"108":{"tf":1.4142135623730951},"111":{"tf":1.0},"134":{"tf":1.4142135623730951},"137":{"tf":1.4142135623730951},"142":{"tf":1.0},"144":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"157":{"tf":1.0},"178":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.4142135623730951},"202":{"tf":1.0},"209":{"tf":1.0},"215":{"tf":1.0},"224":{"tf":1.0},"231":{"tf":1.4142135623730951},"234":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":1.0},"264":{"tf":1.0},"267":{"tf":1.4142135623730951},"27":{"tf":1.0},"28":{"tf":1.0},"285":{"tf":1.4142135623730951},"287":{"tf":1.7320508075688772},"288":{"tf":1.0},"293":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.4142135623730951},"300":{"tf":1.0},"301":{"tf":1.4142135623730951},"321":{"tf":1.0},"323":{"tf":2.23606797749979},"326":{"tf":2.23606797749979},"330":{"tf":1.0},"332":{"tf":1.4142135623730951},"333":{"tf":1.4142135623730951},"334":{"tf":1.4142135623730951},"335":{"tf":1.4142135623730951},"337":{"tf":1.4142135623730951},"342":{"tf":1.0},"369":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"401":{"tf":1.7320508075688772},"404":{"tf":1.0},"411":{"tf":1.0},"454":{"tf":1.0},"461":{"tf":1.4142135623730951},"49":{"tf":1.0},"492":{"tf":3.605551275463989},"493":{"tf":3.1622776601683795},"494":{"tf":3.1622776601683795},"495":{"tf":2.8284271247461903},"496":{"tf":2.6457513110645907},"497":{"tf":1.4142135623730951},"498":{"tf":2.8284271247461903},"500":{"tf":2.6457513110645907},"501":{"tf":1.7320508075688772},"502":{"tf":1.7320508075688772},"511":{"tf":1.4142135623730951},"512":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"55":{"tf":1.4142135623730951},"56":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"90":{"tf":1.0},"91":{"tf":1.4142135623730951},"93":{"tf":1.0}}},"i":{"c":{"df":1,"docs":{"391":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":3,"docs":{"134":{"tf":1.0},"333":{"tf":1.4142135623730951},"334":{"tf":1.4142135623730951}}}}}},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"64":{"tf":1.0}}},"n":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":2,"docs":{"371":{"tf":1.0},"413":{"tf":1.0}}}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"d":{"df":14,"docs":{"102":{"tf":1.0},"103":{"tf":1.0},"111":{"tf":1.0},"130":{"tf":1.0},"158":{"tf":1.0},"230":{"tf":1.0},"246":{"tf":1.0},"27":{"tf":1.0},"36":{"tf":1.0},"469":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"80":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":4,"docs":{"105":{"tf":1.4142135623730951},"353":{"tf":1.0},"356":{"tf":1.0},"49":{"tf":1.0}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"193":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"202":{"tf":1.0},"324":{"tf":1.0}}}},"t":{"df":5,"docs":{"241":{"tf":1.0},"278":{"tf":1.0},"314":{"tf":1.0},"396":{"tf":1.0},"95":{"tf":1.0}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"514":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"k":{"df":1,"docs":{"314":{"tf":1.0}}}}},"s":{"a":{"df":0,"docs":{},"f":{"df":2,"docs":{"153":{"tf":1.0},"280":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"(":{"\\"":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":5,"docs":{"153":{"tf":1.0},"231":{"tf":1.0},"244":{"tf":1.0},"496":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":21,"docs":{"101":{"tf":1.0},"104":{"tf":1.0},"141":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"301":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.4142135623730951},"328":{"tf":1.0},"330":{"tf":1.0},"36":{"tf":1.0},"369":{"tf":1.0},"371":{"tf":1.0},"377":{"tf":1.0},"379":{"tf":1.0},"38":{"tf":1.0},"381":{"tf":1.4142135623730951},"383":{"tf":1.0},"407":{"tf":1.4142135623730951},"44":{"tf":1.0},"465":{"tf":1.0},"501":{"tf":1.0}}}},"df":0,"docs":{}},"df":5,"docs":{"121":{"tf":1.0},"159":{"tf":1.0},"171":{"tf":1.4142135623730951},"194":{"tf":1.0},"213":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"379":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"i":{"df":9,"docs":{"258":{"tf":1.0},"487":{"tf":1.0},"503":{"tf":1.0},"504":{"tf":1.0},"505":{"tf":1.0},"506":{"tf":1.0},"507":{"tf":1.0},"508":{"tf":1.0},"509":{"tf":1.0}}},"l":{"df":9,"docs":{"164":{"tf":1.0},"178":{"tf":1.0},"288":{"tf":1.0},"307":{"tf":2.6457513110645907},"333":{"tf":1.0},"334":{"tf":1.0},"369":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":12,"docs":{"134":{"tf":1.0},"167":{"tf":1.0},"226":{"tf":1.0},"23":{"tf":1.0},"238":{"tf":1.4142135623730951},"276":{"tf":1.0},"293":{"tf":1.0},"304":{"tf":1.0},"322":{"tf":1.0},"345":{"tf":1.0},"352":{"tf":1.0},"464":{"tf":1.4142135623730951}}}},"df":129,"docs":{"102":{"tf":1.0},"108":{"tf":1.0},"111":{"tf":1.0},"116":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":2.6457513110645907},"130":{"tf":1.0},"135":{"tf":1.0},"140":{"tf":1.4142135623730951},"142":{"tf":1.0},"149":{"tf":1.0},"153":{"tf":1.0},"157":{"tf":1.0},"158":{"tf":1.4142135623730951},"16":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"181":{"tf":1.0},"183":{"tf":1.0},"198":{"tf":1.0},"202":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"217":{"tf":1.7320508075688772},"219":{"tf":1.0},"228":{"tf":1.7320508075688772},"229":{"tf":1.7320508075688772},"230":{"tf":1.0},"231":{"tf":2.0},"232":{"tf":1.7320508075688772},"233":{"tf":1.0},"234":{"tf":1.4142135623730951},"235":{"tf":1.7320508075688772},"236":{"tf":1.0},"237":{"tf":1.4142135623730951},"238":{"tf":2.23606797749979},"239":{"tf":1.7320508075688772},"240":{"tf":1.0},"241":{"tf":1.0},"242":{"tf":1.7320508075688772},"243":{"tf":1.0},"244":{"tf":1.7320508075688772},"245":{"tf":1.7320508075688772},"246":{"tf":1.0},"247":{"tf":2.0},"248":{"tf":1.7320508075688772},"249":{"tf":1.0},"250":{"tf":1.4142135623730951},"251":{"tf":1.4142135623730951},"252":{"tf":1.0},"270":{"tf":1.0},"28":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"308":{"tf":1.0},"314":{"tf":1.0},"315":{"tf":1.4142135623730951},"316":{"tf":1.0},"324":{"tf":3.3166247903554},"329":{"tf":1.0},"335":{"tf":1.0},"338":{"tf":1.0},"343":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":2.0},"357":{"tf":1.0},"358":{"tf":1.0},"359":{"tf":1.0},"36":{"tf":1.4142135623730951},"361":{"tf":1.0},"369":{"tf":1.0},"372":{"tf":1.0},"374":{"tf":1.4142135623730951},"381":{"tf":1.0},"384":{"tf":1.0},"39":{"tf":1.0},"396":{"tf":1.0},"4":{"tf":1.0},"43":{"tf":1.4142135623730951},"452":{"tf":1.0},"456":{"tf":1.4142135623730951},"458":{"tf":1.4142135623730951},"460":{"tf":1.0},"461":{"tf":1.4142135623730951},"462":{"tf":1.0},"463":{"tf":1.7320508075688772},"466":{"tf":1.0},"467":{"tf":1.0},"469":{"tf":1.7320508075688772},"470":{"tf":1.0},"473":{"tf":1.4142135623730951},"479":{"tf":1.0},"480":{"tf":1.0},"489":{"tf":1.0},"492":{"tf":1.0},"493":{"tf":1.4142135623730951},"494":{"tf":1.4142135623730951},"496":{"tf":2.0},"5":{"tf":1.0},"502":{"tf":1.0},"517":{"tf":1.4142135623730951},"52":{"tf":1.0},"520":{"tf":1.0},"55":{"tf":1.0},"58":{"tf":1.4142135623730951},"64":{"tf":1.0},"67":{"tf":2.449489742783178},"68":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.7320508075688772},"75":{"tf":1.4142135623730951},"76":{"tf":1.0},"77":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.7320508075688772},"84":{"tf":1.0},"88":{"tf":1.4142135623730951},"90":{"tf":1.0},"98":{"tf":1.7320508075688772}},"e":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"75":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"142":{"tf":1.0}}}}}},"r":{"_":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"290":{"tf":1.4142135623730951},"291":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}},"df":30,"docs":{"111":{"tf":1.0},"133":{"tf":1.4142135623730951},"142":{"tf":1.0},"143":{"tf":1.0},"177":{"tf":1.4142135623730951},"179":{"tf":1.0},"190":{"tf":1.0},"234":{"tf":1.0},"238":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.0},"267":{"tf":1.0},"280":{"tf":1.0},"285":{"tf":1.0},"290":{"tf":1.7320508075688772},"307":{"tf":1.7320508075688772},"311":{"tf":1.0},"335":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.4142135623730951},"347":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"361":{"tf":1.4142135623730951},"391":{"tf":1.0},"396":{"tf":1.0},"413":{"tf":1.4142135623730951},"45":{"tf":1.0},"462":{"tf":1.7320508075688772}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"178":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"75":{"tf":1.0}}}}}}}}}}}},"s":{"/":{"a":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":2,"docs":{"467":{"tf":1.4142135623730951},"498":{"tf":1.4142135623730951}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"z":{"df":3,"docs":{"263":{"tf":1.0},"324":{"tf":1.4142135623730951},"354":{"tf":2.0}}}}},"t":{"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"324":{"tf":2.23606797749979}}}}}},"df":0,"docs":{}},"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"i":{"d":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"v":{"4":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"324":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":6,"docs":{"318":{"tf":1.4142135623730951},"321":{"tf":1.0},"324":{"tf":2.0},"396":{"tf":1.0},"398":{"tf":1.4142135623730951},"75":{"tf":1.0}}},"df":0,"docs":{}}},"x":{"df":1,"docs":{"155":{"tf":1.0}}}},"v":{"0":{".":{"4":{".":{"df":0,"docs":{},"x":{"df":1,"docs":{"13":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{".":{"0":{"df":1,"docs":{"338":{"tf":1.0}}},"5":{"df":5,"docs":{"133":{"tf":1.0},"146":{"tf":1.0},"288":{"tf":1.0},"351":{"tf":1.0},"354":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":2,"docs":{"250":{"tf":1.4142135623730951},"381":{"tf":1.4142135623730951}}},"2":{"df":3,"docs":{"250":{"tf":1.4142135623730951},"381":{"tf":2.0},"83":{"tf":1.0}}},"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"237":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":31,"docs":{"12":{"tf":1.0},"134":{"tf":2.0},"147":{"tf":2.0},"154":{"tf":1.0},"157":{"tf":1.0},"224":{"tf":1.0},"257":{"tf":1.0},"267":{"tf":1.7320508075688772},"280":{"tf":2.0},"285":{"tf":1.4142135623730951},"287":{"tf":1.7320508075688772},"288":{"tf":1.4142135623730951},"294":{"tf":1.7320508075688772},"295":{"tf":2.0},"296":{"tf":1.7320508075688772},"301":{"tf":1.4142135623730951},"304":{"tf":2.23606797749979},"309":{"tf":1.4142135623730951},"332":{"tf":1.4142135623730951},"333":{"tf":2.6457513110645907},"334":{"tf":2.0},"335":{"tf":2.0},"337":{"tf":1.0},"339":{"tf":1.0},"342":{"tf":1.0},"346":{"tf":1.0},"35":{"tf":1.0},"357":{"tf":1.0},"411":{"tf":1.0},"514":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"u":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"68":{"tf":1.0}}}},"df":0,"docs":{}},"df":23,"docs":{"131":{"tf":1.0},"134":{"tf":1.0},"261":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"291":{"tf":1.7320508075688772},"295":{"tf":1.7320508075688772},"296":{"tf":1.0},"307":{"tf":1.4142135623730951},"319":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":2.23606797749979},"326":{"tf":1.4142135623730951},"333":{"tf":1.0},"334":{"tf":1.4142135623730951},"337":{"tf":1.4142135623730951},"341":{"tf":1.4142135623730951},"398":{"tf":1.0},"411":{"tf":1.0},"500":{"tf":1.0},"502":{"tf":1.0},"98":{"tf":1.4142135623730951}},"e":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"1":{"df":1,"docs":{"319":{"tf":1.0}}},"2":{"df":1,"docs":{"319":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":2,"docs":{"24":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":5,"docs":{"182":{"tf":1.0},"303":{"tf":1.0},"334":{"tf":1.0},"337":{"tf":1.0},"477":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"134":{"tf":1.0}}}},"t":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"498":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"c":{"!":{"[":{"\\"":{"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"329":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"264":{"tf":1.0},"329":{"tf":1.0}}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"324":{"tf":2.8284271247461903},"325":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"<":{"&":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"324":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"(":{"&":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"325":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"324":{"tf":1.0}}}}},"_":{"df":1,"docs":{"273":{"tf":1.0}}},"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":6,"docs":{"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0},"398":{"tf":1.0},"400":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"261":{"tf":1.0}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"149":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":6,"docs":{"261":{"tf":1.0},"263":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":2.449489742783178},"354":{"tf":1.7320508075688772},"398":{"tf":1.7320508075688772}}}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"df":0,"docs":{},"f":{"3":{"2":{"df":2,"docs":{"351":{"tf":1.0},"352":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"350":{"tf":1.0},"90":{"tf":1.0}}}}}},"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"352":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":2,"docs":{"333":{"tf":1.0},"341":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"359":{"tf":1.0}},"f":{"df":2,"docs":{"137":{"tf":1.0},"419":{"tf":1.7320508075688772}},"i":{"df":9,"docs":{"13":{"tf":1.4142135623730951},"164":{"tf":1.0},"172":{"tf":1.4142135623730951},"186":{"tf":1.0},"188":{"tf":1.0},"31":{"tf":1.0},"42":{"tf":1.0},"448":{"tf":1.0},"476":{"tf":1.0}}}}},"s":{"a":{"df":1,"docs":{"133":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"\'":{"df":1,"docs":{"141":{"tf":1.0}}},"df":33,"docs":{"105":{"tf":1.0},"107":{"tf":1.0},"13":{"tf":1.0},"136":{"tf":1.0},"141":{"tf":1.7320508075688772},"151":{"tf":1.0},"156":{"tf":1.4142135623730951},"157":{"tf":1.0},"164":{"tf":1.0},"173":{"tf":1.4142135623730951},"188":{"tf":1.0},"199":{"tf":1.0},"212":{"tf":1.0},"215":{"tf":1.0},"238":{"tf":2.0},"249":{"tf":1.0},"250":{"tf":1.7320508075688772},"261":{"tf":1.0},"269":{"tf":1.4142135623730951},"292":{"tf":1.0},"310":{"tf":1.4142135623730951},"333":{"tf":1.0},"337":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"371":{"tf":1.0},"381":{"tf":1.0},"42":{"tf":1.0},"495":{"tf":1.0},"57":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.0},"76":{"tf":1.0}}}}}}}},"i":{"a":{"df":46,"docs":{"105":{"tf":1.0},"108":{"tf":1.0},"11":{"tf":1.4142135623730951},"114":{"tf":1.0},"133":{"tf":1.0},"154":{"tf":1.0},"231":{"tf":1.4142135623730951},"237":{"tf":1.0},"238":{"tf":1.0},"241":{"tf":1.0},"244":{"tf":1.0},"258":{"tf":1.4142135623730951},"263":{"tf":1.0},"279":{"tf":1.0},"298":{"tf":1.0},"328":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.4142135623730951},"348":{"tf":1.0},"349":{"tf":1.7320508075688772},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":2.0},"354":{"tf":2.23606797749979},"355":{"tf":1.0},"356":{"tf":2.0},"357":{"tf":1.0},"358":{"tf":1.0},"359":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.4142135623730951},"362":{"tf":1.0},"363":{"tf":1.0},"379":{"tf":1.0},"387":{"tf":1.0},"393":{"tf":1.0},"4":{"tf":1.0},"413":{"tf":1.0},"445":{"tf":1.0},"487":{"tf":1.0},"49":{"tf":1.4142135623730951},"503":{"tf":1.0},"52":{"tf":1.0},"89":{"tf":1.0},"97":{"tf":1.0}}},"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"133":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":4,"docs":{"151":{"tf":1.0},"201":{"tf":1.4142135623730951},"27":{"tf":1.0},"9":{"tf":1.4142135623730951}}}},"m":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"39":{"tf":1.0}}}}}}}}},"df":2,"docs":{"143":{"tf":1.0},"371":{"tf":1.0}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"337":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"125":{"tf":1.4142135623730951}}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":7,"docs":{"204":{"tf":1.0},"231":{"tf":1.0},"257":{"tf":1.0},"27":{"tf":1.7320508075688772},"36":{"tf":1.0},"467":{"tf":1.4142135623730951},"63":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"338":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":30,"docs":{"241":{"tf":1.0},"249":{"tf":1.0},"287":{"tf":1.0},"311":{"tf":1.0},"331":{"tf":1.7320508075688772},"332":{"tf":1.0},"333":{"tf":1.4142135623730951},"334":{"tf":1.0},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.4142135623730951},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"353":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"39":{"tf":1.0},"63":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"73":{"tf":1.0}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"500":{"tf":1.0}}}}}}}},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"101":{"tf":1.0},"321":{"tf":1.4142135623730951},"324":{"tf":1.0},"327":{"tf":1.0},"500":{"tf":1.0},"96":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"170":{"tf":1.0},"365":{"tf":1.4142135623730951},"68":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"156":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"2":{"tf":1.0},"369":{"tf":1.0},"38":{"tf":1.0},"389":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"y":{"df":1,"docs":{"333":{"tf":1.0}}}},"df":0,"docs":{},"e":{"\'":{"df":0,"docs":{},"r":{"df":1,"docs":{"250":{"tf":1.0}}},"v":{"df":2,"docs":{"104":{"tf":1.4142135623730951},"247":{"tf":1.0}}}},"b":{"df":4,"docs":{"107":{"tf":1.0},"2":{"tf":1.0},"4":{"tf":1.0},"65":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"k":{"df":8,"docs":{"113":{"tf":1.0},"115":{"tf":1.0},"231":{"tf":1.0},"238":{"tf":1.0},"346":{"tf":1.0},"463":{"tf":1.0},"465":{"tf":1.4142135623730951},"472":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"l":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"0":{"tf":1.0},"46":{"tf":1.0}}}}},"df":0,"docs":{}}},"h":{"a":{"df":0,"docs":{},"t":{"\'":{"df":1,"docs":{"237":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"233":{"tf":1.0}}}}}}}},"i":{"d":{"df":0,"docs":{},"e":{"df":10,"docs":{"105":{"tf":1.0},"213":{"tf":1.0},"244":{"tf":1.0},"269":{"tf":1.0},"333":{"tf":1.0},"369":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"74":{"tf":1.0},"87":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":8,"docs":{"104":{"tf":1.0},"107":{"tf":1.0},"113":{"tf":1.0},"115":{"tf":1.0},"124":{"tf":1.0},"243":{"tf":1.0},"48":{"tf":1.0},"67":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":6,"docs":{"136":{"tf":1.0},"151":{"tf":1.0},"202":{"tf":1.0},"217":{"tf":1.4142135623730951},"264":{"tf":1.4142135623730951},"467":{"tf":1.0}}}}}}}},"n":{"df":3,"docs":{"381":{"tf":1.0},"57":{"tf":1.0},"88":{"tf":1.0}}},"s":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"101":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"291":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"234":{"tf":1.0},"346":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":16,"docs":{"108":{"tf":1.0},"109":{"tf":1.0},"133":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"285":{"tf":1.0},"302":{"tf":1.0},"328":{"tf":1.0},"342":{"tf":1.0},"350":{"tf":1.0},"356":{"tf":1.0},"361":{"tf":1.0},"365":{"tf":1.0},"371":{"tf":1.0},"404":{"tf":1.0},"79":{"tf":1.0},"89":{"tf":1.0}}}}}}}},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":2,"docs":{"0":{"tf":1.0},"47":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":26,"docs":{"101":{"tf":1.0},"107":{"tf":1.0},"127":{"tf":1.4142135623730951},"135":{"tf":1.4142135623730951},"136":{"tf":1.0},"143":{"tf":1.0},"157":{"tf":1.0},"230":{"tf":1.0},"238":{"tf":2.0},"251":{"tf":1.0},"328":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"356":{"tf":1.0},"36":{"tf":1.0},"361":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"375":{"tf":1.0},"404":{"tf":1.0},"413":{"tf":1.0},"461":{"tf":1.4142135623730951},"75":{"tf":1.0},"90":{"tf":1.0},"98":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"64":{"tf":1.0}}}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":18,"docs":{"133":{"tf":1.0},"143":{"tf":1.7320508075688772},"206":{"tf":1.4142135623730951},"220":{"tf":1.0},"227":{"tf":1.7320508075688772},"23":{"tf":1.0},"278":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"371":{"tf":1.4142135623730951},"383":{"tf":1.0},"443":{"tf":1.7320508075688772},"459":{"tf":1.4142135623730951},"480":{"tf":1.0},"484":{"tf":1.7320508075688772},"487":{"tf":1.0},"510":{"tf":1.0},"67":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":4,"docs":{"164":{"tf":1.0},"166":{"tf":1.0},"175":{"tf":1.4142135623730951},"189":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"d":{"\\"":{"]":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"352":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":7,"docs":{"112":{"tf":1.4142135623730951},"137":{"tf":1.0},"228":{"tf":1.0},"323":{"tf":1.0},"351":{"tf":1.0},"353":{"tf":1.0},"368":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"469":{"tf":1.0}}}},"s":{"df":1,"docs":{"141":{"tf":1.0}},"t":{"df":1,"docs":{"502":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":14,"docs":{"104":{"tf":1.0},"125":{"tf":1.4142135623730951},"241":{"tf":1.0},"267":{"tf":1.0},"280":{"tf":1.0},"317":{"tf":1.0},"324":{"tf":2.6457513110645907},"335":{"tf":1.0},"341":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.4142135623730951},"381":{"tf":1.0},"501":{"tf":1.0},"96":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"30":{"tf":1.0},"4":{"tf":1.0}}}}}}}},"s":{":":{"/":{"/":{"df":0,"docs":{},"k":{"b":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{":":{"8":{"0":{"0":{"0":{"df":1,"docs":{"377":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"369":{"tf":1.0}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"8":{"0":{"0":{"0":{"df":4,"docs":{"178":{"tf":1.0},"179":{"tf":1.0},"288":{"tf":1.0},"333":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"376":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"x":{"df":9,"docs":{"104":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"136":{"tf":1.7320508075688772},"143":{"tf":1.4142135623730951},"466":{"tf":1.7320508075688772},"477":{"tf":1.0},"480":{"tf":2.0},"520":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"316":{"tf":1.0}}}},"y":{"df":0,"docs":{},"z":{"7":{"8":{"9":{")":{"\\\\":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"494":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":12,"docs":{"136":{"tf":1.0},"137":{"tf":1.0},"140":{"tf":1.0},"143":{"tf":1.0},"150":{"tf":1.0},"224":{"tf":1.0},"264":{"tf":1.4142135623730951},"269":{"tf":1.0},"324":{"tf":1.0},"342":{"tf":1.4142135623730951},"52":{"tf":1.0},"93":{"tf":1.0}}}}},"df":5,"docs":{"104":{"tf":1.0},"143":{"tf":1.0},"203":{"tf":1.0},"480":{"tf":1.4142135623730951},"520":{"tf":1.0}},"e":{"df":3,"docs":{"167":{"tf":1.0},"337":{"tf":1.0},"359":{"tf":1.4142135623730951}},"s":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"342":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"u":{"\'":{"df":0,"docs":{},"r":{"df":1,"docs":{"5":{"tf":1.0}}},"v":{"df":1,"docs":{"226":{"tf":1.0}}}},"df":0,"docs":{}}}},"z":{"df":2,"docs":{"143":{"tf":1.0},"480":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":4,"docs":{"153":{"tf":1.0},"238":{"tf":1.0},"298":{"tf":1.4142135623730951},"391":{"tf":1.0}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"151":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}}}},"title":{"root":{"0":{"0":{"1":{"df":1,"docs":{"331":{"tf":1.0}}},"2":{"df":1,"docs":{"349":{"tf":1.0}}},"3":{"df":1,"docs":{"364":{"tf":1.0}}},"4":{"df":1,"docs":{"394":{"tf":1.0}}},"5":{"df":1,"docs":{"414":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{"0":{"df":3,"docs":{"142":{"tf":1.0},"205":{"tf":1.0},"24":{"tf":1.0}}},"1":{"df":2,"docs":{"143":{"tf":1.0},"25":{"tf":1.0}}},"2":{"df":2,"docs":{"144":{"tf":1.0},"26":{"tf":1.0}}},"df":27,"docs":{"107":{"tf":1.0},"127":{"tf":1.0},"133":{"tf":1.0},"146":{"tf":1.0},"15":{"tf":1.0},"164":{"tf":1.0},"169":{"tf":1.0},"184":{"tf":1.0},"196":{"tf":1.0},"2":{"tf":1.0},"229":{"tf":1.0},"287":{"tf":1.0},"295":{"tf":1.0},"298":{"tf":1.0},"306":{"tf":1.0},"316":{"tf":1.0},"333":{"tf":1.0},"351":{"tf":1.0},"366":{"tf":1.0},"387":{"tf":1.0},"398":{"tf":1.0},"409":{"tf":1.0},"448":{"tf":1.0},"469":{"tf":1.0},"517":{"tf":1.0},"72":{"tf":1.0},"79":{"tf":1.0}}},"2":{"df":27,"docs":{"108":{"tf":1.0},"128":{"tf":1.0},"134":{"tf":1.0},"147":{"tf":1.0},"16":{"tf":1.0},"165":{"tf":1.0},"170":{"tf":1.0},"185":{"tf":1.0},"197":{"tf":1.0},"232":{"tf":1.0},"288":{"tf":1.0},"296":{"tf":1.0},"299":{"tf":1.0},"3":{"tf":1.0},"307":{"tf":1.0},"317":{"tf":1.0},"334":{"tf":1.0},"352":{"tf":1.0},"367":{"tf":1.0},"388":{"tf":1.0},"399":{"tf":1.0},"410":{"tf":1.0},"449":{"tf":1.0},"470":{"tf":1.0},"518":{"tf":1.0},"73":{"tf":1.0},"80":{"tf":1.0}}},"3":{"0":{"0":{"0":{"df":1,"docs":{"43":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":25,"docs":{"109":{"tf":1.0},"129":{"tf":1.0},"135":{"tf":1.0},"148":{"tf":1.0},"166":{"tf":1.0},"17":{"tf":1.0},"171":{"tf":1.0},"186":{"tf":1.0},"198":{"tf":1.0},"235":{"tf":1.0},"289":{"tf":1.0},"300":{"tf":1.0},"308":{"tf":1.0},"318":{"tf":1.0},"353":{"tf":1.0},"368":{"tf":1.0},"389":{"tf":1.0},"4":{"tf":1.0},"400":{"tf":1.0},"411":{"tf":1.0},"450":{"tf":1.0},"471":{"tf":1.0},"519":{"tf":1.0},"74":{"tf":1.0},"81":{"tf":1.0}}},"4":{"df":16,"docs":{"110":{"tf":1.0},"136":{"tf":1.0},"149":{"tf":1.0},"18":{"tf":1.0},"199":{"tf":1.0},"290":{"tf":1.0},"301":{"tf":1.0},"309":{"tf":1.0},"319":{"tf":1.0},"390":{"tf":1.0},"401":{"tf":1.0},"451":{"tf":1.0},"472":{"tf":1.0},"520":{"tf":1.0},"75":{"tf":1.0},"82":{"tf":1.0}}},"5":{"df":14,"docs":{"111":{"tf":1.0},"137":{"tf":1.0},"150":{"tf":1.0},"19":{"tf":1.0},"200":{"tf":1.0},"239":{"tf":1.0},"302":{"tf":1.0},"310":{"tf":1.0},"402":{"tf":1.0},"447":{"tf":1.0},"452":{"tf":1.0},"473":{"tf":1.0},"76":{"tf":1.0},"83":{"tf":1.0}}},"6":{"df":6,"docs":{"138":{"tf":1.0},"20":{"tf":1.0},"201":{"tf":1.0},"242":{"tf":1.0},"77":{"tf":1.0},"84":{"tf":1.0}}},"7":{"df":4,"docs":{"139":{"tf":1.0},"202":{"tf":1.0},"21":{"tf":1.0},"245":{"tf":1.0}}},"8":{"df":4,"docs":{"140":{"tf":1.0},"203":{"tf":1.0},"22":{"tf":1.0},"248":{"tf":1.0}}},"9":{"df":3,"docs":{"141":{"tf":1.0},"204":{"tf":1.0},"23":{"tf":1.0}}},"a":{"d":{"d":{"df":3,"docs":{"398":{"tf":1.0},"455":{"tf":1.0},"456":{"tf":1.0}}},"df":2,"docs":{"31":{"tf":1.0},"32":{"tf":1.0}},"r":{"df":8,"docs":{"232":{"tf":1.0},"331":{"tf":1.0},"349":{"tf":1.0},"364":{"tf":1.0},"394":{"tf":1.0},"414":{"tf":1.0},"520":{"tf":1.0},"73":{"tf":1.0}}},"v":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"464":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"123":{"tf":1.0},"61":{"tf":1.0}}}}}},"i":{"df":11,"docs":{"108":{"tf":1.0},"123":{"tf":1.0},"137":{"tf":1.0},"143":{"tf":1.0},"21":{"tf":1.4142135623730951},"349":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"414":{"tf":1.0},"53":{"tf":1.0},"61":{"tf":1.0}}},"l":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"43":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":6,"docs":{"340":{"tf":1.0},"382":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"145":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"i":{"df":6,"docs":{"182":{"tf":1.0},"248":{"tf":1.0},"25":{"tf":1.4142135623730951},"325":{"tf":1.0},"486":{"tf":1.0},"523":{"tf":1.0}}},"p":{"df":1,"docs":{"24":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"o":{"a":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"322":{"tf":1.0},"323":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":14,"docs":{"100":{"tf":1.0},"17":{"tf":1.4142135623730951},"208":{"tf":1.0},"232":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.0},"268":{"tf":1.0},"284":{"tf":1.0},"297":{"tf":1.0},"312":{"tf":1.0},"313":{"tf":1.0},"57":{"tf":1.0},"66":{"tf":1.0},"85":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"389":{"tf":1.0}}}},"df":1,"docs":{"214":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"145":{"tf":1.0}}},"df":0,"docs":{}}}}},"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"425":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":5,"docs":{"169":{"tf":1.0},"171":{"tf":1.0},"196":{"tf":1.0},"200":{"tf":1.0},"454":{"tf":1.0}}}}},"df":1,"docs":{"322":{"tf":1.0}},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"113":{"tf":1.0},"115":{"tf":1.0},"117":{"tf":1.0},"519":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"146":{"tf":1.0},"89":{"tf":1.0}}}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"119":{"tf":1.0},"297":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"253":{"tf":1.0},"305":{"tf":1.0},"516":{"tf":1.0}}}}},"i":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"400":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":12,"docs":{"313":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"321":{"tf":1.0},"394":{"tf":1.0},"398":{"tf":1.0},"409":{"tf":1.0},"499":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"99":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"129":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"245":{"tf":1.0}}},"i":{"df":0,"docs":{},"l":{"d":{"df":8,"docs":{"143":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"184":{"tf":1.0},"209":{"tf":1.0},"3":{"tf":1.0},"448":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"127":{"tf":1.0},"207":{"tf":1.0},"460":{"tf":1.0}}}}}},"r":{"d":{"df":2,"docs":{"316":{"tf":1.0},"480":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":1,"docs":{"11":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":12,"docs":{"228":{"tf":1.0},"229":{"tf":1.0},"232":{"tf":1.0},"235":{"tf":1.0},"239":{"tf":1.0},"242":{"tf":1.0},"245":{"tf":1.0},"248":{"tf":1.0},"315":{"tf":1.0},"374":{"tf":1.0},"58":{"tf":1.0},"98":{"tf":1.0}}}}},"df":1,"docs":{"323":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"35":{"tf":1.0},"466":{"tf":1.0}}}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"321":{"tf":1.0},"409":{"tf":1.0}}}},"u":{"d":{"df":10,"docs":{"182":{"tf":1.0},"183":{"tf":1.0},"185":{"tf":1.0},"205":{"tf":1.0},"352":{"tf":1.0},"434":{"tf":1.0},"449":{"tf":1.0},"451":{"tf":1.0},"481":{"tf":1.0},"490":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"8":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"139":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":4,"docs":{"173":{"tf":1.0},"23":{"tf":1.4142135623730951},"257":{"tf":1.0},"441":{"tf":1.0}}},"o":{"df":0,"docs":{},"u":{"d":{"df":2,"docs":{"135":{"tf":1.0},"352":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":13,"docs":{"141":{"tf":1.0},"183":{"tf":1.0},"185":{"tf":1.0},"205":{"tf":1.0},"218":{"tf":1.0},"239":{"tf":1.0},"34":{"tf":1.0},"449":{"tf":1.0},"451":{"tf":1.0},"481":{"tf":1.0},"490":{"tf":1.0},"514":{"tf":1.0},"525":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"248":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":6,"docs":{"257":{"tf":1.0},"42":{"tf":1.0},"442":{"tf":1.0},"453":{"tf":1.0},"5":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"206":{"tf":1.0},"459":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"359":{"tf":1.0},"62":{"tf":1.0}}}}}}},"t":{"df":1,"docs":{"483":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"189":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"308":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"149":{"tf":1.0},"256":{"tf":1.0}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"138":{"tf":1.0},"286":{"tf":1.0},"291":{"tf":1.0}}}}}}}},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":4,"docs":{"458":{"tf":1.0},"518":{"tf":1.0},"54":{"tf":1.0},"69":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"157":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"465":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":9,"docs":{"109":{"tf":1.0},"133":{"tf":1.0},"19":{"tf":1.0},"284":{"tf":1.0},"297":{"tf":1.0},"310":{"tf":1.0},"333":{"tf":1.0},"51":{"tf":1.0},"89":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":21,"docs":{"134":{"tf":1.0},"140":{"tf":1.0},"170":{"tf":1.0},"178":{"tf":1.0},"185":{"tf":1.0},"19":{"tf":1.0},"212":{"tf":1.0},"265":{"tf":1.0},"286":{"tf":1.0},"303":{"tf":1.0},"327":{"tf":1.0},"331":{"tf":1.0},"334":{"tf":1.0},"344":{"tf":1.0},"418":{"tf":1.0},"420":{"tf":1.0},"431":{"tf":1.0},"449":{"tf":1.0},"488":{"tf":1.0},"490":{"tf":1.0},"97":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"381":{"tf":1.0}}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"128":{"tf":1.0},"186":{"tf":1.0},"190":{"tf":1.0},"452":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"336":{"tf":1.0},"355":{"tf":1.0},"370":{"tf":1.0},"403":{"tf":1.0}}}}},"i":{"d":{"df":3,"docs":{"340":{"tf":1.0},"382":{"tf":1.0},"408":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"279":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"219":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"94":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":4,"docs":{"332":{"tf":1.0},"350":{"tf":1.0},"365":{"tf":1.0},"396":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"287":{"tf":1.0},"295":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"46":{"tf":1.0}}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"140":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":6,"docs":{"132":{"tf":1.0},"178":{"tf":1.0},"260":{"tf":1.4142135623730951},"353":{"tf":1.0},"50":{"tf":1.0},"69":{"tf":1.0}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"149":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"165":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"197":{"tf":1.0},"198":{"tf":1.0},"203":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"242":{"tf":1.0},"274":{"tf":1.0},"466":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"387":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"212":{"tf":1.0},"290":{"tf":1.0},"440":{"tf":1.0}}}}}}}},"d":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"203":{"tf":1.0},"210":{"tf":1.0},"227":{"tf":1.0}}}}},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"367":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"321":{"tf":1.0},"398":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":10,"docs":{"198":{"tf":1.0},"208":{"tf":1.0},"232":{"tf":1.0},"335":{"tf":1.0},"354":{"tf":1.0},"369":{"tf":1.0},"397":{"tf":1.0},"456":{"tf":1.0},"520":{"tf":1.0},"73":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"136":{"tf":1.0},"288":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"477":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"80":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"296":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":5,"docs":{"126":{"tf":1.0},"131":{"tf":1.0},"248":{"tf":1.0},"313":{"tf":1.0},"320":{"tf":1.0}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"201":{"tf":1.0},"256":{"tf":1.0}}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":4,"docs":{"120":{"tf":1.0},"375":{"tf":1.0},"524":{"tf":1.0},"59":{"tf":1.0}}}}}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"343":{"tf":1.0}}}}},"df":0,"docs":{}},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"27":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"106":{"tf":1.0},"307":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"202":{"tf":1.0},"4":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"222":{"tf":1.0},"476":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"142":{"tf":1.0}},"i":{"df":2,"docs":{"303":{"tf":1.0},"517":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":18,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"202":{"tf":1.0},"208":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"300":{"tf":1.0},"308":{"tf":1.0},"33":{"tf":1.0},"36":{"tf":1.0},"438":{"tf":1.0},"46":{"tf":1.0},"462":{"tf":1.0},"5":{"tf":1.0},"520":{"tf":1.0},"9":{"tf":1.0}}}}}}}},"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"294":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"109":{"tf":1.0},"133":{"tf":1.0},"284":{"tf":1.0},"297":{"tf":1.0},"51":{"tf":1.0},"89":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"127":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"309":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"202":{"tf":1.0},"29":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"39":{"tf":1.0}}}}}}},"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":6,"docs":{"180":{"tf":1.0},"21":{"tf":1.0},"263":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"430":{"tf":1.0}}},"df":0,"docs":{}},"r":{"a":{"c":{"df":1,"docs":{"144":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"478":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"143":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"271":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"203":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"168":{"tf":1.0},"299":{"tf":1.0},"307":{"tf":1.0},"418":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":6,"docs":{"148":{"tf":1.0},"189":{"tf":1.0},"277":{"tf":1.0},"513":{"tf":1.0},"514":{"tf":1.0},"515":{"tf":1.0}}}}}},"s":{"c":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"140":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"453":{"tf":1.0}}}}}}}},"t":{"c":{"df":1,"docs":{"352":{"tf":1.0}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"156":{"tf":1.0},"301":{"tf":1.0}}}}}}},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"34":{"tf":1.0},"424":{"tf":1.0},"515":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"77":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"84":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"204":{"tf":1.0},"292":{"tf":1.0},"439":{"tf":1.0},"467":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"399":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":3,"docs":{"325":{"tf":1.0},"326":{"tf":1.0},"402":{"tf":1.0}}}}}}}},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"139":{"tf":1.4142135623730951},"190":{"tf":1.0},"224":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"139":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"b":{"df":5,"docs":{"181":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"353":{"tf":1.0},"432":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"166":{"tf":1.0},"167":{"tf":1.0},"96":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"308":{"tf":1.0},"411":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"e":{"df":4,"docs":{"270":{"tf":1.0},"30":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.0}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":7,"docs":{"366":{"tf":1.0},"368":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.0},"384":{"tf":1.0},"387":{"tf":1.0},"426":{"tf":1.0}}}}}}}}}},"n":{"d":{"df":1,"docs":{"461":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"135":{"tf":1.0},"197":{"tf":1.0},"321":{"tf":1.0},"409":{"tf":1.0}}}}}},"l":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"167":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"316":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"299":{"tf":1.0}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"w":{"df":2,"docs":{"275":{"tf":1.0},"286":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"150":{"tf":1.0},"30":{"tf":1.0},"333":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"188":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"42":{"tf":1.0},"476":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"104":{"tf":1.0}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"136":{"tf":1.0},"52":{"tf":1.0},"93":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"224":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"334":{"tf":1.0}}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"225":{"tf":1.0}}}}}}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"226":{"tf":1.0}}}},"i":{"df":0,"docs":{},"t":{"df":7,"docs":{"107":{"tf":1.0},"136":{"tf":1.0},"215":{"tf":1.0},"383":{"tf":1.0},"484":{"tf":1.0},"52":{"tf":1.0},"93":{"tf":1.0}}}},"o":{"df":1,"docs":{"471":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":11,"docs":{"105":{"tf":1.0},"110":{"tf":1.0},"144":{"tf":1.0},"274":{"tf":1.0},"283":{"tf":1.0},"422":{"tf":1.0},"57":{"tf":1.0},"70":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"16":{"tf":1.4142135623730951},"194":{"tf":1.0},"445":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"213":{"tf":1.0},"242":{"tf":1.0},"457":{"tf":1.0},"519":{"tf":1.0},"74":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":2,"docs":{"277":{"tf":1.0},"513":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"d":{"c":{"df":0,"docs":{},"o":{"d":{"df":4,"docs":{"133":{"tf":1.0},"146":{"tf":1.0},"298":{"tf":1.0},"306":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"140":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":1,"docs":{"226":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"255":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"348":{"tf":1.0},"363":{"tf":1.0},"393":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"3":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"137":{"tf":1.0},"143":{"tf":1.0}}}},"df":0,"docs":{}}},"y":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"269":{"tf":1.0},"323":{"tf":1.0},"353":{"tf":1.0},"364":{"tf":1.0},"368":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"112":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"152":{"tf":1.0},"324":{"tf":1.0},"345":{"tf":1.0},"360":{"tf":1.0},"407":{"tf":1.0},"462":{"tf":1.0},"519":{"tf":1.0},"81":{"tf":1.0}}}}}}}}}},"n":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"u":{"df":1,"docs":{"120":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"151":{"tf":1.0}}},"df":0,"docs":{}}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"138":{"tf":1.0},"423":{"tf":1.0},"88":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":5,"docs":{"169":{"tf":1.0},"179":{"tf":1.0},"196":{"tf":1.0},"417":{"tf":1.0},"450":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":9,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"13":{"tf":1.0},"159":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"172":{"tf":1.0},"416":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":12,"docs":{"183":{"tf":1.0},"215":{"tf":1.0},"24":{"tf":1.0},"293":{"tf":1.0},"304":{"tf":1.0},"414":{"tf":1.0},"433":{"tf":1.0},"434":{"tf":1.0},"435":{"tf":1.0},"481":{"tf":1.0},"482":{"tf":1.0},"92":{"tf":1.0}}}},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":1,"docs":{"257":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"245":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"128":{"tf":1.0}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"203":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"292":{"tf":1.0},"341":{"tf":1.0},"385":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"304":{"tf":1.0}}}}}}}}},"k":{"b":{"/":{"a":{"d":{"d":{"_":{"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"494":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"493":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"498":{"tf":1.0}}}}}}}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"500":{"tf":1.0}}}},"df":0,"docs":{}}}},"c":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"502":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"512":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"501":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"496":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"495":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":1,"docs":{"497":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"492":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"511":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":15,"docs":{"103":{"tf":1.0},"106":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"124":{"tf":1.0},"178":{"tf":1.0},"222":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"260":{"tf":1.0},"476":{"tf":1.0}}},"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"344":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"101":{"tf":1.0},"54":{"tf":1.0}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":14,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"127":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.0},"196":{"tf":1.0},"200":{"tf":1.0},"383":{"tf":1.0},"454":{"tf":1.0},"461":{"tf":1.0},"463":{"tf":1.0},"70":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{":":{"/":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"/":{"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"505":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"506":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"504":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"507":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"508":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"509":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":12,"docs":{"0":{"tf":1.0},"15":{"tf":1.4142135623730951},"231":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.0},"241":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"250":{"tf":1.0},"450":{"tf":1.0},"47":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"344":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"l":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"334":{"tf":1.0},"344":{"tf":1.0},"469":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"377":{"tf":1.0}}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"270":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"255":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"220":{"tf":1.0}}}},"df":0,"docs":{}}}}},"i":{"b":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"209":{"tf":1.0},"235":{"tf":1.0},"260":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"257":{"tf":1.0}}},"k":{"df":6,"docs":{"199":{"tf":1.0},"35":{"tf":1.0},"44":{"tf":1.0},"458":{"tf":1.0},"471":{"tf":1.0},"518":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"38":{"tf":1.0}}}}},"o":{"a":{"d":{"df":1,"docs":{"267":{"tf":1.0}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{"df":6,"docs":{"135":{"tf":1.0},"181":{"tf":1.0},"2":{"tf":1.0},"351":{"tf":1.0},"432":{"tf":1.0},"86":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":6,"docs":{"204":{"tf":1.0},"313":{"tf":1.0},"394":{"tf":1.0},"482":{"tf":1.0},"63":{"tf":1.0},"94":{"tf":1.0}}}}}}}},"m":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"106":{"tf":1.0}}}},"r":{"df":0,"docs":{},"k":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"39":{"tf":1.0},"4":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"p":{"df":17,"docs":{"174":{"tf":1.0},"184":{"tf":1.0},"191":{"tf":1.0},"205":{"tf":1.0},"258":{"tf":1.4142135623730951},"275":{"tf":1.0},"326":{"tf":1.0},"414":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"448":{"tf":1.0},"475":{"tf":1.0},"485":{"tf":1.0},"486":{"tf":1.0},"489":{"tf":1.0},"92":{"tf":1.0},"99":{"tf":1.0}}}},"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":3,"docs":{"10":{"tf":1.0},"2":{"tf":1.0},"42":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"291":{"tf":1.0},"378":{"tf":1.0}}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"376":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"460":{"tf":1.0}}}},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"229":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"428":{"tf":1.0}}}}}},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"411":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"d":{"df":5,"docs":{"163":{"tf":1.0},"164":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"416":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"328":{"tf":1.0},"386":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":2,"docs":{"289":{"tf":1.0},"307":{"tf":1.0}},"l":{"df":4,"docs":{"261":{"tf":1.0},"283":{"tf":1.0},"399":{"tf":1.0},"88":{"tf":1.0}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"346":{"tf":1.0},"361":{"tf":1.0},"391":{"tf":1.0}}}}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"44":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":4,"docs":{"110":{"tf":1.0},"390":{"tf":1.0},"57":{"tf":1.0},"85":{"tf":1.0}}}}}}},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":4,"docs":{"107":{"tf":1.0},"108":{"tf":1.0},"137":{"tf":1.0},"53":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"469":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":4,"docs":{"338":{"tf":1.0},"357":{"tf":1.0},"372":{"tf":1.0},"405":{"tf":1.0}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":4,"docs":{"339":{"tf":1.0},"358":{"tf":1.0},"373":{"tf":1.0},"406":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"306":{"tf":1.0}}}}},"w":{"df":3,"docs":{"229":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0}}},"x":{"df":0,"docs":{},"t":{"df":8,"docs":{"102":{"tf":1.0},"158":{"tf":1.0},"192":{"tf":1.0},"211":{"tf":1.0},"252":{"tf":1.0},"282":{"tf":1.0},"479":{"tf":1.0},"68":{"tf":1.0}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":8,"docs":{"154":{"tf":1.0},"170":{"tf":1.0},"188":{"tf":1.0},"266":{"tf":1.0},"295":{"tf":1.0},"331":{"tf":1.0},"334":{"tf":1.0},"421":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"d":{"df":0,"docs":{},"e":{"df":7,"docs":{"199":{"tf":1.0},"201":{"tf":1.0},"223":{"tf":1.0},"399":{"tf":1.0},"409":{"tf":1.0},"55":{"tf":1.0},"71":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":6,"docs":{"197":{"tf":1.0},"207":{"tf":1.0},"413":{"tf":1.0},"455":{"tf":1.0},"460":{"tf":1.0},"72":{"tf":1.0}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"65":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":4,"docs":{"155":{"tf":1.0},"214":{"tf":1.0},"259":{"tf":1.0},"444":{"tf":1.0}}}}}}}},"o":{"b":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"483":{"tf":1.0},"64":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"m":{"a":{"df":2,"docs":{"182":{"tf":1.0},"435":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"n":{"b":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"229":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"p":{"a":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"148":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"i":{"df":3,"docs":{"182":{"tf":1.0},"352":{"tf":1.0},"433":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"142":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"df":24,"docs":{"12":{"tf":1.0},"135":{"tf":1.0},"162":{"tf":1.0},"170":{"tf":1.0},"171":{"tf":1.0},"176":{"tf":1.0},"180":{"tf":1.0},"2":{"tf":1.0},"204":{"tf":1.0},"3":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"388":{"tf":1.0},"4":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"n":{"df":3,"docs":{"122":{"tf":1.0},"377":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"138":{"tf":1.0},"140":{"tf":1.0}},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"289":{"tf":1.0}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":5,"docs":{"420":{"tf":1.0},"430":{"tf":1.0},"441":{"tf":1.0},"487":{"tf":1.0},"66":{"tf":1.0}}}}}}}}}},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"31":{"tf":1.0}}}},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"224":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"264":{"tf":1.0},"322":{"tf":1.0},"400":{"tf":1.0},"410":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"328":{"tf":1.0},"386":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"145":{"tf":1.0},"209":{"tf":1.0},"235":{"tf":1.0},"75":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"279":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"477":{"tf":1.0}}}}}}}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":5,"docs":{"387":{"tf":1.0},"388":{"tf":1.0},"389":{"tf":1.0},"390":{"tf":1.0},"407":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":4,"docs":{"126":{"tf":1.0},"131":{"tf":1.0},"285":{"tf":1.0},"50":{"tf":1.0}}}}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"337":{"tf":1.0},"356":{"tf":1.0},"371":{"tf":1.0},"404":{"tf":1.0}}}},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":1,"docs":{"385":{"tf":1.0}}}}}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"253":{"tf":1.0},"305":{"tf":1.0},"516":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"239":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"160":{"tf":1.0},"195":{"tf":1.0},"415":{"tf":1.0}}}}}}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"39":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"101":{"tf":1.0},"152":{"tf":1.0}}}}}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":9,"docs":{"104":{"tf":1.0},"230":{"tf":1.0},"233":{"tf":1.0},"236":{"tf":1.0},"240":{"tf":1.0},"243":{"tf":1.0},"246":{"tf":1.0},"249":{"tf":1.0},"314":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"267":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"210":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"242":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"417":{"tf":1.0},"463":{"tf":1.0},"86":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"510":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"319":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"150":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":3,"docs":{"275":{"tf":1.0},"414":{"tf":1.0},"485":{"tf":1.0}}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"d":{"df":8,"docs":{"180":{"tf":1.0},"182":{"tf":1.0},"263":{"tf":1.0},"349":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"359":{"tf":1.0},"431":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"48":{"tf":1.0}}}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":7,"docs":{"271":{"tf":1.0},"274":{"tf":1.0},"325":{"tf":1.0},"402":{"tf":1.0},"465":{"tf":1.0},"519":{"tf":1.0},"99":{"tf":1.0}}},"y":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"105":{"tf":1.0},"129":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":6,"docs":{"194":{"tf":1.0},"207":{"tf":1.0},"40":{"tf":1.0},"445":{"tf":1.0},"447":{"tf":1.0},"480":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"137":{"tf":1.0}}}},"df":0,"docs":{}},"df":3,"docs":{"1":{"tf":1.0},"225":{"tf":1.0},"4":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":1,"docs":{"112":{"tf":1.0}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"164":{"tf":1.0},"2":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"d":{"df":2,"docs":{"198":{"tf":1.0},"232":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":13,"docs":{"218":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"318":{"tf":1.0},"347":{"tf":1.0},"362":{"tf":1.0},"392":{"tf":1.0},"40":{"tf":1.0},"412":{"tf":1.0},"442":{"tf":1.0},"466":{"tf":1.0},"480":{"tf":1.0},"486":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"472":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"l":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"461":{"tf":1.0},"518":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"79":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":3,"docs":{"111":{"tf":1.0},"56":{"tf":1.0},"78":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"38":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"161":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"381":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":3,"docs":{"45":{"tf":1.0},"503":{"tf":1.0},"522":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"191":{"tf":1.0},"475":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":1,"docs":{"515":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"478":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":3,"docs":{"239":{"tf":1.0},"463":{"tf":1.0},"472":{"tf":1.0}}}},"s":{"df":3,"docs":{"348":{"tf":1.0},"363":{"tf":1.0},"393":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"353":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"175":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"147":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"153":{"tf":1.0},"293":{"tf":1.0},"523":{"tf":1.0}}}}}},"s":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":2,"docs":{"134":{"tf":1.0},"301":{"tf":1.0}}}}},"c":{"a":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"281":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":7,"docs":{"147":{"tf":1.0},"170":{"tf":1.0},"179":{"tf":1.0},"266":{"tf":1.0},"287":{"tf":1.0},"341":{"tf":1.0},"421":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"214":{"tf":1.0},"259":{"tf":1.0},"444":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":10,"docs":{"200":{"tf":1.0},"272":{"tf":1.0},"273":{"tf":1.0},"28":{"tf":1.0},"436":{"tf":1.0},"454":{"tf":1.0},"473":{"tf":1.0},"478":{"tf":1.0},"517":{"tf":1.0},"90":{"tf":1.0}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"32":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"280":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":2,"docs":{"311":{"tf":1.0},"521":{"tf":1.0}}},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"300":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"273":{"tf":1.0},"436":{"tf":1.0},"473":{"tf":1.0},"517":{"tf":1.0},"90":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"d":{"df":1,"docs":{"296":{"tf":1.0}}},"df":0,"docs":{},"v":{"df":2,"docs":{"2":{"tf":1.0},"6":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":10,"docs":{"174":{"tf":1.0},"177":{"tf":1.0},"184":{"tf":1.0},"191":{"tf":1.0},"205":{"tf":1.0},"258":{"tf":1.0},"448":{"tf":1.0},"475":{"tf":1.0},"488":{"tf":1.0},"489":{"tf":1.0}}}}}},"t":{"df":3,"docs":{"171":{"tf":1.0},"213":{"tf":1.0},"422":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":6,"docs":{"168":{"tf":1.0},"176":{"tf":1.0},"18":{"tf":1.4142135623730951},"180":{"tf":1.0},"447":{"tf":1.0},"524":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":5,"docs":{"171":{"tf":1.0},"213":{"tf":1.0},"383":{"tf":1.0},"467":{"tf":1.0},"87":{"tf":1.0}}}}},"df":0,"docs":{}},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":1,"docs":{"375":{"tf":1.0}}},"u":{"df":0,"docs":{},"t":{"df":9,"docs":{"105":{"tf":1.0},"231":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.0},"241":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"250":{"tf":1.0},"49":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"164":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"165":{"tf":1.0},"470":{"tf":1.0},"86":{"tf":1.0}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"r":{"d":{"df":2,"docs":{"36":{"tf":1.0},"525":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":6,"docs":{"130":{"tf":1.0},"177":{"tf":1.0},"194":{"tf":1.0},"205":{"tf":1.0},"451":{"tf":1.0},"489":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"314":{"tf":1.0}}}}}}},"i":{"c":{"df":1,"docs":{"3":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"395":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":23,"docs":{"102":{"tf":1.0},"158":{"tf":1.0},"192":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"211":{"tf":1.0},"252":{"tf":1.0},"282":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"451":{"tf":1.0},"452":{"tf":1.0},"479":{"tf":1.0},"68":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":12,"docs":{"20":{"tf":1.4142135623730951},"262":{"tf":1.0},"268":{"tf":1.0},"312":{"tf":1.0},"364":{"tf":1.0},"401":{"tf":1.0},"410":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"93":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":8,"docs":{"156":{"tf":1.0},"269":{"tf":1.0},"278":{"tf":1.0},"329":{"tf":1.0},"353":{"tf":1.0},"364":{"tf":1.0},"401":{"tf":1.0},"429":{"tf":1.0}}}}}}},"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"111":{"tf":1.0},"14":{"tf":1.0},"321":{"tf":1.0},"398":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"u":{"b":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"383":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"251":{"tf":1.0},"330":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"313":{"tf":1.0},"394":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"d":{"b":{"df":10,"docs":{"176":{"tf":1.0},"177":{"tf":1.0},"190":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.0},"388":{"tf":1.0},"390":{"tf":1.0},"427":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"y":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"378":{"tf":1.0},"384":{"tf":1.0},"389":{"tf":1.0},"429":{"tf":1.0}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"384":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":4,"docs":{"254":{"tf":1.0},"265":{"tf":1.0},"276":{"tf":1.0},"437":{"tf":1.0}}}}}}}},"t":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"219":{"tf":1.0},"470":{"tf":1.0}}},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"317":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":4,"docs":{"121":{"tf":1.0},"229":{"tf":1.0},"376":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":7,"docs":{"22":{"tf":1.4142135623730951},"220":{"tf":1.0},"276":{"tf":1.0},"437":{"tf":1.0},"438":{"tf":1.0},"439":{"tf":1.0},"91":{"tf":1.0}}}},"df":0,"docs":{}}}},"n":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"390":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"132":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"302":{"tf":1.0}}}},"df":0,"docs":{}},"df":10,"docs":{"173":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"186":{"tf":1.0},"278":{"tf":1.0},"329":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"452":{"tf":1.0},"526":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"272":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"345":{"tf":1.0},"360":{"tf":1.0}}}}}}},"p":{"df":3,"docs":{"216":{"tf":1.0},"37":{"tf":1.0},"468":{"tf":1.0}}}},"o":{"d":{"df":0,"docs":{},"o":{"/":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"317":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"l":{"df":2,"docs":{"331":{"tf":1.0},"333":{"tf":1.0}}}},"o":{"df":0,"docs":{},"l":{"df":7,"docs":{"12":{"tf":1.0},"326":{"tf":1.0},"486":{"tf":1.0},"491":{"tf":1.0},"499":{"tf":1.0},"62":{"tf":1.0},"99":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"210":{"tf":1.0},"317":{"tf":1.0}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"333":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"262":{"tf":1.0},"263":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"216":{"tf":1.0},"468":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":4,"docs":{"187":{"tf":1.0},"221":{"tf":1.0},"41":{"tf":1.0},"474":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":4,"docs":{"134":{"tf":1.0},"301":{"tf":1.0},"71":{"tf":1.0},"78":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"105":{"tf":1.0}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"193":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"p":{"df":2,"docs":{"171":{"tf":1.0},"213":{"tf":1.0}}},"s":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"238":{"tf":1.0},"464":{"tf":1.0}}}},"df":20,"docs":{"124":{"tf":1.0},"217":{"tf":1.0},"228":{"tf":1.0},"229":{"tf":1.0},"232":{"tf":1.0},"235":{"tf":1.0},"239":{"tf":1.0},"242":{"tf":1.0},"245":{"tf":1.0},"248":{"tf":1.0},"307":{"tf":1.0},"315":{"tf":1.0},"374":{"tf":1.0},"43":{"tf":1.0},"469":{"tf":1.0},"473":{"tf":1.0},"517":{"tf":1.0},"58":{"tf":1.0},"67":{"tf":1.0},"98":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"290":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":6,"docs":{"147":{"tf":1.0},"294":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"309":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"419":{"tf":1.0}},"i":{"df":2,"docs":{"13":{"tf":1.0},"172":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"310":{"tf":1.0}}}}}}}},"i":{"a":{"df":3,"docs":{"11":{"tf":1.0},"349":{"tf":1.0},"353":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"201":{"tf":1.0},"9":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"125":{"tf":1.0}}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"27":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":4,"docs":{"331":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0}}}},"w":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"87":{"tf":1.0}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"217":{"tf":1.0}}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"127":{"tf":1.0}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":5,"docs":{"206":{"tf":1.0},"227":{"tf":1.0},"443":{"tf":1.0},"459":{"tf":1.0},"484":{"tf":1.0}}}}}}},"l":{"d":{"df":1,"docs":{"112":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"38":{"tf":1.0}}}}}}},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"342":{"tf":1.0}}}}},"df":0,"docs":{}},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"298":{"tf":1.0}}}}}}}}},"lang":"English","pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5"},"results_options":{"limit_results":30,"teaser_word_count":30},"search_options":{"bool":"AND","expand":true,"fields":{"body":{"boost":1},"breadcrumbs":{"boost":1},"title":{"boost":2}}}}'); \ No newline at end of file diff --git a/docs/book/setup/environment.html b/docs/book/setup/environment.html new file mode 100644 index 0000000..dc03a64 --- /dev/null +++ b/docs/book/setup/environment.html @@ -0,0 +1,227 @@ + + + + + + Environment Configuration - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Environment Configuration

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/setup/installation.html b/docs/book/setup/installation.html new file mode 100644 index 0000000..d430e1e --- /dev/null +++ b/docs/book/setup/installation.html @@ -0,0 +1,227 @@ + + + + + + Installation Methods - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Installation Methods

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/setup/prerequisites.html b/docs/book/setup/prerequisites.html new file mode 100644 index 0000000..6329308 --- /dev/null +++ b/docs/book/setup/prerequisites.html @@ -0,0 +1,227 @@ + + + + + + Prerequisites - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Prerequisites

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/setup/project-init.html b/docs/book/setup/project-init.html new file mode 100644 index 0000000..bc62516 --- /dev/null +++ b/docs/book/setup/project-init.html @@ -0,0 +1,227 @@ + + + + + + Project Initialization - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Project Initialization

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/setup/verification.html b/docs/book/setup/verification.html new file mode 100644 index 0000000..aa5e6b7 --- /dev/null +++ b/docs/book/setup/verification.html @@ -0,0 +1,227 @@ + + + + + + Verification - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Verification

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/storage/backends.html b/docs/book/storage/backends.html new file mode 100644 index 0000000..d3ed098 --- /dev/null +++ b/docs/book/storage/backends.html @@ -0,0 +1,227 @@ + + + + + + Storage Backends - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Storage Backends

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/storage/filesystem.html b/docs/book/storage/filesystem.html new file mode 100644 index 0000000..f2cf487 --- /dev/null +++ b/docs/book/storage/filesystem.html @@ -0,0 +1,227 @@ + + + + + + Filesystem Storage - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Filesystem Storage

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/storage/memory.html b/docs/book/storage/memory.html new file mode 100644 index 0000000..c4b4f09 --- /dev/null +++ b/docs/book/storage/memory.html @@ -0,0 +1,227 @@ + + + + + + In-Memory Storage - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    In-Memory Storage

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/storage/surrealdb.html b/docs/book/storage/surrealdb.html new file mode 100644 index 0000000..f0d4257 --- /dev/null +++ b/docs/book/storage/surrealdb.html @@ -0,0 +1,227 @@ + + + + + + SurrealDB Storage - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    SurrealDB Storage

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/storage/sync.html b/docs/book/storage/sync.html new file mode 100644 index 0000000..7b37fed --- /dev/null +++ b/docs/book/storage/sync.html @@ -0,0 +1,227 @@ + + + + + + Sync Strategies - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Sync Strategies

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/templates/customization.html b/docs/book/templates/customization.html new file mode 100644 index 0000000..8ef466e --- /dev/null +++ b/docs/book/templates/customization.html @@ -0,0 +1,227 @@ + + + + + + Customization - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Customization

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/templates/documents.html b/docs/book/templates/documents.html new file mode 100644 index 0000000..d19d8f7 --- /dev/null +++ b/docs/book/templates/documents.html @@ -0,0 +1,227 @@ + + + + + + Document Templates - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Document Templates

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/templates/export.html b/docs/book/templates/export.html new file mode 100644 index 0000000..95f1ce1 --- /dev/null +++ b/docs/book/templates/export.html @@ -0,0 +1,227 @@ + + + + + + Export Templates - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Export Templates

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/templates/overview.html b/docs/book/templates/overview.html new file mode 100644 index 0000000..d3ab64c --- /dev/null +++ b/docs/book/templates/overview.html @@ -0,0 +1,227 @@ + + + + + + Template System - KOGRAL Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Keyboard shortcuts

    +
    +

    Press or to navigate between chapters

    +

    Press S or / to search in the book

    +

    Press ? to show this help

    +

    Press Esc to hide this help

    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Template System

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + diff --git a/docs/book/toc.html b/docs/book/toc.html new file mode 100644 index 0000000..e33aada --- /dev/null +++ b/docs/book/toc.html @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + +
    1. Introduction
    2. Project Definition
    3. What is KOGRAL?
    4. Core Concepts
    5. Why KOGRAL?
    6. Design Philosophy
    7. Guides
    8. Installation
    9. Quick Start
    10. Daily Workflows
    11. Use Cases
    12. Best Practices
    13. Architecture
    14. System Overview
    15. Graph Model
    16. Config-Driven Design
    17. Storage Architecture
    18. Logseq Blocks Design
    19. ADR-001: Nickel vs TOML for Configuration
    20. ADR-002: FastEmbed via AI Providers
    21. ADR-003: Hybrid Storage Strategy
    22. ADR-004: Logseq Blocks Support
    23. ADR-005: MCP Protocol for AI Integration
    24. Setup
    25. Prerequisites
    26. Installation Methods
    27. Project Initialization
    28. Environment Configuration
    29. Verification
    30. Configuration
    31. Configuration Overview
    32. Nickel Schemas
    33. Graph Settings
    34. Inheritance
    35. Examples
    36. Storage
    37. Storage Backends
    38. Filesystem Storage
    39. SurrealDB Storage
    40. In-Memory Storage
    41. Sync Strategies
    42. AI & Embeddings
    43. Embeddings Overview
    44. Provider Configuration
    45. FastEmbed Local
    46. OpenAI Integration
    47. Claude Integration
    48. Ollama Integration
    49. Semantic Search
    50. Templates
    51. Template System
    52. Document Templates
    53. Export Templates
    54. Customization
    55. CLI
    56. CLI Overview
    57. Commands Reference
    58. Workflows
    59. NuShell Scripts
    60. Apps & Connections
    61. MCP Quick Guide
    62. Claude Code Integration
    63. Logseq Integration
    64. Obsidian Compatibility
    65. Git Workflows
    66. API Reference
    67. MCP Protocol
    68. Tools Reference
    69. Resources
    70. Rust API
    71. Contributing
    72. Development Setup
    73. Code Standards
    74. Testing
    + + diff --git a/docs/book/toc.js b/docs/book/toc.js new file mode 100644 index 0000000..f8c0219 --- /dev/null +++ b/docs/book/toc.js @@ -0,0 +1,70 @@ +// Populate the sidebar +// +// This is a script, and not included directly in the page, to control the total size of the book. +// The TOC contains an entry for each page, so if each page includes a copy of the TOC, +// the total size of the page becomes O(n**2). +class MDBookSidebarScrollbox extends HTMLElement { + constructor() { + super(); + } + connectedCallback() { + this.innerHTML = '
    1. Introduction
    2. Project Definition
    3. What is KOGRAL?
    4. Core Concepts
    5. Why KOGRAL?
    6. Design Philosophy
    7. Guides
    8. Installation
    9. Quick Start
    10. Daily Workflows
    11. Use Cases
    12. Best Practices
    13. Architecture
    14. System Overview
    15. Graph Model
    16. Config-Driven Design
    17. Storage Architecture
    18. Logseq Blocks Design
    19. ADR-001: Nickel vs TOML for Configuration
    20. ADR-002: FastEmbed via AI Providers
    21. ADR-003: Hybrid Storage Strategy
    22. ADR-004: Logseq Blocks Support
    23. ADR-005: MCP Protocol for AI Integration
    24. Setup
    25. Prerequisites
    26. Installation Methods
    27. Project Initialization
    28. Environment Configuration
    29. Verification
    30. Configuration
    31. Configuration Overview
    32. Nickel Schemas
    33. Graph Settings
    34. Inheritance
    35. Examples
    36. Storage
    37. Storage Backends
    38. Filesystem Storage
    39. SurrealDB Storage
    40. In-Memory Storage
    41. Sync Strategies
    42. AI & Embeddings
    43. Embeddings Overview
    44. Provider Configuration
    45. FastEmbed Local
    46. OpenAI Integration
    47. Claude Integration
    48. Ollama Integration
    49. Semantic Search
    50. Templates
    51. Template System
    52. Document Templates
    53. Export Templates
    54. Customization
    55. CLI
    56. CLI Overview
    57. Commands Reference
    58. Workflows
    59. NuShell Scripts
    60. Apps & Connections
    61. MCP Quick Guide
    62. Claude Code Integration
    63. Logseq Integration
    64. Obsidian Compatibility
    65. Git Workflows
    66. API Reference
    67. MCP Protocol
    68. Tools Reference
    69. Resources
    70. Rust API
    71. Contributing
    72. Development Setup
    73. Code Standards
    74. Testing
    '; + // Set the current, active page, and reveal it if it's hidden + let current_page = document.location.href.toString().split("#")[0].split("?")[0]; + if (current_page.endsWith("/")) { + current_page += "index.html"; + } + var links = Array.prototype.slice.call(this.querySelectorAll("a")); + var l = links.length; + for (var i = 0; i < l; ++i) { + var link = links[i]; + var href = link.getAttribute("href"); + if (href && !href.startsWith("#") && !/^(?:[a-z+]+:)?\/\//.test(href)) { + link.href = path_to_root + href; + } + // The "index" page is supposed to alias the first chapter in the book. + if (link.href === current_page || (i === 0 && path_to_root === "" && current_page.endsWith("/index.html"))) { + link.classList.add("active"); + var parent = link.parentElement; + if (parent && parent.classList.contains("chapter-item")) { + parent.classList.add("expanded"); + } + while (parent) { + if (parent.tagName === "LI" && parent.previousElementSibling) { + if (parent.previousElementSibling.classList.contains("chapter-item")) { + parent.previousElementSibling.classList.add("expanded"); + } + } + parent = parent.parentElement; + } + } + } + // Track and set sidebar scroll position + this.addEventListener('click', function(e) { + if (e.target.tagName === 'A') { + sessionStorage.setItem('sidebar-scroll', this.scrollTop); + } + }, { passive: true }); + var sidebarScrollTop = sessionStorage.getItem('sidebar-scroll'); + sessionStorage.removeItem('sidebar-scroll'); + if (sidebarScrollTop) { + // preserve sidebar scroll position when navigating via links within sidebar + this.scrollTop = sidebarScrollTop; + } else { + // scroll sidebar to current active section when navigating via "next/previous chapter" buttons + var activeSection = document.querySelector('#sidebar .active'); + if (activeSection) { + activeSection.scrollIntoView({ block: 'center' }); + } + } + // Toggle buttons + var sidebarAnchorToggles = document.querySelectorAll('#sidebar a.toggle'); + function toggleSection(ev) { + ev.currentTarget.parentElement.classList.toggle('expanded'); + } + Array.from(sidebarAnchorToggles).forEach(function (el) { + el.addEventListener('click', toggleSection); + }); + } +} +window.customElements.define("mdbook-sidebar-scrollbox", MDBookSidebarScrollbox); diff --git a/docs/book/tomorrow-night.css b/docs/book/tomorrow-night.css new file mode 100644 index 0000000..11752b8 --- /dev/null +++ b/docs/book/tomorrow-night.css @@ -0,0 +1,104 @@ +/* Tomorrow Night Theme */ +/* https://github.com/jmblog/color-themes-for-highlightjs */ +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ +/* https://github.com/jmblog/color-themes-for-highlightjs */ + +/* Tomorrow Comment */ +.hljs-comment { + color: #969896; +} + +/* Tomorrow Red */ +.hljs-variable, +.hljs-attribute, +.hljs-attr, +.hljs-tag, +.hljs-regexp, +.ruby .hljs-constant, +.xml .hljs-tag .hljs-title, +.xml .hljs-pi, +.xml .hljs-doctype, +.html .hljs-doctype, +.css .hljs-id, +.css .hljs-class, +.css .hljs-pseudo { + color: #cc6666; +} + +/* Tomorrow Orange */ +.hljs-number, +.hljs-preprocessor, +.hljs-pragma, +.hljs-built_in, +.hljs-literal, +.hljs-params, +.hljs-constant { + color: #de935f; +} + +/* Tomorrow Yellow */ +.ruby .hljs-class .hljs-title, +.css .hljs-rule .hljs-attribute { + color: #f0c674; +} + +/* Tomorrow Green */ +.hljs-string, +.hljs-value, +.hljs-inheritance, +.hljs-header, +.hljs-name, +.ruby .hljs-symbol, +.xml .hljs-cdata { + color: #b5bd68; +} + +/* Tomorrow Aqua */ +.hljs-title, +.hljs-section, +.css .hljs-hexcolor { + color: #8abeb7; +} + +/* Tomorrow Blue */ +.hljs-function, +.python .hljs-decorator, +.python .hljs-title, +.ruby .hljs-function .hljs-title, +.ruby .hljs-title .hljs-keyword, +.perl .hljs-sub, +.javascript .hljs-title, +.coffeescript .hljs-title { + color: #81a2be; +} + +/* Tomorrow Purple */ +.hljs-keyword, +.javascript .hljs-function { + color: #b294bb; +} + +.hljs { + display: block; + overflow-x: auto; + background: #1d1f21; + color: #c5c8c6; +} + +.coffeescript .javascript, +.javascript .xml, +.tex .hljs-formula, +.xml .javascript, +.xml .vbscript, +.xml .css, +.xml .hljs-cdata { + opacity: 0.5; +} + +.hljs-addition { + color: #718c00; +} + +.hljs-deletion { + color: #c82829; +} diff --git a/docs/cli/README.md b/docs/cli/README.md new file mode 100644 index 0000000..230b208 --- /dev/null +++ b/docs/cli/README.md @@ -0,0 +1,25 @@ +# CLI Documentation + +Complete reference for KOGRAL command-line interfaces: + +- [Overview](overview.md) - Introduction to CLI and NuShell scripts, when to use each +- [Commands Reference](commands.md) - Detailed documentation for all 13 kogral-cli commands +- [Workflows](workflows.md) - Task-oriented guides for common operations +- [NuShell Scripts](nushell-scripts.md) - Advanced maintenance and automation scripts + +## Quick Links + +### For First-Time Users +1. Start with [Overview](overview.md) to understand both interfaces +2. Follow [Quick Start](overview.md#installation) to install CLI and scripts +3. Check [Workflows](workflows.md) for your specific use case + +### For Advanced Users +- [NuShell Scripts](nushell-scripts.md) - Batch operations, automation, CI/CD +- [Commands Reference](commands.md) - All CLI options and parameters + +### For Specific Tasks +- Creating notes: See [Workflows](workflows.md#creating-knowledge) +- Searching: See [Commands Reference](commands.md#search) +- Importing from Logseq: See [NuShell Scripts - kogral-import-logseq.nu](nushell-scripts.md#kogral-import-logseqnu) +- Syncing with SurrealDB: See [NuShell Scripts - kogral-sync.nu](nushell-scripts.md#kogral-syncnu) diff --git a/docs/cli/commands.md b/docs/cli/commands.md new file mode 100644 index 0000000..0dc205b --- /dev/null +++ b/docs/cli/commands.md @@ -0,0 +1 @@ +# Commands Reference diff --git a/docs/cli/overview.md b/docs/cli/overview.md new file mode 100644 index 0000000..019d14b --- /dev/null +++ b/docs/cli/overview.md @@ -0,0 +1,242 @@ +# CLI Overview + +KOGRAL provides two complementary command-line interfaces for knowledge base management: + +1. **kogral-cli** - The main binary with 13 commands for node operations, search, and config +2. **NuShell Scripts** - Maintenance and automation scripts for advanced operations + +## kogral-cli Binary + +The Rust CLI tool (`cargo install --path crates/kogral-cli`) provides primary operations: + +### Core Commands + +- `init` - Initialize `.kogral/` directory in project +- `add` - Create new nodes (note, decision, guideline, pattern, journal) +- `search` - Text and semantic search across knowledge base +- `link` - Create relationships between nodes +- `list` - List all nodes with filtering options +- `show` - Display node details with relationships +- `delete` - Remove nodes from knowledge base +- `graph` - Visualize knowledge graph structure +- `config` - Manage configuration settings +- `sync` - Sync filesystem ↔ SurrealDB (underlying operation) +- `import` - Import from Logseq format +- `export` - Export to Logseq/JSON/Markdown +- `serve` - Start MCP server for Claude Code integration + +### Quick Start + +```bash +# Initialize project +kogral init + +# Create a decision note +kogral add --type decision "API Authentication Strategy" + +# Search for related content +kogral search "authentication" --limit 10 + +# Create relationships +kogral link "api-auth" --relates-to "api-design" --depends-on "security-policy" + +# View the graph +kogral graph --output graph.svg +``` + +See [Commands Reference](commands.md) for complete command documentation and [Workflows](workflows.md) for task-oriented guides. + +## NuShell Scripts + +Production-ready scripts written in NuShell for maintenance and automation tasks: + +| Script | Purpose | +| -------- | --------- | +| **kogral-sync.nu** | Bidirectional sync (filesystem ↔ SurrealDB) | +| **kogral-reindex.nu** | Rebuild embeddings index (fastembed, OpenAI, Claude, Ollama) | +| **kogral-import-logseq.nu** | Import from Logseq graphs | +| **kogral-export-logseq.nu** | Export to Logseq format | +| **kogral-migrate.nu** | Schema migrations (version management) | + +### Quick Start + +```bash +# Reindex with local embeddings +nu scripts/kogral-reindex.nu + +# Import from Logseq +nu scripts/kogral-import-logseq.nu ~/Logseq/mydb + +# Export to Logseq +nu scripts/kogral-export-logseq.nu ~/logseq-export + +# Sync to SurrealDB +nu scripts/kogral-sync.nu --direction to-storage +``` + +See [NuShell Scripts](nushell-scripts.md) for detailed documentation on all scripts, options, and examples. + +## CLI vs Scripts: When to Use Each + +### Use kogral-cli for + +- **Daily operations** - Adding notes, creating relationships, searching +- **Interactive workflows** - Real-time graph operations +- **Quick queries** - Text/semantic search with immediate results +- **Configuration** - Viewing and updating settings +- **Single-file operations** - Creating, viewing, deleting nodes + +### Use NuShell Scripts for + +- **Batch operations** - Processing many files at once +- **Automation** - Scheduled tasks via cron/systemd +- **Storage sync** - Keeping filesystem and SurrealDB in sync +- **Format migration** - Importing/exporting entire graphs +- **Maintenance** - Reindexing, schema upgrades +- **CI/CD pipelines** - Automated knowledge base updates + +## Installation + +### kogral-cli + +```bash +cargo install --path crates/kogral-cli +``` + +### NuShell Scripts + +Scripts are in the repository at `scripts/`: + +```bash +# Direct execution +nu scripts/kogral-sync.nu --help + +# Via justfile +just scripts::sync +just scripts::reindex +just scripts::import +just scripts::export +``` + +## Configuration + +Both CLI and scripts respect the KOGRAL configuration system: + +- **Primary config**: `.kogral/config.toml` or via Nickel schemas +- **Storage backend**: Selected in config (filesystem, SurrealDB, or both) +- **Embedding provider**: Configured for reindexing operations +- **Environment variables**: Used for API credentials (OPENAI_API_KEY, ANTHROPIC_API_KEY) + +See [Configuration](../config/overview.md) for details. + +## Error Handling + +Both interfaces follow clean error patterns: + +**kogral-cli**: +- Clear error messages with context +- Exit codes: 0 (success), 1 (error) +- Help text via `--help` on any command + +**NuShell Scripts**: +- Production patterns without try-catch wrapping +- Exit codes: 0 (success), 1 (fatal error) +- Dry-run mode for all destructive operations +- Direct error propagation (errors are visible) + +## Performance Notes + +- **CLI operations**: Sub-second for single nodes, scales linearly +- **Scripts**: Optimize for batch processing with configurable parameters +- **Search**: Text search is instant; semantic search depends on provider +- **Reindexing**: Scales with node count and API latency (use batches to control) + +## Integration + +### With justfile + +Most operations can be run via justfile recipes: + +```bash +just dev::init # Initialize project +just dev::add-note # Create a note +just dev::search # Search knowledge base +just scripts::sync # Run sync script +just scripts::reindex # Run reindex script +``` + +### With Git workflows + +Knowledge base is git-friendly: + +```bash +# Commit changes +git add .kogral/ +git commit -m "Update architecture decisions" + +# Sync to SurrealDB +nu scripts/kogral-sync.nu --direction to-storage + +# Export for sharing +nu scripts/kogral-export-logseq.nu ./share/ +``` + +### With CI/CD + +Scripts are designed for automation: + +```yaml +# GitHub Actions example +- name: Reindex embeddings + run: nu scripts/kogral-reindex.nu --provider fastembed + +- name: Export knowledge base + run: nu scripts/kogral-export-logseq.nu ./artifacts/ + +- name: Sync to storage + run: nu scripts/kogral-sync.nu +``` + +## Troubleshooting + +### "kogral: command not found" + +Install the CLI: + +```bash +cargo install --path crates/kogral-cli +``` + +### "nu: command not found" + +Install NuShell: + +```bash +# macOS +brew install nushell + +# Linux +cargo install nu + +# Or see https://www.nushell.sh/book/installation.html +``` + +### Scripts not executable + +Make scripts executable: + +```bash +chmod +x scripts/*.nu +``` + +Or run directly with `nu`: + +```bash +nu scripts/kogral-sync.nu +``` + +## Next Steps + +- [Commands Reference](commands.md) - Detailed CLI command documentation +- [Workflows](workflows.md) - Task-oriented guides for common operations +- [NuShell Scripts](nushell-scripts.md) - Advanced maintenance and automation diff --git a/docs/cli/workflows.md b/docs/cli/workflows.md new file mode 100644 index 0000000..307ef40 --- /dev/null +++ b/docs/cli/workflows.md @@ -0,0 +1 @@ +# Workflows diff --git a/docs/config/examples.md b/docs/config/examples.md new file mode 100644 index 0000000..df635b4 --- /dev/null +++ b/docs/config/examples.md @@ -0,0 +1 @@ +# Examples diff --git a/docs/config/graph-settings.md b/docs/config/graph-settings.md new file mode 100644 index 0000000..14f6ba8 --- /dev/null +++ b/docs/config/graph-settings.md @@ -0,0 +1 @@ +# Graph Settings diff --git a/docs/config/inheritance.md b/docs/config/inheritance.md new file mode 100644 index 0000000..1384947 --- /dev/null +++ b/docs/config/inheritance.md @@ -0,0 +1 @@ +# Inheritance diff --git a/docs/config/nickel-schemas.md b/docs/config/nickel-schemas.md new file mode 100644 index 0000000..70c1b14 --- /dev/null +++ b/docs/config/nickel-schemas.md @@ -0,0 +1 @@ +# Nickel Schemas diff --git a/docs/config/overview.md b/docs/config/overview.md new file mode 100644 index 0000000..0e40fae --- /dev/null +++ b/docs/config/overview.md @@ -0,0 +1 @@ +# Configuration Overview diff --git a/docs/contributing/development.md b/docs/contributing/development.md new file mode 100644 index 0000000..4698bc8 --- /dev/null +++ b/docs/contributing/development.md @@ -0,0 +1 @@ +# Development Setup diff --git a/docs/contributing/standards.md b/docs/contributing/standards.md new file mode 100644 index 0000000..57ef393 --- /dev/null +++ b/docs/contributing/standards.md @@ -0,0 +1 @@ +# Code Standards diff --git a/docs/contributing/testing.md b/docs/contributing/testing.md new file mode 100644 index 0000000..f00b526 --- /dev/null +++ b/docs/contributing/testing.md @@ -0,0 +1 @@ +# Testing diff --git a/docs/diagrams/architecture-overview.svg b/docs/diagrams/architecture-overview.svg new file mode 100644 index 0000000..1a7efb6 --- /dev/null +++ b/docs/diagrams/architecture-overview.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + Knowledge Base Architecture + + + + kogral-core (Rust Library) + + + + Config Layer + Nickel → JSON → KbConfig + + + + Storage Layer (Hybrid) + + FileSystem + + SurrealDB + + In-Memory + + + + Graph Engine + Nodes: Note, Decision, Guideline, Pattern, Journal, Execution + Edges: relates_to, depends_on, implements, extends, supersedes, explains + Multi-graph: local (project) + shared (central) + + + + Parser + Markdown + Frontmatter + + + Embeddings + rig-core + fastembed + + + Query + Text+Vector + Cross-graph + + + + kogral-mcp (MCP Server) + + Tools: + kogral/search, kogral/add_note, kogral/add_decision + kogral/link, kogral/get_guidelines, kogral/export + + Resources: + kogral://project/notes, kogral://project/decisions + kogral://shared/guidelines, kogral://shared/patterns + + Prompts: + kogral/summarize_project, kogral/find_related + + + + kogral-cli (Command Line) + + Commands: + init, add, search, link, sync + serve, graph, import, export + get-guidelines, list, show, stats + + Features: + Interactive prompts + Template-based document creation + Graph visualization + + + + NuShell Scripts & Plugins + + Scripts: + kogral-sync.nu, kogral-backup.nu, kogral-reindex.nu + + Plugins: + kogral-import-logseq.nu, kogral-stats.nu + + + + + + + + + + + JSON-RPC + Direct API + CLI invocation + + diff --git a/docs/diagrams/config-composition.svg b/docs/diagrams/config-composition.svg new file mode 100644 index 0000000..d665e80 --- /dev/null +++ b/docs/diagrams/config-composition.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + Configuration Composition Flow + Nickel Schema → Validated Config → Rust Struct + + + + Layer 1: Schema Contracts (Type Definitions) + + + schemas/contracts.ncl + KbConfig = { + graph | GraphConfig, + storage | StorageConfig, + + + Defines types: + StorageType = [| 'filesystem, + 'memory, 'surrealdb |] + + + + validates + + + + Layer 2: Default Values + + + schemas/defaults.ncl + base = { + storage = { primary = 'filesystem, secondary = { enabled = false } }, + embeddings = { provider = 'fastembed, model = "BAAI/bge-small-en-v1.5" }, + + + + base for + + + + Layer 3: Mode Overlay (Environment-Specific) + + + + modes/dev.ncl + storage = { + primary = 'filesystem, + secondary.enabled + = false + } + + + + modes/prod.ncl + storage = { + primary = 'filesystem, + secondary.enabled + = true + } + + + + modes/test.ncl + storage = { + primary = 'memory, + secondary.enabled + = false + } + + + + select one + + + + Layer 4: User Customization (Project-Specific) + + + .kogral-config/core/kogral.ncl + { graph = { name = "my-project" }, embeddings = { model = "custom-model" } } + + + + Composition (helpers.ncl) + merge_with_override(defaults, + mode_overlay, user_custom) + + + + + + + nickel export + + + + Exported JSON (.kogral-config/targets/kogral-core.json) + + + {"graph":{"name":"my-project"},"storage":{"primary":"filesystem"},...} + + + + serde deserialize + + + + Rust: KbConfig Struct + let config = KbConfig::from_file(".kogral-config/targets/kogral-core.json")?; + + diff --git a/docs/diagrams/core-concepts.svg b/docs/diagrams/core-concepts.svg new file mode 100644 index 0000000..4fb8d34 --- /dev/null +++ b/docs/diagrams/core-concepts.svg @@ -0,0 +1,148 @@ + + + + + + + + + + + Knowledge Base: Node Types & Relationships + + + + Node Types + + + + Note + General knowledge, observations + Fields: title, content, tags + + + + Decision (ADR) + Architectural decisions + Fields: context, decision, consequences, status + + + + Guideline + Code standards, practices + Fields: language, category, rules, examples + + + + Pattern + Reusable solutions + Fields: problem, solution, context, forces + + + + Journal + Daily notes (auto-dated) + Fields: date, content, highlights + + + + Execution + Agent task records (from Vapora KG) + Fields: task_type, agent, outcome, duration + + + + Relationship Types (Edges) + + + + Error Handling + (Note) + + + Logging Best + Practices (Note) + + + Rust Error + Guidelines (Guideline) + + + + relates_to + + + + Result Pattern + (Pattern) + + + Error Handling + Rules (Guideline) + + + + depends_on + + + + Task: Fix Bug + (Execution) + + + Debugging + Pattern (Pattern) + + + + implements + + + + Project Rules + (Guideline) + + + Base Rust + Guidelines (Guideline) + + + + extends + + + + ADR-002 + (Decision) + + + ADR-001 + (Decision) + + + + supersedes + + + + Edge Types + • relates_to - Conceptual link + • depends_on - Required prerequisite + • implements - Concrete realization + • extends - Inherits + overrides + • supersedes - Replaces older version + + diff --git a/docs/diagrams/storage-architecture.svg b/docs/diagrams/storage-architecture.svg new file mode 100644 index 0000000..77c9952 --- /dev/null +++ b/docs/diagrams/storage-architecture.svg @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + Hybrid Storage Architecture + Filesystem (git-friendly) + SurrealDB (scalable) + In-Memory (cache) + + + + Graph Engine (kogral-core) + Unified API: add_node, get_node, query + HashMap<String, Node> for O(1) access + Multi-graph: local (project) + shared (central) + + + + Storage Trait + trait Storage: save(), load(), delete(), list(), search() + Abstraction for all backends + + + + + + + + + Filesystem Storage + + Purpose: + • Git-friendly + • Human-readable + • Logseq compatible + + Format: + .kogral/notes/2026-01-17-topic.md + --- + id: note-123 + type: note + tags: [rust, architecture] + --- + # Title + Content with [[wikilinks]] + + Watch: + notify crate (file system events) + + + + SurrealDB Storage + + Purpose: + • Scalable queries + • Advanced graph operations + • Shared organizational knowledge + + Schema: + DEFINE TABLE node SCHEMAFULL; + DEFINE FIELD id ON node TYPE string; + DEFINE FIELD type ON node TYPE string; + DEFINE FIELD embedding ON node + TYPE array<number>; + + Features: + • Graph queries (RELATE) + • Vector search (embeddings) + • Full-text search + • Multi-tenancy (namespace/db) + + + + In-Memory Storage + + Purpose: + • Fast development + • Testing (ephemeral) + • Cache layer + + Implementation: + DashMap<String, Node> + Concurrent HashMap + + Features: + • O(1) access + • No persistence + • Thread-safe + • No setup required + + Use Cases: + • cargo test (test mode) + • Session cache + + + + + + + + + Sync Mechanism + Bidirectional sync + • File change → SurrealDB + • SurrealDB update → File + + + + sync + + + + 💡 Configured via .kogral-config/core/kogral.ncl: primary storage + optional secondary (SurrealDB) + sync settings + + diff --git a/docs/guides/best-practices.md b/docs/guides/best-practices.md new file mode 100644 index 0000000..874ca7f --- /dev/null +++ b/docs/guides/best-practices.md @@ -0,0 +1 @@ +# Best Practices diff --git a/docs/guides/daily-workflows.md b/docs/guides/daily-workflows.md new file mode 100644 index 0000000..72931f1 --- /dev/null +++ b/docs/guides/daily-workflows.md @@ -0,0 +1 @@ +# Daily Workflows diff --git a/docs/guides/installation.md b/docs/guides/installation.md new file mode 100644 index 0000000..84d3928 --- /dev/null +++ b/docs/guides/installation.md @@ -0,0 +1,380 @@ +# Installation + +This guide covers installing and setting up the KOGRAL. + +## Prerequisites + +### Required + +- **Rust** 1.70 or later + + ```bash + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + ``` + +- **Nickel** CLI for configuration management + + ```bash + cargo install nickel-lang-cli + ``` + +### Optional + +- **NuShell** for maintenance scripts + + ```bash + cargo install nu + ``` + +- **SurrealDB** for scalable storage backend + + ```bash + # macOS + brew install surrealdb/tap/surreal + + # Linux/Windows + curl -sSf https://install.surrealdb.com | sh + ``` + +## Installation Methods + +### Method 1: Install from Source (Recommended) + +```bash +# Clone the repository +git clone knowledge-base +cd knowledge-base + +# Build the workspace +cargo build --release + +# Install CLI tool +cargo install --path crates/kogral-cli + +# Verify installation +kogral --version +``` + +### Method 2: Build Specific Crates + +```bash +# Build only kogral-core library +cargo build --package kogral-core --release + +# Build only kogral-cli +cargo build --package kogral-cli --release + +# Build only kogral-mcp server +cargo build --package kogral-mcp --release +``` + +### Method 3: Build with Features + +```bash +# Build with all features (filesystem + SurrealDB + fastembed) +cargo build --workspace --all-features --release + +# Build with specific features +cargo build --package kogral-core --features "surrealdb,fastembed" --release +``` + +## Feature Flags + +kogral-core supports optional features: + +| Feature | Description | Default | +| --------- | ------------- | --------- | +| `filesystem` | Filesystem storage backend | ✅ Yes | +| `surrealdb` | SurrealDB storage backend | ❌ No | +| `fastembed` | Local embedding generation | ❌ No | +| `full` | All features enabled | ❌ No | + +Example usage: + +```bash +# Enable SurrealDB backend +cargo build --features surrealdb + +# Enable all features +cargo build --features full +``` + +## Environment Setup + +### 1. Initialize a Knowledge Base + +```bash +# Navigate to your project +cd /path/to/your/project + +# Initialize .kogral directory +kogral init + +# Or initialize with custom name +kogral init --name "My Project" --description "Project knowledge base" +``` + +This creates: + +```text +your-project/ +└── .kogral/ + ├── config.toml + ├── notes/ + ├── decisions/ + ├── guidelines/ + ├── patterns/ + └── journal/ +``` + +### 2. Configure Nickel Schemas (Optional) + +If you want advanced configuration: + +```bash +# Copy default config +cp /path/to/knowledge-base/config/defaults.ncl .kogral/config.ncl + +# Edit configuration +$EDITOR .kogral/config.ncl + +# Export to TOML (for kogral-cli compatibility) +nickel export --format json .kogral/config.ncl | kogral config import +``` + +### 3. Set Up Shared Knowledge Base (Optional) + +For shared guidelines and patterns across projects: + +```bash +# Create shared KOGRAL location +mkdir -p ~/Tools/.kogral-shared +cd ~/Tools/.kogral-shared + +# Initialize shared KOGRAL +kogral init --name "Shared Knowledge" --description "Cross-project guidelines" + +# Configure inheritance in project +kogral config set inheritance.base ~/Tools/.kogral-shared +``` + +## Verify Installation + +### Test CLI + +```bash +# Check version +kogral --version + +# Show help +kogral --help + +# Test initialization (dry-run) +kogral init --dry-run +``` + +### Test MCP Server + +```bash +# Start MCP server in test mode +kogral serve --transport stdio + +# In another terminal, test with echo +echo '{"jsonrpc":"2.0","id":1,"method":"kogral/search","params":{"query":"test"}}' | kogral serve +``` + +### Run Tests + +```bash +# Run all tests +cargo test --workspace + +# Run integration tests +cargo test --package kogral-core --test '*' + +# Run with all features +cargo test --workspace --all-features +``` + +## SurrealDB Setup (Optional) + +If using SurrealDB backend: + +### Start SurrealDB Server + +```bash +# Start server +surreal start --log trace --user root --pass root file://data.db + +# Or use memory backend for testing +surreal start --log trace --user root --pass root memory +``` + +### Configure kogral-core + +Edit `.kogral/config.ncl`: + +```nickel +{ + storage = { + primary = 'filesystem, + secondary = { + enabled = true, + type = 'surrealdb, + url = "ws://localhost:8000", + namespace = "kogral", + database = "default", + username = "root", + password = "root", + }, + }, +} +``` + +### Initialize Schema + +```bash +# Run migration script +nu scripts/kogral-migrate.nu --target latest + +# Or manually import schema +surreal import --conn ws://localhost:8000 --user root --pass root --ns kogral --db default schema.surql +``` + +## Embedding Provider Setup (Optional) + +### Local fastembed + +```bash +# Build with fastembed feature +cargo build --package kogral-core --features fastembed + +# Models will be downloaded on first use +``` + +### API Providers (OpenAI, Claude, Ollama) + +Set environment variables: + +```bash +# OpenAI +export OPENAI_API_KEY="sk-..." + +# Claude (Anthropic) +export ANTHROPIC_API_KEY="sk-ant-..." + +# Ollama (local) +export OLLAMA_API_BASE="http://localhost:11434" +``` + +Configure provider in `.kogral/config.ncl`: + +```nickel +{ + embeddings = { + enabled = true, + provider = 'openai, # or 'claude, 'ollama, 'fastembed + model = "text-embedding-3-small", + api_key_env = "OPENAI_API_KEY", + }, +} +``` + +## Claude Code Integration + +To use kogral-mcp with Claude Code: + +### 1. Build MCP Server + +```bash +cargo build --package kogral-mcp --release +``` + +### 2. Configure Claude Code + +Add to `~/.config/claude/config.json`: + +```json +{ + "mcpServers": { + "kogral-mcp": { + "command": "/path/to/knowledge-base/target/release/kogral-mcp", + "args": ["serve"], + "env": {} + } + } +} +``` + +### 3. Test Connection + +Start Claude Code and verify: + +```text +> kogral/search "test" +``` + +## Troubleshooting + +### Nickel Not Found + +```bash +# Verify nickel is installed +nickel --version + +# If not, install +cargo install nickel-lang-cli + +# Add cargo bin to PATH +export PATH="$HOME/.cargo/bin:$PATH" +``` + +### Compilation Errors + +```bash +# Update Rust +rustup update stable + +# Clean and rebuild +cargo clean +cargo build --workspace +``` + +### SurrealDB Connection Failed + +```bash +# Check SurrealDB is running +curl http://localhost:8000/health + +# Start SurrealDB with correct settings +surreal start --bind 0.0.0.0:8000 --user root --pass root memory +``` + +### MCP Server Not Responding + +```bash +# Test stdio communication +echo '{"jsonrpc":"2.0","id":1,"method":"ping"}' | kogral serve + +# Check logs +kogral serve --log-level debug +``` + +## Next Steps + +- [Quick Start Guide](user-guide/quickstart.md) - Create your first knowledge base +- [Configuration Reference](user-guide/configuration.md) - Customize behavior +- [MCP Tools](api/mcp-tools.md) - Integrate with Claude Code + +## Uninstallation + +```bash +# Remove installed binary +cargo uninstall kogral-cli + +# Remove project knowledge base +rm -rf /path/to/project/.kogral + +# Remove shared knowledge base +rm -rf ~/Tools/.kogral-shared +``` diff --git a/docs/guides/quickstart.md b/docs/guides/quickstart.md new file mode 100644 index 0000000..2717825 --- /dev/null +++ b/docs/guides/quickstart.md @@ -0,0 +1,383 @@ +# Quick Start Guide + +Get up and running with the KOGRAL in 5 minutes. + +## Prerequisites + +- Rust 1.70+ installed +- Nickel CLI installed (`cargo install nickel-lang-cli`) +- kogral-cli installed (see [Installation](../installation.md)) + +## Step 1: Initialize Your Knowledge Base + +Navigate to your project directory and initialize: + +```bash +cd /path/to/your/project +kogral init +``` + +This creates a `.kogral/` directory with the following structure: + +```text +.kogral/ +├── config.toml # Configuration +├── notes/ # General notes +├── decisions/ # Architectural decisions +├── guidelines/ # Project guidelines +├── patterns/ # Reusable patterns +└── journal/ # Daily journal entries +``` + +## Step 2: Create Your First Note + +Add a note to your knowledge base: + +```bash +kogral add note "Getting Started with Rust" \ + --tags rust,programming,learning \ + --content "Key concepts for learning Rust effectively." +``` + +Or create interactively: + +```bash +kogral add note +# Follow the prompts to enter title, tags, and content +``` + +## Step 3: Create a Decision Record + +Document an architectural decision: + +```bash +kogral add decision "Use SurrealDB for Storage" \ + --context "Need scalable storage for knowledge graph" \ + --decision "Adopt SurrealDB for its graph capabilities" \ + --consequence "Better query performance" \ + --consequence "Additional infrastructure dependency" +``` + +## Step 4: Link Nodes Together + +Create relationships between nodes: + +```bash +# Find node IDs +kogral list + +# Create a relationship +kogral link relates_to +``` + +Available relationship types: +- `relates_to` - General conceptual link +- `depends_on` - Dependency relationship +- `implements` - Implementation of a concept +- `extends` - Inheritance/extension +- `supersedes` - Replaces older version +- `explains` - Documentation/clarification + +## Step 5: Search Your Knowledge Base + +Search by text: + +```bash +# Simple search +kogral search "rust" + +# Filter by type +kogral search "architecture" --type decision + +# Limit results +kogral search "error handling" --limit 5 +``` + +Search semantically (requires embeddings): + +```bash +# Semantic search finds conceptually related content +kogral search "memory safety" --semantic --threshold 0.7 +``` + +## Step 6: View Node Details + +```bash +# Show node by ID +kogral show + +# Show node with relationships +kogral show --with-relationships +``` + +## Step 7: Edit Documents Directly + +All knowledge base documents are markdown files you can edit: + +```bash +# Open in your editor +$EDITOR .kogral/notes/getting-started-with-rust.md + +# Or use your favorite markdown editor +code .kogral/notes/ +``` + +Document format: + +```markdown +--- +id: unique-id +type: note +title: Getting Started with Rust +created: 2026-01-17T10:30:00Z +modified: 2026-01-17T10:30:00Z +tags: [rust, programming, learning] +status: active +--- + +# Getting Started with Rust + +Content goes here with [[wikilinks]] to other nodes. + +## Key Concepts + +- Ownership +- Borrowing +- Lifetimes +``` + +## Step 8: Create a Daily Journal Entry + +Start journaling your development progress: + +```bash +kogral add journal "Today's Progress" \ + --content "Learned about trait objects and dynamic dispatch in Rust." +``` + +Or open today's journal directly: + +```bash +$EDITOR .kogral/journal/$(date +%Y-%m-%d).md +``` + +## Step 9: Export to Logseq (Optional) + +If you use Logseq, export your knowledge base: + +```bash +nu scripts/kogral-export-logseq.nu /path/to/logseq-graph +``` + +This creates a Logseq-compatible graph you can open in Logseq for visual editing. + +## Step 10: Start MCP Server for Claude Code + +Integrate with Claude Code for AI-assisted knowledge management: + +```bash +# Start MCP server +kogral serve + +# Configure in ~/.config/claude/config.json +# Then use in Claude Code: +# > kogral/search "rust ownership" +``` + +## Common Workflows + +### Capture Quick Notes + +```bash +# Quick note +kogral add note "Remember to check error handling in parser module" --tags todo,parser +``` + +### Document Architectural Decisions + +```bash +# Create ADR +kogral add decision "Adopt Async Rust for I/O Operations" \ + --status accepted \ + --tags architecture,async +``` + +### Build a Pattern Library + +```bash +# Add a pattern +kogral add pattern "Error Handling with thiserror" \ + --tags rust,error-handling \ + --content "Standard pattern for error types in this project." +``` + +### Track Daily Progress + +```bash +# Add journal entry +kogral add journal --content "Implemented search functionality. Need to add semantic search next." +``` + +## Next Steps + +### Customize Configuration + +Edit `.kogral/config.ncl` for advanced configuration: + +```nickel +{ + graph = { + name = "My Project", + version = "1.0.0", + }, + + embeddings = { + enabled = true, + provider = 'fastembed, + }, + + templates = { + templates_dir = "templates", + }, +} +``` + +See [Configuration Reference](configuration.md) for all options. + +### Set Up Shared Guidelines + +Create a shared knowledge base for organization-wide standards: + +```bash +# Create shared KOGRAL +mkdir -p ~/Tools/.kogral-shared +cd ~/Tools/.kogral-shared +kogral init --name "Shared Guidelines" + +# Add guidelines +kogral add guideline "Rust Error Handling" \ + --language rust \ + --category error-handling + +# Configure inheritance in projects +kogral config set inheritance.base ~/Tools/.kogral-shared +``` + +### Automate with NuShell Scripts + +```bash +# Backup regularly +nu scripts/kogral-backup.nu --compress + +# Sync with SurrealDB +nu scripts/kogral-sync.nu --direction bidirectional + +# Generate statistics +nu scripts/kogral-stats.nu --show-tags +``` + +### Integrate with Git + +```bash +# Add to version control +git add .kogral/ +git commit -m "docs: Add knowledge base" + +# Add to .gitignore (optional: exclude certain types) +echo ".kogral/journal/" >> .gitignore +``` + +## Tips and Tricks + +### Use Wikilinks + +Link to other nodes naturally in markdown: + +```markdown +See [[getting-started-with-rust]] for basics. +Related decision: [[use-surrealdb-for-storage]]. +``` + +### Reference Code + +Link to specific code locations: + +```markdown +Error handling implementation: @src/parser.rs:42 +``` + +### Tag Consistently + +Use consistent tagging for better searchability: + +```bash +# Good tagging +--tags rust,error-handling,pattern + +# Avoid +--tags Rust,ErrorHandling,patterns +``` + +### Leverage Templates + +Customize templates for your workflow: + +```bash +# Copy template +cp templates/note.md.tera templates/meeting-notes.md.tera + +# Edit for meeting notes format +$EDITOR templates/meeting-notes.md.tera +``` + +## Troubleshooting + +### "KB directory not found" + +```bash +# Make sure you initialized +kogral init + +# Or specify KB directory +kogral --kogral-dir /path/to/.kb search "query" +``` + +### "Node not found" + +```bash +# List all nodes to find ID +kogral list + +# Search for node +kogral search "partial title" +``` + +### "Failed to parse frontmatter" + +Check your markdown file has valid YAML frontmatter: + +```yaml +--- +id: my-note +type: note +title: My Note +--- +``` + +## Further Reading + +- [Configuration Reference](configuration.md) - Full configuration options +- [CLI Commands](cli-commands.md) - All available commands +- [Document Format](document-format.md) - Markdown and frontmatter details +- [MCP Tools](../api/mcp-tools.md) - Claude Code integration + +## Getting Help + +- Check `kogral --help` for command usage +- Read inline help: `kogral add --help` +- Report issues on GitHub +- Join community discussions + +--- + +**Congratulations!** You've created your first knowledge base. Start capturing knowledge and building connections. diff --git a/docs/guides/use-cases.md b/docs/guides/use-cases.md new file mode 100644 index 0000000..d7018ea --- /dev/null +++ b/docs/guides/use-cases.md @@ -0,0 +1,578 @@ +# Use Cases + +Real-world scenarios showing how KOGRAL solves common development challenges. + +## Use Case 1: Onboarding New Team Members + +### Problem + +New developer joins the team. Needs to understand: +- Why we chose SurrealDB over PostgreSQL +- How error handling works in this project +- What coding patterns we follow +- Recent architectural decisions + +### Solution with KOGRAL + +**Team lead**: + +```bash +# Export project knowledge to Logseq for visual exploration +kogral export logseq ~/onboarding-docs +``` + +**New developer** (with Claude Code): + +```text +Summarize our architectural decisions from the last 6 months +``` + +**Claude** (via MCP): + +```text +Found 8 decisions: + +1. **Use SurrealDB for Storage** (accepted, 3 months ago) + - Context: Need graph database for knowledge relationships + - Consequences: Better queries, additional infrastructure + +2. **Adopt Rust for Core Logic** (accepted, 5 months ago) + - Context: Type safety and performance critical + - Consequences: Steeper learning curve, excellent reliability + +... [6 more decisions] +``` + +**New developer**: + +```text +What are our error handling guidelines? +``` + +**Claude** (via `kogral/get_guidelines`): + +```text +## Rust Error Handling Guidelines + +### Project Guidelines (priority: 150) +- Use thiserror for custom error types +- Never unwrap() in production +- Propagate with ? operator + +### Shared Guidelines (priority: 50) +- Always use Result for fallible operations +- Add context with .context() + +[Links to full guideline documents] +``` + +**Result**: New developer productive in days, not weeks. + +--- + +## Use Case 2: Architectural Decision Records (ADR) + +### Problem + +Team discussing whether to add Redis caching. Multiple opinions, need to document the decision for future reference. + +### Solution with KOGRAL + +**During meeting**: + +```text +Document decision: Add Redis caching for API responses + +Context: +- Current database queries average 200ms +- 80% of queries are repeated within 5 minutes +- Need sub-50ms response times for user experience + +Decision: +- Add Redis with 5-minute TTL for GET endpoints +- Cache invalidation on POST/PUT/DELETE + +Consequences: +- ✅ Expected 80% reduction in database load +- ✅ Sub-50ms response times achieved +- ❌ Additional infrastructure (Redis server) +- ❌ Cache consistency challenges +- ❌ Debugging complexity increases + +Status: proposed (pending infrastructure setup) +``` + +**Claude** (creates ADR): + +```text +Created: decision-add-redis-caching +Type: decision +Status: proposed + +Added relationships: + - Relates to: note-performance-requirements + - Depends on: decision-use-docker-compose (infrastructure) + +Decision documented and linked to related knowledge. +``` + +**Two months later**, someone asks "Why Redis?": + +```text +kogral show decision-add-redis-caching +``` + +Full context available instantly. + +--- + +## Use Case 3: Pattern Library + +### Problem + +Team solves the same problems repeatedly: +- How to structure error types +- Database connection patterns +- Testing strategies + +Each developer rediscovers solutions. + +### Solution with KOGRAL + +**First time** solving error handling: + +```bash +kogral add pattern "Error Handling with thiserror" \ + --tags rust,error-handling,pattern \ + --content "$(cat docs/error-pattern.md)" +``` + +**Next time** someone needs error handling: + +```text +I'm implementing a new module with errors. What's our standard pattern? +``` + +**Claude** (via `kogral/search`): + +```text +Found pattern: Error Handling with thiserror + +## Pattern: Error Handling with thiserror + +### Problem +Need structured, type-safe error handling with good error messages. + +### Solution +```rust + +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum ModuleError { + #[error("Database connection failed: {0}")] + Database(#[from] sqlx::Error), + + #[error("Validation failed: {0}")] + Validation(String), +} + +```text + +### Usage +```rust + +fn do_work() -> Result<(), ModuleError> { + let conn = connect_db()?; // Auto-converts via #[from] + validate_input()?; + Ok(()) +} + +```text + +[Full pattern with examples] + +Would you like me to create a new error module following this pattern? +``` + +**Result**: Consistent error handling across codebase, zero time wasted rediscovering patterns. + +--- + +## Use Case 4: Daily Development Journal + +### Problem + +Developer wants to track: +- What they worked on each day +- Blockers encountered +- Solutions discovered +- Ideas for future work + +### Solution with KOGRAL + +**End of each day**: + +```bash +kogral add journal "2026-01-17" --content " +## Progress +- Implemented user authentication +- Fixed race condition in cache layer +- Started work on API rate limiting + +## Blockers +- SurrealDB migration tool not working with nested objects +- Need to discuss API versioning strategy with team + +## Learnings +- tokio::select! is perfect for timeout patterns +- serde_json::Value useful for dynamic JSON handling + +## Tomorrow +- Finish rate limiting implementation +- Review PR #234 +- Team meeting: discuss API versioning +" +``` + +**With Claude Code** (even easier): + +```text +End of day journal: + +Implemented authentication, fixed cache race condition, started rate limiting. +Blocked on SurrealDB migrations and need API versioning discussion. +Learned about tokio::select! for timeouts. +Tomorrow: finish rate limiting, review PR #234, versioning meeting. +``` + +**Claude** (creates journal entry): + +```text +Created journal entry: 2026-01-17 + +Tags auto-detected: authentication, cache, rate-limiting, surrealdb + +Linked to: + - pattern-timeout-handling (implements) + - decision-use-surrealdb (relates_to) + +Journal entry saved. +``` + +**Two weeks later** (forgot how you solved that race condition): + +```text +How did I fix the cache race condition? +``` + +**Claude** (semantic search): + +```text +From your journal entry on 2026-01-17: + +"Fixed race condition in cache layer by using DashMap instead of +RwLock. DashMap provides lock-free concurrent access." + +[Link to full journal entry] +``` + +**Result**: Development history preserved, solutions easy to recall. + +--- + +## Use Case 5: Code Review Preparation + +### Problem + +Preparing for code review. Need to: +- Document why certain decisions were made +- Link implementation to requirements +- Explain trade-offs to reviewers + +### Solution with KOGRAL + +**Before creating PR**: + +```text +I just implemented the caching layer. +Add a note documenting the implementation and link it to our caching decision. +``` + +**Claude** (via `kogral/add_note` + `kogral/link`): + +```text +Created note: note-caching-layer-implementation + +Content: +# Caching Layer Implementation + +## Approach +- Redis with 5-minute TTL +- Cache-aside pattern +- Invalidation on mutations + +## Trade-offs +- Chose simplicity over advanced features (no LRU eviction) +- 5-minute TTL balances freshness vs cache hit rate +- Cache-aside pattern chosen over write-through (simpler) + +## Testing +- Unit tests for cache logic +- Integration tests with real Redis +- Load test: 1000 req/s sustained + +Links: + - Implements: decision-add-redis-caching + - Follows: pattern-cache-aside + - Tests: guideline-integration-testing + +Note added and linked to decision-add-redis-caching. +``` + +**In PR description**: + +```markdown +## Implementation + +Implements caching layer per decision-add-redis-caching. + +See note-caching-layer-implementation for detailed rationale. + +## Trade-offs + +[Copy from note] +``` + +**Reviewers**: + +```text +kogral show decision-add-redis-caching +kogral show note-caching-layer-implementation +``` + +Full context available, review focuses on code quality not "why this approach?" + +--- + +## Use Case 6: Cross-Project Guidelines + +### Problem + +Organization has 10 projects. Each should follow: +- Same Rust error handling patterns +- Same security guidelines +- Same testing standards + +Currently: duplicated wikis, inconsistent practices. + +### Solution with KOGRAL + +**Setup shared KOGRAL**: + +```bash +# Create organization-wide shared KOGRAL +mkdir -p ~/org/.kogral-shared +cd ~/org/.kogral-shared +kogral init --name "Organization Guidelines" + +# Add shared guidelines +kogral add guideline "Rust Error Handling" \ + --language rust \ + --category error-handling \ + --content "$(cat org-rust-errors.md)" + +kogral add guideline "Security Best Practices" \ + --category security \ + --content "$(cat org-security.md)" +``` + +**In each project**: + +```nickel +# project/.kogral/config.ncl +{ + inheritance = { + base = "~/org/.kogral-shared", + priority = 100, # Project overrides shared + }, +} +``` + +**Developer in Project A**: + +```text +What are our error handling guidelines? +``` + +**Claude** (via `kogral/get_guidelines` with inheritance): + +```text +## Rust Error Handling Guidelines + +### Shared Guidelines (priority: 50) +From ~/org/.kogral-shared: +- Use thiserror for custom errors +- Never unwrap() in production +- Always propagate with ? + +### Project Guidelines (priority: 100) +From project .kogral/: +- Additionally: log all errors with tracing +- Use anyhow for application-level errors + +[Combined effective guidelines] +``` + +**Result**: +- Consistent practices across organization +- Projects can specialize where needed +- Single source of truth for shared knowledge + +--- + +## Use Case 7: Bug Investigation + +### Problem + +Bug in production. Developer needs to: +- Understand relevant decisions +- Find related code patterns +- Check if similar issues were solved before + +### Solution with KOGRAL + +**Developer**: + +```text +We have a race condition in the cache layer. +What past decisions or patterns might be relevant? +``` + +**Claude** (semantic search): + +```text +Found 4 relevant items: + +1. **Decision: Use DashMap for Concurrent Access** (accepted, 1 month ago) + "Chose DashMap over RwLock to avoid race conditions in cache" + +2. **Pattern: Safe Concurrent Cache Access** + "Always use lock-free data structures for high-contention caches" + +3. **Note: Cache Race Condition Fix** (from 2026-01-17 journal) + "Fixed race in cache by switching to DashMap" + +4. **Guideline: Concurrency Safety** + "Use atomic operations and lock-free structures where possible" + +It looks like we've seen this before! Check the journal entry from 2026-01-17. +``` + +**Developer reads journal**: + +```bash +kogral show journal-2026-01-17 +``` + +**Finds**: +- Exact same issue +- Solution: switch to DashMap +- Code example included +- Performance benchmarks + +**Applies fix** in 10 minutes instead of 2 hours of debugging. + +--- + +## Use Case 8: API Design Collaboration + +### Problem + +Team discussing new API design. Multiple approaches: +- REST vs GraphQL +- Versioning strategy +- Authentication method + +Need to capture discussion and decision. + +### Solution with KOGRAL + +**During design meeting** (using Claude Code): + +```text +We're designing the new API. Let me capture this discussion: + +Approaches discussed: +1. REST with versioned endpoints (/v1/, /v2/) +2. GraphQL with schema versioning +3. gRPC for internal services + +Team consensus: +- REST for public API (easier for partners) +- GraphQL for internal admin tools (flexibility) +- gRPC for service-to-service (performance) + +Create a decision record for each, linking them together. +``` + +**Claude** (creates 3 linked ADRs): + +```text +Created 3 decisions: + +1. decision-rest-public-api + Status: accepted + Context: Public API needs broad compatibility + Decision: REST with /v1/, /v2/ versioning + +2. decision-graphql-admin + Status: accepted + Context: Admin tools need flexible queries + Decision: GraphQL with schema evolution + +3. decision-grpc-internal + Status: accepted + Context: Service-to-service needs performance + Decision: gRPC with protobuf + +Linked: + decision-rest-public-api --[relates_to]--> decision-graphql-admin + decision-rest-public-api --[relates_to]--> decision-grpc-internal + decision-graphql-admin --[relates_to]--> decision-grpc-internal + +All decisions documented and interconnected. +``` + +**Two months later**, someone asks "Why REST not GraphQL for public API?": + +```bash +kogral show decision-rest-public-api +``` + +Full context preserved, including relationship to GraphQL decision. + +--- + +## Summary + +Knowledge Base excels at: + +✅ **Onboarding**: Historical context instantly available +✅ **Decision Making**: ADRs preserve rationale +✅ **Pattern Reuse**: Solutions documented once, used forever +✅ **Daily Tracking**: Development journal with semantic search +✅ **Code Review**: Implementation rationale linked to decisions +✅ **Cross-Project**: Shared guidelines with project overrides +✅ **Bug Investigation**: Past solutions easily discovered +✅ **Collaboration**: Discussions captured and interconnected + +**Common Theme**: Knowledge captured during work, queryable when needed, connected to related concepts. + +--- + +## Next Steps + +- **Start simple**: [Quick Start Guide](quickstart.md) +- **Integrate AI**: [MCP Quick Guide](../apps/mcp-quickguide.md) +- **Advanced features**: [Configuration Reference](../config/overview.md) diff --git a/docs/kogral/core-concepts.md b/docs/kogral/core-concepts.md new file mode 100644 index 0000000..8ff40c2 --- /dev/null +++ b/docs/kogral/core-concepts.md @@ -0,0 +1,622 @@ +# Core Concepts + +Understanding the fundamental concepts behind KOGRAL. + +## The Knowledge Graph + +At its core, KOGRAL is a **directed graph** where: +- **Nodes** = pieces of knowledge (notes, decisions, guidelines, patterns) +- **Edges** = typed relationships between concepts + +![Node Types and Relationships](../diagrams/core-concepts.svg) + +This graph structure enables: +- **Discovery**: Find related concepts through traversal +- **Context**: Understand how ideas connect +- **Evolution**: Track how knowledge changes over time + +## Node Types + +### 1. Note + +**Purpose**: Capture general observations, learnings, and discoveries. + +**When to use**: +- Documenting a concept you learned +- Recording implementation details +- Capturing meeting notes +- Quick knowledge capture + +**Example**: + +```yaml +--- +type: note +title: Async Trait Patterns in Rust +tags: [rust, async, patterns] +--- + +# Async Trait Patterns in Rust + +Using async traits with the async-trait crate... +``` + +### 2. Decision (ADR) + +**Purpose**: Record architectural decisions with full context. + +**When to use**: +- Choosing between alternatives (REST vs GraphQL) +- Major technical decisions (database selection) +- Trade-off analysis +- Explaining "why" for future reference + +**Structure**: +- **Context**: Background and problem +- **Decision**: What was chosen +- **Consequences**: Positive and negative outcomes +- **Alternatives**: What was considered but rejected + +**Example**: + +```yaml +--- +type: decision +title: Use SurrealDB for Storage +status: accepted +--- + +## Context +Need a graph database that supports our relationship model... + +## Decision +Adopt SurrealDB as the primary storage backend. + +## Consequences ++ Better graph query performance ++ Native relationship support +- Additional infrastructure dependency +- Team learning curve +``` + +### 3. Guideline + +**Purpose**: Define coding standards, best practices, and conventions. + +**When to use**: +- Code style rules +- Architecture patterns to follow +- Security requirements +- Testing standards + +**Can be**: +- **Shared**: Organization-wide (in shared KOGRAL) +- **Project-specific**: Overrides shared guidelines + +**Example**: + +```yaml +--- +type: guideline +language: rust +category: error-handling +--- + +# Rust Error Handling Guidelines + +1. Use `thiserror` for custom error types +2. Never use `unwrap()` in production code +3. Always propagate errors with `?` +``` + +### 4. Pattern + +**Purpose**: Document reusable solutions to common problems. + +**When to use**: +- Recurring implementation patterns +- Tested solutions +- Best practice implementations +- Code templates + +**Structure**: +- **Problem**: What challenge does this solve? +- **Solution**: The pattern/approach +- **Context**: When to use/not use +- **Example**: Working code + +**Example**: + +```yaml +--- +type: pattern +title: Repository Pattern for Database Access +tags: [architecture, database, pattern] +--- + +## Problem +Need consistent database access across modules. + +## Solution +Repository pattern with trait abstraction... + +## Example +\`\`\`rust +trait UserRepository { + async fn find_by_id(&self, id: Uuid) -> Result; +} +\`\`\` +``` + +### 5. Journal + +**Purpose**: Daily development log for tracking progress and reflections. + +**When to use**: +- End of day summaries +- Daily standup notes +- Progress tracking +- Blocker documentation + +**Auto-linked**: KOGRAL can auto-link journal entries to mentioned concepts. + +**Example**: + +```yaml +--- +type: journal +date: 2026-01-17 +--- + +## Progress +- Implemented authentication module +- Fixed cache race condition + +## Blockers +- Need API versioning discussion + +## Learnings +- tokio::select! perfect for timeouts +``` + +### 6. Execution + +**Purpose**: Record AI agent execution results (from Vapora integration). + +**When to use**: +- Agent task completion +- Execution metrics +- Agent decision history +- Audit trail + +**Example**: + +```yaml +--- +type: execution +task_type: code_generation +agent: rust-expert +outcome: success +duration: 45s +--- + +Generated authentication module following project guidelines. +``` + +## Relationship Types + +### 1. `relates_to` + +**Meaning**: General conceptual relationship. + +**Use**: Connect related ideas without specific dependency. + +**Example**: + +```text +[Note: Async Patterns] --relates_to--> [Note: Tokio Runtime] +``` + +### 2. `depends_on` + +**Meaning**: Prerequisite relationship. Source requires target to exist/be understood first. + +**Use**: Learning paths, implementation order. + +**Example**: + +```text +[Pattern: Advanced Error Handling] --depends_on--> [Guideline: Basic Errors] +``` + +### 3. `implements` + +**Meaning**: Concrete implementation of an abstract concept. + +**Use**: Connect code to patterns/guidelines. + +**Example**: + +```text +[Note: Auth Module Implementation] --implements--> [Pattern: Repository Pattern] +``` + +### 4. `extends` + +**Meaning**: Inheritance/extension relationship. + +**Use**: Guideline overrides, pattern variations. + +**Example**: + +```text +[Guideline: Project Error Handling] --extends--> [Guideline: Shared Error Handling] +``` + +### 5. `supersedes` + +**Meaning**: Replacement relationship. Source replaces target. + +**Use**: Track evolution of decisions/patterns. + +**Example**: + +```text +[Decision: Use GraphQL v2] --supersedes--> [Decision: Use REST] +``` + +### 6. `explains` + +**Meaning**: Documentation/clarification relationship. + +**Use**: Connect notes to implementations, executions to rationale. + +**Example**: + +```text +[Note: Why We Chose Rust] --explains--> [Decision: Adopt Rust] +``` + +## Multi-Graph Architecture + +KOGRAL supports **multiple knowledge graphs**: + +### Local Graph (Project-Specific) + +**Location**: `.kogral/` in project directory + +**Purpose**: Project-specific knowledge +- Project decisions +- Implementation notes +- Local patterns +- Daily journals + +**Storage**: Filesystem (git-tracked) + +**Scope**: Single project + +### Shared Graph (Organization-Wide) + +**Location**: Configurable (e.g., `~/org/.kogral-shared`) + +**Purpose**: Shared organizational knowledge +- Coding guidelines +- Standard patterns +- Architecture principles +- Security policies + +**Storage**: SurrealDB (centralized) or filesystem (synced) + +**Scope**: All projects + +### Inheritance Model + +```text +Shared Guidelines (priority: 50) + ↓ [inherited by] +Project Guidelines (priority: 100) + ↓ [effective] +Combined Guidelines (higher priority wins) +``` + +**Example**: + +Shared guideline: "Use Result\ for errors" +Project override: "Use Result\ + log all errors with tracing" +Effective: Both rules apply, project adds requirement + +## Config-Driven Behavior + +**Everything is configurable** via Nickel schemas: + +```nickel +{ + graph = { name = "my-project" }, # Graph metadata + storage = { primary = 'filesystem }, # Where to store + embeddings = { provider = 'fastembed }, # AI provider + templates = { /* ... */ }, # Document templates + query = { similarity_threshold = 0.6 }, # Search behavior +} +``` + +**No hardcoding**: Change behavior without code changes. + +## Semantic Search + +Beyond keyword matching, KOGRAL uses **embeddings** to find concepts: + +**Keyword search**: "Find 'error handling'" +- Matches exact phrase "error handling" + +**Semantic search**: "How to handle failures gracefully?" +- Finds: error handling, exception patterns, Result types, panic recovery +- Understands: "failures" = errors, "gracefully" = best practices + +**How it works**: +1. Text → Embedding (384 or 1536 dimensional vector) +2. Similarity search (cosine distance) +3. Return nodes above threshold (e.g., 0.6) + +**Providers**: +- **fastembed**: Local, free, offline (384d) +- **OpenAI**: Cloud, best quality (1536d) +- **Claude**: Cloud, excellent (1024d) +- **Ollama**: Self-hosted (768d) + +## Templates + +**Tera templates** generate consistent documents: + +```jinja2 +--- +id: {{ id }} +type: {{ type }} +title: {{ title }} +tags: [{% for tag in tags %}"{{ tag }}"{% endfor %}] +--- + +# {{ title }} + +{{ content }} +``` + +**Customizable**: Override templates per project. + +**Export formats**: Logseq, JSON, Markdown. + +## MCP Integration + +**Model Context Protocol** connects KOGRAL to Claude Code: + +```text +Claude Code + ↓ [JSON-RPC 2.0] +kogral-mcp Server + ↓ [Rust API] +kogral-core Library + ↓ [Storage] +Knowledge Graph +``` + +**Tools**: `kogral/search`, `kogral/add_note`, `kogral/get_guidelines`, etc. + +**Resources**: `kogral://project/notes`, `kogral://shared/guidelines` + +**Prompts**: `kogral/summarize_project`, `kogral/find_related` + +## Git-Friendly Storage + +**Markdown + YAML frontmatter** = git-tracked knowledge: + +```markdown +--- +id: note-123 +type: note +title: My Note +--- + +# Content here +``` + +**Benefits**: +- ✅ Diffs in PRs (reviewable changes) +- ✅ Branches (experiment with knowledge) +- ✅ Merges (combine knowledge from feature branches) +- ✅ History (track evolution over time) +- ✅ Blame (who added this knowledge?) + +## Logseq Content Blocks + +KOGRAL provides full support for **Logseq-style outliner blocks** with rich metadata and structure. + +### What are Blocks + +Blocks are the fundamental unit of content in Logseq's outliner format: +- Each bullet point is a block +- Blocks can have children (nested blocks) +- Blocks support tasks, tags, and custom properties +- Blocks can reference other blocks or pages + +### Block Features + +**Task Status**: + +```markdown +- TODO Implement authentication #high-priority +- DOING Write tests +- DONE Deploy to staging +- LATER Consider GraphQL API +- NOW Fix critical bug +- WAITING Code review from @alice +- CANCELLED Old approach +``` + +**Inline Tags**: + +```markdown +- Learning Rust ownership #rust #learning #card + - Prevents data races at compile time + - Borrowing rules enforce safety +``` + +**Custom Properties**: + +```markdown +- Research paper summary + priority:: high + reviewed:: 2026-01-17 + source:: https://example.com/paper.pdf + - Key findings... +``` + +**Block and Page References**: + +```markdown +- Meeting notes from [[2026-01-17]] + - Discussed architecture ((block-ref-123)) + - Action items: [[Project Roadmap]] +``` + +**Hierarchical Structure**: + +```markdown +- Parent block #top-level + - Child block 1 + - Nested child + - Child block 2 +``` + +### Configuration + +Blocks support is opt-in via configuration: + +```nickel +{ + blocks = { + enabled = true, # Enable blocks parsing + parse_on_import = true, # Auto-parse from Logseq imports + serialize_on_export = true, # Serialize to outliner format + enable_mcp_tools = true, # Enable block-related MCP tools + }, +} +``` + +### Use Cases + +**1. Task Management**: + +```markdown +- TODO Weekly sprint planning #meeting + - DONE Review last sprint + - DOING Plan current sprint + - TODO Assign tasks +``` + +**2. Flashcards (Spaced Repetition)**: + +```markdown +- What is Rust's ownership model? #card #rust + - Ownership prevents data races at compile time + - Each value has a single owner + - When owner goes out of scope, value is dropped +``` + +**3. Knowledge Capture with Metadata**: + +```markdown +- Tokio async runtime patterns #rust #async + category:: architecture + difficulty:: intermediate + - Use tokio::select! for concurrent operations + - spawn_blocking() for CPU-intensive work +``` + +**4. Linked Notes**: + +```markdown +- Discussed [[ADR-001]] in architecture meeting + - Decided on SurrealDB + - See ((meeting-notes-block-id)) for details +``` + +### Block Queries (MCP Tools) + +Query blocks across your knowledge base: + +**Find blocks by tag**: + +```json +{ + "tool": "kogral/find_blocks", + "arguments": { "tag": "card" } +} +``` + +**Find all TODOs**: + +```json +{ + "tool": "kogral/find_todos", + "arguments": { "limit": 20 } +} +``` + +**Find flashcards**: + +```json +{ + "tool": "kogral/find_cards", + "arguments": { "limit": 10 } +} +``` + +**Find blocks by property**: + +```json +{ + "tool": "kogral/find_blocks", + "arguments": { + "property_key": "priority", + "property_value": "high" + } +} +``` + +### Architecture + +**Hybrid Model**: +- Content stored as markdown string (source of truth) +- Blocks lazily parsed on first access +- Cached block structure for fast queries +- Bidirectional: markdown ↔ blocks + +**BlockParser**: +- Parse outliner markdown → Block structures +- Serialize Block structures → outliner markdown +- Preserve all metadata (tags, status, properties, references) +- Round-trip fidelity for Logseq compatibility + +**Storage**: +- Filesystem: markdown with blocks inline +- SurrealDB: dedicated `block` table with indexes +- Indexes: tags, status, parent_id, full-text search + +**See Also**: +- [ADR-004: Logseq Blocks Support](../architecture/adrs/004-logseq-blocks-support.md) +- [Logseq Blocks Design](../architecture/logseq-blocks-design.md) +- [MCP Block Tools](../api/mcp-tools.md#block-tools) + +## Key Principles + +1. **Capture During Work**: Don't wait, document as you go +2. **Link as You Learn**: Connect related concepts immediately +3. **Query When Needed**: AI-assisted discovery of relevant knowledge +4. **Evolve Over Time**: Update decisions, supersede patterns +5. **Share Wisely**: Shared guidelines, local specifics + +## Next Steps + +- **Understand motivation**: [Why KOGRAL?](why-kogral.md) +- **Learn philosophy**: [Design Philosophy](design-philosophy.md) +- **See architecture**: [System Overview](../architecture/overview.md) +- **Start using**: [Quick Start](../guides/quickstart.md) diff --git a/docs/kogral/design-philosophy.md b/docs/kogral/design-philosophy.md new file mode 100644 index 0000000..895fbc3 --- /dev/null +++ b/docs/kogral/design-philosophy.md @@ -0,0 +1,471 @@ +# Design Philosophy + +The principles and values guiding KOGRAL design and implementation. + +## Core Tenets + +### 1. Config-Driven, Not Hardcoded + +**Principle**: All behavior should be configurable via schemas, not baked into code. + +**Why**: Flexibility without code changes. Users adapt KOGRAL to their workflows, not vice versa. + +**Example**: + +```rust +// ❌ Bad: Hardcoded +impl EmbeddingProvider { + fn new() -> Self { + FastEmbedProvider::new("BAAI/bge-small-en-v1.5") // Can't change + } +} + +// ✅ Good: Config-driven +impl EmbeddingProvider { + fn from_config(config: &EmbeddingConfig) -> Result> { + match config.provider { + 'fastembed => Ok(Box::new(FastEmbedProvider::new(&config.model)?)), + 'openai => Ok(Box::new(OpenAIProvider::new(&config.model)?)), + } + } +} +``` + +**Benefits**: +- Switch embedding providers without recompilation +- Different configs for dev/prod +- User choice, not developer mandate + +### 2. Type-Safe Configuration + +**Principle**: Validate configuration before runtime, not during. + +**Why**: Catch errors early, reduce runtime failures. + +**Implementation**: Nickel contracts + serde validation = double validation + +```nickel +# Schema defines valid values +EmbeddingProvider = [| 'openai, 'claude, 'fastembed |] + +# Typo caught at export time, not runtime +{ provider = 'opena1 } # Error: Invalid variant +``` + +**Benefits**: +- Errors found during `nickel export`, not during execution +- Self-documenting: schema is the spec +- Refactoring safe: change schema, find all usages + +### 3. Local-First, Cloud-Optional + +**Principle**: Core functionality works offline, cloud is enhancement. + +**Why**: Privacy, cost control, offline development. + +**Examples**: + +| Feature | Local | Cloud | +| --------- | ------- | ------- | +| Storage | Filesystem | SurrealDB | +| Embeddings | fastembed | OpenAI/Claude | +| Search | Text-based | Semantic | + +**Benefits**: +- Works on planes, trains, areas with poor internet +- No API costs for small projects +- Privacy-sensitive projects keep data local +- Production can use cloud for scale + +### 4. Git-Friendly by Default + +**Principle**: Knowledge should version alongside code. + +**Why**: Knowledge describes code, should evolve with it. + +**Implementation**: +- Markdown + YAML frontmatter (text-based, diffable) +- One file per node (granular commits) +- Wikilinks preserved (works in Logseq, Obsidian) + +**Benefits**: + +```bash +# Review knowledge changes in PRs +git diff .kogral/decisions/ + +# Knowledge follows branches +git checkout feature-x +# .kogral/ reflects feature-x decisions + +# Knowledge merges +git merge feature-x +# Merge conflicts = knowledge conflicts (resolve intentionally) +``` + +### 5. AI-Native, Human-Readable + +**Principle**: Optimized for AI consumption, readable by humans. + +**Why**: Best of both worlds - AI-assisted discovery, human verification. + +**Implementation**: +- **Structured**: YAML frontmatter for AI parsing +- **Semantic**: Embeddings for AI queries +- **Readable**: Markdown for human consumption +- **Linked**: Typed relationships for AI traversal + +**Example**: + +```markdown +--- +id: note-auth +type: note +title: Authentication Implementation +tags: [security, auth] +relates_to: [guideline-security, pattern-jwt] +--- + +# Authentication Implementation + +Humans read this markdown normally. + +AI can: +- Parse frontmatter for metadata +- Extract tags for filtering +- Follow relates_to links +- Generate embeddings for semantic search +``` + +### 6. Composition Over Inheritance + +**Principle**: Build systems by composing small, focused components. + +**Why**: Flexibility, testability, maintainability. + +**Implementation**: + +```rust +// Small, focused traits +trait Storage { ... } +trait EmbeddingProvider { ... } +trait TemplateEngine { ... } + +// Compose into systems +struct KnowledgeBase { + storage: Box, + embeddings: Option>, + templates: TemplateEngine, +} +``` + +**Benefits**: +- Swap storage without affecting embeddings +- Disable embeddings without breaking storage +- Test components in isolation +- Add new providers by implementing trait + +### 7. Fail Fast, Fail Clearly + +**Principle**: Detect errors early, provide clear messages. + +**Why**: Developer experience - fast feedback, actionable errors. + +**Implementation**: + +```rust +// ❌ Bad: Silent failure +fn load_config(path: &Path) -> Option { + std::fs::read_to_string(path) + .ok() + .and_then(|s| serde_json::from_str(&s).ok()) +} + +// ✅ Good: Explicit errors +fn load_config(path: &Path) -> Result { + let content = std::fs::read_to_string(path) + .map_err(|e| ConfigError::ReadFailed(path.to_path_buf(), e))?; + + serde_json::from_str(&content) + .map_err(|e| ConfigError::ParseFailed(path.to_path_buf(), e)) +} +``` + +**Error messages**: + +```text +❌ "Failed to load config" +✅ "Failed to read config file '/path/to/config.ncl': Permission denied" +``` + +### 8. Convention Over Configuration (With Escape Hatches) + +**Principle**: Sane defaults, but everything customizable. + +**Why**: Easy to start, flexible as you grow. + +**Examples**: + +```nickel +# Minimal config (uses conventions) +{ graph = { name = "my-project" } } +# Defaults: filesystem storage, no embeddings, standard templates + +# Full config (explicit everything) +{ + graph = { name = "my-project" }, + storage = { primary = 'surrealdb, /* ... */ }, + embeddings = { provider = 'openai, /* ... */ }, + templates = { templates_dir = "custom" }, +} +``` + +**Conventions**: +- `.kogral/` directory in project root +- Filesystem storage by default +- YAML frontmatter + markdown body +- Standard template names (note.md.tera, decision.md.tera) + +**Escape hatches**: +- `--kogral-dir` to use different location +- Configure alternative storage backends +- Custom frontmatter schemas +- Override any template + +### 9. Documentation as Code + +**Principle**: Documentation lives with code, versioned together. + +**Why**: Outdated docs are worse than no docs. + +**Implementation**: +- ADRs in `.kogral/decisions/` (alongside code) +- Guidelines in `.kogral/guidelines/` (versioned with code) +- Patterns in `.kogral/patterns/` (evolve with implementations) + +**Benefits**: + +```bash +# Code and docs branch together +git checkout old-version +# .kogral/ reflects that version's decisions + +# Code and docs merge together +git merge feature +# Merge includes new patterns, updated guidelines + +# Code and docs reviewed together +# PR shows code + decision + guideline updates +``` + +### 10. Optimize for Discoverability + +**Principle**: Knowledge is useless if you can't find it. + +**Why**: The point is to **use** knowledge, not just store it. + +**Features**: +- **Text search**: Find exact keywords +- **Semantic search**: Find related concepts +- **Graph traversal**: Follow relationships +- **Tag filtering**: Narrow by category +- **MCP integration**: AI-assisted discovery + +**Example**: + +User doesn't remember exact term, but knows the concept: + +```text +"Find anything about handling errors gracefully" +``` + +KOGRAL finds (semantically): +- "Error Handling with thiserror" (pattern) +- "Result Type Best Practices" (guideline) +- "Panic Recovery" (note) +- "Graceful Degradation" (pattern) + +No exact keyword match needed, concept match sufficient. + +### 11. Build for Humans, Enable AI + +**Principle**: Humans are the primary users, AI is the assistant. + +**Why**: AI should enhance human workflows, not replace them. + +**Implementation**: +- **Human-readable formats**: Markdown, YAML +- **Human-editable**: Any text editor works +- **Human-discoverable**: `ls .kogral/notes/` shows files +- **AI-enhanced**: MCP for AI-assisted queries + +**Example**: + +```bash +# Human workflow +vim .kogral/notes/my-note.md # Edit directly +git add .kogral/notes/my-note.md +git commit -m "Add note about X" + +# AI-enhanced workflow +# (in Claude Code) +"Add a note about X with tags Y, Z" +# AI creates file, human reviews +``` + +### 12. Embrace the Graph + +**Principle**: Knowledge is interconnected, embrace the relationships. + +**Why**: Context comes from connections, not isolation. + +**Implementation**: +- Typed relationships (not just "related") +- Bidirectional traversal +- Relationship strength (0.0-1.0) +- Multi-hop queries + +**Example**: + +```text +Find all patterns that: + - Are implemented by current project + - Depend on shared guidelines + - Were added in the last 6 months + +# Graph query, not sequential file search +``` + +## Anti-Patterns to Avoid + +### 1. ❌ Hardcoding Behavior + +```rust +// Don't +const EMBEDDING_MODEL: &str = "BAAI/bge-small-en-v1.5"; + +// Do +let model = config.embeddings.model.as_str(); +``` + +### 2. ❌ Runtime Schema Validation + +```nickel +// Don't validate at runtime +let provider = config.provider; // Might be invalid + +// Do validate at export time (Nickel contracts) +provider | [| 'openai, 'claude, 'fastembed |] +``` + +### 3. ❌ Opaque Errors + +```rust +// Don't +Err("Failed".into()) + +// Do +Err(KbError::NodeNotFound(id.to_string())) +``` + +### 4. ❌ Coupling Components + +```rust +// Don't +impl KnowledgeBase { + fn search(&self) -> Vec { + let embeddings = FastEmbedProvider::new(); // Hardcoded! + // ... + } +} + +// Do +impl KnowledgeBase { + fn search(&self) -> Vec { + if let Some(provider) = &self.embeddings { + // Use configured provider + } + } +} +``` + +### 5. ❌ Proprietary Formats + +```text +// Don't +Binary blob: [0x4B, 0x42, 0x01, ...] + +// Do +Markdown + YAML: +--- +id: note-1 +--- +# Content +``` + +## Influences + +KOGRAL draws inspiration from: + +- **Logseq**: Outliner, graph view, wikilinks +- **Obsidian**: Markdown-first, local storage, plugins +- **Zettelkasten**: Atomic notes, links, emergence +- **ADR**: Decision records, context preservation +- **Git**: Version control, branching, merging +- **Nickel**: Type-safe configuration, contracts +- **MCP**: AI integration protocol +- **SurrealDB**: Graph database, relationships + +## Implementation Principles + +### Rust + +- Zero unsafe code (`#![forbid(unsafe_code)]`) +- No `unwrap()` in production code +- Always use `Result` for fallibility +- Comprehensive error types with `thiserror` +- Full test coverage (100+ tests) + +### Nickel + +- Contracts for validation +- Defaults in schemas +- Documentation in contracts +- Composition via imports + +### NuShell + +- Structured data pipelines +- Error handling in scripts +- Colored output for UX +- Dry-run modes + +## Evolution Strategy + +KOGRAL follows these guidelines for evolution: + +1. **Backward Compatibility**: Don't break existing configs +2. **Deprecation Period**: Warn before removal (1 major version) +3. **Migration Tools**: Provide automated migrations +4. **Semantic Versioning**: MAJOR.MINOR.PATCH strictly + +## Conclusion + +These principles guide every decision: + +✅ **Config-driven**: Behavior in schemas, not code +✅ **Type-safe**: Validate before runtime +✅ **Local-first**: Works offline, cloud optional +✅ **Git-friendly**: Knowledge versions with code +✅ **AI-native**: Optimized for AI, readable by humans +✅ **Composable**: Small pieces, loosely coupled +✅ **Fast feedback**: Fail early, clear errors +✅ **Discoverable**: Easy to find what you need + +The goal: **Knowledge management that developers actually use.** + +## Next Steps + +- **See it in action**: [Use Cases](../guides/use-cases.md) +- **Understand architecture**: [System Overview](../architecture/overview.md) +- **Start using**: [Quick Start](../guides/quickstart.md) diff --git a/docs/kogral/what-is-kogral.md b/docs/kogral/what-is-kogral.md new file mode 100644 index 0000000..ee98ad9 --- /dev/null +++ b/docs/kogral/what-is-kogral.md @@ -0,0 +1,228 @@ +# What is KOGRAL + +KOGRAL (**KO**wledge **GRA**phs, **L**ocal-first) is a **git-native knowledge graph system** designed for developer teams to capture, connect, and query structured knowledge. + +## Purpose + +KOGRAL solves the problem of **knowledge fragmentation** in software development: + +- 📝 Notes scattered across tools +- 🤔 Decisions lost in chat histories +- 📚 Guidelines buried in wikis +- 🔄 Patterns rediscovered repeatedly +- 🤖 AI agents lacking project context + +## Solution + +KOGRAL provides a **unified, queryable knowledge graph** that: + +1. **Captures** knowledge in structured, git-friendly markdown +2. **Connects** concepts through typed relationships +3. **Queries** via text and semantic similarity +4. **Integrates** with AI tools (Claude Code via MCP) +5. **Syncs** across local (filesystem) and shared (SurrealDB) storage + +## Core Philosophy + +### Config-Driven + +Behavior defined in Nickel schemas, not hardcoded: + +```nickel +{ + graph = { name = "my-project" }, + storage = { primary = 'filesystem }, + embeddings = { provider = 'fastembed }, + templates = { templates_dir = "templates" }, +} +``` + +Every aspect configurable: storage, embeddings, templates, query behavior. + +### Git-Friendly + +Knowledge stored as markdown files with YAML frontmatter: + +```markdown +--- +id: note-123 +type: note +title: Error Handling Patterns +tags: [rust, error-handling] +--- + +# Error Handling Patterns + +Use `thiserror` for custom error types... +``` + +Changes tracked via git, reviewable in PRs, mergeable across branches. + +### AI-Native + +Built for agent collaboration: + +- **MCP Protocol**: Native integration with Claude Code +- **Semantic Search**: Find concepts, not just keywords +- **Auto-Linking**: Suggest relationships based on content +- **Context Injection**: Agents query relevant guidelines before coding + +## Key Concepts + +### Nodes + +6 types of knowledge nodes: + +| Type | Purpose | Example | +| ------ | --------- | --------- | +| **Note** | General observations | "Rust ownership patterns" | +| **Decision** | ADRs (Architectural Decision Records) | "Use SurrealDB for storage" | +| **Guideline** | Code standards | "Error handling with thiserror" | +| **Pattern** | Reusable solutions | "Repository pattern for DB access" | +| **Journal** | Daily reflections | "2026-01-17 progress notes" | +| **Execution** | Agent task records | "Implemented auth module" | + +### Relationships + +6 typed edges connecting nodes: + +| Relation | Meaning | Example | +| ---------- | --------- | --------- | +| `relates_to` | Conceptual link | Note ↔ Note | +| `depends_on` | Prerequisite | Pattern → Guideline | +| `implements` | Concrete realization | Code → Pattern | +| `extends` | Inheritance | ProjectGuideline → BaseGuideline | +| `supersedes` | Replacement | DecisionV2 → DecisionV1 | +| `explains` | Documentation | Note → Execution | + +### Multi-Graph Architecture + +**Local Graph** (per project): +- Stored in `.kogral/` directory +- Git-tracked for version control +- Project-specific knowledge + +**Shared Graph** (organization-wide): +- Centralized guidelines and patterns +- SurrealDB for scalability +- Inherited by projects + +**Inheritance Resolution**: + +```text +Shared Guidelines (priority: 50) + ↓ +Project Guidelines (priority: 100) + ↓ +Effective Guidelines (higher priority wins) +``` + +## Use Cases + +### For Developers + +- **Capture decisions** as you make them (ADRs) +- **Document patterns** for future reference +- **Track daily progress** in journal entries +- **Query past decisions** before new implementations + +### For Teams + +- **Share guidelines** across projects +- **Standardize patterns** organization-wide +- **Onboard new members** with searchable knowledge +- **Review decisions** in context with git history + +### For AI Agents + +- **Query guidelines** before generating code +- **Check past decisions** for context +- **Document executions** for audit trails +- **Suggest related patterns** during implementation + +## Comparison with Other Tools + +### vs. Logseq + +| Feature | KOGRAL | Logseq | +| --------- | -------- | -------- | +| **Storage** | Git-friendly markdown + DB | Local markdown | +| **AI Integration** | Native MCP protocol | Plugin-based | +| **Config** | Type-safe Nickel schemas | JSON files | +| **Multi-Backend** | Filesystem + SurrealDB | Filesystem only | +| **Semantic Search** | Multiple AI providers | Local only | +| **Graph Queries** | SurrealDB graph queries | Block references | + +**Compatibility**: KOGRAL can import/export Logseq graphs for visual editing. + +### vs. Obsidian + +| Feature | KOGRAL | Obsidian | +| --------- | -------- | ---------- | +| **Target Audience** | Developers + AI agents | Knowledge workers | +| **Focus** | Structured knowledge graph | Flexible note-taking | +| **Configuration** | Config-driven (Nickel) | Settings UI | +| **CLI** | Full CLI + MCP server | Limited CLI | +| **Version Control** | Git-native | Git plugin | + +**Use Case**: KOGRAL for developer knowledge, Obsidian for personal notes. + +### vs. Notion/Confluence + +| Feature | KOGRAL | Notion/Confluence | +| --------- | -------- | ------------------- | +| **Storage** | Local-first | Cloud-only | +| **Format** | Plain markdown | Proprietary | +| **AI Access** | Programmatic API | Web scraping | +| **Offline** | Full functionality | Limited | +| **Privacy** | Self-hosted | Third-party servers | + +**Advantage**: KOGRAL keeps sensitive knowledge on-premises. + +## Architecture Overview + +```text +┌─────────────────────────────────────────────────────┐ +│ kogral-core │ +│ (Rust library: graph, storage, config, query) │ +└──────────────┬─────────────┬────────────────────────┘ + │ │ + ┌─────────┴──────┐ ┌──┴─────────┐ + │ │ │ │ +┌────▼─────┐ ┌──────▼──▼───┐ ┌─────▼─────┐ +│ kogral-cli │ │ kogral-mcp │ │ NuShell │ +│ (13 cmds)│ │ (MCP server) │ │ (scripts) │ +└──────────┘ └──────────────┘ └───────────┘ +``` + +**Layers**: +1. **kogral-core**: Core library (models, storage, query) +2. **kogral-cli**: Command-line interface +3. **kogral-mcp**: MCP server for AI integration +4. **Scripts**: NuShell automation (sync, backup, etc.) + +## When to Use KOGRAL + +✅ **Good fit**: +- Developer teams building software +- Projects with architectural decisions +- Organizations standardizing patterns +- AI-assisted development workflows +- Knowledge requiring version control + +❌ **Not ideal for**: +- Personal journaling (use Obsidian) +- Team wikis (use Notion) +- Customer documentation (use mdBook) +- Simple note-taking (use Logseq) + +## Next Steps + +- **New to KOGRAL?** → [Installation Guide](../guides/installation.md) +- **Ready to start?** → [Quick Start](../guides/quickstart.md) +- **Want examples?** → [Use Cases](../guides/use-cases.md) +- **Understand design?** → [Architecture Overview](../architecture/overview.md) + +--- + +> "Knowledge is only valuable when it's accessible, connected, and queryable." diff --git a/docs/kogral/why-kogral.md b/docs/kogral/why-kogral.md new file mode 100644 index 0000000..9c5115b --- /dev/null +++ b/docs/kogral/why-kogral.md @@ -0,0 +1,317 @@ +# Why KB + +Understanding the motivation behind the Knowledge Base system. + +## The Problem: Knowledge Fragmentation + +Modern software development generates enormous amounts of knowledge: + +📝 **Notes**: Implementation details, learnings, discoveries +🤔 **Decisions**: Why we chose X over Y +📚 **Guidelines**: How we write code, architecture patterns +🔄 **Patterns**: Reusable solutions we've discovered +💭 **Discussions**: Slack threads, meeting notes, PR comments +🐛 **Bug Fixes**: How we solved issues + +**But where does this knowledge live?** + +- Meeting notes in Google Docs +- Decisions buried in Slack threads +- Guidelines in a wiki nobody updates +- Patterns in someone's head +- PR discussions lost in GitHub history +- Bug solutions in closed Jira tickets + +**The result?** + +❌ **Rediscovering solutions** to problems we've already solved +❌ **Inconsistent practices** because guidelines aren't accessible +❌ **Slow onboarding** as new developers lack context +❌ **Lost context** when team members leave +❌ **Repeated mistakes** because past lessons aren't preserved + +## The Solution: Unified, Queryable Knowledge Graph + +Knowledge Base provides a **single source of truth** for project knowledge: + +✅ **Capture once**: Notes, decisions, guidelines, patterns +✅ **Connect concepts**: Typed relationships between ideas +✅ **Query naturally**: Text and semantic search +✅ **AI-assisted**: Claude Code integration via MCP +✅ **Git-tracked**: Version control for knowledge +✅ **Shared wisdom**: Organization-wide guidelines + project-specific + +## What Makes KB Different + +### 1. Git-Native + +**Other tools**: Notion, Confluence, wikis in web apps + +**KB**: Markdown files in `.kogral/` directory + +**Benefits**: + +```bash +# Review knowledge changes in PRs +git diff .kogral/decisions/ + +# Branch knowledge with code +git checkout feature-branch +# .kogral/ follows the branch + +# Merge knowledge from feature work +git merge feature-branch +# Knowledge merges like code +``` + +**Result**: Knowledge versioned alongside code it describes. + +### 2. AI-Native + +**Other tools**: Manual search, browse folders + +**KB**: AI queries via Claude Code + +**Example**: + +```text +You: "Find anything about error handling" + +Claude: [Searches semantically, not just keywords] +Found 5 concepts: +- Pattern: Error Handling with thiserror +- Guideline: Result Type Best Practices +- Decision: Use anyhow for Application Errors +- Note: Custom Error Types +- Journal: Fixed error propagation bug + +[All related, even without exact keyword match] +``` + +**Result**: Find concepts, not just documents with keywords. + +### 3. Config-Driven + +**Other tools**: Hardcoded behavior, limited customization + +**KB**: Nickel schemas define everything + +**Example**: + +```nickel +# Development: local embeddings, no costs +{ embeddings = { provider = 'fastembed } } + +# Production: cloud embeddings, best quality +{ embeddings = { provider = 'openai, model = "text-embedding-3-large" } } +``` + +**Result**: Adapt behavior without code changes. + +### 4. Multi-Graph + +**Other tools**: One knowledge base per project + +**KB**: Shared organizational knowledge + project-specific + +**Structure**: + +```text +Organization Shared KB + ├── Rust Guidelines (applies to all projects) + ├── Security Patterns (applies to all projects) + └── Testing Standards (applies to all projects) + +Project A KB + ├── Inherits shared guidelines + ├── Project-specific decisions + └── Can override shared guidelines + +Project B KB + ├── Inherits same shared guidelines + ├── Different project decisions + └── Different overrides +``` + +**Result**: Consistency across organization, flexibility per project. + +### 5. Structured Relationships + +**Other tools**: Backlinks, tags, folders + +**KB**: Typed relationships with meaning + +**Example**: + +```text +Pattern: Repository Pattern + ↑ [implements] +Note: User Service Implementation + ↑ [relates_to] +Decision: Use PostgreSQL + ↑ [depends_on] +Guideline: Database Access Patterns +``` + +**Result**: Understand how knowledge connects, not just that it connects. + +## Real-World Impact + +### Before KB + +**New developer joins**: +1. Read outdated wiki (2 hours) +2. Ask teammates for context (1 hour per question × 10 questions) +3. Discover guidelines by reading code (days) +4. Miss important decisions (leads to mistakes) + +**Time to productivity**: 2-4 weeks + +### With KB + +**New developer joins**: +1. `kogral search "architectural decisions"` → finds all ADRs +2. Ask Claude: "What are our coding guidelines?" → gets current guidelines with inheritance +3. Browse related notes via graph traversal +4. Full context available, no tribal knowledge + +**Time to productivity**: 3-5 days + +### Before KB + +**Team makes decision**: +1. Discussion in Slack (lost after a week) +2. Someone documents in wiki (maybe) +3. 6 months later: "Why did we choose X?" → nobody remembers +4. Re-debate the same decision + +### With KB + +**Team makes decision**: +1. Discussion captured as ADR during meeting +2. Context, decision, consequences documented +3. Linked to related patterns and guidelines +4. 6 months later: `kogral show decision-use-x` → full context instantly + +### Before KB + +**Solving a bug**: +1. Encounter race condition in cache +2. Debug for 2 hours +3. Fix it +4. Solution lost in PR comments + +**Two months later**: Different developer, same bug, 2 more hours + +### With KB + +**Solving a bug**: +1. Encounter race condition +2. Ask Claude: "Have we seen cache race conditions before?" +3. Claude finds journal entry from 2 months ago with solution +4. Apply fix in 10 minutes + +**Two months later**: Same query, same instant solution + +## Who Benefits + +### Individual Developers + +✅ **Personal knowledge base**: Capture learnings, build expertise +✅ **Quick recall**: "How did I solve this before?" +✅ **Context switching**: Return to old projects with full context +✅ **Career growth**: Document what you learn, portfolio of knowledge + +### Teams + +✅ **Shared context**: Everyone has access to team knowledge +✅ **Onboarding**: New members ramp up faster +✅ **Consistency**: Follow shared guidelines and patterns +✅ **Collaboration**: Build on each other's knowledge + +### Organizations + +✅ **Institutional memory**: Knowledge persists beyond individual tenure +✅ **Best practices**: Standardize across teams +✅ **Compliance**: Document security and architecture decisions +✅ **Efficiency**: Stop solving the same problems repeatedly + +### AI Agents + +✅ **Context injection**: Agents query guidelines before generating code +✅ **Decision awareness**: Agents check past decisions +✅ **Pattern following**: Agents use documented patterns +✅ **Execution tracking**: Agent actions documented automatically + +## When NOT to Use KB + +KB is **not** ideal for: + +❌ **Personal journaling**: Use Obsidian or Logseq +❌ **Team wikis**: Use Notion or Confluence +❌ **Customer docs**: Use mdBook or Docusaurus +❌ **Project management**: Use Jira or Linear +❌ **Code comments**: Use inline documentation + +KB is **perfect** for: + +✅ Developer knowledge graphs +✅ Architectural decision records +✅ Pattern libraries +✅ Coding guidelines +✅ Technical context +✅ AI-assisted development + +## The Vision + +**Today's development**: + +```text +Developer → writes code → commits +``` + +**With KB**: + +```text +Developer → writes code → documents decisions → links to patterns → commits code + knowledge + ↓ + AI Agent queries knowledge → generates better code + ↓ + Team discovers patterns → reuses solutions → faster development +``` + +**Knowledge becomes an active participant in development**, not an afterthought. + +## Design Philosophy + +Three core principles drive KB: + +### 1. **Knowledge should be captured during work, not after** + +❌ "I'll document this later" → never happens +✅ "Claude, document this decision" → done in 30 seconds + +### 2. **Knowledge should be connected, not isolated** + +❌ Standalone documents in folders +✅ Graph of interconnected concepts + +### 3. **Knowledge should be queryable, not browsable** + +❌ "Let me look through 50 docs to find..." +✅ "Find anything related to error handling" → instant semantic results + +## Get Started + +Ready to stop losing knowledge? + +- **Understand concepts**: [Core Concepts](core-concepts.md) +- **Learn philosophy**: [Design Philosophy](design-philosophy.md) +- **Quick start**: [Quick Start Guide](../guides/quickstart.md) +- **See examples**: [Use Cases](../guides/use-cases.md) + +--- + +> "The best time to document was during implementation. The second best time is now." + +But with KB + AI, "now" is instant. diff --git a/docs/setup/environment.md b/docs/setup/environment.md new file mode 100644 index 0000000..ebfbf35 --- /dev/null +++ b/docs/setup/environment.md @@ -0,0 +1 @@ +# Environment Configuration diff --git a/docs/setup/installation.md b/docs/setup/installation.md new file mode 100644 index 0000000..fe7ea87 --- /dev/null +++ b/docs/setup/installation.md @@ -0,0 +1 @@ +# Installation Methods diff --git a/docs/setup/prerequisites.md b/docs/setup/prerequisites.md new file mode 100644 index 0000000..6059b91 --- /dev/null +++ b/docs/setup/prerequisites.md @@ -0,0 +1 @@ +# Prerequisites diff --git a/docs/setup/project-init.md b/docs/setup/project-init.md new file mode 100644 index 0000000..7600abe --- /dev/null +++ b/docs/setup/project-init.md @@ -0,0 +1 @@ +# Project Initialization diff --git a/docs/setup/verification.md b/docs/setup/verification.md new file mode 100644 index 0000000..0978386 --- /dev/null +++ b/docs/setup/verification.md @@ -0,0 +1 @@ +# Verification diff --git a/docs/storage/backends.md b/docs/storage/backends.md new file mode 100644 index 0000000..158b01d --- /dev/null +++ b/docs/storage/backends.md @@ -0,0 +1 @@ +# Storage Backends diff --git a/docs/storage/filesystem.md b/docs/storage/filesystem.md new file mode 100644 index 0000000..1789cc8 --- /dev/null +++ b/docs/storage/filesystem.md @@ -0,0 +1 @@ +# Filesystem Storage diff --git a/docs/storage/memory.md b/docs/storage/memory.md new file mode 100644 index 0000000..d80c391 --- /dev/null +++ b/docs/storage/memory.md @@ -0,0 +1 @@ +# In-Memory Storage diff --git a/docs/storage/overview.md b/docs/storage/overview.md new file mode 100644 index 0000000..f91e9a6 --- /dev/null +++ b/docs/storage/overview.md @@ -0,0 +1,639 @@ +# Storage Architecture + +The Knowledge Base uses a **hybrid storage strategy** combining filesystem, SurrealDB, and in-memory backends to balance git-friendliness, scalability, and performance. + +## Overview + +![Storage Architecture](../diagrams/storage-architecture.svg) + +The storage layer is abstracted through a common `Storage` trait, allowing KOGRAL to use different backends based on project needs: + +- **Filesystem**: Git-tracked markdown files for local project knowledge +- **SurrealDB**: Scalable graph database for shared organizational knowledge +- **In-Memory**: Fast ephemeral storage for testing and caching + +## Storage Trait + +All storage backends implement a common async trait: + +```rust +#[async_trait] +pub trait Storage: Send + Sync { + async fn save_node(&self, node: &Node) -> Result<()>; + async fn load_node(&self, id: &str) -> Result; + async fn delete_node(&self, id: &str) -> Result<()>; + async fn list_nodes(&self, node_type: Option) -> Result>; + async fn search(&self, query: &str) -> Result>; + + async fn save_edge(&self, edge: &Edge) -> Result<()>; + async fn load_edges(&self, node_id: &str) -> Result>; + async fn delete_edge(&self, from: &str, to: &str, relation: EdgeType) -> Result<()>; + + async fn save_graph(&self, graph: &Graph) -> Result<()>; + async fn load_graph(&self, name: &str) -> Result; +} +``` + +This abstraction allows: +- ✅ Swapping backends without code changes (config-driven) +- ✅ Testing with in-memory storage +- ✅ Hybrid setups (filesystem + SurrealDB) +- ✅ Custom backends (implement trait + add to config) + +## Filesystem Storage + +### Purpose + +**Git-friendly, human-readable knowledge storage** + +Ideal for: +- Project-specific knowledge +- Version control with git +- Code review of knowledge changes +- Offline work +- Logseq compatibility + +### File Layout + +```text +.kogral/ +├── config.toml # Graph metadata +├── notes/ +│ ├── 2026-01-17-topic.md +│ ├── async-patterns.md +│ └── error-handling.md +├── decisions/ +│ ├── 0001-use-rust.md # ADR format +│ ├── 0002-surrealdb.md +│ └── 0003-nickel-config.md +├── guidelines/ +│ ├── rust-errors.md +│ ├── testing-standards.md +│ └── api-design.md +├── patterns/ +│ ├── repository-pattern.md +│ ├── builder-pattern.md +│ └── async-error-handling.md +└── journal/ + ├── 2026-01-17.md # Daily notes + └── 2026-01-18.md +``` + +### Document Format + +Each document is **markdown with YAML frontmatter**: + +```markdown +--- +id: note-rust-async-traits +type: note +title: Async Trait Patterns in Rust +created: 2026-01-17T10:30:00Z +modified: 2026-01-17T15:45:00Z +tags: [rust, async, traits] +status: active +relates_to: + - pattern-async-error-handling + - guideline-rust-async +depends_on: + - note-rust-basics +project: knowledge-base +--- + +# Async Trait Patterns in Rust + +Using async traits with the `async-trait` crate... + +## Pattern 1: Boxed Futures + +When working with async traits, use `async-trait` to avoid lifetime issues: + +\`\`\`rust +#[async_trait] +trait DataSource { + async fn fetch(&self, id: &str) -> Result; +} +\`\`\` + +## Related Concepts + +See [[pattern-async-error-handling]] for error handling in async contexts. + +Depends on understanding [[note-rust-basics]] first. +``` + +### Features + +**Wikilinks**: `[[other-note]]` automatically creates relationships + +**Code References**: `@src/main.rs:42` links to code locations + +**Git Integration**: +- Diffs show knowledge changes +- Branches for experimental knowledge +- PRs for knowledge review +- History tracking +- Blame shows knowledge authors + +**Logseq Compatibility**: Format is compatible with Logseq for graph visualization + +### Implementation + +```rust +pub struct FilesystemStorage { + root: PathBuf, +} + +impl FilesystemStorage { + pub fn new(root: impl Into) -> Result { + let root = root.into(); + fs::create_dir_all(&root)?; + Ok(Self { root }) + } + + fn node_path(&self, node_type: NodeType, id: &str) -> PathBuf { + let subdir = match node_type { + NodeType::Note => "notes", + NodeType::Decision => "decisions", + NodeType::Guideline => "guidelines", + NodeType::Pattern => "patterns", + NodeType::Journal => "journal", + NodeType::Execution => "executions", + }; + self.root.join(subdir).join(format!("{}.md", id)) + } +} + +#[async_trait] +impl Storage for FilesystemStorage { + async fn save_node(&self, node: &Node) -> Result<()> { + let path = self.node_path(node.node_type, &node.id); + fs::create_dir_all(path.parent().unwrap())?; + + let markdown = format_node_as_markdown(node)?; + fs::write(path, markdown)?; + Ok(()) + } + + async fn load_node(&self, id: &str) -> Result { + // Try each node type directory + for node_type in NodeType::iter() { + let path = self.node_path(node_type, id); + if path.exists() { + let content = fs::read_to_string(path)?; + return parse_markdown_node(&content); + } + } + Err(KbError::NodeNotFound(id.to_string())) + } +} +``` + +### File Watching + +Filesystem storage can watch for changes and auto-sync: + +```rust +use notify::{Watcher, RecursiveMode, Event}; + +impl FilesystemStorage { + pub async fn watch(&self, on_change: impl Fn(Event) + Send + 'static) -> Result<()> { + let (tx, rx) = channel(); + let mut watcher = RecommendedWatcher::new(tx, Config::default())?; + + watcher.watch(&self.root, RecursiveMode::Recursive)?; + + while let Ok(event) = rx.recv() { + on_change(event); + } + Ok(()) + } +} +``` + +## SurrealDB Storage + +### Purpose + +**Scalable graph database for shared organizational knowledge** + +Ideal for: +- Organization-wide guidelines +- Shared patterns library +- Advanced graph queries +- Semantic search with embeddings +- Multi-project knowledge sharing + +### Schema + +SurrealDB schema for nodes and edges: + +```sql +DEFINE TABLE node SCHEMAFULL; + +DEFINE FIELD id ON node TYPE string; +DEFINE FIELD node_type ON node TYPE string ASSERT $value INSIDE ["note", "decision", "guideline", "pattern", "journal", "execution"]; +DEFINE FIELD title ON node TYPE string; +DEFINE FIELD content ON node TYPE string; +DEFINE FIELD tags ON node TYPE array; +DEFINE FIELD status ON node TYPE string; +DEFINE FIELD created ON node TYPE datetime; +DEFINE FIELD modified ON node TYPE datetime; +DEFINE FIELD embedding ON node TYPE array; -- For semantic search + +DEFINE INDEX unique_node_id ON node COLUMNS id UNIQUE; +DEFINE INDEX node_type_idx ON node COLUMNS node_type; +DEFINE INDEX node_tags_idx ON node COLUMNS tags; + +-- Relationship table +DEFINE TABLE edge SCHEMAFULL; + +DEFINE FIELD from ON edge TYPE record(node); +DEFINE FIELD to ON edge TYPE record(node); +DEFINE FIELD relation ON edge TYPE string ASSERT $value INSIDE ["relates_to", "depends_on", "implements", "extends", "supersedes", "explains"]; +DEFINE FIELD strength ON edge TYPE number; +DEFINE FIELD created ON edge TYPE datetime; +``` + +### Graph Queries + +SurrealDB's native graph support enables powerful queries: + +**Find all dependencies** (transitive): + +```sql +SELECT * FROM node:note-id->depends_on->node; +``` + +**Find related guidelines** (2 hops): + +```sql +SELECT * FROM node:guideline-rust-errors<-relates_to<-node<-relates_to<-node; +``` + +**Semantic search** (cosine similarity): + +```sql +SELECT *, vector::similarity::cosine(embedding, $query_embedding) AS score +FROM node +WHERE score > 0.6 +ORDER BY score DESC +LIMIT 10; +``` + +### Implementation + +```rust +use surrealdb::{Surreal, engine::remote::ws::Client}; + +pub struct SurrealDbStorage { + db: Surreal, + namespace: String, + database: String, +} + +impl SurrealDbStorage { + pub async fn new(config: &KbConfig) -> Result { + let db = Surreal::new::(&config.storage.secondary.url).await?; + + db.signin(Root { + username: &config.storage.secondary.username, + password: &config.storage.secondary.password, + }).await?; + + db.use_ns(&config.storage.secondary.namespace) + .use_db(&config.storage.secondary.database) + .await?; + + Ok(Self { + db, + namespace: config.storage.secondary.namespace.clone(), + database: config.storage.secondary.database.clone(), + }) + } +} + +#[async_trait] +impl Storage for SurrealDbStorage { + async fn save_node(&self, node: &Node) -> Result<()> { + let _: Option = self.db + .create(("node", &node.id)) + .content(node) + .await?; + Ok(()) + } + + async fn load_node(&self, id: &str) -> Result { + self.db.select(("node", id)).await? + .ok_or_else(|| KbError::NodeNotFound(id.to_string())) + } + + async fn search(&self, query: &str) -> Result> { + let sql = "SELECT * FROM node WHERE title ~ $query OR content ~ $query"; + let mut result = self.db.query(sql).bind(("query", query)).await?; + let nodes: Vec = result.take(0)?; + Ok(nodes) + } +} +``` + +### Multi-Tenancy + +SurrealDB supports namespaces and databases for isolation: + +```text +Namespace: "kb" +├── Database: "shared" (organization-wide) +│ └── Nodes: guidelines, patterns, policies +└── Database: "project-foo" (project-specific) + └── Nodes: project decisions, local notes +``` + +Configuration: + +```nickel +storage = { + secondary = { + enabled = true, + namespace = "kogral", + database = "shared", # or "project-foo" for project-specific + }, +} +``` + +## In-Memory Storage + +### Purpose + +**Fast ephemeral storage for testing and caching** + +Ideal for: +- Unit tests (isolated, deterministic) +- Integration tests (fast setup/teardown) +- Session caching (temporary graphs) +- Development mode (rapid iteration) + +### Implementation + +```rust +use dashmap::DashMap; + +pub struct MemoryStorage { + nodes: DashMap, + edges: DashMap<(String, String, EdgeType), Edge>, +} + +impl MemoryStorage { + pub fn new() -> Self { + Self { + nodes: DashMap::new(), + edges: DashMap::new(), + } + } +} + +#[async_trait] +impl Storage for MemoryStorage { + async fn save_node(&self, node: &Node) -> Result<()> { + self.nodes.insert(node.id.clone(), node.clone()); + Ok(()) + } + + async fn load_node(&self, id: &str) -> Result { + self.nodes.get(id) + .map(|entry| entry.value().clone()) + .ok_or_else(|| KbError::NodeNotFound(id.to_string())) + } + + async fn list_nodes(&self, node_type: Option) -> Result> { + Ok(self.nodes.iter() + .filter(|entry| { + node_type.map_or(true, |t| entry.value().node_type == t) + }) + .map(|entry| entry.key().clone()) + .collect()) + } + + async fn search(&self, query: &str) -> Result> { + Ok(self.nodes.iter() + .filter(|entry| { + let node = entry.value(); + node.title.contains(query) || + node.content.contains(query) || + node.tags.iter().any(|tag| tag.contains(query)) + }) + .map(|entry| entry.value().clone()) + .collect()) + } +} +``` + +### Concurrency + +`DashMap` provides lock-free concurrent access: + +```rust +// Multiple threads can read/write simultaneously +let storage = Arc::new(MemoryStorage::new()); + +tokio::spawn({ + let storage = storage.clone(); + async move { + storage.save_node(&node1).await.unwrap(); + } +}); + +tokio::spawn({ + let storage = storage.clone(); + async move { + storage.save_node(&node2).await.unwrap(); + } +}); +``` + +## Hybrid Storage Strategy + +### Architecture + +Combine filesystem and SurrealDB for best of both worlds: + +```text +Project Graph (local) Shared Graph (central) + ↓ ↓ +Filesystem Storage SurrealDB Storage + .kogral/notes/ namespace: "kb" + .kogral/decisions/ database: "shared" + .kogral/guidelines/ nodes: shared guidelines + ↓ ↓ + └─────── Sync Mechanism ─────────┘ + (bidirectional) +``` + +**Local advantages**: +- Git-tracked (version control) +- Offline work +- Fast local queries +- Human-readable diffs + +**Central advantages**: +- Shared across projects +- Advanced graph queries +- Semantic search at scale +- Organization-wide knowledge + +### Sync Mechanism + +Bidirectional synchronization keeps both in sync: + +```rust +pub struct SyncManager { + filesystem: Arc, + surrealdb: Arc, + config: SyncConfig, +} + +impl SyncManager { + pub async fn sync_to_central(&self) -> Result<()> { + let nodes = self.filesystem.list_nodes(None).await?; + + for node_id in nodes { + let node = self.filesystem.load_node(&node_id).await?; + self.surrealdb.save_node(&node).await?; + } + + Ok(()) + } + + pub async fn sync_from_central(&self) -> Result<()> { + let nodes = self.surrealdb.list_nodes(None).await?; + + for node_id in nodes { + let node = self.surrealdb.load_node(&node_id).await?; + self.filesystem.save_node(&node).await?; + } + + Ok(()) + } + + pub async fn watch_and_sync(&self) -> Result<()> { + self.filesystem.watch(|event| { + if let Some(path) = event.path { + // Debounce and sync changed file + tokio::spawn(async move { + sleep(Duration::from_millis(self.config.debounce_ms)).await; + self.sync_to_central().await + }); + } + }).await + } +} +``` + +### Conflict Resolution + +When both storage have different versions of the same node: + +**Strategy 1: Last-Write-Wins** (based on `modified` timestamp) + +```rust +if filesystem_node.modified > surrealdb_node.modified { + surrealdb.save_node(&filesystem_node).await?; +} else { + filesystem.save_node(&surrealdb_node).await?; +} +``` + +**Strategy 2: User Prompt** (safe, explicit) + +```rust +if filesystem_node != surrealdb_node { + match prompt_user(&filesystem_node, &surrealdb_node)? { + Choice::KeepLocal => surrealdb.save_node(&filesystem_node).await?, + Choice::KeepCentral => filesystem.save_node(&surrealdb_node).await?, + Choice::Merge => /* merge and save */, + } +} +``` + +**Strategy 3: Both** (create branches) + +```rust +// Save both as separate nodes with relationship +filesystem_node.id = format!("{}-local", original_id); +surrealdb_node.id = format!("{}-central", original_id); +storage.save_node(&filesystem_node).await?; +storage.save_node(&surrealdb_node).await?; +storage.save_edge(&Edge { + from: filesystem_node.id, + to: surrealdb_node.id, + relation: EdgeType::RelatesTo, + strength: 1.0, +}).await?; +``` + +## Configuration + +Storage backend is selected via config: + +```nickel +{ + storage = { + # Primary storage (always used) + primary = 'filesystem, # or 'memory, 'surrealdb + + # Secondary storage (optional, for hybrid setup) + secondary = { + enabled = true, # Enable SurrealDB + type = 'surrealdb, + url = "ws://localhost:8000", + namespace = "kogral", + database = "shared", + username = "root", # Or from env var + password = "root", + }, + }, + + sync = { + auto_index = true, # Auto-sync to secondary + debounce_ms = 500, # Wait before syncing + watch_paths = ["notes", "decisions", "guidelines"], + }, +} +``` + +## Performance Considerations + +### Filesystem Storage + +- **Read**: O(1) if ID known, O(n) for scanning +- **Write**: Fast (single file write) +- **Search**: O(n) text scan, slow for large graphs +- **Optimization**: Use file system cache, lazy load + +### SurrealDB Storage + +- **Read**: O(log n) with indexes +- **Write**: Fast with async commits +- **Search**: O(1) with full-text index +- **Graph traversal**: Optimized with native graph support +- **Optimization**: Index on tags, node_type, embeddings + +### In-Memory Storage + +- **Read**: O(1) with DashMap +- **Write**: O(1) lock-free +- **Search**: O(n) iteration +- **Memory**: Entire graph in RAM + +## Security + +- **Filesystem**: Unix permissions, path sanitization +- **SurrealDB**: Authentication, namespaces, TLS +- **In-Memory**: Process isolation, no persistence + +## See Also + +- **Configuration**: [Storage Configuration](../config/storage.md) +- **Sync Guide**: [Filesystem ↔ SurrealDB Sync](sync.md) +- **ADR**: [Hybrid Storage Decision](../architecture/adrs/003-hybrid-storage.md) +- **API Reference**: [Storage Trait Documentation](../api/storage-trait.md) diff --git a/docs/storage/surrealdb.md b/docs/storage/surrealdb.md new file mode 100644 index 0000000..df50e78 --- /dev/null +++ b/docs/storage/surrealdb.md @@ -0,0 +1 @@ +# SurrealDB Storage diff --git a/docs/storage/sync.md b/docs/storage/sync.md new file mode 100644 index 0000000..47aeeda --- /dev/null +++ b/docs/storage/sync.md @@ -0,0 +1 @@ +# Sync Strategies diff --git a/docs/templates/customization.md b/docs/templates/customization.md new file mode 100644 index 0000000..90570e9 --- /dev/null +++ b/docs/templates/customization.md @@ -0,0 +1 @@ +# Customization diff --git a/docs/templates/documents.md b/docs/templates/documents.md new file mode 100644 index 0000000..af02e95 --- /dev/null +++ b/docs/templates/documents.md @@ -0,0 +1 @@ +# Document Templates diff --git a/docs/templates/export.md b/docs/templates/export.md new file mode 100644 index 0000000..53ac436 --- /dev/null +++ b/docs/templates/export.md @@ -0,0 +1 @@ +# Export Templates diff --git a/docs/templates/overview.md b/docs/templates/overview.md new file mode 100644 index 0000000..1da30f8 --- /dev/null +++ b/docs/templates/overview.md @@ -0,0 +1 @@ +# Template System diff --git a/docs/user-guide/README.md b/docs/user-guide/README.md new file mode 100644 index 0000000..5135589 --- /dev/null +++ b/docs/user-guide/README.md @@ -0,0 +1,36 @@ +# User Guide + +Comprehensive guides for using the KOGRAL. + +## Getting Started + +- [Quick Start](quickstart.md) - Get up and running in 5 minutes +- [Configuration](configuration.md) - Configure your knowledge base +- [CLI Commands](cli-commands.md) - Command-line interface reference + +## Working with Documents + +- [Document Format](document-format.md) - Markdown and frontmatter syntax +- [Node Types](node-types.md) - Notes, Decisions, Guidelines, Patterns, Journal +- [Relationships](relationships.md) - Linking nodes together +- [Templates](templates.md) - Using and customizing document templates + +## Integration + +- [Logseq Integration](logseq-integration.md) - Import/export with Logseq +- [Claude Code Integration](claude-code-integration.md) - MCP server usage +- [Git Workflows](git-workflows.md) - Version control best practices + +## Advanced Usage + +- [Search and Query](search-and-query.md) - Text and semantic search +- [Cross-Project Knowledge](cross-project-knowledge.md) - Shared guidelines and patterns +- [Automation](automation.md) - NuShell scripts and workflows +- [Maintenance](maintenance.md) - Backup, sync, and migration + +## Workflows + +- [Daily Notes](workflows/daily-notes.md) - Journal entries and reflection +- [Decision Records](workflows/decision-records.md) - Architectural Decision Records (ADR) +- [Pattern Library](workflows/pattern-library.md) - Building reusable patterns +- [Guideline Management](workflows/guideline-management.md) - Code standards and practices diff --git a/docs/user-guide/configuration.md b/docs/user-guide/configuration.md new file mode 100644 index 0000000..c4d9391 --- /dev/null +++ b/docs/user-guide/configuration.md @@ -0,0 +1,635 @@ +# Configuration Reference + +Complete reference for configuring the KOGRAL using Nickel schemas. + +## Configuration Files + +The knowledge base uses Nickel (`.ncl`) for configuration with type-safe schemas: + +```text +.kogral/ +└── config.ncl # Main configuration file +``` + +Configuration is exported to JSON and loaded into Rust structs with double validation. + +## Quick Configuration + +### Minimal Configuration + +```nickel +# .kogral/config.ncl +{ + graph = { + name = "My Project", + version = "1.0.0", + }, +} +``` + +### Recommended Configuration + +```nickel +{ + graph = { + name = "My Project", + version = "1.0.0", + description = "Project knowledge base", + }, + + storage = { + primary = 'filesystem, + }, + + embeddings = { + enabled = true, + provider = 'fastembed, + }, + + sync = { + auto_index = true, + }, +} +``` + +### Production Configuration + +```nickel +{ + graph = { + name = "Production Project", + version = "2.1.0", + description = "Production knowledge base with full features", + }, + + inheritance = { + base = "/Users/Akasha/Tools/.kogral-shared", + priority = 100, + }, + + storage = { + primary = 'filesystem, + secondary = { + enabled = true, + type = 'surrealdb, + url = "ws://db.example.com:8000", + namespace = "kogral", + database = "production", + }, + }, + + embeddings = { + enabled = true, + provider = 'openai, + model = "text-embedding-3-large", + api_key_env = "OPENAI_API_KEY", + }, + + query = { + similarity_threshold = 0.6, + max_results = 20, + cross_graph = true, + }, + + mcp = { + server = { + name = "production-kogral-mcp", + transport = 'stdio, + }, + tools = { + search = true, + add_note = true, + export = true, + }, + }, + + sync = { + auto_index = true, + watch_paths = ["notes", "decisions", "guidelines", "patterns"], + debounce_ms = 1000, + }, +} +``` + +## Configuration Sections + +### Graph Configuration + +Basic graph metadata: + +```nickel +graph = { + name | String, + version | String | default = "1.0.0", + description | String | default = "", +} +``` + +**Fields**: + +- `name` (required): Graph name identifier +- `version` (optional): Semantic version string (default: "1.0.0") +- `description` (optional): Human-readable description + +**Example**: + +```nickel +graph = { + name = "vapora-knowledge", + version = "1.2.0", + description = "Vapora project knowledge base", +} +``` + +### Inheritance Configuration + +Inherit guidelines and patterns from shared knowledge bases: + +```nickel +inheritance = { + base | String | default = "/Users/Akasha/Tools/.kogral-shared", + guidelines | Array String | default = [], + priority | Number | default = 100, +} +``` + +**Fields**: + +- `base`: Path to shared KOGRAL directory +- `guidelines`: Additional guideline paths to inherit +- `priority`: Override priority (higher wins) + +**Example**: + +```nickel +inheritance = { + base = "~/Tools/.kogral-shared", + guidelines = [ + "~/Tools/.claude/guidelines/rust", + "~/Tools/.claude/guidelines/nushell", + ], + priority = 150, # Project overrides shared +} +``` + +**Priority Rules**: +- 0-99: Shared guidelines (lowest priority) +- 100-199: Project guidelines (default) +- 200+: Critical project overrides + +### Storage Configuration + +Configure storage backends: + +```nickel +storage = { + primary | [| 'filesystem, 'memory |] | default = 'filesystem, + + secondary | { + enabled | Bool | default = false, + type | [| 'surrealdb, 'sqlite |] | default = 'surrealdb, + url | String | default = "ws://localhost:8000", + namespace | String | default = "kb", + database | String | default = "default", + } | default = {}, +} +``` + +**Fields**: + +- `primary`: Primary storage backend (`filesystem` or `memory`) +- `secondary.enabled`: Enable secondary backend for sync +- `secondary.type`: Secondary backend type +- `secondary.url`: Connection URL for SurrealDB +- `secondary.namespace`: SurrealDB namespace +- `secondary.database`: SurrealDB database name + +**Examples**: + +```nickel +# Filesystem only (default) +storage = { + primary = 'filesystem, +} + +# Filesystem with SurrealDB sync +storage = { + primary = 'filesystem, + secondary = { + enabled = true, + type = 'surrealdb, + url = "ws://localhost:8000", + namespace = "kogral", + database = "myproject", + }, +} + +# In-memory (development/testing) +storage = { + primary = 'memory, +} +``` + +### Embeddings Configuration + +Configure semantic search and embeddings: + +```nickel +embeddings = { + enabled | Bool | default = true, + provider | [| 'openai, 'claude, 'ollama, 'fastembed |] | default = 'fastembed, + model | String | default = "BAAI/bge-small-en-v1.5", + dimensions | Number | default = 384, + api_key_env | String | default = "OPENAI_API_KEY", +} +``` + +**Fields**: + +- `enabled`: Enable embedding generation +- `provider`: Embedding provider +- `model`: Model name/identifier +- `dimensions`: Embedding vector dimensions +- `api_key_env`: Environment variable for API key + +**Provider-Specific Settings**: + +**OpenAI**: + +```nickel +embeddings = { + enabled = true, + provider = 'openai, + model = "text-embedding-3-small", # or text-embedding-3-large + dimensions = 1536, + api_key_env = "OPENAI_API_KEY", +} +``` + +**Claude (Anthropic)**: + +```nickel +embeddings = { + enabled = true, + provider = 'claude, + model = "claude-3-embedding", + api_key_env = "ANTHROPIC_API_KEY", +} +``` + +**Ollama (local)**: + +```nickel +embeddings = { + enabled = true, + provider = 'ollama, + model = "nomic-embed-text", + dimensions = 768, +} +``` + +**fastembed (local)**: + +```nickel +embeddings = { + enabled = true, + provider = 'fastembed, + model = "BAAI/bge-small-en-v1.5", # or BAAI/bge-base-en-v1.5 + dimensions = 384, # 384 for small, 768 for base +} +``` + +### Template Configuration + +Configure document templates: + +```nickel +templates = { + templates_dir | String | default = "templates", + + templates | { + note | String | default = "note.md.tera", + decision | String | default = "decision.md.tera", + guideline | String | default = "guideline.md.tera", + pattern | String | default = "pattern.md.tera", + journal | String | default = "journal.md.tera", + execution | String | default = "execution.md.tera", + } | default = {}, + + export | { + logseq_page | String | default = "export/logseq-page.md.tera", + logseq_journal | String | default = "export/logseq-journal.md.tera", + summary | String | default = "export/summary.md.tera", + json | String | default = "export/graph.json.tera", + } | default = {}, + + custom | { _ | String } | default = {}, +} +``` + +**Fields**: + +- `templates_dir`: Directory containing templates +- `templates.*`: Template files for each node type +- `export.*`: Export format templates +- `custom`: Custom template registry + +**Example**: + +```nickel +templates = { + templates_dir = "custom-templates", + + templates = { + note = "my-note-template.md.tera", + journal = "daily-standup.md.tera", + }, + + custom = { + "meeting-notes" = "meeting-notes.md.tera", + "retrospective" = "retro.md.tera", + }, +} +``` + +### Query Configuration + +Configure search and query behavior: + +```nickel +query = { + similarity_threshold | Number | default = 0.4, + max_results | Number | default = 10, + recency_weight | Number | default = 3.0, + cross_graph | Bool | default = true, +} +``` + +**Fields**: + +- `similarity_threshold`: Minimum similarity for semantic matches (0-1) +- `max_results`: Maximum results to return +- `recency_weight`: Weight factor for recent documents +- `cross_graph`: Enable cross-graph queries + +**Example**: + +```nickel +query = { + similarity_threshold = 0.6, # Higher = more strict + max_results = 20, + recency_weight = 5.0, # Strongly prefer recent + cross_graph = true, # Search shared KOGRAL too +} +``` + +**Similarity Threshold Guide**: +- 0.0-0.3: Very loose (many false positives) +- 0.4-0.6: Balanced (recommended) +- 0.7-0.9: Strict (high precision) +- 0.9-1.0: Exact matches only + +### MCP Configuration + +Configure Model Context Protocol server: + +```nickel +mcp = { + server | { + name | String | default = "kogral-mcp", + version | String | default = "1.0.0", + transport | [| 'stdio, 'sse |] | default = 'stdio, + }, + + tools | { + search | Bool | default = true, + add_note | Bool | default = true, + add_decision | Bool | default = true, + link | Bool | default = true, + get_guidelines | Bool | default = true, + export | Bool | default = true, + } | default = {}, + + resources | { + expose_project | Bool | default = true, + expose_shared | Bool | default = true, + } | default = {}, +} +``` + +**Fields**: + +- `server.name`: MCP server identifier +- `server.transport`: Communication transport +- `tools.*`: Enable/disable specific tools +- `resources.*`: Expose resources + +**Example**: + +```nickel +mcp = { + server = { + name = "myproject-kogral-mcp", + transport = 'stdio, + }, + + tools = { + search = true, + add_note = true, + add_decision = false, # Disable if not needed + link = true, + get_guidelines = true, + export = true, + }, + + resources = { + expose_project = true, + expose_shared = false, # Hide shared KOGRAL + }, +} +``` + +### Sync Configuration + +Configure filesystem synchronization: + +```nickel +sync = { + auto_index | Bool | default = true, + watch_paths | Array String | default = ["notes", "decisions", "guidelines", "patterns", "journal"], + debounce_ms | Number | default = 500, +} +``` + +**Fields**: + +- `auto_index`: Automatically sync filesystem to storage +- `watch_paths`: Directories to watch for changes +- `debounce_ms`: Debounce delay for file system events + +**Example**: + +```nickel +sync = { + auto_index = true, + watch_paths = ["notes", "decisions", "guidelines"], # Exclude journal + debounce_ms = 1000, # 1 second debounce +} +``` + +## Environment Variables + +Some settings support environment variable expansion: + +| Variable | Purpose | Example | +| ---------- | --------- | --------- | +| `OPENAI_API_KEY` | OpenAI API authentication | `sk-...` | +| `ANTHROPIC_API_KEY` | Anthropic API authentication | `sk-ant-...` | +| `OLLAMA_API_BASE` | Ollama server URL | `http://localhost:11434` | +| `KOGRAL_SHARED_BASE` | Shared KOGRAL location | `~/Tools/.kogral-shared` | + +**Usage in config**: + +```nickel +embeddings = { + api_key_env = "OPENAI_API_KEY", # References environment variable +} +``` + +## Configuration Validation + +Validate configuration before use: + +```bash +# Export and validate +nickel export --format json .kogral/config.ncl + +# Test configuration +kogral config validate + +# Show effective configuration +kogral config show +``` + +## Configuration Inheritance + +Configurations can be composed: + +```nickel +# base.ncl +let BaseConfig = { + graph = { version = "1.0.0" }, + storage = { primary = 'filesystem }, +} + +# project-config.ncl +let base = import "base.ncl" in +base & { + graph = { + name = "My Project", + }, + embeddings = { + enabled = true, + }, +} +``` + +## Migration Guide + +### From TOML to Nickel + +Old TOML config: + +```toml +[graph] +name = "my-project" +version = "1.0.0" + +[embeddings] +enabled = true +provider = "fastembed" +``` + +New Nickel config: + +```nickel +{ + graph = { + name = "my-project", + version = "1.0.0", + }, + + embeddings = { + enabled = true, + provider = 'fastembed, + }, +} +``` + +## Advanced Patterns + +### Conditional Configuration + +```nickel +let is_production = std.string.is_match "prod" (std.env.get "ENV") in +{ + embeddings = { + provider = if is_production then 'openai else 'fastembed, + }, +} +``` + +### Configuration per Environment + +```nickel +# config/dev.ncl +{ embeddings = { provider = 'fastembed } } + +# config/prod.ncl +{ embeddings = { provider = 'openai } } + +# .kogral/config.ncl +let env = std.env.get_or_default "ENV" "dev" in +import ("config/" ++ env ++ ".ncl") +``` + +## Troubleshooting + +### Syntax Errors + +```bash +# Check Nickel syntax +nickel typecheck .kogral/config.ncl + +# Pretty-print to find errors +nickel export --format json .kogral/config.ncl | jq +``` + +### Schema Validation Failed + +Ensure all required fields are present: + +```nickel +# This will fail (missing name) +{ graph = { version = "1.0.0" } } + +# This works +{ graph = { name = "project", version = "1.0.0" } } +``` + +### Type Errors + +```nickel +# Wrong: string instead of enum +{ storage = { primary = "filesystem" } } # Error! + +# Correct: enum variant +{ storage = { primary = 'filesystem } } # Success +``` + +## See Also + +- [Nickel Language Documentation](https://nickel-lang.org/user-manual) +- [schemas/kogral-config.ncl](../../schemas/kogral-config.ncl) - Full schema definition +- [config/defaults.ncl](../../config/defaults.ncl) - Default configuration +- [config/production.ncl](../../config/production.ncl) - Production example
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    +

    Best Practices

    + +
    + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +